diff --git a/.gitmodules b/.gitmodules
index dc85288f252..83c24e9a7d8 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -5,3 +5,15 @@
path = external/qooxdoo
url = https://github.com/CometVisu/qooxdoo.git
branch = cometvisu
+[submodule "external/qx-osparc-theme"]
+ path = external/qx-osparc-theme
+ url = https://github.com/peuter/qx-osparc-theme.git
+[submodule "external/qx-iconfont-material"]
+ path = external/qx-iconfont-material
+ url = https://github.com/peuter/qx-iconfont-material.git
+[submodule "external/qx-contrib-dialog"]
+ path = external/qx-contrib-dialog
+ url = https://github.com/cboulanger/qx-contrib-Dialog.git
+[submodule "external/qx-upload-manager"]
+ path = external/qx-upload-manager
+ url = https://github.com/johnspackman/UploadMgr.git
diff --git a/.jshintignore b/.jshintignore
new file mode 100644
index 00000000000..5d77295cbfb
--- /dev/null
+++ b/.jshintignore
@@ -0,0 +1 @@
+source/rest
\ No newline at end of file
diff --git a/.jshintrc b/.jshintrc
index a4a7ee0896b..16b032193c6 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -16,6 +16,7 @@
"smarttabs": true,
"multistr": true,
"jasmine": true,
+ "worker": true,
"globals": {
"browser": false,
"describe": false,
@@ -47,6 +48,12 @@
"EVENT_RECORDER": true,
"DOMWindow": false,
"Favico": false,
- "Sentry": true
+ "Sentry": true,
+ "osparc": true,
+ "monaco": true,
+ "CRC32": true,
+ "xmllint": true,
+ "dialog": true,
+ "com": true
}
}
\ No newline at end of file
diff --git a/config.json b/config.json
index c457a9a071b..810f6f30ddc 100644
--- a/config.json
+++ b/config.json
@@ -36,7 +36,8 @@
"validate-config",
"validate-manifest",
"watch",
- "profile"
+ "profile",
+ "make-font-map"
],
"default-job" : "source-hybrid",
@@ -100,7 +101,8 @@
"svg4everybody",
"EVENT_RECORDER",
"Favico",
- "Sentry"
+ "Sentry",
+ "Promise"
]
},
@@ -172,7 +174,23 @@
{
"library" :
[
- { "manifest" : "client/Manifest.json" }
+ { "manifest" : "client/Manifest.json" },
+ {
+ "manifest" : "external/qx-iconfont-material/Manifest.json",
+ "uri" : "../external/qx-iconfont-material"
+ },
+ {
+ "manifest" : "external/qx-osparc-theme/Manifest.json",
+ "uri" : "../external/qx-osparc-theme"
+ },
+ {
+ "manifest" : "external/qx-contrib-dialog/Manifest.json",
+ "uri" : "../external/qx-contrib-dialog"
+ },
+ {
+ "manifest" : "external/qx-upload-manager/Manifest.json",
+ "uri" : "../external/qx-upload-manager"
+ }
]
},
@@ -198,6 +216,7 @@
{
// "verifier-bombs-on-error" : false,
// "separate-loader" : true,
+ "i18n-as-parts": true,
"parts" :
{
"boot" :
@@ -213,6 +232,10 @@
"include": [ "${APPLICATION}.ui.structure.pure.*" ]
},
+ "manager": {
+ "include": [ "${APPLICATION}.ui.manager.Main" ]
+ },
+
"plugin-diagram" :
{
"include" : [ "${APPLICATION}.plugins.diagram.*" ]
@@ -283,7 +306,7 @@
},
"plugin-openhab" :
{
- "include" : [ "${APPLICATION}.plugins.openhab.*", "${QXTHEME}" ]
+ "include" : [ "${APPLICATION}.plugins.openhab.*" ]
}
}
}
@@ -520,6 +543,30 @@
{
"qx.aspects" : true
}
+ },
+
+ "make-font-map" :
+ {
+ "desc" : "Build a font mapping from glyphname to unicode id",
+
+ "let" :
+ {
+ "RESPATH" : "./external/qx-iconfont-material/source/resource",
+ "QXRESPATH" : "${QOOXDOO_PATH}/framework/source/resource"
+ },
+
+ "font-map" :
+ {
+ "fonts" :
+ {
+ "${RESPATH}/iconfont/material/MaterialIcons-Regular.ttf" :
+ {
+ "prefix": [ "${RESPATH}" ],
+ "alias" : "MaterialIcons",
+ "size" : 32
+ }
+ }
+ }
}
}
}
diff --git a/external/qooxdoo b/external/qooxdoo
index 69366cee89b..3dc93207238 160000
--- a/external/qooxdoo
+++ b/external/qooxdoo
@@ -1 +1 @@
-Subproject commit 69366cee89bca5972bf0b7350bfe85ec7f4f5ba0
+Subproject commit 3dc93207238ca2f5a3f05de6efdd912389915fe9
diff --git a/external/qx-contrib-dialog b/external/qx-contrib-dialog
new file mode 160000
index 00000000000..d9f9c4f74b1
--- /dev/null
+++ b/external/qx-contrib-dialog
@@ -0,0 +1 @@
+Subproject commit d9f9c4f74b1e745bab0c3b5864bf52ae2500867a
diff --git a/external/qx-iconfont-material b/external/qx-iconfont-material
new file mode 160000
index 00000000000..de2cd99c35e
--- /dev/null
+++ b/external/qx-iconfont-material
@@ -0,0 +1 @@
+Subproject commit de2cd99c35e7a45ed66ba66506011b99f5afa656
diff --git a/external/qx-osparc-theme b/external/qx-osparc-theme
new file mode 160000
index 00000000000..8154f05a2dc
--- /dev/null
+++ b/external/qx-osparc-theme
@@ -0,0 +1 @@
+Subproject commit 8154f05a2dc5fd1f2d844121036f51acc15f43da
diff --git a/external/qx-upload-manager b/external/qx-upload-manager
new file mode 160000
index 00000000000..66dfe2def73
--- /dev/null
+++ b/external/qx-upload-manager
@@ -0,0 +1 @@
+Subproject commit 66dfe2def73e673a7fcb7bb42043fee65cd267e8
diff --git a/package-lock.json b/package-lock.json
index ee113538739..8709fcaefc5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,63 +1,63 @@
{
"name": "CometVisu",
- "version": "0.11.0-dev",
+ "version": "0.12.0-dev",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@sentry/browser": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-4.3.4.tgz",
- "integrity": "sha512-odRXxnhcSYzyR4YvTolNEyrz3fdDVw308l+9RBRJA9yOFVlezaz1mXH6Gv00F7cIj9yE/JtezDyhP339WsWy3w==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.4.2.tgz",
+ "integrity": "sha512-km1lf9jYlNTLDUAEoopisUA3+pa9+bYi7aXy8jR5OuDsLDo+mUACTXaRu62iNiEPgBtDO9dg8jz2ZhjwriNUug==",
"requires": {
- "@sentry/core": "4.3.4",
- "@sentry/types": "4.3.4",
- "@sentry/utils": "4.3.4",
+ "@sentry/core": "5.4.2",
+ "@sentry/types": "5.4.2",
+ "@sentry/utils": "5.4.2",
"tslib": "^1.9.3"
}
},
"@sentry/core": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-4.3.4.tgz",
- "integrity": "sha512-KwolQmAnXiFMeXBuxPUM8fW+2bOICdHfpjdf83qD7WSeuKqGvXhxXyApWNSLE+l2DPO6/8UKnIGmR8bEn0G7QA==",
- "requires": {
- "@sentry/hub": "4.3.4",
- "@sentry/minimal": "4.3.4",
- "@sentry/types": "4.3.4",
- "@sentry/utils": "4.3.4",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.4.2.tgz",
+ "integrity": "sha512-B7AwuWKOziozLNXbgCXNHBminh4R+q/h19CSX7Cz0awiRKsKcuIK4iBsTd+b+tiKfkPYayxi337eZchdbg/rPQ==",
+ "requires": {
+ "@sentry/hub": "5.4.2",
+ "@sentry/minimal": "5.4.2",
+ "@sentry/types": "5.4.2",
+ "@sentry/utils": "5.4.2",
"tslib": "^1.9.3"
}
},
"@sentry/hub": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-4.3.4.tgz",
- "integrity": "sha512-vaBGCnhinLB8N4aQLMiPPhnlTkIUwU/dxWzw/xsuKY3MYWrmfMUyWgMZF60Mz3B4F0lW1lsg5jnJz9xPnjZowg==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.4.2.tgz",
+ "integrity": "sha512-2iS1TxiLsSj0Vc1QUw57uM8FDmVs7reYEwjCEX8+ihmemO2OoPpGeqsG9e3MRNcZp3RDkv87Pon8gOKrXhvOPA==",
"requires": {
- "@sentry/types": "4.3.4",
- "@sentry/utils": "4.3.4",
+ "@sentry/types": "5.4.2",
+ "@sentry/utils": "5.4.2",
"tslib": "^1.9.3"
}
},
"@sentry/minimal": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-4.3.4.tgz",
- "integrity": "sha512-EBmQgdAQgxkhWFsBO4TmsP3cg5yTzg48HmPe3Dyt7PtF5Umw3DFW6qboAqnN1+KF+pHNuxkqevvgBTFp7b4Saw==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.4.2.tgz",
+ "integrity": "sha512-9fVm/IZvC8Mxxp2vW5M9vCWlyP6V7Ba0qhEQ8PkUOC8MEKQUm0dFlEyPek2PdYueyi8+XHTk4txCHphzS/lJSg==",
"requires": {
- "@sentry/hub": "4.3.4",
- "@sentry/types": "4.3.4",
+ "@sentry/hub": "5.4.2",
+ "@sentry/types": "5.4.2",
"tslib": "^1.9.3"
}
},
"@sentry/types": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-4.3.4.tgz",
- "integrity": "sha512-qsqrcyNilpbzYjqef+km0Grh5BckSFD4MUdJDNkUE5XU/ImniYddj18bMDlQxluJlTPDjUFQ37FXtEmxLeOwkQ=="
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.4.2.tgz",
+ "integrity": "sha512-yh1fd7x5lLOIZ8W3A1I792B3jowJVCWp4HcTRikjTsjbF8lcURY62m+hiLYUFPTIX99AlFRIPiApDkWiwMGYMA=="
},
"@sentry/utils": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-4.3.4.tgz",
- "integrity": "sha512-CMGMdIv5RHUCKRF4aWPZ/gFRTfBQpLVVJEGCeFGZLXHBdpgQac0lf3jlu8sND0KZ0S3C5x3tGS/eEqmOZRQ/pw==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.4.2.tgz",
+ "integrity": "sha512-AW7/TGt2HiPQB8lJ8NgMgaFAIDQpKDF+wV8nENRbC1CP1zzcvb1QBF4zBL2auDT4fhkhVa817064s7vlDiJVLQ==",
"requires": {
- "@sentry/types": "4.3.4",
+ "@sentry/types": "5.4.2",
"tslib": "^1.9.3"
}
},
@@ -74,9 +74,9 @@
"dev": true
},
"@types/selenium-webdriver": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.13.tgz",
- "integrity": "sha512-rI0LGoMiZGUM+tjDakQpwZOvcmQoubiJ7hxqrYU12VRxBuGGvOThxrBOU/QmJKlKg1WG6FMzuvcEyLffvVSsmw==",
+ "version": "3.0.15",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz",
+ "integrity": "sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q==",
"dev": true
},
"@types/semver": {
@@ -123,9 +123,9 @@
}
},
"ajv": {
- "version": "6.5.5",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
- "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
@@ -169,6 +169,11 @@
"normalize-path": "^2.1.1"
}
},
+ "append-field": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
+ },
"application-config": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/application-config/-/application-config-0.1.2.tgz",
@@ -209,18 +214,18 @@
},
"dependencies": {
"async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.11"
}
},
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -231,12 +236,6 @@
"path-is-absolute": "^1.0.0"
}
},
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- },
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -263,9 +262,9 @@
},
"dependencies": {
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -282,12 +281,6 @@
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
"dev": true
},
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- },
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -342,12 +335,6 @@
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
"dev": true
},
- "array-slice": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
- "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
- "dev": true
- },
"array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -418,9 +405,9 @@
"dev": true
},
"async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"dev": true
},
"async-limiter": {
@@ -590,9 +577,9 @@
}
},
"binary-extensions": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
- "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true
},
"bl": {
@@ -640,35 +627,82 @@
},
"bluebird": {
"version": "1.0.3",
- "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz",
"integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=",
"dev": true
},
"body-parser": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
- "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"dev": true,
"requires": {
- "bytes": "3.0.0",
+ "bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
- "http-errors": "~1.6.3",
- "iconv-lite": "0.4.23",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
- "qs": "6.5.2",
- "raw-body": "2.3.3",
- "type-is": "~1.6.16"
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
},
"dependencies": {
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"dev": true,
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
}
}
}
@@ -722,23 +756,12 @@
"snapdragon-node": "^2.0.1",
"split-string": "^3.0.2",
"to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
}
},
"browserstack": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.1.tgz",
- "integrity": "sha512-O8VMT64P9NOLhuIoD4YngyxBURefaSdR4QdhG8l6HZ9VxtU7jc3m6jLufFwKA5gaf7fetfB2TnRJnMxyob+heg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz",
+ "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==",
"dev": true,
"requires": {
"https-proxy-agent": "^2.2.1"
@@ -782,16 +805,53 @@
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
"builtin-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
},
+ "busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
+ "requires": {
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.x"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
"bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
},
"cache-base": {
@@ -875,24 +935,31 @@
}
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
+ "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
"glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
+ "inherits": "^2.0.3",
"is-binary-path": "^1.0.0",
"is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
+ "normalize-path": "^3.0.0",
"path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ }
}
},
"chownr": {
@@ -902,12 +969,6 @@
"dev": true,
"optional": true
},
- "circular-json": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
- "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==",
- "dev": true
- },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -918,17 +979,6 @@
"define-property": "^0.2.5",
"isobject": "^3.0.0",
"static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
}
},
"cli-cursor": {
@@ -947,12 +997,57 @@
"dev": true
},
"coa": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz",
- "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
"dev": true,
"requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "@types/q": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
+ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"code-point-at": {
@@ -998,15 +1093,6 @@
"integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==",
"dev": true
},
- "combine-lists": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
- "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
- "dev": true,
- "requires": {
- "lodash": "^4.5.0"
- }
- },
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
@@ -1032,9 +1118,9 @@
"dev": true
},
"component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
"component-inherit": {
@@ -1061,6 +1147,17 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
"config-chain": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
@@ -1120,16 +1217,15 @@
"dev": true
},
"core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"corser": {
"version": "2.0.1",
@@ -1356,6 +1452,15 @@
"buffer": "^5.1.0"
}
},
+ "crc-32": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
+ "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
+ "requires": {
+ "exit-on-epipe": "~1.0.1",
+ "printj": "~1.1.0"
+ }
+ },
"crc32-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
@@ -1487,9 +1592,9 @@
}
},
"date-format": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
- "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz",
+ "integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==",
"dev": true
},
"dateformat": {
@@ -1556,58 +1661,20 @@
},
"dependencies": {
"object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
}
}
},
"define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
+ "is-descriptor": "^0.1.0"
}
},
"del": {
@@ -1662,6 +1729,38 @@
"integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
"dev": true
},
+ "dicer": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+ "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
+ "requires": {
+ "readable-stream": "1.1.x",
+ "streamsearch": "0.1.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
"divhide": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/divhide/-/divhide-2.0.1.tgz",
@@ -1763,7 +1862,7 @@
},
"readable-stream": {
"version": "1.1.14",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
@@ -1775,7 +1874,7 @@
},
"string_decoder": {
"version": "0.10.31",
- "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
@@ -1793,27 +1892,17 @@
"stream-shift": "^1.0.0"
}
},
- "each-async": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
- "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
- "dev": true,
- "requires": {
- "onetime": "^1.0.0",
- "set-immediate-shim": "^1.0.0"
- }
- },
"easyimage": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/easyimage/-/easyimage-3.1.0.tgz",
- "integrity": "sha512-yycLx61oU5UOmIR3pVrv1fkoMKHurR2vPo74+iHs2aLkTdvpco0oiCX/ljeuM6VcUocXx7jijWsAupWHRI1e7A==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/easyimage/-/easyimage-3.1.1.tgz",
+ "integrity": "sha512-W9QFelSdXjDK7ja0+jkDKwtJSrSggN/GDzgDY4+QguF9YElVkcbMZp64H8OinBI0ajow/h2p/MukdFOzpH1Mng==",
"dev": true,
"requires": {
"bluebird": "^3.5.1",
"mkdirp": "^0.5.0",
"nanoid": "^1.0.2",
"tslib": "^1.8.1",
- "typescript": "^2.6.2"
+ "typescript": "^3.3.0"
},
"dependencies": {
"bluebird": {
@@ -1835,9 +1924,9 @@
}
},
"ecstatic": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.0.tgz",
- "integrity": "sha512-EblWYTd+wPIAMQ0U4oYJZ7QBypT9ZUIwpqli0bKDjeIIQnXDBK2dXtZ9yzRCOlkW1HkO8gn7/FxLK1yPIW17pw==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz",
+ "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==",
"dev": true,
"requires": {
"he": "^1.1.1",
@@ -1854,7 +1943,7 @@
},
"minimist": {
"version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
}
@@ -1913,8 +2002,7 @@
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
@@ -1975,6 +2063,12 @@
"yeast": "0.1.2"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -2021,22 +2115,31 @@
}
},
"es-abstract": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
- "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
"dev": true,
"requires": {
- "es-to-primitive": "^1.1.1",
+ "es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- }
- },
- "es-to-primitive": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
- "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
"dev": true,
"requires": {
"is-callable": "^1.1.4",
@@ -2045,9 +2148,9 @@
}
},
"es6-promise": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
- "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
+ "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==",
"dev": true
},
"es6-promisify": {
@@ -2109,9 +2212,9 @@
}
},
"esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"esutils": {
@@ -2171,33 +2274,10 @@
"integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
"dev": true
},
- "expand-braces": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
- "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
- "dev": true,
- "requires": {
- "array-slice": "^0.2.3",
- "array-unique": "^0.2.1",
- "braces": "^0.1.2"
- },
- "dependencies": {
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
- "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
- "dev": true,
- "requires": {
- "expand-range": "^0.1.0"
- }
- }
- }
+ "exit-on-epipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"expand-brackets": {
"version": "2.1.4",
@@ -2212,50 +2292,6 @@
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-range": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
- "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
- "dev": true,
- "requires": {
- "is-number": "^0.1.1",
- "repeat-string": "^0.2.2"
- },
- "dependencies": {
- "is-number": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
- "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
- "dev": true
- },
- "repeat-string": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
- "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
- "dev": true
- }
}
},
"expand-template": {
@@ -2272,24 +2308,12 @@
"dev": true
},
"extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "is-extendable": "^0.1.0"
}
},
"external-editor": {
@@ -2348,15 +2372,6 @@
"is-descriptor": "^1.0.0"
}
},
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
"is-accessor-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
@@ -2448,17 +2463,6 @@
"is-number": "^3.0.0",
"repeat-string": "^1.6.1",
"to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
}
},
"finalhandler": {
@@ -2518,6 +2522,12 @@
}
}
},
+ "flatted": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
+ "dev": true
+ },
"follow-redirects": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
@@ -2598,20 +2608,19 @@
"dev": true
},
"fs-extra": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.0.0.tgz",
- "integrity": "sha1-M3NSve1KC3FPPrhN6M6nZenTdgA=",
- "dev": true,
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.1.tgz",
+ "integrity": "sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A==",
"requires": {
"graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0"
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
},
"dependencies": {
"graceful-fs": {
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
}
}
},
@@ -2622,14 +2631,14 @@
"dev": true
},
"fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.12.0"
},
"dependencies": {
"abbrev": {
@@ -2650,7 +2659,7 @@
"optional": true
},
"are-we-there-yet": {
- "version": "1.1.4",
+ "version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
@@ -2674,7 +2683,7 @@
}
},
"chownr": {
- "version": "1.0.1",
+ "version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
@@ -2701,16 +2710,16 @@
"optional": true
},
"debug": {
- "version": "2.6.9",
+ "version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
"deep-extend": {
- "version": "0.5.1",
+ "version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
@@ -2759,7 +2768,7 @@
}
},
"glob": {
- "version": "7.1.2",
+ "version": "7.1.3",
"bundled": true,
"dev": true,
"optional": true,
@@ -2779,12 +2788,12 @@
"optional": true
},
"iconv-lite": {
- "version": "0.4.21",
+ "version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "safer-buffer": "^2.1.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
@@ -2845,16 +2854,16 @@
"dev": true
},
"minipass": {
- "version": "2.2.4",
+ "version": "2.3.5",
"bundled": true,
"dev": true,
"requires": {
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
- "version": "1.1.0",
+ "version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
@@ -2871,35 +2880,42 @@
}
},
"ms": {
- "version": "2.0.0",
+ "version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true,
+ "optional": true
+ },
"needle": {
- "version": "2.2.0",
+ "version": "2.3.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "debug": "^2.1.2",
+ "debug": "^4.1.0",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
- "version": "0.10.0",
+ "version": "0.12.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
- "needle": "^2.2.0",
+ "needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
- "rc": "^1.1.7",
+ "rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
@@ -2916,13 +2932,13 @@
}
},
"npm-bundled": {
- "version": "1.0.3",
+ "version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
- "version": "1.1.10",
+ "version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true,
@@ -2997,12 +3013,12 @@
"optional": true
},
"rc": {
- "version": "1.2.7",
+ "version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "^0.5.1",
+ "deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
@@ -3032,16 +3048,16 @@
}
},
"rimraf": {
- "version": "2.6.2",
+ "version": "2.6.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"safe-buffer": {
- "version": "5.1.1",
+ "version": "5.1.2",
"bundled": true,
"dev": true
},
@@ -3058,7 +3074,7 @@
"optional": true
},
"semver": {
- "version": "5.5.0",
+ "version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
@@ -3109,17 +3125,17 @@
"optional": true
},
"tar": {
- "version": "4.4.1",
+ "version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "chownr": "^1.0.1",
+ "chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
@@ -3130,12 +3146,12 @@
"optional": true
},
"wide-align": {
- "version": "1.1.2",
+ "version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "string-width": "^1.0.2 || 2"
}
},
"wrappy": {
@@ -3144,16 +3160,16 @@
"dev": true
},
"yallist": {
- "version": "3.0.2",
+ "version": "3.0.3",
"bundled": true,
"dev": true
}
}
},
"fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
@@ -3265,7 +3281,7 @@
"dependencies": {
"bl": {
"version": "0.9.5",
- "resolved": "http://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
"integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
"dev": true,
"requires": {
@@ -3280,7 +3296,7 @@
},
"readable-stream": {
"version": "1.0.34",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
@@ -3292,7 +3308,7 @@
},
"string_decoder": {
"version": "0.10.31",
- "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
@@ -3306,7 +3322,7 @@
},
"github-changes": {
"version": "1.0.2",
- "resolved": "http://registry.npmjs.org/github-changes/-/github-changes-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/github-changes/-/github-changes-1.0.2.tgz",
"integrity": "sha1-ChJ2gBKi4mF7NBqqBJWiK9mu064=",
"dev": true,
"requires": {
@@ -3323,13 +3339,13 @@
"dependencies": {
"lodash": {
"version": "2.4.1",
- "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
"integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=",
"dev": true
},
"semver": {
"version": "2.2.1",
- "resolved": "http://registry.npmjs.org/semver/-/semver-2.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-2.2.1.tgz",
"integrity": "sha1-eUEYKz/8xYC/8cF5QqzfeVHA0hM=",
"dev": true
}
@@ -3361,13 +3377,13 @@
},
"async": {
"version": "0.2.10",
- "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"dev": true
},
"combined-stream": {
"version": "0.0.7",
- "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
"integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
"dev": true,
"requires": {
@@ -3388,7 +3404,7 @@
},
"form-data": {
"version": "0.0.8",
- "resolved": "http://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
"integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=",
"dev": true,
"requires": {
@@ -3416,7 +3432,7 @@
},
"mime": {
"version": "1.2.11",
- "resolved": "http://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true
},
@@ -3428,13 +3444,13 @@
},
"qs": {
"version": "0.6.6",
- "resolved": "http://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
"integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=",
"dev": true
},
"request": {
"version": "2.22.0",
- "resolved": "http://registry.npmjs.org/request/-/request-2.22.0.tgz",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
"integrity": "sha1-uIOnacxKkJVx61AEs0TEPPflFZI=",
"dev": true,
"requires": {
@@ -3559,9 +3575,9 @@
"dev": true
},
"grunt": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz",
- "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz",
+ "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==",
"dev": true,
"requires": {
"coffeescript": "~1.10.0",
@@ -3575,7 +3591,7 @@
"grunt-legacy-log": "~2.0.0",
"grunt-legacy-util": "~1.1.1",
"iconv-lite": "~0.4.13",
- "js-yaml": "~3.5.2",
+ "js-yaml": "~3.13.0",
"minimatch": "~3.0.2",
"mkdirp": "~0.5.1",
"nopt": "~3.0.6",
@@ -3619,12 +3635,28 @@
}
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
}
}
}
@@ -3718,25 +3750,17 @@
}
},
"grunt-contrib-compress": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.4.3.tgz",
- "integrity": "sha1-Ac7/ucY39S5wgfRjdQmD0KOw+nM=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.5.0.tgz",
+ "integrity": "sha512-RcCyetnvTJ7jvnDCSm05wOndAd00HWZTHeVGDVVmCM+K/PEivL0yx8vKyi8uzy0492l2dJgtzR0Ucid7roKg6A==",
"dev": true,
"requires": {
"archiver": "^1.3.0",
"chalk": "^1.1.1",
- "iltorb": "^1.0.13",
+ "iltorb": "^1.3.10",
"lodash": "^4.7.0",
"pretty-bytes": "^4.0.2",
"stream-buffers": "^2.1.0"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- }
}
},
"grunt-contrib-connect": {
@@ -3768,14 +3792,14 @@
}
},
"grunt-contrib-uglify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.0.tgz",
- "integrity": "sha512-vy3Vop2KDqdiwcGOGAjyKvjHFrRD/YK4KPQWR3Yt6OdYlgFw1z7HCuk66+IJ9s7oJmp9uRQXuuSHyawKRAgiMw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz",
+ "integrity": "sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg==",
"dev": true,
"requires": {
"chalk": "^2.4.1",
"maxmin": "^2.1.0",
- "uglify-js": "~3.4.8",
+ "uglify-js": "^3.5.0",
"uri-path": "^1.0.0"
},
"dependencies": {
@@ -3789,9 +3813,9 @@
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
@@ -3799,12 +3823,24 @@
"supports-color": "^5.3.0"
}
},
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true
+ },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -3813,6 +3849,16 @@
"requires": {
"has-flag": "^3.0.0"
}
+ },
+ "uglify-js": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
+ "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.20.0",
+ "source-map": "~0.6.1"
+ }
}
}
},
@@ -4027,9 +4073,9 @@
}
},
"grunt-karma": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-3.0.1.tgz",
- "integrity": "sha512-iNt1Qe5GoePMIfBQmeffvfrvnvwTfJ9/h9p9gqGMIuEdVsUo4PKhTxIwyW5NMbHrgD8p2UEdeTJH4l0QGz4YtA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-3.0.2.tgz",
+ "integrity": "sha512-imNhQO1bR1O7X6/3F5vO0o7mKy4xdkpSd40QVfxGO70cBAFcOqjv2Zu5QzsfEsSrppuu3N0vIQPbfBRjeGdpWg==",
"dev": true,
"requires": {
"lodash": "^4.17.10"
@@ -4150,9 +4196,9 @@
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
@@ -4287,12 +4333,28 @@
"escape-string-regexp": "^1.0.5"
}
},
+ "fs-extra": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.0.0.tgz",
+ "integrity": "sha1-M3NSve1KC3FPPrhN6M6nZenTdgA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0"
+ }
+ },
"fs-readdir-recursive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
"integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=",
"dev": true
},
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
"inquirer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.1.tgz",
@@ -4320,6 +4382,15 @@
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
@@ -4378,26 +4449,78 @@
}
},
"grunt-shell": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-2.1.0.tgz",
- "integrity": "sha1-Q595FZ7RHmSmUaacyKPQK+v17MI=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-3.0.1.tgz",
+ "integrity": "sha512-C8eR4frw/NmIFIwSvzSLS4wOQBUzC+z6QhrKPzwt/tlaIqlzH35i/O2MggVOBj2Sh1tbaAqpASWxGiGsi4JMIQ==",
"dev": true,
"requires": {
- "chalk": "^1.0.0",
- "npm-run-path": "^2.0.0"
+ "chalk": "^2.4.1",
+ "npm-run-path": "^2.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"grunt-svgmin": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-5.0.0.tgz",
- "integrity": "sha1-8O4pOtFi++hcjD5o2xUt/3J3qCQ=",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-6.0.0.tgz",
+ "integrity": "sha512-gSVIzJ9TNUDpsTpZELaAdBkQ5DRMios6SlFKc+S7XwUPFvqx8scCsiYTEiGLeYDEvE9+a2GGsSdJUd5ufIFlGQ==",
"dev": true,
"requires": {
- "chalk": "^2.3.0",
- "each-async": "^1.1.1",
- "log-symbols": "^2.1.0",
- "pretty-bytes": "^4.0.2",
- "svgo": "^1.0.3"
+ "chalk": "^2.4.2",
+ "log-symbols": "^2.2.0",
+ "pretty-bytes": "^5.1.0",
+ "svgo": "^1.2.0"
},
"dependencies": {
"ansi-styles": {
@@ -4410,9 +4533,9 @@
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
@@ -4435,6 +4558,12 @@
"chalk": "^2.0.1"
}
},
+ "pretty-bytes": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.2.0.tgz",
+ "integrity": "sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w==",
+ "dev": true
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -4505,55 +4634,22 @@
}
},
"handlebars": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
- "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
+ "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
"dev": true,
"requires": {
- "async": "^2.5.0",
+ "neo-async": "^2.6.0",
"optimist": "^0.6.1",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4"
},
"dependencies": {
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "dev": true,
- "optional": true
- },
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
- },
- "uglify-js": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
- "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
- }
}
}
},
@@ -4666,7 +4762,7 @@
},
"hawk": {
"version": "0.13.1",
- "resolved": "http://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
"integrity": "sha1-NheViCH1gxHk1/beKR/KZitBLvQ=",
"dev": true,
"requires": {
@@ -4684,7 +4780,7 @@
},
"hoek": {
"version": "0.8.5",
- "resolved": "http://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz",
"integrity": "sha1-Hp/XcO9+vgJ0rfy1sIBqAlpeTp8=",
"dev": true
},
@@ -4906,9 +5002,9 @@
}
},
"ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
"dev": true
},
"iltorb": {
@@ -4969,14 +5065,12 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"inquirer": {
"version": "0.11.4",
@@ -5021,7 +5115,7 @@
},
"is": {
"version": "0.2.7",
- "resolved": "http://registry.npmjs.org/is/-/is-0.2.7.tgz",
+ "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz",
"integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=",
"dev": true
},
@@ -5135,9 +5229,9 @@
}
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
@@ -5282,8 +5376,7 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isbinaryfile": {
"version": "3.0.3",
@@ -5340,15 +5433,6 @@
"integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
"dev": true
},
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
"async": {
"version": "1.5.2",
"resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
@@ -5396,9 +5480,9 @@
}
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -5506,9 +5590,9 @@
}
},
"jasmine-core": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz",
- "integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz",
+ "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==",
"dev": true
},
"jasminewd2": {
@@ -5566,13 +5650,13 @@
}
},
"js-yaml": {
- "version": "3.5.5",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz",
- "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
- "argparse": "^1.0.2",
- "esprima": "^2.6.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
"jsbn": {
@@ -5614,10 +5698,9 @@
"dev": true
},
"jsonfile": {
- "version": "2.4.0",
- "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "^4.1.6"
},
@@ -5626,7 +5709,6 @@
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true,
"optional": true
}
}
@@ -5650,80 +5732,39 @@
}
},
"jszip": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
- "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.0.tgz",
+ "integrity": "sha512-4WjbsaEtBK/DHeDZOPiPw5nzSGLDEDDreFRDEgnoMwmknPjTqa+23XuYFk6NiGbeiAeZCctiQ/X/z0lQBmDVOQ==",
"dev": true,
"requires": {
- "core-js": "~2.3.0",
- "es6-promise": "~3.0.2",
- "lie": "~3.1.0",
+ "lie": "~3.3.0",
"pako": "~1.0.2",
- "readable-stream": "~2.0.6"
- },
- "dependencies": {
- "core-js": {
- "version": "2.3.0",
- "resolved": "http://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
- "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
- "dev": true
- },
- "es6-promise": {
- "version": "3.0.2",
- "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
- "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
- "dev": true
- },
- "readable-stream": {
- "version": "2.0.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
- "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "string_decoder": "~0.10.x",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
+ "readable-stream": "~2.3.6",
+ "set-immediate-shim": "~1.0.1"
}
},
"karma": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz",
- "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz",
+ "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==",
"dev": true,
"requires": {
"bluebird": "^3.3.0",
"body-parser": "^1.16.1",
+ "braces": "^2.3.2",
"chokidar": "^2.0.3",
"colors": "^1.1.0",
- "combine-lists": "^1.0.0",
"connect": "^3.6.0",
"core-js": "^2.2.0",
"di": "^0.0.1",
"dom-serialize": "^2.2.0",
- "expand-braces": "^0.1.1",
+ "flatted": "^2.0.0",
"glob": "^7.1.1",
"graceful-fs": "^4.1.2",
"http-proxy": "^1.13.0",
"isbinaryfile": "^3.0.0",
- "lodash": "^4.17.4",
- "log4js": "^3.0.0",
+ "lodash": "^4.17.11",
+ "log4js": "^4.0.0",
"mime": "^2.3.1",
"minimatch": "^3.0.2",
"optimist": "^0.6.1",
@@ -5734,19 +5775,19 @@
"socket.io": "2.1.1",
"source-map": "^0.6.1",
"tmp": "0.0.33",
- "useragent": "2.2.1"
+ "useragent": "2.3.0"
},
"dependencies": {
"bluebird": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
- "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+ "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
"dev": true
},
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -5764,9 +5805,9 @@
"dev": true
},
"mime": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
- "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
"dev": true
},
"minimatch": {
@@ -5779,12 +5820,12 @@
}
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"source-map": {
@@ -5792,15 +5833,6 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
}
}
},
@@ -5844,15 +5876,6 @@
"integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
"dev": true
},
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
"async": {
"version": "1.5.2",
"resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
@@ -5948,9 +5971,9 @@
}
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -6119,9 +6142,9 @@
}
},
"lie": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
- "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"dev": true,
"requires": {
"immediate": "~3.0.5"
@@ -6161,14 +6184,7 @@
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"lodash.isfinite": {
"version": "3.3.2",
@@ -6198,31 +6214,31 @@
}
},
"log4js": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
- "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.3.2.tgz",
+ "integrity": "sha512-72GjgSP+ifL156MD/bXEhE7UlFLKS2KkCXujodb1nl1z6PpKhCfS+41dyNQ7zKi4iM49TQl+aWLEISXGLcGCCQ==",
"dev": true,
"requires": {
- "circular-json": "^0.5.5",
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
+ "date-format": "^2.0.0",
+ "debug": "^4.1.1",
+ "flatted": "^2.0.0",
"rfdc": "^1.1.2",
- "streamroller": "0.7.0"
+ "streamroller": "^1.0.5"
},
"dependencies": {
"debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
}
}
@@ -6296,8 +6312,7 @@
"media-typer": {
"version": "0.3.0",
"resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "dev": true
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"mem": {
"version": "1.1.0",
@@ -6355,6 +6370,64 @@
"to-regex": "^3.0.2"
},
"dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@@ -6372,14 +6445,12 @@
"mime-db": {
"version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
- "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
- "dev": true
+ "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
},
"mime-types": {
"version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
- "dev": true,
"requires": {
"mime-db": "~1.37.0"
}
@@ -6410,8 +6481,7 @@
"minimist": {
"version": "0.0.8",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"mixin-deep": {
"version": "1.3.1",
@@ -6438,21 +6508,20 @@
"version": "0.5.1",
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"moment": {
"version": "2.5.1",
- "resolved": "http://registry.npmjs.org/moment/-/moment-2.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.5.1.tgz",
"integrity": "sha1-cUajkAUzBkynmdXnkvTkgO4Ogrw=",
"dev": true
},
"monaco-editor": {
- "version": "0.15.6",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.15.6.tgz",
- "integrity": "sha512-JoU9V9k6KqT9R9Tiw1RTU8ohZ+Xnf9DMg6Ktqqw5hILumwmq7xqa/KLXw513uTUsWbhtnHoSJYYR++u3pkyxJg=="
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.17.0.tgz",
+ "integrity": "sha512-8BQQHCFxy3DF0GYFOy5BmcCWlwm/XaTMPbPbN4gwItFGctZErSfX82uQSBpojJSlPNyudB5Q5qnukoorD3/UuA=="
},
"morgan": {
"version": "1.9.1",
@@ -6473,6 +6542,21 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "multer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.1.tgz",
+ "integrity": "sha512-zzOLNRxzszwd+61JFuAo0fxdQfvku12aNJgnla0AQ+hHxFmfc/B7jBVuPr5Rmvu46Jze/iJrFpSOsD7afO8SDw==",
+ "requires": {
+ "append-field": "^1.0.0",
+ "busboy": "^0.2.11",
+ "concat-stream": "^1.5.2",
+ "mkdirp": "^0.5.1",
+ "object-assign": "^4.1.1",
+ "on-finished": "^2.3.0",
+ "type-is": "^1.6.4",
+ "xtend": "^4.0.0"
+ }
+ },
"mustache": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz",
@@ -6517,6 +6601,64 @@
"to-regex": "^3.0.1"
},
"dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@@ -6531,10 +6673,16 @@
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true
},
+ "neo-async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+ "dev": true
+ },
"node-abi": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.5.0.tgz",
- "integrity": "sha512-9g2twBGSP6wIR5PW7tXvAWnEWKJDH/VskdXp168xsw9VVxpEGov8K4jsP4/VeoC7b2ZAyzckvMCuQuQlw44lXg==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.9.0.tgz",
+ "integrity": "sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==",
"dev": true,
"optional": true,
"requires": {
@@ -6542,9 +6690,9 @@
},
"dependencies": {
"semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
"dev": true,
"optional": true
}
@@ -6572,9 +6720,9 @@
},
"dependencies": {
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"optional": true,
"requires": {
@@ -6603,16 +6751,6 @@
"brace-expansion": "^1.1.7"
}
},
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1"
- }
- },
"semver": {
"version": "5.3.0",
"resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
@@ -6656,7 +6794,7 @@
"dependencies": {
"colors": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
"integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=",
"dev": true
}
@@ -6750,8 +6888,7 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-component": {
"version": "0.0.3",
@@ -6768,17 +6905,6 @@
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
"kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
}
},
"object-keys": {
@@ -6821,22 +6947,21 @@
}
},
"object.values": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
- "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.6.1",
- "function-bind": "^1.1.0",
- "has": "^1.0.1"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.12.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
}
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
"requires": {
"ee-first": "1.1.1"
}
@@ -6965,9 +7090,9 @@
"dev": true
},
"pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
"dev": true
},
"parse-json": {
@@ -7214,11 +7339,15 @@
"integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
"dev": true
},
+ "printj": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
+ "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
+ },
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
- "dev": true
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"proto-list": {
"version": "1.2.4",
@@ -7227,12 +7356,11 @@
"dev": true
},
"protractor": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.1.tgz",
- "integrity": "sha512-ORey5ewQMYiXQxcQohsqEiKYOg/r5yJoJbt0tuROmmgajdg/CA3gTOZNIFJncUVMAJIk5YFqBBLUjKVmQO6tfA==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz",
+ "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==",
"dev": true,
"requires": {
- "@types/node": "^6.0.46",
"@types/q": "^0.0.32",
"@types/selenium-webdriver": "^3.0.0",
"blocking-proxy": "^1.0.0",
@@ -7286,12 +7414,12 @@
"dev": true
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"semver": {
@@ -7300,19 +7428,10 @@
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true
},
- "source-map-support": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- },
"webdriver-manager": {
- "version": "12.1.0",
- "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.0.tgz",
- "integrity": "sha512-oEc5fmkpz6Yh6udhwir5m0eN5mgRPq9P/NU5YWuT3Up5slt6Zz+znhLU7q4+8rwCZz/Qq3Fgpr/4oao7NPCm2A==",
+ "version": "12.1.1",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz",
+ "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==",
"dev": true,
"requires": {
"adm-zip": "^0.4.9",
@@ -7339,8 +7458,7 @@
"psl": {
"version": "1.1.29",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
- "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
- "dev": true
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
},
"pump": {
"version": "2.0.1",
@@ -7390,25 +7508,41 @@
"dev": true
},
"raw-body": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
- "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"dev": true,
"requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.3",
- "iconv-lite": "0.4.23",
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"dev": true,
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
}
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
}
}
},
@@ -7489,7 +7623,6 @@
"version": "2.3.6",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -7556,6 +7689,27 @@
"requires": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
}
},
"remove-trailing-separator": {
@@ -7604,6 +7758,24 @@
"uuid": "^3.3.2"
}
},
+ "request-promise-core": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
+ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+ "requires": {
+ "lodash": "^4.17.11"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
+ "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+ "requires": {
+ "request-promise-core": "1.1.2",
+ "stealthy-require": "^1.1.1",
+ "tough-cookie": "^2.3.3"
+ }
+ },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7651,9 +7823,9 @@
"dev": true
},
"rfdc": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz",
- "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
+ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==",
"dev": true
},
"rimraf": {
@@ -7686,8 +7858,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safe-regex": {
"version": "1.1.0",
@@ -7755,12 +7926,21 @@
}
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
+ }
+ },
+ "tmp": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
+ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.1"
}
}
}
@@ -7849,17 +8029,6 @@
"is-extendable": "^0.1.1",
"is-plain-object": "^2.0.3",
"split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
}
},
"setimmediate": {
@@ -7891,7 +8060,7 @@
},
"shelljs": {
"version": "0.5.3",
- "resolved": "http://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
"integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=",
"dev": true
},
@@ -8013,26 +8182,6 @@
"source-map": "^0.5.6",
"source-map-resolve": "^0.5.0",
"use": "^3.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
}
},
"snapdragon-node": {
@@ -8171,6 +8320,12 @@
"to-array": "0.1.4"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -8193,6 +8348,12 @@
"isarray": "2.0.1"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -8229,6 +8390,15 @@
"urix": "^0.1.0"
}
},
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
@@ -8283,6 +8453,27 @@
"dev": true,
"requires": {
"extend-shallow": "^3.0.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
}
},
"sprintf-js": {
@@ -8322,17 +8513,6 @@
"requires": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
}
},
"statuses": {
@@ -8341,6 +8521,11 @@
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
"dev": true
},
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+ },
"stream-browserify": {
"version": "2.0.1",
"resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
@@ -8364,17 +8549,27 @@
"dev": true
},
"streamroller": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
- "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz",
+ "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==",
"dev": true,
"requires": {
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
- "mkdirp": "^0.5.1",
- "readable-stream": "^2.3.0"
+ "async": "^2.6.2",
+ "date-format": "^2.0.0",
+ "debug": "^3.2.6",
+ "fs-extra": "^7.0.1",
+ "lodash": "^4.17.11"
},
"dependencies": {
+ "async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.11"
+ }
+ },
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
@@ -8384,14 +8579,36 @@
"ms": "^2.1.1"
}
},
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
}
}
},
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+ },
"string-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
@@ -8416,7 +8633,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -8480,32 +8696,46 @@
"dev": true
},
"svgo": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz",
- "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz",
+ "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==",
"dev": true,
"requires": {
- "coa": "~2.0.1",
- "colors": "~1.1.2",
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
"css-select": "^2.0.0",
- "css-select-base-adapter": "~0.1.0",
+ "css-select-base-adapter": "^0.1.1",
"css-tree": "1.0.0-alpha.28",
"css-url-regex": "^1.1.0",
- "csso": "^3.5.0",
- "js-yaml": "^3.12.0",
+ "csso": "^3.5.1",
+ "js-yaml": "^3.13.1",
"mkdirp": "~0.5.1",
- "object.values": "^1.0.4",
+ "object.values": "^1.1.0",
"sax": "~1.2.4",
- "stable": "~0.1.6",
+ "stable": "^0.1.8",
"unquote": "~1.1.1",
"util.promisify": "~1.0.0"
},
"dependencies": {
- "colors": {
- "version": "1.1.2",
- "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
- "dev": true
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
},
"css-select": {
"version": "2.0.2",
@@ -8539,33 +8769,32 @@
"domelementtype": "1"
}
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "has-flag": "^3.0.0"
}
}
}
},
"tar": {
- "version": "2.2.1",
- "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+ "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
"dev": true,
"optional": true,
"requires": {
"block-stream": "*",
- "fstream": "^1.0.2",
+ "fstream": "^1.0.12",
"inherits": "2"
}
},
@@ -8624,7 +8853,7 @@
},
"through2": {
"version": "0.6.5",
- "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
"requires": {
@@ -8640,7 +8869,7 @@
},
"readable-stream": {
"version": "1.0.34",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
@@ -8652,7 +8881,7 @@
},
"string_decoder": {
"version": "0.10.31",
- "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
@@ -8668,12 +8897,12 @@
}
},
"tmp": {
- "version": "0.0.30",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
- "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
- "os-tmpdir": "~1.0.1"
+ "os-tmpdir": "~1.0.2"
}
},
"to-array": {
@@ -8707,6 +8936,72 @@
"extend-shallow": "^3.0.2",
"regex-not": "^1.0.2",
"safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
}
},
"to-regex-range": {
@@ -8719,11 +9014,16 @@
"repeat-string": "^1.6.1"
}
},
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
- "dev": true,
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
@@ -8732,8 +9032,7 @@
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}
}
},
@@ -8776,39 +9075,46 @@
"version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
"integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
- "dev": true,
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.18"
}
},
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
"typescript": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
- "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
+ "version": "3.3.3333",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz",
+ "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==",
"dev": true
},
"uglify-js": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
- "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
+ "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
"dev": true,
+ "optional": true,
"requires": {
- "commander": "~2.17.1",
+ "commander": "~2.20.0",
"source-map": "~0.6.1"
},
"dependencies": {
"commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "dev": true
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true,
+ "optional": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -8820,7 +9126,7 @@
},
"underscore": {
"version": "1.4.4",
- "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
"dev": true
},
@@ -8863,15 +9169,6 @@
"set-value": "^0.4.3"
},
"dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
"set-value": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
@@ -8886,6 +9183,11 @@
}
}
},
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -8939,9 +9241,9 @@
}
},
"upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
+ "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
"dev": true
},
"uri-js": {
@@ -8996,19 +9298,29 @@
"dev": true
},
"useragent": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
- "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
+ "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
"dev": true,
"requires": {
- "lru-cache": "2.2.x",
+ "lru-cache": "4.1.x",
"tmp": "0.0.x"
},
"dependencies": {
"lru-cache": {
- "version": "2.2.4",
- "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
- "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
}
}
@@ -9033,8 +9345,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"util.promisify": {
"version": "1.0.0",
@@ -9184,16 +9495,14 @@
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~9.0.1"
- },
- "dependencies": {
- "xmlbuilder": {
- "version": "9.0.7",
- "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
- "dev": true
- }
}
},
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "dev": true
+ },
"xmlhttprequest-ssl": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
@@ -9203,8 +9512,7 @@
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
- "dev": true
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
},
"y18n": {
"version": "3.2.1",
@@ -9251,14 +9559,6 @@
"compress-commons": "^1.2.0",
"lodash": "^4.8.0",
"readable-stream": "^2.0.0"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
- }
}
}
}
diff --git a/package.json b/package.json
index e62f7e1247c..a979e64a8ce 100644
--- a/package.json
+++ b/package.json
@@ -20,42 +20,47 @@
],
"devDependencies": {
"csso": "^3.5.1",
- "easyimage": "^3.1.0",
- "grunt": "^1.0.3",
+ "easyimage": "^3.1.1",
+ "grunt": "^1.0.4",
"grunt-banner": "^0.6.0",
"grunt-bump": "^0.8.0",
"grunt-chmod": "latest",
"grunt-contrib-clean": "^2.0.0",
- "grunt-contrib-compress": "^1.0.0",
+ "grunt-contrib-compress": "^1.5.0",
"grunt-contrib-connect": "^2.0.0",
- "grunt-contrib-uglify": "^4.0.0",
+ "grunt-contrib-uglify": "^4.0.1",
"grunt-file-creator": "^0.1.3",
"grunt-github-changes": "latest",
"grunt-github-releaser": "^0.1.18",
"grunt-http-server": "^2.1.0",
- "grunt-karma": "^3.0.1",
+ "grunt-karma": "^3.0.2",
"grunt-karma-coveralls": "^2.5.4",
"grunt-prompt": "^1.3.3",
"grunt-protractor-runner": "^5.0.0",
"grunt-scaffold": "^0.7.0",
- "grunt-shell": "^2.1.0",
- "grunt-svgmin": "^5.0.0",
+ "grunt-shell": "^3.0.1",
+ "grunt-svgmin": "^6.0.0",
"grunt-svgstore": "latest",
- "jasmine-core": "^3.3.0",
+ "jasmine-core": "^3.4.0",
"jshint-stylish": "^2.1.0",
- "karma": "^3.1.1",
+ "karma": "^4.1.0",
"karma-chrome-launcher": "^2.0.0",
"karma-coverage": "^1.1.1",
"karma-firefox-launcher": "^1.0.0",
"karma-jasmine": "^2.0.1",
"karma-qooxdoo": "^0.6.0",
"karma-spec-reporter": "0.0.32",
- "protractor": "^5.3.0",
- "request": "^2.69.0",
+ "protractor": "^5.4.2",
+ "request": "^2.88.0",
"svgmin": "^0.1.0"
},
"dependencies": {
- "@sentry/browser": "^4.0.4",
- "monaco-editor": "^0.15.6"
+ "@sentry/browser": "^5.4.2",
+ "crc-32": "^1.2.0",
+ "fs-extra": "^8.0.1",
+ "ini": "^1.3.5",
+ "monaco-editor": "^0.17.0",
+ "multer": "^1.4.1",
+ "request-promise-native": "^1.0.7"
}
}
diff --git a/source/class/cv/Application.js b/source/class/cv/Application.js
index 55f26db85a8..10c3f733192 100644
--- a/source/class/cv/Application.js
+++ b/source/class/cv/Application.js
@@ -34,6 +34,20 @@ qx.Class.define("cv.Application",
{
extend : qx.application.Native,
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this.initCommandManager(new qx.ui.command.GroupManager());
+ var lang = qx.locale.Manager.getInstance().getLanguage();
+ if (qx.io.PartLoader.getInstance().hasPart(lang)) {
+ qx.io.PartLoader.require([lang]);
+ }
+ },
+
/*
******************************************************
STATICS
@@ -42,6 +56,7 @@ qx.Class.define("cv.Application",
statics: {
HTML_STRUCT: '
',
consoleCommands: [],
+ __commandManager: null,
/**
* Client factory method -> create a client
@@ -93,6 +108,11 @@ qx.Class.define("cv.Application",
check: 'Boolean',
init: false,
event: 'changeStructureLoaded'
+ },
+
+ commandManager: {
+ check: 'qx.ui.command.GroupManager',
+ deferredInit: true
}
},
@@ -157,6 +177,14 @@ qx.Class.define("cv.Application",
console.log(info);
+ // add command to load and open the manager
+ var manCommand = new qx.ui.command.Command('Ctrl+M');
+ cv.TemplateEngine.getInstance().getCommands().add("open-manager", manCommand);
+ manCommand.addListener('execute', this.showManager, this);
+ if (cv.Config.request.queryKey.manager) {
+ this.showManager();
+ }
+
if (qx.core.Environment.get("qx.aspects")) {
qx.dev.Profile.stop();
qx.dev.Profile.start();
@@ -190,6 +218,12 @@ qx.Class.define("cv.Application",
this.__init();
},
+ showManager: function () {
+ qx.io.PartLoader.require(['manager'], function (states) {
+ cv.ui.manager.Main.getInstance();
+ }, this);
+ },
+
__globalErrorHandler: function(ex) {
// connect client data for Bug-Report
var bugData = cv.report.Record.getClientData();
diff --git a/source/class/cv/Config.js b/source/class/cv/Config.js
index d9637c7a6f2..a0329234a73 100644
--- a/source/class/cv/Config.js
+++ b/source/class/cv/Config.js
@@ -266,6 +266,9 @@ qx.Class.define('cv.Config', {
cv.Config.startpage = req.queryKey.startpage;
}
+ // store for later usage
+ cv.Config.request = req;
+
if (qx.core.Environment.get('cv.testMode') !== false) {
cv.Config.testMode = true;
if (qx.core.Environment.get('cv.testMode') !== "true") {
diff --git a/source/class/cv/TemplateEngine.js b/source/class/cv/TemplateEngine.js
index d941c889992..852d4439689 100644
--- a/source/class/cv/TemplateEngine.js
+++ b/source/class/cv/TemplateEngine.js
@@ -36,7 +36,15 @@ qx.Class.define('cv.TemplateEngine', {
}, this);
this.defaults = {widget: {}, plugin: {}};
- this.setCommands(new qx.ui.command.Group());
+ var group = new qx.ui.command.Group();
+ this.setCommands(group);
+ var app = qx.core.Init.getApplication();
+ if (app) {
+ // application is not available in tests
+ var manager = app.getCommandManager();
+ manager.add(group);
+ manager.setActive(group);
+ }
},
properties: {
diff --git a/source/class/cv/io/rest/Client.js b/source/class/cv/io/rest/Client.js
new file mode 100644
index 00000000000..a59e86b3d97
--- /dev/null
+++ b/source/class/cv/io/rest/Client.js
@@ -0,0 +1,196 @@
+/**
+ *
+ */
+qx.Class.define('cv.io.rest.Client', {
+ type: 'static',
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ BASE_URL: 'http://localhost:3000',
+ __configFile: null,
+ __dirClient: null,
+ __dpClient: null,
+ __callbacks: {},
+
+ getConfigClient: function() {
+ if (!this.__configFile) {
+ this.__configFile = new qx.io.rest.Resource({
+ get: {
+ method: 'GET', url: '/config/hidden/{section}/{key}'
+ },
+ put: {
+ method: 'PUT', url: '/config/hidden/{section}/{key}'
+ },
+ post: {
+ method: 'POST', url: '/config/hidden/{section}/{key}'
+ },
+ "delete": {
+ method: 'DELETE', url: '/config/hidden/{section}/{key}'
+ },
+ save: {
+ method: 'PUT', url: '/config/hidden'
+ }
+ });
+ this.__configFile.setBaseUrl(this.BASE_URL);
+ this.__configFile.configureRequest(function (req, action) {
+ if (action === 'save') {
+ req.setRequestHeader('Content-Type', 'application/json');
+ }
+ if (action === 'get') {
+ req.setAccept('text/xml');
+ } else {
+ req.setAccept('application/json');
+ }
+ });
+ }
+ return this.__configFile;
+ },
+
+ getFsClient: function () {
+ if (!this.__dirClient) {
+ var config = {
+ read: {
+ method: 'GET', url: '/fs?path={path}'
+ },
+ update: {
+ method: 'PUT', url: '/fs?path={path}'
+ },
+ create: {
+ method: 'POST', url: '/fs?path={path}&type={type}'
+ },
+ "delete": {
+ method: 'DELETE', url: '/fs?path={path}&force={force}'
+ },
+ move: {
+ method: 'PUT', url: '/fs/move?src={src}&target={target}'
+ },
+ checkEnvironment: {
+ method: 'GET', url: '/fs/check'
+ }
+ };
+ this.__dirClient = new qx.io.rest.Resource(config);
+ this.__dirClient.setBaseUrl(this.BASE_URL);
+ this.__dirClient.configureRequest(function (req, action, params) {
+ if (params.hash) {
+ req.setUrl(req.getUrl() + '&hash=' + params.hash);
+ }
+ if (params.recursive === true && action === 'read') {
+ req.setUrl(req.getUrl() + '&recursive=true');
+ }
+ if (action === 'update' || action === 'create') {
+ var parts = params.path.split('.');
+ if (parts.length > 1) {
+ var type = parts.pop();
+ var mimetype = cv.ui.manager.tree.FileSystem.getMimetypeFromSuffix(type);
+ req.setRequestHeader('Content-Type', mimetype || 'text/plain');
+ } else {
+ req.setRequestHeader('Content-Type', 'text/plain');
+ }
+ req.setAccept('application/json');
+ }
+ });
+
+
+ this._enableSync(this.__dirClient, config);
+
+ // general listeners
+ this.__dirClient.addListener('updateSuccess', this._onSaveSuccess, this);
+ this.__dirClient.addListener('createSuccess', this._onSaveSuccess, this);
+ this.__dirClient.addListener('updateError', this._onSaveError, this);
+ this.__dirClient.addListener('createError', this._onSaveError, this);
+ }
+ return this.__dirClient;
+ },
+
+ getDataProviderClient: function () {
+ if (!this.__dpClient) {
+ var config = {
+ designs: {
+ method: 'GET', url: '/data/designs'
+ },
+ rrds: {
+ method: 'GET', url: '/data/rrds'
+ },
+ influxdbs: {
+ method: 'GET', url: '/data/influxdbs?auth={auth}'
+ },
+ influxdbfields: {
+ method: 'GET', url: '/data/influxdbfields?auth={auth}&measurement={measurement}'
+ },
+ influxdbtags: {
+ method: 'GET', url: '/data/influxdbtags?auth={auth}&measurement={measurement}'
+ }
+ };
+ this.__dpClient = new qx.io.rest.Resource(config);
+ this.__dpClient.setBaseUrl(this.BASE_URL);
+
+ this._enableSync(this.__dpClient, config);
+ }
+ return this.__dpClient;
+ },
+
+ _enableSync: function (client, config) {
+ // install the callback calls
+ Object.keys(config).forEach(function (callName) {
+ client[callName + 'Sync'] = function () {
+ var args = qx.lang.Array.fromArguments(arguments);
+ var callback;
+ var context = args.pop();
+ if (qx.lang.Type.isFunction(context)) {
+ callback = context;
+ context = this;
+ } else {
+ callback = args.pop();
+ }
+ this.__callbacks[client[callName].apply(client, args)] = callback.bind(context);
+ }.bind(this);
+ }, this);
+
+ // add the general listeners
+ client.addListener('success', function (ev) {
+ var req = ev.getRequest();
+ var id = parseInt(req.toHashCode(), 10);
+ if (this.__callbacks.hasOwnProperty(id)) {
+ this.__callbacks[id](null, ev.getData());
+ delete this.__callbacks[id];
+ }
+ }, this);
+
+ client.addListener('error', function (ev) {
+ var req = ev.getRequest();
+ var id = parseInt(req.toHashCode(), 10);
+ if (this.__callbacks.hasOwnProperty(id)) {
+ qx.log.Logger.error(this, ev.getData());
+ this.__callbacks[id](ev.getData().message, null);
+ delete this.__callbacks[id];
+ }
+ if (req.getPhase() === 'load') {
+ // error during load phase => backend not reachable
+ dialog.Dialog.error(qx.locale.Manager.tr('Backend does not respond!'));
+ }
+ }, this);
+ },
+
+ _onSaveSuccess: function (ev) {
+ var req = ev.getRequest();
+ var id = parseInt(req.toHashCode(), 10);
+ // only handle this events, when there is no callback for it
+ if (!this.__callbacks.hasOwnProperty(id)) {
+ cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('File has been saved'));
+ }
+ },
+
+ _onSaveError: function (ev) {
+ var req = ev.getRequest();
+ var id = parseInt(req.toHashCode(), 10);
+ // only handle this events, when there is no callback for it
+ if (!this.__callbacks.hasOwnProperty(id)) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Error saving file'));
+ }
+ }
+ }
+});
diff --git a/source/class/cv/plugins/openhab/Openhab.js b/source/class/cv/plugins/openhab/Openhab.js
index 8c06dd46c0f..05f9c9866f6 100644
--- a/source/class/cv/plugins/openhab/Openhab.js
+++ b/source/class/cv/plugins/openhab/Openhab.js
@@ -42,16 +42,18 @@ qx.Class.define("cv.plugins.openhab.Openhab", {
*/
construct: function () {
this.base(arguments);
+ if (!cv.Config.request.queryKey.hasOwnProperty('preview')) {
- this.__notificationRouter = cv.core.notifications.Router.getInstance();
+ this.__notificationRouter = cv.core.notifications.Router.getInstance();
- // listen to notifications
- var client = cv.TemplateEngine.getInstance().visu;
- var sse = client.getCurrentTransport && client.getCurrentTransport();
- if (sse) {
- sse.subscribe("notifications", this._onNotification, this);
+ // listen to notifications
+ var client = cv.TemplateEngine.getInstance().visu;
+ var sse = client.getCurrentTransport && client.getCurrentTransport();
+ if (sse) {
+ sse.subscribe("notifications", this._onNotification, this);
+ }
+ cv.TemplateEngine.getInstance().executeWhenDomFinished(this._createSettings, this);
}
- cv.TemplateEngine.getInstance().executeWhenDomFinished(this._createSettings, this);
},
/*
diff --git a/source/class/cv/svg/Element.js b/source/class/cv/svg/Element.js
new file mode 100644
index 00000000000..7f5b87dcfc1
--- /dev/null
+++ b/source/class/cv/svg/Element.js
@@ -0,0 +1,31 @@
+qx.Class.define("cv.svg.Element", {
+ extend: qx.html.Element,
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (tagName) {
+ this.base(arguments);
+ this.__svgElement = document.createElementNS("http://www.w3.org/2000/svg", tagName);
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _createDomElement : function() {
+ return this.__svgElement;
+ },
+ getDomElement : function() {
+ return this.__svgElement;
+ }
+ },
+
+ destruct : function() {
+ this.__svgElement.$$widget = null;
+ this.__svgElement = null;
+ }
+});
diff --git a/source/class/cv/theme/dark/Appearance.js b/source/class/cv/theme/dark/Appearance.js
index 8009d722097..b276cff0d57 100644
--- a/source/class/cv/theme/dark/Appearance.js
+++ b/source/class/cv/theme/dark/Appearance.js
@@ -20,9 +20,378 @@
qx.Theme.define("cv.theme.dark.Appearance", {
- extend : qx.theme.simple.Appearance,
+ extend : osparc.theme.osparcdark.Appearance,
appearances : {
+ 'cv-start': 'widget',
+ 'cv-start/configs-header': {
+ style: function () {
+ return {
+ margin: [20, 10, 0, 10],
+ decorator: 'cv-start-section-title'
+ };
+ }
+ },
+ 'cv-start/configs-title': {
+ style: function () {
+ return {
+ iconPosition: 'right',
+ font: 'title',
+ marginLeft: 10,
+ allowGrowX: true
+ };
+ }
+ },
+ 'cv-start/configs-toolbar': {
+ style: function () {
+ return {
+ };
+ }
+ },
+ 'cv-start/misc-title': {
+ style: function () {
+ return {
+ iconPosition: 'right',
+ font: 'title',
+ margin: [20, 10, 0, 10],
+ paddingTop: 5,
+ cursor: 'pointer',
+ allowGrowX: true,
+ decorator: 'cv-start-section-title'
+ };
+ }
+ },
+ 'cv-start/demo-configs-title': 'cv-start/misc-title',
+ 'cv-start/media-title': 'cv-start/configs-title',
+ 'cv-start/media-toolbar': 'cv-start/configs-toolbar',
+ 'cv-start/media-header': 'cv-start/configs-header',
+
+ 'cv-file-item': {
+ include: 'listitem',
+ alias: 'listitem',
+
+ style: function () {
+ return {
+ iconPosition: 'top',
+ font: 'small',
+ width: 130
+ };
+ }
+ },
+ 'cv-file-item/atom/icon': {
+ include: 'atom/icon',
+ style: function () {
+ return {
+ width: 70,
+ height: 70,
+ scale: true
+ };
+ }
+ },
+ 'cv-file-item/action-menu': 'menu',
+ 'cv-file-item/download-button': {
+ include: 'button',
+ alias: 'button',
+
+ style: function () {
+ return {
+ height: 30,
+ show: 'icon'
+ };
+ }
+ },
+ 'cv-file-item/action-button': 'cv-file-item/download-button',
+ 'cv-file-item/open-button': 'cv-file-item/download-button',
+ 'cv-icon': 'cv-file-item',
+ 'cv-icon/icon': {
+ include: 'atom/icon',
+ style: function () {
+ return {
+ width: 70,
+ height: 70
+ };
+ }
+ },
+ 'cv-file-item-add-file': {
+ include: 'cv-file-item',
+ alias: 'cv-file-item',
+
+ style: function (states) {
+ return {
+ decorator: 'cv-file-item-add-file',
+ opacity: states.hovered ? 1.0 : 0.5,
+ cursor: 'pointer'
+ };
+ }
+ },
+ 'open-file-item': {
+ alias: "atom",
+
+ style: function (states) {
+ var padding = [2, 5, 2, 5];
+ if (states.lead) {
+ padding = [1, 4, 1, 4];
+ }
+ if (states.dragover) {
+ padding[2] -= 1;
+ }
+
+ var backgroundColor;
+ if (states.selected) {
+ backgroundColor = "background-selected";
+ if (states.disabled) {
+ backgroundColor += "-disabled";
+ }
+ }
+ return {
+ backgroundColor: backgroundColor,
+ textColor: states.selected ? "text-selected" : undefined,
+ decorator: states.lead ? "lead-item" : states.dragover ? "dragover" : undefined,
+ opacity: states.drag ? 0.5 : undefined,
+ height: 26,
+ padding: padding,
+ margin: 0
+ };
+ }
+ },
+ 'open-file-item/label': {
+ include: 'listitem/label',
+
+ style: function () {
+ return {
+ alignY: 'middle'
+ };
+ }
+ },
+ 'open-file-item/icon': {
+ alias: 'listitem/icon',
+ style: function () {
+ return {
+ alignY: 'middle',
+ padding: [0, 8]
+ };
+ }
+ },
+ 'open-file-item/close': {
+
+ style: function () {
+ return {
+ padding: 8,
+ cursor: 'pointer',
+ alignY: 'middle'
+ };
+ }
+ },
+
+ 'open-with-button': {
+ include: 'menu-button',
+ alias: 'menu-button',
+
+ style: function (states) {
+ return {
+ font: states.default ? 'bold' : 'default'
+ };
+ }
+ },
+
+ 'list': {
+ style: function () {
+ return {
+ decorator: null
+ };
+ }
+ },
+
+ 'cv-editor-config': {
+ style: function () {
+ return {
+ padding: 10
+ };
+ }
+ },
+
+ 'cv-editor-config-section': {
+ style: function () {
+ return {
+ padding: 10,
+ decorator: 'cv-editor-config-section',
+ marginBottom: 10
+ };
+ }
+ },
+
+ 'cv-editor-config-option': {
+ style: function () {
+ return {
+ marginBottom: 10
+ };
+ }
+ },
+
+ 'cv-config-textfield': {
+ include: 'textfield',
+ alias: 'textfield',
+
+ style: function () {
+ return {
+ minWidth: 300
+ };
+ }
+ },
+
+ 'cv-editor-config-section/section-title': {
+ style: function () {
+ return {
+ font: 'title',
+ marginRight: 20
+ };
+ }
+ },
+
+ 'cv-editor-config-section/options-title': 'cv-editor-config-section/section-title',
+ 'cv-editor-config-section/name': 'cv-config-textfield',
+ 'cv-editor-config-section/list': {
+ include: 'list',
+ alias: 'list',
+
+ style: function() {
+ return {
+ height: null
+ };
+ }
+ },
+ 'cv-editor-config-option/value-title': {
+ style: function () {
+ return {
+ allowGrowX: true,
+ font: 'subtitle'
+ };
+ }
+ },
+ 'cv-editor-config-option/key-title': 'cv-editor-config-option/value-title',
+
+ // snackbar components
+ 'cv-snackbar': {
+ style: function () {
+ return {
+ zIndex: 1000
+ };
+ }
+ },
+
+ 'cv-snackbar/list': {
+ style: function () {
+ return {
+ height: null,
+ width: 400,
+ minWidth: 300
+ };
+ }
+ },
+
+ 'cv-snackbar-msg': {
+ style: function () {
+ return {
+ marginTop: 10,
+ padding: 10,
+ textColor: 'text',
+ decorator: 'cv-snackbar-msg'
+ };
+ }
+ },
+
+ 'cv-snackbar-msg/content': {
+ style: function () {
+ return {
+ allowGrowX: true
+ };
+ }
+ },
+
+ 'cv-snackbar-msg/close': {
+ style: function () {
+ return {
+ cursor: 'pointer'
+ };
+ }
+ },
+ 'cv-toolbar': {
+ include: 'toolbar',
+ alias: 'toolbar',
+
+ style: function () {
+ return {
+ // decorator: 'cv-toolbar'
+ };
+ }
+ },
+ 'cv-toolbar-button': {
+ include: 'toolbar-button',
+ alias: 'toolbar-button',
+
+ style: function () {
+ return {
+ // margin: 1
+ };
+ }
+ },
+
+ 'image-viewer': {},
+ 'image-viewer/scroll': 'scrollarea',
+ 'image-viewer/image': {
+ include: 'atom',
+ alias: 'atom',
+
+ style: function () {
+ return {
+ iconPosition: 'top',
+ gap: 10,
+ center: true
+ };
+ },
+ 'image-viewer/image/label': {
+ style: function () {
+ return {
+ margin: 10
+ };
+ }
+ }
+ },
+
+ 'fs-tree-item': {
+ include: 'virtual-tree-folder',
+ alias: 'virtual-tree-folder',
+
+ style: function (states) {
+ return {
+ font: states.temporary ? 'italic' : 'default'
+ };
+ }
+ },
+
+ 'fs-tree-item/icon': {
+ include: 'virtual-tree-folder/icon',
+ alias: 'virtual-tree-folder/icon',
+
+ style: function(states) {
+ return {
+ textColor: states.error ? 'invalid-color' : null
+ };
+ }
+ },
+ 'cv-file-contextmenu': 'menu',
+ 'cv-file-contextmenu/open-with-button': 'menu-button',
+ 'cv-file-contextmenu/compare-with-button': 'menu-button',
+ 'open-files-tabs': {
+ style: function () {
+ return {
+ height: 34,
+ padding: 0,
+ marginBottom: 5,
+ decorator: 'open-file-tabs'
+ };
+ }
+ }
}
});
\ No newline at end of file
diff --git a/source/class/cv/theme/dark/Color.js b/source/class/cv/theme/dark/Color.js
index 7bea322e3ab..02904ad75a9 100644
--- a/source/class/cv/theme/dark/Color.js
+++ b/source/class/cv/theme/dark/Color.js
@@ -20,9 +20,10 @@
qx.Theme.define("cv.theme.dark.Color", {
- extend : qx.theme.simple.Color,
+ extend : osparc.theme.osparcdark.Color,
colors : {
-
+ 'valid-color': '#22822d',
+ 'invalid-color': 'material-textfield-invalid'
}
});
\ No newline at end of file
diff --git a/source/class/cv/theme/dark/Decoration.js b/source/class/cv/theme/dark/Decoration.js
index 110a9d66be5..a185e734a3c 100644
--- a/source/class/cv/theme/dark/Decoration.js
+++ b/source/class/cv/theme/dark/Decoration.js
@@ -20,11 +20,67 @@
qx.Theme.define("cv.theme.dark.Decoration", {
- extend : qx.theme.simple.Decoration,
+ extend : osparc.theme.osparcdark.Decoration,
decorations : {
"window-caption-active": {
+ },
+ 'cv-editor-config-section': {
+ style: {
+ width: 1,
+ color: 'material-textfield'
+ }
+ },
+
+ 'cv-snackbar-msg': {
+ style: {
+ backgroundColor: 'button'
+ }
+ },
+
+ 'cv-snackbar-msg-error': {
+ style: {
+ backgroundColor: 'material-textfield-invalid'
+ }
+ },
+
+ 'cv-toolbar': {
+ style: {
+ width: [1, 0, 1, 0],
+ color: 'background-main'
+ }
+ },
+
+ 'file-action-button': {
+ style: {
+ width: 1,
+ color: 'text'
+ }
+ },
+
+ 'cv-start-section-title': {
+ style: {
+ width: [1, 0, 0, 0],
+ color: 'text-placeholder'
+ }
+ },
+ 'open-file-tabs': {
+ style: {
+ shadowSpreadRadius: 0,
+ shadowBlurRadius: 4,
+ shadowHorizontalLength: 1,
+ shadowVerticalLength: 1,
+ shadowColor: 'rgba(255, 255, 255, 0.1)'
+ }
+ },
+
+ 'cv-file-item-add-file': {
+ style: {
+ width: 1,
+ color: 'text',
+ style: 'dashed'
+ }
}
}
});
\ No newline at end of file
diff --git a/source/class/cv/theme/dark/Font.js b/source/class/cv/theme/dark/Font.js
index 7732d630da7..ce95b7f1cee 100644
--- a/source/class/cv/theme/dark/Font.js
+++ b/source/class/cv/theme/dark/Font.js
@@ -20,37 +20,98 @@
/**
* Font definitions
- *
+ * @asset(iconfont/material/MaterialIcons-Regular.eot)
+ * @asset(iconfont/material/MaterialIcons-Regular.ttf)
+ * @asset(iconfont/material/MaterialIcons-Regular.woff)
+ * @asset(iconfont/material/MaterialIcons-Regular.woff2)
+ * @asset(iconfont/material/MaterialIcons-Regular.json)
*/
-qx.Theme.define("cv.theme.dark.Font",
-{
- extend : qx.theme.simple.Font,
+qx.Theme.define("cv.theme.dark.Font",{
+ extend : osparc.theme.osparcdark.Font,
fonts : {
- "default" :
- {
- size : 13,
- family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"]
+ "italic": {
+ size: 13,
+ family: ["sans-serif"],
+ color: "text",
+ italic: true,
+ sources: [
+ {
+ family: "Roboto",
+ source: [
+ "osparc/font/roboto-v18-latin_latin-ext-regular.eot",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff2",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.ttf"
+ ]
+ }
+ ]
},
-
- "bold" :
- {
- size : 13,
- family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"],
- bold: true
- },
-
- "subtext" :
- {
- size : 12,
- family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"]
+ "title": {
+ size: 18,
+ family: ["sans-serif"],
+ color: "text",
+ sources: [
+ {
+ family: "Roboto",
+ source: [
+ "osparc/font/roboto-v18-latin_latin-ext-regular.eot",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff2",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.ttf"
+ ]
+ }
+ ]
+ },
+ "small": {
+ size: 12,
+ family: ["sans-serif"],
+ color: "text",
+ sources: [
+ {
+ family: "Roboto",
+ source: [
+ "osparc/font/roboto-v18-latin_latin-ext-regular.eot",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff2",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.ttf"
+ ]
+ }
+ ]
+ },
+ "subtitle": {
+ size: 16,
+ family: ["sans-serif"],
+ color: "text",
+ sources: [
+ {
+ family: "Roboto",
+ source: [
+ "osparc/font/roboto-v18-latin_latin-ext-regular.eot",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff2",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.woff",
+ "osparc/font/roboto-v18-latin_latin-ext-regular.ttf"
+ ]
+ }
+ ]
},
-
- "title" :
- {
- size : 18,
- bold : true,
- family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"]
+ "MaterialIcons": {
+ size: 32,
+ lineHeight: 1,
+ comparisonString : "\uf1e3\uf1f7\uf11b\uf19d",
+ family: ["MaterialIcons"],
+ sources: [
+ {
+ family: "MaterialIcons",
+ mapping: "iconfont/material/MaterialIcons-Regular.json",
+ source: [
+ "iconfont/material/MaterialIcons-Regular.eot",
+ "iconfont/material/MaterialIcons-Regular.woff2",
+ "iconfont/material/MaterialIcons-Regular.woff",
+ "iconfont/material/MaterialIcons-Regular.ttf"
+ ]
+ }
+ ]
}
}
});
\ No newline at end of file
diff --git a/source/class/cv/theme/dark/Icon.js b/source/class/cv/theme/dark/Icon.js
index e2e6779a269..b892ef69529 100644
--- a/source/class/cv/theme/dark/Icon.js
+++ b/source/class/cv/theme/dark/Icon.js
@@ -19,5 +19,13 @@
qx.Theme.define("cv.theme.dark.Icon", {
+ extend: qx.theme.icon.Tango,
+ aliases: {
+ "dialog.icon.cancel" : "@MaterialIcons/cancel/18",
+ "dialog.icon.ok" : "@MaterialIcons/check/18",
+ "dialog.icon.info" : "@MaterialIcons/info/18",
+ "dialog.icon.error" : "@MaterialIcons/error/18",
+ "dialog.icon.warning" : "@MaterialIcons/warning/18"
+ }
});
\ No newline at end of file
diff --git a/source/class/cv/theme/dark/Images.js b/source/class/cv/theme/dark/Images.js
new file mode 100644
index 00000000000..4e36b4b2305
--- /dev/null
+++ b/source/class/cv/theme/dark/Images.js
@@ -0,0 +1,57 @@
+/**
+ * Some icon definitions.
+ */
+qx.Class.define('cv.theme.dark.Images', {
+ type: 'static',
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ ICONS: {
+ 'new': '@MaterialIcons/add',
+ 'new-file': '@MaterialIcons/note_add',
+ 'new-folder': '@MaterialIcons/create_new_folder',
+ 'save': '@MaterialIcons/save',
+ 'delete': '@MaterialIcons/delete',
+ 'close': '@MaterialIcons/close',
+ 'quit': '@MaterialIcons/exit_to_app',
+ 'undo': '@MaterialIcons/undo',
+ 'redo': '@MaterialIcons/redo',
+ 'hidden-config': '@MaterialIcons/settings',
+ 'reload': '@MaterialIcons/sync',
+ 'add': '@MaterialIcons/add',
+ 'mounted-folder': '@MaterialIcons/folder_special',
+ 'folder': '@MaterialIcons/folder',
+ 'folder-open': '@MaterialIcons/folder_open',
+ 'file': '@MaterialIcons/insert_drive_file',
+ 'download': '@MaterialIcons/cloud_download',
+ 'upload': '@MaterialIcons/cloud_upload',
+ 'rename': '@MaterialIcons/text_rotation_none',
+ 'compare': '@MaterialIcons/compare_arrows',
+ 'preview': '@MaterialIcons/remove_red_eye',
+ 'trash': '@MaterialIcons/delete',
+ 'open': '@MaterialIcons/open_in_browser',
+ 'open-with': '@MaterialIcons/open_with',
+ 'validate': '@MaterialIcons/spellcheck',
+ 'valid': '@MaterialIcons/check_circle',
+ 'error': '@MaterialIcons/error',
+ 'image': '@MaterialIcons/image',
+ 'text': '@MaterialIcons/format_align_left',
+ 'xml': '@MaterialIcons/ballot',
+ 'icons': '@MaterialIcons/image_search',
+ 'home': '@MaterialIcons/home',
+ 'edit': '@MaterialIcons/edit',
+ 'menu': '@MaterialIcons/menu',
+ 'drop-down': '@MaterialIcons/arrow_drop_down',
+ 'drop-up': '@MaterialIcons/arrow_drop_up',
+ 'clone-file': '@MaterialIcons/file_copy'
+ },
+
+ getIcon: function (name, size) {
+ return this.ICONS.hasOwnProperty(name) ? this.ICONS[name] + '/' + size : '@MaterialIcons/' + name + '/' + size;
+ }
+ }
+});
diff --git a/source/class/cv/ui/NotificationCenter.js b/source/class/cv/ui/NotificationCenter.js
index 468f0bed1de..8b2794f1b73 100644
--- a/source/class/cv/ui/NotificationCenter.js
+++ b/source/class/cv/ui/NotificationCenter.js
@@ -70,7 +70,7 @@ qx.Class.define("cv.ui.NotificationCenter", {
cv.core.notifications.Router.getInstance().registerMessageHandler(this, {
'cv.*': {}
});
- this._openCommand = new qx.ui.command.Command("Ctrl+M");
+ this._openCommand = new qx.ui.command.Command("Ctrl+N");
this._openCommand.addListener("execute", this.toggleVisibility, this);
cv.TemplateEngine.getInstance().getCommands().add("open-notificationcenter", this._openCommand);
diff --git a/source/class/cv/ui/manager/IActionHandler.js b/source/class/cv/ui/manager/IActionHandler.js
new file mode 100644
index 00000000000..aac774f2d1c
--- /dev/null
+++ b/source/class/cv/ui/manager/IActionHandler.js
@@ -0,0 +1,24 @@
+/**
+ * All Widgets that need to handle actions from the managers action event, need to implement this interface.
+ */
+qx.Interface.define('cv.ui.manager.IActionHandler', {
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ /**
+ * Checks if the action handle can process the action.
+ * @param actionName {String} action name
+ */
+ canHandleAction: function(actionName) {},
+
+ /**
+ * Executes the action handling.
+ * @param actionName {String} action name
+ * @param data {var} action payload
+ */
+ handleAction: function (actionName, data) {}
+ }
+});
diff --git a/source/class/cv/ui/manager/Main.js b/source/class/cv/ui/manager/Main.js
new file mode 100644
index 00000000000..4ce63b6239c
--- /dev/null
+++ b/source/class/cv/ui/manager/Main.js
@@ -0,0 +1,757 @@
+/**
+ * Main class of the CometVisu file manager.
+ * @author Tobias Bräutigam
+ * @since 0.12.0
+ *
+ * @asset(manager/*)
+ */
+qx.Class.define('cv.ui.manager.Main', {
+ extend: qx.core.Object,
+ type: "singleton",
+ include: [
+ cv.ui.manager.control.MFileEventHandler
+ ],
+ implement: [cv.ui.manager.IActionHandler, cv.ui.manager.control.IFileEventHandler],
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._checkEnvironment();
+ this.initOpenFiles(new qx.data.Array());
+ this.__actionDispatcher = cv.ui.manager.control.ActionDispatcher.getInstance();
+ this.__actionDispatcher.setMain(this);
+
+ this.__initCommands();
+ this._draw();
+
+ qx.event.message.Bus.subscribe('cv.manager.*', this._onManagerEvent, this);
+
+ // Initialize tooltip manager
+ qx.ui.tooltip.Manager.getInstance();
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ ROOT: null
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ openFiles: {
+ check: 'qx.data.Array',
+ deferredInit: true
+ },
+
+ /**
+ * Current selected folder (if a file is selected its parent folder) is writeable.
+ */
+ writeableFolder: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeWriteableFolder'
+ },
+
+ currentFolder: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_applyCurrentFolder',
+ event: 'changeCurrentFolder'
+ },
+
+ currentSelection: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_applyCurrentSelection',
+ event: 'changeCurrentSelection'
+ },
+
+ deleteableSelection: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeDeleteableSelection'
+ },
+
+ renameableSelection: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeRenameableSelection'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __previewFileIndex: null,
+ __root: null,
+ _pane: null,
+ _tree: null,
+ _stack: null,
+ _oldCommandGroup: null,
+ _mainContent: null,
+ _openFilesController: null,
+ _hiddenConfigFakeFile: null,
+ __actionDispatcher: null,
+
+ _checkEnvironment: function () {
+ cv.io.rest.Client.getFsClient().checkEnvironmentSync(function (err, res) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else if (res) {
+ res.forEach(function (env) {
+ switch (env.entity) {
+ case '.':
+ // config folder must be writeable
+ if ((env.state & 1) === 0) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('config folder does not exists'));
+ } else if ((env.state & 2) === 0) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('config folder is not readable'));
+ } else if ((env.state & 4) === 0) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('config folder is not writeable'));
+ }
+ break;
+
+ case 'backup':
+ if ((env.state & 4) === 0) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('backup folder is not writeable'));
+ }
+ break;
+
+ case 'media':
+ if ((env.state & 4) === 0) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('media folder is not writeable'));
+ }
+ break;
+ }
+ }, this);
+ }
+ }, this);
+ },
+
+ canHandleAction: function (actionName) {
+ return ['close', 'quit', 'hidden-config', 'new-file', 'new-config-file', 'new-folder', 'delete', 'upload', 'clone'].includes(actionName);
+ },
+
+ handleAction: function (actionName, data) {
+ switch (actionName) {
+ case 'hidden-config':
+ this._onOpenHiddenConfig();
+ break;
+
+ case 'close':
+ this.closeCurrentFile();
+ break;
+
+ case 'quit':
+ this.dispose();
+ break;
+
+ case 'new-file':
+ this._onCreate('file');
+ break;
+
+ case 'new-config-file':
+ cv.io.rest.Client.getFsClient().readSync({path: '.templates/visu_config.xml'}, function (err, res) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Cannot load config template'));
+ } else {
+ this._onCreate('config', res);
+ }
+ }, this);
+ break;
+
+ case 'clone':
+ cv.io.rest.Client.getFsClient().readSync({path: data.file.getFullPath()}, function (err, res) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Cannot load file content'));
+ } else {
+ if (data.file.isConfigFile()) {
+ // config files need to be cloned in the root folder
+ this._onCreate('config', res, cv.ui.manager.model.FileItem.ROOT);
+ } else {
+ this._onCreate('file', res);
+ }
+ }
+ }, this);
+ break;
+
+ case 'new-folder':
+ this._onCreate('dir');
+ break;
+
+ case 'delete':
+ this._onDelete(data);
+ break;
+
+ case 'upload':
+ // nothing to to, this is handled in another way
+ break;
+
+ default:
+ this.warn(actionName + ' handling is not implemented yet!');
+ break;
+ }
+ },
+
+ _handleFileEvent: function (ev) {
+ var data = ev.getData();
+ if (data.action === 'deleted') {
+ // check if file is currently opened and close it
+ var openFiles = this.getOpenFiles().copy();
+ openFiles.some(function (openFile) {
+ if (openFile.getFile().isRelated(data.path)) {
+ this.closeFile(openFile);
+ }
+ }, this);
+ }
+ },
+
+ _onManagerEvent: function (ev) {
+ var data = ev.getData();
+ switch (ev.getName()) {
+ case 'cv.manager.compareFiles':
+ this.openFile(data, false);
+ break;
+
+ case 'cv.manager.openWith':
+ this.openFile(data.file || this.getCurrentSelection(), false, data.handler);
+ break;
+
+ case 'cv.manager.open':
+ this.openFile(data || this.getCurrentSelection(), false);
+ break;
+ }
+ },
+
+ /**
+ * open selected file in preview mode
+ * @private
+ */
+ _onChangeTreeSelection: function (ev) {
+ var data = ev.getData();
+ if ((cv.ui.manager.model.Preferences.getInstance().isQuickPreview() && data.mode === 'tap') || data.mode === 'dbltap') {
+ this.__openSelectedFile(data.node, data.mode);
+ }
+ var node = data.node;
+ if (node) {
+ if (data.node.getType() === 'file') {
+ this.setCurrentFolder(data.node.getParent());
+ } else {
+ this.setCurrentFolder(node);
+ }
+ this.setCurrentSelection(node);
+ } else {
+ this.resetCurrentFolder();
+ this.resetCurrentSelection();
+ }
+ },
+
+ __openSelectedFile: function (node, mode) {
+ if (node) {
+ if (node.getType() === 'file') {
+ this.openFile(node, mode === 'tap');
+ } else if (mode === 'dbltap') {
+ // edit folder name on dbltap
+ node.setEditing(true);
+ }
+ }
+ },
+
+ _applyCurrentFolder: function (value, old) {
+ if (old) {
+ old.removeRelatedBindings(this);
+ }
+ if (value) {
+ value.bind('writeable', this, 'writeableFolder');
+ } else {
+ this.resetWriteableFolder();
+ }
+ },
+
+ _applyCurrentSelection: function (value, old) {
+ if (old) {
+ old.removeRelatedBindings(this);
+ }
+ if (value) {
+ value.bind('writeable', this, 'deleteableSelection');
+ value.bind('inTrash', this, 'renameableSelection', {
+ converter: function (value) {
+ return !value;
+ }
+ });
+ } else {
+ this.resetDeleteableSelection();
+ }
+ },
+
+ _onChangeFileSelection: function () {
+ var sel = this._openFilesController.getSelection();
+ if (sel.length > 0) {
+ var openFile = sel.getItem(0);
+ var file = openFile.getFile();
+ var editorConfig;
+ var handlerId = openFile.getHandlerId();
+ if (handlerId) {
+ editorConfig = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandlerById(handlerId);
+ } else {
+ editorConfig = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file);
+ }
+ if (!editorConfig.instance) {
+ editorConfig.instance = new editorConfig.Clazz();
+ editorConfig.instance.setFile(file);
+ this._stack.add(editorConfig.instance);
+ } else {
+ editorConfig.instance.setFile(file);
+ }
+ this._stack.setSelection([editorConfig.instance]);
+ this.__actionDispatcher.setFocusedWidget(editorConfig.instance);
+ }
+ },
+
+ openFile: function (file, preview, handlerId) {
+ var openFiles = this.getOpenFiles();
+ var openFile;
+ if (!handlerId) {
+ var handlerConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file);
+
+ if (!handlerConf) {
+ // no handler
+ cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('Cannot open file: "%1"', file.getName()));
+ return;
+ } else {
+ handlerId = handlerConf.Clazz.classname;
+ }
+ }
+ var isOpen = openFiles.some(function (of) {
+ if (of.getFile() === file && handlerId === of.getHandlerId()) {
+ openFile = of;
+ return true;
+ }
+ });
+ if (!openFile) {
+ openFile = new cv.ui.manager.model.OpenFile(file, handlerId);
+ }
+ if (preview === true) {
+ if (!openFile.isPermanent()) {
+ if (this.__previewFileIndex !== null && !openFiles.getItem(this.__previewFileIndex).isPermanent()) {
+ openFiles.setItem(this.__previewFileIndex, openFile);
+ } else {
+ this.__previewFileIndex = openFiles.length;
+ openFiles.push(openFile);
+ }
+ // do not 'downgrade' the permanent state
+ openFile.setPermanent(false);
+ }
+ } else {
+ if (!isOpen && (this.__previewFileIndex === null || openFiles.indexOf(openFile) !== this.__previewFileIndex)) {
+ openFiles.push(openFile);
+ }
+ openFile.setPermanent(true);
+ this.__previewFileIndex = null;
+ }
+ this._openFilesController.getTarget().setModelSelection([openFile]);
+ },
+
+ closeFile: function (openFile, force) {
+ var file = openFile.getFile();
+ if (!openFile.isCloseable()) {
+ return;
+ }
+
+ // check if this file is modified
+ if (file.isModified() && !force) {
+ // check if temporary
+ var message = qx.locale.Manager.tr('This file has unsaved changes that will be lost when you close it. Do you really want to close the file?');
+ if (file.isTemporary()) {
+ message = qx.locale.Manager.tr('This file has not been saved on the backend yet. It will be lost when you close it. Do you really want to close the file?');
+ }
+ dialog.Dialog.confirm(message, function (confirmed) {
+ if (confirmed) {
+ this.closeFile(openFile, true);
+ }
+ }, this, qx.locale.Manager.tr('Unsaved changes'));
+ return;
+ }
+ openFile.resetPermanent();
+ var currentSelection = this._openFilesController.getSelection();
+ var selectionIndex = -1;
+ var openFiles = this.getOpenFiles();
+ if (currentSelection.length > 0 && currentSelection.getItem(0) === openFile) {
+ // we need to select another file after this one got closed
+ selectionIndex = openFiles.indexOf(openFile);
+ }
+ openFiles.remove(openFile);
+ if (this.getOpenFiles().length === 0) {
+ this._stack.resetSelection();
+ this.__actionDispatcher.resetFocusedWidget();
+ this.__previewFileIndex = null;
+ }
+ if (selectionIndex > 0) {
+ this._openFilesController.getSelection().replace(openFiles.getItem(selectionIndex - 1));
+ } else if (selectionIndex === 0 && openFiles.length > 0) {
+ this._openFilesController.getSelection().replace(openFiles.getItem(0));
+ }
+
+ if (file instanceof cv.ui.manager.model.CompareFiles) {
+ var fileHandlerConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file);
+ fileHandlerConf.instance.clear();
+ if (openFiles.filter(function (openFile) {
+ return openFile.getFile() instanceof cv.ui.manager.model.CompareFiles;
+ }).length === 0) {
+ fileHandlerConf.instance.destroy();
+ fileHandlerConf.instance = null;
+ }
+ } else if (window.monaco && openFile.getHandlerId() === 'cv.ui.manager.editor.Source') {
+ // close textmodel in monaco editor if exists
+ var oldModel = window.monaco.editor.getModel(file.getUri());
+ if (oldModel) {
+ oldModel.dispose();
+ }
+ }
+ },
+
+ closeCurrentFile: function () {
+ var selected = this._openFilesController.getSelection().length > 0 ? this._openFilesController.getSelection().getItem(0) : null;
+ if (selected) {
+ this.closeFile(selected);
+ }
+ },
+
+ _onCloseFile: function (ev) {
+ this.closeFile(ev.getData());
+ },
+
+ __getRoot: function () {
+ if (!this.__root) {
+ this.__root = qx.dom.Element.create('div', {
+ id: 'manager',
+ style: 'position: absolute; top: 0; left: 0; right: 0; bottom: 0;'
+ });
+ qx.dom.Element.insertEnd(this.__root, document.body);
+ qx.theme.manager.Meta.getInstance().setTheme(cv.theme.Dark);
+ }
+ return this.__root;
+ },
+
+ __initCommands: function () {
+ var group = new qx.ui.command.Group();
+ group.add('save', new qx.ui.command.Command('Ctrl+S'));
+ group.add('save-as', new qx.ui.command.Command('Ctrl+Shift+S'));
+ // this command will close the browser window, thats not what we want
+ // group.add('close', new qx.ui.command.Command('Ctrl+W'));
+ group.add('new-file', new qx.ui.command.Command('Ctrl+N'));
+ group.add('new-folder', new qx.ui.command.Command('Ctrl+Shift+N'));
+ group.add('quit', new qx.ui.command.Command('Ctrl+Q'));
+ // group.add('delete', new qx.ui.command.Command('Del'));
+
+ var renameCommand = new qx.ui.command.Command('F2');
+ group.add('rename', renameCommand);
+ this.bind('renameableSelection', renameCommand, 'enabled');
+
+ // edit commands (adding cut/copy/paste command will deactivate the native browser functions)
+ // and as we cannot simulate pasting from clipboard, we do not use them here
+ // group.add('cut', new qx.ui.command.Command('Ctrl+X'));
+ // group.add('copy', new qx.ui.command.Command('Ctrl+C'));
+ // group.add('paste', new qx.ui.command.Command('Ctrl+V'));
+
+ var manager = qx.core.Init.getApplication().getCommandManager();
+ this._oldCommandGroup = manager.getActive();
+ manager.add(group);
+ manager.setActive(group);
+ },
+
+ _onOpenHiddenConfig: function () {
+ var fakeFile = new cv.ui.manager.model.FileItem.getHiddenConfigFile();
+ if (this.getOpenFiles().includes(fakeFile)) {
+ this.closeFile(fakeFile);
+ } else {
+ this.openFile(fakeFile, false);
+ }
+ },
+
+ _onDelete: function (file) {
+ var item = file || this.getCurrentSelection();
+ if (item) {
+ cv.ui.manager.control.FileController.getInstance().delete(item);
+ }
+ },
+
+ _onChangeStackSelection: function (ev) {
+ var selection = ev.getData();
+ var openFiles = [];
+ // sync tab selection with currently visible page
+ selection.forEach(function(page) {
+ var openFile = this.getOpenFiles().toArray().find(function (openFile) {
+ return openFile.getFile() === page.getFile() && openFile.getHandlerId() === page.classname;
+ });
+ if (openFile) {
+ openFiles.push(openFile);
+ }
+ }, this);
+
+ this._openFilesController.getSelection().replace(openFiles);
+ },
+
+ _onCreate: function (type, content, folder) {
+ var currentFolder = folder || this.getCurrentFolder();
+ if (!currentFolder) {
+ return;
+ }
+ var message, existsMessage;
+ if (type === 'config') {
+ message = qx.locale.Manager.tr('Please enter the name of the new configuration (without "visu_config_" at the beginning and ".xml" at the end)');
+ existsMessage = qx.locale.Manager.tr('A configuration with this name already exists.');
+ } else if (type === 'file') {
+ message = qx.locale.Manager.tr('Please enter the file name.');
+ existsMessage = qx.locale.Manager.tr('A file with this name already exists.');
+ } else {
+ message = qx.locale.Manager.tr('Please enter the folder name.');
+ existsMessage = qx.locale.Manager.tr('A folder with this name already exists.');
+ }
+ var handlePrompt = function (name) {
+ if (!name) {
+ // canceled
+ return;
+ }
+ var filename = name;
+ // add visu_config_..-xml
+ if (type === 'config') {
+ var match = /visu[_-]config[_-]([\w\d_-]+)(\.xml)?/.exec(name);
+ if (match) {
+ name = match[1];
+ }
+ filename = 'visu_config_' + name + '.xml';
+ }
+ // check if name does not exist
+ var exists = currentFolder.getChildren().some(function (child) {
+ if (child.getName() === filename) {
+ return true;
+ }
+ }, this);
+
+ if (exists) {
+ cv.ui.manager.snackbar.Controller.error(existsMessage);
+ dialog.Dialog.prompt(message, handlePrompt, this, name);
+ } else {
+ var item = new cv.ui.manager.model.FileItem(filename, currentFolder.getPath(), currentFolder);
+ item.set({
+ type: type === 'config' ? 'file' : type,
+ readable: true,
+ writeable: true,
+ loaded: true,
+ modified: true,
+ temporary: true,
+ parentFolder: currentFolder.getFullPath(),
+ content: content || ''
+ });
+ currentFolder.addChild(item);
+ currentFolder.sortElements();
+ this._tree.refresh();
+ this._tree.setSelection(item);
+ this.openFile(item, false);
+ }
+ };
+
+ dialog.Dialog.prompt(message, handlePrompt, this);
+ },
+
+ /**
+ * Finds next droppable parent of the given element. Maybe the element itself as well.
+ *
+ * Looks for the attribute qxDroppable
with the value on
.
+ *
+ * @param elem {Element} The element to query
+ * @return {Element} The next parent element which is droppable. May also be null
+ */
+ __findDroppable : function (elem) {
+ while (elem && elem.nodeType === 1) {
+ if (elem.getAttribute("qxDroppable") === "on") {
+ return elem;
+ }
+
+ elem = elem.parentNode;
+ }
+
+ return null;
+ },
+
+ // overridden
+ _draw: function () {
+
+ var root = new qx.ui.root.Inline(this.__getRoot(), true, true);
+ root.addListenerOnce('appear', function () {
+ // disable file drop
+ var element = root.getContentElement().getDomElement();
+ element.addEventListener('drop', function (ev) {
+ var target = this.__findDroppable(ev.target);
+ if (!target) {
+ ev.preventDefault();
+ }
+ }.bind(this));
+ element.addEventListener('dragover', function (ev) {
+ var target = this.__findDroppable(ev.target);
+ if (!target) {
+ ev.preventDefault();
+ }
+ }.bind(this));
+ }, this);
+ qx.core.Init.getApplication().setRoot(root);
+ root.setLayout(new qx.ui.layout.Canvas());
+
+ var snackbar = cv.ui.manager.snackbar.Controller.getInstance();
+ root.add(snackbar, {
+ bottom: 10,
+ left: 200
+ });
+
+ function resize() {
+ var bounds = root.getBounds();
+ snackbar.setLayoutProperties({
+ bottom: 10,
+ left: Math.round(bounds.width / 2) - 150
+ });
+ snackbar.setMaxHeight(bounds.height - 40);
+ }
+ root.addListener('resize', resize, this);
+ root.addListener('appear', resize, this);
+
+ var main = new qx.ui.container.Composite(new qx.ui.layout.Dock());
+ root.add(main, {edge: 0});
+ // menu on top
+ var menuBar = cv.ui.manager.MenuBar.getInstance();
+ main.add(menuBar, {edge: 'north'});
+
+ var uploadButton = menuBar.getButton('upload');
+ var uploadManager = new cv.ui.manager.upload.UploadMgr(uploadButton);
+ this.bind('currentFolder', uploadManager, 'folder');
+
+ this._pane = new qx.ui.splitpane.Pane();
+ main.add(this._pane, {edge: 'center'});
+
+ var rootFolder = cv.ui.manager.model.FileItem.ROOT = new cv.ui.manager.model.FileItem('.');
+ var fakeIconFile = cv.ui.manager.model.FileItem.getIconFile();
+ // TODO: needs to be verified by the backend
+ rootFolder.set({
+ overrideIcon: true,
+ writeable: true,
+ readable: true,
+ open: true,
+ fakeChildren: [fakeIconFile],
+ icon: cv.theme.dark.Images.getIcon('home', 18)
+ });
+ this.setCurrentFolder(rootFolder);
+ this._tree = new cv.ui.manager.tree.FileSystem(rootFolder);
+ this._tree.addListener("changeSelection", this._onChangeTreeSelection, this);
+
+ // left container
+ var leftContainer = new qx.ui.container.Composite(new qx.ui.layout.VBox());
+
+ // left toolbar
+ var leftBar = new cv.ui.manager.ToolBar(uploadManager);
+ this.bind('currentFolder', leftBar, 'folder');
+ this.bind('currentSelection', leftBar, 'file');
+ leftBar.addListener('reload', this._tree.reload, this._tree);
+
+ // globally bind writeable folder to command for new files
+ var buttonConfig = menuBar.getButtonConfiguration();
+ this.bind('writeableFolder', buttonConfig['new-file'].args[2], 'enabled');
+ this.bind('writeableFolder', buttonConfig['new-folder'].args[2], 'enabled');
+
+ leftContainer.add(leftBar);
+ leftContainer.add(this._tree, {flex: 1});
+ this._pane.add(leftContainer, 0);
+ cv.ui.manager.model.Preferences.getInstance().bind('expertMode', leftContainer, 'visibility', {
+ converter: function (value) {
+ return value ? 'visible' : 'excluded';
+ }
+ });
+
+ this._mainContent = new qx.ui.container.Composite(new qx.ui.layout.VBox());
+
+ // tab list
+ var list = new qx.ui.form.List(true);
+ list.setAppearance('open-files-tabs');
+ this._openFilesController = new qx.data.controller.List(this.getOpenFiles(), list, "file.name");
+ this._openFilesController.setDelegate({
+ createItem: function () {
+ var item = new cv.ui.manager.form.FileTabItem();
+ item.addListener('close', this._onCloseFile, this);
+ return item;
+ }.bind(this),
+
+ bindItem: function (controller, item, index) {
+ controller.bindDefaultProperties(item, index);
+ controller.bindProperty('file.permanent', 'permanent', null, item, index);
+ controller.bindProperty('file.modified', 'modified', null, item, index);
+ controller.bindProperty('icon', 'icon', null, item, index);
+ controller.bindProperty('closeable', 'closeable', null, item, index);
+ }
+ });
+ list.addListener('changeSelection', this._onChangeFileSelection, this);
+ this._mainContent.add(list);
+
+ this._stack = new qx.ui.container.Stack();
+ this._stack.addListener('changeSelection', this._onChangeStackSelection, this);
+ this._mainContent.add(this._stack, {flex: 1});
+ this._pane.add(this._mainContent, 1);
+
+ var startOpenFile = new cv.ui.manager.model.OpenFile(rootFolder, 'cv.ui.manager.Start');
+ startOpenFile.setCloseable(false);
+ console.log(startOpenFile);
+ this.getOpenFiles().push(startOpenFile);
+ list.setModelSelection([startOpenFile]);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._disposeObjects(
+ '_pane', '_tree', '_stack', '_mainContent', '_openFilesController'
+ );
+ // restore former command group
+ var application = qx.core.Init.getApplication();
+ var manager = application.getCommandManager();
+ manager.setActive(this._oldCommandGroup);
+ this._oldCommandGroup = null;
+
+ // defer the reset to let the dispose queue to be emptied before removing the root
+ new qx.util.DeferredCall(function () {
+ application.resetRoot();
+ }).schedule();
+
+ document.body.removeChild(this.__root);
+ this.__root = null;
+ this.__actionDispatcher = null;
+
+ qx.event.message.Bus.unsubscribe('cv.manager.*', this._onManagerEvent, this);
+
+ // destroy the singleton instance
+ delete cv.ui.manager.Main.$$instance;
+ },
+
+ defer: function(statics) {
+ // initialize on load
+ statics.getInstance();
+
+ // load backupFolder
+ cv.ui.manager.model.BackupFolder.getInstance();
+ }
+});
diff --git a/source/class/cv/ui/manager/MenuBar.js b/source/class/cv/ui/manager/MenuBar.js
new file mode 100644
index 00000000000..e393d3185eb
--- /dev/null
+++ b/source/class/cv/ui/manager/MenuBar.js
@@ -0,0 +1,315 @@
+/**
+ * Main toolbar on top.
+ */
+qx.Class.define('cv.ui.manager.MenuBar', {
+ extend: qx.ui.menubar.MenuBar,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._commandGroup = qx.core.Init.getApplication().getCommandManager().getActive();
+ this.__buttons = {};
+
+ this._draw();
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _commandGroup: null,
+ __buttons: null,
+ __defaultButtonConfiguration: null,
+ __buttonConfiguration: null,
+
+ _draw: function () {
+ this._createChildControl('file');
+ this._createChildControl('edit');
+ this._createChildControl('preferences');
+ this.add(new qx.ui.core.Spacer(), {flex: 1});
+
+ this._createChildControl('title');
+ this.add(new qx.ui.core.Spacer(), {flex: 1});
+
+ var editorGroup = new qx.ui.form.RadioGroup();
+
+ this.__defaultButtonConfiguration = {
+ 'new-file': {
+ menu: 'new-menu',
+ args: [this.tr('New file'), cv.theme.dark.Images.getIcon('new-file', 18), this._commandGroup.get('new-file')],
+ enabled: true
+ },
+ 'new-folder': {
+ menu: 'new-menu',
+ args: [this.tr('New folder'), cv.theme.dark.Images.getIcon('new-folder', 18), this._commandGroup.get('new-folder')],
+ enabled: true,
+ separator: 'after'
+ },
+ 'new-config-file': {
+ menu: 'new-menu',
+ args: [this.tr('New config file')],
+ enabled: true
+ },
+ 'upload': {
+ menu: 'file-menu',
+ clazz: com.zenesis.qx.upload.UploadMenuButton,
+ args: [this.tr('Upload file'), cv.theme.dark.Images.getIcon('upload', 18)],
+ enabled: true,
+ separator: 'before'
+ },
+ 'save': {
+ menu: 'file-menu',
+ args: [this.tr('Save'), cv.theme.dark.Images.getIcon('save', 18), this._commandGroup.get('save')],
+ enabled: false,
+ separator: 'before'
+ },
+ 'save-as': {
+ menu: 'file-menu',
+ args: [this.tr('Save as...'), null, this._commandGroup.get('save-as')],
+ enabled: false
+ },
+ 'delete': {
+ menu: 'file-menu',
+ args: [this.tr('Delete'), cv.theme.dark.Images.getIcon('delete', 18), this._commandGroup.get('delete')],
+ enabled: false,
+ separator: 'before'
+ },
+ 'close': {
+ menu: 'file-menu',
+ args: [this.tr('Close file'), cv.theme.dark.Images.getIcon('close', 18), this._commandGroup.get('close')],
+ enabled: false,
+ separator: 'before'
+ },
+ 'quit': {
+ menu: 'file-menu',
+ args: [this.tr('Quit'), cv.theme.dark.Images.getIcon('quit', 18), this._commandGroup.get('quit')],
+ enabled: true,
+ separator: 'before'
+ },
+ // edit menu basics
+ 'undo': {
+ menu: 'edit-menu',
+ args: [this.tr('Undo'), cv.theme.dark.Images.getIcon('undo', 18), this.tr('Ctrl+Z')],
+ enabled: true
+ },
+ 'redo': {
+ menu: 'edit-menu',
+ args: [this.tr('Redo'), cv.theme.dark.Images.getIcon('redo', 18), this.tr('Ctrl+Y')],
+ enabled: true
+ },
+ 'cut': {
+ menu: 'edit-menu',
+ args: [this.tr('Cut'), null, this.tr('Ctrl+X')],
+ enabled: false,
+ separator: 'before'
+ },
+ 'copy': {
+ menu: 'edit-menu',
+ args: [this.tr('Copy'), null, this.tr('Ctrl+C')],
+ enabled: false
+ },
+ 'paste': {
+ menu: 'edit-menu',
+ args: [this.tr('Paste'), null, this.tr('Ctrl+V')],
+ enabled: false
+ },
+ 'hidden-config': {
+ menu: 'edit-menu',
+ args: [this.tr('Hidden configuration'), cv.theme.dark.Images.getIcon('hidden-config', 18)],
+ enabled: true
+ },
+ // preferences
+ 'source-editor': {
+ menu: 'preferences-menu',
+ clazz: qx.ui.menu.RadioButton,
+ args: [this.tr('Use text editor')],
+ general: true,
+ enabled: true,
+ properties: {
+ model: 'source',
+ group: editorGroup
+ }
+ },
+ 'xml-editor': {
+ menu: 'preferences-menu',
+ clazz: qx.ui.menu.RadioButton,
+ args: [this.tr('Use xml editor')],
+ general: true,
+ enabled: true,
+ properties: {
+ model: 'xml',
+ group: editorGroup
+ }
+ },
+ 'quick-preview': {
+ menu: 'preferences-menu',
+ clazz: qx.ui.menu.CheckBox,
+ args: [this.tr('Enable quick preview')],
+ general: true,
+ enabled: true,
+ separator: 'before'
+ },
+ 'expert-mode': {
+ menu: 'preferences-menu',
+ clazz: qx.ui.menu.CheckBox,
+ args: [this.tr('Expert mode')],
+ general: true,
+ enabled: true
+ }
+ };
+ this.maintainButtons();
+
+ var prefs = cv.ui.manager.model.Preferences.getInstance();
+
+ prefs.bind('defaultConfigEditor', editorGroup, 'modelSelection', {
+ converter: function (value) {
+ return [value];
+ }
+ });
+ editorGroup.getModelSelection().addListener('change', function () {
+ prefs.setDefaultConfigEditor(editorGroup.getModelSelection().getItem(0));
+ }, this);
+
+ this.__bindToPreference('quick-preview', 'quickPreview');
+ this.__bindToPreference('expert-mode', 'expertMode');
+ },
+
+ __bindToPreference: function (buttonName, preferenceName) {
+ var button = this.getButton(buttonName);
+ var prefs = cv.ui.manager.model.Preferences.getInstance()
+ prefs.bind(preferenceName, button, 'value');
+ button.bind('value', prefs, preferenceName);
+ },
+
+ maintainButtons: function (config) {
+ if (!config) {
+ config = this.__defaultButtonConfiguration;
+ } else {
+ config = Object.merge(this.__defaultButtonConfiguration, config);
+ this.__buttonConfiguration = config;
+ }
+ Object.keys(config).forEach(function (id) {
+ var button;
+ var buttonConf = config[id];
+ if (!this.__buttons.hasOwnProperty(id)) {
+ // create button
+ var label = buttonConf.args[0];
+ var icon = buttonConf.args[1];
+ var command = buttonConf.args[2];
+ var ButtonClass = buttonConf.clazz || qx.ui.menu.Button;
+ if (qx.lang.Type.isString(command) || !command) {
+ // no command connected
+ button = new ButtonClass(label, icon);
+ if (command) {
+ // just add the string as shortcut hint
+ button.getChildControl('shortcut').setValue(command);
+ }
+ } else {
+ button = new ButtonClass(label, icon, command);
+ }
+ button.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.' + id);
+ }, this);
+ var menu = this.getChildControl(buttonConf.menu);
+ if (!menu) {
+ throw new Error('no menu named ' + buttonConf.menu + ' found!');
+ }
+ if (buttonConf.separator === 'before') {
+ menu.add(new qx.ui.menu.Separator());
+ }
+ menu.add(button);
+ if (buttonConf.separator === 'after') {
+ menu.add(new qx.ui.menu.Separator());
+ }
+ this.__buttons[id] = button;
+
+ if (buttonConf.hasOwnProperty('onAfterCreate')) {
+ buttonConf.onAfterCreate(button);
+ }
+ } else {
+ button = this.__buttons[id];
+ }
+ button.setEnabled(buttonConf.enabled);
+ if (buttonConf.properties) {
+ button.set(buttonConf.properties);
+ }
+
+ }, this);
+ },
+
+ getButton: function (id) {
+ return this.__buttons[id];
+ },
+
+ getButtonConfiguration: function () {
+ return this.__buttonConfiguration || this.__defaultButtonConfiguration;
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'title':
+ control = new qx.ui.basic.Label(this.tr('CometVisu Manager'));
+ this.add(control);
+ break;
+
+ case "file":
+ control = new qx.ui.menubar.Button(this.tr('File'), null, this.getChildControl('file-menu'));
+ this.add(control);
+ break;
+
+ case "edit":
+ control = new qx.ui.menubar.Button(this.tr('Edit'), null, this.getChildControl('edit-menu'));
+ this.add(control);
+ break;
+
+ case "new":
+ control = new qx.ui.menu.Button(this.tr('New'), null, null, this.getChildControl('new-menu'));
+ break;
+
+ case "preferences":
+ control = new qx.ui.menubar.Button(this.tr('Preferences'), null, this.getChildControl('preferences-menu'));
+ this.add(control);
+ break;
+
+ case 'new-menu':
+ control = new qx.ui.menu.Menu();
+ break;
+
+ case 'file-menu':
+ control = new qx.ui.menu.Menu();
+ control.add(this.getChildControl('new'));
+ break;
+
+ case 'edit-menu':
+ control = new qx.ui.menu.Menu();
+ break;
+
+ case 'preferences-menu':
+ control = new qx.ui.menu.Menu();
+ break;
+
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._commandGroup = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/Start.js b/source/class/cv/ui/manager/Start.js
new file mode 100644
index 00000000000..5a285d60d61
--- /dev/null
+++ b/source/class/cv/ui/manager/Start.js
@@ -0,0 +1,256 @@
+/**
+ * Simple view that provides all of the file-related features of the old editor in an easy to use way.
+ */
+qx.Class.define('cv.ui.manager.Start', {
+ extend: qx.ui.core.Widget,
+ implement: [
+ cv.ui.manager.editor.IEditor,
+ cv.ui.manager.IActionHandler
+ ],
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.VBox(8));
+ this._configRegex = /^visu_config_?([^.]+)?\.xml$/;
+ [ 'configs-title', 'configs-toolbar', 'configs',
+ 'demo-configs-title', 'demo-configs',
+ 'media-title', 'media-toolbar', 'media',
+ 'misc-title', 'misc'
+ ].forEach(this._createChildControl, this);
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ file: {
+ check: 'cv.ui.manager.model.FileItem',
+ apply: '_loadRoot'
+ },
+ appearance: {
+ refine: true,
+ init: 'cv-start'
+ },
+
+ selectedItem: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_applySelectedItem'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _configRegex: null,
+ _ignoreSelectionChanges: false,
+
+ save: function () {},
+ getCurrentContent: function () {},
+ canHandleAction: function () {
+ return false;
+ },
+ handleAction: function () {},
+
+ _loadRoot: function (value) {
+ this.getChildControl('configs').setFile(value);
+ var found = 0;
+
+ value.load(function () {
+ value.getChildren().some(function (file) {
+ if (file.getName() === 'media') {
+ this.getChildControl('media').setFile(file);
+ this.getChildControl('media-toolbar').setFolder(file);
+ found++;
+ } else if (file.getName() === 'demo') {
+ this.getChildControl('demo-configs').setFile(file);
+ found++;
+ }
+ return found === 2;
+ }, this);
+ }, this);
+ },
+
+ _onChangeSelection: function (ev) {
+ if (this._ignoreSelectionChanges === false) {
+ var list = ev.getTarget();
+ var selection = ev.getData();
+ this._ignoreSelectionChanges = true;
+
+ // unselect the other lists
+ ['configs', 'demo-configs', 'media'].forEach(function (name) {
+ var control = this.getChildControl(name);
+ if (control !== list) {
+ control.resetSelection();
+ }
+ }, this);
+ this._ignoreSelectionChanges = false;
+ if (selection.length > 0) {
+ this.setSelectedItem(selection[0].getModel());
+ }
+ }
+ },
+
+ _applySelectedItem: function () {
+ },
+
+ _onToggleExpand: function (ev) {
+ var control = this.getChildControl(ev.getTarget().getUserData('control'));
+ if (control.getVisibility() === 'visible') {
+ control.exclude();
+ ev.getTarget().setIcon(cv.theme.dark.Images.getIcon('drop-down', 18));
+ } else {
+ control.show();
+ ev.getTarget().setIcon(cv.theme.dark.Images.getIcon('drop-up', 18));
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'configs-title':
+ control = new qx.ui.basic.Atom(this.tr('Configurations'), cv.theme.dark.Images.getIcon('drop-up', 18));
+ control.setUserData('control', 'configs');
+ control.addListener('tap', this._onToggleExpand, this);
+ this.getChildControl('configs-header').add(control);
+ break;
+
+ case 'configs-header':
+ control = new qx.ui.container.Composite(new qx.ui.layout.HBox());
+ this._add(control);
+ break;
+
+ case 'configs-toolbar':
+ control = new cv.ui.manager.ToolBar(null, ['new-config-file', 'upload', 'reload']);
+ control.setFolder(cv.ui.manager.model.FileItem.ROOT);
+ control.addListener('reload', function () {
+ cv.ui.manager.model.FileItem.ROOT.reload();
+ }, this);
+ this.getChildControl('configs-header').add(control);
+ break;
+
+ case 'configs':
+ control = new cv.ui.manager.viewer.Folder();
+ control.set({
+ showTextFilter: false,
+ permanentFilter: function (file) {
+ var match = this._configRegex.exec(file.getName());
+ return !!match && (!match[1] || !match[1].endsWith('temp'));
+ }.bind(this),
+ labelConverter: function (name, file) {
+ if (file.isFake()) {
+ return name;
+ }
+ var configName = cv.ui.manager.model.FileItem.getConfigName(name);
+ return configName ? qx.lang.String.firstUp(configName) : '';
+ },
+ file: cv.ui.manager.model.FileItem.ROOT
+ });
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this._add(control);
+ break;
+
+ case 'demo-configs-title':
+ control = new qx.ui.basic.Atom(this.tr('Demo configurations'), cv.theme.dark.Images.getIcon('drop-down', 18));
+ control.setUserData('control', 'demo-configs');
+ control.addListener('tap', this._onToggleExpand, this);
+ this._add(control);
+ break;
+
+ case 'demo-configs':
+ control = new cv.ui.manager.viewer.Folder();
+ control.set({
+ showTextFilter: false,
+ permanentFilter: function (file) {
+ return this._configRegex.test(file.getName());
+ }.bind(this),
+ labelConverter: function (name) {
+ var configName = cv.ui.manager.model.FileItem.getConfigName(name);
+ return configName ? qx.lang.String.firstUp(configName) : '';
+ }
+ });
+ control.exclude();
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this._add(control);
+ break;
+
+ case 'media-title':
+ control = new qx.ui.basic.Atom(this.tr('Media files'), cv.theme.dark.Images.getIcon('drop-up', 18));
+ control.setUserData('control', 'media');
+ control.addListener('tap', this._onToggleExpand, this);
+ this.getChildControl('media-header').add(control);
+ break;
+
+ case 'media-header':
+ control = new qx.ui.container.Composite(new qx.ui.layout.HBox());
+ this._add(control);
+ break;
+
+ case 'media-toolbar':
+ control = new cv.ui.manager.ToolBar(null, ['new-file', 'upload', 'reload']);
+ control.addListener('reload', function () {
+ control.getFolder().reload();
+ }, this);
+ this.getChildControl('media-header').add(control);
+ break;
+
+ case 'media':
+ control = new cv.ui.manager.viewer.Folder();
+ control.set({
+ showTextFilter: false
+ });
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this._add(control);
+ break;
+
+ case 'misc-title':
+ control = new qx.ui.basic.Atom(this.tr('Miscellaneous'), cv.theme.dark.Images.getIcon('drop-up', 18));
+ control.setUserData('control', 'misc');
+ control.addListener('tap', this._onToggleExpand, this);
+ this._add(control);
+ break;
+
+ case 'misc':
+ control = new cv.ui.manager.viewer.Folder();
+ control.set({
+ showTextFilter: false
+ });
+ var fakeFolder = new cv.ui.manager.model.FileItem('fake', 'fake', cv.ui.manager.model.FileItem.ROOT, [
+ cv.ui.manager.model.FileItem.getHiddenConfigFile(),
+ cv.ui.manager.model.FileItem.getIconFile()
+ ]).set({
+ fake: true,
+ type: 'dir',
+ loaded: true
+ });
+ control.setFile(fakeFolder);
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this._add(control, {flex: 1});
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._configRegex = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/ToolBar.js b/source/class/cv/ui/manager/ToolBar.js
new file mode 100644
index 00000000000..1b41f4fd728
--- /dev/null
+++ b/source/class/cv/ui/manager/ToolBar.js
@@ -0,0 +1,198 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.ToolBar', {
+ extend: qx.ui.toolbar.ToolBar,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (uploadManager, showOnly) {
+ this.base(arguments);
+
+ if (showOnly) {
+ this.__showOnly = showOnly;
+ }
+
+ this._menuBar = cv.ui.manager.MenuBar.getInstance();
+ this._menuButtonConfig = this._menuBar.getButtonConfiguration();
+ this._uploadManager = uploadManager;
+
+ this._init();
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ 'reload': 'qx.event.type.Event'
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-toolbar'
+ },
+
+ folder: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_applyFolder'
+ },
+
+ file: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_applyFile',
+ event: 'changeFile'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _menuButtonConfig: null,
+ _uploadManager: null,
+ _menuBar: null,
+ __showOnly: null,
+
+ __show: function (name) {
+ return this.__showOnly === null || this.__showOnly.includes(name);
+ },
+
+ _init: function () {
+ if (!this._uploadManager) {
+ this._uploadManager = new cv.ui.manager.upload.UploadMgr();
+ }
+
+ var fileController = cv.ui.manager.control.FileController.getInstance();
+
+ var createPart = new qx.ui.toolbar.Part();
+ createPart.set({
+ marginLeft: 0
+ });
+ this.add(createPart);
+ var newButton;
+
+ if (this.__show('new-menu')) {
+ newButton = new qx.ui.toolbar.MenuButton(null,
+ cv.theme.dark.Images.getIcon('new-file', 15),
+ this._menuBar.getChildControl('new-menu')
+ );
+ createPart.add(newButton);
+ } else if (this.__show('new-config-file')) {
+ newButton = this._createButton('new-config-file', cv.theme.dark.Images.getIcon('new-file', 15));
+ newButton.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.new-config-file');
+ }, this);
+ createPart.add(newButton);
+ } else if (this.__show('new-file')) {
+ newButton = this._createButton('new-file');
+ createPart.add(newButton);
+ }
+
+ if (this.__show('upload')) {
+ var upload = this._createButton('upload');
+ this._uploadManager.addWidget(upload);
+ createPart.add(upload);
+ }
+
+ if (this.__show('delete')) {
+ var deleteSelection = this._createButton('delete');
+ deleteSelection.addListener('execute', function () {
+ fileController.delete(this.getFile());
+ }, this);
+ this.bind('file', deleteSelection, 'enabled', {
+ converter: function (file) {
+ return !!file && file.isWriteable() && !file.isFake();
+ }
+ });
+ this.add(deleteSelection);
+ }
+
+ if (this.__show('download')) {
+ var download = new qx.ui.toolbar.Button(null, cv.theme.dark.Images.getIcon('download', 15));
+ download.setAppearance('cv-toolbar-button');
+ download.setToolTipText(qx.locale.Manager.tr('Download'));
+ download.addListener('execute', function () {
+ fileController.download(this.getFile());
+ }, this);
+ // download button is only enabled when a file is selected
+ this.bind('file', download, 'enabled', {
+ converter: function (file) {
+ return !!file && file.getType() === 'file' && !file.isFake();
+ }
+ });
+ createPart.add(download);
+ }
+
+ if (this.__show('validate')) {
+ // config check
+ var checkConfig = new qx.ui.toolbar.Button(null, cv.theme.dark.Images.getIcon('validate', 15));
+ checkConfig.setAppearance('cv-toolbar-button');
+ checkConfig.setToolTipText(qx.locale.Manager.tr('Validate'));
+ checkConfig.addListener('execute', function () {
+ fileController.validate(this.getFile());
+ }, this);
+
+ // validate button is only enabled when a file is selected
+ this.bind('file', checkConfig, 'enabled', {
+ converter: function (file) {
+ return !!file && file.isConfigFile();
+ }
+ });
+ this.add(checkConfig);
+ }
+
+ if (this.__show('reload')) {
+ var reload = new qx.ui.toolbar.Button(null, cv.theme.dark.Images.getIcon('reload', 15));
+ reload.setAppearance('cv-toolbar-button');
+ reload.setToolTipText(qx.locale.Manager.tr('Reload'));
+ reload.addListener('execute', function () {
+ this.fireEvent('reload');
+ }, this);
+ this.add(new qx.ui.core.Spacer(), {flex: 1});
+ this.add(reload);
+ }
+ },
+
+ _createButton: function (name, icon) {
+ var args = this._menuButtonConfig[name].args;
+ var button = new qx.ui.toolbar.Button(null, icon || args[1].replace(/\/[0-9]+$/, '/15'), args[2]);
+ button.setAppearance('cv-toolbar-button');
+ button.setToolTipText(args[0]);
+ return button;
+ },
+
+ _applyFile: function () {
+
+ },
+
+ _applyFolder: function () {
+
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._menuButtonConfig = null;
+ this._uploadManager = null;
+ this.__menuBar = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/contextmenu/FileItem.js b/source/class/cv/ui/manager/contextmenu/FileItem.js
new file mode 100644
index 00000000000..c6372ad222f
--- /dev/null
+++ b/source/class/cv/ui/manager/contextmenu/FileItem.js
@@ -0,0 +1,302 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.contextmenu.FileItem', {
+ extend: qx.ui.menu.Menu,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (file) {
+ this.base(arguments);
+ this._commandGroup = qx.core.Init.getApplication().getCommandManager().getActive();
+ this._init();
+ this._dateFormat = new qx.util.format.DateFormat(qx.locale.Date.getDateFormat('medium'));
+ this._timeFormat = new qx.util.format.DateFormat(qx.locale.Date.getTimeFormat('medium'));
+
+ if (file) {
+ this.configure(file);
+ }
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-file-contextmenu'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _commandGroup: null,
+ _selectedNode: null,
+ _dateFormat: null,
+ _timeFormat: null,
+
+
+ configure: function (file) {
+ this._selectedNode = file;
+ if (file) {
+ var folder = file.getType() === 'folder' ? file : file.getParent();
+ this.getChildControl('new-file-button').setEnabled(folder ? folder.isWriteable() : false);
+ this.getChildControl('clone-file-button').setVisibility(file.isConfigFile() ? 'visible' : 'excluded');
+ this.getChildControl('new-folder-button').setEnabled(folder ? folder.isWriteable() : false);
+ this.getChildControl('delete-button').setLabel(file.isTrash() ?
+ this.tr('Clear') :
+ this.tr('Delete'));
+
+ // create compare menu
+ var compareMenu = this.getChildControl('compare-menu');
+ compareMenu.removeAll();
+ var backups = cv.ui.manager.model.BackupFolder.getInstance().getBackupFiles(file);
+ this.getChildControl('compare-with-button').setEnabled(backups.length > 0);
+ backups.sort(function (a, b) {
+ return b.date.getTime() - a.date.getTime();
+ });
+ var group = null;
+ backups.forEach(function (backupEntry) {
+ var date = this._dateFormat.format(backupEntry.date);
+ if (group !== date) {
+ if (group !== null) {
+ compareMenu.add(new qx.ui.menu.Separator());
+ }
+ var groupButton = new qx.ui.menu.Button(date);
+ groupButton.setEnabled(false);
+ compareMenu.add(groupButton);
+ group = date;
+ }
+ var button = new qx.ui.menu.Button(this.tr('Backup from %1', this._timeFormat.format(backupEntry.date)));
+ button.setUserData('file', backupEntry.file);
+ button.addListener('execute', this._onCompareWith, this);
+ compareMenu.add(button);
+ }, this);
+
+ var defaultHandler = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file);
+
+ // open with menu
+ var availableHandlers = cv.ui.manager.control.FileHandlerRegistry.getInstance().getAllFileHandlers(file);
+ var openWithMenu = this.getChildControl('open-with-menu');
+ openWithMenu.removeAll();
+ // this menu only makes sense when there is more than one option to select from
+ this.getChildControl('open-with-button').setEnabled(availableHandlers.length > 1);
+ availableHandlers.sort(function (a, b) {
+ return a.Clazz.constructor.TITLE.toString().localeCompare(b.Clazz.constructor.TITLE.toString());
+ });
+ availableHandlers.forEach(function (handlerConf) {
+ var button = new qx.ui.menu.Button(handlerConf.Clazz.constructor.TITLE, handlerConf.Clazz.constructor.ICON);
+ button.setAppearance('open-with-button');
+ if (defaultHandler.Clazz.classname === handlerConf.Clazz.classname) {
+ button.addState('default');
+ }
+ button.setUserData('handlerId', handlerConf.Clazz.classname);
+ button.addListener('execute', this._onOpenWith, this);
+ openWithMenu.add(button);
+ }, this);
+
+ // validate button
+ this.getChildControl('validate-config-button').setVisibility(file.isConfigFile() ? 'visible' : 'excluded');
+
+ // replacement button
+ if (file.getType() === 'file') {
+ this.getChildControl('replace-button').show();
+ this._replacementManager.setFilename(file.getName());
+ this._replacementManager.setFolder(file.getParent());
+ } else {
+ this.getChildControl('replace-button').exclude();
+ }
+ // buttons that need write access
+ ['delete-button', 'replace-button', 'rename-button'].forEach(function (controlName) {
+ this.getChildControl(controlName).setEnabled(file.isWriteable());
+ }, this);
+ this.getChildControl('download-button').setEnabled(!file.isFake());
+
+ this.getChildControl('restore-button').setVisibility(file.isInTrash() ? 'visible' : 'excluded');
+ } else {
+ this.getChildControl('delete-button').set({
+ label: this.tr('Delete'),
+ enabled: false
+ });
+ this.getChildControl('replace-button').exclude();
+ this.getChildControl('download-button').setEnabled(false);
+ this.getChildControl('restore-button').exclude();
+ }
+ },
+
+ _init: function () {
+ this.add(this.getChildControl('new-file-button'));
+ this.add(this.getChildControl('clone-file-button'));
+ this.add(this.getChildControl('new-folder-button'));
+ this.add(new qx.ui.menu.Separator());
+ this.add(this.getChildControl('open-button'));
+ this.add(this.getChildControl('open-with-button'));
+ this.add(this.getChildControl('compare-with-button'));
+ this.add(new qx.ui.menu.Separator());
+ this.add(this.getChildControl('rename-button'));
+ this.add(this.getChildControl('delete-button'));
+ this.add(this.getChildControl('restore-button'));
+ this.add(new qx.ui.menu.Separator());
+ this.add(this.getChildControl('download-button'));
+ var sep = new qx.ui.menu.Separator();
+ var button = this.getChildControl('replace-button');
+ this.add(sep);
+ this.add(button);
+ button.bind('visibility', sep, 'visibility');
+ sep = new qx.ui.menu.Separator();
+ button = this.getChildControl('validate-config-button');
+ button.bind('visibility', sep, 'visibility');
+ this.add(sep);
+ this.add(button);
+ },
+
+ _onCompareWith: function (ev) {
+ var compareWith = ev.getTarget().getUserData('file');
+ qx.event.message.Bus.dispatchByName('cv.manager.compareFiles',
+ new cv.ui.manager.model.CompareFiles(compareWith, this._selectedNode)
+ );
+ },
+
+ _onOpenWith: function (ev) {
+ var handlerId = ev.getTarget().getUserData('handlerId');
+ qx.event.message.Bus.dispatchByName('cv.manager.openWith', {
+ file: this._selectedNode,
+ handler: handlerId
+ });
+ },
+
+ _onRename: function () {
+ if (this._selectedNode) {
+ this._selectedNode.setEditing(true);
+ }
+ },
+
+ _onDownload: function () {
+ if (this._selectedNode) {
+ cv.ui.manager.control.FileController.getInstance().download(this._selectedNode);
+ }
+ },
+
+ _onRestore: function () {
+ if (this._selectedNode) {
+ cv.ui.manager.control.FileController.getInstance().restore(this._selectedNode);
+ }
+ },
+
+ _onValidate: function () {
+ if (this._selectedNode) {
+ cv.ui.manager.control.FileController.getInstance().validate(this._selectedNode);
+ }
+ },
+
+ _onClone: function () {
+ if (this._selectedNode) {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.clone', {
+ file: this._selectedNode
+ });
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'new-file-button':
+ control = new qx.ui.menu.Button(this.tr('New file'), cv.theme.dark.Images.getIcon('new-file', 18), this._commandGroup.get('new-file'));
+ break;
+
+ case 'clone-file-button':
+ control = new qx.ui.menu.Button(this.tr('Clone file'), cv.theme.dark.Images.getIcon('clone-file', 18));
+ control.exclude();
+ control.addListener('execute', this._onClone, this);
+ break;
+
+ case 'new-folder-button':
+ control = new qx.ui.menu.Button(this.tr('New folder'), cv.theme.dark.Images.getIcon('new-folder', 18), this._commandGroup.get('new-folder'));
+ break;
+
+ case 'rename-button':
+ control = new qx.ui.menu.Button(this.tr('Rename'), cv.theme.dark.Images.getIcon('rename', 18), this._commandGroup.get('rename'));
+ control.addListener('execute', this._onRename, this);
+ break;
+
+ case 'delete-button':
+ control = new qx.ui.menu.Button(this.tr('Delete'), cv.theme.dark.Images.getIcon('delete', 18));
+ control.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.delete', this._selectedNode);
+ }, this);
+ break;
+
+ case 'download-button':
+ control = new qx.ui.menu.Button(this.tr('Download'), cv.theme.dark.Images.getIcon('download', 18));
+ control.addListener('execute', this._onDownload, this);
+ break;
+
+ case 'open-button':
+ control = new qx.ui.menu.Button(this.tr('Open'), cv.theme.dark.Images.getIcon('open', 18));
+ control.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.open', this._selectedNode);
+ }, this);
+ break;
+
+ case 'restore-button':
+ control = new qx.ui.menu.Button(this.tr('Restore'), cv.theme.dark.Images.getIcon('trash', 18));
+ control.exclude();
+ control.addListener('execute', this._onRestore, this);
+ break;
+
+ case 'validate-config-button':
+ control = new qx.ui.menu.Button(this.tr('Validate'), cv.theme.dark.Images.getIcon('validate', 18));
+ control.exclude();
+ control.addListener('execute', this._onValidate, this);
+ break;
+
+ case 'replace-button':
+ control = new com.zenesis.qx.upload.UploadMenuButton(this.tr('Replace'), cv.theme.dark.Images.getIcon('upload', 18));
+ control.exclude();
+ this._replacementManager = new cv.ui.manager.upload.UploadMgr();
+ this._replacementManager.setForce(true);
+ this._replacementManager.addWidget(control);
+ break;
+
+ case 'compare-menu':
+ control = new qx.ui.menu.Menu();
+ break;
+
+ case 'compare-with-button':
+ control = new qx.ui.menu.Button(this.tr('Compare with...'), cv.theme.dark.Images.getIcon('compare', 18), null, this.getChildControl('compare-menu'));
+ break;
+
+ case 'open-with-button':
+ control = new qx.ui.menu.Button(this.tr('Open with...'), cv.theme.dark.Images.getIcon('open-with', 18), null, this.getChildControl('open-with-menu'));
+ break;
+
+ case 'open-with-menu':
+ control = new qx.ui.menu.Menu();
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._commandGroup = null;
+ this._disposeObjects('_dateFormat', '_timeFormat');
+ }
+});
diff --git a/source/class/cv/ui/manager/contextmenu/GlobalFileItem.js b/source/class/cv/ui/manager/contextmenu/GlobalFileItem.js
new file mode 100644
index 00000000000..6c475d49e70
--- /dev/null
+++ b/source/class/cv/ui/manager/contextmenu/GlobalFileItem.js
@@ -0,0 +1,7 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.contextmenu.GlobalFileItem', {
+ extend: cv.ui.manager.contextmenu.FileItem,
+ type: 'singleton'
+});
diff --git a/source/class/cv/ui/manager/control/ActionDispatcher.js b/source/class/cv/ui/manager/control/ActionDispatcher.js
new file mode 100644
index 00000000000..23b4cf259e3
--- /dev/null
+++ b/source/class/cv/ui/manager/control/ActionDispatcher.js
@@ -0,0 +1,93 @@
+/**
+ * The ActionDispatcher listens to the events in the 'cv.manager.action' topic and
+ * dispatched those events to the currently relevant handler (e.g. the save event to the opened editor).
+ */
+qx.Class.define('cv.ui.manager.control.ActionDispatcher', {
+ extend: qx.core.Object,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ qx.event.message.Bus.subscribe('cv.manager.action.*', this._onAction, this);
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ focusedWidget: {
+ check: 'cv.ui.manager.IActionHandler',
+ nullable: true,
+ apply: '_applyFocusedWidget'
+ },
+
+ main: {
+ check: 'cv.ui.manager.Main',
+ nullable: true
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _applyFocusedWidget: function () {
+ var menuBar = cv.ui.manager.MenuBar.getInstance();
+ var config = menuBar.getButtonConfiguration();
+ var button;
+ Object.keys(config).forEach(function (actionId) {
+ button = menuBar.getButton(actionId);
+ if (button) {
+ button.setEnabled(config[actionId].general || this.hasHandler(actionId));
+ }
+ }, this);
+ },
+
+ /**
+ * Check if there is an existing handler for the given actionName.
+ * @return {Boolean}
+ */
+ hasHandler: function (actionName) {
+ return !!this._getHandler(actionName);
+ },
+
+ _getHandler: function (actionName) {
+ var handler = this.getFocusedWidget();
+ var main = this.getMain();
+ if (handler && handler.canHandleAction(actionName)) {
+ return handler;
+ } else if (main && main.canHandleAction(actionName)) {
+ return main;
+ }
+ },
+
+ _onAction: function (ev) {
+ var topic = ev.getName();
+ var actionName = topic.split('.').pop();
+ var handler = this._getHandler(actionName);
+ if (handler) {
+ handler.handleAction(actionName, ev.getData());
+ } else {
+ this.warn('no action handler found for action: ' + actionName);
+ }
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ qx.event.message.Bus.subscribe('cv.manager.action.*', this._onAction, this);
+ }
+});
diff --git a/source/class/cv/ui/manager/control/FileController.js b/source/class/cv/ui/manager/control/FileController.js
new file mode 100644
index 00000000000..3a2dcf55e37
--- /dev/null
+++ b/source/class/cv/ui/manager/control/FileController.js
@@ -0,0 +1,230 @@
+/**
+ * The FileController is responsible for all file operations, like config check, move, replace, delete etc.
+ */
+qx.Class.define('cv.ui.manager.control.FileController', {
+ extend: qx.core.Object,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this.__fsClient = cv.io.rest.Client.getFsClient();
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __fsClient: null,
+
+ rename: function (file, newName) {
+ var newPath = file.getPath() || '';
+ if (newPath.length > 0 && !newPath.endsWith('/')) {
+ newPath += '/';
+ }
+ newPath += newName;
+ if (file.isTemporary()) {
+ // create new item
+ this.__fsClient.createSync({path: newPath, type: file.getType()}, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ?
+ qx.locale.Manager.tr('File has been created') :
+ qx.locale.Manager.tr('Folder has been created')
+ );
+ file.resetTenporary();
+ file.resetModified();
+ file.setName(newName);
+ file.reload();
+ }
+ }, this);
+ } else if (file.getFullPath() !== newPath) {
+ this.__fsClient.moveSync({src: file.getFullPath(), target: newPath}, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ?
+ qx.locale.Manager.tr('File has been renamed') :
+ qx.locale.Manager.tr('Folder has been renamed')
+ );
+ file.setName(newName);
+ file.resetModified();
+ file.reload();
+ }
+ file.resetEditing();
+ }, this);
+ }
+ },
+
+ /**
+ * Move file to another path
+ * @param file {cv.ui.manager.model.FileItem} file to move
+ * @param target {String} new path of the file
+ */
+ move: function (file, target) {
+ this.__fsClient.moveSync({src: file.getFullPath(), target: target}, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ?
+ qx.locale.Manager.tr('File has been moved') :
+ qx.locale.Manager.tr('Folder has been moved')
+ );
+ qx.event.message.Bus.dispatchByName('cv.manager.file', {
+ action: 'moved',
+ path: file.getFullPath()
+ });
+ }
+ }, this);
+ },
+
+ /**
+ * Restore file from trash by moving it out of the trash to the old path
+ * @param file {cv.ui.manager.model.FileItem} file to restore
+ */
+ restore: function (file) {
+ if (file.isInTrash()) {
+ var target = file.getFullPath().replace('.trash/', '');
+ this.__fsClient.moveSync({src: file.getFullPath(), target: target}, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ?
+ qx.locale.Manager.tr('File has been restored') :
+ qx.locale.Manager.tr('Folder has been restored')
+ );
+ qx.event.message.Bus.dispatchByName('cv.manager.file', {
+ action: 'restored',
+ path: file.getFullPath()
+ });
+ }
+ }, this);
+ }
+ },
+
+ 'delete': function(file, callback, context) {
+ if (file.isTemporary()) {
+ // new file, no need to call the backend
+ if (callback) {
+ callback.apply(context, true);
+ }
+ } else {
+ if (file) {
+ var message;
+ if (file.isTrash()) {
+ message = qx.locale.Manager.tr('Do you really want to clear the trash?');
+ } else if (file.isInTrash()) {
+ message = file.getType() === 'file' ?
+ qx.locale.Manager.tr('Do you really want to delete this file from the trash?') :
+ qx.locale.Manager.tr('Do you really want to delete this folder from the trash?');
+ } else {
+ message = file.getType() === 'file' ?
+ qx.locale.Manager.tr('Do you really want to delete this file?') :
+ qx.locale.Manager.tr('Do you really want to delete this folder?');
+ }
+ dialog.Dialog.confirm(message, function (confirmed) {
+ if (confirmed) {
+ this.__doDelete(file, callback, context);
+ } else if (callback) {
+ callback.apply(context, false);
+ }
+ }, this, qx.locale.Manager.tr('Confirm deletion'));
+ }
+ }
+ },
+
+ __doDelete: function (file, callback, context) {
+ this.__fsClient.deleteSync({path: file.getFullPath(), force: file.isTrash()}, null, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ if (callback) {
+ callback.apply(context, false);
+ }
+ } else {
+ var message;
+ if (file.isTrash()) {
+ message = qx.locale.Manager.tr('Trash has been cleared');
+ } else if (file.isInTrash()) {
+ message = this.getType() === 'file' ?
+ qx.locale.Manager.tr('File has been removed from trash') :
+ qx.locale.Manager.tr('Folder has been removed from trash');
+ } else {
+ message = file.getType() === 'file' ?
+ qx.locale.Manager.tr('File has been deleted') :
+ qx.locale.Manager.tr('Folder has been deleted');
+ }
+ cv.ui.manager.snackbar.Controller.info(message);
+ if (callback) {
+ callback.apply(context, true);
+ }
+ qx.event.message.Bus.dispatchByName('cv.manager.file', {
+ action: 'deleted',
+ path: file.getFullPath()
+ });
+ }
+ }, this);
+ },
+
+ download: function (file) {
+ if (file.getType() === 'file') {
+ var element = document.createElement('a');
+ element.setAttribute('href', cv.io.rest.Client.BASE_URL + '/fs?download=true&path=' + file.getFullPath());
+ element.style.display = 'none';
+ document.body.appendChild(element);
+ element.click();
+ document.body.removeChild(element);
+ }
+ },
+
+ validate: function (file) {
+ if (qx.core.Environment.get('qx.debug')) {
+ qx.core.Assert.assertInstance(file, cv.ui.manager.model.FileItem);
+ }
+ if (file.isConfigFile()) {
+ this.__validateConfig(file);
+ } else {
+ this.info('no validation available for file: ' + file.getFullPath());
+ }
+ },
+
+ __validateConfig: function (file) {
+ var d = dialog.Dialog.alert(qx.locale.Manager.tr('Validating %1', file.getFullPath()));
+ cv.ui.manager.editor.Worker.getInstance().validateConfig(file).then(function (res) {
+ d.close();
+ if (res === true) {
+ file.setValid(true);
+ cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('%1 has no errors!', file.getFullPath()));
+ } else {
+ file.setValid(false);
+ qx.event.message.Bus.dispatchByName('cv.manager.openWith', {
+ file: file,
+ handler: 'cv.ui.manager.editor.Source'
+ });
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.trn(
+ '%1 error found in %2!',
+ '%1 errors found in %2!',
+ res.length,
+ res.length,
+ file.getFullPath())
+ );
+ }
+ }.bind(this));
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__fsClient = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/control/FileHandlerRegistry.js b/source/class/cv/ui/manager/control/FileHandlerRegistry.js
new file mode 100644
index 00000000000..1a9e7125aee
--- /dev/null
+++ b/source/class/cv/ui/manager/control/FileHandlerRegistry.js
@@ -0,0 +1,220 @@
+/**
+ * Central registry for all available file editors/viewers.
+ */
+qx.Class.define('cv.ui.manager.control.FileHandlerRegistry', {
+ extend: qx.core.Object,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this.__registry = {};
+ this.__defaults = [];
+
+ // register viewers
+ this.registerFileHandler(new RegExp('\.(' + cv.ui.manager.viewer.Image.SUPPORTED_FILES.join('|') + ')$'), cv.ui.manager.viewer.Image, {type: 'view'});
+ this.registerFileHandler(cv.ui.manager.viewer.Config.SUPPORTED_FILES, cv.ui.manager.viewer.Config, {type: 'view'});
+ this.registerFileHandler(cv.ui.manager.viewer.Icons.SUPPORTED_FILES, cv.ui.manager.viewer.Icons, {type: 'view'});
+ this.registerFileHandler(cv.ui.manager.viewer.Folder.SUPPORTED_FILES, cv.ui.manager.viewer.Folder, {type: 'view'});
+ this.registerFileHandler(null, cv.ui.manager.Start, {type: 'view'});
+
+ // register the basic editors
+ this.registerFileHandler(new RegExp('\.(' + cv.ui.manager.editor.Source.SUPPORTED_FILES.join('|') + ')$'), cv.ui.manager.editor.Source, {type: 'edit'});
+ this.registerFileHandler(/visu_config(_.+)?\.xml/, cv.ui.manager.editor.Xml, {
+ preview: false,
+ type: 'edit'
+ });
+ this.registerFileHandler(cv.ui.manager.model.CompareFiles, cv.ui.manager.editor.Diff, {type: 'view'});
+
+ this.registerFileHandler("hidden.php", cv.ui.manager.editor.Config, {type: 'edit'});
+
+ cv.ui.manager.model.Preferences.getInstance().addListener('changeDefaultConfigEditor', this._onChangesDefaultConfigEditor, this);
+ this._onChangesDefaultConfigEditor();
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __registry: null,
+ __defaults: null,
+
+ /**
+ * Registers an editor for a specific file, that is identified by the given selector.
+ * @param selector {String|RegExp|Class|Function|null} filename-/path or regular expression. If null this is a special handler that must be loaded manually (like cv.ui.manager.Start)
+ * @param clazz {qx.ui.core.Widget} widget class that handles those type of files
+ * @param options {Map?} additional options to store in the registry
+ */
+ registerFileHandler: function (selector, clazz, options) {
+ if (qx.core.Environment.get('qx.debug')) {
+ qx.core.Assert.assertTrue(qx.Interface.classImplements(clazz, cv.ui.manager.editor.IEditor));
+ }
+ var config = Object.assign({
+ Clazz: clazz,
+ instance: null
+ }, options || {});
+ if (qx.Class.isClass(selector)) {
+ config.instanceOf = selector;
+ config.selectorId = 'instanceOf:' + selector.classname;
+ // highest priority
+ config.priority = 0;
+ } else if (qx.lang.Type.isRegExp(selector)) {
+ config.regex = selector;
+ config.selectorId = 'regex:' + selector.toString();
+ config.priority = 4;
+ } else if (qx.lang.Type.isFunction(selector)) {
+ config.selectorId = 'function:' + selector.name;
+ config.priority = 3;
+ config.function = selector;
+ } else if (qx.lang.Type.isString(selector)) {
+ // simple file matcher
+ if (selector.includes('/')) {
+ config.fullPath = selector;
+ config.selectorId = 'fullPath:' + selector;
+ config.priority = 1;
+ } else {
+ config.fileName = selector;
+ config.selectorId = 'fileName:' + selector;
+ config.priority = 2;
+ }
+ } else {
+ config.selectorId = 'none';
+ config.priority = 10;
+ }
+ this.__registry[clazz.classname] = config;
+ },
+
+ getFileHandler: function (file, type) {
+ var handlers = [];
+ if (!(file instanceof cv.ui.manager.model.CompareFiles)) {
+ // check if there is a default first
+ var defaultHandler;
+ Object.keys(this.__defaults).some(function (key) {
+ if (this.__defaults[key].regex.test(file.getFullPath())) {
+ if (type) {
+ var config = this.getFileHandlerById(this.__defaults[key].clazz.classname);
+ if (config.type === type) {
+ defaultHandler = config;
+ }
+ } else {
+ defaultHandler = this.getFileHandlerById(this.__defaults[key].clazz.classname);
+ }
+ return !!defaultHandler;
+ }
+ }, this);
+ if (defaultHandler) {
+ return defaultHandler;
+ }
+ }
+
+ Object.keys(this.__registry).forEach(function (classname) {
+ var config = this.__registry[classname];
+ if (this.__canHandle(config, file) && (!type || config.type === type)) {
+ handlers.push(config);
+ }
+ }, this);
+ if (handlers.length === 0) {
+ // no editors found
+ return null;
+ } else if (handlers.length === 1) {
+ return handlers[0];
+ } else {
+ // sort by selector priority (instance, fullpath, filename, regex)
+ handlers.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ // no default handler, just take the first one
+ return handlers[0];
+ }
+ },
+
+ getFileHandlerById: function (handlerId) {
+ return this.__registry[handlerId];
+ },
+
+ hasFileHandler: function (file, type) {
+ return Object.keys(this.__registry).some(function (classname) {
+ var config = this.__registry[classname];
+ return this.__canHandle(config, file) && (!type || config.type === type);
+ }, this);
+ },
+
+ /**
+ * Mark the handler with the given classname as default for the selector-id and all others with the same selector id not,
+ * @param selectorId {RegExp}
+ * @param clazz {qx.Class}
+ */
+ setDefault: function (selector, clazz) {
+ if (qx.core.Environment.get('qx.debug')) {
+ qx.core.Assert.assertRegExp(selector);
+ qx.core.Assert.assertTrue(qx.Class.isClass(clazz));
+ }
+ this.__defaults[selector.toString()] = {
+ regex: selector,
+ clazz: clazz
+ };
+ },
+
+ _onChangesDefaultConfigEditor: function () {
+ var selector = /visu_config(_.+)?\.xml/;
+ switch (cv.ui.manager.model.Preferences.getInstance().getDefaultConfigEditor()) {
+ case 'source':
+ this.setDefault(selector, cv.ui.manager.editor.Source);
+ break;
+
+ case 'xml':
+ this.setDefault(selector, cv.ui.manager.editor.Xml);
+ break;
+ }
+ },
+
+ __canHandle: function(config, file) {
+ if (config.fileName && file.getName() === config.fileName) {
+ return true;
+ } else if (config.fullPath && file.getFullPath() === config.fullPath) {
+ return true;
+ } else if (config.regex && config.regex.test(file.getFullPath())) {
+ return true;
+ } else if (config.instanceOf && file instanceof config.instanceOf) {
+ return true;
+ } else if (config.function && config.function(file)) {
+ return true;
+ }
+ return false;
+ },
+
+ getAllFileHandlers: function (file, type) {
+ if (qx.core.Environment.get('qx.debug')) {
+ qx.core.Assert.assertInstance(file, cv.ui.manager.model.FileItem);
+ }
+ return Object.keys(this.__registry).filter(function (key) {
+ return this.__canHandle(this.__registry[key], file) && (!type || this.__registry[key].type === type);
+ }, this).map(function (key) {
+ return this.__registry[key];
+ }, this);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ // cleanup handler instances
+ Object.keys(this.__registry).forEach(function (regex) {
+ if (this.__registry[regex].instance) {
+ this.__registry[regex].instance.dispose();
+ this.__registry[regex].instance = null;
+ }
+ }, this);
+
+ cv.ui.manager.model.Preferences.getInstance().removeListener('changeDefaultConfigEditor', this._onChangesDefaultConfigEditor, this);
+ }
+});
diff --git a/source/class/cv/ui/manager/control/IFileEventHandler.js b/source/class/cv/ui/manager/control/IFileEventHandler.js
new file mode 100644
index 00000000000..4c7756d89b4
--- /dev/null
+++ b/source/class/cv/ui/manager/control/IFileEventHandler.js
@@ -0,0 +1,13 @@
+/**
+ *
+ */
+qx.Interface.define('cv.ui.manager.control.IFileEventHandler', {
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _handleFileEvent: function (ev) {}
+ }
+});
diff --git a/source/class/cv/ui/manager/control/MFileEventHandler.js b/source/class/cv/ui/manager/control/MFileEventHandler.js
new file mode 100644
index 00000000000..3b58d139163
--- /dev/null
+++ b/source/class/cv/ui/manager/control/MFileEventHandler.js
@@ -0,0 +1,26 @@
+/**
+ * Mixin for all classes that have to handle event on the 'cv.manager.file' topic.
+ * Those classes need to implement the cv.ui.manager.control.IFileEventHandler interface.
+ */
+qx.Mixin.define('cv.ui.manager.control.MFileEventHandler', {
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ if (qx.core.Environment.get('qx.debug')) {
+ qx.core.Assert.assertInterface(this, cv.ui.manager.control.IFileEventHandler);
+ }
+ qx.event.message.Bus.subscribe('cv.manager.file', this._handleFileEvent, this);
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ qx.event.message.Bus.unsubscribe('cv.manager.file', this._handleFileEvent, this);
+ }
+});
diff --git a/source/class/cv/ui/manager/core/IconAtom.js b/source/class/cv/ui/manager/core/IconAtom.js
new file mode 100644
index 00000000000..7955b7971c2
--- /dev/null
+++ b/source/class/cv/ui/manager/core/IconAtom.js
@@ -0,0 +1,45 @@
+/**
+ * Atom with cv.ui.manager.viewer.SvgIcon instead ob an qx.ui.basic.Image
+ */
+qx.Class.define('cv.ui.manager.core.IconAtom', {
+ extend: qx.ui.basic.Atom,
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-icon'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _applyLabel: function (value) {
+ this.base(arguments, value);
+ this.getChildControl('icon').setName(value);
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'icon':
+ control = new cv.ui.manager.viewer.SvgIcon();
+ control.setAnonymous(true);
+ this._addAt(control, 0);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/AbstractEditor.js b/source/class/cv/ui/manager/editor/AbstractEditor.js
new file mode 100644
index 00000000000..3215020c105
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/AbstractEditor.js
@@ -0,0 +1,151 @@
+/**
+ * Abstract base class for all editors.
+ */
+qx.Class.define('cv.ui.manager.editor.AbstractEditor', {
+ extend: qx.ui.core.Widget,
+ implement: [
+ cv.ui.manager.editor.IEditor,
+ cv.ui.manager.IActionHandler
+ ],
+ type: "abstract",
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._initClient();
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ file: {
+ check: 'cv.ui.manager.model.FileItem || cv.ui.manager.model.CompareFiles',
+ nullable: true,
+ apply: '_loadFile'
+ },
+
+ content: {
+ nullable: true,
+ event: 'changeContent',
+ apply: '_applyContent'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _handledActions: null,
+
+ canHandleAction: function (actionName) {
+ return this._handledActions && this._handledActions.includes(actionName);
+ },
+
+ handleAction: function (actionName) {
+ if (this.canHandleAction(actionName)) {
+ switch (actionName) {
+ case 'save':
+ this.save();
+ break;
+ }
+ }
+ },
+
+ _initClient: function () {
+ this._client = cv.io.rest.Client.getFsClient();
+ },
+
+ _loadFile: function (file) {
+ if (file && file.getType() === 'file') {
+ if (file.getContent() !== null) {
+ this.setContent(file.getContent());
+ } else {
+ this._client.readSync({path: this.getFile().getFullPath()}, function (err, res) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ this.setContent(res);
+ }
+ }, this);
+ }
+ } else {
+ this.resetContent();
+ }
+ },
+
+ // must be overridden by inheriting classes
+ _applyContent: function() {},
+
+ // must be overridden by inheriting classes
+ getCurrentContent: function () {},
+
+ save: function () {
+ var file = this.getFile();
+ if (file.isModified()) {
+ if (file.isTemporary()) {
+ this._client.createSync({
+ path: file.getFullPath(),
+ hash: file.getHash(),
+ type: 'file'
+ }, this.getCurrentContent(), function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(this.tr('File has been created'));
+ this._onSaved();
+ qx.event.message.Bus.dispatchByName(file.getBusTopic(), {
+ type: 'created',
+ file: file,
+ data: this.getCurrentContent(),
+ source: this
+ });
+ }
+ }, this);
+ } else {
+ this._client.updateSync({
+ path: file.getFullPath(),
+ hash: file.getHash()
+ }, this.getCurrentContent(), function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(this.tr('File has been saved'));
+ this._onSaved();
+ qx.event.message.Bus.dispatchByName(file.getBusTopic(), {
+ type: 'contentChanged',
+ data: this.getCurrentContent(),
+ source: this
+ });
+ }
+ }, this);
+ }
+ }
+ },
+
+ _onSaved: function () {
+ var file = this.getFile();
+ file.resetModified();
+ file.resetTemporary();
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ if (this._client) {
+ this._client = null;
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/Config.js b/source/class/cv/ui/manager/editor/Config.js
new file mode 100644
index 00000000000..be0fd8cc16a
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Config.js
@@ -0,0 +1,145 @@
+/**
+ * Editor for the (hidden) configuration.
+ */
+qx.Class.define('cv.ui.manager.editor.Config', {
+ extend: cv.ui.manager.editor.AbstractEditor,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._handledActions = ['save'];
+ this._setLayout(new qx.ui.layout.VBox(8));
+ this._createChildControl('list');
+ this._createChildControl('add-section');
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ TITLE: qx.locale.Manager.tr('Hidden configuration')
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-editor-config'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _model: null,
+ _listController: null,
+
+ _initClient: function () {
+ this._client = cv.io.rest.Client.getConfigClient();
+ this._client.addListener('getSuccess', this._onModelValueChange, this);
+ this._client.addListener('updateSuccess', this._onSaved, this);
+ },
+
+ _loadFile: function () {
+ this._client.get({section: '*'});
+ },
+
+ _onModelValueChange: function (ev) {
+ this.setContent(ev.getData());
+ },
+
+ // overridden
+ _applyContent: function(value) {
+ var model = this._listController.getModel();
+ model.removeAll();
+
+ Object.keys(value).forEach(function (sectionName) {
+ var section = new cv.ui.manager.model.config.Section(sectionName);
+ Object.keys(value[sectionName]).forEach(function (optionKey) {
+ section.addOption(optionKey, value[sectionName][optionKey]);
+ }, this);
+ model.push(section);
+ }, this);
+ },
+
+ // overridden
+ getCurrentContent: function () {
+ return this.getContent();
+ },
+
+ _onDeleteSection: function (ev) {
+ var section = ev.getData();
+ var model = this._listController.getModel();
+ model.remove(section);
+ },
+
+ save: function () {
+ var data = qx.util.Serializer.toNativeObject(this._listController.getModel());
+ this._client.save(null, data);
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'list':
+ control = new qx.ui.form.List();
+ control.setEnableInlineFind(false);
+ this._listController = new qx.data.controller.List(new qx.data.Array(), control);
+ this._listController.setDelegate({
+ createItem: function () {
+ return new cv.ui.manager.form.SectionListItem();
+ },
+
+ configureItem: function (item) {
+ item.addListener('delete', this._onDeleteSection, this);
+ }.bind(this),
+
+ bindItem: function (controller, item, index) {
+ controller.bindProperty('', 'model', null, item, index);
+ }
+ });
+ this._add(control, {flex: 1});
+ break;
+
+ case 'buttons':
+ control = new qx.ui.container.Composite(new qx.ui.layout.HBox(8));
+ this._add(control);
+ break;
+
+ case 'add-section':
+ control = new qx.ui.form.Button(this.tr('Add section'));
+ control.addListener('execute', function () {
+ this._listController.getModel().push(new cv.ui.manager.model.config.Section(''));
+ }, this);
+ this.getChildControl('buttons').add(control);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._disposeObjects('_model', '_listController');
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/Diff.js b/source/class/cv/ui/manager/editor/Diff.js
new file mode 100644
index 00000000000..cf5beee160d
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Diff.js
@@ -0,0 +1,125 @@
+/**
+ * Monaco Texteditor for file content comparison
+ */
+qx.Class.define('cv.ui.manager.editor.Diff', {
+ extend: cv.ui.manager.editor.Source,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._handledActions = [];
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ COUNTER: 0,
+ TITLE: qx.locale.Manager.tr('File compare'),
+ ICON: cv.theme.dark.Images.getIcon('compare', 18)
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ originalContent: {
+ check: 'String',
+ init: '',
+ apply: '_applyContent'
+ },
+
+ modifiedContent: {
+ check: 'String',
+ init: '',
+ apply: '_applyContent'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+
+ // overridden, diff editor is read only, no worker needed
+ _initWorker: function () {},
+
+ _draw: function () {
+ if (!window.monaco) {
+ cv.ui.manager.editor.Source.load(this._draw, this);
+ } else {
+ var domElement = this.getContentElement().getDomElement();
+ if (!domElement) {
+ this.addListenerOnce('appear', this._draw, this);
+ } else {
+ this._editor = window.monaco.editor.createDiffEditor(domElement, {
+ folding: true,
+ autoIndent: true,
+ automaticLayout: true,
+ theme: 'vs-dark',
+ readOnly: true
+ });
+ if (this.getFile()) {
+ this._loadFile(this.getFile());
+ }
+ }
+ }
+ },
+
+ _applyContent: function () {
+ var original = this.getOriginalContent();
+ var modified = this.getModifiedContent();
+ if (original && modified) {
+ var file = this.getFile();
+ var originalModel = window.monaco.editor.createModel(original, this._getLanguage(file.getOriginalFile()));
+ originalModel.updateOptions(this._getDefaultModelOptions());
+ var modifiedModel = window.monaco.editor.createModel(modified, this._getLanguage(file.getModifiedFile()));
+ modifiedModel.updateOptions(this._getDefaultModelOptions());
+ this._editor.setModel({
+ original: originalModel,
+ modified: modifiedModel
+ });
+ }
+ },
+
+ clear: function () {
+ this._editor.getModel().original.dispose();
+ this._editor.getModel().modified.dispose();
+ },
+
+ _loadFile: function (file) {
+ if (this._editor) {
+ if (file && file instanceof cv.ui.manager.model.CompareFiles && this.isSupported(file.getModifiedFile())) {
+ this._client.readSync({path: file.getModifiedFile().getFullPath()}, function (err, res) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ this.setModifiedContent(res);
+ }
+ }, this);
+
+ this._client.readSync({path: file.getOriginalFile().getFullPath()}, function (err, res) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ this.setOriginalContent(res);
+ }
+ }, this);
+ } else {
+ this.resetOriginalContent();
+ this.resetModifiedContent();
+ }
+ }
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/IEditor.js b/source/class/cv/ui/manager/editor/IEditor.js
new file mode 100644
index 00000000000..7cb27a2537b
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/IEditor.js
@@ -0,0 +1,37 @@
+/**
+ * Interface all file editors must implement.
+ */
+qx.Interface.define('cv.ui.manager.editor.IEditor', {
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ file: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_loadFile'
+ }
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ TITLE: ''
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ save: function () {},
+
+ getCurrentContent: function () {}
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/Source.js b/source/class/cv/ui/manager/editor/Source.js
new file mode 100644
index 00000000000..093de70ae03
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Source.js
@@ -0,0 +1,332 @@
+/**
+ * Monaco Texteditor integration
+ */
+qx.Class.define('cv.ui.manager.editor.Source', {
+ extend: cv.ui.manager.editor.AbstractEditor,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._handledActions = ['save', 'cut', 'copy', 'paste', 'undo', 'redo'];
+ this._basePath = window.location.origin + window.location.pathname + qx.util.LibraryManager.getInstance().get("cv", "resourceUri") + '/config/';
+ this.getContentElement().setAttribute('contentEditable', 'true');
+ this.set({
+ droppable: false,
+ focusable: true
+ });
+ this.addListener('dragover', function (ev) {
+ ev.preventDefault();
+ ev.dataTransfer.effectAllowed = "none";
+ ev.dataTransfer.dropEffect = "none";
+ });
+ this.addListener('drop', function (ev) {
+ ev.preventDefault();
+ });
+ this.addListener('appear', function () {
+ qx.ui.core.FocusHandler.getInstance().setUseTabNavigation(false);
+ });
+ this.addListener('disappear', function () {
+ qx.ui.core.FocusHandler.getInstance().setUseTabNavigation(true);
+ });
+ this._draw();
+ this._initWorker();
+ this._currentDecorations = [];
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ TITLE: qx.locale.Manager.tr('Texteditor'),
+ COUNTER: 0,
+ SUPPORTED_FILES: ['xml', 'php', 'css', 'js', 'svg', 'json', 'md', 'yaml', 'conf', 'ts', 'rst', 'py', 'txt'],
+ ICON: cv.theme.dark.Images.getIcon('text', 18),
+
+ load: function (callback, context) {
+ var version = qx.core.Environment.get('qx.debug') ? 'dev' : 'min';
+ window.documentationMappingPrefix = "../source/editor/"; // jshint ignore:line
+ var loader = new qx.util.DynamicScriptLoader([
+ '../source/editor/dependencies/jquery.min.js',
+ '../source/editor/dependencies/jquery.xpath.min.js',
+ '../source/editor/lib/Messages.js',
+ '../source/editor/lib/Schema.js',
+ '../../node_modules/monaco-editor/' + version + '/vs/loader.js',
+ 'manager/xml.js'
+ ]);
+ loader.addListener('ready', function () {
+ window.require.config({
+ paths: {
+ 'vs': '../../node_modules/monaco-editor/' + version + '/vs'
+ }
+ });
+ window.require.config({
+ 'vs/nls' : {
+ availableLanguages: {
+ '*': qx.locale.Manager.getInstance().getLanguage() !== 'en' ? qx.locale.Manager.getInstance().getLanguage() : ''
+ }
+ }
+ });
+ var noCacheSuffix = '?' + Math.random();
+ window.require([
+ 'xml!./resource/visu_config.xsd' + noCacheSuffix,
+ 'xml!*./resource/manager/completion-libs/qooxdoo.d.ts', // the xml loader can load any file by adding * before the path,
+ 'vs/editor/editor.main'
+ ], function (schema, qxLib) {
+ this.__schema = schema;
+ callback.apply(context);
+ window.monaco.languages.typescript.javascriptDefaults.addExtraLib(qxLib, 'qooxdoo.d.ts');
+ var parsedSchema = new window.Schema("visu_config.xsd", schema); // jshint ignore:line
+ var completionProvider = new cv.ui.manager.editor.completion.Config(parsedSchema);
+ var cvCompletionProvider = new cv.ui.manager.editor.completion.CometVisu();
+ window.monaco.languages.registerCompletionItemProvider('xml', completionProvider.getProvider());
+ window.monaco.languages.registerCompletionItemProvider('javascript', cvCompletionProvider.getProvider());
+
+ }.bind(this));
+ }, this);
+ loader.addListener('failed', function (ev) {
+ qx.log.Logger.error(this, ev.getData());
+ }, this);
+ loader.start();
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __schema: null,
+ _editor: null,
+ _basePath: null,
+ _workerWrapper: null,
+ _currentDecorations: null,
+
+ _initWorker: function () {
+ this._workerWrapper = cv.ui.manager.editor.Worker.getInstance();
+ this._workerWrapper.setEditor(this);
+ },
+
+ _getDefaultModelOptions: function () {
+ return {
+ tabSize: 2,
+ indentSize: 2,
+ insertSpaces: true
+ };
+ },
+
+ _draw: function () {
+ if (!window.monaco) {
+ cv.ui.manager.editor.Source.load(this._draw, this);
+ } else {
+ var domElement = this.getContentElement().getDomElement();
+ if (!domElement) {
+ this.addListenerOnce('appear', this._draw, this);
+ } else {
+ this._editor = window.monaco.editor.create(domElement, {
+ suggestOnTriggerCharacters: true,
+ folding: true,
+ autoIndent: true,
+ automaticLayout: true,
+ dragAndDrop: true,
+ formatOnPaste: true,
+ formatOnType: true,
+ minimap: {
+ enabled: true
+ },
+ theme: 'vs-dark'
+ });
+ if (this.getFile()) {
+ this._loadFile(this.getFile());
+ }
+ this._editor.onDidChangeModelContent(this._onContentChanged.bind(this));
+ }
+ }
+ },
+
+ handleAction: function (actionName) {
+ if (this.canHandleAction(actionName)) {
+ var monacoAction;
+ switch (actionName) {
+ case 'cut':
+ monacoAction = this._editor.getAction('editor.action.clipboardCutAction');
+ break;
+ case 'copy':
+ monacoAction = this._editor.getAction('editor.action.clipboardCopyAction');
+ break;
+
+ default:
+ this.base(arguments, actionName);
+ break;
+ }
+ if (monacoAction) {
+ monacoAction.run();
+ }
+ }
+ },
+
+ _loadFile: function (file, old) {
+ if (old && this._workerWrapper) {
+ this._workerWrapper.close(old);
+ }
+ if (this._editor) {
+ if (file && file.getType() === 'file' && this.isSupported(file)) {
+ this.base(arguments, file, old);
+ } else {
+ this.resetContent();
+ }
+ }
+ },
+
+ _applyContent: function(value) {
+ var model = this._editor.getModel();
+ var file = this.getFile();
+ if (!value) {
+ if (model) {
+ this._editor.setValue('');
+ }
+ } else {
+ if (this._workerWrapper) {
+ this._workerWrapper.open(file, value);
+ }
+ var newModel = window.monaco.editor.getModel(file.getUri());
+ if (!newModel) {
+ // create new model
+ if (qx.xml.Document.isXmlDocument(value)) {
+ value = value.documentElement.outerHTML;
+ }
+ newModel = window.monaco.editor.createModel(value, this._getLanguage(file), file.getUri());
+ }
+
+ if (model !== newModel) {
+ newModel.updateOptions(this._getDefaultModelOptions());
+ this._editor.setModel(newModel);
+ } else {
+ this._editor.setValue(value);
+ }
+ this._editor.updateOptions({ readOnly: !file.isWriteable() });
+ }
+ },
+
+ getCurrentContent: function () {
+ return this._editor.getValue();
+ },
+
+ _onContentChanged: function () {
+ if (this._workerWrapper) {
+ this._workerWrapper.contentChanged(this.getFile(), this._editor.getValue());
+ }
+ },
+
+ isSupported: function (file) {
+ var fileType = file.getName().split('.').pop();
+ return cv.ui.manager.editor.Source.SUPPORTED_FILES.includes(fileType);
+ },
+
+ showErrors: function (path, errorList) {
+ var markers = [];
+ var model = this._editor.getModel();
+ if (!model) {
+ return;
+ }
+ // "file_0.xml:286: element layout: Schemas validity error : Element 'layout': This element is not expected."
+ if (errorList) {
+// console.error(errorList);
+ var currentMessage = null;
+ // collect complete error messages
+ errorList.forEach(function (error) {
+ if (/.*\.xml:[\d]+:.+/.test(error)) {
+ if (currentMessage !== null) {
+ markers.push({
+ severity: window.monaco.MarkerSeverity.Error,
+ startLineNumber: currentMessage.line,
+ startColumn: 1,
+ endLineNumber: currentMessage.line,
+ endColumn: model.getLineContent(currentMessage.line).length,
+ message: currentMessage.message
+ });
+ }
+ // add marker for completed message
+ var parts = error.split(":");
+ var file = parts.shift();
+ var line = parseInt(parts.shift());
+
+ // in the last part there might be a more precise line number for the error
+ var match = /.+line ([\d]+) -+/.exec(parts[parts.length-1]);
+ if (match) {
+ line = parseInt(match[1]);
+ }
+ if (isNaN(line)) {
+ return;
+ }
+ // new error line
+ currentMessage = {
+ line: line,
+ message: parts.slice(-2).join(":"),
+ file: file
+ };
+ } else {
+ currentMessage.message += "\n"+error;
+ }
+ });
+ if (currentMessage !== null) {
+ // show last error too
+ markers.push({
+ severity: window.monaco.MarkerSeverity.Error,
+ startLineNumber: currentMessage.line,
+ startColumn: 1,
+ endLineNumber: currentMessage.line,
+ endColumn: model.getLineContent(currentMessage.line).length,
+ message: currentMessage.message
+ });
+ }
+ }
+ if (this.getFile().getFullPath() === path) {
+ window.monaco.editor.setModelMarkers(model, '', markers);
+ } else {
+ // TODO: save errors for later
+ }
+ },
+
+ showDecorations: function (path, decorators) {
+ if (this.getFile().getFullPath() === path) {
+ this._editor.deltaDecorations(this._currentDecorations[path], decorators);
+ }
+ this._currentDecorations[path] = decorators;
+ },
+
+ _getLanguage: function (file) {
+ var type = file.getName().split('.').pop();
+ switch (type) {
+ case 'svg':
+ return 'xml';
+ case 'js':
+ return 'javascript';
+ case 'md':
+ return 'markdown';
+ default:
+ return type;
+ }
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._workerWrapper = null;
+ if (this._editor) {
+ this._editor.dispose();
+ this._editor = null;
+ }
+ qx.ui.core.FocusHandler.getInstance().setUseTabNavigation(true);
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/Worker.js b/source/class/cv/ui/manager/editor/Worker.js
new file mode 100644
index 00000000000..f90a3dc627a
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Worker.js
@@ -0,0 +1,140 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.editor.Worker', {
+ extend: qx.core.Object,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._files = {};
+ // create WebWorker
+ this._worker = new Worker(qx.util.ResourceManager.getInstance().toUri('manager/worker.js'));
+ this._worker.onmessage = this._onMessage.bind(this);
+ this._validationCallbacks = {};
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ editor: {
+ check: 'cv.ui.manager.editor.Source',
+ nullable: true
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _worker: null,
+ _files: null,
+ _validationCallbacks: null,
+
+ open: function (file, code, schema) {
+ this._worker.postMessage(["openFile", {
+ path: file.getFullPath(),
+ code: qx.xml.Document.isXmlDocument(code) ? code.documentElement.outerHTML : code,
+ schema: schema
+ }]);
+ this._files[file.getFullPath()] = file;
+ },
+
+ close: function (file) {
+ this._worker.postMessage(["closeFile", {
+ path: file.getFullPath()
+ }]);
+ delete this._files[file.getFullPath()];
+ },
+
+ contentChanged: function (file, content) {
+ this._worker.postMessage(["contentChange", {
+ path: file.getFullPath(),
+ code: content
+ }]);
+ },
+
+ validateConfig: function (file) {
+ if (file.isConfigFile()) {
+ return new Promise(function (resolve, reject) {
+ // check if there is already one validation request ongoing
+ var url = file.getServerPath();
+ if (!this._validationCallbacks.hasOwnProperty(url)) {
+ this._validationCallbacks[url] = [resolve];
+ this._worker.postMessage(["validateConfig", {
+ path: url
+ }]);
+ } else {
+ this._validationCallbacks[url].push(resolve);
+ }
+ }.bind(this));
+ } else {
+ qx.log.Logger.error(this, file.getFullPath() + ' is no configuration file');
+ }
+ },
+
+ _onMessage: function (e) {
+ var topic = e.data.shift();
+ var data = e.data.shift();
+ var path = e.data.shift();
+ var file = this._files[path];
+ if (!file && topic !== 'validationResult') {
+ qx.log.Logger.error(this, 'no file found for path ' + path + ' ignoring worker message for topic ' + topic);
+ return;
+ }
+ var editor = this.getEditor();
+ switch(topic) {
+ case "modified":
+ // new files are always modified, to not override that state
+ if (!file.isTemporary()) {
+ file.setModified(data.modified);
+ }
+ file.setHash(data.currentHash);
+ break;
+
+ case "errors":
+ file.setValid(!data || data.length === 0);
+ if (editor) {
+ editor.showErrors(path, data);
+ }
+ break;
+
+ case "decorations":
+ if (editor) {
+ editor.showDecorations(path, data);
+ }
+ break;
+
+ case 'validationResult':
+ if (this._validationCallbacks.hasOwnProperty(path)) {
+ var callbacks = this._validationCallbacks[path];
+ delete this._validationCallbacks[path];
+ callbacks.forEach(function(cb) {
+ cb(data);
+ });
+ }
+ break;
+ }
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._worker.terminate();
+ this._worker = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/Xml.js b/source/class/cv/ui/manager/editor/Xml.js
new file mode 100644
index 00000000000..a5f7ab30773
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Xml.js
@@ -0,0 +1,119 @@
+/**
+ * Default XML-Editor included as iframe.
+ */
+qx.Class.define('cv.ui.manager.editor.Xml', {
+ extend: cv.ui.manager.editor.AbstractEditor,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.Grow());
+ this._handledActions = ['save'];
+ this.__basePath = qx.util.Uri.getAbsolute(window.location.pathname + qx.util.LibraryManager.getInstance().get("cv", "resourceUri") + '/../editor/editor.html');
+ this._draw();
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ SUPPORTED_FILES: /visu_config.*\.xml/,
+ TITLE: qx.locale.Manager.tr('Xml-editor'),
+ ICON: cv.theme.dark.Images.getIcon('xml', 18)
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _currentContent: null,
+
+ _draw: function () {
+
+ },
+
+ _loadFile: function (file) {
+ if (this._iframe) {
+ this._iframe.destroy();
+ }
+ var match = /.*visu_config_?(.*)\.xml/.exec(file.getName());
+ if (match) {
+ this._iframe = new qx.ui.embed.Iframe(qx.util.Uri.appendParamsToUrl(this.__basePath, 'embed=0&config=' + match[1]));
+ this._iframe.addListener('load', function () {
+ // inject save method
+ this._iframe.getWindow().saveFromIframe = this.saveFromIframe.bind(this);
+ }, this);
+
+ this._add(this._iframe);
+ }
+ },
+
+ saveFromIframe: function (data) {
+ // create XML string from data
+ var xml = '';
+ data.forEach(function (elem) {
+ xml += this._elemToXml(elem, '');
+ }, this);
+ this._currentContent = xml;
+ this._onContentChanged();
+ this.save();
+ },
+
+ _elemToXml: function (elem) {
+ var xml = '';
+ if (elem.nodeName === '#text') {
+ xml += elem.nodeValue;
+ } else {
+ xml += '<' + elem.nodeName;
+ Object.keys(elem.attributes).forEach(function (attrName) {
+ xml += ' ' + attrName + '="' + elem.attributes[attrName] + '"';
+ });
+
+ if (!elem.nodeValue && elem.children.length === 0) {
+ xml += '/>';
+ } else {
+ xml += '>';
+ if (elem.nodeValue) {
+ xml += elem.nodeValue;
+ }
+ var children = [];
+ elem.children.forEach(function (child) {
+ children.push(this._elemToXml(child));
+ }, this);
+ xml += children.join('');
+ xml += '' + elem.nodeName + '>';
+ }
+ }
+ return xml;
+ },
+
+ getCurrentContent: function () {
+ return this._currentContent;
+ },
+
+ _onContentChanged: function () {
+ this.getFile().setModified(true);
+ },
+
+ isSupported: function (file) {
+ return cv.ui.manager.editor.Xml.SUPPORTED_FILES.test(file.getName());
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/completion/CometVisu.js b/source/class/cv/ui/manager/editor/completion/CometVisu.js
new file mode 100644
index 00000000000..0f957e1e808
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/completion/CometVisu.js
@@ -0,0 +1,132 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.editor.completion.CometVisu', {
+ extend: qx.core.Object,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ TEMPLATES: null,
+
+ getTemplates: function () {
+ if (!this.TEMPLATES) {
+ this.TEMPLATES = [{
+ filterText: "cvclass",
+ label: 'CometVisu-Class',
+ kind: window.monaco.languages.CompletionItemKind.Class,
+ detail: "A generic CometVisu class.",
+ insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Class.define("cv.$0", {\n extend: qx.core.Object,\n\n \n});\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvwidget",
+ label: 'CometVisu-Widget',
+ kind: window.monaco.languages.CompletionItemKind.Class,
+ detail: "A CometVisu class for a widget.",
+ insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Class.define("cv.ui.structure.pure.$0", {\n extend: cv.ui.structure.AbstractWidget,\n\n \n});\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvinterface",
+ label: 'CometVisu-Interface',
+ kind: window.monaco.languages.CompletionItemKind.Interface,
+ detail: "A generic CometVisu Interface.",
+ insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Interface.define("cv.$0", {\n \n});\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvmixin",
+ label: 'CometVisu-Mixin',
+ kind: window.monaco.languages.CompletionItemKind.Class,
+ detail: "A generic CometVisu Mixin.",
+ insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Mixin.define("cv.$0", {\n \n});\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvmembers",
+ label: 'CometVisu-Class members',
+ kind: window.monaco.languages.CompletionItemKind.Struct,
+ detail: "A CometVisu classes members section.",
+ insertText: ' /*\n ***********************************************\n MEMBERS\n ***********************************************\n */\n members: {\n $0\n },\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvproperties",
+ label: 'CometVisu-Class properties',
+ kind: window.monaco.languages.CompletionItemKind.Struct,
+ detail: "A CometVisu classes properties section.",
+ insertText: ' /*\n ***********************************************\n PROPERTIES\n ***********************************************\n */\n properties: {\n $0\n },\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvstatics",
+ label: 'CometVisu-Class statics',
+ kind: window.monaco.languages.CompletionItemKind.Struct,
+ detail: "statics section.",
+ insertText: ' /*\n ***********************************************\n STATICS\n ***********************************************\n */\n statics: {\n $0\n },\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvevents",
+ label: 'CometVisu-Class events',
+ kind: window.monaco.languages.CompletionItemKind.Struct,
+ detail: "events section.",
+ insertText: ' /*\n ***********************************************\n EVENTS\n ***********************************************\n */\n events: {\n $0\n },\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvconstructor",
+ label: 'Constructor',
+ kind: window.monaco.languages.CompletionItemKind.Method,
+ detail: "constructor.",
+ insertText: ' /*\n ***********************************************\n CONSTRUCTOR\n ***********************************************\n */\n construct: function () {\n this.base(arguments);\n $0\n },\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }, {
+ filterText: "cvdestructor",
+ label: 'Destructor',
+ kind: window.monaco.languages.CompletionItemKind.Method,
+ detail: "destructor.",
+ insertText: ' /*\n ***********************************************\n DESTRUCTOR\n ***********************************************\n */\n destruct: function () {\n this.base(arguments);\n $0\n }\n',
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ }];
+
+ // load plugin template from backend
+ return new Promise(function (resolve, reject) {
+ cv.io.rest.Client.getFsClient().readSync({path: '.templates/Plugin.js'}, function (err, res) {
+ if (err) {
+ reject(err);
+ } else {
+ this.TEMPLATES.push({
+ filterText: "cvplugin",
+ label: 'CometVisu-Plugin',
+ kind: window.monaco.languages.CompletionItemKind.Class,
+ detail: "A CometVisu class for a plugin.",
+ insertText: res.replace('###SINCE###', cv.Version.VERSION.replace('-dev', '')+ ' ($CURRENT_YEAR)'),
+ insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace
+ });
+ resolve(this.TEMPLATES);
+ }
+ }, this);
+ }.bind(this));
+ }
+ return Promise.resolve(this.TEMPLATES);
+ },
+
+ getProvider: function () {
+ return {
+ triggerCharacters: ['cv'],
+ provideCompletionItems: function () {
+ // get editor content before the pointer
+ return this.getTemplates().then(function (sugg) {
+ return {suggestions: sugg};
+ });
+ }.bind(this)
+ };
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/completion/Config.js b/source/class/cv/ui/manager/editor/completion/Config.js
new file mode 100644
index 00000000000..dd568f2fed9
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/completion/Config.js
@@ -0,0 +1,503 @@
+/**
+ * XSD-based code completion provider for the monaco text editor.
+ *
+ * @since 0.11.0
+ * @author Tobias Bräutigam
+ */
+qx.Class.define('cv.ui.manager.editor.completion.Config', {
+ extend: qx.core.Object,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (schemaNode) {
+ this.base(arguments);
+ this.__elementCache = {};
+ this._schemaNode = schemaNode;
+ this._dataProvider = cv.ui.manager.editor.data.Provider.getInstance();
+
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __elementCache: null,
+ __metaElementCache: null,
+ _schemaNode: null,
+ _dataProvider: null,
+
+ getLastOpenedTag: function (text) {
+ // get all tags inside of the content
+ var tags = text.match(/<\/*(?=\S*)([a-zA-Z-]+)/g);
+ if (!tags) {
+ return undefined;
+ }
+ // we need to know which tags are closed
+ var closingTags = [];
+ for (var i = tags.length - 1; i >= 0; i--) {
+ if (tags[i].indexOf('') === 0) {
+ closingTags.push(tags[i].substring(''.length));
+ }
+ else {
+ // get the last position of the tag
+ var tagPosition = text.lastIndexOf(tags[i]);
+ var tag = tags[i].substring('<'.length);
+ var closingBracketIdx = text.indexOf('/>', tagPosition);
+ // if the tag wasn't closed
+ if (closingBracketIdx === -1) {
+ // if there are no closing tags or the current tag wasn't closed
+ if (!closingTags.length || closingTags[closingTags.length - 1] !== tag) {
+ // we found our tag, but let's get the information if we are looking for
+ // a child element or an attribute
+ text = text.substring(tagPosition);
+
+ var openedTag = text.indexOf('<') > text.indexOf('>');
+ var contentSearch = false;
+ var currentAttribute = null;
+ if (openedTag) {
+ var attrMatch = /([\w\-_\.\d]+)="[^"]*$/.exec(text);
+ contentSearch = !!attrMatch;
+ currentAttribute = attrMatch ? attrMatch[1] : null;
+ }
+ var filteredElementSearch = /<[\w-_\d]+$/.test(text);
+ return {
+ tagName: tag,
+ currentAttribute: currentAttribute,
+ filteredElementSearch: filteredElementSearch,
+ isAttributeSearch: !filteredElementSearch && openedTag && !contentSearch,
+ isContentSearch: contentSearch,
+ text: text
+ };
+ }
+ // remove the last closed tag
+ closingTags.splice(closingTags.length - 1, 1);
+ }
+ // remove the last checked tag and continue processing the rest of the content
+ text = text.substring(0, tagPosition);
+ }
+ }
+ },
+
+ findElements: function (parent, elementName, maxDepth, currentDepth, inMeta) {
+ var cache = inMeta === true ? this.__metaElementCache : this.__elementCache;
+ if (elementName in cache) {
+ return cache[elementName];
+ }
+ if (maxDepth < currentDepth) {
+ return null;
+ }
+ if (!parent) {
+ parent = this._schemaNode.allowedRootElements.pages;
+ }
+ if (currentDepth === undefined) {
+ currentDepth = 1;
+ }
+ var allowedElements = parent.getAllowedElements();
+ // console.log(parent.name+" looking for "+elementName+" in tree level "+currentDepth+ "(<"+maxDepth+") ("+Object.getOwnPropertyNames(allowedElements).join(", ")+")");
+ if (elementName in allowedElements) {
+ // console.log("found "+elementName+" in tree level "+currentDepth);
+ this.__elementCache[elementName] = allowedElements[elementName];
+ return allowedElements[elementName];
+ } else {
+ for (var element in allowedElements) {
+ if (inMeta !== true && element === 'meta') {
+ continue;
+ }
+ if (maxDepth > currentDepth) {
+ var result = this.findElements(allowedElements[element], elementName, maxDepth, currentDepth + 1);
+ if (result) {
+ cache[elementName] = result;
+ // console.log("found " + elementName + " in tree level " + currentDepth);
+ return result;
+ }
+ }
+ }
+ }
+
+ },
+
+ isItemAvailable: function (itemName, maxOccurs, items) {
+ // the default for 'maxOccurs' is 1
+ maxOccurs = maxOccurs || '1';
+ // the element can appere infinite times, so it is available
+ if (maxOccurs && maxOccurs === 'unbounded') {
+ return true;
+ }
+ // count how many times the element appeared
+ var count = 0;
+ for (var i = 0; i < items.length; i++) {
+ if (items[i] === itemName) {
+ count++;
+ }
+ }
+ // if it didn't appear yet, or it can appear again, then it
+ // is available, otherwise it't not
+ return count === 0 || parseInt(maxOccurs) > count;
+ },
+
+ getElementString: function (element, indent, prefix) {
+ var insertText = indent+prefix+element.name+" ";
+ // add all required attributes with default values
+ Object.getOwnPropertyNames(element.allowedAttributes).forEach(function(attr) {
+ var attribute = element.allowedAttributes[attr];
+ if (!attribute.isOptional) {
+ insertText += attr+'="'+(attribute.defaultValue ? attribute.defaultValue : "")+'" ';
+ }
+ });
+ // add mandatory children
+ var requiredElements = element.getRequiredElements();
+ var allowedContent = element.getAllowedContent();
+ var isContentAllowed = allowedContent._text || requiredElements.length > 0 || !!allowedContent._grouping;
+ if (!isContentAllowed) {
+ // close tag
+ insertText = insertText.trim()+"/";
+ } else {
+ // close open tag
+ insertText = insertText.trim()+">";
+
+ // insert required elements
+ var children = 0;
+ requiredElements.forEach(function(elemName) {
+ var elem = this.findElements(element, elemName, 1, 0);
+ if (elem) {
+ insertText += "\n " + this.getElementString(elem, indent + " ", "<") + ">";
+ children++;
+ }
+ }, this);
+ // add closing tag
+ if (children > 0) {
+ insertText += "\n"+indent;
+ }
+ insertText += ""+element.name;
+ }
+ return insertText;
+ },
+
+ getAvailableElements: function (element, usedItems) {
+ var availableItems = [];
+ var children = element.getAllowedElements();
+
+ // if there are no such elements, then there are no suggestions
+ if (!children) {
+ return [];
+ }
+ Object.getOwnPropertyNames(children).forEach(function(name) {
+ // get all element attributes
+ var childElem = children[name];
+ // the element is a suggestion if it's available
+ if (this.isItemAvailable(childElem.name, childElem.getBounds().max, usedItems)) {
+ // mark it as a 'field', and get the documentation
+ availableItems.push({
+ label: childElem.name,
+ insertText: this.getElementString(childElem, "", ""),
+ kind: window.monaco.languages.CompletionItemKind.Field,
+ detail: childElem.type,
+ documentation: childElem.getDocumentation().join("\n")
+ });
+ }
+ }, this);
+ // return the suggestions we found
+ return availableItems;
+ },
+
+ getAvailableAttributes: function (element, usedChildTags) {
+ var availableItems = [];
+ // get all attributes for the element
+ var attrs = element.allowedAttributes;
+ Object.getOwnPropertyNames(attrs).forEach(function(name) { // jshint ignore:line
+ var attr = attrs[name];
+ // accept it in a suggestion list only the attribute is not used yet
+ if (usedChildTags.indexOf(attr.name) === -1) {
+ // mark it as a 'property', and get it's documentation
+ availableItems.push({
+ label: attr.name,
+ insertText: attr.name+'=""',
+ kind: window.monaco.languages.CompletionItemKind.Property,
+ detail: attr.getTypeString(),
+ documentation: attr.getDocumentation().join("\n")
+ });
+ }
+ }, this);
+
+ // return the elements we found
+ return availableItems;
+ },
+
+ getProvider: function () {
+ return {
+ triggerCharacters: ['<', '"'],
+ provideCompletionItems: function (model, position) {
+ // get editor content before the pointer
+ var textUntilPosition = model.getValueInRange({
+ startLineNumber: 1,
+ startColumn: 1,
+ endLineNumber: position.lineNumber,
+ endColumn: position.column
+ });
+ // parse mappings
+ var completeText = model.getValue();
+ var metaEndPos = completeText.indexOf('');
+ var textMeta = metaEndPos > 0 ? completeText.substring(0, metaEndPos) : completeText;
+ var mappingNames = [];
+ var stylingNames = [];
+ var templates = {};
+ var map, vmap;
+ var regex = /');
+ if (templatesStart >= 0) {
+ var templatesString = textMeta.substring(templatesStart + 11, textMeta.indexOf('') - 12).replace(/(?:\r\n|\r|\n)/g, '');
+ templatesString.split('').forEach(function (rawTemplate) {
+ var nameMatch = /";
+ }
+ // parse the content (not cleared text) into an xml document
+ var xmlDoc = qx.xml.Document.fromString(cleanedText);
+ var lastChild = xmlDoc.lastElementChild;
+ var i;
+ var lastFound = false;
+ while (lastChild) {
+ openedTags.push(lastChild.tagName);
+ openedAttributes.push(lastChild.attributes);
+ // if we found our last opened tag
+ if (lastChild.tagName === lastOpenedTag.tagName) {
+ lastFound = true;
+ // if we are looking for attributes, then used items should
+ // be the attributes we already used
+ if (lastOpenedTag.isAttributeSearch && lastChild.outerHTML === lastOpenedTag.text) {
+ var attrs = lastChild.attributes;
+ for (i = 0; i < attrs.length; i++) {
+ usedItems.push(attrs[i].nodeName);
+ }
+ }
+ else {
+ // if we are looking for child elements, then used items
+ // should be the elements that were already used
+ var children = lastChild.children;
+ for (i = 0; i < children.length; i++) {
+ if (children[i].tagName.toLowerCase() !== 'parsererror') {
+ usedItems.push(children[i].tagName);
+ }
+ }
+ }
+ break;
+ }
+ // we haven't found the last opened tag yet, so we move to
+ // the next element
+ lastChild = lastChild.lastElementChild;
+ }
+ if (!lastFound) {
+ // fallback -> parse string
+ if (isAttributeSearch || isContentSearch) {
+ parts = lastOpenedTag.text.split(" ");
+ // skip tag name
+ parts.shift();
+ parts.forEach(function(entry) {
+ usedItems.push(entry.split("=").shift());
+ });
+ }
+ }
+ }
+ var res = [];
+ var match;
+ // find the last opened tag in the schema to see what elements/attributes it can have
+ var searchedElement = openedTags[openedTags.length-1];
+ if (isContentSearch) {
+ // handle data providers if the is one relevant
+ if (lastOpenedTag.tagName === 'pages' && lastOpenedTag.currentAttribute === 'design') {
+ return this._dataProvider.getDesigns().then(function (sugg) {
+ return {suggestions: sugg};
+ });
+ } else if (lastOpenedTag.tagName === 'address' && lastOpenedTag.currentAttribute === 'transform') {
+ return {suggestions: this._dataProvider.getTransforms()};
+ } else if (lastOpenedTag.tagName === 'plugin' && lastOpenedTag.currentAttribute === 'name') {
+ return {suggestions: this._dataProvider.getPlugins()};
+ } else if (lastOpenedTag.tagName === 'icon' && lastOpenedTag.currentAttribute === 'name') {
+ return {suggestions: this._dataProvider.getIcons()};
+ } else if (lastOpenedTag.tagName === 'influx') {
+ if (lastOpenedTag.currentAttribute === 'measurement') {
+ return this._dataProvider.getInfluxDBs().then(function (suggestions) {
+ return {suggestions: suggestions};
+ });
+ } else if (lastOpenedTag.currentAttribute === 'field') {
+ match = /measurement="([^"]+)"/.exec(lastOpenedTag.text);
+ if (match) {
+ return this._dataProvider.getInfluxDBFields(match[1]).then(function (suggestions) {
+ return {suggestions: suggestions};
+ });
+ }
+ }
+ } else if (lastOpenedTag.tagName === 'tag' && (lastOpenedTag.currentAttribute === 'key' || lastOpenedTag.currentAttribute === 'value') && openedTags.includes('influx')) {
+ var influxAttributes = openedAttributes[openedTags.indexOf('influx')];
+ var attr = influxAttributes.getNamedItem('measurement');
+ if (attr) {
+ if (lastOpenedTag.currentAttribute === 'key') {
+ return this._dataProvider.getInfluxDBTags(attr.value).then(function (suggestions) {
+ return {suggestions: suggestions};
+ });
+ } else if (lastOpenedTag.currentAttribute === 'value') {
+ match = /key="([^"]+)"/.exec(lastOpenedTag.text);
+ if (match) {
+ return this._dataProvider.getInfluxDBValues(attr.value, match[1]).then(function (suggestions) {
+ return {suggestions: suggestions};
+ });
+ }
+ }
+ }
+ } else if (lastOpenedTag.tagName === 'template' && lastOpenedTag.currentAttribute === 'name' && openedTags.includes('meta')) {
+ res = Object.keys(templates).map(function (name) {
+ return {
+ label: name,
+ insertText: name,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ }, this);
+ return {suggestions: res};
+ } else if (lastOpenedTag.tagName === 'value' &&
+ lastOpenedTag.currentAttribute === 'name' &&
+ !openedTags.includes('meta') &&
+ openedTags.includes('template')) {
+ // TODO: find out template name
+ var templateNames = Object.keys(templates);
+ templateNames.forEach(function (name) {
+ templates[name].forEach(function (variableName) {
+ res.push({
+ label: variableName,
+ insertText: variableName,
+ detail: qx.locale.Manager.tr('Variable from template %1', name),
+ kind: window.monaco.languages.CompletionItemKind.Variable
+ });
+ }, this);
+ }, this);
+ return {suggestions: res};
+ } else if (lastOpenedTag.currentAttribute === 'mapping') {
+ res = mappingNames.map(function (mappingName) {
+ return {
+ label: mappingName,
+ insertText: mappingName,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ }, this);
+ return {suggestions: res};
+ } else if (lastOpenedTag.currentAttribute === 'styling') {
+ res = stylingNames.map(function (stylingName) {
+ return {
+ label: stylingName,
+ insertText: stylingName,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ }, this);
+ return {suggestions: res};
+ }
+
+ // TODO: completions that have to be retrieved from the backend
+ // * rrds
+ // * Influx: dbs, tags fields
+ // * media files
+
+ searchedElement = lastOpenedTag.tagName;
+ } else if (!isAttributeSearch && filteredElementSearch) {
+ searchedElement = openedTags[openedTags.length-2];
+ }
+ if (searchedElement === 'rrd') {
+ return {suggestions: this._dataProvider.getRrds()};
+ } else if (searchedElement === 'file' && !isAttributeSearch && !isContentSearch && openedTags.includes('files')) {
+ match = /type="([^"]+)"/.exec(lastOpenedTag.text);
+ var typeFilter = !!match ? match[1] : null;
+ return this._dataProvider.getMediaFiles(typeFilter).then(function (suggestions) {
+ return {suggestions: suggestions};
+ });
+ }
+ var currentItem = this.findElements(this._schemaNode.allowedRootElements.pages, searchedElement, openedTags.length, openedTags.includes('meta'));
+
+ // return available elements/attributes if the tag exists in the schema, or an empty
+ // array if it doesn't
+ if (isContentSearch) {
+ var currentAttribute = usedItems[usedItems.length-1];
+
+ if (currentItem && currentAttribute in currentItem.allowedAttributes) {
+ var attribute = currentItem.allowedAttributes[currentAttribute];
+ var type = attribute.getTypeString();
+ attribute.getEnumeration().forEach(function(entry) {
+ res.push({
+ label: entry,
+ kind: window.monaco.languages.CompletionItemKind.Value,
+ detail: type,
+ documentation: attribute.getDocumentation().join("\n")
+ });
+ });
+ }
+ }
+ else if (isAttributeSearch) {
+ // get attributes completions
+ res = currentItem ? this.getAvailableAttributes(currentItem, usedItems) : [];
+ }
+ else {
+ // get elements completions
+ if (lastOpenedTag && lastOpenedTag.text.endsWith("")) {
+ res.push({
+ label: lastOpenedTag.tagName,
+ kind: window.monaco.languages.CompletionItemKind.Field
+ });
+ } else {
+ res = currentItem ? this.getAvailableElements(currentItem, usedItems) : [];
+ }
+ }
+ return {suggestions: res};
+ }.bind(this)
+ };
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__elementCache = null;
+ this._schemaNode = null;
+ this._dataProvider = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/editor/data/Provider.js b/source/class/cv/ui/manager/editor/data/Provider.js
new file mode 100644
index 00000000000..a91867cf580
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/data/Provider.js
@@ -0,0 +1,283 @@
+/**
+ * Wrapper class for all data providers.
+ */
+qx.Class.define('cv.ui.manager.editor.data.Provider', {
+ extend: qx.core.Object,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this.__cache = {};
+ this._client = cv.io.rest.Client.getDataProviderClient();
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __cache: null,
+
+ _getFromCache: function (cacheId) {
+ return this.__cache[cacheId];
+ },
+
+ __clearFromCache: function (cacheId) {
+ if (!cacheId) {
+ this.__cache = {};
+ } else {
+ delete this.__cache[cacheId];
+ }
+ },
+
+ _addToCache: function (cacheId, data) {
+ this.__cache[cacheId] = data;
+ },
+
+ /**
+ * Returns the available design names as array of suggestions.
+ * @returns {Promise} suggestions
+ */
+ getDesigns: function () {
+ return this.__getData('designs', 'designsSync', null,[], function (res) {
+ return res.map(function (designName) {
+ return {
+ label: designName,
+ insertText: designName,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ });
+ }, this);
+ },
+
+ /**
+ *
+ * @param cacheId {String}
+ * @param rpc {String|Function} rpcname to use with this._client or function to call
+ * @param rpcContext {Object} rpc context
+ * @param args {Array} rpc arguments
+ * @param converter {Function} converter that converts the response to suggestions for the text editor
+ * @param converterContext {Object} context fot the converter function
+ * @returns {Promise}
+ * @private
+ */
+ __getData: function (cacheId, rpc, rpcContext, args, converter, converterContext) {
+ var cached = this._getFromCache(cacheId);
+ if (cached) {
+ return Promise.resolve(converter.call(converterContext || this, cached));
+ } else {
+ return new Promise(function (resolve, reject) {
+ var handleResponse = function (err, res) {
+ if (err) {
+ reject(err);
+ } else {
+ // cache the raw values not the converted ones
+ this._addToCache(cacheId, res);
+ resolve(converter.call(converterContext || this, res));
+ }
+ };
+ if (!args) {
+ args = [handleResponse, this];
+ } else {
+ args.push(handleResponse);
+ args.push(this);
+ }
+ if (qx.lang.Type.isString(rpc)) {
+ this._client[rpc].apply(rpcContext || this._client, args);
+ } else if (qx.lang.Type.isFunction(rpc)) {
+ rpc.apply(rpcContext, args);
+ }
+ }.bind(this));
+ }
+ },
+
+ getRrds: function () {
+ return this.__getData('rrds', 'rrdsSync', null,[], this._parseDpResponse, this);
+ },
+
+ getInfluxDBs: function () {
+ return this.__getData('influxdbs', 'influxdbsSync', null,[], this._parseDpResponse, this);
+ },
+
+ getInfluxDBFields: function (measurement) {
+ return this.__getData('influxdbfields|' + measurement, 'influxdbfieldsSync', null,[{measurement: measurement}], this._parseDpResponse, this);
+ },
+
+ getInfluxDBTags: function (measurement) {
+ return this.__getData('influxdbtags|' + measurement, 'influxdbtagsSync', null,[{measurement: measurement}], function (res) {
+ return Object.keys(res).map(function (x) {
+ return {
+ label: x,
+ insertText: x,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ });
+ }, this);
+ },
+
+ getInfluxDBValues: function (measurement, tag) {
+ return this.__getData('influxdbtags|' + measurement, 'influxdbtagsSync', null,[{measurement: measurement}], function (res) {
+ var sug = [];
+ res[tag].forEach(function (x) {
+ sug.push({
+ label: x,
+ insertText: x,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ });
+ });
+ return sug;
+ }, this);
+ },
+
+ _parseDpResponse: function (data) {
+ var target = [];
+ data.forEach(function (entry) {
+ target.push({
+ label: entry.label,
+ insertText: entry.value,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ });
+ }, this);
+ return target;
+ },
+
+ getMediaFiles: function (typeFilter) {
+ var fsClient = cv.io.rest.Client.getFsClient();
+ return this.__getData('media', fsClient.readSync, fsClient,[{path: 'media', recursive: true}], function (res) {
+ return res.filter(function (file) {
+ return !typeFilter || file.name.endsWith('.' + typeFilter);
+ }).map(function (file) {
+ var path = file.parentFolder + file.name;
+ return {
+ label: path,
+ insertText: path,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ });
+ }, this);
+ },
+
+ /**
+ * Returns the list of available transformations as suggestion entry array.
+ * @returns {Array}
+ */
+ getTransforms: function (format) {
+ if (!format) {
+ format = 'monaco';
+ }
+ var cacheId = 'transforms|' + format;
+ var cached = this._getFromCache(cacheId);
+ if (cached) {
+ return cached;
+ } else {
+ var transforms = [];
+ Object.keys(cv.Transform.registry).forEach(function (key) {
+ var entry = cv.Transform.registry[key];
+ var suggestion;
+ if (format === 'dp') {
+ suggestion = {
+ label: entry.name + ' [' + key + ']',
+ value: key
+ };
+ } else {
+ suggestion = {
+ label: key,
+ insertText: key,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ if (entry.lname && entry.lname.hasOwnProperty(qx.locale.Manager.getInstance().getLanguage())) {
+ suggestion.detail = entry.lname[qx.locale.Manager.getInstance().getLanguage()];
+ }
+ }
+ transforms.push(suggestion);
+ }, this);
+ this._addToCache(cacheId, transforms);
+ return transforms;
+ }
+ },
+
+ /**
+ * Returns the plugin names (all defined parts staring with 'plugin-')
+ * @returns {Array}
+ */
+ getPlugins: function (format) {
+ if (!format) {
+ format = 'monaco';
+ }
+ var cacheId = 'plugins|' + format;
+ var cached = this._getFromCache(cacheId);
+ if (cached) {
+ return cached;
+ } else {
+ var plugins = [];
+ var qxParts = qx.io.PartLoader.getInstance().getParts();
+ Object.keys(qxParts).forEach(function (partName) {
+ if (partName.startsWith('plugin-')) {
+ var pluginName = partName.substring(7);
+ if (format === 'dp') {
+ plugins.push({
+ label: pluginName,
+ value: pluginName
+ });
+ } else {
+ plugins.push({
+ label: pluginName,
+ insertText: pluginName,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ });
+ }
+ }
+ }, this);
+ this._addToCache(cacheId, plugins);
+ return plugins;
+ }
+ },
+
+ getIcons: function (format) {
+ if (!format) {
+ format = 'monaco';
+ }
+ var cacheId = 'icons|' + format;
+ var cached = this._getFromCache(cacheId);
+ if (cached) {
+ return cached;
+ } else {
+ var icons;
+ if (format === 'monaco') {
+ icons = Object.keys(cv.IconConfig.DB).map(function (iconName) {
+ return {
+ label: iconName,
+ insertText: iconName,
+ kind: window.monaco.languages.CompletionItemKind.EnumMember
+ };
+ });
+ } else if (format === 'dp') {
+ // dataprovider format
+ icons = Object.keys(cv.IconConfig.DB).map(function (iconName) {
+ return {
+ label: iconName,
+ value: iconName
+ };
+ });
+ }
+ this._addToCache(cacheId, icons);
+ return icons;
+ }
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__cache = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/form/FileListItem.js b/source/class/cv/ui/manager/form/FileListItem.js
new file mode 100644
index 00000000000..582d28f59e4
--- /dev/null
+++ b/source/class/cv/ui/manager/form/FileListItem.js
@@ -0,0 +1,458 @@
+/**
+ * A qx.ui.form.ListItem with an additional label overlay over the icon to show the file type
+ */
+qx.Class.define('cv.ui.manager.form.FileListItem', {
+ extend: qx.ui.core.Widget,
+ implement : [qx.ui.form.IModel],
+ include: [cv.ui.manager.upload.MDragUpload],
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (label, icon, model) {
+ this.base(arguments, label, icon);
+ var layout = new qx.ui.layout.Canvas();
+ layout.setDesktop(true);
+ this._setLayout(layout);
+
+ if (model) {
+ this.setModel(model);
+
+ }
+ this.addListener('pointerover', this._onPointerOver, this);
+ this.addListener('pointerout', this._onPointerOut, this);
+
+ cv.ui.manager.model.Preferences.getInstance().addListener('changeDefaultConfigEditor', this._maintainFileActions, this);
+
+ this.setUploadHint(this.tr('Drop the file here to replace the content.'));
+ },
+
+ /*
+ *****************************************************************************
+ EVENTS
+ *****************************************************************************
+ */
+ events: {
+ /** (Fired by {@link qx.ui.form.List}) */
+ 'action' : 'qx.event.type.Event'
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-file-item'
+ },
+
+ model: {
+ nullable: true,
+ event: 'changeModel',
+ apply: '_applyModel',
+ dereference: true,
+ check: 'cv.ui.manager.model.FileItem'
+ },
+
+ /**
+ * Show the action buttons.
+ */
+ showFileActions: {
+ check: 'Boolean',
+ init: false,
+ apply: '_maintainFileActions'
+ },
+
+ /** The label/caption/text of the qx.ui.basic.Atom instance */
+ label: {
+ nullable: true,
+ check: 'String',
+ event: 'changeLabel'
+ },
+
+ /** Any URI String supported by qx.ui.basic.Image to display an icon */
+ icon: {
+ check: 'String',
+ nullable: true,
+ themeable: true,
+ event: 'changeIcon'
+ },
+
+ /**
+ * The space between the icon and the label
+ */
+ gap: {
+ check : 'Integer',
+ nullable : false,
+ event : 'changeGap',
+ themeable : true,
+ init : 4
+ },
+
+
+ /**
+ * Configure the visibility of the sub elements/widgets.
+ * Possible values: both, label, icon
+ */
+ show: {
+ init : 'both',
+ check : [ 'both', 'label', 'icon' ],
+ themeable : true,
+ inheritable : true,
+ event : 'changeShow'
+ },
+
+
+ /**
+ * The position of the icon in relation to the text.
+ * Only useful/needed if text and icon is configured and 'show' is configured as 'both' (default)
+ */
+ iconPosition: {
+ init : 'left',
+ check : ['top', 'right', 'bottom', 'left', 'top-left', 'bottom-left' , 'top-right', 'bottom-right'],
+ themeable : true,
+ event: 'changeIconPosition'
+ },
+
+
+ /**
+ * Whether the content should be rendered centrally when to much space
+ * is available. Enabling this property centers in both axis. The behavior
+ * when disabled of the centering depends on the {@link #iconPosition} property.
+ * If the icon position is left
or right
, the X axis
+ * is not centered, only the Y axis. If the icon position is top
+ * or bottom
, the Y axis is not centered. In case of e.g. an
+ * icon position of top-left
no axis is centered.
+ */
+ center : {
+ init : false,
+ check : 'Boolean',
+ themeable : true,
+ event: 'changeCenter'
+ },
+
+ /**
+ * Restrict possible file uploads (not supported by every browxer)
+ */
+ acceptUpload: {
+ init: null,
+ nullable: true,
+ check: "String"
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _uploadManager: null,
+
+ // overridden
+ /**
+ * @lint ignoreReferenceField(_forwardStates)
+ */
+ _forwardStates :
+ {
+ focused : true,
+ selected : true,
+ dragover : true
+ },
+
+
+ /**
+ * Event handler for the pointer over event.
+ */
+ _onPointerOver : function() {
+ this.addState('hovered');
+ },
+
+
+ /**
+ * Event handler for the pointer out event.
+ */
+ _onPointerOut : function() {
+ this.removeState('hovered');
+ },
+
+ _isDroppable: function (files) {
+ if (files.length === 1) {
+ if (this.getModel().getSpecial() === 'add-file') {
+ return true;
+ }
+ var myMime = cv.ui.manager.tree.FileSystem.getMimetypeFromSuffix(this.getModel().getName().split(".").pop());
+ return myMime === files[0].type;
+ }
+ return false;
+ },
+
+ _onDrop: function (ev) {
+ ev.preventDefault();
+ if (this.getModel().getSpecial() === 'add-file') {
+ cv.ui.manager.upload.MDragUpload.uploadFile(cv.ui.manager.upload.MDragUpload.getFiles(ev)[0]);
+ } else {
+ dialog.Dialog.confirm(this.tr('Do you really want to replace the \'%1\' with the uploaded files content?', this.getModel().getName()), function (confirmed) {
+ if (confirmed) {
+ var newFile = cv.ui.manager.upload.MDragUpload.getFiles(ev)[0];
+ cv.ui.manager.upload.MDragUpload.uploadFile(newFile, this.getModel());
+ }
+ }, this);
+ }
+ this._onStopDragging(ev);
+ },
+
+ _applyModel: function (value) {
+ if (value && value.getType() === 'file') {
+ var control = this.getChildControl('file-type');
+ if (value.isFake()) {
+ if (value.getSpecial() !== 'add-file') {
+ this.getChildControl('action-menu').configure(value);
+ } else {
+ // this.getChildControl('bottom-bar').exclude();
+ // this.setUploadHint(this.tr('Drop the file here to upload a the file.'));
+ // this.getChildControl('atom').setToolTipText(this.tr('Click to select a file for upload.'));
+ // this.setAcceptUpload(cv.ui.manager.model.FileItem.getAcceptedFiles(value.getParent()));
+ // if (!this._uploadManager) {
+ // this._uploadManager = new cv.ui.manager.upload.UploadMgr();
+ // this._uploadManager.addWidget(this);
+ // }
+ // this._uploadManager.setFolder(value.getParent());
+ // return;
+ }
+ } else {
+ var type = value.getName().split('.').pop();
+
+ // do not use file types that are longer than 4 chars (not enough space)
+ if (type.length <= 4) {
+ var handled = false;
+ switch (type) {
+ case 'xml':
+ control.setValue('>');
+ handled = true;
+ break;
+
+ case 'js':
+ type = qx.lang.String.firstUp(type); // jshint ignore:line
+ case 'css':
+ case 'conf':
+ control.setValue(type);
+ handled = true;
+ break;
+ }
+ if (handled) {
+ control.show();
+ } else {
+ control.exclude();
+ }
+ } else {
+ control.exclude();
+ }
+ this.getChildControl('action-menu').configure(value);
+ }
+
+ } else {
+ this.getChildControl('file-type').exclude();
+ }
+ // this.getChildControl('bottom-bar').show();
+ // this.setUploadHint(this.tr('Drop the file here to replace the content.'));
+ // this.getChildControl('atom').setToolTipText(this.tr('Double click to open'));
+ this._maintainFileActions();
+ // if (this._uploadManager) {
+ // try {
+ // this._uploadManager.removeWidget(this);
+ // } catch (e) {}
+ // }
+ },
+
+ _onOpenWith: function (ev) {
+ var handlerId = ev.getTarget().getUserData('handlerId');
+ qx.event.message.Bus.dispatchByName('cv.manager.openWith', {
+ file: this.getModel(),
+ handler: handlerId
+ });
+ },
+
+ _applyIcon: function (value, old) {
+ this.base(arguments, value, old);
+ if (value && !value.startsWith('@')) {
+ var control = this.getChildControl('atom').getChildControl('icon');
+ if (!cv.ui.manager.viewer.Image.getImageData(value)) {
+ // wait for image to be loaded
+ control.addListenerOnce('loaded', this.__scaleWithAspect, this);
+ } else {
+ this.__scaleWithAspect();
+ }
+ }
+ },
+
+ _maintainFileActions: function () {
+ var file = this.getModel();
+ if (this.isShowFileActions() && file) {
+ this.getChildControl('download-button').setEnabled(!file.isFake());
+ var editorConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file, 'edit');
+ var viewerConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file, 'view');
+ var openButton = this.getChildControl('open-button');
+ if (file.isWriteable() && editorConf) {
+ openButton.setUserData('handlerId', editorConf.Clazz.classname);
+ openButton.set({
+ icon: editorConf.Clazz.ICON || cv.theme.dark.Images.getIcon('edit', 18),
+ enabled: true,
+ toolTipText: editorConf.Clazz.TITLE
+ });
+ } else if(viewerConf) {
+ openButton.setUserData('handlerId', viewerConf.Clazz.classname);
+ openButton.set({
+ icon: viewerConf.Clazz.ICON || cv.theme.dark.Images.getIcon('preview', 18),
+ enabled: true,
+ toolTipText: viewerConf.Clazz.TITLE
+ });
+ } else {
+ openButton.setEnabled(false);
+ }
+ this.getChildControl('open-button');
+ this.getChildControl('action-button');
+ this.getChildControl('bottom-bar').show();
+ } else {
+ this.getChildControl('bottom-bar').exclude();
+ }
+ },
+
+ __scaleWithAspect: function () {
+ var data = cv.ui.manager.viewer.Image.getImageData(this.getIcon());
+ var control = this.getChildControl('atom').getChildControl('icon');
+ var sizeHint = control.getSizeHint();
+ var width = sizeHint.width;
+ var height = Math.round(1 / data.aspectRatio * width);
+ var padding = [0, 0, 0, 0];
+ if (height > sizeHint.height) {
+ height = sizeHint.height;
+ width = Math.round(data.aspectRatio * height);
+ padding[1] = Math.round((sizeHint.width - width) / 2);
+ padding[3] = padding[1];
+ } else {
+ padding[0] = Math.round((sizeHint.height - height) / 2);
+ padding[2] = padding[0];
+ }
+ control.setPadding(padding);
+ },
+
+ _maintainFileTypePosition: function () {
+ var iconBounds = this.getChildControl('atom').getChildControl('icon').getBounds();
+ var top = Math.round(iconBounds.top + iconBounds.height / 2);
+ this.getChildControl('file-type').setLayoutProperties({
+ left: iconBounds.left,
+ top: top,
+ right: iconBounds.left + iconBounds.width,
+ bottom: top + 18
+ });
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'atom':
+ control = new qx.ui.basic.Atom();
+ ['label', 'icon', 'gap', 'iconPosition', 'show', 'center'].forEach(function (prop) {
+ this.bind(prop, control, prop);
+ }, this);
+ control.setAnonymous(true);
+ control.setToolTipText(this.tr('Double click to open'));
+ this._add(control, {top: 0, left: 0, right: 0, bottom: 34});
+ break;
+
+ case 'file-type':
+ control = new qx.ui.basic.Label();
+ control.set({
+ zIndex: 100,
+ anonymous: true,
+ font: 'title',
+ textAlign: 'center',
+ textColor: 'background-main',
+ minWidth: 70
+ });
+ var icon = this.getChildControl('atom').getChildControl('icon');
+ icon.bind('visibility', control, 'visibility');
+ icon.addListener('resize', this._maintainFileTypePosition, this);
+ this._add(control, {width: '100%'});
+ break;
+
+ case 'bottom-bar':
+ control = new qx.ui.container.Composite(new qx.ui.layout.HBox(4, 'center'));
+ control.setAnonymous(true);
+ this._add(control, {left: 0, bottom: 0, right: 0});
+ break;
+
+ case 'download-button':
+ control = new qx.ui.form.Button(null, cv.theme.dark.Images.getIcon('download', 18));
+ control.setToolTipText(this.tr('Download file'));
+ control.addListener('execute', function () {
+ cv.ui.manager.control.FileController.getInstance().download(this.getModel());
+ }, this);
+ this.getChildControl('bottom-bar').add(control);
+ break;
+
+ case 'action-menu':
+ control = new cv.ui.manager.contextmenu.FileItem();
+ break;
+
+ case 'action-button':
+ control = new qx.ui.form.MenuButton(null, cv.theme.dark.Images.getIcon('menu', 18), this.getChildControl('action-menu'));
+ control.setToolTipText(this.tr('Other file actions'));
+ this.getChildControl('bottom-bar').add(control);
+ break;
+
+ case 'open-button':
+ control = new qx.ui.form.Button(null, cv.theme.dark.Images.getIcon('preview', 18));
+ control.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.openWith', {
+ file: this.getModel(),
+ handler: control.getUserData('handlerId')
+ });
+ }, this);
+ this.getChildControl('bottom-bar').add(control);
+ break;
+ }
+ if (!control) {
+ control = this._createMDragUploadChildControlImpl(id);
+ }
+
+ return control || this.base(arguments, id);
+ },
+
+ // overridden
+ capture: function () {
+ // do not fire capture method for upload-items (see: com.zenesis.qx.upload.MUploadButton)
+ if (!this.getFile() || this.getFile().getSpecial() !== 'add-file') {
+ this.base(arguments);
+ }
+ },
+
+ // overridden
+ releaseCapture: function() {
+ // do not fire capture method for upload-items (see: com.zenesis.qx.upload.MUploadButton)
+ if (!this.getFile() || this.getFile().getSpecial() !== 'add-file') {
+ this.base(arguments);
+ }
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.removeListener('pointerover', this._onPointerOver, this);
+ this.removeListener('pointerout', this._onPointerOut, this);
+
+ this._disposeObjects('_uploadManager');
+ cv.ui.manager.model.Preferences.getInstance().removeListener('changeDefaultConfigEditor', this._maintainFileActions, this);
+ }
+});
diff --git a/source/class/cv/ui/manager/form/FileTabItem.js b/source/class/cv/ui/manager/form/FileTabItem.js
new file mode 100644
index 00000000000..45430be66bc
--- /dev/null
+++ b/source/class/cv/ui/manager/form/FileTabItem.js
@@ -0,0 +1,219 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.form.FileTabItem', {
+ extend: qx.ui.core.Widget,
+ implement : [qx.ui.form.IModel],
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.HBox());
+ this._createChildControl('icon');
+ this._createChildControl('label');
+ this._createChildControl('close');
+
+ this.addListener("pointerover", this._onPointerOver, this);
+ this.addListener("pointerout", this._onPointerOut, this);
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ 'close': 'qx.event.type.Data',
+
+ /** (Fired by {@link qx.ui.form.List}) */
+ "action" : "qx.event.type.Event"
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'open-file-item'
+ },
+
+ model: {
+ nullable: true,
+ event: 'changeModel',
+ apply: '_applyModel',
+ dereference: true
+ },
+
+ label: {
+ check: 'String',
+ nullable: true,
+ transform: '_transformFilename',
+ event: 'changeLabel',
+ apply: '_applyLabel'
+ },
+
+ icon: {
+ check: 'String',
+ nullable: true,
+ apply: '_applyIcon'
+ },
+
+ permanent: {
+ check: 'Boolean',
+ init: false,
+ apply: '_applyPermanent'
+ },
+
+ modified: {
+ check: 'Boolean',
+ init: false,
+ apply: '_applyLabel'
+ },
+
+ closeable: {
+ check: 'Boolean',
+ init: true,
+ apply: '_applyCloseable'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ // overridden
+ /**
+ * @lint ignoreReferenceField(_forwardStates)
+ */
+ _forwardStates :
+ {
+ focused : true,
+ hovered : true,
+ selected : true,
+ dragover : true
+ },
+
+
+ /**
+ * Event handler for the pointer over event.
+ */
+ _onPointerOver : function() {
+ this.addState("hovered");
+ },
+
+ _transformFilename: function(name) {
+ if (name === '.') {
+ return '';
+ }
+ return name;
+ },
+
+ /**
+ * Event handler for the pointer out event.
+ */
+ _onPointerOut : function() {
+ this.removeState("hovered");
+ },
+
+ _applyPermanent: function (value) {
+ this.setFont(value ? 'default' : 'italic');
+ },
+
+ _applyCloseable: function (value) {
+ this.getChildControl('close').setVisibility(value ? 'visible' : 'excluded');
+ },
+
+ _applyModel: function (value) {
+ if (value) {
+ this.getChildControl('contextmenu').configure(value.getFile());
+ }
+ },
+
+ _applyIcon: function (value) {
+ var control = this.getChildControl('icon');
+ control.setSource(value);
+ if (value) {
+ control.show();
+ } else {
+ control.exclude();
+ }
+ },
+
+ _applyLabel: function () {
+ var label = this.getChildControl("label");
+ var value = this.getLabel();
+ if (value) {
+ label.setValue(this.getLabel() + (this.isModified() ? ' *' : ''));
+ label.show();
+ } else {
+ label.exclude();
+ }
+ },
+
+ _onClose: function () {
+ if (this.isCloseable()) {
+ this.fireDataEvent('close', this.getModel());
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'icon':
+ control = new qx.ui.basic.Image();
+ control.setAppearance('open-file-item/icon');
+ control.setAnonymous(true);
+ control.exclude();
+ this._addAt(control, 0);
+ break;
+
+ case 'label':
+ control = new qx.ui.basic.Label();
+ control.setAppearance('open-file-item/label');
+ control.setAnonymous(true);
+ this._addAt(control, 1);
+ break;
+
+ case 'contextmenu':
+ control = new cv.ui.manager.contextmenu.FileItem();
+ this.setContextMenu(control);
+ break;
+
+
+ case 'close':
+ control = new qx.ui.basic.Image('decoration/tabview/close.gif');
+ control.setAppearance('open-file-item/close');
+ if (this.isCloseable()) {
+ control.addListener('tap', this._onClose, this);
+ } else {
+ control.exclude();
+ }
+ this._addAt(control, 2);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.removeListener("pointerover", this._onPointerOver, this);
+ this.removeListener("pointerout", this._onPointerOut, this);
+ }
+});
diff --git a/source/class/cv/ui/manager/form/OptionListItem.js b/source/class/cv/ui/manager/form/OptionListItem.js
new file mode 100644
index 00000000000..b3a7e30bfca
--- /dev/null
+++ b/source/class/cv/ui/manager/form/OptionListItem.js
@@ -0,0 +1,171 @@
+/**
+ * This widgets shows and editable config option in a list.
+ */
+qx.Class.define('cv.ui.manager.form.OptionListItem', {
+ extend: qx.ui.core.Widget,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.HBox(8));
+ this._createChildControl('key');
+ this._createChildControl('value');
+ this._createChildControl('key-title');
+ this._createChildControl('value-title');
+ this._createChildControl('delete');
+ this._createChildControl('add');
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-editor-config-option'
+ },
+
+ model: {
+ check: "cv.ui.manager.model.config.Option",
+ nullable: true,
+ apply: '_applyModel'
+ }
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ 'delete': 'qx.event.type.Data',
+ 'add': 'qx.event.type.Event'
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ // list controller with allowNull calls setLabel
+ setLabel: function (label) {
+
+ },
+
+ // list controller with allowNull calls setIcon
+ setIcon: function () {},
+
+ _applyModel: function (value, old) {
+ var keyField = this.getChildControl('key');
+ var valueField = this.getChildControl('value');
+ var keyTitleField = this.getChildControl('key-title');
+ var valueTitleField = this.getChildControl('value-title');
+ this.__unbindModel(old);
+ if (value) {
+ // bi-directional bind
+ value.bind('key', keyField, 'value');
+ value.bind('value', valueField, 'value');
+ keyField.bind('value', value, 'key');
+ valueField.bind('value', value, 'value');
+ keyField.show();
+ valueField.show();
+ keyTitleField.exclude();
+ valueTitleField.exclude();
+ this.getChildControl('delete').show();
+ this.getChildControl('add').show();
+ } else {
+ keyField.exclude();
+ valueField.exclude();
+ keyTitleField.show();
+ valueTitleField.show();
+ this.getChildControl('delete').hide();
+ this.getChildControl('add').hide();
+ }
+ },
+
+ __unbindModel: function (model) {
+ if (model) {
+ var keyField = this.getChildControl('key');
+ var valueField = this.getChildControl('value');
+ if (model) {
+ model.removeRelatedBindings(keyField);
+ model.removeRelatedBindings(valueField);
+ keyField.removeRelatedBindings(model);
+ valueField.removeRelatedBindings(model);
+ }
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'key':
+ control = new qx.ui.form.TextField();
+ control.set({
+ liveUpdate: true,
+ required: true
+ });
+ this._add(control, {width: '40%'});
+ break;
+
+ case 'value':
+ control = new qx.ui.form.TextField();
+ control.set({
+ liveUpdate: true
+ });
+ this._add(control, {width: '40%'});
+ break;
+
+ case 'delete':
+ control = new qx.ui.form.Button(null, cv.theme.dark.Images.getIcon('delete', 22));
+ control.setToolTipText(this.tr('Delete option'));
+ control.addListener('execute', function() {
+ this.fireDataEvent('delete', this.getModel());
+ }, this);
+ this._add(control);
+ break;
+
+ case 'add':
+ control = new qx.ui.form.Button(null, cv.theme.dark.Images.getIcon('add', 18));
+ control.setToolTipText(this.tr('Add option'));
+ control.addListener('execute', function() {
+ this.fireEvent('add');
+ }, this);
+ this._add(control);
+ break;
+
+ case 'key-title':
+ control = new qx.ui.basic.Label(this.tr('Key'));
+ control.exclude();
+ this._add(control, {width: '40%'});
+ break;
+
+ case 'value-title':
+ control = new qx.ui.basic.Label(this.tr('Value'));
+ control.exclude();
+ this._add(control, {width: '40%'});
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__unbindModel(this.getModel());
+ }
+});
diff --git a/source/class/cv/ui/manager/form/SectionListItem.js b/source/class/cv/ui/manager/form/SectionListItem.js
new file mode 100644
index 00000000000..7e98e948f91
--- /dev/null
+++ b/source/class/cv/ui/manager/form/SectionListItem.js
@@ -0,0 +1,162 @@
+/**
+ * This widgets shows and editable config section in a list.
+ */
+qx.Class.define('cv.ui.manager.form.SectionListItem', {
+ extend: qx.ui.core.Widget,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ var grid = new qx.ui.layout.Grid(8, 8);
+ grid.setColumnFlex(1, 1);
+ grid.setColumnAlign(0, 'left', 'top');
+ this._setLayout(grid);
+ this._createChildControl('section-title');
+ this._createChildControl('list');
+ this._createChildControl('delete');
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-editor-config-section'
+ },
+
+ model: {
+ check: "cv.ui.manager.model.config.Section",
+ nullable: false,
+ apply: '_applyModel'
+ }
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ 'delete': 'qx.event.type.Data'
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _listController: null,
+
+ _applyModel: function (value, old) {
+ var nameField = this.getChildControl('name');
+ this.__unbindModel(old);
+ if (value) {
+ value.bind('name', nameField, 'value');
+ nameField.bind('value', value, 'name');
+ value.bind('options', this._listController, 'model');
+ // add at least one empty entry, when there are no options
+ if (value.getOptions().length === 0) {
+ value.getOptions().push(new cv.ui.manager.model.config.Option('', ''));
+ }
+ }
+ },
+
+ __unbindModel: function (model) {
+ if (model) {
+ var nameField = this.getChildControl('name');
+ if (this._listController) {
+ model.removeRelatedBindings(this._listController);
+ }
+ model.removeRelatedBindings(nameField);
+ nameField.removeRelatedBindings(model);
+ }
+ },
+
+ _onDeleteOption: function (ev) {
+ var option = ev.getData();
+ var options = this.getModel().getOptions();
+ if (options.length === 1) {
+ // do not delete the last option, just reset its values
+ option.resetKey();
+ option.resetValue();
+ } else {
+ this.getModel().getOptions().remove(option);
+ }
+ },
+
+ _onAddOption: function () {
+ this.getModel().getOptions().push(new cv.ui.manager.model.config.Option('', ''));
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'section-title':
+ control = new qx.ui.basic.Label(this.tr('Section'));
+ this._add(control, {row: 0, column: 0});
+ break;
+
+ case 'name':
+ control = new qx.ui.form.TextField();
+ control.set({
+ liveUpdate: true,
+ required: true
+ });
+ this._add(control, {row: 0, column: 1});
+ break;
+
+ case 'delete':
+ control = new qx.ui.form.Button(null, cv.theme.dark.Images.getIcon('delete', 22));
+ control.setToolTipText(this.tr('Delete section'));
+ control.addListener('execute', function() {
+ this.fireDataEvent('delete', this.getModel());
+ }, this);
+ this._add(control, {row: 0, column: 2});
+ break;
+
+ case 'list':
+ control = new qx.ui.form.List();
+ control.setEnableInlineFind(false);
+ this._listController = new qx.data.controller.List(null, control);
+ this._listController.setNullValueTitle('header');
+ this._listController.setAllowNull(true);
+ this._listController.setDelegate({
+ createItem: function () {
+ return new cv.ui.manager.form.OptionListItem();
+ },
+ configureItem: function (item) {
+ item.addListener('delete', this._onDeleteOption, this);
+ item.addListener('add', this._onAddOption, this);
+ }.bind(this),
+ bindItem: function (controller, item, index) {
+ controller.bindProperty('', 'model', null, item, index);
+ }
+ });
+ this._add(control, {row: 1, column: 1});
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__unbindModel(this.getModel());
+ this._disposeObjects('_listController');
+ }
+});
diff --git a/source/class/cv/ui/manager/model/BackupFolder.js b/source/class/cv/ui/manager/model/BackupFolder.js
new file mode 100644
index 00000000000..000817cd560
--- /dev/null
+++ b/source/class/cv/ui/manager/model/BackupFolder.js
@@ -0,0 +1,62 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.model.BackupFolder', {
+ extend: cv.ui.manager.model.FileItem,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments, 'backup');
+ this.load();
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ /**
+ * Returns the list of existing backup files for the given file.
+ * @param file
+ */
+ getBackupFiles: function (file) {
+ var files = [];
+ if (file.getType() === 'file') {
+ var pathparts = file.getFullPath().split('/');
+ pathparts.pop();
+ var path = pathparts.join('\/');
+ var parts = file.getName().split('.');
+ var suffix = parts.pop();
+ var filename = parts.join('.');
+ var fileRegex = new RegExp(path + filename + '-([\\d]{14})\\.' + suffix);
+ this.getChildren().filter(function (backupFile) {
+ var match = fileRegex.exec(backupFile.getFullPath().replace('backup/', ''));
+ if (match) {
+ files.push({
+ date: new Date(
+ parseInt(match[1].substring(0,4)),
+ parseInt(match[1].substring(4,6))-1,
+ parseInt(match[1].substring(6,8)),
+ parseInt(match[1].substring(8,10)),
+ parseInt(match[1].substring(10,12)),
+ parseInt(match[1].substring(12,14))
+ ),
+ file: backupFile
+ });
+ }
+ }, this);
+ }
+ return files;
+ }
+ },
+
+ defer: function () {
+
+ }
+});
diff --git a/source/class/cv/ui/manager/model/CompareFiles.js b/source/class/cv/ui/manager/model/CompareFiles.js
new file mode 100644
index 00000000000..dad322869f6
--- /dev/null
+++ b/source/class/cv/ui/manager/model/CompareFiles.js
@@ -0,0 +1,87 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.model.CompareFiles', {
+ extend: qx.core.Object,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (original, modified) {
+ this.base(arguments);
+ this.setOriginalFile(original);
+ this.setModifiedFile(modified);
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ originalFile: {
+ check: 'cv.ui.manager.model.FileItem',
+ event: 'changeOriginal'
+ },
+ modifiedFile: {
+ check: 'cv.ui.manager.model.FileItem',
+ event: 'changeModifiedFile',
+ apply: '_applyModifiedFile'
+ },
+
+ permanent: {
+ check: 'Boolean',
+ init: true
+ },
+
+ name: {
+ check: 'String',
+ init: '',
+ event: 'changeName'
+ },
+
+ type: {
+ check: 'String',
+ init: 'file'
+ },
+
+ modified: {
+ check: 'Boolean',
+ init: false
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ isRelated: function (path) {
+ return this.getOriginalFile().getFullPath() === path || this.getModifiedFile().getFullPath() === path;
+ },
+
+ isConfigFile: function () {
+ return this.getModifiedFile().isConfigFile();
+ },
+
+ getFullPath: function () {
+ return this.getOriginalFile().getFullPath();
+ },
+
+ _applyModifiedFile: function () {
+ this.setName(qx.locale.Manager.tr('Diff: %1', this.getModifiedFile().getName()));
+ },
+
+ /**
+ * Returns a fake URI that can be used to identify the file.
+ * Used by monaco editor as model URI.
+ * @returns {Uri}
+ */
+ getUri: function () {
+ return 'cv://' + this.getOriginalFile().getFullPath() + '+' + this.getModifiedFile().getFullPath();
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/model/FileItem.js b/source/class/cv/ui/manager/model/FileItem.js
new file mode 100644
index 00000000000..8a7ff86c625
--- /dev/null
+++ b/source/class/cv/ui/manager/model/FileItem.js
@@ -0,0 +1,535 @@
+/**
+ * Represents an entry in the filesystem (file or folder).
+ */
+qx.Class.define('cv.ui.manager.model.FileItem', {
+ extend: qx.core.Object,
+ include: [
+ qx.data.marshal.MEventBubbling,
+ cv.ui.manager.control.MFileEventHandler
+ ],
+ implement: [cv.ui.manager.control.IFileEventHandler],
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (name, path, parent, fakeChildren) {
+ this.base(arguments);
+ this.initChildren(new qx.data.Array());
+ if (fakeChildren) {
+ this.setFakeChildren(fakeChildren);
+ }
+ this.__path = path;
+ if (name) {
+ this.setName(name);
+ }
+ if (parent) {
+ this.setParent(parent);
+ }
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ ROOT: null,
+ _fakeIconFile: null,
+ _hiddenConfigFakeFile: null,
+ _acceptedFiles: {
+ '.': '*.xml',
+ 'media': '*.js,*.jpg,*.gif,*.png,*.conf,*.svg,*.md,*.rst,*,css,*.txt'
+ },
+
+ isConfigFile: function (path) {
+ return /visu_config.*\.xml/.test(path);
+ },
+
+ getConfigName: function (filename) {
+ var match = /visu_config_?([^.]+)\.xml/.exec(filename);
+ if (match) {
+ return match[1];
+ }
+ return null;
+ },
+
+ getIconFile: function () {
+ if (!this._fakeIconFile) {
+ this._fakeIconFile = new cv.ui.manager.model.FileItem('CometVisu-Icons', '.', cv.ui.manager.model.FileItem.ROOT).set({
+ type: 'file',
+ overrideIcon: true,
+ writeable: false,
+ readable: true,
+ open: true,
+ loaded: true,
+ hasChildren: false,
+ fake: true,
+ icon: cv.theme.dark.Images.getIcon('icons', 18)
+ });
+ }
+ return this._fakeIconFile;
+ },
+
+ getHiddenConfigFile: function () {
+ if (!this._hiddenConfigFakeFile) {
+ this._hiddenConfigFakeFile = new cv.ui.manager.model.FileItem('hidden.php', '.', cv.ui.manager.model.FileItem.ROOT).set({
+ hasChildren: false,
+ loaded: true,
+ readable: true,
+ writeable: true,
+ overrideIcon: true,
+ icon: cv.theme.dark.Images.getIcon('hidden-config', 15),
+ type: "file",
+ fake: true,
+ displayName: qx.locale.Manager.tr('Hidden configuration')
+ });
+ }
+ return this._hiddenConfigFakeFile;
+ },
+
+ getAcceptedFiles: function (folder) {
+ return this._acceptedFiles[folder.getFullPath()];
+ }
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ open : {
+ check : "Boolean",
+ event : "changeOpen",
+ apply : "_onOpen",
+ init : false
+ },
+
+ loaded : {
+ check : "Boolean",
+ event : "changeLoaded",
+ init : false
+ },
+
+ loading : {
+ check : "Boolean",
+ event : "changeLoading",
+ init : false
+ },
+
+ parent : {
+ event : "changeParent",
+ init : null
+ },
+
+ children : {
+ check : "qx.data.Array",
+ event : "changeChildren",
+ apply: "_applyEventPropagation",
+ deferredInit : true
+ },
+
+ fakeChildren: {
+ check: "Array",
+ nullable: true
+ },
+
+ displayName: {
+ check: 'String',
+ nullable: true,
+ event: 'changeDisplayName'
+ },
+
+ /**
+ * Fake items only exist in the client not in the backend
+ */
+ fake: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeFake'
+ },
+
+ overrideIcon: {
+ check: 'Boolean',
+ init: false
+ },
+
+ icon: {
+ check: 'String',
+ nullable: true,
+ event: 'changeIcon'
+ },
+
+ hash: {
+ check: 'Number',
+ nullable: true
+ },
+
+ editing: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeEditing'
+ },
+
+ /**
+ * A special configuration option for mulitple purposes, e.g. creating a fake FileItem with a special
+ * behaviour like an "Add new File" used in writeable Folders.
+ */
+ special: {
+ check: 'String',
+ nullable: true,
+ event: 'changeSpecial'
+ },
+
+ /**
+ * Temporary file are not save in the backend yet
+ */
+ temporary: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeTemporary'
+ },
+
+ /**
+ * Validation result for this files content (e.g. config file validation)
+ */
+ valid: {
+ check: 'Boolean',
+ init: true,
+ event: 'changeValid'
+ },
+
+ /**
+ * Temporary content to show, e.g. for new files, when there is no 'real' file with content yet to request from the backend
+ * this content should be shown
+ */
+ content: {
+ check: 'String',
+ nullable: true
+ },
+
+ modified: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeModified'
+ },
+
+ // Backend properties
+
+ hasChildren : {
+ check : "Boolean",
+ event : "changeHasChildren",
+ apply : "_applyHasChildren",
+ init : false
+ },
+
+ name : {
+ check : "String",
+ event : "changeName",
+ init : "",
+ apply: '_applyName'
+ },
+
+ type: {
+ check: ['dir', 'file'],
+ nullable: true,
+ apply: '_maintainIcon'
+ },
+
+ parentFolder: {
+ check: 'String',
+ nullable: true
+ },
+
+ readable: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeReadable'
+ },
+
+ writeable: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeWriteable'
+ },
+
+ mounted: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeMounted'
+ },
+
+ trash: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeTrash'
+ },
+
+ inTrash: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeInTrash'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __path: null,
+ __fullPath: null,
+ __onLoadCallback: null,
+
+ isRelated: function (path) {
+ return this.getFullPath() === path;
+ },
+
+ _handleFileEvent: function (ev) {
+ if (this.isFake()) {
+ return;
+ }
+ var data = ev.getData();
+ switch (data.action) {
+ case 'moved':
+ this.reload();
+ break;
+
+ case 'added':
+ if (this.getType() === 'dir' && data.path.startsWith(this.getFullPath())) {
+ this.reload();
+ }
+ break;
+
+ case 'deleted':
+ if (data.path === this.getFullPath()) {
+ // this item has been deleted
+ this.dispose();
+ } else if (this.getType() === 'dir' && data.path.startsWith(this.getFullPath())) {
+ // delete child
+ var children = this.getChildren();
+ children.some(function (child) {
+ if (child.getFullPath() === data.path) {
+ children.remove(child);
+ return true;
+ }
+ }, this);
+ }
+ break;
+ }
+ },
+
+ _applyName: function (value, old) {
+ this.__fullPath = null;
+ if (value && (this.getDisplayName() === null || this.getDisplayName() === old)) {
+ // use name as default display name
+ this.setDisplayName(value);
+ }
+ },
+
+ getPath: function () {
+ return this.__path;
+ },
+
+ _onOpen : function(value){
+
+ if(!this.isLoaded() && value) {
+ this.load();
+ }
+ this._maintainIcon();
+ },
+
+ _maintainIcon: function () {
+ if (!this.isOverrideIcon()) {
+ if (this.getType() === 'file') {
+ this.setIcon(cv.theme.dark.Images.getIcon('file', 18));
+ } else if (this.isTrash()) {
+ this.setIcon(cv.theme.dark.Images.getIcon('trash', 18));
+ } else if (this.isOpen()) {
+ this.setIcon(cv.theme.dark.Images.getIcon('folder-open', 18));
+ } else if (this.isMounted()) {
+ this.setIcon(cv.theme.dark.Images.getIcon('mounted-folder', 18));
+ } else {
+ this.setIcon(cv.theme.dark.Images.getIcon('folder', 18));
+ }
+ }
+ },
+
+ isConfigFile: function () {
+ return cv.ui.manager.model.FileItem.isConfigFile(this.getName());
+ },
+
+ _applyHasChildren: function (value) {
+ if (value === true && this.getChildren().length === 0) {
+ // add dummy child
+ this.getChildren().push(new cv.ui.manager.model.FileItem(''));
+ }
+ },
+
+ unload: function() {
+ this.setLoaded(false);
+ this.setLoading(false);
+ this.getChildren().removeAll();
+ },
+
+ reload : function(callback, context) {
+ this.unload();
+ return this.load(callback, context);
+ },
+
+ addChild: function (child) {
+ var oldParent = child.getParent();
+ if (oldParent !== this) {
+ oldParent.getChildren().remove(child);
+ }
+ child.setParent(this);
+ this.getChildren().push(child);
+ },
+
+ _onGet: function (data) {
+ var children = this.getChildren();
+ children.removeAll();
+ if (data) {
+ data.forEach(function (node) {
+ var child = new cv.ui.manager.model.FileItem(null, null, this);
+ child.set(node);
+ children.push(child);
+ }, this);
+ }
+ if (this.getFakeChildren()) {
+ children.append(this.getFakeChildren());
+ }
+ this.sortElements();
+
+ this.setLoaded(true);
+ if (this.__onLoadCallback) {
+ this.__onLoadCallback();
+ }
+ this.setLoading(false);
+ },
+
+ _onError: function (err) {
+ console.error(err);
+ cv.ui.manager.snackbar.Controller.error(err);
+ this.getChildren().removeAll();
+ this.setLoaded(true);
+ if (this.__onLoadCallback) {
+ this.__onLoadCallback();
+ }
+ this.setLoading(false);
+ },
+
+ load: function(callback, context) {
+ // If currently loading, delay ready
+ if (this.getType() === 'file') {
+ // nothing to load
+ this.setLoaded(true);
+ return;
+ } else if (this.isFake()) {
+ this.setLoaded(true);
+ if (this.getFakeChildren()) {
+ this.getChildren().append(this.getFakeChildren());
+ }
+ return;
+ }
+ if (this.isLoading()) {
+ if (callback) {
+ this.addListenerOnce("changeLoading", callback, context);
+ }
+ }
+ // If not done yet, resolve the child elements of this container
+ else if (this.isLoaded()) {
+ if (callback) {
+ callback.apply(context);
+ }
+ }
+ else {
+ this.setLoading(true);
+ if (callback) {
+ this.__onLoadCallback = callback.bind(context || this);
+ }
+ cv.io.rest.Client.getFsClient().readSync({path: this.getFullPath()}, function (err, res) {
+ if (err) {
+ this._onError(err);
+ } else {
+ this._onGet(res);
+ }
+ }, this);
+ }
+ },
+
+ /**
+ * Returns the complete path needed for the REST API to identify this file
+ * @returns {null}
+ */
+ getFullPath: function () {
+ if (!this.__fullPath) {
+ var parentFolder = this.getParentFolder();
+ if (!parentFolder) {
+ parentFolder = '';
+ } else if (!parentFolder.endsWith('/')) {
+ parentFolder += '/';
+ }
+ this.__fullPath = parentFolder + this.getName();
+ }
+ return this.__fullPath;
+ },
+
+ getBusTopic: function () {
+ return this.getFullPath().replace(/\//g, '.');
+ },
+
+ /**
+ * Returns a fake URI that can be used to identify the file.
+ * Used by monaco editor as model URI.
+ * @returns {Uri}
+ */
+ getUri: function () {
+ return 'cv://' + this.getFullPath();
+ },
+
+ /**
+ * Returns the path to this file for requests over HTTP (not the REST API)
+ * @returns {string}
+ */
+ getServerPath: function () {
+ return qx.util.LibraryManager.getInstance().get('cv', 'resourceUri') + '/config/' + this.getFullPath();
+ },
+
+ /**
+ * Sort entries: folders first, files then
+ */
+ sortElements: function () {
+ var sortF = function (a, b) {
+ if (a.getType() === 'dir') {
+ if (b.getType() === 'dir') {
+ if (a.isTrash()) {
+ return 1;
+ } else if (b.isTrash()) {
+ return -1;
+ }
+ return a.getName().localeCompare(b.getName());
+ } else {
+ return -1;
+ }
+ } else if (b.getType() === 'dir') {
+ return 1;
+ } else {
+ return a.getName().localeCompare(b.getName());
+ }
+ };
+ this.getChildren().sort(sortF);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__fullPath = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/model/Message.js b/source/class/cv/ui/manager/model/Message.js
new file mode 100644
index 00000000000..f67e2e964a0
--- /dev/null
+++ b/source/class/cv/ui/manager/model/Message.js
@@ -0,0 +1,37 @@
+/**
+ * Model for Messages shown in Snackbar/Dialog (usually error, warnings or info messages).
+ */
+qx.Class.define('cv.ui.manager.model.Message', {
+ extend: qx.core.Object,
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ title: {
+ check: 'String',
+ init: '',
+ event: 'changeTitle'
+ },
+
+ content: {
+ check: 'String',
+ init: '',
+ event: 'changeContent'
+ },
+
+ type: {
+ check: ['alert', 'hint', 'warning', 'error'],
+ nullable: true,
+ event: 'changeType'
+ },
+
+ sticky: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeSticky'
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/model/OpenFile.js b/source/class/cv/ui/manager/model/OpenFile.js
new file mode 100644
index 00000000000..546760608d2
--- /dev/null
+++ b/source/class/cv/ui/manager/model/OpenFile.js
@@ -0,0 +1,114 @@
+/**
+ * Data model for currently opened files, a combination of cv.ui.manager.model.FileItem and a certain FileHandler.
+ */
+qx.Class.define('cv.ui.manager.model.OpenFile', {
+ extend: qx.core.Object,
+
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (file, handlerId) {
+ this.base(arguments);
+ if (file) {
+ this.setFile(file);
+ }
+ if (handlerId) {
+ this.setHandlerId(handlerId);
+ }
+ },
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ file: {
+ check: 'cv.ui.manager.model.FileItem || cv.ui.manager.model.CompareFiles',
+ nullable: true,
+ event: 'changeFile',
+ apply: '_applyFile'
+ },
+
+ handlerId: {
+ check: '!!qx.Class.getByName(value)',
+ nullable: true,
+ apply: '_maintainIcon'
+ },
+
+ /**
+ * The opening state: permanent false behaves like a quick preview, where
+ * the current file content is replaces by the next selected file on single click.
+ * In permanent mode a new tab will be created, which content will not be replaced.
+ */
+ permanent: {
+ check: 'Boolean',
+ init: false,
+ event: 'changePermanent'
+ },
+
+ /**
+ * Icon to show in e.g. the File-Tab
+ */
+ icon: {
+ check: 'String',
+ init: '',
+ event: 'changeIcon'
+ },
+
+ closeable: {
+ check: 'Boolean',
+ init: true,
+ event: 'changeCloseable'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __ibid: null,
+
+ _applyFile: function (value, old) {
+ if (old) {
+ old.removeListener('changeModified', this._maintainPermanent, this);
+ old.removeRelatedBindings(this);
+ this.__ibid = null;
+ }
+ if (value) {
+ value.addListener('changeModified', this._maintainPermanent, this);
+ }
+ this._maintainIcon();
+ },
+
+ _maintainIcon: function () {
+ // use the handlers icon is there is one, otherwise the file items icon
+ var file = this.getFile();
+ if (this.getHandlerId() && file) {
+ var handlerClass = qx.Class.getByName(this.getHandlerId());
+ if (handlerClass && handlerClass.ICON) {
+ this.setIcon(handlerClass.ICON);
+ if (this.__ibid) {
+ file.removeBinding(this.__ibid);
+ this.__ibid = null;
+ }
+ } else {
+ this.__ibid = file.bind('icon', this, 'icon');
+ }
+ } else {
+ this.resetIcon();
+ }
+ },
+
+ _maintainPermanent: function () {
+ if (this.getFile().isModified() && !this.isPermanent()) {
+ // change to permanent once we have a modification
+ this.setPermanent(true);
+ }
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/model/Preferences.js b/source/class/cv/ui/manager/model/Preferences.js
new file mode 100644
index 00000000000..d1fe883b210
--- /dev/null
+++ b/source/class/cv/ui/manager/model/Preferences.js
@@ -0,0 +1,65 @@
+/**
+ * User preferences.
+ */
+qx.Class.define('cv.ui.manager.model.Preferences', {
+ extend: qx.core.Object,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._restorePreferences();
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ defaultConfigEditor: {
+ check: ['source', 'xml'],
+ init: 'source',
+ event: 'changeDefaultConfigEditor',
+ apply: '_savePreferences'
+ },
+
+ quickPreview: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeQuickPreview',
+ apply: '_savePreferences'
+ },
+
+ /**
+ * In export mode the manager looks and behaves like a file explorer.
+ */
+ expertMode: {
+ check: 'Boolean',
+ init: false,
+ event: 'changeExpertMode',
+ apply: '_savePreferences'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _savePreferences: function () {
+ var store = qx.bom.Storage.getLocal();
+ store.setItem('preferences', qx.util.Serializer.toNativeObject(this));
+ },
+
+ _restorePreferences: function () {
+ var store = qx.bom.Storage.getLocal();
+ this.set(store.getItem('preferences'));
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/model/config/Option.js b/source/class/cv/ui/manager/model/config/Option.js
new file mode 100644
index 00000000000..06f24579e4f
--- /dev/null
+++ b/source/class/cv/ui/manager/model/config/Option.js
@@ -0,0 +1,36 @@
+/**
+ * Simple config entry.
+ */
+qx.Class.define('cv.ui.manager.model.config.Option', {
+ extend: qx.core.Object,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (key, value) {
+ this.base(arguments);
+ this.setKey(key);
+ this.setValue(value);
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ key: {
+ check: 'String',
+ init: '',
+ event: 'changeKey'
+ },
+
+ value: {
+ check: 'String',
+ init: '',
+ event: 'changeValue'
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/model/config/Section.js b/source/class/cv/ui/manager/model/config/Section.js
new file mode 100644
index 00000000000..ad0eeaa02d9
--- /dev/null
+++ b/source/class/cv/ui/manager/model/config/Section.js
@@ -0,0 +1,55 @@
+/**
+ *
+ */
+qx.Class.define('cv.ui.manager.model.config.Section', {
+ extend: qx.core.Object,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (name) {
+ this.base(arguments);
+ this.setName(name);
+ this.initOptions(new qx.data.Array());
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ name: {
+ check: 'String',
+ event: 'changeString',
+ init: ''
+ },
+
+ options: {
+ check: 'qx.data.Array',
+ deferredInit: true,
+ event: 'changeOptions'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ addOption: function(key, value) {
+ var options = this.getOptions();
+ var found = options.some(function (option) {
+ if (option.getKey() === key) {
+ option.setValue(value);
+ }
+ }, this);
+ if (!found) {
+ options.push(new cv.ui.manager.model.config.Option(key, value));
+ }
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/snackbar/Controller.js b/source/class/cv/ui/manager/snackbar/Controller.js
new file mode 100644
index 00000000000..fa642e63dbb
--- /dev/null
+++ b/source/class/cv/ui/manager/snackbar/Controller.js
@@ -0,0 +1,127 @@
+/**
+ * Main view component responsible for showing a list of snackbar messages.
+ */
+qx.Class.define('cv.ui.manager.snackbar.Controller', {
+ extend: qx.ui.core.Widget,
+ type: 'singleton',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.VBox(8));
+ this.initMessages(new qx.data.Array());
+ qx.event.message.Bus.subscribe('cv.manager.msg.snackbar', this._onMessage, this);
+ this._listController = new qx.data.controller.List(this.getMessages(), this.getChildControl('list'));
+ this._initDelegate();
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ info: function (message) {
+ var msg = new cv.ui.manager.model.Message();
+ msg.set({
+ title: message
+ });
+ qx.event.message.Bus.dispatchByName('cv.manager.msg.snackbar', msg);
+ },
+
+ error: function (message) {
+ var msg = new cv.ui.manager.model.Message();
+ msg.set({
+ title: message,
+ type: 'error',
+ sticky: true
+ });
+ qx.event.message.Bus.dispatchByName('cv.manager.msg.snackbar', msg);
+ }
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-snackbar'
+ },
+
+ messages: {
+ check: 'qx.data.Array',
+ deferredInit: true,
+ event: 'changeMessages'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _listController: null,
+
+ _onMessage: function (ev) {
+ var msg = ev.getData();
+ if (msg instanceof cv.ui.manager.model.Message) {
+ this.getMessages().push(msg);
+ this.show();
+ }
+ },
+
+ _onCloseMessage: function (ev) {
+ var msg = ev.getData();
+ this.getMessages().remove(msg);
+ if (this.getMessages().length === 0) {
+ this.exclude();
+ }
+ },
+
+ _initDelegate: function () {
+ this._listController.setDelegate({
+ createItem: function () {
+ var item = new cv.ui.manager.snackbar.Message();
+ item.addListener('close', this._onCloseMessage, this);
+ return item;
+ }.bind(this),
+
+ bindItem: function (controller, item, index) {
+ controller.bindProperty('', 'model', null, item, index);
+ }
+ });
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'list':
+ control = new qx.ui.form.List();
+ this._add(control, {flex: 1});
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ qx.event.message.Bus.unsubscribe('cv.manager.msg.snackbar', this._onMessage, this);
+ this._disposeObjects('_listController');
+ }
+});
diff --git a/source/class/cv/ui/manager/snackbar/Message.js b/source/class/cv/ui/manager/snackbar/Message.js
new file mode 100644
index 00000000000..ae77345efe7
--- /dev/null
+++ b/source/class/cv/ui/manager/snackbar/Message.js
@@ -0,0 +1,146 @@
+/**
+ * View component that shows a snackbar message.
+ */
+qx.Class.define('cv.ui.manager.snackbar.Message', {
+ extend: qx.ui.core.Widget,
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.HBox(8));
+ this.addListener('appear', this._onAppear, this);
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ 'close': 'qx.event.type.Data'
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-snackbar-msg'
+ },
+
+ model: {
+ check: 'cv.ui.manager.model.Message',
+ nullable: true,
+ apply: '_applyModel'
+ },
+
+ timeout: {
+ check: 'Number',
+ init: 5000,
+ apply: '_applyTimeout'
+ },
+
+ type: {
+ check: ['alert', 'hint', 'warning', 'error'],
+ nullable: true,
+ apply: '_applyType'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _timer: null,
+
+ _applyModel: function (value, old) {
+ if (old) {
+ old.removeRelatedBindings(this);
+ old.removeRelatedBindings(this.getChildControl('content'));
+ }
+ if (value) {
+ value.bind('title', this.getChildControl('content'), 'value');
+ value.bind('type', this, 'type');
+ value.bind('sticky', this, 'timeout', {
+ converter: function (value) {
+ return value ? 0 : 5000;
+ }
+ });
+ this.getChildControl('close');
+ }
+ },
+
+ _applyType: function (value) {
+ if (value) {
+ this.setDecorator(this.getAppearance() + '-' + value);
+ } else {
+ this.setDecorator(this.getAppearance());
+ }
+ },
+
+ _applyTimeout: function (value) {
+ if (this._timer) {
+ this._timer.stop();
+ if (value === 0) {
+ this._timer = null;
+ }
+ }
+ },
+
+ _onAppear: function () {
+ var timeout = this.getTimeout();
+ if (this._timer) {
+ this._timer.stop();
+ }
+ if (timeout > 0) {
+ this._timer = qx.event.Timer.once(this.close, this, timeout);
+ }
+ },
+
+ close: function () {
+ this.fireDataEvent('close', this.getModel());
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'icon':
+ control = new qx.ui.basic.Image();
+ this._addAt(control, 0);
+ break;
+
+ case 'content':
+ control = new qx.ui.basic.Label();
+ this._addAt(control,1, {flex: 1});
+ break;
+
+ case 'close':
+ control = new qx.ui.basic.Image(cv.theme.dark.Images.getIcon('close', 15));
+ control.addListener('tap', this.close, this);
+ this._addAt(control, 2);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._disposeObjects('_timer');
+ }
+});
diff --git a/source/class/cv/ui/manager/tree/FileSystem.js b/source/class/cv/ui/manager/tree/FileSystem.js
new file mode 100644
index 00000000000..32178d2fd18
--- /dev/null
+++ b/source/class/cv/ui/manager/tree/FileSystem.js
@@ -0,0 +1,277 @@
+/**
+ * Shows filesystem content in a tree.
+ */
+qx.Class.define('cv.ui.manager.tree.FileSystem', {
+ extend: qx.ui.core.Widget,
+ include: [
+ cv.ui.manager.upload.MDragUpload,
+ cv.ui.manager.control.MFileEventHandler
+ ],
+ implement: [cv.ui.manager.control.IFileEventHandler],
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (rootFolder) {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.Grow());
+ this.setRootFolder(rootFolder);
+
+ qx.event.message.Bus.subscribe('cv.manager.tree.enable', this._onEnableTree, this);
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ MIMETYPES: {
+ 'text/xml': 'xml',
+ 'application/xml': 'xml',
+ 'text/javascript': 'js',
+ 'application/x-httpd-php': 'php',
+ 'text/css': 'css',
+ 'image/png': 'png',
+ 'image/svg+xml': 'svg',
+ 'text/plain': ''
+ },
+
+ getMimetypeFromSuffix: function (suffix) {
+ return Object.keys(this.MIMETYPES).find(function (mime) {
+ return this.MIMETYPES[mime] === suffix;
+ }, this);
+ },
+
+ isAccepted: function (mimetype) {
+ return this.MIMETYPES.hasOwnProperty(mimetype);
+ }
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ 'changeSelection': 'qx.event.type.Data'
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ // appearance: {
+ // refine: true,
+ // init: 'cv-filesystem'
+ // },
+
+ rootFolder: {
+ check: 'cv.ui.manager.model.FileItem',
+ apply: '_applyRootFolder'
+ },
+
+ selectedNode: {
+ check: 'cv.ui.manager.model.FileItem',
+ apply: '_applySelectedNode',
+ nullable: true
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __selectionTimer: null,
+ __doubleTapWaitingTime: 500,
+ __ignoreSelectionChange: false,
+ _replacementManager: null,
+
+ _handleFileEvent: function (ev) {
+ var data = ev.getData();
+ switch (data.action) {
+ case 'moved':
+ case 'added':
+ case 'deleted':
+ case 'restored':
+ case 'uploaded':
+ this.reload();
+ break;
+ }
+ },
+
+ reload: function () {
+ var root = this.getChildControl('tree').getModel();
+ root.reload(function () {
+ this.getChildControl('tree').refresh();
+ root.setOpen(true);
+ }, this);
+ },
+
+ refresh: function () {
+ this.getChildControl('tree').refresh();
+ },
+
+ _applyRootFolder: function (value) {
+ if (value) {
+ var tree = this.getChildControl('tree');
+ tree.setModel(value);
+ value.load(function () {
+ tree.setHideRoot(true);
+ }, this);
+ }
+ },
+
+ _applySelectedNode: function (value) {
+ var tree = this.getChildControl('tree');
+ var contextMenu = cv.ui.manager.contextmenu.GlobalFileItem.getInstance();
+ contextMenu.configure(value);
+ if (value) {
+ tree.setContextMenu(contextMenu);
+ }
+ },
+
+ setSelection : function (node) {
+ this.getChildControl('tree').getSelection().replace([node]);
+ },
+
+ _onDblTapTreeSelection: function () {
+ var sel = this.getSelectedNode();
+ if (sel) {
+ if (this.__selectionTimer) {
+ this.__selectionTimer.stop();
+ }
+ // only files show a different behaviour when double-clicked (permanent vs. preview mode)
+ if (sel.getType() === 'file') {
+ this.fireDataEvent('changeSelection', {
+ 'node': sel,
+ 'mode': 'dbltap'
+ });
+ }
+ }
+ },
+
+ _onChangeTreeSelection: function () {
+ if (this.__selectionTimer) {
+ this.__selectionTimer.stop();
+ }
+ if (this.__ignoreSelectionChange === true) {
+ return;
+ }
+ var tree = this.getChildControl('tree');
+ var sel = tree.getSelection();
+ if (sel.length > 0) {
+ var node = sel.getItem(0);
+ this.setSelectedNode(node);
+ // wait for double tap
+ if (node.getType() === 'file') {
+ this.__selectionTimer = qx.event.Timer.once(function () {
+ this.fireDataEvent('changeSelection', {
+ 'node': this.getSelectedNode(),
+ 'mode': 'tap'
+ });
+ this.__selectionTimer = null;
+ }, this, this.__doubleTapWaitingTime);
+ } else {
+ this.fireDataEvent('changeSelection', {
+ 'node': node,
+ 'mode': 'tap'
+ });
+ }
+ } else {
+ tree.resetContextMenu();
+ this.resetSelectedNode();
+ }
+ },
+
+ _onFsItemRightClick: function (ev) {
+ var tree = this.getChildControl('tree');
+ var widget = ev.getTarget();
+ if (widget instanceof cv.ui.manager.tree.VirtualFsItem) {
+ var node = widget.getModel();
+ if (node) {
+ this.__ignoreSelectionChange = true;
+ tree.getSelection().replace([node]);
+ this.setSelectedNode(node);
+ this.fireDataEvent('changeSelection', {
+ 'node': node,
+ 'mode': 'contextmenu'
+ });
+ this.__ignoreSelectionChange = false;
+ }
+ }
+ },
+
+ /**
+ * Handle message on 'cv.manager.tree.enable' topic.
+ * @param ev {Event}
+ * @protected
+ */
+ _onEnableTree: function (ev) {
+ this.getChildControl('tree').setEnabled(ev.getData());
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'tree':
+ control = new qx.ui.tree.VirtualTree(null, 'name', 'children');
+ control.set({
+ selectionMode: 'single',
+ minWidth: 250
+ });
+ cv.ui.manager.model.Preferences.getInstance().bind('quickPreview', control, 'openMode', {
+ converter: function (value) {
+ return value ? 'tap' : 'dbltap';
+ }
+ });
+ control.setDelegate({
+ createItem: function () {
+ var item = new cv.ui.manager.tree.VirtualFsItem();
+ item.addListener('dbltap', this._onDblTapTreeSelection, this);
+ item.addListener('contextmenu', this._onFsItemRightClick, this);
+ return item;
+ }.bind(this),
+
+ // Bind properties from the item to the tree-widget and vice versa
+ bindItem : function(controller, item, index) {
+ controller.bindProperty("", "model", null, item, index);
+ controller.bindPropertyReverse("open", "open", null, item, index);
+ controller.bindProperty("open", "open", null, item, index);
+ controller.bindProperty("readable", "enabled", null, item, index);
+ controller.bindProperty("icon", "icon", null, item, index);
+ controller.bindProperty("editing", "editing", null, item, index);
+ }
+ });
+ control.getSelection().addListener("change", this._onChangeTreeSelection, this);
+ this._add(control);
+ break;
+ }
+
+ if (!control) {
+ control = this._createMDragUploadChildControlImpl(id);
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ qx.event.message.Bus.unsubscribe('cv.manager.tree.enable', this._onEnableTree, this);
+
+ this._disposeObjects('_dateFormat', '_timeFormat', '_replacementManager');
+ }
+});
diff --git a/source/class/cv/ui/manager/tree/VirtualFsItem.js b/source/class/cv/ui/manager/tree/VirtualFsItem.js
new file mode 100644
index 00000000000..360a07e84cc
--- /dev/null
+++ b/source/class/cv/ui/manager/tree/VirtualFsItem.js
@@ -0,0 +1,166 @@
+/**
+ * Widget for filesystem items in a virtual tree.
+ */
+qx.Class.define('cv.ui.manager.tree.VirtualFsItem', {
+ extend: qx.ui.tree.VirtualTreeItem,
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'fs-tree-item'
+ },
+
+ editing: {
+ check: 'Boolean',
+ init: false,
+ apply: '_applyEditing'
+ },
+
+ name: {
+ check: 'String',
+ init: '',
+ event: 'changeName'
+ },
+
+ temporary: {
+ check: 'Boolean',
+ init: false,
+ apply: '_applyTemporary'
+ },
+
+ status: {
+ check: ['valid', 'error'],
+ nullable: true,
+ apply: '_applyStatus'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+
+ _applyEditing: function (value, old) {
+ if (value !== old) {
+ var field = this.getChildControl('edit');
+ if (value) {
+ field.setValue(this.getLabel());
+ field.show();
+ qx.event.message.Bus.dispatchByName('cv.manager.tree.enable', false);
+ } else {
+ qx.event.message.Bus.dispatchByName('cv.manager.tree.enable', true);
+ field.exclude();
+ // save new name
+ if (field.getValue() !== this.getName()) {
+ cv.ui.manager.control.FileController.getInstance().rename(this.getModel(), field.getValue());
+ }
+ }
+ }
+ },
+ _applyTemporary: function (value) {
+ if (value) {
+ this.addState('temporary');
+ } else {
+ this.removeState('temporary');
+ }
+ },
+
+ // overridden
+ _applyModel : function(value, old) {
+ this.base(arguments, value, old);
+ if (old) {
+ old.removeRelatedBindings(this);
+ }
+ if (value) {
+ if (value.isTrash()) {
+ this.setLabel(this.tr('Trash'));
+ } else {
+ value.bind('name', this, 'label');
+ value.bind('valid', this, 'status', {
+ converter: function (value) {
+ return value === true ? 'valid' : 'error';
+ }
+ });
+ }
+ value.bind('temporary', this, 'temporary');
+ if (value.getType() === 'dir') {
+ this.setDroppable(true);
+ this.addListener('drop', this._onDrop, this);
+ } else {
+ this.setDroppable(false);
+ this.removeListener('drop', this._onDrop, this);
+ }
+ }
+ },
+
+ _applyStatus: function (value) {
+ var control = this.getChildControl('icon');
+ if (value) {
+ switch (value) {
+ case 'valid':
+ control.removeState('error');
+ break;
+
+ case 'error':
+ control.addState('error');
+ break;
+ }
+ }
+ },
+
+ /**
+ * Handle drop events
+ * @param ev {Event}
+ * @private
+ */
+ _onDrop: function (ev) {
+ console.log(ev.getRelatedTarget());
+ },
+
+ __cancelEditing: function () {
+ this.getChildControl('edit').setValue(this.getName());
+ this.setEditing(false);
+ },
+
+ _onKeypress: function (ev) {
+ if (ev.getKeyIdentifier() === 'Enter') {
+ this.setEditing(false);
+ } else if (ev.getKeyIdentifier() === 'Esc') {
+ this.__cancelEditing();
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'edit':
+ control = new qx.ui.form.TextField();
+ control.addListener('keypress', this._onKeypress, this);
+ control.exclude();
+ control.addListener('changeVisibility', function (ev) {
+ if (ev.getData() === 'visible') {
+ this.getChildControl('label').exclude();
+ } else {
+ this.getChildControl('label').show();
+ }
+ }, this);
+ control.addListener('blur', function () {
+ this.setEditing(false);
+ }, this);
+ this._add(control);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/upload/MDragUpload.js b/source/class/cv/ui/manager/upload/MDragUpload.js
new file mode 100644
index 00000000000..28af8a50174
--- /dev/null
+++ b/source/class/cv/ui/manager/upload/MDragUpload.js
@@ -0,0 +1,293 @@
+/**
+ * Add upload via drag&drop feature to this widget. The including widget must have a
+ * "upload-dropbox" childcontrol or add
+ *
+ * if (!control) {
+ control = this._createMDragUploadChildControlImpl(id);
+ }
+ *
+ * to their own _createChildControlImpl method
+ */
+qx.Mixin.define("cv.ui.manager.upload.MDragUpload", {
+
+ /*
+ *****************************************************************************
+ CONSTRUCTOR
+ *****************************************************************************
+ */
+ construct : function() {
+ this.setDroppable(true);
+ if (this.getBounds()) {
+ this._applyStartDragListeners();
+ } else {
+ this.addListenerOnce("appear", function() {
+ this._applyStartDragListeners();
+ }, this);
+ }
+ var layout = this._getLayout();
+ if (!(layout instanceof qx.ui.layout.Grow) && !(layout instanceof qx.ui.layout.Canvas)) {
+ this.addListener('resize', this.__syncBounds, this);
+ }
+ },
+
+ /*
+ *****************************************************************************
+ PROPERTIES
+ *****************************************************************************
+ */
+ properties : {
+ uploadMode: {
+ check: "Boolean",
+ init: false,
+ apply: "__applyUploadMode"
+ },
+
+ uploadHint: {
+ check: "String",
+ init: ""
+ }
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ /**
+ * Handles HTML5 drop events (dropping external files on dom element)
+ * @param ev {Event}
+ */
+ onHtml5Drop : function (ev) {
+ ev.preventDefault();
+ this.getFiles(ev).forEach(this.uploadFile, this);
+ },
+
+ /**
+ * Uploads the dropped file to the correct folder:
+ * - config files to the resources/config folder
+ * - accepted media files to the resources/config/media folder
+ * @param file {File}
+ * @param replaceFile {cv.ui.manager.model.FileItem?} optional, if set this files content gets replaced with the uploaded ones
+ */
+ uploadFile: function (file, replaceFile) {
+ var isConfig = cv.ui.manager.model.FileItem.isConfigFile(file.name);
+
+ var folder;
+ if (isConfig) {
+ // upload to root folder
+ folder = new cv.ui.manager.model.FileItem('.');
+ } else if (cv.ui.manager.tree.FileSystem.isAccepted(file.type)) {
+ // upload to media folder
+ folder = new cv.ui.manager.model.FileItem('media');
+ }
+ if (folder) {
+ folder.set({
+ type: 'dir'
+ });
+ var manager = new cv.ui.manager.upload.UploadMgr();
+ if (replaceFile) {
+ manager.replaceFile(file, replaceFile);
+ } else {
+ manager.setFolder(folder);
+ manager.uploadFile(file);
+ }
+ }
+ },
+
+ hasDroppableFile: function (ev) {
+ return this.getFiles(ev).length > 0;
+ },
+
+ /**
+ * Extracts acceptable files from event
+ * @param ev {Event}
+ * @private
+ */
+ getFiles: function (ev) {
+ var files = [];
+ var i, l, file;
+
+ if (ev.dataTransfer.items) {
+ // Use DataTransferItemList interface to access the file(s)
+ for (i = 0, l = ev.dataTransfer.items.length; i < l; i++) {
+ // If dropped items aren't files, reject them
+ var item = ev.dataTransfer.items[i];
+ if (item.kind === 'file' && cv.ui.manager.tree.FileSystem.isAccepted(item.type)) {
+ file = item.getAsFile();
+ files.push(file);
+ }
+ }
+ } else {
+ for (i = 0, l = ev.dataTransfer.files.length; i < l; i++) {
+ file = ev.dataTransfer.files[i];
+ if (cv.ui.manager.tree.FileSystem.isAccepted(file.type)) {
+ files.push(file);
+ }
+ }
+ }
+ return files;
+ }
+ },
+
+ /*
+ *****************************************************************************
+ MEMBERS
+ *****************************************************************************
+ */
+ members : {
+ __hasEmptyInfo: null,
+ _boundOnStop: null,
+
+ __syncBounds: function () {
+ var bounds = this.getBounds();
+ this.getChildControl('upload-overlay').setUserBounds(bounds.left, bounds.top, bounds.width, bounds.height);
+ this.getChildControl('upload-dropbox').setUserBounds(bounds.left, bounds.top, bounds.width, bounds.height);
+ },
+
+ // overridden
+ _createMDragUploadChildControlImpl: function(id) {
+ var control;
+ var bounds = this.getBounds();
+ var layout = this._getLayout();
+
+ switch(id) {
+ case "upload-overlay":
+ control = new qx.ui.container.Composite();
+ control.setZIndex(1000000);
+ control.exclude();
+ if (layout instanceof qx.ui.layout.Canvas) {
+ this._add(control, {edge: 0});
+ } else if (!(this._getLayout() instanceof qx.ui.layout.Grow) && bounds) {
+ control.setUserBounds(bounds.left, bounds.top, bounds.width, bounds.height);
+ }
+ this._add(control);
+ this.getChildControl("upload-dropbox").bind("visibility", control, "visibility");
+ break;
+
+ case "upload-dropbox":
+ control = new qx.ui.container.Composite(new qx.ui.layout.Grow());
+ control.setBackgroundColor('rgba(32, 32, 32, 0.9)');
+ control.setZIndex(1000);
+ var dropBox = new qx.ui.basic.Atom(this.getUploadHint(), cv.theme.dark.Images.getIcon('upload', 32));
+ dropBox.set({
+ iconPosition: 'top',
+ rich: true,
+ center: true
+ });
+ // control.bind('width', dropBox, 'maxWidth');
+ dropBox.getChildControl('label').setWrap(true);
+ control.setAnonymous(true);
+ control.add(dropBox);
+ control.exclude();
+ if (layout instanceof qx.ui.layout.Canvas) {
+ this._add(control, {edge: 0});
+ } else if (!(this._getLayout() instanceof qx.ui.layout.Grow) && bounds) {
+ control.setUserBounds(bounds.left, bounds.top, bounds.width, bounds.height);
+ }
+ this._add(control);
+ break;
+ }
+ return control;
+ },
+
+ _onStopDragging: function(ev) {
+ ev.preventDefault();
+ this.setUploadMode(false);
+ document.removeEventListener("dragend", this._boundOnStop, false);
+ },
+
+ /**
+ * Apply dragover/-leave listeners to the dashboard to recognize File uploads via Drag&Drop
+ */
+ _applyStartDragListeners: function() {
+ // add the start listener to this widget
+ this.getContentElement().getDomElement().addEventListener("dragenter", function(ev) {
+ // ev.preventDefault();
+ if (this._isDroppable) {
+ if (this._isDroppable(ev.dataTransfer.items)) {
+ // we have something to drop
+ this.setUploadMode(true);
+ }
+ } else if (cv.ui.manager.upload.MDragUpload.hasDroppableFile(ev)) {
+ // we have something to drop
+ this.setUploadMode(true);
+ }
+ }.bind(this), false);
+ if (this.getChildControl("upload-overlay").getBounds()) {
+ this._applyDragListeners();
+ } else {
+ this.getChildControl("upload-overlay").addListenerOnce("appear", function() {
+ this._applyDragListeners();
+ }, this);
+ }
+
+ },
+
+ /**
+ * Apply dragover/-leave listeners to the dashboard to recognize File uploads via Drag&Drop
+ */
+ _applyDragListeners: function() {
+ var element = this.getChildControl("upload-overlay").getContentElement().getDomElement();
+ if (!element) {
+ var lid = this.getChildControl("upload-overlay").addListener('visibility', function (ev) {
+ if (ev.getData() === 'visible') {
+ this._applyDragListeners();
+ this.getChildControl("upload-overlay").removeListenerById(lid);
+ }
+ }, this);
+ return;
+ }
+ element.addEventListener("dragexit", function() {
+ this.setUploadMode(false);
+ }.bind(this), false);
+
+ element.addEventListener("dragover", function (ev) {
+ ev.preventDefault();
+ var uploadable = false;
+ if (this._isDroppable) {
+ uploadable = this._isDroppable(ev.dataTransfer.items);
+ } else if (cv.ui.manager.upload.MDragUpload.hasDroppableFile(ev)) {
+ uploadable = true;
+ }
+ this.setUploadMode(uploadable);
+ }.bind(this), false);
+
+ this._boundOnStop = this._onStopDragging.bind(this);
+
+ element.addEventListener("dragleave", this._boundOnStop, false);
+ element.addEventListener("dragend", function() {
+ this.setUploadMode(false);
+ }.bind(this), false);
+
+ document.addEventListener("dragend", this._boundOnStop, false);
+
+ if (this._onDrop) {
+ element.addEventListener("drop", this._onDrop.bind(this), false);
+ } else {
+ element.addEventListener("drop", function (ev) {
+ cv.ui.manager.upload.MDragUpload.onHtml5Drop(ev);
+ this._onStopDragging(ev);
+ }.bind(this), false);
+ }
+ },
+
+ // property apply
+ __applyUploadMode: function(value) {
+ if (value === true) {
+ this.getChildControl("upload-dropbox").show();
+ if (this.hasChildControl("empty-info") && this.getChildControl("empty-info").isVisible()) {
+ this.getChildControl("empty-info").exclude();
+ this.__hasEmptyInfo = true;
+ } else {
+ this.__hasEmptyInfo = false;
+ }
+ } else {
+ this.getChildControl("upload-dropbox").exclude();
+ if (this.__hasEmptyInfo === true) {
+ this.getChildControl("empty-info").show();
+ }
+ }
+ }
+ }
+});
\ No newline at end of file
diff --git a/source/class/cv/ui/manager/upload/UploadMgr.js b/source/class/cv/ui/manager/upload/UploadMgr.js
new file mode 100644
index 00000000000..914f1fc1394
--- /dev/null
+++ b/source/class/cv/ui/manager/upload/UploadMgr.js
@@ -0,0 +1,203 @@
+/**
+ * Extend {com.zenesis.qx.upload.UploadMgr} to allow files to e uploaded via HTML5 drop
+ */
+qx.Class.define("cv.ui.manager.upload.UploadMgr", {
+ extend : com.zenesis.qx.upload.UploadMgr,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (widget, uploadUrl) {
+ this.base(arguments, widget, uploadUrl);
+ this._init();
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ LAST_ID: 0
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ multiple: {
+ refine: true,
+ init: false
+ },
+
+ folder: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_updateUploadUrl'
+ },
+
+ filename: {
+ check: 'String',
+ nullable: true
+ },
+
+ force: {
+ check: 'Boolean',
+ init: false
+ }
+ },
+
+ members : {
+
+ _updateUploadUrl: function () {
+ var folder = this.getFolder();
+ var path = folder ? folder.getFullPath() : '.';
+ var url = cv.io.rest.Client.BASE_URL + '/fs?type=file&path=' + path;
+ this.setUploadUrl(url);
+ },
+
+ _init: function () {
+ this.addListener("addFile", function(evt) {
+ var file = evt.getData();
+ var filename = this.getFilename();
+ if (filename) {
+ file.setParam('filename', filename);
+ }
+ if (this.isForce()) {
+ file.setParam('force', true);
+ }
+ var progressListenerId = file.addListener("changeProgress", function (evt) {
+ var file = evt.getTarget();
+ var uploadedSize = evt.getData();
+
+ this.debug("Upload " + file.getFilename() + ": " +
+ uploadedSize + " / " + file.getSize() + " - " +
+ Math.round(uploadedSize / file.getSize() * 100) + "%");
+ }, this);
+
+ var stateListenerId = file.addListener("changeState", function(evt) {
+ var state = evt.getData();
+ var file = evt.getTarget();
+
+ if (state === "uploading") {
+ this.debug(file.getFilename() + " (Uploading...)");
+ } else if (state === "uploaded") {
+ this.debug(file.getFilename() + " (Complete)");
+ if (file.getStatus() !== 200) {
+ // something went wrong
+ switch (file.getStatus()) {
+ case 406:
+ dialog.Dialog.confirm(qx.locale.Manager.tr('This file already exists, do you want to replace it?'), function (confimed) {
+ if (confimed) {
+ this.forceUpload(file);
+ }
+ }, this, qx.locale.Manager.tr('File already exists'));
+ break;
+
+ case 403:
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Uploading this file is not allowed here.'));
+ break;
+
+ default:
+ var err = file.getResponse();
+ try {
+ err = qx.lang.Json.parse(err).message;
+ } catch (e) {
+ }
+ this.error(err);
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('File upload stopped with an error: %1', err));
+ break;
+ }
+ } else {
+ cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('File has been uploaded'));
+ qx.event.message.Bus.dispatchByName('cv.manager.file', {
+ action: 'uploaded',
+ path: this.getFolder().getFullPath() + '/' + filename
+ });
+ }
+ }
+ else if (state === "cancelled") {
+ this.debug(file.getFilename() + " (Cancelled)");
+ }
+ // Remove the listeners
+ if (state === "uploaded" || state === "cancelled") {
+ file.removeListenerById(progressListenerId);
+ file.removeListenerById(stateListenerId);
+ }
+ }, this);
+ }, this);
+ },
+
+ /**
+ * Allocates a unique ID
+ *
+ * @return {Number}
+ */
+ _getUniqueFileId: function() {
+ return ++cv.ui.manager.upload.UploadMgr.LAST_ID;
+ },
+
+ /**
+ * Re-upload a file in forced mode
+ * @param file {com.zenesis.qx.upload.File}
+ */
+ forceUpload: function (file) {
+ this.setForce(true);
+ var newFile = new com.zenesis.qx.upload.File(file.getBrowserObject(), file.getFilename(), file.getId());
+ newFile.set({
+ size: file.getSize(),
+ uploadWidget: file.getUploadWidget()
+ });
+ newFile.setParam('force', true);
+ this.getUploadHandler()._addFile(newFile);
+ if (this.getAutoUpload()) {
+ this.getUploadHandler().beginUploads();
+ }
+ },
+
+ /**
+ * Upload file directly to the backend
+ *
+ * @param bomFile {File}
+ */
+ uploadFile: function(bomFile) {
+ var id = "upload-" + this._getUniqueFileId();
+ var filename = typeof bomFile.name !== "undefined" ? bomFile.name : bomFile.fileName;
+ var file = new com.zenesis.qx.upload.File(bomFile, filename, id);
+ var fileSize = typeof bomFile.size !== "undefined" ? bomFile.size : bomFile.fileSize;
+ file.setSize(fileSize);
+ file.setUploadWidget(new com.zenesis.qx.upload.UploadButton());
+
+ this.getUploadHandler()._addFile(file);
+ if (this.getAutoUpload()) {
+ this.getUploadHandler().beginUploads();
+ }
+ },
+
+ /**
+ * Replace content of existing file with the upload
+ * @param bomFile {File}
+ * @param replacedFile {cv.ui.manager.model.FileItem}
+ */
+ replaceFile: function(bomFile, replacedFile) {
+ this.setFolder(replacedFile.getParent());
+ var id = "upload-" + this._getUniqueFileId();
+ var filename = replacedFile.getName();
+ var file = new com.zenesis.qx.upload.File(bomFile, filename, id);
+ file.setParam('force', true);
+ file.setParam('filename', filename);
+ var fileSize = typeof bomFile.size !== "undefined" ? bomFile.size : bomFile.fileSize;
+ file.setSize(fileSize);
+ file.setUploadWidget(new com.zenesis.qx.upload.UploadButton());
+
+ this.getUploadHandler()._addFile(file);
+ if (this.getAutoUpload()) {
+ this.getUploadHandler().beginUploads();
+ }
+ }
+ }
+});
\ No newline at end of file
diff --git a/source/class/cv/ui/manager/viewer/AbstractViewer.js b/source/class/cv/ui/manager/viewer/AbstractViewer.js
new file mode 100644
index 00000000000..cfba99278e3
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/AbstractViewer.js
@@ -0,0 +1,72 @@
+/**
+ * Abstract base class for all widgets that can display file items.
+ */
+qx.Class.define('cv.ui.manager.viewer.AbstractViewer', {
+ extend: qx.ui.core.Widget,
+ implement: [
+ cv.ui.manager.editor.IEditor,
+ cv.ui.manager.IActionHandler
+ ],
+ type: 'abstract',
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.Grow());
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ file: {
+ check: 'cv.ui.manager.model.FileItem',
+ nullable: true,
+ apply: '_applyFile'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ canHandleAction: function () {
+ return false;
+ },
+ handleAction: function () {},
+ save: function () {},
+ getCurrentContent: function () {},
+
+ _applyFile: function (file, old) {
+ // show icon for file type
+ },
+
+ // overridden
+ _createChildControlImpl : function (id) {
+ var control;
+
+ switch (id) {
+ case 'scroll':
+ control = new qx.ui.container.Scroll();
+ this._add(control);
+ break;
+
+ case 'image':
+ control = new qx.ui.basic.Atom();
+ this.getChildControl('scroll').add(control);
+ control.getChildControl('icon').addListener('resize', this._scaleImage, this);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/viewer/Config.js b/source/class/cv/ui/manager/viewer/Config.js
new file mode 100644
index 00000000000..fdd319f8e66
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/Config.js
@@ -0,0 +1,90 @@
+/**
+ * Show rendered configs.
+ */
+qx.Class.define('cv.ui.manager.viewer.Config', {
+ extend: cv.ui.manager.viewer.AbstractViewer,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._setLayout(new qx.ui.layout.Grow());
+
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'config-viewer'
+ }
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ SUPPORTED_FILES: /visu_config.*\.xml/,
+ TITLE: qx.locale.Manager.tr('Config viewer'),
+ ICON: cv.theme.dark.Images.getIcon('preview', 18)
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+
+ _applyFile: function (file, old) {
+ var control = this.getChildControl('iframe');
+ if (old && old.isConfigFile()) {
+ qx.event.message.Bus.unsubscribe(old.getBusTopic(), this._onChange, this);
+ }
+ if (file) {
+ if (file.isConfigFile()) {
+ var configName = cv.ui.manager.model.FileItem.getConfigName(file.getFullPath());
+ var url = qx.util.Uri.getAbsolute(qx.util.LibraryManager.getInstance().get('cv', 'resourceUri')+ '/..') + '?config=' + (configName || '') + '&preview=1';
+ control.setSource(url);
+ control.show();
+ qx.event.message.Bus.subscribe(file.getBusTopic(), this._onChange, this);
+ } else {
+ cv.ui.manager.snackbar.Controller.error(this.tr('%1 is no configuration file', file.getFullPath()));
+ }
+ } else {
+ control.exclude();
+ }
+ },
+
+ _onChange: function (ev) {
+ var data = ev.getData();
+ if (data.type === 'contentChanged') {
+ this.getChildControl('iframe').reload();
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'iframe':
+ control = new qx.ui.embed.Iframe();
+ control.exclude();
+ this.getChildControl('scroll').add(control);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/viewer/Folder.js b/source/class/cv/ui/manager/viewer/Folder.js
new file mode 100644
index 00000000000..3c9e8b6ed41
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/Folder.js
@@ -0,0 +1,296 @@
+/**
+ * Displays folder content in an explorer like view.
+ */
+qx.Class.define('cv.ui.manager.viewer.Folder', {
+ extend: cv.ui.manager.viewer.AbstractViewer,
+ implement: [
+ qx.ui.core.IMultiSelection,
+ qx.ui.form.IModelSelection
+ ],
+ include: [
+ qx.ui.core.MMultiSelectionHandling,
+ qx.ui.core.MRemoteChildrenHandling,
+ qx.ui.form.MModelSelection
+ ],
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this._isImageRegex = new RegExp('\.(' + cv.ui.manager.viewer.Image.SUPPORTED_FILES.join('|') + ')$');
+ this.initModel(new qx.data.Array());
+ this._setLayout(new qx.ui.layout.VBox(8));
+
+ this._newItem = new cv.ui.manager.model.FileItem('new', 'new', null).set({
+ fake: true,
+ type: 'file',
+ loaded: true,
+ icon: cv.theme.dark.Images.getIcon('upload'),
+ displayName: this.tr('Upload file'),
+ special: 'add-file'
+ });
+
+ this._debouncedOnFilter = qx.util.Function.debounce(this._onFilter, 500, false);
+ this._createChildControl('filter');
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ SUPPORTED_FILES: function isDir(item) {
+ // noinspection JSConstructorReturnsPrimitive
+ return item.getType() === 'dir';
+ },
+ TITLE: qx.locale.Manager.tr('Show folder'),
+ ICON: cv.theme.dark.Images.getIcon('folder', 18)
+ },
+
+ /*
+ ***********************************************
+ EVENTS
+ ***********************************************
+ */
+ events: {
+ /**
+ * This event is fired after a list item was added to the list. The
+ * {@link qx.event.type.Data#getData} method of the event returns the
+ * added item.
+ */
+ addItem : "qx.event.type.Data",
+
+ /**
+ * This event is fired after a list item has been removed from the list.
+ * The {@link qx.event.type.Data#getData} method of the event returns the
+ * removed item.
+ */
+ removeItem : "qx.event.type.Data"
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ model: {
+ check: 'qx.data.Array',
+ deferredInit: true
+ },
+
+ permanentFilter: {
+ check: 'Function',
+ nullable: true,
+ apply: '_onFilter'
+ },
+
+ showTextFilter: {
+ check: 'Boolean',
+ init: true,
+ apply: '_applyShowTextFilter'
+ },
+
+ labelConverter: {
+ check: 'Function',
+ nullable: true
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _controller: null,
+ _isImageRegex: null,
+ _newItem: null,
+
+ /** @type {Class} Pointer to the selection manager to use */
+ SELECTION_MANAGER : qx.ui.core.selection.ScrollArea,
+
+ _defaultLabelConverter: function (name) {
+ var parts = name.split('.');
+ if (parts.length > 1) {
+ parts.pop();
+ }
+ return parts.join('.');
+ },
+
+ _getDelegate: function () {
+ var labelConverter = this.getLabelConverter();
+ var converter = {
+ converter: labelConverter ? labelConverter : this._defaultLabelConverter
+ };
+ return {
+ createItem: function () {
+ return new cv.ui.manager.form.FileListItem();
+ },
+ configureItem: function (item) {
+ item.addListener('dbltap', this._onDblTap, this);
+ item.addListener('contextmenu', this._onFsItemRightClick, this);
+ item.setShowFileActions(true);
+ }.bind(this),
+ bindItem: function (controller, item, index) {
+ controller.bindProperty('', 'model', null, item, index);
+ controller.bindProperty('displayName', 'label', converter, item, index);
+ controller.bindProperty('icon', 'icon', {
+ converter: function (source, file) {
+ if (file.getType() === 'file' && this._isImageRegex.test(file.getName())) {
+ // use the image as icon
+ return file.getServerPath();
+ } else {
+ // remove size from icon source
+ var parts = source.split('/');
+ if (parts.length === 3) {
+ parts.pop();
+ }
+ return parts.join('/');
+ }
+ }.bind(this)
+ }, item, index);
+ }.bind(this)
+ };
+ },
+
+ _onFsItemRightClick: function (ev) {
+ var file = ev.getTarget().getModel();
+ if (file.getSpecial() === 'add-file') {
+ ev.preventDefault();
+ ev.stopPropagation();
+ return;
+ }
+ var menu = cv.ui.manager.contextmenu.GlobalFileItem.getInstance();
+ menu.configure(file);
+ ev.getTarget().setContextMenu(menu);
+ },
+
+ _onDblTap: function (ev) {
+ var file = ev.getTarget().getModel();
+ if (file.getSpecial() === 'add-file') {
+ // Select file for upload
+
+ } else {
+ qx.event.message.Bus.dispatchByName('cv.manager.open', ev.getTarget().getModel());
+ }
+ },
+
+ _applyFile: function () {
+ var container = this.getChildControl('list');
+ if (!this._controller) {
+ this._controller = new qx.data.controller.List(null, container);
+ this._controller.setDelegate(this._getDelegate());
+ }
+ var file = this.getFile();
+ file.bind('children', this, 'model');
+ var model = this.getModel();
+ this._newItem.setParent(file);
+ model.addListener('change',function () {
+ if (this.getChildControl('filter').getValue() || this.getPermanentFilter()) {
+ this._onFilter();
+ } else {
+ this._controller.setModel(model);
+ }
+ }, this);
+ file.load();
+ },
+
+ _applyShowTextFilter: function (value) {
+ this.getChildControl('filter').setVisibility(value ? 'visible' : 'excluded');
+ },
+
+ _onFilter: function () {
+ if (this._controller) {
+ var filterString = this.getChildControl('filter').getValue();
+ var filterFunction = this.getPermanentFilter();
+ var filtered = this.getModel().filter(function (file) {
+ return (!filterFunction || filterFunction(file)) && (!filterString || file.getName().includes(filterString));
+ });
+ this._controller.setModel(filtered);
+ }
+ },
+
+ getChildrenContainer: function () {
+ return this.getChildControl('list');
+ },
+
+ /**
+ * Handle child widget adds on the content pane
+ *
+ * @param e {qx.event.type.Data} the event instance
+ */
+ _onAddChild : function(e) {
+ this.fireDataEvent("addItem", e.getData());
+ },
+
+ /**
+ * Handle child widget removes on the content pane
+ *
+ * @param e {qx.event.type.Data} the event instance
+ */
+ _onRemoveChild : function(e) {
+ this.fireDataEvent("removeItem", e.getData());
+ },
+
+ _onFileEvent: function (ev) {
+ var data = ev.getData();
+ switch (data.action) {
+ case 'deleted':
+ break;
+ }
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+
+ case 'filter':
+ control = new qx.ui.form.TextField();
+ control.set({
+ placeholder: this.tr('Filter by name...'),
+ liveUpdate: true,
+ margin: 8
+ });
+ if (!this.isShowTextFilter()) {
+ control.exclude();
+ }
+ control.addListener('changeValue', this._debouncedOnFilter, this);
+ this._addAt(control, 0);
+ break;
+
+ case 'scroll':
+ control = new qx.ui.container.Scroll();
+ this._addAt(control, 1, {flex: 1});
+ break;
+
+ case 'list':
+ control = new qx.ui.container.Composite(new qx.ui.layout.Flow(8, 8));
+
+ // Used to fire item add/remove events
+ control.addListener("addChildWidget", this._onAddChild, this);
+ control.addListener("removeChildWidget", this._onRemoveChild, this);
+ this.getChildControl('scroll').add(control);
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._disposeObjects('_controller');
+ this._isImageRegex = null;
+ }
+});
diff --git a/source/class/cv/ui/manager/viewer/Icons.js b/source/class/cv/ui/manager/viewer/Icons.js
new file mode 100644
index 00000000000..cd3ae8c3ab9
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/Icons.js
@@ -0,0 +1,65 @@
+/**
+ * Shows the available icons.
+ */
+qx.Class.define('cv.ui.manager.viewer.Icons', {
+ extend: cv.ui.manager.viewer.Folder,
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ SUPPORTED_FILES: /^CometVisu-Icons$/,
+ TITLE: qx.locale.Manager.tr('Show icons'),
+ ICON: cv.theme.dark.Images.getIcon('icons', 18)
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _getDelegate: function () {
+ return {
+ createItem: function () {
+ return new cv.ui.manager.core.IconAtom();
+ },
+
+ bindItem: function (controller, item, index) {
+ controller.bindProperty('', 'label', null, item, index);
+ }
+ };
+ },
+
+ _onFilter: function () {
+ var filterString = this.getChildControl('filter').getValue();
+ var filtered = this.getModel().filter(function (name) {
+ return name.includes(filterString);
+ });
+ this._controller.setModel(filtered);
+ },
+
+ _applyFile: function() {
+ var container = this.getChildControl('list');
+ if (!this._controller) {
+ this._controller = new qx.data.controller.List(null, container);
+ this._controller.setDelegate(this._getDelegate());
+ }
+ var model = this.getModel();
+ // as the file is just a fake file, we do not really care about it
+ Object.keys(cv.IconConfig.DB).filter(function (name) {
+ var entry = cv.IconConfig.DB[name];
+ return entry['*'] && entry['*']['*'] && qx.lang.Type.isFunction(entry['*']['*']['*']);
+ }).forEach(function (name) {
+ model.push(name);
+ }, this);
+ if (this.getChildControl('filter').getValue() || this.getPermanentFilter()) {
+ this._onFilter();
+ } else {
+ this._controller.setModel(model);
+ }
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/viewer/Image.js b/source/class/cv/ui/manager/viewer/Image.js
new file mode 100644
index 00000000000..ed94e2a959d
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/Image.js
@@ -0,0 +1,111 @@
+/**
+ * Show images.
+ */
+qx.Class.define('cv.ui.manager.viewer.Image', {
+ extend: cv.ui.manager.viewer.AbstractViewer,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function () {
+ this.base(arguments);
+ this.addListener('resize', this._scaleImage, this);
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'image-viewer'
+ }
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ SUPPORTED_FILES: ['jpg', 'jpeg', 'png', 'gif', 'svg'],
+ TITLE: qx.locale.Manager.tr('Show image'),
+ ICON: cv.theme.dark.Images.getIcon('image', 18),
+
+ /**
+ * Returns size information for images
+ * @param source {String} path to image
+ * @returns {{width: *, aspectRatio: number, height: *}|any | ({aspectRatio: number} & Map)}
+ */
+ getImageData: function (source) {
+ var data = qx.util.ResourceManager.getInstance().getData(source);
+ if (data) {
+ return {
+ width: data[0],
+ height: data[1],
+ aspectRatio: data[0] / data[1]
+ };
+ } else {
+ data = qx.io.ImageLoader.getSize(source);
+ if (data && data.width && data.height) {
+ return Object.assign({
+ aspectRatio: data.width / data.height
+ }, data);
+ }
+ }
+ return null;
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _applyFile: function (file) {
+ var control = this.getChildControl('image');
+ if (file) {
+ control.setIcon(file.getServerPath());
+ control.setLabel(file.getFullPath());
+ if (!cv.ui.manager.viewer.Image.getImageData(file.getServerPath())) {
+ control.getChildControl('icon').addListenerOnce('loaded', this._scaleImage, this);
+ } else {
+ this._scaleImage();
+ }
+ } else {
+ control.resetIcon();
+ control.resetLabel();
+ }
+ },
+
+ _scaleImage: function () {
+ var bounds = this.getBounds();
+ if (!bounds) {
+ this.addListenerOnce('appear', this._scaleImage, this);
+ return;
+ }
+ var icon = this.getChildControl('image').getChildControl('icon');
+ var data = cv.ui.manager.viewer.Image.getImageData(this.getFile().getServerPath());
+ var paddingX = 10;
+ var paddingY = 20;
+ var availableHeight = bounds.height - paddingY * 2;
+ var availableWidth = bounds.width - paddingX * 2;
+ var width = availableWidth;
+ var height = Math.round(1 / data.aspectRatio * width);
+ if (height > availableHeight) {
+ height = availableHeight;
+ width = Math.round(data.aspectRatio * availableHeight);
+ }
+ icon.set({
+ width: width,
+ height: height,
+ scale: true
+ });
+ }
+ }
+});
diff --git a/source/class/cv/ui/manager/viewer/SvgIcon.js b/source/class/cv/ui/manager/viewer/SvgIcon.js
new file mode 100644
index 00000000000..f04bd7d44c1
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/SvgIcon.js
@@ -0,0 +1,82 @@
+/**
+ * QX version of the svg use icon way of displaying the KNF-UF icons.
+ */
+qx.Class.define('cv.ui.manager.viewer.SvgIcon', {
+ extend: qx.ui.core.Widget,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (name) {
+ this.base(arguments);
+ if (name) {
+ this.setName(name);
+ }
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ name: {
+ check: 'String',
+ nullable: true,
+ apply: '_applyName'
+ },
+
+ appearance: {
+ refine: true,
+ init: 'cv-svg-icon'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ __spriteUrl: null,
+ __useElement: null,
+
+ _applyName: function (value) {
+ if (value) {
+ if (!this.__spriteUrl) {
+ this.__spriteUrl = qx.util.ResourceManager.getInstance().toUri('icon/knx-uf-iconset.svg');
+ }
+ if (!this.__useElement.getDomElement()) {
+ this.__useElement.addListenerOnce('appear', function () {
+ this._applyName(value);
+ }, this);
+ return;
+ }
+ // qx.xml.Element.setAttributeNS(document, this.__useElement.getDomElement(), 'http://www.w3.org/1999/xlink', 'xlink:href', this.__spriteUrl + '#kuf-' + value);
+ this.__useElement.getDomElement().setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', this.__spriteUrl + '#kuf-' + value);
+ } else {
+ this.__useElement.removeAttribute('xlink:href');
+ }
+ },
+
+ // overridden
+ _createContentElement : function() {
+ var svgElem = new cv.svg.Element('svg');
+ this.__useElement = new cv.svg.Element('use');
+ svgElem.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
+ svgElem.add(this.__useElement);
+ return svgElem;
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this.__useElement = null;
+ }
+});
diff --git a/source/class/cv/util/ConfigLoader.js b/source/class/cv/util/ConfigLoader.js
index c7f212c5db8..dc824c16288 100644
--- a/source/class/cv/util/ConfigLoader.js
+++ b/source/class/cv/util/ConfigLoader.js
@@ -81,6 +81,9 @@ qx.Class.define('cv.util.ConfigLoader', {
else {
if (req.getResponseHeader("X-CometVisu-Backend-LoginUrl")) {
cv.Config.backendUrl = req.getResponseHeader("X-CometVisu-Backend-LoginUrl");
+ if (!cv.Config.backendUrl.endsWith('/')) {
+ cv.Config.backendUrl += '/';
+ }
}
if (req.getResponseHeader("X-CometVisu-Backend-Name")) {
cv.Config.backend = req.getResponseHeader("X-CometVisu-Backend-Name");
diff --git a/source/editor/dataproviders/DataProviderConfig.js b/source/editor/dataproviders/DataProviderConfig.js
index e44cd877d07..0f70a107ada 100644
--- a/source/editor/dataproviders/DataProviderConfig.js
+++ b/source/editor/dataproviders/DataProviderConfig.js
@@ -29,10 +29,14 @@
* @since 2012-10-17
*/
+var baseRestPath = 'http://localhost:3000';
+
+var cvProvider = parent && parent.cv ? parent.cv.ui.manager.editor.data.Provider.getInstance() : null;
+
var DataProviderConfig = {
'address': {
'_nodeValue': {
- url: 'editor/dataproviders/list_all_addresses.php',
+ url: cvProvider ? baseRestPath + '/data/addresses' : 'editor/dataproviders/list_all_addresses.php',
cache: true,
userInputAllowed: true,
grouped: true,
@@ -40,7 +44,7 @@ var DataProviderConfig = {
},
'rrd': {
'_nodeValue': {
- url: 'editor/dataproviders/list_all_rrds.php',
+ url: cvProvider ? baseRestPath + '/data/rrds' : 'editor/dataproviders/list_all_rrds.php',
cache: true,
userInputAllowed: true,
},
@@ -71,21 +75,27 @@ var DataProviderConfig = {
},
'icon': {
'name': {
- url: 'editor/dataproviders/list_all_icons.php',
+ url: cvProvider ? null : 'editor/dataproviders/list_all_icons.php',
+ live: cvProvider ? function () {
+ return cvProvider.getIcons('dp');
+ } : null,
cache: true,
userInputAllowed: false,
},
},
'plugin': {
'name': {
- url: 'editor/dataproviders/list_all_plugins.php',
+ url: cvProvider ? null : 'editor/dataproviders/list_all_plugins.php',
+ live: cvProvider ? function () {
+ return cvProvider.getPlugins('dp');
+ } : null,
cache: true,
userInputAllowed: false,
},
},
'pages': {
'design': {
- url: 'resource/designs/get_designs.php',
+ url: cvProvider ? baseRestPath + '/data/designs' : 'resource/designs/get_designs.php',
map: function(element) {
return {value: element, label: element};
},
@@ -96,18 +106,21 @@ var DataProviderConfig = {
// wildcard: will match ANY elements attribute (lower prio than an exact element-attribute-match)
'*': {
'rrd': {
- url: 'editor/dataproviders/list_all_rrds.php',
+ url: cvProvider ? baseRestPath + '/data/rrds' : 'editor/dataproviders/list_all_rrds.php',
cache: true,
userInputAllowed: true,
},
'ga': {
- url: 'editor/dataproviders/list_all_addresses.php',
+ url: cvProvider ? baseRestPath + '/data/addresses' : 'editor/dataproviders/list_all_addresses.php',
cache: true,
userInputAllowed: true,
grouped: true,
},
'transform': {
- url: 'editor/dataproviders/dpt_list.json',
+ url: cvProvider ? null : 'editor/dataproviders/dpt_list.json',
+ live: cvProvider ? function () {
+ return cvProvider.getTransforms('dp');
+ } : null,
cache: true,
userInputAllowed: false,
},
diff --git a/source/editor/dataproviders/list_all_icons.php b/source/editor/dataproviders/list_all_icons.php
index 1fa776281cd..213ffe608f2 100644
--- a/source/editor/dataproviders/list_all_icons.php
+++ b/source/editor/dataproviders/list_all_icons.php
@@ -4,17 +4,17 @@
/**
* Provide a list of all icons.
* Uses the colorspace 'white' as a basis
- *
+ *
* LICENSE: This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program. If not, see ;.
*
@@ -40,7 +40,7 @@ function createListEntry( $key )
if (true === file_exists(ICON_FILE) && filesize(ICON_FILE) > 0) {
preg_match_all( '/id="kuf-(.*?)"/', file_get_contents( ICON_FILE ), $fileData, PREG_PATTERN_ORDER );
-
+
$arrData = array_map( "createListEntry", $fileData[1] );
}
diff --git a/source/editor/dataproviders/list_all_plugins.php b/source/editor/dataproviders/list_all_plugins.php
index 270422d2a43..b3dbfc30c78 100644
--- a/source/editor/dataproviders/list_all_plugins.php
+++ b/source/editor/dataproviders/list_all_plugins.php
@@ -3,17 +3,17 @@
/**
* Provide a list of all available plugins.
- *
+ *
* LICENSE: This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program. If not, see ;.
*
diff --git a/source/editor/lib/Configuration.js b/source/editor/lib/Configuration.js
index fe7fda92bdc..da10a681e32 100644
--- a/source/editor/lib/Configuration.js
+++ b/source/editor/lib/Configuration.js
@@ -113,48 +113,52 @@ var Configuration = function (filename, isDemo) {
}
var data = _config.getAsSerializable();
- $.ajax('editor/bin/save_config.php',
- {
- dataType: 'json',
- data: {
- config: filename,
- data: JSON.stringify(data),
- },
- type: 'POST',
- cache: false,
- success: function (data) {
- if (data === undefined || typeof data.success === 'undefined') {
- // some weird generic error
- var result = new Result(false, Messages.configuration.savingErrorUnknown);
- $(document).trigger('configuration_saving_error', [result]);
+ if (window.saveFromIframe) {
+ window.saveFromIframe(data);
+ } else {
+ $.ajax('editor/bin/save_config.php',
+ {
+ dataType: 'json',
+ data: {
+ config: filename,
+ data: JSON.stringify(data),
+ },
+ type: 'POST',
+ cache: false,
+ success: function (data) {
+ if (data === undefined || typeof data.success === 'undefined') {
+ // some weird generic error
+ var result = new Result(false, Messages.configuration.savingErrorUnknown);
+ $(document).trigger('configuration_saving_error', [result]);
- return;
- }
-
- if (data.success === false) {
- // we have an error.
- var message;
-
- if (typeof data.message !== 'undefined') {
- message = data.message;
- }
-
- var result = new Result(false, Messages.configuration.savingError, [message]);
- $(document).trigger('configuration_saving_error', [result]);
+ return;
+ }
- return;
- }
-
- // everything is pretty cool.
- $(document).trigger('configuration_saving_success');
-
- },
- error: function (jqXHR, textStatus, errorThrown) {
- var result = new Result(false, Messages.configuration.savingErrorServer, [textStatus, errorThrown]);
- $(document).trigger('configuration_saving_error', [result]);
- },
- }
- );
+ if (data.success === false) {
+ // we have an error.
+ var message;
+
+ if (typeof data.message !== 'undefined') {
+ message = data.message;
+ }
+
+ var result = new Result(false, Messages.configuration.savingError, [message]);
+ $(document).trigger('configuration_saving_error', [result]);
+
+ return;
+ }
+
+ // everything is pretty cool.
+ $(document).trigger('configuration_saving_success');
+
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ var result = new Result(false, Messages.configuration.savingErrorServer, [textStatus, errorThrown]);
+ $(document).trigger('configuration_saving_error', [result]);
+ },
+ }
+ );
+ }
};
/**
diff --git a/source/editor/lib/Editor.js b/source/editor/lib/Editor.js
index dea552306fb..dd09cb76e38 100644
--- a/source/editor/lib/Editor.js
+++ b/source/editor/lib/Editor.js
@@ -181,9 +181,12 @@ var Editor = function (config) {
// create, and render the preview
var $preview = $('');
$preview.attr({id: 'preview', src: 'index.html?config=' + _previewSuffix});
-
- var $editor_menu = $('#editor .menu');
- var height = $(window).height() - $editor_menu.height() - $editor_menu.position().top;
+
+ var height = $(window).height();
+ if (!window.location.search.includes('embed=1')) {
+ var $editor_menu = $('#editor .menu');
+ height = height - $editor_menu.height() - $editor_menu.position().top;
+ }
$preview.css({width: '100%', height: height + 'px', border: 'none'});
@@ -215,45 +218,46 @@ var Editor = function (config) {
});
var $editor = $('').attr('id', 'editor');
-
- var $menu = $('').addClass('menu');
- var $save = $('')
- .addClass('button')
- .addClass('save')
- .html(Messages.editor.ui.save.text)
- .attr('title', Messages.editor.ui.save.tooltip)
- .click(clickHandler);
- $menu.append($save);
-
- var $expert = $('')
- .addClass('button')
- .addClass('expert')
- .html(Messages.editor.ui.expert.text)
- .attr('title', Messages.editor.ui.expert.tooltip)
- .click(clickHandler);
- $menu.append($expert);
- if (isExpert === true) {
- // add the active-class even at startup, it might be pre-set
- $expert.addClass('active');
+ if (!window.location.search.includes('embed=1')) {
+ var $menu = $('').addClass('menu');
+ var $save = $('')
+ .addClass('button')
+ .addClass('save')
+ .html(Messages.editor.ui.save.text)
+ .attr('title', Messages.editor.ui.save.tooltip)
+ .click(clickHandler);
+ $menu.append($save);
+
+ var $expert = $('')
+ .addClass('button')
+ .addClass('expert')
+ .html(Messages.editor.ui.expert.text)
+ .attr('title', Messages.editor.ui.expert.tooltip)
+ .click(clickHandler);
+ $menu.append($expert);
+ if (isExpert === true) {
+ // add the active-class even at startup, it might be pre-set
+ $expert.addClass('active');
+ }
+
+ var $preview = $('')
+ .addClass('button')
+ .addClass('preview')
+ .html(Messages.editor.ui.preview.text)
+ .attr('title', Messages.editor.ui.preview.tooltip)
+ .click(clickHandler);
+ $menu.append($preview);
+
+ var $manager = $('')
+ .addClass('button')
+ .addClass('manager')
+ .html(Messages.editor.ui.manager.text)
+ .attr('title', Messages.editor.ui.manager.tooltip)
+ .click(clickHandler);
+ $menu.append($manager);
+
+ $editor.append($menu);
}
-
- var $preview = $('')
- .addClass('button')
- .addClass('preview')
- .html(Messages.editor.ui.preview.text)
- .attr('title', Messages.editor.ui.preview.tooltip)
- .click(clickHandler);
- $menu.append($preview);
-
- var $manager = $('')
- .addClass('button')
- .addClass('manager')
- .html(Messages.editor.ui.manager.text)
- .attr('title', Messages.editor.ui.manager.tooltip)
- .click(clickHandler);
- $menu.append($manager);
-
- $editor.append($menu);
$editor.append($container);
diff --git a/source/editor/text/monaco/completion-provider.js b/source/editor/text/monaco/completion-provider.js
deleted file mode 100644
index 4cdf9a40160..00000000000
--- a/source/editor/text/monaco/completion-provider.js
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * copyright (c) 2010-2017, Christian Mayer and the CometVisu contributers.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/**
- * XSD-based code completion provider for the monaco text editor.
- *
- * @since 0.11.0
- * @author Tobias Bräutigam
- */
-function CompletionProvider(monaco, schemaNode) {
- var __elementCache = {};
-
- function getLastOpenedTag(text) {
- // get all tags inside of the content
- var tags = text.match(/<\/*(?=\S*)([a-zA-Z-]+)/g);
- if (!tags) {
- return undefined;
- }
- // we need to know which tags are closed
- var closingTags = [];
- for (var i = tags.length - 1; i >= 0; i--) {
- if (tags[i].indexOf('') === 0) {
- closingTags.push(tags[i].substring(''.length));
- }
- else {
- // get the last position of the tag
- var tagPosition = text.lastIndexOf(tags[i]);
- var tag = tags[i].substring('<'.length);
- var closingBracketIdx = text.indexOf('/>', tagPosition);
- // if the tag wasn't closed
- if (closingBracketIdx === -1) {
- // if there are no closing tags or the current tag wasn't closed
- if (!closingTags.length || closingTags[closingTags.length - 1] !== tag) {
- // we found our tag, but let's get the information if we are looking for
- // a child element or an attribute
- text = text.substring(tagPosition);
-
- var openedTag = text.indexOf('<') > text.indexOf('>');
- var contentSearch = openedTag && /="[^"]*$/.test(text);
- var filteredElementSearch = /<[\w-_\d]+$/.test(text);
- return {
- tagName: tag,
- filteredElementSearch: filteredElementSearch,
- isAttributeSearch: !filteredElementSearch && openedTag && !contentSearch,
- isContentSearch: contentSearch,
- text: text
- };
- }
- // remove the last closed tag
- closingTags.splice(closingTags.length - 1, 1);
- }
- // remove the last checked tag and continue processing the rest of the content
- text = text.substring(0, tagPosition);
- }
- }
- }
-
- function findElements(parent, elementName, maxDepth, currentDepth) {
- if (elementName in __elementCache) {
- return __elementCache[elementName];
- }
- if (maxDepth < currentDepth) {
- return null;
- }
- if (!parent) {
- parent = schemaNode.allowedRootElements.pages;
- }
- if (currentDepth === undefined) {
- currentDepth = 1;
- }
- var allowedElements = parent.getAllowedElements();
- // console.log(parent.name+" looking for "+elementName+" in tree level "+currentDepth+ "(<"+maxDepth+") ("+Object.getOwnPropertyNames(allowedElements).join(", ")+")");
- if (elementName in allowedElements) {
- // console.log("found "+elementName+" in tree level "+currentDepth);
- __elementCache[elementName] = allowedElements[elementName];
- return allowedElements[elementName];
- } else {
- for (var element in allowedElements) {
- if (maxDepth > currentDepth) {
- var result = findElements(allowedElements[element], elementName, maxDepth, currentDepth + 1);
- if (result) {
- __elementCache[elementName] = result;
- // console.log("found " + elementName + " in tree level " + currentDepth);
- return result;
- }
- }
- }
- }
-
- }
-
- function isItemAvailable(itemName, maxOccurs, items) {
- // the default for 'maxOccurs' is 1
- maxOccurs = maxOccurs || '1';
- // the element can appere infinite times, so it is available
- if (maxOccurs && maxOccurs === 'unbounded') {
- return true;
- }
- // count how many times the element appeared
- var count = 0;
- for (var i = 0; i < items.length; i++) {
- if (items[i] === itemName) {
- count++;
- }
- }
- // if it didn't appear yet, or it can appear again, then it
- // is available, otherwise it't not
- return count === 0 || parseInt(maxOccurs) > count;
- }
-
- function getElementString(element, indent, prefix) {
- var insertText = indent+prefix+element.name+" ";
- // add all required attributes with default values
- Object.getOwnPropertyNames(element.allowedAttributes).forEach(function(attr) {
- var attribute = element.allowedAttributes[attr];
- if (!attribute.isOptional) {
- insertText += attr+'="'+(attribute.defaultValue ? attribute.defaultValue : "")+'" ';
- }
- });
- // add mandatory children
- var requiredElements = element.getRequiredElements();
- var allowedContent = element.getAllowedContent();
- var isContentAllowed = allowedContent._text || requiredElements.length > 0 || !!allowedContent._grouping;
- if (!isContentAllowed) {
- // close tag
- insertText = insertText.trim()+"/";
- } else {
- // close open tag
- insertText = insertText.trim()+">";
-
- // insert required elements
- var children = 0;
- requiredElements.forEach(function(elemName) {
- var elem = findElements(element, elemName, 1, 0);
- if (elem) {
- insertText += "\n " + getElementString(elem, indent + " ", "<") + ">";
- children++;
- }
- });
- // add closing tag
- if (children > 0) {
- insertText += "\n"+indent;
- }
- insertText += ""+element.name;
- }
- return insertText;
- }
-
- function getAvailableElements(monaco, element, usedItems) {
- var availableItems = [];
- var children = element.getAllowedElements();
-
- // if there are no such elements, then there are no suggestions
- if (!children) {
- return [];
- }
- Object.getOwnPropertyNames(children).forEach(function(name) {
- // get all element attributes
- var childElem = children[name];
- // the element is a suggestion if it's available
- if (isItemAvailable(childElem.name, childElem.getBounds().max, usedItems)) {
- // mark it as a 'field', and get the documentation
- availableItems.push({
- label: childElem.name,
- insertText: getElementString(childElem, "", ""),
- kind: monaco.languages.CompletionItemKind.Field,
- detail: childElem.type,
- documentation: childElem.getDocumentation().join("\n")
- });
- }
- });
- // return the suggestions we found
- return availableItems;
- }
-
- function getAvailableAttributes(monaco, element, usedChildTags) {
- var availableItems = [];
- // get all attributes for the element
- var attrs = element.allowedAttributes;
- Object.getOwnPropertyNames(attrs).forEach(function(name) { // jshint ignore:line
- var attr = attrs[name];
- // accept it in a suggestion list only the attribute is not used yet
- if (usedChildTags.indexOf(attr.name) === -1) {
- // mark it as a 'property', and get it's documentation
- availableItems.push({
- label: attr.name,
- insertText: attr.name+'=""',
- kind: monaco.languages.CompletionItemKind.Property,
- detail: attr.getTypeString(),
- documentation: attr.getDocumentation().join("\n")
- });
- }
- });
-
- // return the elements we found
- return availableItems;
- }
-
- this.getProvider = function() {
- return {
- triggerCharacters: ['<', '"'],
- provideCompletionItems: function (model, position) {
- // get editor content before the pointer
- var textUntilPosition = model.getValueInRange({
- startLineNumber: 1,
- startColumn: 1,
- endLineNumber: position.lineNumber,
- endColumn: position.column
- });
- // if we want suggestions, inside of which tag are we?
- var lastOpenedTag = getLastOpenedTag(textUntilPosition);
- // console.log(lastOpenedTag);
- // get opened tags to see what tag we should look for in the XSD schema
- var openedTags = [];
- // get the elements/attributes that are already mentioned in the element we're in
- var usedItems = [];
- var isAttributeSearch = lastOpenedTag && lastOpenedTag.isAttributeSearch;
- var isContentSearch = lastOpenedTag && lastOpenedTag.isContentSearch;
- var filteredElementSearch = lastOpenedTag && lastOpenedTag.filteredElementSearch;
- // no need to calculate the position in the XSD schema if we are in the root element
- if (lastOpenedTag) {
- // try to create a valid XML document
- var parts = lastOpenedTag.text.split(" ");
- parts.shift();
- var cleanedText = textUntilPosition;
- if (parts.length) {
- cleanedText = cleanedText.substring(0, cleanedText.length-parts.join(" ").length)+">";
- }
- // parse the content (not cleared text) into an xml document
- var xmlDoc = stringToXml(cleanedText);
- var lastChild = xmlDoc.lastElementChild;
- var i;
- var lastFound = false;
- while (lastChild) {
- openedTags.push(lastChild.tagName);
- // if we found our last opened tag
- if (lastChild.tagName === lastOpenedTag.tagName) {
- lastFound = true;
- // if we are looking for attributes, then used items should
- // be the attributes we already used
- if (lastOpenedTag.isAttributeSearch && lastChild.outerHTML === lastOpenedTag.text) {
- var attrs = lastChild.attributes;
- for (i = 0; i < attrs.length; i++) {
- usedItems.push(attrs[i].nodeName);
- }
- }
- else {
- // if we are looking for child elements, then used items
- // should be the elements that were already used
- var children = lastChild.children;
- for (i = 0; i < children.length; i++) {
- usedItems.push(children[i].tagName);
- }
- }
- break;
- }
- // we haven't found the last opened tag yet, so we move to
- // the next element
- lastChild = lastChild.lastElementChild;
- }
- if (!lastFound) {
- // fallback -> parse string
- if (isAttributeSearch || isContentSearch) {
- var parts = lastOpenedTag.text.split(" ");
- // skip tag name
- parts.shift();
- parts.forEach(function(entry) {
- usedItems.push(entry.split("=").shift());
- });
- }
- }
- }
- // find the last opened tag in the schema to see what elements/attributes it can have
- var searchedElement = openedTags[openedTags.length-1];
- if (isContentSearch) {
- searchedElement = lastOpenedTag.tagName;
- } else if (!isAttributeSearch && filteredElementSearch) {
- searchedElement = openedTags[openedTags.length-2];
- }
- var currentItem = findElements(schemaNode.allowedRootElements.pages, searchedElement, openedTags.length);
- var res = [];
-
- // return available elements/attributes if the tag exists in the schema, or an empty
- // array if it doesn't
- if (isContentSearch) {
- var currentAttribute = usedItems[usedItems.length-1];
-
- if (currentItem && currentAttribute in currentItem.allowedAttributes) {
- var attribute = currentItem.allowedAttributes[currentAttribute];
- var type = attribute.getTypeString();
- attribute.getEnumeration().forEach(function(entry) {
- res.push({
- label: entry,
- kind: monaco.languages.CompletionItemKind.Value,
- detail: type,
- documentation: attribute.getDocumentation().join("\n")
- });
- });
- }
- }
- else if (isAttributeSearch) {
- // get attributes completions
- res = currentItem ? getAvailableAttributes(monaco, currentItem, usedItems) : [];
- }
- else {
- // get elements completions
- if (lastOpenedTag && lastOpenedTag.text.endsWith("")) {
- res.push({
- label: lastOpenedTag.tagName,
- kind: monaco.languages.CompletionItemKind.Field
- });
- } else {
- res = currentItem ? getAvailableElements(monaco, currentItem, usedItems) : [];
- }
- }
- return {suggestions: res};
- }
- };
- };
-}
\ No newline at end of file
diff --git a/source/editor/text/worker.js b/source/editor/text/worker.js
deleted file mode 100644
index c6bfa4eb844..00000000000
--- a/source/editor/text/worker.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * copyright (c) 2010-2017, Christian Mayer and the CometVisu contributers.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/**
- * Webworker for CometVisu's XML text editor. Detects changes in document,
- * Syntax errors and other stuff.
- *
- * @since 0.11.0
- * @author Tobias Bräutigam
- */
-importScripts('xmllint.js');
-
-var initialHash = null;
-var initialCode = null;
-var schema = null;
-
-/**
- * Calculate HashCode from string
- *
- * @see http://stackoverflow.com/q/7616461/940217
- * @return {number}
- */
-function hashCode(string) {
- if (Array.prototype.reduce){
- return string.split("").reduce(function(a,b){a=((a<<5)-a)+b.charCodeAt(0);return a&a;},0);
- }
- var hash = 0;
- if (string.length === 0) {
- return hash;
- }
- for (var i = 0, l = string.length; i < l; i++) {
- var character = string.charCodeAt(i);
- hash = ((hash<<5)-hash)+character;
- hash = hash & hash; // Convert to 32bit integer
- }
- return hash;
-}
-
-/**
- * Called after editor has been loaded with a config file
- * @param data {Map}
- */
-function openFile(data) {
- initialCode = data.code.split("\n");
- initialHash = hashCode(data.code);
- schema = data.schema;
-
- // initial syntax check
- contentChange(data);
-}
-
-/**
- * Called after file has been saved
- * @param data {String} Complete code
- */
-function savedFile(data) {
- initialCode = data.split("\n");
- initialHash = hashCode(data);
-}
-
-function contentChange(data) {
- var newHash = hashCode(data.code);
- // check modifications
- postMessage(["modified", (newHash !== initialHash)]);
-
- var lint = xmllint.validateXML({
- xml: data.code,
- schema: schema
- });
- postMessage(["errors", lint.errors]);
-
- // currently disabled as these are hard to maintain (e.g. if you delete a line the range of existing decorators change
- // and they all need to be re-evaluated)
- //checkModification(data.code.split("\n"), data.event.changes);
-}
-
-function checkModification(lines, changes) {
- var decorations = [];
-
- changes.forEach(function(change) {
- for (var i=change.range.startLineNumber; i<=change.range.endLineNumber; i++) {
- if (initialCode[i] !== lines[i]) {
- decorations.push({
- range: {
- startLineNumber: change.range.startLineNumber+1,
- endLineNumber: change.range.endLineNumber+1,
- startColumn: 1,
- endColumn: 1
- },
- options: {
- isWholeLine: true,
- linesDecorationsClassName: 'modified-line'
- }
- });
- break;
- }
- }
- });
- postMessage(["decorations", decorations]);
-}
-
-/**
- * Handle messages from application
- */
-onmessage = function(ev) {
- var topic = ev.data.shift();
- if (topic in this) {
- // dispatch message to handler
- this[topic].apply(this, ev.data);
- }
-};
diff --git a/source/resource/config/.templates/Plugin.js b/source/resource/config/.templates/Plugin.js
new file mode 100644
index 00000000000..4e227791c65
--- /dev/null
+++ b/source/resource/config/.templates/Plugin.js
@@ -0,0 +1,89 @@
+/**
+ * TODO: Describe your plugin here
+ *
+ * @author add your name here
+ * @since ###SINCE###
+ */
+qx.Class.define("cv.plugin.$0", {
+ extend: cv.ui.structure.AbstractWidget,
+
+ /*
+ ***********************************************
+ CONSTRUCTOR
+ ***********************************************
+ */
+ construct: function (props) {
+ this.base(arguments, props);
+ },
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ /**
+ * Parses the widgets XML configuration and extracts the given information
+ * to a simple key/value map.
+ *
+ * @param xml {Element} XML-Element
+ * @param path {String} internal path of the widget
+ * @param flavour {String} Flavour of the widget
+ * @param pageType {String} Page type (2d, 3d, ...)
+ */
+ parse: function (xml, path, flavour, pageType) {
+ var data = cv.parser.WidgetParser.parseElement(this, xml, path, flavour, pageType, this.getAttributeToPropertyMappings());
+
+ // uncomment this line when your plugin has an address element
+ // cv.parser.WidgetParser.parseAddress(xml, path);
+
+ // uncomment this line if your plugin needs to refresh regularly (this parses the 'refresh' attribute)
+ // cv.parser.WidgetParser.parseRefresh(xml, path);
+ return data;
+ },
+
+ /**
+ * This maps attributes from the plugins XML-definition to properties of this class.
+ * @returns {Map}
+ */
+ getAttributeToPropertyMappings: function () {
+ // make sure that you have defined the properties you are trying to map here
+ // please use the source code of other plugins to see whats possible here
+ return {
+ // add your mappings here
+ };
+ }
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+
+ },
+
+ defer: function (statics) {
+ // register the parser, Note: element-name must be changed to the xml-elements name this plugin should parse
+ cv.parser.WidgetParser.addHandler("element-name", statics);
+ }
+});
\ No newline at end of file
diff --git a/source/resource/config/.templates/visu_config.xml b/source/resource/config/.templates/visu_config.xml
new file mode 100644
index 00000000000..ec2bd0a4202
--- /dev/null
+++ b/source/resource/config/.templates/visu_config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+ by CometVisu.org
+ - Config-Manager
+ - Reload
+ ]]>
+ Edit
+ ]]>
+ normal Mode
+ ]]>
+ Widget Demo
+ ]]>
+ Check Config
+ ]]>
+
+
+
+
+
diff --git a/source/resource/config/hidden.php b/source/resource/config/hidden.php
index 49254b72a6c..9dd4926507e 100644
--- a/source/resource/config/hidden.php
+++ b/source/resource/config/hidden.php
@@ -1,5 +1,6 @@
array('test' => 'value')
);
-?>
+?>
\ No newline at end of file
diff --git a/source/resource/designs/get_designs.php b/source/resource/designs/get_designs.php
deleted file mode 100644
index 0b2b4bf237b..00000000000
--- a/source/resource/designs/get_designs.php
+++ /dev/null
@@ -1,48 +0,0 @@
-;.
- *
- * @package CometVisu
- * @author Michael Hausl (michael at hausl dot com)
- * @author Julian Makowski (julian at makowskis dot de)
- * @copyright 2013 Julian Makowski
- * @license GPLv3 or later, http://opensource.org/licenses/gpl-license.php
- * @version SVN: $Id$
- * @link http://cometvisu.de
- * @since 2013-10-13
- */
-
-define('DESIGNS_DIRECTORY', './');
-define('DESIGNS_PATTERN', '*');
-
-$arrDesigns = array();
-
-foreach (glob(DESIGNS_DIRECTORY . DESIGNS_PATTERN, GLOB_ONLYDIR) as $strFilename) {
- $strFileBasename = basename($strFilename);
-
- $arrDesigns[] = utf8_encode($strFileBasename);
-}
-
-sort($arrDesigns);
-
-Header("Content-type: application/json");
-print json_encode($arrDesigns);
-exit;
-
-
-?>
diff --git a/source/resource/manager/completion-libs/qooxdoo.d.ts b/source/resource/manager/completion-libs/qooxdoo.d.ts
new file mode 100644
index 00000000000..82d80397033
--- /dev/null
+++ b/source/resource/manager/completion-libs/qooxdoo.d.ts
@@ -0,0 +1,12679 @@
+interface IMap {
+ [key:string] : any;
+}
+
+declare class ErrorImpl implements Error {
+ name: string;
+ message:string
+}
+
+declare module qx.registry {
+ function registerMainMethod(fn:(app: qx.application.Standalone)=>void):void;
+}
+
+declare module qx {
+class Bootstrap {
+ static base(args:any,...varargs:any[]):any;
+ static bind(func:Function,self?:any,...varargs:any[]):Function;
+ static createNamespace(name:string,object:any):string;
+ static debug(object:any,message:any):void;
+ static define(name?:string,config?:IMap):qx.Class;
+ static error(object:any,message:any):void;
+ static extendClass(clazz:Function,construct:Function,superClass:Function,name:Function,basename:Function):void;
+ static firstLow(str:string):string;
+ static firstUp(str:string):string;
+ static genericToString():string;
+ static getByName(name:string):qx.Class;
+ static getClass(value:any):string;
+ static getEnvironmentSetting(key:string):any;
+ static info(object:any,message:any):void;
+ static isArray(value:any):boolean;
+ static isFunction(value:any):boolean;
+ static isObject(value:any):boolean;
+ static isString(value:any):boolean;
+ static keys(map:any):qx.data.Array;
+ static objectGetLength(map:any):number;
+ static objectMergeWith(target:any,source:any,overwrite?:boolean):any;
+ static setDisplayName(fcn:Function,classname:string,name:string):void;
+ static setDisplayNames(functionMap:any,classname:string):void;
+ static setEnvironmentSetting(key:string,value:any):void;
+ static setRoot(root:any):void;
+ static trace(object:any):void;
+ static warn(object:any,message:any):void;
+
+}
+}
+declare module qx {
+class Class {
+ static define(name?:string,config?:IMap):qx.Class;
+ static genericToString():string;
+ static getByInterface(clazz:qx.Class,iface:qx.Interface):qx.Class;
+ static getByMixin(clazz:qx.Class,mixin:qx.Mixin):qx.Class;
+ static getByName(name:string):qx.Class;
+ static getByProperty(clazz:qx.Class,name:string):qx.Class;
+ static getEventType(clazz:qx.Class,name:string):string;
+ static getInstance():any;
+ static getInterfaces(clazz:qx.Class):qx.Interface[];
+ static getMixins(clazz:qx.Class):qx.Mixin[];
+ static getProperties(clazz:qx.Class):string[];
+ static getPropertyDefinition(clazz:qx.Class,name:string):IMap;
+ static getTotalNumber():number;
+ static hasInterface(clazz:qx.Class,iface:qx.Interface):boolean;
+ static hasMixin(clazz:qx.Class,mixin:qx.Mixin):boolean;
+ static hasOwnInterface(clazz:qx.Class,iface:qx.Interface):boolean;
+ static hasOwnMixin(clazz:qx.Class,mixin:qx.Mixin):boolean;
+ static hasProperty(clazz:qx.Class,name:string):boolean;
+ static implementsInterface(obj:any,iface:qx.Interface):boolean;
+ static include(clazz:qx.Class,mixin:qx.Mixin):void;
+ static isDefined(name:string):boolean;
+ static isSubClassOf(clazz:qx.Class,superClass:qx.Class):boolean;
+ static patch(clazz:qx.Class,mixin:qx.Mixin):void;
+ static supportsEvent(clazz:qx.Class,name:string):boolean;
+ static undefine(name:string):void;
+
+}
+}
+declare module qx {
+class Interface {
+ static assert(clazz:qx.Class,iface:qx.Interface,wrap?:boolean):void;
+ static assertObject(object:qx.core.Object,iface:qx.Interface):void;
+ static classImplements(clazz:qx.Class,iface:qx.Interface):boolean;
+ static define(name:string,config?:IMap):qx.Interface;
+ static flatten(ifaces?:qx.Interface[]):qx.data.Array;
+ static genericToString():string;
+ static getByName(name:string):qx.Class;
+ static getTotalNumber():number;
+ static isDefined(name:string):boolean;
+ static objectImplements(object:qx.core.Object,iface:qx.Interface):boolean;
+
+}
+}
+declare module qx {
+class Mixin {
+ static checkCompatibility(mixins:qx.Mixin[]):boolean;
+ static define(name:string,config?:IMap):qx.Mixin;
+ static flatten(mixins?:qx.Mixin[]):qx.data.Array;
+ static genericToString():string;
+ static getByName(name:string):qx.Class;
+ static getTotalNumber():number;
+ static isCompatible(mixin:qx.Mixin,clazz:qx.Class):boolean;
+ static isDefined(name:string):boolean;
+
+}
+}
+declare module qx {
+class Part {
+ constructor (loader?:any);
+ static $$notifyLoad(id:string,closure:Function):void;
+ static getInstance():qx.Part;
+ static preload(partNames:string[]):void;
+ static require(partNames:string[],callback:Function,self?:any):void;
+ addPackageListener(pkg:any,callback:any):void;
+ addPartListener(part:any,callback:any):void;
+ addToPackage(pkg:qx.io.part.Package):void;
+ getParts():qx.data.Array;
+ notifyPackageResult(pkg:any):void;
+ notifyPartResult(part:any):void;
+ saveClosure(id:string,closure:Function):void;
+
+}
+}
+declare module qx {
+class Theme {
+ static define(name:string,config:IMap):void;
+ static genericToString():string;
+ static getAll():IMap;
+ static getByName(name:string):any;
+ static getTotalNumber():number;
+ static include(theme:qx.Theme,mixinTheme:qx.Theme):void;
+ static isDefined(name:string):boolean;
+ static patch(theme:qx.Theme,mixinTheme:qx.Theme):void;
+
+}
+}
+declare module qx.application {
+class AbstractGui extends qx.core.Object implements qx.application.IApplication {
+ close():string;
+ finalize():void;
+ main():void;
+ terminate():void;
+ marktr(messageId:string):string;
+ tr(messageId:string,...varargs:any[]):string;
+ trc(hint:string,messageId:string,...varargs:any[]):string;
+ trn(singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ trnc(hint:string,singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ protected _createRootWidget():qx.ui.core.Widget;
+ getRoot():qx.ui.core.Widget;
+ render():void;
+
+}
+}
+declare module qx.application {
+class Basic extends qx.core.Object implements qx.application.IApplication {
+ close():string;
+ finalize():void;
+ main():void;
+ terminate():void;
+
+}
+}
+declare module qx.application {
+interface IApplication {
+ close():string;
+ finalize():void;
+ main():void;
+ terminate():void;
+
+}
+}
+declare module qx.application {
+class Native extends qx.core.Object implements qx.application.IApplication {
+ close():string;
+ finalize():void;
+ main():void;
+ terminate():void;
+
+}
+}
+declare module qx.application {
+class Routing {
+ constructor ();
+ protected _executeGet(path:string,customData:any,fromEvent:any):void;
+ protected _getPathOrFallback(path:string,defaultPath?:string):string;
+ back(customData?:IMap):void;
+ dispose():void;
+ execute(path:string,customData:any):void;
+ executeDelete(path:string,params:IMap,customData:any):void;
+ executeGet(path:string,customData:any):void;
+ executePost(path:string,params:IMap,customData:any):void;
+ executePut(path:string,params:IMap,customData:any):void;
+ getState():string;
+ init(defaultPath?:string):void;
+ on(route:string,handler:Function,scope:any):string;
+ onAny(route:string,handler:Function,scope:any):string;
+ onDelete(route:string,handler:Function,scope:any):string;
+ onGet(route:string,handler:Function,scope:any):string;
+ onPost(route:string,handler:Function,scope:any):string;
+ onPut(route:string,handler:Function,scope:any):string;
+ remove(id:string):void;
+
+}
+}
+declare module qx.application {
+class Standalone extends qx.application.AbstractGui {
+
+}
+}
+declare module qx.bom {
+class AnimationFrame extends qx.event.Emitter {
+ static calculateTiming(func:string,x:number):number;
+ static request(callback:Function,context:any):number;
+ cancelSequence():void;
+ startSequence(duration:number):void;
+
+}
+}
+declare module qx.bom {
+class Blocker extends qx.core.Object {
+ constructor ();
+ block(element?:any):void;
+ getBlockerColor():string;
+ getBlockerElement():HTMLElement;
+ getBlockerOpacity():number;
+ getBlockerZIndex():number;
+ isBlocked():boolean;
+ setBlockerColor(color:string):void;
+ setBlockerOpacity(opacity:string):void;
+ setBlockerZIndex(zIndex:number):void;
+ unblock():void;
+
+}
+}
+declare module qx.bom {
+class Cookie {
+ static del(key:string,path?:string,domain?:string):void;
+ static get(key:string):any;
+ static set(key:string,value:string,expires?:number,path?:string,domain?:string,secure?:boolean):void;
+
+}
+}
+declare module qx.bom {
+class Document {
+ static getHeight(win?:Window):number;
+ static getWidth(win?:Window):number;
+ static isQuirksMode(win?:Window):boolean;
+ static isStandardMode(win?:Window):boolean;
+
+}
+}
+declare module qx.bom {
+class Element {
+ static activate(element:HTMLElement):void;
+ static addListener(element:HTMLElement,type:string,listener:Function,self?:any,capture?:boolean):string;
+ static blur(element:HTMLElement):void;
+ static capture(element:HTMLElement,containerCapture?:boolean):void;
+ static clone(element:HTMLElement,events?:boolean):HTMLElement;
+ static deactivate(element:HTMLElement):void;
+ static focus(element:HTMLElement):void;
+ static hasListener(element:HTMLElement,type:string,capture?:boolean):boolean;
+ static releaseCapture(element:HTMLElement):void;
+ static removeListener(element:HTMLElement,type:string,listener:Function,self?:any,capture?:boolean):boolean;
+ static removeListenerById(target:any,id:string):boolean;
+
+}
+}
+declare module qx.bom {
+class Event {
+ static addNativeListener(target:any,type:string,listener:Function,useCapture?:boolean):void;
+ static fire(target:HTMLElement,type:string):boolean;
+ static getEventName(target:any,type:string):string;
+ static getRelatedTarget(e:qx.event.type.Event):HTMLElement;
+ static getTarget(e:qx.event.type.Event):any;
+ static preventDefault(e:qx.event.type.Event):void;
+ static removeNativeListener(target:any,type:string,listener:Function,useCapture?:boolean):void;
+ static stopPropagation(e:qx.event.type.Event):void;
+ static supportsEvent(target:any,type:string):boolean;
+
+}
+}
+declare module qx.bom {
+class FileReader extends qx.core.Object {
+ constructor ();
+ static getFile(inputElement:HTMLElement,index:number):any;
+ static getNumFiles(inputElement:HTMLElement):number;
+ protected _handleAbort(e:any):void;
+ protected _handleError(e:any):void;
+ protected _handleLoad(e:any):void;
+ protected _handleLoadEnd(e:any):void;
+ protected _handleLoadStart(e:any):void;
+ protected _handleProgress(e:any):void;
+ readAsBinaryString(fileObj:any):void;
+ readAsDataURL(fileObj:any):void;
+ readAsText(fileObj:any,encoding?:string):void;
+
+}
+}
+declare module qx.bom {
+class Flash {
+ static create(element:HTMLElement,attributes:IMap,variables?:IMap,params?:IMap,win?:Window):HTMLElement;
+ static destroy(element:HTMLElement,win?:Window):void;
+
+}
+}
+declare module qx.bom {
+class Font extends qx.core.Object {
+ constructor (size?:string,family?:string[]);
+ static fromConfig(config:IMap):qx.bom.Font;
+ static fromString(str:string):qx.bom.Font;
+ static getDefaultStyles():IMap;
+ protected _applyBold(value:boolean,old:boolean):void;
+ protected _applyColor(value:string,old:string):void;
+ protected _applyDecoration(value:any,old:any):void;
+ protected _applyFamily(value:qx.data.Array,old:qx.data.Array):void;
+ protected _applyItalic(value:boolean,old:boolean):void;
+ protected _applyLineHeight(value:number,old:number):void;
+ protected _applySize(value:number,old:number):void;
+ protected _applyTextShadow(value:string,old:string):void;
+ getBold():boolean;
+ getColor():string;
+ getDecoration():any;
+ getFamily():qx.data.Array;
+ getItalic():boolean;
+ getLineHeight():number;
+ getSize():number;
+ getStyles():IMap;
+ getTextShadow():string;
+ protected initBold(value:any):boolean;
+ protected initColor(value:any):string;
+ protected initDecoration(value:any):any;
+ protected initFamily(value:any):qx.data.Array;
+ protected initItalic(value:any):boolean;
+ protected initLineHeight(value:any):number;
+ protected initSize(value:any):number;
+ protected initTextShadow(value:any):string;
+ isBold():boolean;
+ isItalic():boolean;
+ resetBold():void;
+ resetColor():void;
+ resetDecoration():void;
+ resetFamily():void;
+ resetItalic():void;
+ resetLineHeight():void;
+ resetSize():void;
+ resetTextShadow():void;
+ setBold(value:any):boolean;
+ setColor(value:any):string;
+ setDecoration(value:any):any;
+ setFamily(value:any):qx.data.Array;
+ setItalic(value:any):boolean;
+ setLineHeight(value:any):number;
+ setSize(value:any):number;
+ setTextShadow(value:any):string;
+ toggleBold():boolean;
+ toggleItalic():boolean;
+
+}
+}
+declare module qx.bom {
+class GeoLocation extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.bom.GeoLocation;
+ protected _errorHandler(error:any):void;
+ protected _successHandler(position:any):void;
+ getCurrentPosition(enableHighAccuracy:boolean,timeout:number,maximumAge:number):void;
+ startWatchPosition(enableHighAccuracy:boolean,timeout:number,maximumAge:number):void;
+ stopWatchPosition():void;
+
+}
+}
+declare module qx.bom {
+class HashHistory extends qx.bom.History {
+ constructor ();
+
+}
+}
+declare module qx.bom {
+class History extends qx.core.Object {
+ constructor ();
+ static getInstance():any;
+ protected _applyState(value:string,old:string):void;
+ protected _applyTitle(title:string,old:string):void;
+ protected _decode(value:string):string;
+ protected _encode(value:string):string;
+ protected _getHash():string;
+ protected _onHistoryLoad(state:string):void;
+ protected _readState():string;
+ protected _setHash(value:string):void;
+ protected _setInitialState():void;
+ protected _writeState():void;
+ addToHistory(state:string,newTitle?:string):void;
+ getState():string;
+ getTitle():string;
+ protected initState(value:any):string;
+ protected initTitle(value:any):string;
+ navigateBack():void;
+ navigateForward():void;
+ resetState():void;
+ resetTitle():void;
+ setState(value:any):string;
+ setTitle(value:any):string;
+
+}
+}
+declare module qx.bom {
+class Html {
+ static clean(objs:HTMLElement[],context?:Document,fragment?:HTMLElement):HTMLElement[];
+ static extractScripts(elements:HTMLElement[],fragment?:Document):HTMLElement[];
+ static fixEmptyTags(html:string):string;
+
+}
+}
+declare module qx.bom {
+class Iframe {
+ static create(attributes?:IMap,win?:Window):HTMLElement;
+ static getBody(iframe:HTMLElement):HTMLElement;
+ static getDocument(iframe:HTMLElement):Document;
+ static getWindow(iframe:HTMLElement):Window;
+ static queryCurrentUrl(iframe:HTMLElement):string;
+ static setSource(iframe:HTMLElement,source:string):void;
+
+}
+}
+declare module qx.bom {
+class IframeHistory extends qx.bom.History {
+ constructor ();
+ protected _setState(state:string):void;
+
+}
+}
+declare module qx.bom {
+class Input {
+ static create(type:string,attributes:IMap,win:Window):HTMLElement;
+ static getValue(element:HTMLElement):string;
+ static setValue(element:HTMLElement,value:string):void;
+ static setWrap(element:HTMLElement,wrap:boolean):void;
+
+}
+}
+declare module qx.bom {
+class Label {
+ static create(content:string,html?:boolean,win?:Window):HTMLElement;
+ static getHtmlSize(content:string,styles?:IMap,width?:number):IMap;
+ static getTextSize(text:string,styles:IMap):IMap;
+ static getValue(element:HTMLElement):string;
+ static setSanitizer(func:Function):void;
+ static setValue(element:HTMLElement,value:string):void;
+
+}
+}
+declare module qx.bom {
+class Lifecycle {
+ static onReady(callback:Function,context?:any):void;
+ static onShutdown(callback:Function,context?:any):void;
+
+}
+}
+declare module qx.bom {
+class MediaQuery extends qx.event.Emitter {
+ constructor (query?:string);
+ getQuery():string;
+ isMatching():boolean;
+
+}
+}
+declare module qx.bom {
+class NativeHistory extends qx.bom.History {
+ constructor ();
+
+}
+}
+declare module qx.bom {
+class PageVisibility extends qx.event.Emitter {
+ constructor (document?:Document);
+ static getInstance():qx.bom.PageVisibility;
+ getVisibilityState():string;
+ isHidden():boolean;
+
+}
+}
+declare module qx.bom {
+class Range {
+ static get(node:Node):any;
+
+}
+}
+declare module qx.bom {
+class Selection {
+ static get(node:Node):string;
+ static getEnd(node:Node):number;
+ static getLength(node:Node):number;
+ static getSelectionObject(documentNode:Document):any;
+ static getStart(node:Node):number;
+ static set(node:Node,start:number,end:number):boolean;
+ static setAll(node:Node):boolean;
+
+}
+}
+declare module qx.bom {
+class Selector {
+ static matches(selector:string,set:qx.data.Array):qx.data.Array;
+ static query(selector:string,context:HTMLElement):qx.data.Array;
+
+}
+}
+declare module qx.bom {
+class Shortcut extends qx.core.Object {
+ constructor (shortcut?:string);
+ protected _applyEnabled(value:boolean,old:boolean):void;
+ protected _applyShortcut(value:string,old:string):void;
+ execute(target:any):void;
+ getAutoRepeat():boolean;
+ getEnabled():boolean;
+ getShortcut():string;
+ protected initAutoRepeat(value:any):boolean;
+ protected initEnabled(value:any):boolean;
+ protected initShortcut(value:any):string;
+ isAutoRepeat():boolean;
+ isEnabled():boolean;
+ resetAutoRepeat():void;
+ resetEnabled():void;
+ resetShortcut():void;
+ setAutoRepeat(value:any):boolean;
+ setEnabled(value:any):boolean;
+ setShortcut(value:any):string;
+ toggleAutoRepeat():boolean;
+ toggleEnabled():boolean;
+
+}
+}
+declare module qx.bom {
+class Storage {
+ static getLocal():qx.bom.storage.Web;
+ static getSession():qx.bom.storage.Web;
+
+}
+}
+declare module qx.bom {
+class String {
+ static escape(str:string):string;
+ static fromText(str:string):string;
+ static toText(str:string):string;
+ static unescape(str:string):any;
+
+}
+}
+declare module qx.bom {
+class Style {
+ static getAppliedStyle(element:HTMLElement,propertyName:string,value:string,prefixed?:boolean):string;
+ static getCssName(propertyName:string):string;
+ static getPropertyName(propertyName:string):string;
+
+}
+}
+declare module qx.bom {
+class Stylesheet {
+ static addImport(sheet:any,url:string):void;
+ static addRule(sheet:any,selector:string,entry:string):void;
+ static createElement(text?:string):StyleSheet;
+ static includeFile(href:string,doc?:Document):void;
+ static removeAllImports(sheet:any):void;
+ static removeAllRules(sheet:any):void;
+ static removeImport(sheet:any,url:string):void;
+ static removeRule(sheet:any,selector:string):void;
+ static removeSheet(sheet:any):void;
+
+}
+}
+declare module qx.bom {
+class Template {
+ protected static _createNodeFromTemplate(template:string):HTMLElement;
+ static get(id:string,view:any,partials:any):HTMLElement;
+ static render(template:string,view:any,partials:any):string;
+ static renderToNode(template:string,view:any,partials:any):HTMLElement;
+
+}
+}
+declare module qx.bom {
+class Viewport {
+ static getHeight(win?:Window):number;
+ static getOrientation(win?:Window):number;
+ static getScrollLeft(win?:Window):number;
+ static getScrollTop(win?:Window):number;
+ static getWidth(win?:Window):number;
+ static isLandscape(win?:Window):boolean;
+ static isPortrait(win?:Window):boolean;
+
+}
+}
+declare module qx.bom {
+class Vml {
+ static create(type:string,attributes?:IMap,win?:any):HTMLElement;
+ static createImage(source?:string,width?:number,height?:number,xOffset?:number,yOffset?:number,imageWidth?:number,imageHeight?:number):HTMLElement;
+ static updateImage(image:HTMLElement,source:string,width:number,height:number,xOffset?:number,yOffset?:number,imageWidth?:number,imageHeight?:number):void;
+
+}
+}
+declare module qx.bom {
+class WebWorker extends qx.core.Object {
+ constructor (src?:string);
+ protected _handleError(e:qx.event.type.Event):void;
+ protected _handleMessage(e:qx.event.type.Event):void;
+ postMessage(msg:string):void;
+
+}
+}
+declare module qx.bom {
+class Window {
+ static close(win:Window):any;
+ static getBlocker():qx.bom.Blocker;
+ static isClosed(win:Window):boolean;
+ static moveTo(win:Window,top:number,left:number):void;
+ static open(url:string,name:string,options:IMap,modal:boolean,useNativeModalDialog:boolean,listener?:Function,self?:any):Window;
+ static resizeTo(win:Window,width:number,height:number):void;
+
+}
+}
+declare module qx.bom.client {
+class Browser {
+ static getDocumentMode():number;
+ static getName():string;
+ static getQuirksMode():boolean;
+ static getVersion():string;
+
+}
+}
+declare module qx.bom.client {
+class Css {
+ static getAlphaImageLoaderNeeded():boolean;
+ static getAppearance():string;
+ static getBorderImage():string;
+ static getBorderImageSyntax():boolean;
+ static getBorderRadius():string;
+ static getBoxModel():string;
+ static getBoxShadow():string;
+ static getBoxSizing():string;
+ static getFilterGradient():boolean;
+ static getFilterTextShadow():boolean;
+ static getFlexboxSyntax():string;
+ static getFloat():string;
+ static getInlineBlock():string;
+ static getLegacyWebkitGradient():boolean;
+ static getLinearGradient():string;
+ static getOpacity():boolean;
+ static getPlaceholder():boolean;
+ static getPointerEvents():boolean;
+ static getRadialGradient():string;
+ static getRgba():boolean;
+ static getTextOverflow():string;
+ static getTextShadow():boolean;
+ static getUserModify():string;
+ static getUserSelect():string;
+ static getUserSelectNone():string;
+
+}
+}
+declare module qx.bom.client {
+class CssAnimation {
+ static getAnimationEnd():string;
+ static getAnimationIteration():string;
+ static getAnimationStart():string;
+ static getFillMode():string;
+ static getKeyFrames():string;
+ static getName():string;
+ static getPlayState():string;
+ static getRequestAnimationFrame():string;
+ static getSupport():any;
+
+}
+}
+declare module qx.bom.client {
+class CssTransform {
+ static get3D():boolean;
+ static getBackFaceVisibility():string;
+ static getName():string;
+ static getOrigin():string;
+ static getPerspective():string;
+ static getPerspectiveOrigin():string;
+ static getStyle():string;
+ static getSupport():any;
+
+}
+}
+declare module qx.bom.client {
+class CssTransition {
+ static getSupport():any;
+ static getTransitionName():string;
+
+}
+}
+declare module qx.bom.client {
+class Device {
+ static detectDeviceType(userAgentString:string):string;
+ static detectMobileDevice(userAgentString:string):boolean;
+ static detectTabletDevice(userAgentString:string):boolean;
+ static getDevicePixelRatio():number;
+ static getName():string;
+ static getTouch():boolean;
+ static getType():string;
+
+}
+}
+declare module qx.bom.client {
+class EcmaScript {
+ static getArrayEvery():boolean;
+ static getArrayFilter():boolean;
+ static getArrayForEach():boolean;
+ static getArrayIndexOf():boolean;
+ static getArrayLastIndexOf():boolean;
+ static getArrayMap():boolean;
+ static getArrayReduce():boolean;
+ static getArrayReduceRight():boolean;
+ static getArraySome():boolean;
+ static getDateNow():boolean;
+ static getErrorToString():boolean;
+ static getFunctionBind():boolean;
+ static getObjectKeys():boolean;
+ static getStackTrace():string;
+ static getStringTrim():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Engine {
+ static getName():string;
+ static getVersion():string;
+
+}
+}
+declare module qx.bom.client {
+class Event {
+ static getCustomEvent():boolean;
+ static getDispatchEvent():boolean;
+ static getHashChange():boolean;
+ static getHelp():boolean;
+ static getMouseEvent():boolean;
+ static getMouseWheel(win?:Window):IMap;
+ static getMsPointer():boolean;
+ static getTouch():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Flash {
+ static getExpressInstall():boolean;
+ static getStrictSecurityModel():boolean;
+ static getVersion():string;
+ static isAvailable():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Html {
+ static getAudio():boolean;
+ static getAudioAif():string;
+ static getAudioAu():string;
+ static getAudioMp3():string;
+ static getAudioOgg():string;
+ static getAudioWav():string;
+ static getCanvas():boolean;
+ static getClassList():boolean;
+ static getCompareDocumentPosition():boolean;
+ static getConsole():boolean;
+ static getContains():boolean;
+ static getDataset():boolean;
+ static getDataUrl(callback:Function):void;
+ static getFileReader():boolean;
+ static getFullScreen():boolean;
+ static getGeoLocation():boolean;
+ static getHistoryState():boolean;
+ static getIsEqualNode():boolean;
+ static getLocalStorage():boolean;
+ static getNaturalDimensions():boolean;
+ static getSelection():string;
+ static getSessionStorage():boolean;
+ static getSvg():boolean;
+ static getTextContent():boolean;
+ static getUserDataStorage():boolean;
+ static getVideo():boolean;
+ static getVideoH264():string;
+ static getVideoOgg():string;
+ static getVideoWebm():string;
+ static getVml():boolean;
+ static getWebWorker():boolean;
+ static getXPath():boolean;
+ static getXul():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Locale {
+ static getLocale():string;
+ static getVariant():string;
+
+}
+}
+declare module qx.bom.client {
+class OperatingSystem {
+ static getName():string;
+ static getVersion():string;
+
+}
+}
+declare module qx.bom.client {
+class Pdfjs {
+ static getPdfjs(callback:Function,context:any):void;
+
+}
+}
+declare module qx.bom.client {
+class PhoneGap {
+ static getNotification():boolean;
+ static getPhoneGap():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Plugin {
+ static getActiveX():boolean;
+ static getDivX():boolean;
+ static getDivXVersion():string;
+ static getGears():boolean;
+ static getPdf():boolean;
+ static getPdfVersion():string;
+ static getQuicktime():boolean;
+ static getQuicktimeVersion():string;
+ static getSilverlight():boolean;
+ static getSilverlightVersion():string;
+ static getSkype():boolean;
+ static getWindowsMedia():boolean;
+ static getWindowsMediaVersion():string;
+
+}
+}
+declare module qx.bom.client {
+class Runtime {
+ static getName():string;
+
+}
+}
+declare module qx.bom.client {
+class Scroll {
+ static getNativeScroll():boolean;
+ static scrollBarOverlayed():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Stylesheet {
+ static getAddImport():boolean;
+ static getCreateStyleSheet():boolean;
+ static getDeleteRule():boolean;
+ static getInsertRule():boolean;
+ static getRemoveImport():boolean;
+
+}
+}
+declare module qx.bom.client {
+class Transport {
+ static getMaxConcurrentRequestCount():number;
+ static getSsl():boolean;
+ static getXmlHttpRequest():string;
+
+}
+}
+declare module qx.bom.client {
+class Xml {
+ static getAttributeNS():boolean;
+ static getCreateElementNS():boolean;
+ static getCreateNode():boolean;
+ static getDomParser():boolean;
+ static getDomProperties():boolean;
+ static getElementsByTagNameNS():boolean;
+ static getImplementation():boolean;
+ static getQualifiedItem():boolean;
+ static getSelectNodes():boolean;
+ static getSelectSingleNode():boolean;
+
+}
+}
+declare module qx.bom.element {
+class Animation {
+ static animate(el:HTMLElement,desc:IMap,duration?:number):qx.bom.element.AnimationHandle;
+ static animateReverse(el:HTMLElement,desc:IMap,duration?:number):qx.bom.element.AnimationHandle;
+
+}
+}
+declare module qx.bom.element {
+class AnimationCss {
+ protected static _animate(el:HTMLElement,desc:IMap,duration?:number,reverse?:boolean):qx.bom.element.AnimationHandle;
+ static animate(el:HTMLElement,desc:IMap,duration?:number):qx.bom.element.AnimationHandle;
+ static animateReverse(el:HTMLElement,desc:IMap,duration?:number):qx.bom.element.AnimationHandle;
+
+}
+}
+declare module qx.bom.element {
+class AnimationHandle extends qx.event.Emitter {
+ constructor ();
+ isEnded():boolean;
+ isPaused():boolean;
+ isPlaying():boolean;
+ pause():void;
+ play():void;
+ stop():void;
+
+}
+}
+declare module qx.bom.element {
+class AnimationJs {
+ protected static _animate(el:HTMLElement,desc:IMap,duration?:number,reverse?:boolean):qx.bom.element.AnimationHandle;
+ static animate(el:HTMLElement,desc:IMap,duration?:number):qx.bom.element.AnimationHandle;
+ static animateReverse(el:HTMLElement,desc:IMap,duration?:number):qx.bom.element.AnimationHandle;
+ static pause(handle:qx.bom.element.AnimationHandle):qx.bom.element.AnimationHandle;
+ static play(handle:qx.bom.element.AnimationHandle):qx.bom.element.AnimationHandle;
+ static stop(handle:qx.bom.element.AnimationHandle):qx.bom.element.AnimationHandle;
+
+}
+}
+declare module qx.bom.element {
+class Attribute {
+ static compile(map:IMap):string;
+ static get(element:HTMLElement,name:string):any;
+ static reset(element:HTMLElement,name:string):void;
+ static set(element:HTMLElement,name:string,value:any):void;
+
+}
+}
+declare module qx.bom.element {
+class Background {
+ static compile(source?:string,repeat?:string,left?:number,top?:number):string;
+ static getStyles(source:string,repeat?:string,left?:number,top?:number):IMap;
+ static set(element:HTMLElement,source?:string,repeat?:string,left?:number,top?:number):void;
+
+}
+}
+declare module qx.bom.element {
+class BoxSizing {
+ static compile(value:string):string;
+ static get(element:HTMLElement):string;
+ static reset(element:HTMLElement):void;
+ static set(element:HTMLElement,value:string):void;
+
+}
+}
+declare module qx.bom.element {
+class Class {
+ static add(element:HTMLElement,name:string):string;
+ static addClasses(element:HTMLElement,classes:string[]):string;
+ static get(element:HTMLElement):string;
+ static has(element:HTMLElement,name:string):boolean;
+ static remove(element:HTMLElement,name:string):string;
+ static removeClasses(element:HTMLElement,classes:string[]):string;
+ static replace(element:HTMLElement,oldName:string,newName:string):string;
+ static toggle(element:HTMLElement,name:string,toggle?:boolean):string;
+
+}
+}
+declare module qx.bom.element {
+class Clip {
+ static compile(map:IMap):string;
+ static get(element:HTMLElement,mode:number):IMap;
+ static reset(element:HTMLElement):void;
+ static set(element:HTMLElement,map:IMap):void;
+
+}
+}
+declare module qx.bom.element {
+class Cursor {
+ static compile(cursor:string):string;
+ static get(element:HTMLElement,mode:number):string;
+ static reset(element:HTMLElement):void;
+ static set(element:HTMLElement,value:string):void;
+
+}
+}
+declare module qx.bom.element {
+class Dataset {
+ static get(element:HTMLElement,name:string):any;
+ static getAll(element:HTMLElement):IMap;
+ static hasData(element:HTMLElement):boolean;
+ static remove(element:HTMLElement,name:string):void;
+ static set(element:HTMLElement,name:string,value:any):void;
+
+}
+}
+declare module qx.bom.element {
+class Decoration {
+ static create(source:string,repeat:string,style:IMap):string;
+ static getAttributes(source:string,repeat:string,style:IMap):string;
+ static getTagName(repeat:string,source?:string):string;
+ static processAlphaFix(style:IMap,repeat:string,source:string):IMap;
+ static update(element:HTMLElement,source:string,repeat:string,style:IMap):void;
+
+}
+}
+declare module qx.bom.element {
+class Dimension {
+ protected static _getBoundingClientRect(element:HTMLElement):IMap;
+ static getContentHeight(element:HTMLElement):number;
+ static getContentSize(element:HTMLElement):IMap;
+ static getContentWidth(element:HTMLElement):number;
+ static getHeight(element:HTMLElement):number;
+ static getSize(element:HTMLElement):IMap;
+ static getWidth(element:HTMLElement):number;
+
+}
+}
+declare module qx.bom.element {
+class Location {
+ static get(elem:HTMLElement,mode?:string):IMap;
+ static getBottom(elem:HTMLElement,mode:string):number;
+ static getLeft(elem:HTMLElement,mode:string):number;
+ static getOffsetParent(element:HTMLElement):HTMLElement;
+ static getPosition(elem:HTMLElement):IMap;
+ static getRelative(elem1:HTMLElement,elem2:HTMLElement,mode1?:string,mode2?:string):IMap;
+ static getRight(elem:HTMLElement,mode:string):number;
+ static getTop(elem:HTMLElement,mode:string):number;
+
+}
+}
+declare module qx.bom.element {
+class Opacity {
+ static compile(opacity:number):string;
+ static get(element:HTMLElement,mode:number):number;
+ static reset(element:HTMLElement):void;
+ static set(element:HTMLElement,opacity:number):void;
+
+}
+}
+declare module qx.bom.element {
+class Scroll {
+ static getScrollbarWidth():number;
+ static intoView(element:HTMLElement,stop?:HTMLElement,alignX?:string,alignY?:string):void;
+ static intoViewX(element:HTMLElement,stop?:HTMLElement,align?:string):void;
+ static intoViewY(element:HTMLElement,stop?:HTMLElement,align?:string):void;
+
+}
+}
+declare module qx.bom.element {
+class Style {
+ static compile(map:IMap):string;
+ static get(element:HTMLElement,name:string,mode:number,smart?:boolean):any;
+ static getCss(element:HTMLElement):string;
+ static isPropertySupported(propertyName:string):boolean;
+ static reset(element:HTMLElement,name:string,smart?:boolean):void;
+ static set(element:HTMLElement,name:string,value:any,smart?:boolean):void;
+ static setCss(element:HTMLElement,value:string):void;
+ static setStyles(element:HTMLElement,styles:IMap,smart?:boolean):void;
+
+}
+}
+declare module qx.bom.element {
+class Transform {
+ protected static _compute3dProperty(property:string,params:qx.data.Array):string;
+ protected static _computeAxisProperties(property:string,params:qx.data.Array):string;
+ static getBackfaceVisibility(el:HTMLElement):boolean;
+ static getCss(transforms:IMap):string;
+ static getOrigin(el:HTMLElement):string;
+ static getPerspective(el:HTMLElement):string;
+ static getPerspectiveOrigin(el:HTMLElement):string;
+ static getStyle(el:HTMLElement):string;
+ static getTransformValue(transforms:IMap):string;
+ static rotate(el:HTMLElement,value:string):void;
+ static scale(el:HTMLElement,value:number):void;
+ static setBackfaceVisibility(el:HTMLElement,value:boolean):void;
+ static setOrigin(el:HTMLElement,value:string):void;
+ static setPerspective(el:HTMLElement,value:number):void;
+ static setPerspectiveOrigin(el:HTMLElement,value:string):void;
+ static setStyle(el:HTMLElement,value:string):void;
+ static skew(el:HTMLElement,value:string):void;
+ static transform(el:HTMLElement,transforms:IMap):void;
+ static translate(el:HTMLElement,value:string):void;
+
+}
+}
+declare module qx.bom.media {
+class Abstract extends qx.core.Object {
+ constructor (media?:any);
+ protected _handleEndedEvent():void;
+ protected _handleLoadedDataEvent():void;
+ protected _handleLoadedMetaDataEvent():void;
+ protected _handlePauseEvent():void;
+ protected _handlePlayEvent():void;
+ protected _handleTimeUpdateEvent():void;
+ protected _handleVolumeChangeEvent():void;
+ canPlayType(type:string):boolean;
+ getAutoplay():boolean;
+ getCurrentTime():number;
+ getDuration():number;
+ getId():string;
+ getMediaObject():any;
+ getPreload():string;
+ getSource():string;
+ getVolume():number;
+ hasControls():boolean;
+ hideControls():void;
+ isEnded():boolean;
+ isLoop():boolean;
+ isMuted():boolean;
+ isPaused():boolean;
+ pause():void;
+ play():void;
+ setAutoplay(autoplay:boolean):void;
+ setCurrentTime(value:number):void;
+ setId(id:string):void;
+ setLoop(value:boolean):void;
+ setMuted(muted:boolean):void;
+ setPreload(preload:string):void;
+ setSource(source:string):void;
+ setVolume(volume:number):void;
+ showControls():void;
+
+}
+}
+declare module qx.bom.media {
+class Audio extends qx.bom.media.Abstract {
+ constructor (source?:string);
+
+}
+}
+declare module qx.bom.media {
+class Video extends qx.bom.media.Abstract {
+ constructor (source?:string);
+ getHeight():number;
+ getPoster():string;
+ getVideoHeight():number;
+ getVideoWidth():number;
+ getWidth():number;
+ setHeight(value:number):void;
+ setPoster(value:string):void;
+ setWidth(value:number):void;
+
+}
+}
+declare module qx.bom.request {
+interface IRequest {
+ abort():void;
+ getAllResponseHeaders():string;
+ getResponseHeader(header:string):string;
+ onabort():void;
+ onerror():void;
+ onload():void;
+ onloadend():void;
+ onreadystatechange():void;
+ ontimeout():void;
+ open(method:string,url:string,async?:boolean):void;
+ send(data?:string):void;
+ setRequestHeader(key:string,value:string):void;
+
+}
+}
+declare module qx.bom.request {
+class Jsonp extends qx.bom.request.Script {
+ constructor ();
+ callback(data:any):void;
+ getGeneratedUrl():string;
+ setCallbackName(name:string):qx.bom.request.Jsonp;
+ setCallbackParam(param:string):qx.bom.request.Jsonp;
+ setPrefix(prefix:string):void;
+
+}
+}
+declare module qx.bom.request {
+class Script {
+ constructor ();
+ protected _emit(event:string):void;
+ protected _getScriptElement():HTMLElement;
+ protected _getUrl():string;
+ protected _onNativeError():void;
+ protected _onNativeLoad():void;
+ protected _onTimeout():void;
+ protected _readyStateChange(readyState:number):void;
+ protected _success():void;
+ abort():qx.bom.request.Script;
+ dispose():void;
+ getAllResponseHeaders():string;
+ getResponseHeader(key:string):string;
+ isDisposed():boolean;
+ on(name:string,listener:Function,ctx?:any):qx.bom.request.Script;
+ onabort():void;
+ onerror():void;
+ onload():void;
+ onloadend():void;
+ onreadystatechange():void;
+ ontimeout():void;
+ open(method:string,url:string):void;
+ send():qx.bom.request.Script;
+ setDetermineSuccess(check:Function):void;
+ setRequestHeader(key:string,value:string):qx.bom.request.Script;
+
+}
+}
+declare module qx.bom.request {
+class SimpleXhr extends qx.event.Emitter {
+ constructor (url?:string,method?:string);
+ protected _createResponseParser():qx.util.ResponseParser;
+ protected _createTransport():qx.bom.request.IRequest;
+ protected _onAbort():void;
+ protected _onError():void;
+ protected _onLoadEnd():void;
+ protected _onReadyStateChange():void;
+ protected _onTimeout():void;
+ protected _registerTransportListener(transport:qx.bom.request.IRequest):qx.bom.request.IRequest;
+ protected _serializeData(data:string,contentType?:string):string;
+ protected _setResponse(response:string):void;
+ abort():qx.bom.request.SimpleXhr;
+ dispose():boolean;
+ getAllResponseHeaders():string;
+ getMethod():string;
+ getRequestData():string;
+ getRequestHeader(key:string):string;
+ getResponse():string;
+ getResponseHeader(header:string):string;
+ getTimeout():number;
+ getTransport():any;
+ getUrl():string;
+ isCaching():boolean;
+ isDisposed():boolean;
+ isDone():boolean;
+ send():void;
+ setMethod(method:string):qx.bom.request.SimpleXhr;
+ setParser(parser:string):Function;
+ setRequestData(data:string):qx.bom.request.SimpleXhr;
+ setRequestHeader(key:string,value:string):qx.bom.request.SimpleXhr;
+ setTimeout(millis:number):qx.bom.request.SimpleXhr;
+ setUrl(url:string):qx.bom.request.SimpleXhr;
+ toHashCode():number;
+ useCaching(value:boolean):qx.bom.request.SimpleXhr;
+
+}
+}
+declare module qx.bom.request {
+class Xhr {
+ constructor ();
+ protected _createNativeXhr():any;
+ protected _emit(event:string):void;
+ protected _getProtocol():string;
+ abort():qx.bom.request.Xhr;
+ dispose():boolean;
+ getAllResponseHeaders():string;
+ getRequest():any;
+ getResponseHeader(header:string):string;
+ isDisposed():boolean;
+ on(name:string,listener:Function,ctx?:any):qx.bom.request.Xhr;
+ onabort():void;
+ onerror():void;
+ onload():void;
+ onloadend():void;
+ onreadystatechange():void;
+ ontimeout():void;
+ open(method?:string,url?:string,async?:boolean,user?:string,password?:string):void;
+ overrideMimeType(mimeType:string):qx.bom.request.Xhr;
+ send(data?:string):qx.bom.request.Xhr;
+ setRequestHeader(key:string,value:string):qx.bom.request.Xhr;
+
+}
+}
+declare module qx.bom.rest {
+class Resource extends qx.event.Emitter {
+ constructor (description?:IMap);
+ static placeholdersFromUrl(url:string):qx.data.Array;
+ protected _getRequest():qx.bom.request.SimpleXhr;
+ protected _getRequestConfig(action:string,params:IMap):IMap;
+ protected _getRequestHandler():IMap;
+ protected _getThrottleCount():number;
+ protected _getThrottleLimit():number;
+ protected _startPoll(action:string,listener:Function,interval:number):void;
+ abort(...varargs:string[]):void;
+ configureRequest(callback:Function):void;
+ destruct():void;
+ dispose():void;
+ getRequestsByAction(action:string):qx.data.Array;
+ invoke(action:string,params:IMap,data:IMap):number;
+ isDisposed():boolean;
+ longPoll(action:string):string;
+ map(action:string,method:string,url:string,check?:IMap):void;
+ poll(action:string,interval:number,params?:IMap,immediately?:boolean):void;
+ refresh(action:string):void;
+ restartPollByAction(action:string):void;
+ setBaseUrl(baseUrl:string):void;
+ setRequestFactory(fn:Function):void;
+ setRequestHandler(handler:IMap):void;
+ stopPollByAction(action:string):void;
+
+}
+}
+declare module qx.bom.storage {
+class Memory {
+ constructor ();
+ static getLocal():qx.bom.storage.Memory;
+ static getSession():qx.bom.storage.Memory;
+ clear():void;
+ forEach(callback:Function,scope:any):void;
+ getItem(key:string):any;
+ getKey(index:number):string;
+ getLength():number;
+ getStorage():IMap;
+ removeItem(key:string):void;
+ setItem(key:string,value:any):void;
+
+}
+}
+declare module qx.bom.storage {
+class UserData {
+ constructor (storeName?:string);
+ static getLocal():qx.bom.storage.UserData;
+ static getSession():qx.bom.storage.UserData;
+ clear():void;
+ forEach(callback:Function,scope:any):void;
+ getItem(key:string):any;
+ getKey(index:number):string;
+ getLength():number;
+ getStorage():IMap;
+ removeItem(key:string):void;
+ setItem(key:string,value:any):void;
+
+}
+}
+declare module qx.bom.storage {
+class Web {
+ constructor (type?:string);
+ static getLocal():qx.bom.storage.Web;
+ static getSession():qx.bom.storage.Web;
+ clear():void;
+ forEach(callback:Function,scope:any):void;
+ getItem(key:string):any;
+ getKey(index:number):string;
+ getLength():number;
+ getStorage():any;
+ removeItem(key:string):void;
+ setItem(key:string,value:any):void;
+
+}
+}
+declare module qx.bom.webfonts {
+class Manager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.bom.webfonts.Manager;
+ getPreferredFormats():string[];
+ remove(familyName:string):void;
+ removeStyleSheet():void;
+ require(familyName:string,sourcesList:string[],callback?:Function,context?:any):void;
+
+}
+}
+declare module qx.bom.webfonts {
+class Validator extends qx.core.Object {
+ constructor (fontFamily?:string);
+ static removeDefaultHelperElements():void;
+ protected _applyFontFamily(value:any,old:any):void;
+ protected _getHelperElement(fontFamily:string):HTMLElement;
+ protected _getRequestedHelpers():IMap;
+ protected _isFontValid():boolean;
+ protected _reset():void;
+ getFontFamily():any;
+ getTimeout():number;
+ protected initFontFamily(value:any):any;
+ protected initTimeout(value:any):number;
+ resetFontFamily():void;
+ resetTimeout():void;
+ setFontFamily(value:any):any;
+ setTimeout(value:any):number;
+ validate():void;
+
+}
+}
+declare module qx.bom.webfonts {
+class WebFont extends qx.bom.Font {
+ protected _applySources(value:any,old:any):void;
+ protected _onWebFontChangeStatus(ev:qx.event.type.Data):void;
+ protected _quoteFontFamily(familyName:string):string;
+ getSources():any;
+ protected initSources(value:any):any;
+ resetSources():void;
+ setSources(value:any):any;
+
+}
+}
+declare module qx.core {
+class Aspect {
+ static addAdvice(fcn:Function,position?:string,type?:string,name?:string):void;
+ static wrap(fullName:string,fcn:Function,type:string):Function;
+
+}
+}
+declare module qx.core {
+class Assert {
+ static assert(condition:any,msg:string):void;
+ static assertArgumentsCount(args:any,minCount:number,maxCount:number,msg:string):void;
+ static assertArray(value:any,msg:string):void;
+ static assertArrayEquals(expected:qx.data.Array,found:qx.data.Array,msg:string):void;
+ static assertBoolean(value:any,msg:string):void;
+ static assertCssColor(expected:string,value:string,msg:string):void;
+ static assertElement(value:any,msg:string):void;
+ static assertEquals(expected:any,found:any,msg:string):void;
+ static assertEventFired(obj:any,event:string,invokeFunc:Function,listenerFunc?:Function,msg?:string):void;
+ static assertEventNotFired(obj:any,event:string,invokeFunc:Function,msg:string):void;
+ static assertException(callback:Function,exception?:ErrorImpl,re?:string,msg?:string):void;
+ static assertFalse(value:boolean,msg:string):void;
+ static assertFunction(value:any,msg:string):void;
+ static assertIdentical(expected:any,found:any,msg:string):void;
+ static assertInArray(value:any,array:qx.data.Array,msg:string):void;
+ static assertInRange(value:any,min:number,max:number,msg:string):void;
+ static assertInstance(value:any,clazz:qx.Class,msg:string):void;
+ static assertInteger(value:any,msg:string):void;
+ static assertInterface(value:any,iface:qx.Class,msg:string):void;
+ static assertJsonEquals(expected:any,found:any,msg:string):void;
+ static assertKeyInMap(value:any,map:IMap,msg:string):void;
+ static assertMap(value:any,msg:string):void;
+ static assertMatch(str:string,re:string,msg:string):void;
+ static assertNotEquals(expected:any,found:any,msg:string):void;
+ static assertNotIdentical(expected:any,found:any,msg:string):void;
+ static assertNotNull(value:any,msg:string):void;
+ static assertNotUndefined(value:any,msg:string):void;
+ static assertNull(value:any,msg:string):void;
+ static assertNumber(value:any,msg:string):void;
+ static assertObject(value:any,msg:string):void;
+ static assertPositiveInteger(value:any,msg:string):void;
+ static assertPositiveNumber(value:any,msg:string):void;
+ static assertQxObject(value:any,msg:string):void;
+ static assertQxWidget(value:any,msg:string):void;
+ static assertRegExp(value:any,msg:string):void;
+ static assertString(value:any,msg:string):void;
+ static assertTrue(value:boolean,msg:string):void;
+ static assertType(value:any,type:string,msg:string):void;
+ static assertUndefined(value:any,msg:string):void;
+ static fail(msg:string,compact:boolean):void;
+
+}
+}
+declare module qx.core {
+class AssertionError extends qx.type.BaseError {
+ constructor (comment?:string,failMessage?:string);
+ getStackTrace():string[];
+
+}
+}
+declare module qx.core {
+class BaseInit {
+ static getApplication():qx.core.Object;
+ static ready():void;
+
+}
+}
+declare module qx.core {
+class Environment {
+ protected static _getClassNameFromEnvKey(key:string):qx.data.Array;
+ protected static _initDefaultQxValues():void;
+ static add(key:string,check:any):void;
+ static addAsync(key:string,check:Function):void;
+ static filter(map:IMap):qx.data.Array;
+ static get(key:string):any;
+ static getAsync(key:string,callback:Function,self:any):void;
+ static getAsyncChecks():IMap;
+ static getChecks():IMap;
+ static invalidateCacheKey(key:string):void;
+ static select(key:string,values:IMap):any;
+ static selectAsync(key:string,values:IMap,self:any):void;
+
+}
+}
+declare module qx.core {
+class GlobalError extends ErrorImpl {
+ constructor (exc?:ErrorImpl,args?:qx.data.Array);
+ getArguments():any;
+ getSourceException():ErrorImpl;
+
+}
+}
+declare module qx.core {
+class Init {
+
+}
+}
+declare module qx.core {
+class MAssert {
+ assert(condition:any,msg:string):void;
+ assertArgumentsCount(args:any,minCount:number,maxCount:number,msg:string):void;
+ assertArray(value:any,msg:string):void;
+ assertArrayEquals(expected:qx.data.Array,found:qx.data.Array,msg:string):void;
+ assertBoolean(value:any,msg:string):void;
+ assertCssColor(expected:string,value:string,msg:string):void;
+ assertElement(value:any,msg:string):void;
+ assertEquals(expected:any,found:any,msg:string):void;
+ assertEventFired(obj:any,event:string,invokeFunc:Function,listener?:Function,msg?:string):void;
+ assertEventNotFired(obj:any,event:string,invokeFunc:Function,msg:string):void;
+ assertException(callback:Function,exception?:ErrorImpl,re?:string,msg?:string):void;
+ assertFalse(value:boolean,msg:string):void;
+ assertFunction(value:any,msg:string):void;
+ assertIdentical(expected:any,found:any,msg:string):void;
+ assertInArray(value:any,array:qx.data.Array,msg:string):void;
+ assertInRange(value:any,min:number,max:number,msg:string):void;
+ assertInstance(value:any,clazz:qx.Class,msg:string):void;
+ assertInteger(value:any,msg:string):void;
+ assertInterface(value:any,iface:qx.Class,msg:string):void;
+ assertJsonEquals(expected:any,found:any,msg:string):void;
+ assertKeyInMap(value:any,map:IMap,msg:string):void;
+ assertMap(value:any,msg:string):void;
+ assertMatch(str:string,re:RegExp,msg:string):void;
+ assertNotEquals(expected:any,found:any,msg:string):void;
+ assertNotIdentical(expected:any,found:any,msg:string):void;
+ assertNotNull(value:any,msg:string):void;
+ assertNotUndefined(value:any,msg:string):void;
+ assertNull(value:any,msg:string):void;
+ assertNumber(value:any,msg:string):void;
+ assertObject(value:any,msg:string):void;
+ assertPositiveInteger(value:any,msg:string):void;
+ assertPositiveNumber(value:any,msg:string):void;
+ assertQxObject(value:any,msg:string):void;
+ assertQxWidget(value:any,msg:string):void;
+ assertRegExp(value:any,msg:string):void;
+ assertString(value:any,msg:string):void;
+ assertTrue(value:boolean,msg:string):void;
+ assertType(value:any,type:string,msg:string):void;
+ assertUndefined(value:any,msg:string):void;
+ fail(msg:string,compact:boolean):void;
+
+}
+}
+declare module qx.core {
+class MBindTo {
+ bindTo(func:Function,...varargs:any[]):Function;
+
+}
+}
+declare module qx.core {
+class MEvent {
+ addListener(type:string,listener:Function,self?:any,capture?:boolean):string;
+ addListenerOnce(type:string,listener:Function,self?:any,capture?:boolean):string;
+ dispatchEvent(evt:qx.event.type.Event):boolean;
+ fireDataEvent(type:string,data:any,oldData?:any,cancelable?:boolean):boolean;
+ fireEvent(type:string,clazz?:qx.Class,args?:qx.data.Array):boolean;
+ fireNonBubblingEvent(type:string,clazz?:qx.Class,args?:qx.data.Array):boolean;
+ hasListener(type:string,capture?:boolean):boolean;
+ removeListener(type:string,listener:Function,self?:any,capture?:boolean):boolean;
+ removeListenerById(id:string):boolean;
+
+}
+}
+declare module qx.core {
+class MLogging {
+ debug(...varargs:any[]):void;
+ error(...varargs:any[]):void;
+ info(...varargs:any[]):void;
+ trace():void;
+ warn(...varargs:any[]):void;
+
+}
+}
+declare module qx.core {
+class MProperty {
+ get(prop:string):any;
+ reset(prop:string):void;
+ set(data:IMap,value?:any):any;
+
+}
+}
+declare module qx.core {
+class Object {
+ addListener(type:string,listener:Function,self?:any,capture?:boolean):string;
+ addListenerOnce(type:string,listener:Function,self?:any,capture?:boolean):string;
+ dispatchEvent(evt:qx.event.type.Event):any;
+ fireDataEvent(type:string,data:any,oldData?:any,cancelable?:boolean):boolean;
+ fireEvent(type:string,clazz?:qx.Class,args?:qx.data.Array):boolean;
+ fireNonBubblingEvent(type:string,clazz?:qx.Class,args?:qx.data.Array):boolean;
+ hasListener(type:string,capture?:boolean):boolean;
+ removeListener(type:string,listener:Function,self?:any,capture?:boolean):boolean;
+ removeListenerById(id:string):boolean;
+ assert(condition:any,msg:string):void;
+ assertArgumentsCount(args:any,minCount:number,maxCount:number,msg:string):void;
+ assertArray(value:any,msg:string):void;
+ assertArrayEquals(expected:qx.data.Array,found:qx.data.Array,msg:string):void;
+ assertBoolean(value:any,msg:string):void;
+ assertCssColor(expected:string,value:string,msg:string):void;
+ assertElement(value:any,msg:string):void;
+ assertEquals(expected:any,found:any,msg:string):void;
+ assertEventFired(obj:any,event:string,invokeFunc:Function,listener?:Function,msg?:string):void;
+ assertEventNotFired(obj:any,event:string,invokeFunc:Function,msg:string):void;
+ assertException(callback:Function,exception?:ErrorImpl,re?:string,msg?:string):void;
+ assertFalse(value:boolean,msg:string):void;
+ assertFunction(value:any,msg:string):void;
+ assertIdentical(expected:any,found:any,msg:string):void;
+ assertInArray(value:any,array:qx.data.Array,msg:string):void;
+ assertInRange(value:any,min:number,max:number,msg:string):void;
+ assertInstance(value:any,clazz:qx.Class,msg:string):void;
+ assertInteger(value:any,msg:string):void;
+ assertInterface(value:any,iface:qx.Class,msg:string):void;
+ assertJsonEquals(expected:any,found:any,msg:string):void;
+ assertKeyInMap(value:any,map:IMap,msg:string):void;
+ assertMap(value:any,msg:string):void;
+ assertMatch(str:string,re:RegExp,msg:string):void;
+ assertNotEquals(expected:any,found:any,msg:string):void;
+ assertNotIdentical(expected:any,found:any,msg:string):void;
+ assertNotNull(value:any,msg:string):void;
+ assertNotUndefined(value:any,msg:string):void;
+ assertNull(value:any,msg:string):void;
+ assertNumber(value:any,msg:string):void;
+ assertObject(value:any,msg:string):void;
+ assertPositiveInteger(value:any,msg:string):void;
+ assertPositiveNumber(value:any,msg:string):void;
+ assertQxObject(value:any,msg:string):void;
+ assertQxWidget(value:any,msg:string):void;
+ assertRegExp(value:any,msg:string):void;
+ assertString(value:any,msg:string):void;
+ assertTrue(value:boolean,msg:string):void;
+ assertType(value:any,type:string,msg:string):void;
+ assertUndefined(value:any,msg:string):void;
+ fail(msg:string,compact:boolean):void;
+ get(prop:string):any;
+ reset(prop:string):void;
+ set(data:IMap,value?:any):any;
+ debug(...varargs:any[]):void;
+ error(...varargs:any[]):void;
+ info(...varargs:any[]):void;
+ trace():void;
+ warn(...varargs:any[]):void;
+ bind(sourcePropertyChain:string,targetObject:qx.core.Object,targetProperty:string,options:IMap):any;
+ getBindings():qx.data.Array;
+ removeAllBindings():void;
+ removeBinding(id:any):void;
+ removeRelatedBindings(relatedObject:qx.core.Object):void;
+ constructor ();
+ protected _disposeArray(field:string):void;
+ protected _disposeMap(field:string):void;
+ protected _disposeObjects(...varargs:any[]):void;
+ protected _disposeSingletonObjects(...varargs:any[]):void;
+ base(args:any,...varargs:any[]):any;
+ clone():qx.core.Object;
+ dispose():void;
+ getUserData(key:string):any;
+ isDisposed():boolean;
+ self(args:any):any;
+ setUserData(key:string,value:any):void;
+ toHashCode():number;
+
+}
+}
+declare module qx.core {
+class ObjectRegistry {
+ static clearHashCode(obj:any):void;
+ static fromHashCode(hash:string):qx.core.Object;
+ static getNextHash():number;
+ static getPostId():number;
+ static getRegistry():any;
+ static getStackTraces():IMap;
+ static register(obj:any):void;
+ static shutdown():void;
+ static toHashCode(obj:any):string;
+ static unregister(obj:any):void;
+
+}
+}
+declare module qx.core {
+class Property {
+ static attachMethods(clazz:qx.Class,name:string,config:IMap):void;
+ static attachRefreshInheritables(clazz:qx.Class):void;
+ static error(obj:qx.core.Object,id:number,property:string,variant:string,value:any):void;
+ static executeOptimizedGetter(instance:any,clazz:qx.Class,name:string,variant:string):any;
+ static executeOptimizedSetter(instance:any,clazz:qx.Class,name:string,variant:string,args:any):any;
+
+}
+}
+declare module qx.core {
+class ValidationError extends qx.type.BaseError {
+
+}
+}
+declare module qx.core {
+class WindowError extends ErrorImpl {
+ constructor (failMessage?:string,uri?:string,lineNumber?:number);
+ getLineNumber():number;
+ getUri():string;
+
+}
+}
+declare module qx.data {
+class Array extends qx.core.Object implements qx.data.IListData {
+ contains(item:any):boolean;
+ getItem(index:number):any;
+ getLength():number;
+ setItem(index:number,item:any):void;
+ splice(startIndex:number,amount:number,...varargs:any[]):qx.data.Array;
+ toArray():qx.data.Array;
+ constructor (param?:any);
+ append(array:qx.data.Array):void;
+ concat(array:qx.data.Array):qx.data.Array;
+ copy():qx.data.Array;
+ equals(array:qx.data.Array):boolean;
+ every(callback:Function,self?:any):boolean;
+ filter(callback:Function,self?:any):qx.data.Array;
+ forEach(callback:Function,context:any):void;
+ getAutoDisposeItems():boolean;
+ indexOf(item:any):number;
+ protected initAutoDisposeItems(value:any):boolean;
+ insertAfter(after:any,item:any):void;
+ insertAt(index:number,item:any):void;
+ insertBefore(before:any,item:any):void;
+ isAutoDisposeItems():boolean;
+ join(connector:string):string;
+ lastIndexOf(item:any):number;
+ map(callback:Function,self?:any):qx.data.Array;
+ max():number;
+ min():number;
+ pop():any;
+ push(...varargs:any[]):number;
+ reduce(callback:Function,initValue?:any):any;
+ reduceRight(callback:Function,initValue?:any):any;
+ remove(item:any):any;
+ removeAll():qx.data.Array;
+ removeAt(index:number):any;
+ resetAutoDisposeItems():void;
+ reverse():void;
+ setAutoDisposeItems(value:any):boolean;
+ shift():any;
+ slice(from:number,to?:number):qx.data.Array;
+ some(callback:Function,self?:any):boolean;
+ sort(func:Function):void;
+ sum():number;
+ toggleAutoDisposeItems():boolean;
+ unshift(...varargs:any[]):number;
+
+}
+}
+declare module qx.data {
+class Conversion {
+ static toBoolean(value:any):boolean;
+ static toNumber(value:any):number;
+
+}
+}
+declare module qx.data {
+interface IListData {
+ contains(item:any):boolean;
+ getItem(index:number):any;
+ getLength():number;
+ setItem(index:number,item:any):void;
+ splice(startIndex:number,amount:number,...varargs:any[]):qx.data.Array;
+ toArray():qx.data.Array;
+
+}
+}
+declare module qx.data {
+class MBinding {
+ constructor ();
+ bind(sourcePropertyChain:string,targetObject:qx.core.Object,targetProperty:string,options:IMap):any;
+ getBindings():qx.data.Array;
+ removeAllBindings():void;
+ removeBinding(id:any):void;
+ removeRelatedBindings(relatedObject:qx.core.Object):void;
+
+}
+}
+declare module qx.data {
+class SingleValueBinding {
+ static bind(sourceObject:qx.core.Object,sourcePropertyChain:string,targetObject:qx.core.Object,targetPropertyChain:string,options?:IMap):any;
+ static getAllBindings():IMap;
+ static getAllBindingsForObject(object:qx.core.Object):qx.data.Array;
+ static removeAllBindings():void;
+ static removeAllBindingsForObject(object:qx.core.Object):void;
+ static removeBindingFromObject(sourceObject:qx.core.Object,id:any):void;
+ static removeRelatedBindings(object:qx.core.Object,relatedObject:qx.core.Object):void;
+ static resolvePropertyChain(o:qx.core.Object,propertyChain:string):any;
+ static showAllBindingsInLog():void;
+ static showBindingInLog(object:qx.core.Object,id:any):void;
+ static updateTarget(sourceObject:qx.core.Object,sourcePropertyChain:string,targetObject:qx.core.Object,targetPropertyChain:string,options:IMap):void;
+
+}
+}
+declare module qx.data.controller {
+class Form extends qx.core.Object {
+ constructor (model?:qx.core.Object,target?:qx.ui.form.Form,selfUpdate?:boolean);
+ protected _applyModel(value:qx.core.Object,old:qx.core.Object):void;
+ protected _applyTarget(value:qx.ui.form.Form,old:qx.ui.form.Form):void;
+ addBindingOptions(name:string,model2target:IMap,target2model:IMap):void;
+ createModel(includeBubbleEvents:boolean):qx.core.Object;
+ getModel():qx.core.Object;
+ getTarget():qx.ui.form.Form;
+ protected initModel(value:any):qx.core.Object;
+ protected initTarget(value:any):qx.ui.form.Form;
+ resetModel():void;
+ resetTarget():void;
+ setModel(value:any):qx.core.Object;
+ setTarget(value:any):qx.ui.form.Form;
+ updateModel():void;
+
+}
+}
+declare module qx.data.controller {
+interface IControllerDelegate {
+ bindItem(controller:any,item:qx.ui.core.Widget,id:any):void;
+ configureItem(item:any):void;
+ createItem():qx.ui.core.Widget;
+ filter(data:any):boolean;
+
+}
+}
+declare module qx.data.controller {
+interface ISelection {
+ getSelection():qx.data.IListData;
+ resetSelection():void;
+ setSelection(value:qx.data.IListData):void;
+
+}
+}
+declare module qx.data.controller {
+class List extends qx.core.Object implements qx.data.controller.ISelection {
+ getSelection():qx.data.IListData;
+ resetSelection():void;
+ setSelection(value:qx.data.IListData):void;
+ constructor (model?:qx.data.Array,target?:qx.ui.core.Widget,labelPath?:string);
+ protected _applyDelegate(value:qx.core.Object,old:qx.core.Object):void;
+ protected _applyIconOptions(value:IMap,old:IMap):void;
+ protected _applyIconPath(value:string,old:string):void;
+ protected _applyLabelOptions(value:IMap,old:IMap):void;
+ protected _applyLabelPath(value:string,old:string):void;
+ protected _applyModel(value:qx.data.Array,old:qx.data.Array):void;
+ protected _applyTarget(value:qx.ui.core.Widget,old:qx.ui.core.Widget):void;
+ protected _bindListItem(item:qx.ui.form.ListItem,index:number):void;
+ protected _createItem():qx.ui.form.ListItem;
+ protected _onBindingSet(index:number,sourceObject:qx.core.Object,targetObject:qx.core.Object):void;
+ protected _removeBindingsFrom(item:number):void;
+ protected _setBindItem(value:any,old:any):void;
+ protected _setConfigureItem(value:any,old:any):void;
+ protected _setCreateItem(value:any,old:any):void;
+ protected _setFilter(value:Function,old:Function):void;
+ bindDefaultProperties(item:qx.ui.form.ListItem,index:number):void;
+ bindProperty(sourcePath:string,targetProperty:string,options:IMap,targetWidget:qx.ui.core.Widget,index:number):void;
+ bindPropertyReverse(targetPath:string,sourcePath:string,options:IMap,sourceWidget:qx.ui.core.Widget,index:number):void;
+ getDelegate():any;
+ getIconOptions():any;
+ getIconPath():string;
+ getLabelOptions():any;
+ getLabelPath():string;
+ getModel():qx.data.IListData;
+ getTarget():any;
+ getVisibleModels():qx.data.Array;
+ protected initDelegate(value:any):any;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ protected initModel(value:any):qx.data.IListData;
+ protected initTarget(value:any):any;
+ resetDelegate():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ resetModel():void;
+ resetTarget():void;
+ setDelegate(value:any):any;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+ setModel(value:any):qx.data.IListData;
+ setTarget(value:any):any;
+ syncWidget():void;
+ update():void;
+
+}
+}
+declare module qx.data.controller {
+class MSelection {
+ constructor ();
+ protected _addChangeTargetListener(value:qx.ui.core.Widget,old:qx.ui.core.Widget):void;
+ protected _applySelection(value:qx.data.Array,old:qx.data.Array):void;
+ protected _changeTargetSelection():void;
+ protected _endSelectionModification():void;
+ protected _inSelectionModification():boolean;
+ protected _startSelectionModification():void;
+ protected _updateSelection():void;
+ getSelection():qx.data.Array;
+ protected initSelection(value:any):qx.data.Array;
+ resetSelection():void;
+ setSelection(value:any):qx.data.Array;
+
+}
+}
+declare module qx.data.controller {
+class Object extends qx.core.Object {
+ constructor (model?:qx.core.Object);
+ protected _applyModel(value:qx.core.Object,old:qx.core.Object):void;
+ addTarget(targetObject:qx.core.Object,targetProperty:string,sourceProperty:string,bidirectional?:boolean,options?:IMap,reverseOptions?:IMap):void;
+ getModel():qx.core.Object;
+ protected initModel(value:any):qx.core.Object;
+ removeTarget(targetObject:qx.core.Object,targetProperty:string,sourceProperty:string):void;
+ resetModel():void;
+ setModel(value:any):qx.core.Object;
+
+}
+}
+declare module qx.data.controller {
+class Tree extends qx.core.Object implements qx.data.controller.ISelection {
+ getSelection():qx.data.IListData;
+ resetSelection():void;
+ setSelection(value:qx.data.IListData):void;
+ constructor (model?:qx.core.Object,target?:qx.ui.tree.Tree,childPath?:string,labelPath?:string);
+ protected _applyChildPath(value:string,old:string):void;
+ protected _applyDelegate(value:qx.core.Object,old:qx.core.Object):void;
+ protected _applyIconOptions(value:IMap,old:IMap):void;
+ protected _applyIconPath(value:string,old:string):void;
+ protected _applyLabelOptions(value:IMap,old:IMap):void;
+ protected _applyLabelPath(value:string,old:string):void;
+ protected _applyModel(value:qx.core.Object,old:qx.core.Object):void;
+ protected _applyTarget(value:qx.ui.tree.Tree,old:qx.ui.tree.Tree):void;
+ protected _createItem():qx.ui.tree.core.AbstractTreeItem;
+ protected _setBindItem(value:any,old:any):void;
+ protected _setConfigureItem(value:any,old:any):void;
+ protected _setCreateItem(value:any,old:any):void;
+ bindDefaultProperties(treeNode:qx.ui.tree.core.AbstractTreeItem,modelNode:qx.core.Object):void;
+ bindProperty(sourcePath:string,targetPath:string,options:IMap,targetWidget:qx.ui.tree.core.AbstractTreeItem,modelNode:any):void;
+ bindPropertyReverse(targetPath:string,sourcePath:string,options:IMap,sourceWidget:qx.ui.tree.core.AbstractTreeItem,modelNode:any):void;
+ getChildPath():string;
+ getDelegate():any;
+ getIconOptions():any;
+ getIconPath():string;
+ getLabelOptions():any;
+ getLabelPath():string;
+ getModel():qx.core.Object;
+ getTarget():any;
+ protected initChildPath(value:any):string;
+ protected initDelegate(value:any):any;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ protected initModel(value:any):qx.core.Object;
+ protected initTarget(value:any):any;
+ resetChildPath():void;
+ resetDelegate():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ resetModel():void;
+ resetTarget():void;
+ setChildPath(value:any):string;
+ setDelegate(value:any):any;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+ setModel(value:any):qx.core.Object;
+ setTarget(value:any):any;
+
+}
+}
+declare module qx.data.marshal {
+interface IMarshaler {
+ toClass(data:any,includeBubbleEvents:boolean):void;
+ toModel(data:any):qx.core.Object;
+
+}
+}
+declare module qx.data.marshal {
+interface IMarshalerDelegate {
+ getArrayClass(parentProperty:string,depth:number):qx.Class;
+ getModelClass(properties:string,object:IMap,parentProperty:string,depth:number):qx.Class;
+ getModelMixins(properties:string,parentProperty:string,depth:number):qx.data.Array;
+ getModelSuperClass(properties:string,parentProperty:string,depth:number):qx.Class;
+ getPropertyMapping(property:string,properties:string):string;
+ getValidationRule(properties:string,propertyName:string):Function;
+ ignore(properties:string,parentProperty:string,depth:number):boolean;
+
+}
+}
+declare module qx.data.marshal {
+class Json extends qx.core.Object implements qx.data.marshal.IMarshaler {
+ toClass(data:any,includeBubbleEvents:boolean):void;
+ toModel(data:any):qx.core.Object;
+ constructor (delegate?:any);
+ static createModel(data:any,includeBubbleEvents:boolean):qx.core.Object;
+
+}
+}
+declare module qx.data.marshal {
+class MEventBubbling {
+ protected _applyEventPropagation(value:any,old:any,name:string):void;
+ protected _registerEventChaining(value:any,old:any,name:string):void;
+
+}
+}
+declare module qx.data.store {
+interface IStoreDelegate {
+ configureRequest(request:any):void;
+ manipulateData(data:any):any;
+
+}
+}
+declare module qx.data.store {
+class Json extends qx.core.Object {
+ constructor (url?:string,delegate?:any);
+ protected _applyUrl(value:string,old:string):void;
+ protected _createRequest(url:string):void;
+ protected _getRequest():any;
+ protected _onChangePhase(ev:qx.event.type.Data):void;
+ protected _onFail(ev:qx.event.type.Event):void;
+ protected _onSuccess(ev:qx.event.type.Event):void;
+ protected _setRequest(request:any):void;
+ getModel():any;
+ getState():any;
+ getUrl():string;
+ protected initModel(value:any):any;
+ protected initState(value:any):any;
+ protected initUrl(value:any):string;
+ reload():void;
+ resetModel():void;
+ resetState():void;
+ resetUrl():void;
+ setModel(value:any):any;
+ setState(value:any):any;
+ setUrl(value:any):string;
+
+}
+}
+declare module qx.data.store {
+class Jsonp extends qx.data.store.Json {
+ constructor (url?:string,delegate?:any,callbackParam?:string);
+ getCallbackName():string;
+ getCallbackParam():string;
+ protected initCallbackName(value:any):string;
+ protected initCallbackParam(value:any):string;
+ resetCallbackName():void;
+ resetCallbackParam():void;
+ setCallbackName(value:any):string;
+ setCallbackParam(value:any):string;
+
+}
+}
+declare module qx.data.store {
+class Offline extends qx.core.Object {
+ constructor (key?:string,storage?:string,delegate?:any);
+ protected _applyModel(value:any,old:any):void;
+ protected _initializeModel():void;
+ protected _setModel(data:any):void;
+ protected _storeModel():void;
+ getKey():string;
+ getModel():any;
+ protected initModel(value:any):any;
+ resetModel():void;
+ setModel(value:any):any;
+
+}
+}
+declare module qx.data.store {
+class Rest extends qx.core.Object {
+ constructor (resource?:qx.io.rest.Resource,actionName?:string,delegate?:any);
+ getActionName():string;
+ getModel():any;
+ getResource():qx.io.rest.Resource;
+ protected initActionName(value:any):string;
+ protected initModel(value:any):any;
+ protected initResource(value:any):qx.io.rest.Resource;
+ resetActionName():void;
+ resetModel():void;
+ resetResource():void;
+ setActionName(value:any):string;
+ setModel(value:any):any;
+ setResource(value:any):qx.io.rest.Resource;
+
+}
+}
+declare module qx.data.store {
+class Yql extends qx.data.store.Jsonp {
+ constructor (query?:string,delegate?:any,https?:boolean);
+
+}
+}
+declare module qx.dom {
+class Element {
+ static create(name:string,attributes?:IMap,win?:Window):HTMLElement;
+ static empty(element:HTMLElement):string;
+ static getHelperElement(win?:Window):HTMLElement;
+ static getParentElement(element:HTMLElement):HTMLElement;
+ static hasChild(parent:HTMLElement,child:Node):boolean;
+ static hasChildElements(element:HTMLElement):boolean;
+ static hasChildren(element:HTMLElement):boolean;
+ static insertAfter(node:Node,ref:Node):boolean;
+ static insertAt(node:Node,parent:HTMLElement,index:number):boolean;
+ static insertBefore(node:Node,ref:Node):boolean;
+ static insertBegin(node:Node,parent:HTMLElement):boolean;
+ static insertEnd(node:Node,parent:HTMLElement):boolean;
+ static isInDom(element:HTMLElement,win:Window):boolean;
+ static remove(node:Node):boolean;
+ static removeChild(node:Node,parent:HTMLElement):boolean;
+ static removeChildAt(index:number,parent:HTMLElement):boolean;
+ static replaceAt(newNode:Node,index:number,parent:HTMLElement):boolean;
+ static replaceChild(newNode:Node,oldNode:Node):boolean;
+
+}
+}
+declare module qx.dom {
+class Hierarchy {
+ protected static _recursivelyCollect(element:HTMLElement,property:string):qx.data.Array;
+ static cleanWhitespace(element:HTMLElement):void;
+ static contains(element:HTMLElement,target:Node):boolean;
+ static getAncestors(element:HTMLElement):qx.data.Array;
+ static getChildElements(element:HTMLElement):qx.data.Array;
+ static getCommonParent(element1:HTMLElement,element2:HTMLElement):HTMLElement;
+ static getDescendants(element:HTMLElement):qx.data.Array;
+ static getElementIndex(element:HTMLElement):number;
+ static getFirstDescendant(element:HTMLElement):HTMLElement;
+ static getLastDescendant(element:HTMLElement):HTMLElement;
+ static getNextElementSibling(element:HTMLElement):HTMLElement;
+ static getNextSiblings(element:HTMLElement):qx.data.Array;
+ static getNodeIndex(node:Node):number;
+ static getPreviousElementSibling(element:HTMLElement):HTMLElement;
+ static getPreviousSiblings(element:HTMLElement):qx.data.Array;
+ static getSiblings(element:any):qx.data.Array;
+ static isDescendantOf(element:HTMLElement,ancestor:HTMLElement):boolean;
+ static isEmpty(element:HTMLElement):boolean;
+ static isRendered(element:HTMLElement):boolean;
+
+}
+}
+declare module qx.dom {
+class Node {
+ static getBodyElement(node:Node):HTMLElement;
+ static getDocument(node:Node):Document;
+ static getDocumentElement(node:Node):HTMLElement;
+ static getName(node:Node):string;
+ static getText(node:Node):string;
+ static getWindow(node:Node):Window;
+ static isBlockNode(node:Node):boolean;
+ static isDocument(node:Node):boolean;
+ static isDocumentFragment(node:Node):boolean;
+ static isElement(node:Node):boolean;
+ static isNode(node:Node):boolean;
+ static isNodeName(node:Node,nodeName:string):boolean;
+ static isText(node:Node):boolean;
+ static isWindow(obj:any):boolean;
+
+}
+}
+declare module qx.event {
+class AcceleratingTimer extends qx.core.Object {
+ constructor ();
+ protected _onInterval():void;
+ getDecrease():number;
+ getFirstInterval():number;
+ getInterval():number;
+ getMinimum():number;
+ protected initDecrease(value:any):number;
+ protected initFirstInterval(value:any):number;
+ protected initInterval(value:any):number;
+ protected initMinimum(value:any):number;
+ resetDecrease():void;
+ resetFirstInterval():void;
+ resetInterval():void;
+ resetMinimum():void;
+ setDecrease(value:any):number;
+ setFirstInterval(value:any):number;
+ setInterval(value:any):number;
+ setMinimum(value:any):number;
+ start():void;
+ stop():void;
+
+}
+}
+declare module qx.event {
+class Emitter {
+ addListener(name:string,listener:Function,ctx?:any):number;
+ addListenerOnce(name:string,listener:Function,ctx?:any):number;
+ emit(name:string,data?:any):void;
+ getEntryById(id:number):IMap;
+ getListeners():IMap;
+ off(name:string,listener:Function,ctx?:any):number;
+ offById(id:number):number;
+ on(name:string,listener:Function,ctx?:any):number;
+ once(name:string,listener:Function,ctx?:any):number;
+ removeListener(name:string,listener:Function,ctx?:any):void;
+ removeListenerById(id:number):void;
+
+}
+}
+declare module qx.event {
+class GlobalError {
+ static handleError(ex:qx.core.WindowError):void;
+ static observeMethod(method:Function):Function;
+ static setErrorHandler(callback?:Function,context?:any):void;
+
+}
+}
+declare module qx.event {
+interface IEventDispatcher {
+ canDispatchEvent(target:HTMLElement,event:qx.event.type.Event,type:string):boolean;
+ dispatchEvent(target:HTMLElement,event:qx.event.type.Event,type:string):void;
+
+}
+}
+declare module qx.event {
+interface IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+
+}
+}
+declare module qx.event {
+class Idle extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.event.Idle;
+ protected _applyTimeoutInterval(value:number,old:number):void;
+ protected _onInterval():void;
+ getTimeoutInterval():number;
+ protected initTimeoutInterval(value:any):number;
+ resetTimeoutInterval():void;
+ setTimeoutInterval(value:any):number;
+
+}
+}
+declare module qx.event {
+class Manager {
+ constructor (win?:Window,registration?:qx.event.Registration);
+ static getNextUniqueId():string;
+ addListener(target:any,type:string,listener:Function,self?:any,capture?:boolean):string;
+ deleteAllListeners(targetKey:string):void;
+ dispatchEvent(target:any,event:qx.event.type.Event):boolean;
+ dispose():void;
+ findHandler(target:any,type:string):qx.event.IEventHandler;
+ getAllListeners():IMap;
+ getDispatcher(clazz:qx.Class):any;
+ getHandler(clazz:qx.Class):any;
+ getListeners(target:any,type:string,capture?:boolean):qx.data.Array;
+ getWindow():Window;
+ getWindowId():string;
+ hasListener(target:any,type:string,capture?:boolean):boolean;
+ importListeners(target:any,list:IMap):void;
+ removeAllListeners(target:any):boolean;
+ removeListener(target:any,type:string,listener:Function,self?:any,capture?:boolean):boolean;
+ removeListenerById(target:any,id:string):boolean;
+ serializeListeners(target:any):IMap[];
+ toggleAttachedEvents(target:any,enable:boolean):void;
+
+}
+}
+declare module qx.event {
+class Messaging {
+ constructor ();
+ protected _addListener(channel:string,type:string,handler:Function,scope?:any):string;
+ protected _emit(channel:string,path:string,params:IMap,customData:any):void;
+ protected _emitListeners(channel:string,path:string,listeners:IMap[],params:IMap,customData:any):boolean;
+ protected _emitRoute(channel:string,path:string,listener:IMap,params:IMap,customData:any):boolean;
+ emit(channel:string,path:string,params:IMap,customData:any):void;
+ has(channel:string,path:string):boolean;
+ on(channel:string,type:string,handler:Function,scope?:any):string;
+ onAny(type:string,handler:Function,scope?:any):string;
+ remove(id:string):void;
+
+}
+}
+declare module qx.event {
+class Pool extends qx.util.ObjectPool {
+ constructor ();
+ static getInstance():qx.event.Pool;
+
+}
+}
+declare module qx.event {
+class Registration {
+ static addDispatcher(dispatcher:qx.event.IEventDispatcher,priority:number):void;
+ static addHandler(handler:qx.event.IEventHandler):void;
+ static addListener(target:any,type:string,listener:Function,self?:any,capture?:boolean):any;
+ static createEvent(type:string,clazz?:any,args?:qx.data.Array):qx.event.type.Event;
+ static deleteAllListeners(target:any):void;
+ static dispatchEvent(target:any,event:qx.event.type.Event):boolean;
+ static fireEvent(target:any,type:string,clazz?:qx.Class,args?:qx.data.Array):boolean;
+ static fireNonBubblingEvent(target:any,type:string,clazz?:qx.Class,args?:qx.data.Array):boolean;
+ static getDispatchers():qx.event.IEventDispatcher[];
+ static getHandlers():qx.event.IEventHandler[];
+ static getManager(target:any):qx.event.Manager;
+ static hasListener(target:any,type:string,capture?:boolean):boolean;
+ static removeAllListeners(target:any):boolean;
+ static removeListener(target:any,type:string,listener:Function,self?:any,capture?:boolean):boolean;
+ static removeListenerById(target:any,id:any):boolean;
+ static removeManager(mgr:qx.event.Manager):void;
+ static serializeListeners(target:any):IMap[];
+
+}
+}
+declare module qx.event {
+class Timer extends qx.core.Object {
+ constructor (interval?:number);
+ static once(func:Function,obj:any,timeout:number):qx.event.Timer;
+ protected _applyEnabled(value:any,old:any):void;
+ protected _applyInterval(value:any,old:any):void;
+ protected _oninterval():void;
+ getEnabled():boolean;
+ getInterval():number;
+ protected initEnabled(value:any):boolean;
+ protected initInterval(value:any):number;
+ isEnabled():boolean;
+ resetEnabled():void;
+ resetInterval():void;
+ restart():void;
+ restartWith(interval:number):void;
+ setEnabled(value:any):boolean;
+ setInterval(value:any):number;
+ start():void;
+ startWith(interval:number):void;
+ stop():void;
+ toggleEnabled():boolean;
+
+}
+}
+declare module qx.event.dispatch {
+class AbstractBubbling extends qx.core.Object implements qx.event.IEventDispatcher {
+ canDispatchEvent(target:HTMLElement,event:qx.event.type.Event,type:string):boolean;
+ dispatchEvent(target:HTMLElement|any,event?:qx.event.type.Event,type?:string):void;
+ constructor (manager?:qx.event.Manager);
+ protected _getParent(target:any):any;
+
+}
+}
+declare module qx.event.dispatch {
+class Direct extends qx.core.Object implements qx.event.IEventDispatcher {
+ canDispatchEvent(target:HTMLElement,event:qx.event.type.Event,type:string):boolean;
+ dispatchEvent(target:HTMLElement|any,event?:qx.event.type.Event,type?:string):void;
+ constructor (manager?:qx.event.Manager);
+
+}
+}
+declare module qx.event.dispatch {
+class DomBubbling extends qx.event.dispatch.AbstractBubbling {
+
+}
+}
+declare module qx.event.dispatch {
+class MouseCapture extends qx.event.dispatch.AbstractBubbling {
+ constructor (manager?:qx.event.Manager,registration?:qx.event.Registration);
+ activateCapture(element:HTMLElement,containerCapture?:boolean):void;
+ getCaptureElement():HTMLElement;
+ nativeReleaseCapture(element:HTMLElement):void;
+ nativeSetCapture(element:HTMLElement,containerCapture?:boolean):void;
+ releaseCapture():void;
+
+}
+}
+declare module qx.event.handler {
+class Appear extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ static refresh():void;
+
+}
+}
+declare module qx.event.handler {
+class Application extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ static onScriptLoaded():void;
+ protected _initObserver():void;
+ protected _onNativeLoad():void;
+ protected _onNativeUnload():void;
+ protected _stopObserver():void;
+ isApplicationReady():boolean;
+
+}
+}
+declare module qx.event.handler {
+class Capture extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+
+}
+}
+declare module qx.event.handler {
+class DragDrop extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _getDelta(e:qx.event.type.Pointer):IMap;
+ protected _onKeyDown(e:qx.event.type.KeySequence):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onKeyUp(e:qx.event.type.KeySequence):void;
+ protected _onLongtap(e:qx.event.type.Tap):void;
+ protected _onPointerdown(e:qx.event.type.Pointer):void;
+ protected _onPointermove(e:qx.event.type.Pointer):void;
+ protected _onPointerup(e:qx.event.type.Pointer):void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _onWindowBlur(e:qx.event.type.Event):void;
+ protected _start(e:qx.event.type.Pointer):boolean;
+ addAction(action:string):void;
+ addData(type:string,data:any):void;
+ addType(type:string):void;
+ clearSession():void;
+ getCurrentAction():string;
+ getCurrentType():string;
+ getCursor():qx.ui.core.Widget;
+ getData(type:string):any;
+ getDragTarget():qx.ui.core.Widget;
+ protected initCursor(value:any):qx.ui.core.Widget;
+ isSessionActive():boolean;
+ resetCursor():void;
+ setCursor(value:any):qx.ui.core.Widget;
+ setDropAllowed(isAllowed:boolean):void;
+ supportsAction(type:string):boolean;
+ supportsType(type:string):boolean;
+
+}
+}
+declare module qx.event.handler {
+class Element extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _onNative(nativeEvent:qx.event.type.Event,eventId:number):void;
+
+}
+}
+declare module qx.event.handler {
+class ElementResize extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _onInterval(e:qx.event.type.Data):void;
+
+}
+}
+declare module qx.event.handler {
+class Focus extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _applyActive(value:any,old:any):void;
+ protected _applyFocus(value:any,old:any):void;
+ protected _initObserver():void;
+ protected _stopObserver():void;
+ activate(element:HTMLElement):void;
+ blur(element:HTMLElement):void;
+ deactivate(element:HTMLElement):void;
+ focus(element:HTMLElement):void;
+ getActive():any;
+ getFocus():any;
+ protected initActive(value:any):any;
+ protected initFocus(value:any):any;
+ resetActive():void;
+ resetFocus():void;
+ setActive(value:any):any;
+ setFocus(value:any):any;
+ tryActivate(element:HTMLElement):void;
+
+}
+}
+declare module qx.event.handler {
+class Gesture extends qx.event.handler.GestureCore implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+
+}
+}
+declare module qx.event.handler {
+class GestureCore {
+ constructor (target?:HTMLElement,emitter?:qx.event.Emitter);
+ protected _calcAngle():number;
+ protected _calcDistance():number;
+ protected _fireEvent(domEvent:qx.event.type.Event,type:string,target?:HTMLElement):void;
+ protected _fireRoll(domEvent:qx.event.type.Event,type:string,target:HTMLElement):void;
+ protected _getDeltaCoordinates(domEvent:qx.event.type.Event):IMap;
+ protected _hasIntermediaryHandler(target:HTMLElement):boolean;
+ protected _initObserver():void;
+ protected _isBelowTapMaxDistance(domEvent:qx.event.type.Event):boolean;
+ protected _onDblClick(domEvent:qx.event.type.Event):void;
+ protected _stopObserver():void;
+ checkAndFireGesture(domEvent:qx.event.type.Event,type?:string,target?:HTMLElement):void;
+ dispose():void;
+ gestureBegin(domEvent:qx.event.type.Event,target:HTMLElement):void;
+ gestureCancel(id:number):void;
+ gestureFinish(domEvent:qx.event.type.Event,target:HTMLElement):void;
+ gestureMove(domEvent:qx.event.type.Event,target:HTMLElement):void;
+ isBelowTapMaxDistance(event:qx.event.type.Event):boolean;
+ stopMomentum(id:number):void;
+ updateGestureTarget(id:string,target:HTMLElement):void;
+
+}
+}
+declare module qx.event.handler {
+class Iframe extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ static onevent(target:HTMLElement):void;
+
+}
+}
+declare module qx.event.handler {
+class Input extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor ();
+ protected _inputFix(e:qx.event.type.Event,target:HTMLElement):void;
+ protected _onChangeChecked(e:qx.event.type.Event):void;
+ protected _onChangeValue(e:qx.event.type.Event):void;
+ protected _onInput(e:qx.event.type.Event):void;
+ protected _onKeyDown(e:qx.event.type.Event):void;
+ protected _onKeyPress(e:qx.event.type.Event,target:HTMLElement):void;
+ protected _onKeyUp(e:qx.event.type.Event):void;
+ protected _onProperty(e:qx.event.type.Event):void;
+
+}
+}
+declare module qx.event.handler {
+class Keyboard extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ __onKeyUpDown(domEvent:qx.event.type.Event):void;
+ protected _fireInputEvent(domEvent:qx.event.type.Event,charCode:number):void;
+ protected _fireSequenceEvent(domEvent:qx.event.type.Event,type:string,keyIdentifier:string):void;
+ protected _idealKeyHandler(keyCode:string,charCode:string,eventType:string,domEvent:HTMLElement):void;
+ protected _identifierToKeyCode(keyIdentifier:string):number;
+ protected _initKeyObserver():void;
+ protected _stopKeyObserver():void;
+
+}
+}
+declare module qx.event.handler {
+class Mouse extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _initButtonObserver():void;
+ protected _initMoveObserver():void;
+ protected _initWheelObserver():void;
+ protected _onButtonEvent(domEvent:qx.event.type.Event):void;
+ protected _onMoveEvent(domEvent:qx.event.type.Event):void;
+ protected _onWheelEvent(domEvent:qx.event.type.Event):void;
+ protected _stopButtonObserver():void;
+ protected _stopMoveObserver():void;
+ protected _stopWheelObserver():void;
+ preventNextClick():void;
+
+}
+}
+declare module qx.event.handler {
+class Object extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+
+}
+}
+declare module qx.event.handler {
+class Offline extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _initObserver():void;
+ protected _onNative(domEvent:qx.event.type.Event):void;
+ protected _stopObserver():void;
+ isOnline():boolean;
+
+}
+}
+declare module qx.event.handler {
+class Orientation extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _initObserver():void;
+ protected _onNative(domEvent:qx.event.type.Event):void;
+ protected _onOrientationChange(domEvent:qx.event.type.Event):void;
+ protected _stopObserver():void;
+
+}
+}
+declare module qx.event.handler {
+class OrientationCore {
+ constructor (targetWindow?:Window,emitter?:qx.event.Emitter);
+ protected _initObserver():void;
+ protected _onNative(domEvent:qx.event.type.Event):void;
+ protected _stopObserver():void;
+
+}
+}
+declare module qx.event.handler {
+class Pointer extends qx.event.handler.PointerCore implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+
+}
+}
+declare module qx.event.handler {
+class PointerCore {
+ constructor (target?:HTMLElement,emitter?:qx.event.Emitter);
+ protected _determineActiveTouches(type:string,changedTouches:qx.data.Array):void;
+ protected _fireEvent(domEvent:qx.event.type.Event,type?:string,target?:HTMLElement):void;
+ protected _initObserver(callback:Function,useEmitter:boolean):void;
+ protected _initPointerObserver():void;
+ protected _isSimulatedMouseEvent(x:number,y:number):boolean;
+ protected _onMouseEvent(domEvent:qx.event.type.Event):void;
+ protected _onPointerEvent(domEvent:qx.event.type.Event):void;
+ protected _onTouchEvent(domEvent:qx.event.type.Event):void;
+ protected _stopObserver():void;
+ dispose():void;
+
+}
+}
+declare module qx.event.handler {
+class Touch extends qx.event.handler.TouchCore implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+
+}
+}
+declare module qx.event.handler {
+class TouchCore {
+ constructor (target?:HTMLElement,emitter?:qx.event.Emitter);
+ protected _calcSingleTouchDelta(touch:qx.event.type.Event):IMap;
+ protected _calcTouchesDelta(touches:qx.data.Array):qx.data.Array;
+ protected _commonTouchEventHandler(domEvent:qx.event.type.Event,type?:string):void;
+ protected _detectTouchesByPointer(domEvent:qx.event.type.Event,type?:string):qx.data.Array;
+ protected _fireEvent(domEvent:qx.event.type.Event,type?:string,target?:HTMLElement):void;
+ protected _getRotationAngle(touch0:qx.event.type.Event,touch1:qx.event.type.Event):number;
+ protected _getScalingDistance(touch0:qx.event.type.Event,touch1:qx.event.type.Event):number;
+ protected _getTarget(domEvent:qx.event.type.Event):HTMLElement;
+ protected _initTouchObserver():void;
+ protected _mapPointerEvent(type:string):string;
+ protected _onTouchEvent(domEvent:qx.event.type.Event):void;
+ protected _stopTouchObserver():void;
+ dispose():void;
+
+}
+}
+declare module qx.event.handler {
+class Transition extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _onNative(domEvent:qx.event.type.Event):void;
+
+}
+}
+declare module qx.event.handler {
+class UserAction extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+
+}
+}
+declare module qx.event.handler {
+class Window extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor (manager?:qx.event.Manager);
+ protected _initWindowObserver():void;
+ protected _onNative():void;
+ protected _stopWindowObserver():void;
+
+}
+}
+declare module qx.event.message {
+class Bus extends qx.core.Object {
+ constructor ();
+ static checkSubscription(message:string,subscriber:Function,context:any):boolean;
+ static dispatch(msg:qx.event.message.Message):boolean;
+ static dispatchByName(name:string,data:any):boolean;
+ static getInstance():qx.event.message.Bus;
+ static getSubscriptions():IMap;
+ static subscribe(message:string,subscriber:Function,context:any):boolean;
+ static unsubscribe(message:string,subscriber:Function,context:any):boolean;
+
+}
+}
+declare module qx.event.message {
+class Message extends qx.core.Object {
+ constructor (name?:string,data?:any);
+ getData():any;
+ getName():string;
+ getSender():any;
+ protected initData(value:any):any;
+ protected initName(value:any):string;
+ protected initSender(value:any):any;
+ resetData():void;
+ resetName():void;
+ resetSender():void;
+ setData(value:any):any;
+ setName(value:any):string;
+ setSender(value:any):any;
+
+}
+}
+declare module qx.event.type {
+class Data extends qx.event.type.Event {
+ getData():any;
+ getOldData():any;
+
+}
+}
+declare module qx.event.type {
+class Dom extends qx.event.type.Native {
+ getModifiers():number;
+ isAltPressed():boolean;
+ isCtrlOrCommandPressed():boolean;
+ isCtrlPressed():boolean;
+ isMetaPressed():boolean;
+ isShiftPressed():boolean;
+
+}
+}
+declare module qx.event.type {
+class Drag extends qx.event.type.Event {
+ addAction(action:string):void;
+ addData(type:string,data:any):void;
+ addType(type:string):void;
+ getCurrentAction():string;
+ getCurrentType():string;
+ getData(type:string):any;
+ getDocumentLeft():number;
+ getDocumentTop():number;
+ getDragTarget():qx.ui.core.Widget;
+ getManager():qx.event.handler.DragDrop;
+ setDropAllowed(isAllowed:boolean):void;
+ stopSession():void;
+ supportsAction(action:string):boolean;
+ supportsType(type:string):boolean;
+
+}
+}
+declare module qx.event.type {
+class Event extends qx.core.Object {
+ getBubbles():boolean;
+ getCurrentTarget():HTMLElement;
+ getDefaultPrevented():boolean;
+ getEventPhase():number;
+ getOriginalTarget():HTMLElement;
+ getPropagationStopped():boolean;
+ getRelatedTarget():HTMLElement;
+ getTarget():HTMLElement;
+ getTimeStamp():number;
+ getType():string;
+ init(canBubble?:boolean,cancelable?:boolean):qx.event.type.Event;
+ isCancelable():boolean;
+ preventDefault():void;
+ setBubbles(bubbles:boolean):void;
+ setCancelable(cancelable:boolean):void;
+ setCurrentTarget(currentTarget:HTMLElement):void;
+ setEventPhase(eventPhase:number):void;
+ setOriginalTarget(originalTarget:HTMLElement):void;
+ setRelatedTarget(relatedTarget:HTMLElement):void;
+ setTarget(target:HTMLElement):void;
+ setType(type:string):void;
+ stop():void;
+ stopPropagation():void;
+
+}
+}
+declare module qx.event.type {
+class Focus extends qx.event.type.Event {
+
+}
+}
+declare module qx.event.type {
+class GeoPosition extends qx.event.type.Event {
+ constructor ();
+ getAccuracy():number;
+ getAltitude():number;
+ getAltitudeAccuracy():number;
+ getHeading():any;
+ getLatitude():number;
+ getLongitude():number;
+ getSpeed():any;
+ getTimestamp():number;
+ protected initAccuracy(value:any):number;
+ protected initAltitude(value:any):number;
+ protected initAltitudeAccuracy(value:any):number;
+ protected initHeading(value:any):any;
+ protected initLatitude(value:any):number;
+ protected initLongitude(value:any):number;
+ protected initSpeed(value:any):any;
+ protected initTimestamp(value:any):number;
+ resetAccuracy():void;
+ resetAltitude():void;
+ resetAltitudeAccuracy():void;
+ resetHeading():void;
+ resetLatitude():void;
+ resetLongitude():void;
+ resetSpeed():void;
+ resetTimestamp():void;
+ setAccuracy(value:any):number;
+ setAltitude(value:any):number;
+ setAltitudeAccuracy(value:any):number;
+ setHeading(value:any):any;
+ setLatitude(value:any):number;
+ setLongitude(value:any):number;
+ setSpeed(value:any):any;
+ setTimestamp(value:any):number;
+
+}
+}
+declare module qx.event.type {
+class KeyInput extends qx.event.type.Dom {
+ getChar():string;
+ getCharCode():number;
+
+}
+}
+declare module qx.event.type {
+class KeySequence extends qx.event.type.Dom {
+ getKeyCode():number;
+ getKeyIdentifier():string;
+ isPrintable():boolean;
+
+}
+}
+declare module qx.event.type {
+class Mouse extends qx.event.type.Dom {
+ getButton():string;
+ getDocumentLeft():number;
+ getDocumentTop():number;
+ getScreenLeft():number;
+ getScreenTop():number;
+ getViewportLeft():number;
+ getViewportTop():number;
+ isLeftPressed():boolean;
+ isMiddlePressed():boolean;
+ isRightPressed():boolean;
+
+}
+}
+declare module qx.event.type {
+class MouseWheel extends qx.event.type.Mouse {
+ getWheelDelta(axis?:string):number;
+
+}
+}
+declare module qx.event.type {
+class Native extends qx.event.type.Event {
+ protected _cloneNativeEvent(nativeEvent:qx.event.type.Event,clone:any):any;
+ getNativeEvent():qx.event.type.Event;
+ getReturnValue():string;
+ setReturnValue(returnValue?:string):void;
+
+}
+}
+declare module qx.event.type {
+class Orientation extends qx.event.type.Event {
+ getOrientation():number;
+ isLandscape():boolean;
+ isPortrait():boolean;
+
+}
+}
+declare module qx.event.type {
+class Pinch extends qx.event.type.Pointer {
+ getScale():number;
+
+}
+}
+declare module qx.event.type {
+class Pointer extends qx.event.type.Mouse {
+ getHeight():number;
+ getPointerId():number;
+ getPointerType():string;
+ getPressure():number;
+ getTiltX():number;
+ getTiltY():number;
+ getWidth():number;
+ isPrimary():boolean;
+
+}
+}
+declare module qx.event.type {
+class Rest extends qx.event.type.Data {
+ getAction():string;
+ getId():number;
+ getPhase():string;
+ getRequest():qx.io.request.AbstractRequest;
+ protected initAction(value:any):string;
+ protected initId(value:any):number;
+ protected initPhase(value:any):string;
+ protected initRequest(value:any):qx.io.request.AbstractRequest;
+ resetAction():void;
+ resetId():void;
+ resetPhase():void;
+ resetRequest():void;
+ setAction(value:any):string;
+ setId(value:any):number;
+ setPhase(value:any):string;
+ setRequest(value:any):qx.io.request.AbstractRequest;
+
+}
+}
+declare module qx.event.type {
+class Roll extends qx.event.type.Pointer {
+ getDelta():IMap;
+ getMomentum():boolean;
+ stopMomentum():void;
+
+}
+}
+declare module qx.event.type {
+class Rotate extends qx.event.type.Pointer {
+ getAngle():number;
+
+}
+}
+declare module qx.event.type {
+class Swipe extends qx.event.type.Pointer {
+ getAxis():string;
+ getDirection():string;
+ getDistance():number;
+ getDuration():number;
+ getStartTime():number;
+ getVelocity():number;
+
+}
+}
+declare module qx.event.type {
+class Tap extends qx.event.type.Pointer {
+
+}
+}
+declare module qx.event.type {
+class Touch extends qx.event.type.Dom {
+ protected _isTouchEnd():boolean;
+ getAllTouches():any[];
+ getChangedTargetTouches():any[];
+ getDelta():qx.data.Array;
+ getDocumentLeft(touchIndex?:number):number;
+ getDocumentTop(touchIndex?:number):number;
+ getIdentifier(touchIndex?:number):number;
+ getRotation():number;
+ getScale():number;
+ getScreenLeft(touchIndex?:number):number;
+ getScreenTop(touchIndex?:number):number;
+ getTargetTouches():any[];
+ getViewportLeft(touchIndex?:number):number;
+ getViewportTop(touchIndex?:number):number;
+ isMultiTouch():boolean;
+
+}
+}
+declare module qx.event.type {
+class Track extends qx.event.type.Pointer {
+ getDelta():IMap;
+
+}
+}
+declare module qx.event.type.dom {
+class Custom {
+ constructor (type?:string,domEvent?:qx.event.type.Event,customProps?:IMap);
+ protected _createEvent():qx.event.type.Event;
+ protected _initEvent(domEvent:qx.event.type.Event,customProps?:IMap):void;
+
+}
+}
+declare module qx.event.type.dom {
+class Pointer extends qx.event.type.dom.Custom {
+ constructor (type?:any,domEvent?:any,customProps?:any);
+ static getDocumentLeft():number;
+ static getDocumentTop():number;
+ static getPointerType():string;
+ static getScreenLeft():number;
+ static getScreenTop():number;
+ static getViewportLeft():number;
+ static getViewportTop():number;
+ static normalize(event:qx.event.type.Event):void;
+
+}
+}
+declare module qx.event.util {
+class Keyboard {
+ static charCodeToIdentifier(charCode:string):string;
+ static isIdentifiableKeyCode(keyCode:string):boolean;
+ static isNonPrintableKeyCode(keyCode:string):boolean;
+ static isPrintableKeyIdentifier(keyIdentifier:string):boolean;
+ static isValidKeyIdentifier(keyIdentifier:string):boolean;
+ static keyCodeToIdentifier(keyCode:number):string;
+
+}
+}
+declare module qx.html {
+class Blocker extends qx.html.Element {
+ constructor (backgroundColor?:string,opacity?:number);
+ protected _stopPropagation(e:qx.event.type.Mouse):void;
+
+}
+}
+declare module qx.html {
+class Canvas extends qx.html.Element {
+ constructor (styles?:IMap,attributes?:IMap);
+ getCanvas():HTMLElement;
+ getContext2d():CanvasRenderingContext2D;
+ getHeight():number;
+ getWidth():number;
+ setHeight(height:number):void;
+ setWidth(width:number):void;
+
+}
+}
+declare module qx.html {
+class Element extends qx.core.Object {
+ constructor (tagName?:string,styles?:IMap,attributes?:IMap);
+ protected static _scheduleFlush(job:string):void;
+ static flush():void;
+ protected _applyProperty(name:string,value:any):qx.html.Element;
+ protected _copyData(fromMarkup:boolean):void;
+ protected _createDomElement():HTMLElement;
+ protected _getProperty(key:string):any;
+ protected _insertChildren():void;
+ protected _removeProperty(key:string,direct?:boolean):qx.html.Element;
+ protected _scheduleChildrenUpdate():void;
+ protected _setProperty(key:string,value:any,direct?:boolean):qx.html.Element;
+ protected _syncChildren():void;
+ protected _syncData():void;
+ activate():void;
+ add(...varargs:qx.html.Element[]):qx.html.Element;
+ addAt(child:qx.html.Element,index:number):qx.html.Element;
+ addClass(name:string):void;
+ addListener(type:string,listener:Function,self?:any,capture?:boolean):any;
+ blur():void;
+ capture(containerCapture?:boolean):void;
+ clearTextSelection():void;
+ deactivate():void;
+ disableScrolling():void;
+ enableScrolling():void;
+ exclude():qx.html.Element;
+ fadeIn(duration:number):qx.bom.element.AnimationHandle;
+ fadeOut(duration:number):qx.bom.element.AnimationHandle;
+ focus():void;
+ free():qx.html.Element;
+ getAllStyles():IMap;
+ getAttribute(key:string):any;
+ getChild(index:number):qx.html.Element;
+ getChildren():qx.data.Array;
+ getDomElement():HTMLElement;
+ getListeners():IMap[];
+ getNodeName():string;
+ getParent():qx.html.Element;
+ getScrollX():number;
+ getScrollY():number;
+ getStyle(key:string):any;
+ getTextSelection():string;
+ getTextSelectionEnd():number;
+ getTextSelectionLength():number;
+ getTextSelectionStart():number;
+ hasChild(child:qx.html.Element):boolean;
+ hasChildren():boolean;
+ hasListener(type:string,capture?:boolean):boolean;
+ hide():qx.html.Element;
+ include():qx.html.Element;
+ indexOf(child:qx.html.Element):number;
+ insertAfter(rel:qx.html.Element):qx.html.Element;
+ insertBefore(rel:qx.html.Element):qx.html.Element;
+ insertInto(parent:qx.html.Element,index?:number):qx.html.Element;
+ isFocusable():boolean;
+ isIncluded():boolean;
+ isNativelyFocusable():boolean;
+ isVisible():boolean;
+ moveAfter(rel:qx.html.Element):qx.html.Element;
+ moveBefore(rel:qx.html.Element):qx.html.Element;
+ moveTo(index:number):qx.html.Element;
+ releaseCapture():void;
+ remove(childs:qx.html.Element):qx.html.Element;
+ removeAll():qx.html.Element;
+ removeAt(index:number):qx.html.Element;
+ removeAttribute(key:string,direct?:boolean):qx.html.Element;
+ removeClass(name:string):void;
+ removeListener(type:string,listener:Function,self:any,capture?:boolean):any;
+ removeListenerById(id:any):any;
+ removeStyle(key:string,direct?:boolean):qx.html.Element;
+ scrollChildIntoViewX(elem:qx.html.Element,align?:string,direct?:boolean):void;
+ scrollChildIntoViewY(elem:qx.html.Element,align?:string,direct?:boolean):void;
+ scrollToX(x:number,lazy?:boolean):void;
+ scrollToY(y:number,lazy?:boolean):void;
+ setAttribute(key:string,value:any,direct?:boolean):qx.html.Element;
+ setAttributes(map:IMap,direct?:boolean):qx.html.Element;
+ setNodeName(name:string):void;
+ setRoot(root:boolean):void;
+ setSelectable(value:boolean):void;
+ setStyle(key:string,value:any,direct?:boolean):qx.html.Element;
+ setStyles(map:IMap,direct?:boolean):qx.html.Element;
+ setTextSelection(start:number,end:number):void;
+ show():qx.html.Element;
+ useElement(elem:HTMLElement):void;
+ useMarkup(html:string):HTMLElement;
+
+}
+}
+declare module qx.html {
+class Flash extends qx.html.Element {
+ constructor (styles?:IMap,attributes?:IMap);
+ createFlash():void;
+ getAttributes():IMap;
+ getFlashElement():HTMLElement;
+ getParams():IMap;
+ getVariables():IMap;
+ setId(value:string):void;
+ setParam(key:string,value:string):void;
+ setSource(value:string):void;
+ setVariables(value:IMap):void;
+
+}
+}
+declare module qx.html {
+class Iframe extends qx.html.Element {
+ constructor (url?:string,styles?:IMap,attributes?:IMap);
+ getBody():HTMLElement;
+ getDocument():Document;
+ getName():string;
+ getSource():string;
+ getWindow():Window;
+ reload():void;
+ setName(name:string):qx.html.Iframe;
+ setSource(source:string):qx.html.Iframe;
+
+}
+}
+declare module qx.html {
+class Image extends qx.html.Element {
+ getScale():boolean;
+ getSource():string;
+ resetSource():qx.html.Image;
+ setPadding(paddingLeft:number,paddingTop:number):void;
+ setScale(value:boolean):qx.html.Label;
+ setSource(value:boolean):qx.html.Label;
+
+}
+}
+declare module qx.html {
+class Input extends qx.html.Element {
+ constructor (type?:string,styles?:IMap,attributes?:IMap);
+ getValue():string;
+ getWrap():boolean;
+ setEnabled(value:boolean):void;
+ setValue(value:any):qx.html.Input;
+ setWrap(wrap:boolean,direct?:boolean):qx.html.Input;
+
+}
+}
+declare module qx.html {
+class Label extends qx.html.Element {
+ getValue():string;
+ setRich(value:boolean):qx.html.Label;
+ setValue(value:string):qx.html.Label;
+
+}
+}
+declare module qx.html {
+class Root extends qx.html.Element {
+ constructor (elem?:HTMLElement);
+
+}
+}
+declare module qx.io {
+class ImageLoader {
+ static abort(source:string):void;
+ static dispose():void;
+ static getFormat(source:string):string;
+ static getHeight(source:string):number;
+ static getSize(source:string):IMap;
+ static getWidth(source:string):number;
+ static isFailed(source:string):boolean;
+ static isLoaded(source:string):boolean;
+ static isLoading(source:string):boolean;
+ static load(source:string,callback?:Function,context?:any):void;
+
+}
+}
+declare module qx.io {
+class PartLoader extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.io.PartLoader;
+ static require(partNames:string[],callback:Function,self?:any):void;
+ getPart(name:string):qx.io.part.Part;
+ getParts():IMap;
+ hasPart(name:string):boolean;
+
+}
+}
+declare module qx.io.part {
+class ClosurePart extends qx.io.part.Part {
+ constructor (name?:string,packages?:any[],loader?:qx.Part);
+ protected _onPackageLoad(pkg:qx.io.part.Package):void;
+
+}
+}
+declare module qx.io.part {
+class Package {
+ constructor (urls?:string[],id?:any,loaded?:boolean);
+ execute():void;
+ getId():string;
+ getReadyState():string;
+ getUrls():string[];
+ load(notifyPackageResult:Function,self?:any):void;
+ loadClosure(notifyPackageResult:Function,self?:any):void;
+ saveClosure(closure:Function):void;
+
+}
+}
+declare module qx.io.part {
+class Part {
+ constructor (name?:string,packages?:any[],loader?:qx.Part);
+ protected _appendPartListener(callback:Function,self?:any,part?:qx.io.part.Part):void;
+ protected _checkCompleteLoading(callback:Function,self:any):boolean;
+ protected _markAsCompleted(readyState:string):void;
+ protected _signalStartup():void;
+ getName():string;
+ getPackages():qx.io.part.Package[];
+ getReadyState():string;
+ load(callback:Function,self?:any):void;
+ preload(callback:Function,self?:any):void;
+
+}
+}
+declare module qx.io.remote {
+class Exchange extends qx.core.Object {
+ constructor (vRequest?:qx.io.remote.Request);
+ static canHandle(vImpl:any,vNeeds:IMap,vResponseType:string):boolean;
+ static initTypes():void;
+ static registerType(vClass:any,vId:string):void;
+ static statusCodeToString(vStatusCode:number):string;
+ static wasSuccessful(vStatusCode:number,vReadyState:string,vIsLocal:boolean):boolean;
+ protected _applyImplementation(value:any,old:any):void;
+ protected _applyState(value:any,old:any):void;
+ protected _onabort(e:qx.event.type.Event):void;
+ protected _oncompleted(e:qx.event.type.Event):void;
+ protected _onfailed(e:qx.event.type.Event):void;
+ protected _onreceiving(e:qx.event.type.Event):void;
+ protected _onsending(e:qx.event.type.Event):void;
+ protected _ontimeout(e:qx.event.type.Event):void;
+ abort():void;
+ getImplementation():qx.io.remote.transport.Abstract;
+ getRequest():qx.io.remote.Request;
+ getState():any;
+ protected initImplementation(value:any):qx.io.remote.transport.Abstract;
+ protected initRequest(value:any):qx.io.remote.Request;
+ protected initState(value:any):any;
+ resetImplementation():void;
+ resetRequest():void;
+ resetState():void;
+ send():any;
+ setImplementation(value:any):qx.io.remote.transport.Abstract;
+ setRequest(value:any):qx.io.remote.Request;
+ setState(value:any):any;
+ timeout():void;
+
+}
+}
+declare module qx.io.remote {
+class Request extends qx.core.Object {
+ constructor (vUrl?:string,vMethod?:string,vResponseType?:string);
+ static methodAllowsRequestBody(httpMethod:string):boolean;
+ protected _applyMethod(value:any,old:any):void;
+ protected _applyProhibitCaching(value:any,old:any):void;
+ protected _applyResponseType(value:any,old:any):void;
+ protected _applyState(value:any,old:any):void;
+ protected _onaborted(e:qx.event.type.Event):void;
+ protected _oncompleted(e:qx.event.type.Event):void;
+ protected _onfailed(e:qx.event.type.Event):void;
+ protected _onqueued(e:qx.event.type.Event):void;
+ protected _onreceiving(e:qx.event.type.Event):void;
+ protected _onsending(e:qx.event.type.Event):void;
+ protected _ontimeout(e:qx.event.type.Event):void;
+ abort():void;
+ getAsynchronous():boolean;
+ getCrossDomain():boolean;
+ getData():string;
+ getFileUpload():boolean;
+ getFormField(vId:string):string;
+ getFormFields():any;
+ getMethod():any;
+ getParameter(vId:string,bFromData:boolean):any;
+ getParameters(bFromData:boolean):any;
+ getParseJson():boolean;
+ getPassword():string;
+ getProhibitCaching():any;
+ getRequestHeader(vId:string):string;
+ getRequestHeaders():any;
+ getResponseType():any;
+ getSequenceNumber():number;
+ getState():any;
+ getTimeout():number;
+ getTransport():qx.io.remote.Exchange;
+ getUrl():string;
+ getUseBasicHttpAuth():boolean;
+ getUsername():string;
+ protected initAsynchronous(value:any):boolean;
+ protected initCrossDomain(value:any):boolean;
+ protected initData(value:any):string;
+ protected initFileUpload(value:any):boolean;
+ protected initMethod(value:any):any;
+ protected initParseJson(value:any):boolean;
+ protected initPassword(value:any):string;
+ protected initProhibitCaching(value:any):any;
+ protected initResponseType(value:any):any;
+ protected initState(value:any):any;
+ protected initTimeout(value:any):number;
+ protected initTransport(value:any):qx.io.remote.Exchange;
+ protected initUrl(value:any):string;
+ protected initUseBasicHttpAuth(value:any):boolean;
+ protected initUsername(value:any):string;
+ isAborted():boolean;
+ isAsynchronous():boolean;
+ isCompleted():boolean;
+ isConfigured():boolean;
+ isCrossDomain():boolean;
+ isFailed():boolean;
+ isFileUpload():boolean;
+ isParseJson():boolean;
+ isQueued():boolean;
+ isReceiving():boolean;
+ isSending():boolean;
+ isTimeout():boolean;
+ isUseBasicHttpAuth():boolean;
+ removeFormField(vId:string):void;
+ removeParameter(vId:string,bFromData:boolean):void;
+ removeRequestHeader(vId:string):void;
+ reset():void;
+ resetAsynchronous():void;
+ resetCrossDomain():void;
+ resetData():void;
+ resetFileUpload():void;
+ resetMethod():void;
+ resetParseJson():void;
+ resetPassword():void;
+ resetProhibitCaching():void;
+ resetResponseType():void;
+ resetState():void;
+ resetTimeout():void;
+ resetTransport():void;
+ resetUrl():void;
+ resetUseBasicHttpAuth():void;
+ resetUsername():void;
+ send():void;
+ setAsynchronous(value:any):boolean;
+ setCrossDomain(value:any):boolean;
+ setData(value:any):string;
+ setFileUpload(value:any):boolean;
+ setFormField(vId:string,vValue:string):void;
+ setMethod(value:any):any;
+ setParameter(vId:string,vValue:any,bAsData:boolean):void;
+ setParseJson(value:any):boolean;
+ setPassword(value:any):string;
+ setProhibitCaching(value:any):any;
+ setRequestHeader(vId:string,vValue:string):void;
+ setResponseType(value:any):any;
+ setState(value:any):any;
+ setTimeout(value:any):number;
+ setTransport(value:any):qx.io.remote.Exchange;
+ setUrl(value:any):string;
+ setUseBasicHttpAuth(value:any):boolean;
+ setUsername(value:any):string;
+ toggleAsynchronous():boolean;
+ toggleCrossDomain():boolean;
+ toggleFileUpload():boolean;
+ toggleParseJson():boolean;
+ toggleUseBasicHttpAuth():boolean;
+
+}
+}
+declare module qx.io.remote {
+class RequestQueue extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.io.remote.RequestQueue;
+ protected _applyEnabled(value:boolean,old:boolean):void;
+ protected _check():void;
+ protected _debug():void;
+ protected _oncompleted(e:qx.event.type.Event):void;
+ protected _oninterval(e:qx.event.type.Event):void;
+ protected _onreceiving(e:qx.event.type.Event):void;
+ protected _onsending(e:qx.event.type.Event):void;
+ protected _remove(vTransport:qx.io.remote.Exchange):void;
+ abort(vRequest:any):void;
+ add(vRequest:any):void;
+ getActiveQueue():any[];
+ getDefaultTimeout():number;
+ getEnabled():boolean;
+ getMaxConcurrentRequests():number;
+ getMaxTotalRequests():number;
+ getRequestQueue():any[];
+ protected initDefaultTimeout(value:any):number;
+ protected initEnabled(value:any):boolean;
+ protected initMaxConcurrentRequests(value:any):number;
+ protected initMaxTotalRequests(value:any):number;
+ isEnabled():boolean;
+ resetDefaultTimeout():void;
+ resetEnabled():void;
+ resetMaxConcurrentRequests():void;
+ resetMaxTotalRequests():void;
+ setDefaultTimeout(value:any):number;
+ setEnabled(value:any):boolean;
+ setMaxConcurrentRequests(value:any):number;
+ setMaxTotalRequests(value:any):number;
+ toggleEnabled():boolean;
+
+}
+}
+declare module qx.io.remote {
+class Response extends qx.event.type.Event {
+ protected _applyResponseHeaders(value:any,old:any):void;
+ getContent():any;
+ getResponseHeader(vHeader:string):any;
+ getResponseHeaders():any;
+ getState():number;
+ getStatusCode():number;
+ protected initContent(value:any):any;
+ protected initResponseHeaders(value:any):any;
+ protected initState(value:any):number;
+ protected initStatusCode(value:any):number;
+ resetContent():void;
+ resetResponseHeaders():void;
+ resetState():void;
+ resetStatusCode():void;
+ setContent(value:any):any;
+ setResponseHeaders(value:any):any;
+ setState(value:any):number;
+ setStatusCode(value:any):number;
+
+}
+}
+declare module qx.io.remote {
+class Rpc extends qx.core.Object {
+ constructor (url?:string,serviceName?:string);
+ static makeServerURL(instanceId?:string):string;
+ protected _callInternal(args:qx.data.Array,callType:number,refreshSession:boolean):any;
+ protected _isConvertDates():boolean;
+ protected _isResponseJson():boolean;
+ abort(opaqueCallRef:any):void;
+ callAsync(handler:Function,methodName:string):any;
+ callAsyncListeners(coalesce:boolean,methodName:string):any;
+ callSync(methodName:string):any;
+ createRequest():qx.io.remote.Request;
+ createRpcData(id:number,method:string,parameters:qx.data.Array,serverData:any):any;
+ fixUrl(url:string):string;
+ getCrossDomain():boolean;
+ getPassword():string;
+ getProtocol():any;
+ getServerData():any;
+ getServiceName():string;
+ getTimeout():number;
+ getUrl():string;
+ getUseBasicHttpAuth():boolean;
+ getUsername():string;
+ protected initCrossDomain(value:any):boolean;
+ protected initPassword(value:any):string;
+ protected initProtocol(value:any):any;
+ protected initServerData(value:any):any;
+ protected initServiceName(value:any):string;
+ protected initTimeout(value:any):number;
+ protected initUrl(value:any):string;
+ protected initUseBasicHttpAuth(value:any):boolean;
+ protected initUsername(value:any):string;
+ isCrossDomain():boolean;
+ isUseBasicHttpAuth():boolean;
+ refreshSession(handler:Function):void;
+ resetCrossDomain():void;
+ resetPassword():void;
+ resetProtocol():void;
+ resetServerData():void;
+ resetServiceName():void;
+ resetTimeout():void;
+ resetUrl():void;
+ resetUseBasicHttpAuth():void;
+ resetUsername():void;
+ setCrossDomain(value:any):boolean;
+ setPassword(value:any):string;
+ setProtocol(value:any):any;
+ setServerData(value:any):any;
+ setServiceName(value:any):string;
+ setTimeout(value:any):number;
+ setUrl(value:any):string;
+ setUseBasicHttpAuth(value:any):boolean;
+ setUsername(value:any):string;
+ toggleCrossDomain():boolean;
+ toggleUseBasicHttpAuth():boolean;
+
+}
+}
+declare module qx.io.remote {
+class RpcError {
+
+}
+}
+declare module qx.io.remote.transport {
+class Abstract extends qx.core.Object {
+ constructor ();
+ protected _applyState(value:any,old:any):void;
+ abort():void;
+ failed():void;
+ getAsynchronous():boolean;
+ getData():string;
+ getFetchedLength():number;
+ getFormFields():any;
+ getMethod():string;
+ getParameters():any;
+ getPassword():string;
+ getRequestHeaders():any;
+ getResponseHeader(vLabel:string):any;
+ getResponseHeaders():any;
+ getResponseText():string;
+ getResponseType():string;
+ getResponseXml():any;
+ getState():any;
+ getStatusCode():number;
+ getStatusText():string;
+ getUrl():string;
+ getUseBasicHttpAuth():boolean;
+ getUsername():string;
+ protected initAsynchronous(value:any):boolean;
+ protected initData(value:any):string;
+ protected initFormFields(value:any):any;
+ protected initMethod(value:any):string;
+ protected initParameters(value:any):any;
+ protected initPassword(value:any):string;
+ protected initRequestHeaders(value:any):any;
+ protected initResponseType(value:any):string;
+ protected initState(value:any):any;
+ protected initUrl(value:any):string;
+ protected initUseBasicHttpAuth(value:any):boolean;
+ protected initUsername(value:any):string;
+ isAsynchronous():boolean;
+ isUseBasicHttpAuth():boolean;
+ resetAsynchronous():void;
+ resetData():void;
+ resetFormFields():void;
+ resetMethod():void;
+ resetParameters():void;
+ resetPassword():void;
+ resetRequestHeaders():void;
+ resetResponseType():void;
+ resetState():void;
+ resetUrl():void;
+ resetUseBasicHttpAuth():void;
+ resetUsername():void;
+ send():void;
+ setAsynchronous(value:any):boolean;
+ setData(value:any):string;
+ setFormFields(value:any):any;
+ setMethod(value:any):string;
+ setParameters(value:any):any;
+ setPassword(value:any):string;
+ setRequestHeader(vLabel:string,vValue:any):void;
+ setRequestHeaders(value:any):any;
+ setResponseType(value:any):string;
+ setState(value:any):any;
+ setUrl(value:any):string;
+ setUseBasicHttpAuth(value:any):boolean;
+ setUsername(value:any):string;
+ timeout():void;
+ toggleAsynchronous():boolean;
+ toggleUseBasicHttpAuth():boolean;
+
+}
+}
+declare module qx.io.remote.transport {
+class Iframe extends qx.io.remote.transport.Abstract {
+ constructor ();
+ static isSupported():boolean;
+ protected _onload(e:qx.event.type.Event):void;
+ protected _onreadystatechange(e:qx.event.type.Event):void;
+ protected _switchReadyState(vReadyState:string):void;
+ getIframeBody():any;
+ getIframeDocument():any;
+ getIframeHtmlContent():string;
+ getIframeTextContent():string;
+ getIframeWindow():any;
+ getResponseContent():any;
+
+}
+}
+declare module qx.io.remote.transport {
+class Script extends qx.io.remote.transport.Abstract {
+ constructor ();
+ protected static _requestFinished(id:string,content:string):void;
+ static isSupported():boolean;
+ protected _switchReadyState(vReadyState:string):void;
+ getResponseContent():any;
+
+}
+}
+declare module qx.io.remote.transport {
+class XmlHttp extends qx.io.remote.transport.Abstract {
+ static createRequestObject():any;
+ static isSupported():boolean;
+ protected _onreadystatechange(e:qx.event.type.Event):void;
+ failedLocally():void;
+ getParseJson():boolean;
+ getReadyState():number;
+ getRequest():any;
+ getResponseContent():any;
+ getStringResponseHeaders():any;
+ protected initParseJson(value:any):boolean;
+ isParseJson():boolean;
+ resetParseJson():void;
+ setParseJson(value:any):boolean;
+ toggleParseJson():boolean;
+
+}
+}
+declare module qx.io.request {
+class AbstractRequest extends qx.core.Object {
+ constructor (url?:string);
+ protected _createTransport():qx.bom.request.IRequest;
+ protected _fireStatefulEvent(evt:string):void;
+ protected _getAllRequestHeaders():IMap;
+ protected _getConfiguredRequestHeaders():IMap;
+ protected _getConfiguredUrl():string;
+ protected _getMethod():string;
+ protected _getParsedResponse():string;
+ protected _isAsync():boolean;
+ protected _onAbort():void;
+ protected _onError():void;
+ protected _onLoad():void;
+ protected _onLoadEnd():void;
+ protected _onReadyStateChange():void;
+ protected _onTimeout():void;
+ protected _serializeData(data:string):string;
+ protected _setPhase(phase:string):void;
+ protected _setRequestHeaders():void;
+ protected _setResponse(response:string):void;
+ abort():void;
+ getAllResponseHeaders():string;
+ getAuthentication():qx.io.request.authentication.IAuthentication;
+ getPhase():string;
+ getReadyState():number;
+ getRequestData():any;
+ getRequestHeader(key:string):string;
+ getResponse():string;
+ getResponseContentType():string;
+ getResponseHeader(key:string):string;
+ getResponseText():string;
+ getStatus():number;
+ getStatusText():string;
+ getTimeout():number;
+ getTransport():any;
+ getUrl():string;
+ protected initAuthentication(value:any):qx.io.request.authentication.IAuthentication;
+ protected initRequestData(value:any):any;
+ protected initTimeout(value:any):number;
+ protected initUrl(value:any):string;
+ isDone():void;
+ overrideResponseContentType(contentType:string):void;
+ removeRequestHeader(key:string):void;
+ resetAuthentication():void;
+ resetRequestData():void;
+ resetTimeout():void;
+ resetUrl():void;
+ send():void;
+ setAuthentication(value:any):qx.io.request.authentication.IAuthentication;
+ setRequestData(value:any):any;
+ setRequestHeader(key:string,value:string):void;
+ setTimeout(value:any):number;
+ setUrl(value:any):string;
+
+}
+}
+declare module qx.io.request {
+class Jsonp extends qx.io.request.AbstractRequest {
+ getCache():boolean;
+ protected initCache(value:any):boolean;
+ isCache():boolean;
+ resetCache():void;
+ setCache(value:any):boolean;
+ setCallbackName(name:string):void;
+ setCallbackParam(param:string):void;
+ toggleCache():boolean;
+
+}
+}
+declare module qx.io.request {
+class Xhr extends qx.io.request.AbstractRequest {
+ constructor (url?:string,method?:string);
+ protected _createResponseParser():qx.util.ResponseParser;
+ getAccept():string;
+ getAsync():boolean;
+ getCache():any;
+ getMethod():any;
+ protected initAccept(value:any):string;
+ protected initAsync(value:any):boolean;
+ protected initCache(value:any):any;
+ protected initMethod(value:any):any;
+ isAsync():boolean;
+ resetAccept():void;
+ resetAsync():void;
+ resetCache():void;
+ resetMethod():void;
+ setAccept(value:any):string;
+ setAsync(value:any):boolean;
+ setCache(value:any):any;
+ setMethod(value:any):any;
+ setParser(parser:string):Function;
+ toggleAsync():boolean;
+
+}
+}
+declare module qx.io.request.authentication {
+class Basic extends qx.core.Object implements qx.io.request.authentication.IAuthentication {
+ getAuthHeaders():IMap[];
+ constructor (username?:any,password?:any);
+
+}
+}
+declare module qx.io.request.authentication {
+interface IAuthentication {
+ getAuthHeaders():IMap[];
+
+}
+}
+declare module qx.io.rest {
+class Resource extends qx.core.Object {
+ constructor (description?:IMap);
+ static placeholdersFromUrl(url:string):qx.data.Array;
+ protected _getRequest():qx.io.request.Xhr;
+ protected _getRequestConfig(action:string,params:IMap):IMap;
+ protected _getResource(description?:IMap):qx.bom.rest.Resource;
+ protected _getThrottleCount():number;
+ protected _getThrottleLimit():number;
+ protected _tailorResource(resource:qx.bom.rest.Resource):qx.bom.rest.Resource;
+ abort(...varargs:string[]):void;
+ configureRequest(callback:Function):void;
+ invoke(action:string,params:IMap,data:IMap):number;
+ longPoll(action:string):string;
+ map(action:string,method:string,url:string,check?:IMap):void;
+ poll(action:string,interval:number,params?:IMap,immediately?:boolean):qx.event.Timer;
+ refresh(action:string):void;
+ setBaseUrl(baseUrl:string):void;
+
+}
+}
+declare module qx.lang {
+class Array {
+ static append(arr1:qx.data.Array,arr2:qx.data.Array):qx.data.Array;
+ static cast(object:any,constructor:Function,offset?:number):qx.data.Array;
+ static clone(arr:qx.data.Array):qx.data.Array;
+ static contains(arr:qx.data.Array,obj:any):boolean;
+ static equals(arr1:qx.data.Array,arr2:qx.data.Array):boolean;
+ static exclude(arr1:qx.data.Array,arr2:qx.data.Array):qx.data.Array;
+ static fromArguments(args:any,offset?:number):qx.data.Array;
+ static fromCollection(coll:any):qx.data.Array;
+ static fromShortHand(input:qx.data.Array):qx.data.Array;
+ static insertAfter(arr:qx.data.Array,obj:any,obj2:any):qx.data.Array;
+ static insertAt(arr:qx.data.Array,obj:any,i:number):qx.data.Array;
+ static insertBefore(arr:qx.data.Array,obj:any,obj2:any):qx.data.Array;
+ static max(arr:number[]):number;
+ static min(arr:number[]):number;
+ static range(start:number,stop:number,step:number):qx.data.Array;
+ static remove(arr:qx.data.Array,obj:any):any;
+ static removeAll(arr:qx.data.Array):qx.data.Array;
+ static removeAt(arr:qx.data.Array,i:number):any;
+ static sum(arr:number[]):number;
+ static unique(arr:qx.data.Array):qx.data.Array;
+
+}
+}
+declare module qx.lang {
+class Function {
+ static attempt(func:Function,self?:any,...varargs:any[]):boolean;
+ static bind(func:Function,self?:any,...varargs:any[]):Function;
+ static create(func:Function,options?:IMap):Function;
+ static curry(func:Function,...varargs:any[]):any;
+ static delay(func:Function,delay:number,self?:any,...varargs:any[]):number;
+ static getCaller(args:any):Function;
+ static getName(fcn:Function):string;
+ static globalEval(data:string):any;
+ static listener(func:Function,self?:any,...varargs:any[]):any;
+ static periodical(func:Function,interval:number,self?:any,...varargs:any[]):number;
+
+}
+}
+declare module qx.lang {
+class Json {
+ static parse(text:string,reviver?:Function):any;
+ static stringify(value:any,replacer?:Function,space?:string):string;
+
+}
+}
+declare module qx.lang {
+class Number {
+ static isBetweenRange(nr:number,vmin:number,vmax:number):boolean;
+ static isInRange(nr:number,vmin:number,vmax:number):boolean;
+ static limit(nr:number,vmin:number,vmax:number):number;
+
+}
+}
+declare module qx.lang {
+class Object {
+ static clone(source:any,deep:boolean):any;
+ static contains(map:any,value:any):boolean;
+ static empty(map:any):void;
+ static equals(object1:any,object2:any):boolean;
+ static fromArray(array:qx.data.Array):IMap;
+ static getKeyFromValue(map:any,value:any):string;
+ static getLength(map:any):number;
+ static getValues(map:any):qx.data.Array;
+ static invert(map:any):any;
+ static isEmpty(map:any):boolean;
+ static mergeWith(target:any,source:any,overwrite?:boolean):any;
+
+}
+}
+declare module qx.lang {
+class String {
+ static camelCase(str:string):string;
+ static capitalize(str:string):string;
+ static clean(str:string):string;
+ static contains(str:string,substring:string):boolean;
+ static endsWith(fullstr:string,substr:string):boolean;
+ static escapeRegexpChars(str:string):string;
+ static firstLow(str:string):string;
+ static firstUp(str:string):string;
+ static format(pattern:string,args:qx.data.Array):string;
+ static hyphenate(str:string):string;
+ static pad(str:string,length:number,ch:string):string;
+ static quote(str:string):string;
+ static repeat(str:string,times:number):string;
+ static startsWith(fullstr:string,substr:string):boolean;
+ static stripScripts(str:string,exec?:boolean):string;
+ static stripTags(str:string):string;
+ static toArray(str:string):qx.data.Array;
+ static trimLeft(str:string):string;
+ static trimRight(str:string):string;
+
+}
+}
+declare module qx.lang {
+class Type {
+ static getClass(value:any):string;
+ static isArray(value:any):boolean;
+ static isBoolean(value:any):boolean;
+ static isDate(value:any):boolean;
+ static isError(value:any):boolean;
+ static isFunction(value:any):boolean;
+ static isNumber(value:any):boolean;
+ static isObject(value:any):boolean;
+ static isRegExp(value:any):boolean;
+ static isString(value:any):boolean;
+
+}
+}
+declare module qx.lang.normalize {
+class Array {
+ static every(callback:Function,obj?:any):qx.data.Array;
+ static filter(callback:Function,obj?:any):qx.data.Array;
+ static forEach(callback:Function,obj?:any):void;
+ static indexOf(searchElement:any,fromIndex?:number):number;
+ static lastIndexOf(searchElement:any,fromIndex?:number):number;
+ static map(callback:Function,obj?:any):qx.data.Array;
+ static reduce(callback:Function,init?:any):any;
+ static reduceRight(callback:Function,init?:any):any;
+ static some(callback:Function,obj?:any):qx.data.Array;
+
+}
+}
+declare module qx.lang.normalize {
+class Date {
+ static now():number;
+
+}
+}
+declare module qx.lang.normalize {
+class Error {
+
+}
+}
+declare module qx.lang.normalize {
+class Function {
+ static bind(that?:any):Function;
+
+}
+}
+declare module qx.lang.normalize {
+class Object {
+ static keys(map:any):qx.data.Array;
+
+}
+}
+declare module qx.lang.normalize {
+class String {
+ static trim():string;
+
+}
+}
+declare module qx.locale {
+class Date {
+ protected static _getTerritory(locale:string):string;
+ static getAmMarker(locale:string):string;
+ static getDateFormat(size:string,locale?:string):string;
+ static getDateTimeFormat(canonical:string,fallback:string,locale:string):string;
+ static getDayName(length:string,day:number,locale:string,context:string,withFallback?:boolean):string;
+ static getDayNames(length:string,locale:string,context:string,withFallback?:boolean):string[];
+ static getMonthName(length:string,month:number,locale:string,context:string,withFallback?:boolean):string;
+ static getMonthNames(length:string,locale:string,context:string,withFallback?:boolean):string[];
+ static getPmMarker(locale:string):string;
+ static getTimeFormat(size:string,locale:string):string;
+ static getWeekendEnd(locale:string):number;
+ static getWeekendStart(locale:string):number;
+ static getWeekStart(locale:string):number;
+ static isWeekend(day:number,locale:string):boolean;
+
+}
+}
+declare module qx.locale {
+class Key {
+ static getKeyName(size:string,keyIdentifier:string,locale:string):string;
+
+}
+}
+declare module qx.locale {
+class LocalizedString extends qx.type.BaseString {
+ constructor (translation?:string,messageId?:string,args?:qx.data.Array);
+ getMessageId():string;
+ translate():qx.locale.LocalizedString;
+
+}
+}
+declare module qx.locale {
+class MTranslation {
+ marktr(messageId:string):string;
+ tr(messageId:string,...varargs:any[]):string;
+ trc(hint:string,messageId:string,...varargs:any[]):string;
+ trn(singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ trnc(hint:string,singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+
+}
+}
+declare module qx.locale {
+class Manager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.locale.Manager;
+ static marktr(messageId:string):string;
+ static tr(messageId:string,...varargs:any[]):string;
+ static trc(hint:string,messageId:string,...varargs:any[]):string;
+ static trn(singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ static trnc(hint:string,singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ protected _applyLocale(value:string,old:string):void;
+ addLocale(localeCode:string,localeMap:IMap):void;
+ addTranslation(languageCode:string,translationMap:IMap):void;
+ getAvailableLocales(includeNonloaded?:boolean):string[];
+ getLanguage():string;
+ getLocale():string;
+ getTerritory():string;
+ protected initLocale(value:any):string;
+ localize(messageId:string,args:any[],locale?:string):string;
+ resetLocale():void;
+ setLocale(value:any):string;
+ translate(messageId:string,args:any[],locale?:string):string;
+
+}
+}
+declare module qx.locale {
+class Number {
+ static getDecimalSeparator(locale:string):string;
+ static getGroupSeparator(locale:string):string;
+ static getPercentFormat(locale:string):string;
+
+}
+}
+declare module qx.locale {
+class String {
+ static getAlternateQuotationEnd(locale:string):string;
+ static getAlternateQuotationStart(locale:string):string;
+ static getQuotationEnd(locale:string):string;
+ static getQuotationStart(locale:string):string;
+
+}
+}
+declare module qx.log {
+class Logger {
+ static clear():void;
+ static debug(object:any,message:any):void;
+ static deprecatedClassWarning(clazz:qx.Class,msg?:string):void;
+ static deprecatedConstantWarning(clazz:qx.Class,constant:string,msg:string):void;
+ static deprecatedEventWarning(clazz:qx.Class,event:string,msg?:string):void;
+ static deprecatedMethodWarning(fcn:Function,msg?:string):void;
+ static deprecatedMixinWarning(clazz:qx.Class,msg?:string):void;
+ static deprecateMethodOverriding(object:qx.core.Object,baseclass:qx.Class,methodName:string,msg?:string):void;
+ static error(object:any,message:any):void;
+ static getLevel():number;
+ static getTreshold():number;
+ static info(object:any,message:any):void;
+ static register(appender:qx.Class):void;
+ static setLevel(value:string):void;
+ static setTreshold(value:number):void;
+ static trace(object?:any):void;
+ static unregister(appender:qx.Class):void;
+ static warn(object:any,message:any):void;
+
+}
+}
+declare module qx.log.appender {
+class Console {
+ static clear():void;
+ static dispose():void;
+ static execute():void;
+ static init():void;
+ static process(entry:IMap):void;
+ static show():void;
+ static toggle():void;
+
+}
+}
+declare module qx.log.appender {
+class Element extends qx.core.Object {
+ constructor (element?:HTMLElement);
+ clear():void;
+ process(entry:IMap):void;
+ setElement(element:HTMLElement):void;
+
+}
+}
+declare module qx.log.appender {
+class Native {
+ static process(entry:IMap):void;
+
+}
+}
+declare module qx.log.appender {
+class NodeConsole {
+ static debug(logMessage:string):void;
+ static error(logMessage:string):void;
+ static info(logMessage:string):void;
+ static log(logMessage:string,level:string):void;
+ static process(entry:IMap):void;
+ static warn(logMessage:string):void;
+
+}
+}
+declare module qx.log.appender {
+class PhoneGap {
+ static process(entry:IMap):void;
+
+}
+}
+declare module qx.log.appender {
+class RhinoConsole {
+ static debug(logMessage:string):void;
+ static error(logMessage:string):void;
+ static info(logMessage:string):void;
+ static log(logMessage:string,level:string):void;
+ static process(entry:IMap):void;
+ static warn(logMessage:string):void;
+
+}
+}
+declare module qx.log.appender {
+class RhinoFile {
+ static create():void;
+ static debug(logMessage:string):void;
+ static error(logMessage:string):void;
+ static info(logMessage:string):void;
+ static log(logMessage:string,level:string):void;
+ static process(entry:IMap):void;
+ static warn(logMessage:string):void;
+
+}
+}
+declare module qx.log.appender {
+class RingBuffer extends qx.util.RingBuffer {
+ constructor (maxMessages?:number);
+ clearHistory():void;
+ getAllLogEvents():qx.data.Array;
+ getMaxMessages():number;
+ process(entry:IMap):void;
+ retrieveLogEvents(count:number,startingFromMark?:boolean):qx.data.Array;
+ setMaxMessages(maxMessages:number):void;
+
+}
+}
+declare module qx.log.appender {
+class Util {
+ static escapeHTML(value:string):string;
+ static formatOffset(offset:number,length?:number):string;
+ static toHtml(entry:IMap):void;
+ static toText(entry:IMap):string;
+ static toTextArray(entry:IMap):qx.data.Array;
+
+}
+}
+declare module qx.theme {
+class Classic {
+
+}
+}
+declare module qx.theme {
+class Indigo {
+
+}
+}
+declare module qx.theme {
+class Modern {
+
+}
+}
+declare module qx.theme {
+class Simple {
+
+}
+}
+declare module qx.theme.classic {
+class Appearance {
+
+}
+}
+declare module qx.theme.classic {
+class Color {
+
+}
+}
+declare module qx.theme.classic {
+class Decoration {
+
+}
+}
+declare module qx.theme.classic {
+class Font {
+
+}
+}
+declare module qx.theme.icon {
+class Oxygen {
+ static aliases: any;
+}
+}
+declare module qx.theme.icon {
+class Tango {
+ static aliases: any;
+}
+}
+declare module qx.theme.indigo {
+class Appearance {
+
+}
+}
+declare module qx.theme.indigo {
+class Color {
+
+}
+}
+declare module qx.theme.indigo {
+class Decoration {
+
+}
+}
+declare module qx.theme.indigo {
+class Font {
+
+}
+}
+declare module qx.theme.manager {
+class Appearance extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.theme.manager.Appearance;
+ protected _applyTheme(value:qx.Theme,old:qx.Theme):void;
+ getTheme():qx.Theme;
+ protected initTheme(value:any):qx.Theme;
+ resetTheme():void;
+ setTheme(value:any):qx.Theme;
+ styleFrom(id:string,states:IMap,theme?:qx.Theme,defaultId?:string):IMap;
+
+}
+}
+declare module qx.theme.manager {
+class Color extends qx.util.ValueManager {
+ static getInstance():qx.theme.manager.Color;
+ protected _applyTheme(value:qx.Theme,old:qx.Theme):void;
+ getTheme():qx.Theme;
+ protected initTheme(value:any):qx.Theme;
+ resetTheme():void;
+ setTheme(value:any):qx.Theme;
+
+}
+}
+declare module qx.theme.manager {
+class Decoration extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.theme.manager.Decoration;
+ protected _applyTheme(value:qx.Theme,old:qx.Theme):void;
+ addCssClass(value:string):string;
+ clear():void;
+ getCssClassName(value:string):string;
+ getTheme():qx.Theme;
+ protected initTheme(value:any):qx.Theme;
+ isCached(decorator:string):boolean;
+ isDynamic(value:string):boolean;
+ isValidPropertyValue(value:any):boolean;
+ refresh():void;
+ removeAllCssClasses():void;
+ resetTheme():void;
+ resolve(value:string):any;
+ setTheme(value:any):qx.Theme;
+
+}
+}
+declare module qx.theme.manager {
+class Font extends qx.util.ValueManager {
+ static getInstance():qx.theme.manager.Font;
+ protected _applyTheme(value:qx.Theme,old:qx.Theme):void;
+ getTheme():qx.Theme;
+ protected initTheme(value:any):qx.Theme;
+ resetTheme():void;
+ setTheme(value:any):qx.Theme;
+
+}
+}
+declare module qx.theme.manager {
+class Icon extends qx.core.Object {
+ static getInstance():qx.theme.manager.Icon;
+ protected _applyTheme(value:qx.Theme,old:qx.Theme):void;
+ getTheme():qx.Theme;
+ protected initTheme(value:any):qx.Theme;
+ resetTheme():void;
+ setTheme(value:any):qx.Theme;
+
+}
+}
+declare module qx.theme.manager {
+class Meta extends qx.core.Object {
+ static getInstance():qx.theme.manager.Meta;
+ protected _activateEvents():void;
+ protected _applyTheme(value:qx.Theme,old:qx.Theme):void;
+ protected _fireEvent(e:qx.event.type.Data):void;
+ protected _suspendEvents():void;
+ getTheme():qx.Theme;
+ initialize():void;
+ protected initTheme(value:any):qx.Theme;
+ resetTheme():void;
+ setTheme(value:any):qx.Theme;
+
+}
+}
+declare module qx.theme.modern {
+class Appearance {
+
+}
+}
+declare module qx.theme.modern {
+class Color {
+
+}
+}
+declare module qx.theme.modern {
+class Decoration {
+
+}
+}
+declare module qx.theme.modern {
+class Font {
+
+}
+}
+declare module qx.theme.simple {
+class Appearance {
+
+}
+}
+declare module qx.theme.simple {
+class Color {
+
+}
+}
+declare module qx.theme.simple {
+class Decoration {
+
+}
+}
+declare module qx.theme.simple {
+class Font {
+
+}
+}
+declare module qx.theme.simple {
+class Image extends qx.core.Object {
+
+}
+}
+declare module qx.type {
+class Array extends qx.type.BaseArray {
+ constructor (length_or_items?:number);
+ append(arr:qx.data.Array):qx.data.Array;
+ clone():qx.data.Array;
+ contains(obj:any):boolean;
+ insertAfter(obj:any,obj2:any):qx.data.Array;
+ insertAt(obj:any,i:number):qx.data.Array;
+ insertBefore(obj:any,obj2:any):qx.data.Array;
+ prepend(arr:qx.data.Array):qx.data.Array;
+ remove(obj:any):any;
+ removeAll():qx.data.Array;
+ removeAt(i:number):any;
+
+}
+}
+declare module qx.type {
+class BaseArray extends qx.data.Array {
+ constructor (length_or_items?:number);
+ concat(...varargs:qx.data.Array[]):qx.type.BaseArray;
+ every(callback:Function,obj:any):boolean;
+ filter(callback:Function,obj:any):any;
+ forEach(callback:Function,obj:any):void;
+ indexOf(searchElement:any,fromIndex?:number):number;
+ join(separator:string):string;
+ lastIndexOf(searchElement:any,fromIndex?:number):number;
+ map(callback:Function,obj:any):any;
+ pop():any;
+ push(...varargs:any[]):number;
+ reverse():qx.data.Array;
+ shift():any;
+ slice(begin:number,end?:number):any;
+ some(callback:Function,obj:any):boolean;
+ sort(compareFunction?:Function):qx.data.Array;
+ splice(index:number,howMany:number,...varargs:any[]):any;
+ toArray():qx.data.Array;
+ unshift(...varargs:any[]):number;
+
+}
+}
+declare module qx.type {
+class BaseError extends ErrorImpl {
+ constructor (comment?:string,failMessage?:string);
+ getComment():string;
+
+}
+}
+declare module qx.type {
+class BaseString {
+ constructor (txt?:string);
+ base(args:any,varags:any):any;
+ charAt(index:number):string;
+ charCodeAt(index:number):number;
+ concat(stringN:string):string;
+ indexOf(index:string,offset?:number):number;
+ lastIndexOf(index:string,offset?:number):number;
+ match(regexp:any):any;
+ replace(regexp:any,aFunction:Function):string;
+ search(regexp:any):any;
+ slice(beginslice:number,endSlice?:number):string;
+ split(separator?:string,limit?:number):qx.data.Array;
+ substr(start:number,length?:number):string;
+ substring(indexA:number,indexB?:number):string;
+ toHashCode():number;
+ toLocaleLowerCase():string;
+ toLocaleUpperCase():string;
+ toLowerCase():string;
+ toUpperCase():string;
+
+}
+}
+declare module qx.ui.basic {
+class Atom extends qx.ui.core.Widget {
+ constructor (label?:string,icon?:string);
+ protected _applyCenter(value:boolean,old:boolean):void;
+ protected _applyGap(value:number,old:number):void;
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyIconPosition(value:any,old:any):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applyRich(value:boolean,old:boolean):void;
+ protected _applyShow(value:any,old:any):void;
+ protected _handleIcon():void;
+ protected _handleLabel():void;
+ getCenter():boolean;
+ getGap():number;
+ getIcon():string;
+ getIconPosition():any;
+ getLabel():string;
+ getRich():boolean;
+ getShow():any;
+ protected initCenter(value:any):boolean;
+ protected initGap(value:any):number;
+ protected initIcon(value:any):string;
+ protected initIconPosition(value:any):any;
+ protected initLabel(value:any):string;
+ protected initRich(value:any):boolean;
+ protected initShow(value:any):any;
+ isCenter():boolean;
+ isRich():boolean;
+ resetCenter():void;
+ resetGap():void;
+ resetIcon():void;
+ resetIconPosition():void;
+ resetLabel():void;
+ resetRich():void;
+ resetShow():void;
+ setCenter(value:any):boolean;
+ setGap(value:any):number;
+ setIcon(value:any):string;
+ setIconPosition(value:any):any;
+ setLabel(value:any):string;
+ setRich(value:any):boolean;
+ setShow(value:any):any;
+ toggleCenter():boolean;
+ toggleRich():boolean;
+
+}
+}
+declare module qx.ui.basic {
+class Image extends qx.ui.core.Widget {
+ constructor (source?:string);
+ protected _applyScale(value:boolean,old:boolean):void;
+ protected _applySource(value:string,old:string):void;
+ protected _findHighResolutionSource(lowResImgSrc:string):string;
+ protected _getHighResolutionSource(source:string,pixelRatio:number):string;
+ protected _styleSource():void;
+ getScale():boolean;
+ getSource():string;
+ protected initScale(value:any):boolean;
+ protected initSource(value:any):string;
+ isScale():boolean;
+ resetScale():void;
+ resetSource():void;
+ setScale(value:any):boolean;
+ setSource(value:any):string;
+ toggleScale():boolean;
+
+}
+}
+declare module qx.ui.basic {
+class Label extends qx.ui.core.Widget implements qx.ui.form.IStringForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+ constructor (value?:string);
+ protected _applyBuddy(value:qx.ui.core.Widget,old:qx.ui.core.Widget):void;
+ protected _applyRich(value:boolean,old:boolean):void;
+ protected _applyTextAlign(value:any,old:any):void;
+ protected _applyValue(value:string,old:string):void;
+ protected _applyWrap(value:boolean,old:boolean):void;
+ protected _onChangeLocale(e:qx.event.type.Event):void;
+ protected _onWebFontStatusChange(ev:qx.event.type.Data):void;
+ getBuddy():qx.ui.core.Widget;
+ getRich():boolean;
+ getTextAlign():any;
+ getWrap():boolean;
+ protected initBuddy(value:any):qx.ui.core.Widget;
+ protected initRich(value:any):boolean;
+ protected initTextAlign(value:any):any;
+ protected initValue(value:any):string;
+ protected initWrap(value:any):boolean;
+ isRich():boolean;
+ isWrap():boolean;
+ resetBuddy():void;
+ resetRich():void;
+ resetTextAlign():void;
+ resetWrap():void;
+ setBuddy(value:any):qx.ui.core.Widget;
+ setRich(value:any):boolean;
+ setTextAlign(value:any):any;
+ setWrap(value:any):boolean;
+ toggleRich():boolean;
+ toggleWrap():boolean;
+
+}
+}
+declare module qx.ui.container {
+class Composite extends qx.ui.core.Widget {
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+ constructor (layout?:qx.ui.layout.Abstract);
+
+}
+}
+declare module qx.ui.container {
+class Resizer extends qx.ui.container.Composite {
+ getResizableBottom():boolean;
+ getResizableLeft():boolean;
+ getResizableRight():boolean;
+ getResizableTop():boolean;
+ getResizeSensitivity():number;
+ getUseResizeFrame():boolean;
+ isResizableBottom():boolean;
+ isResizableLeft():boolean;
+ isResizableRight():boolean;
+ isResizableTop():boolean;
+ isUseResizeFrame():boolean;
+ resetResizable():void;
+ resetResizableBottom():void;
+ resetResizableLeft():void;
+ resetResizableRight():void;
+ resetResizableTop():void;
+ resetResizeSensitivity():void;
+ resetUseResizeFrame():void;
+ setResizable(resizableTop:any,resizableRight:any,resizableBottom:any,resizableLeft:any):void;
+ setResizableBottom(value:any):boolean;
+ setResizableLeft(value:any):boolean;
+ setResizableRight(value:any):boolean;
+ setResizableTop(value:any):boolean;
+ setResizeSensitivity(value:any):number;
+ setUseResizeFrame(value:any):boolean;
+ toggleResizableBottom():boolean;
+ toggleResizableLeft():boolean;
+ toggleResizableRight():boolean;
+ toggleResizableTop():boolean;
+ toggleUseResizeFrame():boolean;
+
+}
+}
+declare module qx.ui.container {
+class Scroll extends qx.ui.core.scroll.AbstractScrollArea {
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ constructor (content?:qx.ui.core.LayoutItem);
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ add(widget:qx.ui.core.Widget):void;
+ getChildren():any[];
+ remove(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.container {
+class SlideBar extends qx.ui.core.Widget {
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+ constructor (orientation?:string);
+ protected _applyOrientation(value:any,old:any):void;
+ protected _hideArrows():void;
+ protected _onExecuteBackward():void;
+ protected _onExecuteForward():void;
+ protected _onResize(e:qx.event.type.Event):void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _onScroll():void;
+ protected _onScrollAnimationEnd():void;
+ protected _showArrows():void;
+ protected _updateArrowsEnabled():void;
+ getOrientation():any;
+ getScrollStep():number;
+ protected initOrientation(value:any):any;
+ protected initScrollStep(value:any):number;
+ resetOrientation():void;
+ resetScrollStep():void;
+ scrollBy(offset?:number,duration?:number):void;
+ scrollTo(value:number,duration?:number):void;
+ setOrientation(value:any):any;
+ setScrollStep(value:any):number;
+
+}
+}
+declare module qx.ui.container {
+class Stack extends qx.ui.core.Widget implements qx.ui.core.ISingleSelection {
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ constructor ();
+ protected _applyDynamic(value:boolean,old:boolean):void;
+ protected _getItems():qx.ui.core.Widget[];
+ protected _isAllowEmptySelection():boolean;
+ protected _isItemSelectable(item:qx.ui.core.Widget):boolean;
+ getDynamic():boolean;
+ protected initDynamic(value:any):boolean;
+ isDynamic():boolean;
+ next():void;
+ previous():void;
+ resetDynamic():void;
+ setDynamic(value:any):boolean;
+ toggleDynamic():boolean;
+
+}
+}
+declare module qx.ui.control {
+class ColorPopup extends qx.ui.popup.Popup implements qx.ui.form.IColorForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+ constructor ();
+ protected _applyValue(value:any,old:any):void;
+ protected _createBoxes():void;
+ protected _createColorSelector():void;
+ protected _onAutomaticBtnExecute():void;
+ protected _onChangeVisibility(e:qx.event.type.Data):void;
+ protected _onColorSelectorCancel():void;
+ protected _onColorSelectorOk():void;
+ protected _onFieldPointerDown(e:qx.event.type.Pointer):void;
+ protected _onFieldPointerOut(e:qx.event.type.Pointer):void;
+ protected _onFieldPointerOver(e:qx.event.type.Pointer):void;
+ protected _onSelectorButtonExecute():void;
+ protected _rotatePreviousColors():void;
+ getBlue():number;
+ getGreen():number;
+ getRed():number;
+ protected initBlue(value:any):number;
+ protected initGreen(value:any):number;
+ protected initRed(value:any):number;
+ protected initValue(value:any):any;
+ resetBlue():void;
+ resetGreen():void;
+ resetRed():void;
+ setBlue(value:any):number;
+ setGreen(value:any):number;
+ setRed(value:any):number;
+
+}
+}
+declare module qx.ui.control {
+class ColorSelector extends qx.ui.core.Widget implements qx.ui.form.IColorForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+ constructor ();
+ protected _applyBlue(value:number,old:number):void;
+ protected _applyBrightness(value:number,old:number):void;
+ protected _applyGreen(value:number,old:number):void;
+ protected _applyHue(value:number,old:number):void;
+ protected _applyRed(value:number,old:number):void;
+ protected _applySaturation(value:number,old:number):void;
+ protected _onAppear(e:qx.event.type.Data):void;
+ protected _onBrightnessFieldPointerDown(e:qx.event.type.Pointer):void;
+ protected _onBrightnessHandlePointerDown(e:qx.event.type.Pointer):void;
+ protected _onBrightnessHandlePointerMove(e:qx.event.type.Pointer):void;
+ protected _onBrightnessHandlePointerUp(e:qx.event.type.Pointer):void;
+ protected _onBrightnessPaneRoll(e:qx.event.type.Roll):void;
+ protected _onColorFieldTap(e:qx.event.type.Pointer):void;
+ protected _onHexFieldChange(e:qx.event.type.Data):void;
+ protected _onHueSaturationFieldPointerDown(e:qx.event.type.Pointer):void;
+ protected _onHueSaturationHandlePointerMove(e:qx.event.type.Pointer):void;
+ protected _onHueSaturationHandlePointerUp(e:qx.event.type.Pointer):void;
+ protected _onHueSaturationPaneRoll(e:qx.event.type.Roll):void;
+ protected _setBlueFromSpinner():void;
+ protected _setBrightnessFromSpinner():void;
+ protected _setBrightnessGradiant():void;
+ protected _setBrightnessOnFieldEvent(e:qx.event.type.Pointer):void;
+ protected _setGreenFromSpinner():void;
+ protected _setHexFromRgb():void;
+ protected _setHueFromRgb():void;
+ protected _setHueFromSpinner():void;
+ protected _setHueSaturationOnFieldEvent(e:qx.event.type.Pointer):void;
+ protected _setPreviewFromRgb():void;
+ protected _setRedFromSpinner():void;
+ protected _setRgbFromHue():void;
+ protected _setSaturationFromSpinner():void;
+ getBlue():number;
+ getBrightness():number;
+ getGreen():number;
+ getHue():number;
+ getRed():number;
+ getSaturation():number;
+ protected initBlue(value:any):number;
+ protected initBrightness(value:any):number;
+ protected initGreen(value:any):number;
+ protected initHue(value:any):number;
+ protected initRed(value:any):number;
+ protected initSaturation(value:any):number;
+ resetBlue():void;
+ resetBrightness():void;
+ resetGreen():void;
+ resetHue():void;
+ resetRed():void;
+ resetSaturation():void;
+ setBlue(value:any):number;
+ setBrightness(value:any):number;
+ setGreen(value:any):number;
+ setHue(value:any):number;
+ setPreviousColor(red:number,green:number,blue:number):void;
+ setRed(value:any):number;
+ setSaturation(value:any):number;
+
+}
+}
+declare module qx.ui.control {
+class DateChooser extends qx.ui.core.Widget implements qx.ui.form.IExecutable,qx.ui.form.IForm,qx.ui.form.IDateForm {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getValue():Date;
+ resetValue():void;
+ setValue(value:Date):void;
+ resetCommand():void;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (date?:Date);
+ protected _applyValue(value:Date,old:Date):void;
+ protected _onDayDblTap():void;
+ protected _onDayTap(evt:qx.event.type.Data):void;
+ protected _onKeyPress(evt:qx.event.type.Data):void;
+ protected _onNavButtonTap(evt:qx.event.type.Data):void;
+ protected _onPointerUpDown(e:qx.event.type.Pointer):void;
+ protected _updateDatePane():void;
+ getShownMonth():number;
+ getShownYear():number;
+ handleKeyPress(e:qx.event.type.Data):void;
+ protected initShownMonth(value:any):number;
+ protected initShownYear(value:any):number;
+ protected initValue(value:any):Date;
+ resetShownMonth():void;
+ resetShownYear():void;
+ setShownMonth(value:any):number;
+ setShownYear(value:any):number;
+ showMonth(month?:number,year?:number):void;
+
+}
+}
+declare module qx.ui.core {
+class Blocker extends qx.core.Object {
+ constructor (widget?:qx.ui.core.Widget);
+ protected _applyColor(value:string,old:string):void;
+ protected _applyOpacity(value:number,old:number):void;
+ protected _backupActiveWidget():void;
+ protected _block(zIndex:number,blockContent:boolean):void;
+ protected _onChangeTheme():void;
+ protected _restoreActiveWidget():void;
+ protected _updateBlockerBounds(bounds:IMap):void;
+ block():void;
+ blockContent(zIndex:number):void;
+ forceUnblock():void;
+ getBlockerElement(widget:qx.ui.core.Widget):qx.html.Element;
+ getColor():string;
+ getKeepBlockerActive():boolean;
+ getOpacity():number;
+ protected initColor(value:any):string;
+ protected initKeepBlockerActive(value:any):boolean;
+ protected initOpacity(value:any):number;
+ isBlocked():boolean;
+ isKeepBlockerActive():boolean;
+ resetColor():void;
+ resetKeepBlockerActive():void;
+ resetOpacity():void;
+ setColor(value:any):string;
+ setKeepBlockerActive(value:any):boolean;
+ setOpacity(value:any):number;
+ toggleKeepBlockerActive():boolean;
+ unblock():void;
+
+}
+}
+declare module qx.ui.core {
+class ColumnData extends qx.ui.core.LayoutItem {
+ constructor ();
+ getComputedWidth():number;
+ getFlex():number;
+ setColumnWidth(width:number,flex?:number):void;
+
+}
+}
+declare module qx.ui.core {
+class DragDropCursor extends qx.ui.basic.Image {
+ static getMoveDirection():string;
+ static getVisibleElement():qx.ui.core.Widget;
+ static setMoveDirection(direction:string):void;
+ static setVisibleElement(elem:qx.ui.core.Widget):void;
+ getDomMove():boolean;
+ getLayoutLocation(widget:qx.ui.core.Widget):IMap;
+ getOffsetBottom():number;
+ getOffsetLeft():number;
+ getOffsetRight():number;
+ getOffsetTop():number;
+ getPlacementModeX():any;
+ getPlacementModeY():any;
+ getPlaceMethod():any;
+ getPosition():any;
+ isDomMove():boolean;
+ moveTo(left:number,top:number):void;
+ placeToElement(elem:HTMLElement,liveupdate:boolean):void;
+ placeToPoint(point:IMap):void;
+ placeToPointer(event:qx.event.type.Pointer):void;
+ placeToWidget(target:qx.ui.core.Widget,liveupdate:boolean):boolean;
+ resetDomMove():void;
+ resetOffset():void;
+ resetOffsetBottom():void;
+ resetOffsetLeft():void;
+ resetOffsetRight():void;
+ resetOffsetTop():void;
+ resetPlacementModeX():void;
+ resetPlacementModeY():void;
+ resetPlaceMethod():void;
+ resetPosition():void;
+ setDomMove(value:any):boolean;
+ setOffset(offsetTop:any,offsetRight:any,offsetBottom:any,offsetLeft:any):void;
+ setOffsetBottom(value:any):number;
+ setOffsetLeft(value:any):number;
+ setOffsetRight(value:any):number;
+ setOffsetTop(value:any):number;
+ setPlacementModeX(value:any):any;
+ setPlacementModeY(value:any):any;
+ setPlaceMethod(value:any):any;
+ setPosition(value:any):any;
+ toggleDomMove():boolean;
+ constructor ();
+ static getInstance():qx.ui.core.DragDropCursor;
+ protected _applyAction(value:any,old:any):void;
+ getAction():any;
+ protected initAction(value:any):any;
+ resetAction():void;
+ setAction(value:any):any;
+
+}
+}
+declare module qx.ui.core {
+class EventHandler extends qx.core.Object implements qx.event.IEventHandler {
+ canHandleEvent(target:any,type:string):boolean;
+ registerEvent(target:any,type:string,capture:boolean):void;
+ unregisterEvent(target:any,type:string,capture:boolean):void;
+ constructor ();
+ protected _dispatchEvent(domEvent:qx.event.type.Event):void;
+
+}
+}
+declare module qx.ui.core {
+class FocusHandler extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.ui.core.FocusHandler;
+ protected _onActivate(e:qx.event.type.Focus):void;
+ protected _onDeactivate(e:qx.event.type.Focus):void;
+ protected _onFocusIn(e:qx.event.type.Focus):void;
+ protected _onFocusOut(e:qx.event.type.Focus):void;
+ addRoot(widget:qx.ui.core.Widget):void;
+ connectTo(root:qx.ui.root.Abstract):void;
+ getActiveWidget():qx.ui.core.Widget;
+ getFocusedWidget():qx.ui.core.Widget;
+ isActive(widget:qx.ui.core.Widget):boolean;
+ isFocused(widget:qx.ui.core.Widget):boolean;
+ isFocusRoot(widget:qx.ui.core.Widget):boolean;
+ removeRoot(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.core {
+interface IMultiSelection {
+ addToSelection(item:qx.ui.core.Widget):void;
+ removeFromSelection(item:qx.ui.core.Widget):void;
+ selectAll():void;
+
+}
+}
+declare module qx.ui.core {
+interface ISingleSelection {
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+
+}
+}
+declare module qx.ui.core {
+interface ISingleSelectionProvider {
+ getItems():qx.ui.core.Widget[];
+ isItemSelectable(item:qx.ui.core.Widget):boolean;
+
+}
+}
+declare module qx.ui.core {
+class LayoutItem extends qx.core.Object {
+ constructor ();
+ protected _applyAlign(value:any,old:any):void;
+ protected _applyDimension(value:number,old:number):void;
+ protected _applyMargin(value:number,old:number):void;
+ protected _applyStretching(value:boolean,old:boolean):void;
+ protected _computeSizeHint():IMap;
+ protected _getHeightForWidth(width:number):number;
+ protected _getLayout():qx.ui.layout.Abstract;
+ protected _getRoot():qx.ui.core.Widget;
+ protected _hasHeightForWidth():boolean;
+ protected _onChangeTheme():void;
+ clearLayoutProperties():void;
+ clearSeparators():void;
+ getAlignX():any;
+ getAlignY():any;
+ getAllowGrowX():boolean;
+ getAllowGrowY():boolean;
+ getAllowShrinkX():boolean;
+ getAllowShrinkY():boolean;
+ getApplicationRoot():qx.ui.root.Abstract;
+ getBounds():IMap;
+ getHeight():number;
+ getLayoutParent():qx.ui.core.Widget;
+ getLayoutProperties():IMap;
+ getMarginBottom():number;
+ getMarginLeft():number;
+ getMarginRight():number;
+ getMarginTop():number;
+ getMaxHeight():number;
+ getMaxWidth():number;
+ getMinHeight():number;
+ getMinWidth():number;
+ getSizeHint(compute?:boolean):IMap;
+ getWidth():number;
+ hasUserBounds():boolean;
+ hasValidLayout():boolean;
+ protected initAlignX(value:any):any;
+ protected initAlignY(value:any):any;
+ protected initAllowGrowX(value:any):boolean;
+ protected initAllowGrowY(value:any):boolean;
+ protected initAllowShrinkX(value:any):boolean;
+ protected initAllowShrinkY(value:any):boolean;
+ protected initHeight(value:any):number;
+ protected initMarginBottom(value:any):number;
+ protected initMarginLeft(value:any):number;
+ protected initMarginRight(value:any):number;
+ protected initMarginTop(value:any):number;
+ protected initMaxHeight(value:any):number;
+ protected initMaxWidth(value:any):number;
+ protected initMinHeight(value:any):number;
+ protected initMinWidth(value:any):number;
+ protected initWidth(value:any):number;
+ invalidateLayoutCache():void;
+ isAllowGrowX():boolean;
+ isAllowGrowY():boolean;
+ isAllowShrinkX():boolean;
+ isAllowShrinkY():boolean;
+ isExcluded():boolean;
+ isRootWidget():boolean;
+ renderLayout(left:number,top:number,width:number,height:number):IMap;
+ renderSeparator(separator:string,bounds:IMap):void;
+ resetAlignX():void;
+ resetAlignY():void;
+ resetAllowGrowX():void;
+ resetAllowGrowY():void;
+ resetAllowShrinkX():void;
+ resetAllowShrinkY():void;
+ resetAllowStretchX():void;
+ resetAllowStretchY():void;
+ resetHeight():void;
+ resetMargin():void;
+ resetMarginBottom():void;
+ resetMarginLeft():void;
+ resetMarginRight():void;
+ resetMarginTop():void;
+ resetMaxHeight():void;
+ resetMaxWidth():void;
+ resetMinHeight():void;
+ resetMinWidth():void;
+ resetUserBounds():void;
+ resetWidth():void;
+ scheduleLayoutUpdate():void;
+ setAlignX(value:any):any;
+ setAlignY(value:any):any;
+ setAllowGrowX(value:any):boolean;
+ setAllowGrowY(value:any):boolean;
+ setAllowShrinkX(value:any):boolean;
+ setAllowShrinkY(value:any):boolean;
+ setAllowStretchX(allowGrowX:any,allowShrinkX:any):void;
+ setAllowStretchY(allowGrowY:any,allowShrinkY:any):void;
+ setHeight(value:any):number;
+ setLayoutParent(parent:qx.ui.core.Widget):void;
+ setLayoutProperties(props:IMap):void;
+ setMargin(marginTop:any,marginRight:any,marginBottom:any,marginLeft:any):void;
+ setMarginBottom(value:any):number;
+ setMarginLeft(value:any):number;
+ setMarginRight(value:any):number;
+ setMarginTop(value:any):number;
+ setMaxHeight(value:any):number;
+ setMaxWidth(value:any):number;
+ setMinHeight(value:any):number;
+ setMinWidth(value:any):number;
+ setUserBounds(left:number,top:number,width:number,height:number):void;
+ setWidth(value:any):number;
+ toggleAllowGrowX():boolean;
+ toggleAllowGrowY():boolean;
+ toggleAllowShrinkX():boolean;
+ toggleAllowShrinkY():boolean;
+ updateLayoutProperties(props?:IMap):void;
+
+}
+}
+declare module qx.ui.core {
+class MBlocker {
+ protected _applyBlockerColor(value:string,old:string):void;
+ protected _applyBlockerOpacity(value:number,old:number):void;
+ protected _createBlocker():qx.ui.core.Blocker;
+ block():void;
+ blockContent(zIndex:number):void;
+ forceUnblock():void;
+ getBlocker():qx.ui.core.Blocker;
+ getBlockerColor():string;
+ getBlockerOpacity():number;
+ protected initBlockerColor(value:any):string;
+ protected initBlockerOpacity(value:any):number;
+ isBlocked():boolean;
+ resetBlockerColor():void;
+ resetBlockerOpacity():void;
+ setBlockerColor(value:any):string;
+ setBlockerOpacity(value:any):number;
+ unblock():void;
+
+}
+}
+declare module qx.ui.core {
+class MChildrenHandling {
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+
+}
+}
+declare module qx.ui.core {
+class MContentPadding {
+ protected _applyContentPadding(value:number,old:number):void;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ protected initContentPaddingBottom(value:any):number;
+ protected initContentPaddingLeft(value:any):number;
+ protected initContentPaddingRight(value:any):number;
+ protected initContentPaddingTop(value:any):number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+
+}
+}
+declare module qx.ui.core {
+class MDragDropScrolling {
+ constructor ();
+ protected _calculateScrollAmount(scrollbarSize:number,exceedanceAmount:number):number;
+ protected _calculateThresholdExceedance(diff:number,threshold:number):number;
+ protected _findScrollableParent(widget:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ protected _getAxis(edgeType:string):string;
+ protected _getBounds(scrollable:qx.ui.core.Widget):IMap;
+ protected _getEdgeType(diff:IMap,thresholdX:number,thresholdY:number):string;
+ protected _getThresholdByEdgeType(edgeType:string):number;
+ protected _isScrollable(widget:qx.ui.core.Widget):boolean;
+ protected _isScrollbarExceedingMaxPos(scrollbar:qx.ui.core.scroll.IScrollBar,axis:string,amount:number):boolean;
+ protected _isScrollbarVisible(scrollable:qx.ui.core.Widget,axis:string):boolean;
+ protected _scrollBy(scrollable:qx.ui.core.Widget,axis:string,exceedanceAmount:number):void;
+ getDragScrollSlowDownFactor():number;
+ getDragScrollThresholdX():number;
+ getDragScrollThresholdY():number;
+ protected initDragScrollSlowDownFactor(value:any):number;
+ protected initDragScrollThresholdX(value:any):number;
+ protected initDragScrollThresholdY(value:any):number;
+ resetDragScrollSlowDownFactor():void;
+ resetDragScrollThresholdX():void;
+ resetDragScrollThresholdY():void;
+ setDragScrollSlowDownFactor(value:any):number;
+ setDragScrollThresholdX(value:any):number;
+ setDragScrollThresholdY(value:any):number;
+
+}
+}
+declare module qx.ui.core {
+class MExecutable {
+ protected _applyCommand(value:qx.ui.command.Command,old:qx.ui.command.Command):void;
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ protected initCommand(value:any):qx.ui.command.Command;
+ resetCommand():void;
+ setCommand(value:any):qx.ui.command.Command;
+
+}
+}
+declare module qx.ui.core {
+class MLayoutHandling {
+ static remap(members:IMap):void;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+
+}
+}
+declare module qx.ui.core {
+class MMovable {
+ protected _activateMoveHandle(widget:qx.ui.core.Widget):void;
+ protected _onMovePointerDown(e:qx.event.type.Pointer):void;
+ protected _onMovePointerMove(e:qx.event.type.Pointer):void;
+ protected _onMovePointerUp(e:qx.event.type.Pointer):void;
+ protected _onMoveRoll(e:qx.event.type.Roll):void;
+ getMovable():boolean;
+ getUseMoveFrame():boolean;
+ protected initMovable(value:any):boolean;
+ protected initUseMoveFrame(value:any):boolean;
+ isMovable():boolean;
+ isUseMoveFrame():boolean;
+ resetMovable():void;
+ resetUseMoveFrame():void;
+ setMovable(value:any):boolean;
+ setUseMoveFrame(value:any):boolean;
+ toggleMovable():boolean;
+ toggleUseMoveFrame():boolean;
+
+}
+}
+declare module qx.ui.core {
+class MMultiSelectionHandling {
+ constructor ();
+ protected _applyDragSelection(value:boolean,old:boolean):void;
+ protected _applyQuickSelection(value:boolean,old:boolean):void;
+ protected _applySelectionMode(value:any,old:any):void;
+ protected _getLeadItem():qx.ui.core.Widget;
+ protected _getManager():qx.ui.core.selection.Abstract;
+ protected _onSelectionChange(e:qx.event.type.Data):void;
+ addToSelection(item:qx.ui.core.Widget):void;
+ getDragSelection():boolean;
+ getQuickSelection():boolean;
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ getSelectionContext():string;
+ getSelectionMode():any;
+ getSortedSelection():qx.ui.core.Widget[];
+ protected initDragSelection(value:any):boolean;
+ protected initQuickSelection(value:any):boolean;
+ protected initSelectionMode(value:any):any;
+ invertSelection():void;
+ isDragSelection():boolean;
+ isQuickSelection():boolean;
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ removeFromSelection(item:qx.ui.core.Widget):void;
+ resetDragSelection():void;
+ resetQuickSelection():void;
+ resetSelection():void;
+ resetSelectionMode():void;
+ selectAll():void;
+ selectRange(begin:qx.ui.core.Widget,end:qx.ui.core.Widget):void;
+ setDragSelection(value:any):boolean;
+ setQuickSelection(value:any):boolean;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ setSelectionMode(value:any):any;
+ toggleDragSelection():boolean;
+ toggleQuickSelection():boolean;
+
+}
+}
+declare module qx.ui.core {
+class MNativeOverflow {
+ protected _applyOverflowX(value:any,old:any):void;
+ protected _applyOverflowY(value:any,old:any):void;
+ getOverflowX():any;
+ getOverflowY():any;
+ protected initOverflowX(value:any):any;
+ protected initOverflowY(value:any):any;
+ resetOverflow():void;
+ resetOverflowX():void;
+ resetOverflowY():void;
+ setOverflow(overflowX:any,overflowY:any):void;
+ setOverflowX(value:any):any;
+ setOverflowY(value:any):any;
+
+}
+}
+declare module qx.ui.core {
+class MPlacement {
+ static getMoveDirection():string;
+ static getVisibleElement():qx.ui.core.Widget;
+ static setMoveDirection(direction:string):void;
+ static setVisibleElement(elem:qx.ui.core.Widget):void;
+ protected _getPlacementOffsets():IMap;
+ protected _place(coords:IMap):void;
+ getDomMove():boolean;
+ getLayoutLocation(widget:qx.ui.core.Widget):IMap;
+ getOffsetBottom():number;
+ getOffsetLeft():number;
+ getOffsetRight():number;
+ getOffsetTop():number;
+ getPlacementModeX():any;
+ getPlacementModeY():any;
+ getPlaceMethod():any;
+ getPosition():any;
+ protected initDomMove(value:any):boolean;
+ protected initOffsetBottom(value:any):number;
+ protected initOffsetLeft(value:any):number;
+ protected initOffsetRight(value:any):number;
+ protected initOffsetTop(value:any):number;
+ protected initPlacementModeX(value:any):any;
+ protected initPlacementModeY(value:any):any;
+ protected initPlaceMethod(value:any):any;
+ protected initPosition(value:any):any;
+ isDomMove():boolean;
+ moveTo(left:number,top:number):void;
+ placeToElement(elem:HTMLElement,liveupdate:boolean):void;
+ placeToPoint(point:IMap):void;
+ placeToPointer(event:qx.event.type.Pointer):void;
+ placeToWidget(target:qx.ui.core.Widget,liveupdate:boolean):boolean;
+ resetDomMove():void;
+ resetOffset():void;
+ resetOffsetBottom():void;
+ resetOffsetLeft():void;
+ resetOffsetRight():void;
+ resetOffsetTop():void;
+ resetPlacementModeX():void;
+ resetPlacementModeY():void;
+ resetPlaceMethod():void;
+ resetPosition():void;
+ setDomMove(value:any):boolean;
+ setOffset(offsetTop:any,offsetRight:any,offsetBottom:any,offsetLeft:any):void;
+ setOffsetBottom(value:any):number;
+ setOffsetLeft(value:any):number;
+ setOffsetRight(value:any):number;
+ setOffsetTop(value:any):number;
+ setPlacementModeX(value:any):any;
+ setPlacementModeY(value:any):any;
+ setPlaceMethod(value:any):any;
+ setPosition(value:any):any;
+ toggleDomMove():boolean;
+
+}
+}
+declare module qx.ui.core {
+class MRemoteChildrenHandling {
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+
+}
+}
+declare module qx.ui.core {
+class MRemoteLayoutHandling {
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+
+}
+}
+declare module qx.ui.core {
+class MResizable {
+ constructor ();
+ protected _getResizeFrame():qx.ui.core.Widget;
+ getResizableBottom():boolean;
+ getResizableLeft():boolean;
+ getResizableRight():boolean;
+ getResizableTop():boolean;
+ getResizeSensitivity():number;
+ getUseResizeFrame():boolean;
+ protected initResizableBottom(value:any):boolean;
+ protected initResizableLeft(value:any):boolean;
+ protected initResizableRight(value:any):boolean;
+ protected initResizableTop(value:any):boolean;
+ protected initResizeSensitivity(value:any):number;
+ protected initUseResizeFrame(value:any):boolean;
+ isResizableBottom():boolean;
+ isResizableLeft():boolean;
+ isResizableRight():boolean;
+ isResizableTop():boolean;
+ isUseResizeFrame():boolean;
+ resetResizable():void;
+ resetResizableBottom():void;
+ resetResizableLeft():void;
+ resetResizableRight():void;
+ resetResizableTop():void;
+ resetResizeSensitivity():void;
+ resetUseResizeFrame():void;
+ setResizable(resizableTop:any,resizableRight:any,resizableBottom:any,resizableLeft:any):void;
+ setResizableBottom(value:any):boolean;
+ setResizableLeft(value:any):boolean;
+ setResizableRight(value:any):boolean;
+ setResizableTop(value:any):boolean;
+ setResizeSensitivity(value:any):number;
+ setUseResizeFrame(value:any):boolean;
+ toggleResizableBottom():boolean;
+ toggleResizableLeft():boolean;
+ toggleResizableRight():boolean;
+ toggleResizableTop():boolean;
+ toggleUseResizeFrame():boolean;
+
+}
+}
+declare module qx.ui.core {
+class MSingleSelectionHandling {
+ protected _onChangeSelected(e:qx.event.type.Data):void;
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+
+}
+}
+declare module qx.ui.core {
+class SingleSelectionManager extends qx.core.Object {
+ constructor (selectionProvider?:qx.ui.core.ISingleSelectionProvider);
+ getAllowEmptySelection():boolean;
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelected():qx.ui.core.Widget;
+ protected initAllowEmptySelection(value:any):boolean;
+ isAllowEmptySelection():boolean;
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetAllowEmptySelection():void;
+ resetSelected():void;
+ setAllowEmptySelection(value:any):boolean;
+ setSelected(item:qx.ui.core.Widget):void;
+ toggleAllowEmptySelection():boolean;
+
+}
+}
+declare module qx.ui.core {
+class Spacer extends qx.ui.core.LayoutItem {
+ constructor (width?:number,height?:number);
+ addChildrenToQueue(queue:IMap):void;
+ checkAppearanceNeeds():void;
+ destroy():void;
+
+}
+}
+declare module qx.ui.core {
+class Widget extends qx.ui.core.LayoutItem {
+ marktr(messageId:string):string;
+ tr(messageId:string,...varargs:any[]):string;
+ trc(hint:string,messageId:string,...varargs:any[]):string;
+ trn(singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ trnc(hint:string,singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ constructor ();
+ static contains(parent:qx.ui.core.Widget,child:qx.ui.core.Widget):boolean;
+ static getWidgetByElement(element:HTMLElement,considerAnonymousState?:boolean):qx.ui.core.Widget;
+ protected _add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ protected _addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ protected _addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ protected _addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ protected _afterAddChild(child:qx.ui.core.LayoutItem):void;
+ protected _afterRemoveChild(child:qx.ui.core.LayoutItem):void;
+ protected _applyAnonymous(value:boolean,old:boolean):void;
+ protected _applyAppearance(value:string,old:string):void;
+ protected _applyBackgroundColor(value:string,old:string):void;
+ protected _applyContextMenu(value:qx.ui.menu.Menu,old:qx.ui.menu.Menu):void;
+ protected _applyCursor(value:string,old:string):void;
+ protected _applyDecorator(value:qx.ui.decoration.Decorator,old:qx.ui.decoration.Decorator):void;
+ protected _applyDraggable(value:boolean,old:boolean):void;
+ protected _applyDroppable(value:boolean,old:boolean):void;
+ protected _applyEnabled(value:boolean,old:boolean):void;
+ protected _applyFocusable(value:boolean,old:boolean):void;
+ protected _applyFont(value:string,old:string):void;
+ protected _applyKeepActive(value:boolean,old:boolean):void;
+ protected _applyKeepFocus(value:boolean,old:boolean):void;
+ protected _applyNativeContextMenu(value:boolean,old:boolean):void;
+ protected _applyOpacity(value:number,old:number):void;
+ protected _applyPadding(value:number,old:number):void;
+ protected _applySelectable(value:boolean,old:boolean):void;
+ protected _applyTabIndex(value:number,old:number):void;
+ protected _applyTextColor(value:string,old:string):void;
+ protected _applyToolTipText(value:string,old:string):void;
+ protected _applyVisibility(value:any,old:any):void;
+ protected _applyZIndex(value:number,old:number):void;
+ protected _createChildControl(id:string):qx.ui.core.Widget;
+ protected _createChildControlImpl(id:string,hash?:string):qx.ui.core.Widget;
+ protected _createContentElement():qx.html.Element;
+ protected _disposeChildControls():void;
+ protected _excludeChildControl(id:string):void;
+ protected _findTopControl():qx.ui.core.Widget;
+ protected _getChildren():qx.ui.core.LayoutItem[];
+ protected _getContentHeightForWidth(width:number):number;
+ protected _getContentHint():IMap;
+ protected _getCreatedChildControls():IMap;
+ protected _getDragDropCursor():qx.ui.core.DragDropCursor;
+ protected _hasChildren():boolean;
+ protected _indexOf(child:qx.ui.core.Widget):number;
+ protected _isChildControlVisible(id:string):boolean;
+ protected _onBeforeContextMenuOpen(e:qx.event.type.Data):void;
+ protected _onContextMenuOpen(e:qx.event.type.Pointer):void;
+ protected _onDrag(e:qx.event.type.Drag):void;
+ protected _onDragChange(e:qx.event.type.Drag):void;
+ protected _onDragEnd(e:qx.event.type.Drag):void;
+ protected _onDragStart(e:qx.event.type.Drag):void;
+ protected _onStopEvent(e:qx.event.type.Event):void;
+ protected _releaseChildControl(id:string):qx.ui.core.Widget;
+ protected _remove(child:qx.ui.core.LayoutItem):void;
+ protected _removeAll():qx.data.Array;
+ protected _removeAt(index:number):qx.ui.core.LayoutItem;
+ protected _setLayout(layout:qx.ui.layout.Abstract):void;
+ protected _showChildControl(id:string):qx.ui.core.Widget;
+ activate():void;
+ addChildrenToQueue(queue:qx.data.Array):void;
+ addState(state:string):void;
+ blur():void;
+ capture(capture?:boolean):void;
+ checkAppearanceNeeds():void;
+ deactivate():void;
+ destroy():void;
+ exclude():void;
+ fadeIn(duration:number):qx.bom.element.AnimationHandle;
+ fadeOut(duration:number):qx.bom.element.AnimationHandle;
+ focus():void;
+ getAnonymous():boolean;
+ getAppearance():string;
+ getBackgroundColor():string;
+ getBlockToolTip():boolean;
+ getChildControl(id:string,notcreate?:boolean):qx.ui.core.Widget;
+ getChildrenContainer():qx.ui.core.Widget;
+ getContentElement():qx.html.Element;
+ getContentLocation(mode?:string):IMap;
+ getContextMenu():qx.ui.menu.Menu;
+ getCursor():string;
+ getDecorator():qx.ui.decoration.Decorator;
+ getDraggable():boolean;
+ getDroppable():boolean;
+ getEnabled():boolean;
+ getEventTarget():qx.ui.core.Widget;
+ getFocusable():boolean;
+ getFocusElement():qx.html.Element;
+ getFocusTarget():qx.ui.core.Widget;
+ getFont():string;
+ getInnerSize():IMap;
+ getInsets():IMap;
+ getKeepActive():boolean;
+ getKeepFocus():boolean;
+ getLayoutChildren():qx.ui.core.Widget[];
+ getNativeContextMenu():boolean;
+ getOpacity():number;
+ getPaddingBottom():number;
+ getPaddingLeft():number;
+ getPaddingRight():number;
+ getPaddingTop():number;
+ getSelectable():boolean;
+ getShowToolTipWhenDisabled():boolean;
+ getTabIndex():number;
+ getTextColor():string;
+ getToolTip():qx.ui.tooltip.ToolTip;
+ getToolTipIcon():string;
+ getToolTipText():string;
+ getVisibility():any;
+ getZIndex():number;
+ hasChildControl(id:string):boolean;
+ hasLayoutChildren():boolean;
+ hasState(state:string):boolean;
+ hide():void;
+ protected initAnonymous(value:any):boolean;
+ protected initAppearance(value:any):string;
+ protected initBackgroundColor(value:any):string;
+ protected initBlockToolTip(value:any):boolean;
+ protected initContextMenu(value:any):qx.ui.menu.Menu;
+ protected initCursor(value:any):string;
+ protected initDecorator(value:any):qx.ui.decoration.Decorator;
+ protected initDraggable(value:any):boolean;
+ protected initDroppable(value:any):boolean;
+ protected initEnabled(value:any):boolean;
+ protected initFocusable(value:any):boolean;
+ protected initFont(value:any):string;
+ protected initKeepActive(value:any):boolean;
+ protected initKeepFocus(value:any):boolean;
+ protected initNativeContextMenu(value:any):boolean;
+ protected initOpacity(value:any):number;
+ protected initPaddingBottom(value:any):number;
+ protected initPaddingLeft(value:any):number;
+ protected initPaddingRight(value:any):number;
+ protected initPaddingTop(value:any):number;
+ protected initSelectable(value:any):boolean;
+ protected initShowToolTipWhenDisabled(value:any):boolean;
+ protected initTabIndex(value:any):number;
+ protected initTextColor(value:any):string;
+ protected initToolTip(value:any):qx.ui.tooltip.ToolTip;
+ protected initToolTipIcon(value:any):string;
+ protected initToolTipText(value:any):string;
+ protected initVisibility(value:any):any;
+ protected initZIndex(value:any):number;
+ invalidateLayoutChildren():void;
+ isAnonymous():boolean;
+ isBlockToolTip():boolean;
+ isCapturing():boolean;
+ isDraggable():boolean;
+ isDroppable():boolean;
+ isEnabled():boolean;
+ isFocusable():boolean;
+ isHidden():boolean;
+ isKeepActive():boolean;
+ isKeepFocus():boolean;
+ isNativeContextMenu():boolean;
+ isSeeable():boolean;
+ isSelectable():boolean;
+ isShowToolTipWhenDisabled():boolean;
+ isTabable():boolean;
+ isVisible():boolean;
+ releaseCapture():void;
+ removeState(state:string):void;
+ replaceState(old:string,value:string):void;
+ resetAnonymous():void;
+ resetAppearance():void;
+ resetBackgroundColor():void;
+ resetBlockToolTip():void;
+ resetContextMenu():void;
+ resetCursor():void;
+ resetDecorator():void;
+ resetDraggable():void;
+ resetDroppable():void;
+ resetEnabled():void;
+ resetFocusable():void;
+ resetFont():void;
+ resetKeepActive():void;
+ resetKeepFocus():void;
+ resetNativeContextMenu():void;
+ resetOpacity():void;
+ resetPadding():void;
+ resetPaddingBottom():void;
+ resetPaddingLeft():void;
+ resetPaddingRight():void;
+ resetPaddingTop():void;
+ resetSelectable():void;
+ resetShowToolTipWhenDisabled():void;
+ resetTabIndex():void;
+ resetTextColor():void;
+ resetToolTip():void;
+ resetToolTipIcon():void;
+ resetToolTipText():void;
+ resetVisibility():void;
+ resetZIndex():void;
+ scrollChildIntoView(child:qx.ui.core.Widget,alignX?:string,alignY?:string,direct?:boolean):void;
+ scrollChildIntoViewX(child:qx.ui.core.Widget,align?:string,direct?:boolean):void;
+ scrollChildIntoViewY(child:qx.ui.core.Widget,align?:string,direct?:boolean):void;
+ setAnonymous(value:any):boolean;
+ setAppearance(value:any):string;
+ setBackgroundColor(value:any):string;
+ setBlockToolTip(value:any):boolean;
+ setContextMenu(value:any):qx.ui.menu.Menu;
+ setCursor(value:any):string;
+ setDecorator(value:any):qx.ui.decoration.Decorator;
+ setDomLeft(value:number):void;
+ setDomPosition(left:number,top:number):void;
+ setDomTop(value:number):void;
+ setDraggable(value:any):boolean;
+ setDroppable(value:any):boolean;
+ setEnabled(value:any):any;
+ setFocusable(value:any):boolean;
+ setFont(value:any):string;
+ setKeepActive(value:any):boolean;
+ setKeepFocus(value:any):boolean;
+ setNativeContextMenu(value:any):boolean;
+ setOpacity(value:any):number;
+ setPadding(paddingTop:any,paddingRight:any,paddingBottom:any,paddingLeft:any):void;
+ setPaddingBottom(value:any):number;
+ setPaddingLeft(value:any):number;
+ setPaddingRight(value:any):number;
+ setPaddingTop(value:any):number;
+ setSelectable(value:any):boolean;
+ setShowToolTipWhenDisabled(value:any):boolean;
+ setTabIndex(value:any):number;
+ setTextColor(value:any):string;
+ setToolTip(value:any):qx.ui.tooltip.ToolTip;
+ setToolTipIcon(value:any):string;
+ setToolTipText(value:any):string;
+ setVisibility(value:any):any;
+ setZIndex(value:any):number;
+ show():void;
+ syncAppearance():void;
+ syncWidget(jobs:IMap):void;
+ tabFocus():void;
+ toggleAnonymous():boolean;
+ toggleBlockToolTip():boolean;
+ toggleDraggable():boolean;
+ toggleDroppable():boolean;
+ toggleEnabled():boolean;
+ toggleFocusable():boolean;
+ toggleKeepActive():boolean;
+ toggleKeepFocus():boolean;
+ toggleNativeContextMenu():boolean;
+ toggleSelectable():boolean;
+ toggleShowToolTipWhenDisabled():boolean;
+ updateAppearance():void;
+ visualizeBlur():void;
+ visualizeFocus():void;
+
+}
+}
+declare module qx.ui.core.queue {
+class Appearance {
+ static add(widget:qx.ui.core.Widget):void;
+ static flush():void;
+ static has(widget:qx.ui.core.Widget):boolean;
+ static remove(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.core.queue {
+class Dispose {
+ static add(widget:qx.ui.core.Widget):void;
+ static flush():void;
+ static isEmpty():boolean;
+
+}
+}
+declare module qx.ui.core.queue {
+class Layout {
+ static add(widget:qx.ui.core.Widget):void;
+ static flush():void;
+ static getNestingLevel(widget:qx.ui.core.Widget):number;
+ static isScheduled(widget:qx.ui.core.Widget):boolean;
+ static remove(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.core.queue {
+class Manager {
+ static flush():void;
+ static scheduleFlush(job:string):void;
+
+}
+}
+declare module qx.ui.core.queue {
+class Visibility {
+ static add(widget:qx.ui.core.Widget):void;
+ static flush():void;
+ static isVisible(widget:qx.ui.core.Widget):boolean;
+ static remove(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.core.queue {
+class Widget {
+ static add(widget:qx.ui.core.Widget,job?:string):void;
+ static flush():void;
+ static remove(widget:qx.ui.core.Widget,job?:string):void;
+
+}
+}
+declare module qx.ui.core.scroll {
+class AbstractScrollArea extends qx.ui.core.Widget {
+ getDragScrollSlowDownFactor():number;
+ getDragScrollThresholdX():number;
+ getDragScrollThresholdY():number;
+ resetDragScrollSlowDownFactor():void;
+ resetDragScrollThresholdX():void;
+ resetDragScrollThresholdY():void;
+ setDragScrollSlowDownFactor(value:any):number;
+ setDragScrollThresholdX(value:any):number;
+ setDragScrollThresholdY(value:any):number;
+ constructor ();
+ protected _computeScrollbars():void;
+ protected _onChangeScrollbarXVisibility(e:qx.event.type.Event):void;
+ protected _onChangeScrollbarYVisibility(e:qx.event.type.Event):void;
+ protected _onScrollAnimationEnd(direction:string):void;
+ protected _onScrollBarX(e:qx.event.type.Data):void;
+ protected _onScrollBarY(e:qx.event.type.Data):void;
+ protected _onScrollPaneX(e:qx.event.type.Data):void;
+ protected _onScrollPaneY(e:qx.event.type.Data):void;
+ getItemBottom(item:qx.ui.core.Widget):number;
+ getItemLeft(item:qx.ui.core.Widget):number;
+ getItemRight(item:qx.ui.core.Widget):number;
+ getItemTop(item:qx.ui.core.Widget):number;
+ getPaneSize():IMap;
+ getScrollbarX():any;
+ getScrollbarY():any;
+ getScrollX():number;
+ getScrollY():number;
+ protected initScrollbarX(value:any):any;
+ protected initScrollbarY(value:any):any;
+ resetScrollbar():void;
+ resetScrollbarX():void;
+ resetScrollbarY():void;
+ scrollByX(value:number,duration?:number):void;
+ scrollByY(value:number,duration?:number):void;
+ scrollToX(value:number,duration?:number):void;
+ scrollToY(value:number,duration?:number):void;
+ setScrollbar(scrollbarX:any,scrollbarY:any):void;
+ setScrollbarX(value:any):any;
+ setScrollbarY(value:any):any;
+ stopScrollAnimationX():void;
+ stopScrollAnimationY():void;
+
+}
+}
+declare module qx.ui.core.scroll {
+interface IScrollBar {
+ getKnobFactor():any;
+ getMaximum():any;
+ getOrientation():any;
+ getPosition():any;
+ resetKnobFactor():void;
+ resetMaximum():void;
+ resetOrientation():void;
+ resetPosition():void;
+ scrollBy(offset:number,duration:number):void;
+ scrollBySteps(steps:number,duration:number):void;
+ scrollTo(position:number,duration:number):void;
+ setKnobFactor(value:any):any;
+ setMaximum(value:any):any;
+ setOrientation(value:any):any;
+ setPosition(value:any):any;
+
+}
+}
+declare module qx.ui.core.scroll {
+class MRoll {
+ protected _addRollHandling():void;
+ protected _onPointerDownForRoll(e:qx.event.type.Pointer):void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _removeRollHandling():void;
+
+}
+}
+declare module qx.ui.core.scroll {
+class MScrollBarFactory {
+ protected _createScrollBar(orientation?:string):qx.ui.core.scroll.IScrollBar;
+
+}
+}
+declare module qx.ui.core.scroll {
+class MWheelHandling {
+ protected _onMouseWheel(e:qx.event.type.Mouse):void;
+
+}
+}
+declare module qx.ui.core.scroll {
+class NativeScrollBar extends qx.ui.core.Widget implements qx.ui.core.scroll.IScrollBar {
+ getKnobFactor():any;
+ getMaximum():any;
+ getOrientation():any;
+ getPosition():any;
+ resetKnobFactor():void;
+ resetMaximum():void;
+ resetOrientation():void;
+ resetPosition():void;
+ scrollBy(offset:number,duration:number):void;
+ scrollBySteps(steps:number,duration:number):void;
+ scrollTo(position:number,duration:number):void;
+ setKnobFactor(value:any):any;
+ setMaximum(value:any):any;
+ setOrientation(value:any):any;
+ setPosition(value:any):any;
+ constructor (orientation?:string);
+ protected _applyMaximum(value:number,old:number):void;
+ protected _applyOrientation(value:any,old:any):void;
+ protected _applyPosition(value:number,old:number):void;
+ protected _getScrollPaneElement():qx.html.Element;
+ protected _onAppear(e:qx.event.type.Data):void;
+ protected _onScroll(e:qx.event.type.Event):void;
+ protected _stopPropagation(e:qx.event.type.Event):void;
+ protected _updateScrollBar():void;
+ getSingleStep():number;
+ protected initSingleStep(value:any):number;
+ resetSingleStep():void;
+ setSingleStep(value:any):number;
+ stopScrollAnimation():void;
+ updatePosition(position:number):void;
+
+}
+}
+declare module qx.ui.core.scroll {
+class ScrollBar extends qx.ui.core.Widget implements qx.ui.core.scroll.IScrollBar {
+ getKnobFactor():any;
+ getMaximum():any;
+ getOrientation():any;
+ getPosition():any;
+ resetKnobFactor():void;
+ resetMaximum():void;
+ resetOrientation():void;
+ resetPosition():void;
+ scrollBy(offset:number,duration:number):void;
+ scrollBySteps(steps:number,duration:number):void;
+ scrollTo(position:number,duration:number):void;
+ setKnobFactor(value:any):any;
+ setMaximum(value:any):any;
+ setOrientation(value:any):any;
+ setPosition(value:any):any;
+ constructor (orientation?:string);
+ protected _applyKnobFactor(value:number,old:number):void;
+ protected _applyMaximum(value:number,old:number):void;
+ protected _applyOrientation(value:any,old:any):void;
+ protected _applyPageStep(value:number,old:number):void;
+ protected _applyPosition(value:any,old:any):void;
+ protected _onChangeSliderValue(e:qx.event.type.Data):void;
+ protected _onExecuteBegin(e:qx.event.type.Event):void;
+ protected _onExecuteEnd(e:qx.event.type.Event):void;
+ protected _onResizeSlider(e:qx.event.type.Data):void;
+ protected _onSlideAnimationEnd():void;
+ getPageStep():number;
+ getSingleStep():number;
+ protected initPageStep(value:any):number;
+ protected initSingleStep(value:any):number;
+ resetPageStep():void;
+ resetSingleStep():void;
+ setPageStep(value:any):number;
+ setSingleStep(value:any):number;
+ stopScrollAnimation():void;
+ updatePosition(position:number):void;
+
+}
+}
+declare module qx.ui.core.scroll {
+class ScrollPane extends qx.ui.core.Widget {
+ constructor ();
+ protected _applyScrollX(value:any,old:any):void;
+ protected _applyScrollY(value:any,old:any):void;
+ protected _onAppear(e:qx.event.type.Event):void;
+ protected _onScroll(e:qx.event.type.Event):void;
+ protected _onUpdate(e:qx.event.type.Event):void;
+ add(widget?:qx.ui.core.Widget):void;
+ getChildren():any[];
+ getItemBottom(item:qx.ui.core.Widget):number;
+ getItemLeft(item:qx.ui.core.Widget):number;
+ getItemRight(item:qx.ui.core.Widget):number;
+ getItemTop(item:qx.ui.core.Widget):number;
+ getScrollMaxX():number;
+ getScrollMaxY():number;
+ getScrollSize():IMap;
+ getScrollX():any;
+ getScrollY():any;
+ protected initScrollX(value:any):any;
+ protected initScrollY(value:any):any;
+ remove(widget?:qx.ui.core.Widget):void;
+ resetScrollX():void;
+ resetScrollY():void;
+ scrollByX(x?:number,duration?:number):void;
+ scrollByY(y?:number,duration?:number):void;
+ scrollToX(value:number,duration?:number):void;
+ scrollToY(value:number,duration?:number):void;
+ setScrollX(value:any):any;
+ setScrollY(value:any):any;
+ stopScrollAnimation():void;
+
+}
+}
+declare module qx.ui.core.scroll {
+class ScrollSlider extends qx.ui.form.Slider {
+ constructor (orientation?:any);
+
+}
+}
+declare module qx.ui.core.selection {
+class Abstract extends qx.core.Object {
+ constructor ();
+ protected _addToSelection(item:any):void;
+ protected _applyDefaultSelection(force:boolean):any;
+ protected _applyMode(value:any,old:any):void;
+ protected _autoSelect():void;
+ protected _capture():void;
+ protected _cleanup():void;
+ protected _clearSelection():void;
+ protected _deselectItemRange(item1:any,item2:any):void;
+ protected _fireChange(context:string):void;
+ protected _getAnchorItem():any;
+ protected _getDimension():IMap;
+ protected _getFirstSelectable():any;
+ protected _getLastSelectable():any;
+ protected _getLocation():IMap;
+ protected _getPage(lead:any,up?:boolean):void;
+ protected _getRelatedSelectable(item:any,relation:string):any;
+ protected _getScroll():IMap;
+ protected _getSelectableFromPointerEvent(event:qx.event.type.Pointer):any;
+ protected _getSelectableLocationX(item:any):IMap;
+ protected _getSelectableLocationY(item:any):IMap;
+ protected _getSelectableRange(item1:any,item2:any):qx.data.Array;
+ protected _getSelectedItem():any;
+ protected _isSelectable(item:any):boolean;
+ protected _onInterval(e:qx.event.type.Event):void;
+ protected _releaseCapture():void;
+ protected _removeFromSelection(item:any):void;
+ protected _replaceMultiSelection(items:qx.data.Array):void;
+ protected _scrollBy(xoff:number,yoff:number):void;
+ protected _scrollItemIntoView(item:any):void;
+ protected _selectableToHashCode(item:any):string;
+ protected _selectAllItems():void;
+ protected _selectItemRange(item1:any,item2:any,extend?:boolean):void;
+ protected _setAnchorItem(value:any):void;
+ protected _setLeadItem(value:any):void;
+ protected _setSelectedItem(item:any):void;
+ protected _styleSelectable(item:any,type:string,enabled:boolean):void;
+ protected _toggleInSelection(item:any):void;
+ addItem(item:any):void;
+ clearSelection():void;
+ getDrag():boolean;
+ getLeadItem():any;
+ getMode():any;
+ getQuick():boolean;
+ getSelectables(all:boolean):qx.data.Array;
+ getSelectedItem():any;
+ getSelection():any[];
+ getSelectionContext():string;
+ getSortedSelection():any[];
+ handleAddItem(e:qx.event.type.Data):void;
+ handleKeyPress(event:qx.event.type.KeySequence):void;
+ handleLoseCapture(event:qx.event.type.Pointer):void;
+ handlePointerDown(event:qx.event.type.Pointer):void;
+ handlePointerMove(event:qx.event.type.Pointer):void;
+ handlePointerOver(event:qx.event.type.Pointer):void;
+ handleRemoveItem(e:qx.event.type.Data):void;
+ handleTap(event:qx.event.type.Tap):void;
+ protected initDrag(value:any):boolean;
+ protected initMode(value:any):any;
+ protected initQuick(value:any):boolean;
+ invertSelection():void;
+ isDrag():boolean;
+ isItemSelected(item:any):boolean;
+ isQuick():boolean;
+ isSelectionEmpty():boolean;
+ removeItem(item:any):void;
+ replaceSelection(items:qx.data.Array):void;
+ resetDrag():void;
+ resetMode():void;
+ resetQuick():void;
+ selectAll():void;
+ selectItem(item:any):void;
+ selectItemRange(begin:any,end:any):void;
+ setDrag(value:any):boolean;
+ setMode(value:any):any;
+ setQuick(value:any):boolean;
+ toggleDrag():boolean;
+ toggleQuick():boolean;
+
+}
+}
+declare module qx.ui.core.selection {
+class ScrollArea extends qx.ui.core.selection.Widget {
+
+}
+}
+declare module qx.ui.core.selection {
+class Widget extends qx.ui.core.selection.Abstract {
+ constructor (widget?:qx.ui.core.Widget);
+ protected _getWidget():qx.ui.core.Widget;
+ protected _isItemSelectable(item:qx.ui.core.Widget):boolean;
+
+}
+}
+declare module qx.ui.decoration {
+class Abstract extends qx.core.Object implements qx.ui.decoration.IDecorator {
+ getInsets():IMap;
+ getPadding():IMap;
+ getStyles():IMap;
+ protected _getDefaultInsets():IMap;
+ protected _isInitialized():boolean;
+ protected _resetInsets():void;
+
+}
+}
+declare module qx.ui.decoration {
+class Decorator extends qx.ui.decoration.Abstract implements qx.ui.decoration.IDecorator {
+ getInsets():IMap;
+ getPadding():IMap;
+ getStyles():IMap;
+ getBackgroundColor():string;
+ resetBackgroundColor():void;
+ setBackgroundColor(value:any):string;
+ getRadiusBottomLeft():number;
+ getRadiusBottomRight():number;
+ getRadiusTopLeft():number;
+ getRadiusTopRight():number;
+ resetRadius():void;
+ resetRadiusBottomLeft():void;
+ resetRadiusBottomRight():void;
+ resetRadiusTopLeft():void;
+ resetRadiusTopRight():void;
+ setRadius(radiusTopLeft:any,radiusTopRight:any,radiusBottomRight:any,radiusBottomLeft:any):void;
+ setRadiusBottomLeft(value:any):number;
+ setRadiusBottomRight(value:any):number;
+ setRadiusTopLeft(value:any):number;
+ setRadiusTopRight(value:any):number;
+ getInset():boolean;
+ getShadowBlurRadius():number;
+ getShadowColor():string;
+ getShadowHorizontalLength():number;
+ getShadowSpreadRadius():number;
+ getShadowVerticalLength():number;
+ isInset():boolean;
+ resetInset():void;
+ resetShadowBlurRadius():void;
+ resetShadowColor():void;
+ resetShadowHorizontalLength():void;
+ resetShadowLength():void;
+ resetShadowSpreadRadius():void;
+ resetShadowVerticalLength():void;
+ setInset(value:any):boolean;
+ setShadowBlurRadius(value:any):number;
+ setShadowColor(value:any):string;
+ setShadowHorizontalLength(value:any):number;
+ setShadowLength(shadowHorizontalLength:any,shadowVerticalLength:any):void;
+ setShadowSpreadRadius(value:any):number;
+ setShadowVerticalLength(value:any):number;
+ toggleInset():boolean;
+ getInnerColorBottom():string;
+ getInnerColorLeft():string;
+ getInnerColorRight():string;
+ getInnerColorTop():string;
+ getInnerOpacity():number;
+ getInnerWidthBottom():number;
+ getInnerWidthLeft():number;
+ getInnerWidthRight():number;
+ getInnerWidthTop():number;
+ resetInnerColor():void;
+ resetInnerColorBottom():void;
+ resetInnerColorLeft():void;
+ resetInnerColorRight():void;
+ resetInnerColorTop():void;
+ resetInnerOpacity():void;
+ resetInnerWidth():void;
+ resetInnerWidthBottom():void;
+ resetInnerWidthLeft():void;
+ resetInnerWidthRight():void;
+ resetInnerWidthTop():void;
+ setInnerColor(innerColorTop:any,innerColorRight:any,innerColorBottom:any,innerColorLeft:any):void;
+ setInnerColorBottom(value:any):string;
+ setInnerColorLeft(value:any):string;
+ setInnerColorRight(value:any):string;
+ setInnerColorTop(value:any):string;
+ setInnerOpacity(value:any):number;
+ setInnerWidth(innerWidthTop:any,innerWidthRight:any,innerWidthBottom:any,innerWidthLeft:any):void;
+ setInnerWidthBottom(value:any):number;
+ setInnerWidthLeft(value:any):number;
+ setInnerWidthRight(value:any):number;
+ setInnerWidthTop(value:any):number;
+ getColorPositionUnit():any;
+ getEndColor():string;
+ getEndColorPosition():number;
+ getOrientation():any;
+ getStartColor():string;
+ getStartColorPosition():number;
+ resetColorPositionUnit():void;
+ resetEndColor():void;
+ resetEndColorPosition():void;
+ resetGradientEnd():void;
+ resetGradientStart():void;
+ resetOrientation():void;
+ resetStartColor():void;
+ resetStartColorPosition():void;
+ setColorPositionUnit(value:any):any;
+ setEndColor(value:any):string;
+ setEndColorPosition(value:any):number;
+ setGradientEnd(endColor:any,endColorPosition:any):void;
+ setGradientStart(startColor:any,startColorPosition:any):void;
+ setOrientation(value:any):any;
+ setStartColor(value:any):string;
+ setStartColorPosition(value:any):number;
+ getBorderImage():string;
+ getBorderImageMode():any;
+ getFill():boolean;
+ getRepeatX():any;
+ getRepeatY():any;
+ getSliceBottom():number;
+ getSliceLeft():number;
+ getSliceRight():number;
+ getSliceTop():number;
+ isFill():boolean;
+ resetBorderImage():void;
+ resetBorderImageMode():void;
+ resetFill():void;
+ resetRepeat():void;
+ resetRepeatX():void;
+ resetRepeatY():void;
+ resetSlice():void;
+ resetSliceBottom():void;
+ resetSliceLeft():void;
+ resetSliceRight():void;
+ resetSliceTop():void;
+ setBorderImage(value:any):string;
+ setBorderImageMode(value:any):any;
+ setFill(value:any):boolean;
+ setRepeat(repeatX:any,repeatY:any):void;
+ setRepeatX(value:any):any;
+ setRepeatY(value:any):any;
+ setSlice(sliceTop:any,sliceRight:any,sliceBottom:any,sliceLeft:any):void;
+ setSliceBottom(value:any):number;
+ setSliceLeft(value:any):number;
+ setSliceRight(value:any):number;
+ setSliceTop(value:any):number;
+ toggleFill():boolean;
+ protected _getStyles():IMap;
+
+}
+}
+declare module qx.ui.decoration {
+interface IDecorator {
+ getInsets():IMap;
+ getPadding():IMap;
+ getStyles():IMap;
+
+}
+}
+declare module qx.ui.decoration {
+class MBackgroundColor {
+ protected _applyBackgroundColor(value:string,old:string):void;
+ protected _styleBackgroundColor(styles:IMap):void;
+ getBackgroundColor():string;
+ protected initBackgroundColor(value:any):string;
+ resetBackgroundColor():void;
+ setBackgroundColor(value:any):string;
+
+}
+}
+declare module qx.ui.decoration {
+class MBackgroundImage {
+ protected _applyBackgroundImage(value:any,old:any):void;
+ protected _applyBackgroundPosition(value:any,old:any):void;
+ protected _styleBackgroundImage(styles:IMap):void;
+ getBackgroundImage():string;
+ getBackgroundPositionX():any;
+ getBackgroundPositionY():any;
+ getBackgroundRepeat():any;
+ protected initBackgroundImage(value:any):string;
+ protected initBackgroundPositionX(value:any):any;
+ protected initBackgroundPositionY(value:any):any;
+ protected initBackgroundRepeat(value:any):any;
+ resetBackgroundImage():void;
+ resetBackgroundPosition():void;
+ resetBackgroundPositionX():void;
+ resetBackgroundPositionY():void;
+ resetBackgroundRepeat():void;
+ setBackgroundImage(value:any):string;
+ setBackgroundPosition(backgroundPositionY:any,backgroundPositionX:any):void;
+ setBackgroundPositionX(value:any):any;
+ setBackgroundPositionY(value:any):any;
+ setBackgroundRepeat(value:any):any;
+
+}
+}
+declare module qx.ui.decoration {
+class MBorderImage {
+ protected _applyBorderImage(value:any,old:any):void;
+ protected _getDefaultInsetsForBorderImage():IMap;
+ protected _styleBorderImage(styles:IMap):void;
+ getBorderImage():string;
+ getBorderImageMode():any;
+ getFill():boolean;
+ getRepeatX():any;
+ getRepeatY():any;
+ getSliceBottom():number;
+ getSliceLeft():number;
+ getSliceRight():number;
+ getSliceTop():number;
+ protected initBorderImage(value:any):string;
+ protected initBorderImageMode(value:any):any;
+ protected initFill(value:any):boolean;
+ protected initRepeatX(value:any):any;
+ protected initRepeatY(value:any):any;
+ protected initSliceBottom(value:any):number;
+ protected initSliceLeft(value:any):number;
+ protected initSliceRight(value:any):number;
+ protected initSliceTop(value:any):number;
+ isFill():boolean;
+ resetBorderImage():void;
+ resetBorderImageMode():void;
+ resetFill():void;
+ resetRepeat():void;
+ resetRepeatX():void;
+ resetRepeatY():void;
+ resetSlice():void;
+ resetSliceBottom():void;
+ resetSliceLeft():void;
+ resetSliceRight():void;
+ resetSliceTop():void;
+ setBorderImage(value:any):string;
+ setBorderImageMode(value:any):any;
+ setFill(value:any):boolean;
+ setRepeat(repeatX:any,repeatY:any):void;
+ setRepeatX(value:any):any;
+ setRepeatY(value:any):any;
+ setSlice(sliceTop:any,sliceRight:any,sliceBottom:any,sliceLeft:any):void;
+ setSliceBottom(value:any):number;
+ setSliceLeft(value:any):number;
+ setSliceRight(value:any):number;
+ setSliceTop(value:any):number;
+ toggleFill():boolean;
+
+}
+}
+declare module qx.ui.decoration {
+class MBorderRadius {
+ protected _applyBorderRadius(value:number,old:number):void;
+ protected _styleBorderRadius(styles:IMap):void;
+ getRadiusBottomLeft():number;
+ getRadiusBottomRight():number;
+ getRadiusTopLeft():number;
+ getRadiusTopRight():number;
+ protected initRadiusBottomLeft(value:any):number;
+ protected initRadiusBottomRight(value:any):number;
+ protected initRadiusTopLeft(value:any):number;
+ protected initRadiusTopRight(value:any):number;
+ resetRadius():void;
+ resetRadiusBottomLeft():void;
+ resetRadiusBottomRight():void;
+ resetRadiusTopLeft():void;
+ resetRadiusTopRight():void;
+ setRadius(radiusTopLeft:any,radiusTopRight:any,radiusBottomRight:any,radiusBottomLeft:any):void;
+ setRadiusBottomLeft(value:any):number;
+ setRadiusBottomRight(value:any):number;
+ setRadiusTopLeft(value:any):number;
+ setRadiusTopRight(value:any):number;
+
+}
+}
+declare module qx.ui.decoration {
+class MBoxShadow {
+ protected _applyBoxShadow(value:any,old:any):void;
+ protected _styleBoxShadow(styles:IMap):void;
+ getInset():boolean;
+ getShadowBlurRadius():number;
+ getShadowColor():string;
+ getShadowHorizontalLength():number;
+ getShadowSpreadRadius():number;
+ getShadowVerticalLength():number;
+ protected initInset(value:any):boolean;
+ protected initShadowBlurRadius(value:any):number;
+ protected initShadowColor(value:any):string;
+ protected initShadowHorizontalLength(value:any):number;
+ protected initShadowSpreadRadius(value:any):number;
+ protected initShadowVerticalLength(value:any):number;
+ isInset():boolean;
+ resetInset():void;
+ resetShadowBlurRadius():void;
+ resetShadowColor():void;
+ resetShadowHorizontalLength():void;
+ resetShadowLength():void;
+ resetShadowSpreadRadius():void;
+ resetShadowVerticalLength():void;
+ setInset(value:any):boolean;
+ setShadowBlurRadius(value:any):number;
+ setShadowColor(value:any):string;
+ setShadowHorizontalLength(value:any):number;
+ setShadowLength(shadowHorizontalLength:any,shadowVerticalLength:any):void;
+ setShadowSpreadRadius(value:any):number;
+ setShadowVerticalLength(value:any):number;
+ toggleInset():boolean;
+
+}
+}
+declare module qx.ui.decoration {
+class MDoubleBorder {
+ getColorBottom():string;
+ getColorLeft():string;
+ getColorRight():string;
+ getColorTop():string;
+ getStyleBottom():any;
+ getStyleLeft():any;
+ getStyleRight():any;
+ getStyleTop():any;
+ getWidthBottom():number;
+ getWidthLeft():number;
+ getWidthRight():number;
+ getWidthTop():number;
+ resetBottom():void;
+ resetColor():void;
+ resetColorBottom():void;
+ resetColorLeft():void;
+ resetColorRight():void;
+ resetColorTop():void;
+ resetLeft():void;
+ resetRight():void;
+ resetStyle():void;
+ resetStyleBottom():void;
+ resetStyleLeft():void;
+ resetStyleRight():void;
+ resetStyleTop():void;
+ resetTop():void;
+ resetWidth():void;
+ resetWidthBottom():void;
+ resetWidthLeft():void;
+ resetWidthRight():void;
+ resetWidthTop():void;
+ setBottom(widthBottom:any,styleBottom:any,colorBottom:any):void;
+ setColor(colorTop:any,colorRight:any,colorBottom:any,colorLeft:any):void;
+ setColorBottom(value:any):string;
+ setColorLeft(value:any):string;
+ setColorRight(value:any):string;
+ setColorTop(value:any):string;
+ setLeft(widthLeft:any,styleLeft:any,colorLeft:any):void;
+ setRight(widthRight:any,styleRight:any,colorRight:any):void;
+ setStyle(styleTop:any,styleRight:any,styleBottom:any,styleLeft:any):void;
+ setStyleBottom(value:any):any;
+ setStyleLeft(value:any):any;
+ setStyleRight(value:any):any;
+ setStyleTop(value:any):any;
+ setTop(widthTop:any,styleTop:any,colorTop:any):void;
+ setWidth(widthTop:any,widthRight:any,widthBottom:any,widthLeft:any):void;
+ setWidthBottom(value:any):number;
+ setWidthLeft(value:any):number;
+ setWidthRight(value:any):number;
+ setWidthTop(value:any):number;
+ getBackgroundImage():string;
+ getBackgroundPositionX():any;
+ getBackgroundPositionY():any;
+ getBackgroundRepeat():any;
+ resetBackgroundImage():void;
+ resetBackgroundPosition():void;
+ resetBackgroundPositionX():void;
+ resetBackgroundPositionY():void;
+ resetBackgroundRepeat():void;
+ setBackgroundImage(value:any):string;
+ setBackgroundPosition(backgroundPositionY:any,backgroundPositionX:any):void;
+ setBackgroundPositionX(value:any):any;
+ setBackgroundPositionY(value:any):any;
+ setBackgroundRepeat(value:any):any;
+ constructor ();
+ protected _applyDoubleBorder(value:any,old:any):void;
+ getInnerColorBottom():string;
+ getInnerColorLeft():string;
+ getInnerColorRight():string;
+ getInnerColorTop():string;
+ getInnerOpacity():number;
+ getInnerWidthBottom():number;
+ getInnerWidthLeft():number;
+ getInnerWidthRight():number;
+ getInnerWidthTop():number;
+ protected initInnerColorBottom(value:any):string;
+ protected initInnerColorLeft(value:any):string;
+ protected initInnerColorRight(value:any):string;
+ protected initInnerColorTop(value:any):string;
+ protected initInnerOpacity(value:any):number;
+ protected initInnerWidthBottom(value:any):number;
+ protected initInnerWidthLeft(value:any):number;
+ protected initInnerWidthRight(value:any):number;
+ protected initInnerWidthTop(value:any):number;
+ resetInnerColor():void;
+ resetInnerColorBottom():void;
+ resetInnerColorLeft():void;
+ resetInnerColorRight():void;
+ resetInnerColorTop():void;
+ resetInnerOpacity():void;
+ resetInnerWidth():void;
+ resetInnerWidthBottom():void;
+ resetInnerWidthLeft():void;
+ resetInnerWidthRight():void;
+ resetInnerWidthTop():void;
+ setInnerColor(innerColorTop:any,innerColorRight:any,innerColorBottom:any,innerColorLeft:any):void;
+ setInnerColorBottom(value:any):string;
+ setInnerColorLeft(value:any):string;
+ setInnerColorRight(value:any):string;
+ setInnerColorTop(value:any):string;
+ setInnerOpacity(value:any):number;
+ setInnerWidth(innerWidthTop:any,innerWidthRight:any,innerWidthBottom:any,innerWidthLeft:any):void;
+ setInnerWidthBottom(value:any):number;
+ setInnerWidthLeft(value:any):number;
+ setInnerWidthRight(value:any):number;
+ setInnerWidthTop(value:any):number;
+
+}
+}
+declare module qx.ui.decoration {
+class MLinearBackgroundGradient {
+ protected _applyLinearBackgroundGradient(value:any,old:any):void;
+ protected _styleLinearBackgroundGradient(styles:IMap):void;
+ getColorPositionUnit():any;
+ getEndColor():string;
+ getEndColorPosition():number;
+ getOrientation():any;
+ getStartColor():string;
+ getStartColorPosition():number;
+ protected initColorPositionUnit(value:any):any;
+ protected initEndColor(value:any):string;
+ protected initEndColorPosition(value:any):number;
+ protected initOrientation(value:any):any;
+ protected initStartColor(value:any):string;
+ protected initStartColorPosition(value:any):number;
+ resetColorPositionUnit():void;
+ resetEndColor():void;
+ resetEndColorPosition():void;
+ resetGradientEnd():void;
+ resetGradientStart():void;
+ resetOrientation():void;
+ resetStartColor():void;
+ resetStartColorPosition():void;
+ setColorPositionUnit(value:any):any;
+ setEndColor(value:any):string;
+ setEndColorPosition(value:any):number;
+ setGradientEnd(endColor:any,endColorPosition:any):void;
+ setGradientStart(startColor:any,startColorPosition:any):void;
+ setOrientation(value:any):any;
+ setStartColor(value:any):string;
+ setStartColorPosition(value:any):number;
+
+}
+}
+declare module qx.ui.decoration {
+class MSingleBorder {
+ protected _applyStyle(value:any,old:any):void;
+ protected _applyWidth(value:number,old:number):void;
+ protected _getDefaultInsetsForBorder():IMap;
+ protected _styleBorder(styles:IMap):void;
+ getColorBottom():string;
+ getColorLeft():string;
+ getColorRight():string;
+ getColorTop():string;
+ getStyleBottom():any;
+ getStyleLeft():any;
+ getStyleRight():any;
+ getStyleTop():any;
+ getWidthBottom():number;
+ getWidthLeft():number;
+ getWidthRight():number;
+ getWidthTop():number;
+ protected initColorBottom(value:any):string;
+ protected initColorLeft(value:any):string;
+ protected initColorRight(value:any):string;
+ protected initColorTop(value:any):string;
+ protected initStyleBottom(value:any):any;
+ protected initStyleLeft(value:any):any;
+ protected initStyleRight(value:any):any;
+ protected initStyleTop(value:any):any;
+ protected initWidthBottom(value:any):number;
+ protected initWidthLeft(value:any):number;
+ protected initWidthRight(value:any):number;
+ protected initWidthTop(value:any):number;
+ resetBottom():void;
+ resetColor():void;
+ resetColorBottom():void;
+ resetColorLeft():void;
+ resetColorRight():void;
+ resetColorTop():void;
+ resetLeft():void;
+ resetRight():void;
+ resetStyle():void;
+ resetStyleBottom():void;
+ resetStyleLeft():void;
+ resetStyleRight():void;
+ resetStyleTop():void;
+ resetTop():void;
+ resetWidth():void;
+ resetWidthBottom():void;
+ resetWidthLeft():void;
+ resetWidthRight():void;
+ resetWidthTop():void;
+ setBottom(widthBottom:any,styleBottom:any,colorBottom:any):void;
+ setColor(colorTop:any,colorRight:any,colorBottom:any,colorLeft:any):void;
+ setColorBottom(value:any):string;
+ setColorLeft(value:any):string;
+ setColorRight(value:any):string;
+ setColorTop(value:any):string;
+ setLeft(widthLeft:any,styleLeft:any,colorLeft:any):void;
+ setRight(widthRight:any,styleRight:any,colorRight:any):void;
+ setStyle(styleTop:any,styleRight:any,styleBottom:any,styleLeft:any):void;
+ setStyleBottom(value:any):any;
+ setStyleLeft(value:any):any;
+ setStyleRight(value:any):any;
+ setStyleTop(value:any):any;
+ setTop(widthTop:any,styleTop:any,colorTop:any):void;
+ setWidth(widthTop:any,widthRight:any,widthBottom:any,widthLeft:any):void;
+ setWidthBottom(value:any):number;
+ setWidthLeft(value:any):number;
+ setWidthRight(value:any):number;
+ setWidthTop(value:any):number;
+
+}
+}
+declare module qx.ui.embed {
+class AbstractIframe extends qx.ui.core.Widget {
+ constructor (source?:string);
+ protected _applyFrameName(value:string,old:string):void;
+ protected _applySource(value:string,old:string):void;
+ protected _getIframeElement():qx.html.Iframe;
+ getBody():HTMLElement;
+ getDocument():Document;
+ getFrameName():string;
+ getName():string;
+ getSource():string;
+ getWindow():Window;
+ protected initFrameName(value:any):string;
+ protected initSource(value:any):string;
+ reload():void;
+ resetFrameName():void;
+ resetSource():void;
+ setFrameName(value:any):string;
+ setSource(value:any):string;
+
+}
+}
+declare module qx.ui.embed {
+class Canvas extends qx.ui.core.Widget {
+ constructor (canvasWidth?:number,canvasHeight?:number);
+ protected _applyCanvasHeight(value:number,old:number):void;
+ protected _applyCanvasWidth(value:number,old:number):void;
+ protected _draw(width:number,height:number,context:CanvasRenderingContext2D):void;
+ protected _onResize(e:qx.event.type.Data):void;
+ getCanvasHeight():number;
+ getCanvasWidth():number;
+ getContext2d():CanvasRenderingContext2D;
+ getSyncDimension():boolean;
+ protected initCanvasHeight(value:any):number;
+ protected initCanvasWidth(value:any):number;
+ protected initSyncDimension(value:any):boolean;
+ isSyncDimension():boolean;
+ resetCanvasHeight():void;
+ resetCanvasWidth():void;
+ resetSyncDimension():void;
+ setCanvasHeight(value:any):number;
+ setCanvasWidth(value:any):number;
+ setSyncDimension(value:any):boolean;
+ toggleSyncDimension():boolean;
+ update():void;
+
+}
+}
+declare module qx.ui.embed {
+class Flash extends qx.ui.core.Widget {
+ constructor (source?:string,id?:string);
+ protected _applyAllowScriptAccess(value:any,old:any):void;
+ protected _applyId(value:string,old:string):void;
+ protected _applyLiveConnect(value:boolean,old:boolean):void;
+ protected _applyLoop(value:boolean,old:boolean):void;
+ protected _applyMayScript(value:boolean,old:boolean):void;
+ protected _applyMenu(value:boolean,old:boolean):void;
+ protected _applyPlay(value:boolean,old:boolean):void;
+ protected _applyQuality(value:any,old:any):void;
+ protected _applyScale(value:any,old:any):void;
+ protected _applySource(value:string,old:string):void;
+ protected _applyVariables(value:IMap,old:IMap):void;
+ protected _applyWmode(value:any,old:any):void;
+ protected _checkLoading():void;
+ getAllowScriptAccess():any;
+ getFlashElement():HTMLElement;
+ getId():string;
+ getLiveConnect():boolean;
+ getLoadTimeout():number;
+ getLoop():boolean;
+ getMayScript():boolean;
+ getMenu():boolean;
+ getPercentLoaded():number;
+ getPlay():boolean;
+ getQuality():any;
+ getScale():any;
+ getSource():string;
+ getVariables():IMap;
+ getWmode():any;
+ protected initAllowScriptAccess(value:any):any;
+ protected initId(value:any):string;
+ protected initLiveConnect(value:any):boolean;
+ protected initLoadTimeout(value:any):number;
+ protected initLoop(value:any):boolean;
+ protected initMayScript(value:any):boolean;
+ protected initMenu(value:any):boolean;
+ protected initPlay(value:any):boolean;
+ protected initQuality(value:any):any;
+ protected initScale(value:any):any;
+ protected initSource(value:any):string;
+ protected initVariables(value:any):IMap;
+ protected initWmode(value:any):any;
+ isLiveConnect():boolean;
+ isLoaded():boolean;
+ isLoop():boolean;
+ isMayScript():boolean;
+ isMenu():boolean;
+ isPlay():boolean;
+ resetAllowScriptAccess():void;
+ resetId():void;
+ resetLiveConnect():void;
+ resetLoadTimeout():void;
+ resetLoop():void;
+ resetMayScript():void;
+ resetMenu():void;
+ resetPlay():void;
+ resetQuality():void;
+ resetScale():void;
+ resetSource():void;
+ resetVariables():void;
+ resetWmode():void;
+ setAllowScriptAccess(value:any):any;
+ setId(value:any):string;
+ setLiveConnect(value:any):boolean;
+ setLoadTimeout(value:any):number;
+ setLoop(value:any):boolean;
+ setMayScript(value:any):boolean;
+ setMenu(value:any):boolean;
+ setPlay(value:any):boolean;
+ setQuality(value:any):any;
+ setScale(value:any):any;
+ setSource(value:any):string;
+ setVariables(value:any):IMap;
+ setWmode(value:any):any;
+ toggleLiveConnect():boolean;
+ toggleLoop():boolean;
+ toggleMayScript():boolean;
+ toggleMenu():boolean;
+ togglePlay():boolean;
+
+}
+}
+declare module qx.ui.embed {
+class Html extends qx.ui.core.Widget {
+ getOverflowX():any;
+ getOverflowY():any;
+ resetOverflow():void;
+ resetOverflowX():void;
+ resetOverflowY():void;
+ setOverflow(overflowX:any,overflowY:any):void;
+ setOverflowX(value:any):any;
+ setOverflowY(value:any):any;
+ constructor (html?:string);
+ protected _applyCssClass(value:string,old:string):void;
+ protected _applyHtml(value:string,old:string):void;
+ getCssClass():string;
+ getHtml():string;
+ protected initCssClass(value:any):string;
+ protected initHtml(value:any):string;
+ resetCssClass():void;
+ resetHtml():void;
+ setCssClass(value:any):string;
+ setHtml(value:any):string;
+
+}
+}
+declare module qx.ui.embed {
+class Iframe extends qx.ui.embed.AbstractIframe {
+ constructor (source?:string);
+ protected _applyNativeHelp(value:boolean,old:boolean):void;
+ protected _applyScrollbar(value:any,old:any):void;
+ protected _createBlockerElement():any;
+ protected _onIframeLoad(e:qx.event.type.Event):void;
+ protected _onNativeContextMenu(e:qx.event.type.Mouse):void;
+ protected _syncSourceAfterDOMMove():void;
+ block():void;
+ getNativeHelp():boolean;
+ getScrollbar():any;
+ protected initNativeHelp(value:any):boolean;
+ protected initScrollbar(value:any):any;
+ isNativeHelp():boolean;
+ release():void;
+ resetNativeHelp():void;
+ resetScrollbar():void;
+ setNativeHelp(value:any):boolean;
+ setScrollbar(value:any):any;
+ toggleNativeHelp():boolean;
+
+}
+}
+declare module qx.ui.embed {
+class ThemedIframe extends qx.ui.embed.AbstractIframe {
+ constructor (source?:any);
+ protected _addRollListener():void;
+ protected _configureScrollbar(scrollbarId:string,show:boolean,containerSize:number,contentSize:number):void;
+ protected _disableScollbars():void;
+ protected _getIframeSize():any;
+ protected _onIframeLoad():void;
+ protected _onIframeObserverInterval():void;
+ protected _onIframeResize():void;
+ protected _onScrollBarX(e:qx.event.type.Data):void;
+ protected _onScrollBarY(e:qx.event.type.Data):void;
+ protected _preventIframeScrolling():void;
+ protected _startIframeObserver():void;
+ protected _stopIframeObserver():void;
+ protected _updateCornerWidget():void;
+ protected _updateScrollbars():void;
+ getScrollbarX():any;
+ getScrollbarY():any;
+ protected initScrollbarX(value:any):any;
+ protected initScrollbarY(value:any):any;
+ resetScrollbar():void;
+ resetScrollbarX():void;
+ resetScrollbarY():void;
+ scrollToX(x:number):void;
+ scrollToY(y:number):void;
+ setScrollbar(scrollbarX:any,scrollbarY:any):void;
+ setScrollbarX(value:any):any;
+ setScrollbarY(value:any):any;
+
+}
+}
+declare module qx.ui.form {
+class AbstractField extends qx.ui.core.Widget implements qx.ui.form.IStringForm,qx.ui.form.IForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (value?:string);
+ protected _applyMaxLength(value:number,old:number):void;
+ protected _applyPlaceholder(value:string,old:string):void;
+ protected _applyReadOnly(value:boolean,old:boolean):void;
+ protected _applyTextAlign(value:any,old:any):void;
+ protected _createInputElement():qx.html.Input;
+ protected _getPlaceholderElement():void;
+ protected _getTextSize():IMap;
+ protected _onChangeContent(e:qx.event.type.Data):void;
+ protected _onChangeLocale(e:qx.event.type.Event):void;
+ protected _onHtmlInput(e:qx.event.type.Data):void;
+ protected _onPointerDownPlaceholder():void;
+ protected _onWebFontStatusChange(ev:qx.event.type.Data):void;
+ protected _removePlaceholder():void;
+ protected _renderContentElement(innerHeight:number,element:HTMLElement):void;
+ protected _showPlaceholder():void;
+ protected _syncPlaceholder():void;
+ clearTextSelection():void;
+ getFilter():RegExp;
+ getLiveUpdate():boolean;
+ getMaxLength():number;
+ getPlaceholder():string;
+ getReadOnly():boolean;
+ getTextAlign():any;
+ getTextSelection():string;
+ getTextSelectionEnd():number;
+ getTextSelectionLength():number;
+ getTextSelectionStart():number;
+ protected initFilter(value:any):RegExp;
+ protected initLiveUpdate(value:any):boolean;
+ protected initMaxLength(value:any):number;
+ protected initPlaceholder(value:any):string;
+ protected initReadOnly(value:any):boolean;
+ protected initTextAlign(value:any):any;
+ isLiveUpdate():boolean;
+ isReadOnly():boolean;
+ resetFilter():void;
+ resetLiveUpdate():void;
+ resetMaxLength():void;
+ resetPlaceholder():void;
+ resetReadOnly():void;
+ resetTextAlign():void;
+ selectAllText():void;
+ setFilter(value:any):RegExp;
+ setLiveUpdate(value:any):boolean;
+ setMaxLength(value:any):number;
+ setPlaceholder(value:any):string;
+ setReadOnly(value:any):boolean;
+ setTextAlign(value:any):any;
+ setTextSelection(start:number,end:number):void;
+ toggleLiveUpdate():boolean;
+ toggleReadOnly():boolean;
+
+}
+}
+declare module qx.ui.form {
+class AbstractSelectBox extends qx.ui.core.Widget implements qx.ui.form.IForm {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor ();
+ protected _applyMaxListHeight(value:number,old:number):void;
+ protected _defaultFormat(item:any):string;
+ protected _onBlur(e:qx.event.type.Focus):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onListChangeSelection(e:qx.event.type.Data):void;
+ protected _onListPointerDown(e:qx.event.type.Pointer):void;
+ protected _onPopupChangeVisibility(e:qx.event.type.Data):void;
+ protected _onResize(e:qx.event.type.Data):void;
+ close():void;
+ getFormat():Function;
+ getMaxListHeight():number;
+ protected initFormat(value:any):Function;
+ protected initMaxListHeight(value:any):number;
+ open():void;
+ resetFormat():void;
+ resetMaxListHeight():void;
+ setFormat(value:any):Function;
+ setMaxListHeight(value:any):number;
+ toggle():void;
+
+}
+}
+declare module qx.ui.form {
+class Button extends qx.ui.basic.Atom implements qx.ui.form.IExecutable {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ resetCommand():void;
+ constructor (label?:string,icon?:string,command?:qx.ui.command.Command);
+ protected _onKeyDown(e:qx.event.type.Event):void;
+ protected _onKeyUp(e:qx.event.type.Event):void;
+ protected _onPointerDown(e:qx.event.type.Event):void;
+ protected _onPointerOut(e:qx.event.type.Event):void;
+ protected _onPointerOver(e:qx.event.type.Event):void;
+ protected _onPointerUp(e:qx.event.type.Event):void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+ press():void;
+ release():void;
+ reset():void;
+
+}
+}
+declare module qx.ui.form {
+class CheckBox extends qx.ui.form.ToggleButton implements qx.ui.form.IForm,qx.ui.form.IModel {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (label?:string);
+
+}
+}
+declare module qx.ui.form {
+class ComboBox extends qx.ui.form.AbstractSelectBox implements qx.ui.form.IStringForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+ constructor ();
+ protected _applyPlaceholder(value:string,old:string):void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+ protected _onTextFieldChangeValue(e:qx.event.type.Data):void;
+ protected _setPreselectedItem():void;
+ clearTextSelection():void;
+ getPlaceholder():string;
+ getTextSelection():string;
+ getTextSelectionLength():number;
+ protected initPlaceholder(value:any):string;
+ resetAllTextSelection():void;
+ resetPlaceholder():void;
+ selectAllText():void;
+ setPlaceholder(value:any):string;
+ setTextSelection(start:number,end:number):void;
+
+}
+}
+declare module qx.ui.form {
+class DateField extends qx.ui.core.Widget implements qx.ui.form.IForm,qx.ui.form.IDateForm {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getValue():Date;
+ resetValue():void;
+ setValue(value:Date):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor ();
+ static getDefaultDateFormatter():qx.util.format.DateFormat;
+ protected _addLocaleChangeListener():void;
+ protected _applyDateFormat(value:qx.util.format.DateFormat,old:qx.util.format.DateFormat):void;
+ protected _applyPlaceholder(value:string,old:string):void;
+ protected _onBlur(e:qx.event.type.Focus):void;
+ protected _onChangeDate(e:qx.event.type.Pointer):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onPopupChangeVisibility(e:qx.event.type.Data):void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+ protected _onTextFieldChangeValue(e:qx.event.type.Data):void;
+ protected _setDefaultDateFormat():void;
+ close():void;
+ getDateFormat():qx.util.format.DateFormat;
+ getPlaceholder():string;
+ protected initDateFormat(value:any):qx.util.format.DateFormat;
+ protected initPlaceholder(value:any):string;
+ isEmpty():boolean;
+ open():void;
+ resetDateFormat():void;
+ resetPlaceholder():void;
+ setDateFormat(value:any):qx.util.format.DateFormat;
+ setPlaceholder(value:any):string;
+ toggle():void;
+
+}
+}
+declare module qx.ui.form {
+class Form extends qx.core.Object {
+ constructor ();
+ protected _createResetter():qx.ui.form.Resetter;
+ protected _createValidationManager():qx.ui.form.validation.Manager;
+ add(item:qx.ui.form.IForm,label:string,validator?:Function,name?:string,validatorContext?:any,options?:IMap):void;
+ addButton(button:qx.ui.form.Button,options?:IMap):void;
+ addGroupHeader(title:string,options?:IMap):void;
+ getButtonOptions():qx.data.Array;
+ getButtons():qx.data.Array;
+ getGroups():qx.data.Array;
+ getItems():IMap;
+ getValidationManager():qx.ui.form.validation.Manager;
+ redefineResetter():void;
+ redefineResetterItem(item:qx.ui.core.Widget):void;
+ remove(item:qx.ui.form.IForm):boolean;
+ removeButton(button:qx.ui.form.Button):boolean;
+ removeGroupHeader(title:string):boolean;
+ reset():void;
+ validate():boolean;
+
+}
+}
+declare module qx.ui.form {
+class HoverButton extends qx.ui.basic.Atom implements qx.ui.form.IExecutable {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ resetCommand():void;
+ constructor (label?:string,icon?:string);
+ protected _onInterval():void;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ getFirstInterval():number;
+ getInterval():number;
+ getMinTimer():number;
+ getTimerDecrease():number;
+ protected initFirstInterval(value:any):number;
+ protected initInterval(value:any):number;
+ protected initMinTimer(value:any):number;
+ protected initTimerDecrease(value:any):number;
+ resetFirstInterval():void;
+ resetInterval():void;
+ resetMinTimer():void;
+ resetTimerDecrease():void;
+ setFirstInterval(value:any):number;
+ setInterval(value:any):number;
+ setMinTimer(value:any):number;
+ setTimerDecrease(value:any):number;
+
+}
+}
+declare module qx.ui.form {
+interface IBooleanForm {
+ getValue():boolean;
+ resetValue():void;
+ setValue(value:boolean):void;
+
+}
+}
+declare module qx.ui.form {
+interface IColorForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+
+}
+}
+declare module qx.ui.form {
+interface IDateForm {
+ getValue():Date;
+ resetValue():void;
+ setValue(value:Date):void;
+
+}
+}
+declare module qx.ui.form {
+interface IExecutable {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+
+}
+}
+declare module qx.ui.form {
+interface IForm {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+
+}
+}
+declare module qx.ui.form {
+interface IModel {
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+
+}
+}
+declare module qx.ui.form {
+interface IModelSelection {
+ getModelSelection():qx.data.Array;
+ setModelSelection(value:qx.data.Array):void;
+
+}
+}
+declare module qx.ui.form {
+interface INumberForm {
+ getValue():number;
+ resetValue():void;
+ setValue(value:number):void;
+
+}
+}
+declare module qx.ui.form {
+interface IRadioItem {
+ getGroup():qx.ui.form.RadioGroup;
+ getValue():boolean;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ setValue(value:boolean):void;
+
+}
+}
+declare module qx.ui.form {
+interface IRange {
+ getMaximum():number;
+ getMinimum():number;
+ getPageStep():number;
+ getSingleStep():number;
+ setMaximum(max:number):void;
+ setMinimum(min:number):void;
+ setPageStep(step:number):void;
+ setSingleStep(step:number):void;
+
+}
+}
+declare module qx.ui.form {
+interface IStringForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+
+}
+}
+declare module qx.ui.form {
+class List extends qx.ui.core.scroll.AbstractScrollArea implements qx.ui.core.IMultiSelection,qx.ui.form.IForm,qx.ui.form.IModelSelection {
+ addToSelection(item:qx.ui.core.Widget):void;
+ removeFromSelection(item:qx.ui.core.Widget):void;
+ selectAll():void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getModelSelection():qx.data.Array;
+ setModelSelection(value:qx.data.Array):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ getDragSelection():boolean;
+ getQuickSelection():boolean;
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ getSelectionContext():string;
+ getSelectionMode():any;
+ getSortedSelection():qx.ui.core.Widget[];
+ invertSelection():void;
+ isDragSelection():boolean;
+ isQuickSelection():boolean;
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetDragSelection():void;
+ resetQuickSelection():void;
+ resetSelection():void;
+ resetSelectionMode():void;
+ selectRange(begin:qx.ui.core.Widget,end:qx.ui.core.Widget):void;
+ setDragSelection(value:any):boolean;
+ setQuickSelection(value:any):boolean;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ setSelectionMode(value:any):any;
+ toggleDragSelection():boolean;
+ toggleQuickSelection():boolean;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (horizontal?:boolean);
+ protected _applyOrientation(value:any,old:any):void;
+ protected _applySpacing(value:number,old:number):void;
+ protected _createListItemContainer():qx.ui.container.Composite;
+ protected _onAddChild(e:qx.event.type.Data):void;
+ protected _onKeyInput(e:qx.event.type.KeyInput):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):boolean;
+ protected _onRemoveChild(e:qx.event.type.Data):void;
+ findItem(search:string,ignoreCase?:boolean):qx.ui.form.ListItem;
+ findItemByLabelFuzzy(search:string):qx.ui.form.ListItem;
+ getEnableInlineFind():boolean;
+ getOrientation():any;
+ getSpacing():number;
+ handleKeyPress(e:qx.event.type.KeySequence):void;
+ protected initEnableInlineFind(value:any):boolean;
+ protected initOrientation(value:any):any;
+ protected initSpacing(value:any):number;
+ isEnableInlineFind():boolean;
+ resetEnableInlineFind():void;
+ resetOrientation():void;
+ resetSpacing():void;
+ setEnableInlineFind(value:any):boolean;
+ setOrientation(value:any):any;
+ setSpacing(value:any):number;
+ toggleEnableInlineFind():boolean;
+
+}
+}
+declare module qx.ui.form {
+class ListItem extends qx.ui.basic.Atom implements qx.ui.form.IModel {
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ constructor (label?:string,icon?:string,model?:string);
+ protected _onPointerOut():void;
+ protected _onPointerOver():void;
+
+}
+}
+declare module qx.ui.form {
+class MForm {
+ constructor ();
+ protected _applyValid(value:boolean,old:boolean):void;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ protected initInvalidMessage(value:any):string;
+ protected initRequired(value:any):boolean;
+ protected initRequiredInvalidMessage(value:any):string;
+ protected initValid(value:any):boolean;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ setInvalidMessage(value:any):string;
+ setRequired(value:any):boolean;
+ setRequiredInvalidMessage(value:any):string;
+ setValid(value:any):boolean;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+
+}
+}
+declare module qx.ui.form {
+class MModelProperty {
+ protected _applyModel(value:any,old:any):void;
+ getModel():any;
+ protected initModel(value:any):any;
+ resetModel():void;
+ setModel(value:any):any;
+
+}
+}
+declare module qx.ui.form {
+class MModelSelection {
+ constructor ();
+ getModelSelection():qx.data.Array;
+ setModelSelection(modelSelection:qx.data.Array):void;
+
+}
+}
+declare module qx.ui.form {
+class MenuButton extends qx.ui.form.Button {
+ constructor (label?:string,icon?:string,menu?:qx.ui.menu.Menu);
+ protected _applyMenu(value:qx.ui.menu.Menu,old:qx.ui.menu.Menu):void;
+ protected _onMenuChange(e:qx.event.type.Data):void;
+ getMenu():qx.ui.menu.Menu;
+ initMenu(value:any):qx.ui.menu.Menu;
+ open(selectFirst?:boolean):void;
+ resetMenu():void;
+ setMenu(value:any):qx.ui.menu.Menu;
+
+}
+}
+declare module qx.ui.form {
+class PasswordField extends qx.ui.form.TextField {
+
+}
+}
+declare module qx.ui.form {
+class RadioButton extends qx.ui.form.Button implements qx.ui.form.IRadioItem,qx.ui.form.IForm,qx.ui.form.IBooleanForm,qx.ui.form.IModel {
+ getGroup():qx.ui.form.RadioGroup;
+ getValue():boolean;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ setValue(value:boolean):void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ resetValue():void;
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (label?:string);
+ protected _applyGroup(value:any,old:any):void;
+ protected _applyValue(value:boolean,old:boolean):void;
+ protected _onExecute(e:qx.event.type.Event):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected initGroup(value:any):qx.ui.form.RadioGroup;
+ protected initValue(value:any):boolean;
+ isValue():boolean;
+ resetGroup():void;
+ toggleValue():boolean;
+
+}
+}
+declare module qx.ui.form {
+class RadioButtonGroup extends qx.ui.core.Widget implements qx.ui.form.IForm,qx.ui.core.ISingleSelection,qx.ui.form.IModelSelection {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ getModelSelection():qx.data.Array;
+ setModelSelection(value:qx.data.Array):void;
+ static remap(members:IMap):void;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+ constructor (layout?:qx.ui.layout.Abstract);
+ protected _applyInvalidMessage(value:string,old:string):void;
+ protected _applyValid(value:boolean,old:boolean):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ getRadioGroup():qx.ui.form.RadioGroup;
+ protected initInvalidMessage(value:any):string;
+ protected initRequired(value:any):boolean;
+ protected initRequiredInvalidMessage(value:any):string;
+ protected initValid(value:any):boolean;
+ isRequired():boolean;
+ isValid():boolean;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+
+}
+}
+declare module qx.ui.form {
+class RadioGroup extends qx.core.Object implements qx.ui.core.ISingleSelection,qx.ui.form.IForm,qx.ui.form.IModelSelection {
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getModelSelection():qx.data.Array;
+ setModelSelection(value:qx.data.Array):void;
+ constructor (...varargs:qx.core.Object[]);
+ protected _applyAllowEmptySelection(value:boolean,old:boolean):void;
+ protected _applyEnabled(value:boolean,old:boolean):void;
+ protected _applyInvalidMessage(value:string,old:string):void;
+ protected _applyValid(value:boolean,old:boolean):void;
+ protected _getItems():qx.ui.form.IRadioItem[];
+ protected _isAllowEmptySelection():boolean;
+ protected _isItemSelectable(item:qx.ui.form.IRadioItem):boolean;
+ protected _onItemChangeChecked(e:qx.event.type.Data):void;
+ add(...varargs:qx.ui.form.IRadioItem[]):void;
+ getAllowEmptySelection():boolean;
+ getChildren():qx.ui.form.IRadioItem[];
+ getItems():qx.ui.form.IRadioItem[];
+ getWrap():boolean;
+ protected initAllowEmptySelection(value:any):boolean;
+ protected initEnabled(value:any):boolean;
+ protected initInvalidMessage(value:any):string;
+ protected initRequired(value:any):boolean;
+ protected initRequiredInvalidMessage(value:any):string;
+ protected initValid(value:any):boolean;
+ protected initWrap(value:any):boolean;
+ isAllowEmptySelection():boolean;
+ isEnabled():boolean;
+ isRequired():boolean;
+ isValid():boolean;
+ isWrap():boolean;
+ remove(item:qx.ui.form.IRadioItem):void;
+ resetAllowEmptySelection():void;
+ resetEnabled():void;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ resetWrap():void;
+ selectNext():void;
+ selectPrevious():void;
+ setAllowEmptySelection(value:any):boolean;
+ setWrap(value:any):boolean;
+ toggleAllowEmptySelection():boolean;
+ toggleEnabled():boolean;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ toggleWrap():boolean;
+
+}
+}
+declare module qx.ui.form {
+class RepeatButton extends qx.ui.form.Button {
+ constructor (label?:string,icon?:string);
+ protected _onInterval(e:qx.event.type.Event):void;
+ getFirstInterval():number;
+ getInterval():number;
+ getMinTimer():number;
+ getTimerDecrease():number;
+ protected initFirstInterval(value:any):number;
+ protected initInterval(value:any):number;
+ protected initMinTimer(value:any):number;
+ protected initTimerDecrease(value:any):number;
+ resetFirstInterval():void;
+ resetInterval():void;
+ resetMinTimer():void;
+ resetTimerDecrease():void;
+ setFirstInterval(value:any):number;
+ setInterval(value:any):number;
+ setMinTimer(value:any):number;
+ setTimerDecrease(value:any):number;
+
+}
+}
+declare module qx.ui.form {
+class Resetter extends qx.core.Object {
+ constructor ();
+ protected _supportsValue(formItem:qx.core.Object):boolean;
+ add(item:qx.ui.core.Widget):void;
+ redefine():void;
+ redefineItem(item:qx.ui.core.Widget):void;
+ remove(item:qx.ui.core.Widget):boolean;
+ reset():void;
+ resetItem(item:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.form {
+class SelectBox extends qx.ui.form.AbstractSelectBox implements qx.ui.core.ISingleSelection,qx.ui.form.IModelSelection {
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ getModelSelection():qx.data.Array;
+ setModelSelection(value:qx.data.Array):void;
+ constructor ();
+ protected _getItems():qx.ui.form.ListItem[];
+ protected _isAllowEmptySelection():boolean;
+ protected _onKeyInput(e:qx.event.type.KeyInput):void;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+
+}
+}
+declare module qx.ui.form {
+class Slider extends qx.ui.core.Widget implements qx.ui.form.IForm,qx.ui.form.INumberForm,qx.ui.form.IRange {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getValue():number;
+ resetValue():void;
+ setValue(value:number):void;
+ getMaximum():number;
+ getMinimum():number;
+ getPageStep():number;
+ getSingleStep():number;
+ setMaximum(max:number):void;
+ setMinimum(min:number):void;
+ setPageStep(step:number):void;
+ setSingleStep(step:number):void;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (orientation?:string);
+ protected _applyKnobFactor(value:number,old:number):void;
+ protected _applyMaximum(value:number,old:number):void;
+ protected _applyMinimum(value:number,old:number):void;
+ protected _applyOrientation(value:any,old:any):void;
+ protected _applyValue(value:any,old:any):void;
+ protected _fireValue():void;
+ protected _onInterval(e:qx.event.type.Event):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onPointerDown(e:qx.event.type.Pointer):void;
+ protected _onPointerMove(e:qx.event.type.Pointer):void;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ protected _onPointerUp(e:qx.event.type.Pointer):void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _onUpdate(e:qx.event.type.Data):void;
+ protected _positionToValue(position:number):number;
+ protected _setKnobPosition(position:number):void;
+ protected _updateKnobPosition():void;
+ protected _updateKnobSize():void;
+ protected _valueToPosition(value:number):number;
+ getKnobFactor():number;
+ getOrientation():any;
+ protected initKnobFactor(value:any):number;
+ protected initMaximum(value:any):number;
+ protected initMinimum(value:any):number;
+ protected initOrientation(value:any):any;
+ protected initPageStep(value:any):number;
+ protected initSingleStep(value:any):number;
+ protected initValue(value:any):any;
+ resetKnobFactor():void;
+ resetMaximum():void;
+ resetMinimum():void;
+ resetOrientation():void;
+ resetPageStep():void;
+ resetSingleStep():void;
+ setKnobFactor(value:any):number;
+ setOrientation(value:any):any;
+ slideBack():void;
+ slideBy(offset:number,duration:number):void;
+ slideForward():void;
+ slidePageBack(duration:number):void;
+ slidePageForward(duration:number):void;
+ slideTo(value:number,duration:number):void;
+ slideToBegin(duration:number):void;
+ slideToEnd(duration:number):void;
+ stopSlideAnimation():void;
+ updatePosition(value:number):void;
+
+}
+}
+declare module qx.ui.form {
+class Spinner extends qx.ui.core.Widget implements qx.ui.form.INumberForm,qx.ui.form.IRange,qx.ui.form.IForm {
+ getValue():number;
+ resetValue():void;
+ setValue(value:number):void;
+ getMaximum():number;
+ getMinimum():number;
+ getPageStep():number;
+ getSingleStep():number;
+ setMaximum(max:number):void;
+ setMinimum(min:number):void;
+ setPageStep(step:number):void;
+ setSingleStep(step:number):void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (min?:number,value?:number,max?:number);
+ protected _applyEditable(value:boolean,old:boolean):void;
+ protected _applyMaximum(value:number,old:number):void;
+ protected _applyMinimum(value:number,old:number):void;
+ protected _applyNumberFormat(value:boolean,old:boolean):void;
+ protected _applyValue(value:number,old:number):void;
+ protected _applyWrap(value:boolean,old:boolean):void;
+ protected _checkValue(value:any):boolean;
+ protected _countDown():void;
+ protected _countUp():void;
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ protected _getFilterRegExp():RegExp;
+ protected _onChangeLocale(ev:qx.event.type.Event):void;
+ protected _onChangeNumberFormat(ev:qx.event.type.Event):void;
+ protected _onKeyDown(e:qx.event.type.KeySequence):void;
+ protected _onKeyUp(e:qx.event.type.KeySequence):void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _onTextChange(e:qx.event.type.Event):void;
+ protected _updateButtons():void;
+ getEditable():boolean;
+ getNumberFormat():qx.util.format.NumberFormat;
+ getWrap():boolean;
+ gotoValue(value:number):number;
+ protected initEditable(value:any):boolean;
+ protected initMaximum(value:any):number;
+ protected initMinimum(value:any):number;
+ protected initNumberFormat(value:any):qx.util.format.NumberFormat;
+ protected initPageStep(value:any):number;
+ protected initSingleStep(value:any):number;
+ protected initValue(value:any):any;
+ protected initWrap(value:any):boolean;
+ isEditable():boolean;
+ isWrap():boolean;
+ resetEditable():void;
+ resetMaximum():void;
+ resetMinimum():void;
+ resetNumberFormat():void;
+ resetPageStep():void;
+ resetSingleStep():void;
+ resetWrap():void;
+ setEditable(value:any):boolean;
+ setNumberFormat(value:any):qx.util.format.NumberFormat;
+ setWrap(value:any):boolean;
+ toggleEditable():boolean;
+ toggleWrap():boolean;
+
+}
+}
+declare module qx.ui.form {
+class SplitButton extends qx.ui.core.Widget implements qx.ui.form.IExecutable {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ resetCommand():void;
+ constructor (label?:string,icon?:string,menu?:qx.ui.menu.Menu,command?:qx.ui.command.Command);
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applyMenu(value:qx.ui.menu.Menu,old:qx.ui.menu.Menu):void;
+ protected _applyShow(value:any,old:any):void;
+ protected _onButtonExecute(e:qx.event.type.Event):void;
+ protected _onChangeMenuVisibility(e:qx.event.type.Data):void;
+ protected _onKeyDown(e:qx.event.type.KeySequence):void;
+ protected _onKeyUp(e:qx.event.type.KeySequence):void;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ getIcon():string;
+ getLabel():string;
+ getMenu():qx.ui.menu.Menu;
+ getShow():any;
+ protected initIcon(value:any):string;
+ protected initLabel(value:any):string;
+ protected initMenu(value:any):qx.ui.menu.Menu;
+ protected initShow(value:any):any;
+ resetIcon():void;
+ resetLabel():void;
+ resetMenu():void;
+ resetShow():void;
+ setIcon(value:any):string;
+ setLabel(value:any):string;
+ setMenu(value:any):qx.ui.menu.Menu;
+ setShow(value:any):any;
+
+}
+}
+declare module qx.ui.form {
+class TextArea extends qx.ui.form.AbstractField {
+ constructor (value?:string);
+ protected _applyAutoSize(value:boolean,old:boolean):void;
+ protected _applyMinimalLineHeight(value:number,old:number):void;
+ protected _applyWrap(value:boolean,old:boolean):void;
+ protected _getAreaHeight():number;
+ protected _getScrolledAreaHeight():number;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _setAreaHeight(height:number):void;
+ getAutoSize():boolean;
+ getMinimalLineHeight():number;
+ getSingleStep():number;
+ getWrap():boolean;
+ protected initAutoSize(value:any):boolean;
+ protected initMinimalLineHeight(value:any):number;
+ protected initSingleStep(value:any):number;
+ protected initWrap(value:any):boolean;
+ isAutoSize():boolean;
+ isWrap():boolean;
+ resetAutoSize():void;
+ resetMinimalLineHeight():void;
+ resetSingleStep():void;
+ resetWrap():void;
+ setAutoSize(value:any):boolean;
+ setMinimalLineHeight(value:any):number;
+ setSingleStep(value:any):number;
+ setWrap(value:any):boolean;
+ toggleAutoSize():boolean;
+ toggleWrap():boolean;
+
+}
+}
+declare module qx.ui.form {
+class TextField extends qx.ui.form.AbstractField {
+ protected _onKeyPress(evt:qx.event.type.KeySequence):void;
+
+}
+}
+declare module qx.ui.form {
+class ToggleButton extends qx.ui.basic.Atom implements qx.ui.form.IBooleanForm,qx.ui.form.IExecutable,qx.ui.form.IRadioItem {
+ getValue():boolean;
+ resetValue():void;
+ setValue(value:boolean):void;
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ getGroup():qx.ui.form.RadioGroup;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ resetCommand():void;
+ constructor (label?:string,icon?:string);
+ protected _applyGroup(value:any,old:any):void;
+ protected _applyTriState(value:boolean,old:boolean):void;
+ protected _applyValue(value:boolean,old:boolean):void;
+ protected _onExecute(e:qx.event.type.Event):void;
+ protected _onKeyDown(e:qx.event.type.Event):void;
+ protected _onKeyUp(e:qx.event.type.Event):void;
+ protected _onPointerDown(e:qx.event.type.Pointer):void;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ protected _onPointerUp(e:qx.event.type.Pointer):void;
+ getTriState():boolean;
+ protected initGroup(value:any):qx.ui.form.RadioGroup;
+ protected initTriState(value:any):boolean;
+ protected initValue(value:any):boolean;
+ isTriState():boolean;
+ isValue():boolean;
+ resetGroup():void;
+ resetTriState():void;
+ setTriState(value:any):boolean;
+ toggleTriState():boolean;
+ toggleValue():boolean;
+
+}
+}
+declare module qx.ui.form {
+class VirtualComboBox extends qx.ui.form.core.AbstractVirtualBox implements qx.ui.form.IStringForm {
+ getValue():string;
+ resetValue():void;
+ setValue(value:string):void;
+ constructor (model?:any);
+ protected _applyPlaceholder(value:string,old:string):void;
+ clearTextSelection():void;
+ getDefaultFormat():Function;
+ getPlaceholder():string;
+ getTextSelection():string;
+ getTextSelectionLength():number;
+ protected initDefaultFormat(value:any):Function;
+ protected initPlaceholder(value:any):string;
+ protected initValue(value:any):any;
+ resetAllTextSelection():void;
+ resetDefaultFormat():void;
+ resetPlaceholder():void;
+ selectAllText():void;
+ setDefaultFormat(value:any):Function;
+ setPlaceholder(value:any):string;
+ setTextSelection(start:number,end:number):void;
+
+}
+}
+declare module qx.ui.form {
+class VirtualSelectBox extends qx.ui.form.core.AbstractVirtualBox implements qx.data.controller.ISelection {
+ getSelection():qx.data.IListData;
+ resetSelection():void;
+ setSelection(value:qx.data.IListData):void;
+ constructor (model?:any);
+ protected _addBindings():void;
+ protected _applySelection(value:qx.data.Array,old:qx.data.Array):void;
+ protected _onPointerOut(event:qx.event.type.Pointer):void;
+ protected _onPointerOver(event:qx.event.type.Pointer):void;
+ protected _removeBindings():void;
+ protected initSelection(value:any):qx.data.Array;
+
+}
+}
+declare module qx.ui.form.core {
+class AbstractVirtualBox extends qx.ui.core.Widget implements qx.ui.form.IForm {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (model?:qx.data.Array);
+ protected _applyDelegate(value:any,old:any):void;
+ protected _applyIconOptions(value:any,old:any):void;
+ protected _applyIconPath(value:string,old:string):void;
+ protected _applyLabelOptions(value:any,old:any):void;
+ protected _applyLabelPath(value:string,old:string):void;
+ protected _applyMaxListHeight(value:number,old:number):void;
+ protected _applyModel(value:qx.data.Array,old:qx.data.Array):void;
+ protected _applyRowHeight(value:number,old:number):void;
+ protected _beforeClose():void;
+ protected _beforeOpen():void;
+ protected _getAction(event:qx.event.type.KeySequence):string;
+ protected _getBindPath(source:string,path?:string):string;
+ protected _handleKeyboard(event:qx.event.type.KeySequence):void;
+ protected _handlePointer(event:qx.event.type.Pointer):void;
+ protected _isModifierPressed(event:qx.event.type.KeySequence):boolean;
+ protected _onBlur(event:qx.event.type.Focus):void;
+ protected _onPopupChangeVisibility(event:qx.event.type.Data):void;
+ protected _onResize(event:qx.event.type.Data):void;
+ close():void;
+ getDelegate():any;
+ getIconOptions():any;
+ getIconPath():string;
+ getItemHeight():number;
+ getLabelOptions():any;
+ getLabelPath():string;
+ getMaxListHeight():number;
+ getModel():qx.data.Array;
+ protected initDelegate(value:any):any;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initItemHeight(value:any):number;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ protected initMaxListHeight(value:any):number;
+ protected initModel(value:any):qx.data.Array;
+ open():void;
+ refresh():void;
+ resetDelegate():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetItemHeight():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ resetMaxListHeight():void;
+ resetModel():void;
+ setDelegate(value:any):any;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setItemHeight(value:any):number;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+ setMaxListHeight(value:any):number;
+ setModel(value:any):qx.data.Array;
+ toggle():void;
+
+}
+}
+declare module qx.ui.form.core {
+class VirtualDropDownList extends qx.ui.popup.Popup {
+ constructor (target?:qx.ui.form.core.AbstractVirtualBox);
+ protected _applySelection(value:qx.data.Array,old:qx.data.Array):void;
+ protected _handleKeyboard(event:qx.event.type.KeySequence):void;
+ protected _handlePointer(event:qx.event.type.Mouse):void;
+ protected _onChangeDelegate(event:qx.event.type.Data):void;
+ protected _onChangeModel(event:qx.event.type.Data):void;
+ protected _onListChangeSelection(event:qx.event.type.Data):void;
+ close():void;
+ getSelection():qx.data.Array;
+ protected initSelection(value:any):qx.data.Array;
+ open():void;
+ resetSelection():void;
+ setPreselected(modelItem:any):void;
+ setSelection(value:any):qx.data.Array;
+
+}
+}
+declare module qx.ui.form.renderer {
+class AbstractRenderer extends qx.ui.core.Widget implements qx.ui.form.renderer.IFormRenderer {
+ addButton(button:qx.ui.form.Button,options?:IMap):void;
+ addItems(items:qx.ui.core.Widget[],names:string[],title?:string,itemsOptions?:qx.data.Array,headerOptions?:IMap):void;
+ constructor (form?:qx.ui.form.Form);
+ protected _connectVisibility(item:qx.ui.core.Widget,label:qx.ui.basic.Label):void;
+ protected _createLabelText(name:string,item:qx.ui.form.IForm):string;
+ protected _onChangeLocale(e:qx.event.type.Event):void;
+ protected _onFormChange():void;
+ protected _render():void;
+
+}
+}
+declare module qx.ui.form.renderer {
+class Double extends qx.ui.form.renderer.AbstractRenderer {
+ constructor (form?:any);
+ protected _createHeader(title:string):qx.ui.basic.Label;
+ protected _createLabel(name:string,item:qx.ui.core.Widget):qx.ui.basic.Label;
+ getLayout():qx.ui.layout.Grid;
+
+}
+}
+declare module qx.ui.form.renderer {
+interface IFormRenderer {
+ addButton(button:qx.ui.form.Button,options?:IMap):void;
+ addItems(items:qx.ui.core.Widget[],names:string[],title?:string,itemsOptions?:qx.data.Array,headerOptions?:IMap):void;
+
+}
+}
+declare module qx.ui.form.renderer {
+class Single extends qx.ui.form.renderer.AbstractRenderer {
+ constructor (form?:any);
+ protected _createHeader(title:string):qx.ui.basic.Label;
+ protected _createLabel(name:string,item:qx.ui.core.Widget):qx.ui.basic.Label;
+ getLayout():qx.ui.layout.Grid;
+
+}
+}
+declare module qx.ui.form.renderer {
+class SinglePlaceholder extends qx.ui.form.renderer.Single implements qx.ui.form.renderer.IFormRenderer {
+ addButton(button:qx.ui.form.Button,options?:IMap):void;
+ addItems(items:qx.ui.core.Widget[],names:string[],title?:string,itemsOptions?:qx.data.Array,headerOptions?:IMap):void;
+
+}
+}
+declare module qx.ui.form.validation {
+class AsyncValidator extends qx.core.Object {
+ constructor (validator?:Function);
+ setValid(valid:boolean,message?:string):void;
+ validate(item:qx.ui.core.Widget,value:any,manager:qx.ui.form.validation.Manager,context?:any):void;
+ validateForm(items:qx.ui.core.Widget[],manager:qx.ui.form.validation.Manager,context?:any):void;
+
+}
+}
+declare module qx.ui.form.validation {
+class Manager extends qx.core.Object {
+ constructor ();
+ protected _setValid(value:boolean):void;
+ protected _showToolTip(valid:boolean):void;
+ add(formItem:qx.ui.core.Widget,validator:Function,context?:any):void;
+ getContext():any;
+ getInvalidFormItems():qx.data.Array;
+ getInvalidMessage():string;
+ getInvalidMessages():string[];
+ getItems():qx.data.Array;
+ getRequiredFieldMessage():string;
+ getValid():boolean;
+ getValidator():any;
+ protected initContext(value:any):any;
+ protected initInvalidMessage(value:any):string;
+ protected initRequiredFieldMessage(value:any):string;
+ protected initValidator(value:any):any;
+ isValid():boolean;
+ remove(formItem:qx.ui.core.Widget):qx.ui.core.Widget;
+ reset():void;
+ resetContext():void;
+ resetInvalidMessage():void;
+ resetRequiredFieldMessage():void;
+ resetValidator():void;
+ setContext(value:any):any;
+ setFormValid(valid:boolean):void;
+ setInvalidMessage(value:any):string;
+ setItemValid(formItem:qx.ui.core.Widget,valid:boolean):void;
+ setRequiredFieldMessage(value:any):string;
+ setValidator(value:any):any;
+ validate():boolean;
+
+}
+}
+declare module qx.ui.groupbox {
+class CheckGroupBox extends qx.ui.groupbox.GroupBox implements qx.ui.form.IExecutable,qx.ui.form.IBooleanForm,qx.ui.form.IModel {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ getValue():boolean;
+ resetValue():void;
+ setValue(value:boolean):void;
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ protected _onExecute(e:qx.event.type.Event):void;
+ protected _onRadioChangeValue(e:qx.event.type.Data):void;
+
+}
+}
+declare module qx.ui.groupbox {
+class GroupBox extends qx.ui.core.Widget implements qx.ui.form.IForm {
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor (legend?:string,icon?:string);
+ protected _applyLegendPosition(e:any):void;
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ protected _repositionFrame():void;
+ getIcon():string;
+ getLegend():string;
+ getLegendPosition():any;
+ protected initLegendPosition(value:any):any;
+ resetLegendPosition():void;
+ setIcon(icon:string):void;
+ setLegend(legend:string):void;
+ setLegendPosition(value:any):any;
+
+}
+}
+declare module qx.ui.groupbox {
+class RadioGroupBox extends qx.ui.groupbox.GroupBox implements qx.ui.form.IRadioItem,qx.ui.form.IExecutable,qx.ui.form.IBooleanForm,qx.ui.form.IModel {
+ getGroup():qx.ui.form.RadioGroup;
+ getValue():boolean;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ setValue(value:boolean):void;
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ resetValue():void;
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ protected _onExecute(e:qx.event.type.Event):void;
+ protected _onRadioChangeValue(e:qx.event.type.Data):void;
+ getLabel():string;
+
+}
+}
+declare module qx.ui.indicator {
+class ProgressBar extends qx.ui.container.Composite {
+ constructor (value?:number,maximum?:number);
+ protected _changeProgress(value:number):void;
+ getMaximum():number;
+ getValue():number;
+ setMaximum(value:number):number;
+ setValue(value:number):number;
+
+}
+}
+declare module qx.ui.layout {
+class Abstract extends qx.core.Object {
+ protected _applyLayoutChange():void;
+ protected _clearSeparators():void;
+ protected _computeSizeHint():IMap;
+ protected _getLayoutChildren():qx.data.Array;
+ protected _getWidget():qx.ui.core.Widget;
+ protected _renderSeparator(separator:string,bounds:IMap):void;
+ connectToWidget(widget:qx.ui.core.Widget):void;
+ getHeightForWidth(width:number):number;
+ getSizeHint():IMap;
+ hasHeightForWidth():boolean;
+ invalidateChildrenCache():void;
+ invalidateLayoutCache():void;
+ renderLayout(availWidth:number,availHeight:number,padding:IMap):void;
+ verifyLayoutProperty(item:any,name:any,value:any):void;
+
+}
+}
+declare module qx.ui.layout {
+class Atom extends qx.ui.layout.Abstract {
+ getCenter():boolean;
+ getGap():number;
+ getIconPosition():any;
+ protected initCenter(value:any):boolean;
+ protected initGap(value:any):number;
+ protected initIconPosition(value:any):any;
+ isCenter():boolean;
+ resetCenter():void;
+ resetGap():void;
+ resetIconPosition():void;
+ setCenter(value:any):boolean;
+ setGap(value:any):number;
+ setIconPosition(value:any):any;
+ toggleCenter():boolean;
+
+}
+}
+declare module qx.ui.layout {
+class Basic extends qx.ui.layout.Abstract {
+
+}
+}
+declare module qx.ui.layout {
+class Canvas extends qx.ui.layout.Abstract {
+ getDesktop():boolean;
+ protected initDesktop(value:any):boolean;
+ isDesktop():boolean;
+ resetDesktop():void;
+ setDesktop(value:any):boolean;
+ toggleDesktop():boolean;
+
+}
+}
+declare module qx.ui.layout {
+class Dock extends qx.ui.layout.Abstract {
+ constructor (spacingX?:number,spacingY?:number,separatorX?:string,separatorY?:string);
+ protected _applySort(value:any,old:any):void;
+ protected _getSeparatorWidths():IMap;
+ getConnectSeparators():boolean;
+ getSeparatorX():qx.ui.decoration.Decorator;
+ getSeparatorY():qx.ui.decoration.Decorator;
+ getSort():any;
+ getSpacingX():number;
+ getSpacingY():number;
+ protected initConnectSeparators(value:any):boolean;
+ protected initSeparatorX(value:any):qx.ui.decoration.Decorator;
+ protected initSeparatorY(value:any):qx.ui.decoration.Decorator;
+ protected initSort(value:any):any;
+ protected initSpacingX(value:any):number;
+ protected initSpacingY(value:any):number;
+ isConnectSeparators():boolean;
+ resetConnectSeparators():void;
+ resetSeparatorX():void;
+ resetSeparatorY():void;
+ resetSort():void;
+ resetSpacingX():void;
+ resetSpacingY():void;
+ setConnectSeparators(value:any):boolean;
+ setSeparatorX(value:any):qx.ui.decoration.Decorator;
+ setSeparatorY(value:any):qx.ui.decoration.Decorator;
+ setSort(value:any):any;
+ setSpacingX(value:any):number;
+ setSpacingY(value:any):number;
+ toggleConnectSeparators():boolean;
+
+}
+}
+declare module qx.ui.layout {
+class Flow extends qx.ui.layout.Abstract {
+ constructor (spacingX?:number,spacingY?:number,alignX?:string);
+ getAlignX():any;
+ getAlignY():any;
+ getLastLineChildren(width:number):qx.data.Array;
+ getReversed():boolean;
+ getSpacingX():number;
+ getSpacingY():number;
+ protected initAlignX(value:any):any;
+ protected initAlignY(value:any):any;
+ protected initReversed(value:any):boolean;
+ protected initSpacingX(value:any):number;
+ protected initSpacingY(value:any):number;
+ isReversed():boolean;
+ resetAlignX():void;
+ resetAlignY():void;
+ resetReversed():void;
+ resetSpacingX():void;
+ resetSpacingY():void;
+ setAlignX(value:any):any;
+ setAlignY(value:any):any;
+ setReversed(value:any):boolean;
+ setSpacingX(value:any):number;
+ setSpacingY(value:any):number;
+ toggleReversed():boolean;
+
+}
+}
+declare module qx.ui.layout {
+class Grid extends qx.ui.layout.Abstract {
+ constructor (spacingX?:number,spacingY?:number);
+ protected _fixHeightsRowSpan(rowHeights:IMap[]):void;
+ protected _fixWidthsColSpan(colWidths:IMap[]):void;
+ protected _getColumnFlexOffsets(width:number):number[];
+ protected _getColWidths():IMap[];
+ protected _getRowFlexOffsets(height:number):number[];
+ protected _getRowHeights():IMap[];
+ protected _setColumnData(column:number,key:string,value:any):void;
+ protected _setRowData(row:number,key:string,value:any):void;
+ getCellAlign(row:number,column:number):IMap;
+ getCellWidget(row:number,column:number):qx.ui.core.Widget;
+ getColumnAlign(column:number):IMap;
+ getColumnCount():number;
+ getColumnFlex(column:number):number;
+ getColumnMaxWidth(column:number):number;
+ getColumnMinWidth(column:number):number;
+ getColumnWidth(column:number):number;
+ getRowAlign(row:number):IMap;
+ getRowCount():number;
+ getRowFlex(row:number):number;
+ getRowHeight(row:number):number;
+ getRowMaxHeight(row:number):number;
+ getRowMinHeight(row:number):number;
+ getSpacingX():number;
+ getSpacingY():number;
+ protected initSpacingX(value:any):number;
+ protected initSpacingY(value:any):number;
+ resetSpacingX():void;
+ resetSpacingY():void;
+ setColumnAlign(column:number,hAlign:string,vAlign:string):qx.ui.layout.Grid;
+ setColumnFlex(column:number,flex:number):qx.ui.layout.Grid;
+ setColumnMaxWidth(column:number,maxWidth:number):qx.ui.layout.Grid;
+ setColumnMinWidth(column:number,minWidth:number):qx.ui.layout.Grid;
+ setColumnWidth(column:number,width:number):qx.ui.layout.Grid;
+ setRowAlign(row:number,hAlign:string,vAlign:string):qx.ui.layout.Grid;
+ setRowFlex(row:number,flex:number):qx.ui.layout.Grid;
+ setRowHeight(row:number,height:number):qx.ui.layout.Grid;
+ setRowMaxHeight(row:number,maxHeight:number):qx.ui.layout.Grid;
+ setRowMinHeight(row:number,minHeight:number):qx.ui.layout.Grid;
+ setSpacing(spacing:number):qx.ui.layout.Grid;
+ setSpacingX(value:any):number;
+ setSpacingY(value:any):number;
+
+}
+}
+declare module qx.ui.layout {
+class Grow extends qx.ui.layout.Abstract {
+
+}
+}
+declare module qx.ui.layout {
+class HBox extends qx.ui.layout.Abstract {
+ constructor (spacing?:number,alignX?:string,separator?:string);
+ protected _applyReversed(value:boolean,old:boolean):void;
+ getAlignX():any;
+ getAlignY():any;
+ getReversed():boolean;
+ getSeparator():qx.ui.decoration.Decorator;
+ getSpacing():number;
+ protected initAlignX(value:any):any;
+ protected initAlignY(value:any):any;
+ protected initReversed(value:any):boolean;
+ protected initSeparator(value:any):qx.ui.decoration.Decorator;
+ protected initSpacing(value:any):number;
+ isReversed():boolean;
+ resetAlignX():void;
+ resetAlignY():void;
+ resetReversed():void;
+ resetSeparator():void;
+ resetSpacing():void;
+ setAlignX(value:any):any;
+ setAlignY(value:any):any;
+ setReversed(value:any):boolean;
+ setSeparator(value:any):qx.ui.decoration.Decorator;
+ setSpacing(value:any):number;
+ toggleReversed():boolean;
+
+}
+}
+declare module qx.ui.layout {
+class LineSizeIterator {
+ constructor (children?:qx.ui.core.Widget[],spacing?:number);
+ computeNextLine(availWidth:number):IMap;
+ hasMoreLines():boolean;
+
+}
+}
+declare module qx.ui.layout {
+class Util {
+ static arrangeIdeals(beginMin:number,beginIdeal:number,beginMax:number,endMin:number,endIdeal:number,endMax:number):IMap;
+ static collapseMargins(...varargs:any[]):number;
+ static computeFlexOffsets(flexibles:IMap,avail:number,used:number):IMap;
+ static computeHorizontalAlignOffset(align:string,width:number,availWidth:number,marginLeft?:number,marginRight?:number):number;
+ static computeHorizontalGaps(children:qx.data.Array,spacing?:number,collapse?:boolean):number;
+ static computeHorizontalSeparatorGaps(children:qx.ui.core.LayoutItem[],spacing:number,separator:string):number;
+ static computeVerticalAlignOffset(align:string,height:number,availHeight:number,marginTop?:number,marginBottom?:number):number;
+ static computeVerticalGaps(children:qx.data.Array,spacing?:number,collapse?:boolean):number;
+ static computeVerticalSeparatorGaps(children:qx.ui.core.LayoutItem[],spacing:number,separator:string):number;
+
+}
+}
+declare module qx.ui.layout {
+class VBox extends qx.ui.layout.Abstract {
+ constructor (spacing?:number,alignY?:string,separator?:string);
+ protected _applyReversed(value:boolean,old:boolean):void;
+ getAlignX():any;
+ getAlignY():any;
+ getReversed():boolean;
+ getSeparator():qx.ui.decoration.Decorator;
+ getSpacing():number;
+ protected initAlignX(value:any):any;
+ protected initAlignY(value:any):any;
+ protected initReversed(value:any):boolean;
+ protected initSeparator(value:any):qx.ui.decoration.Decorator;
+ protected initSpacing(value:any):number;
+ isReversed():boolean;
+ resetAlignX():void;
+ resetAlignY():void;
+ resetReversed():void;
+ resetSeparator():void;
+ resetSpacing():void;
+ setAlignX(value:any):any;
+ setAlignY(value:any):any;
+ setReversed(value:any):boolean;
+ setSeparator(value:any):qx.ui.decoration.Decorator;
+ setSpacing(value:any):number;
+ toggleReversed():boolean;
+
+}
+}
+declare module qx.ui.list {
+class List extends qx.ui.virtual.core.Scroller implements qx.data.controller.ISelection {
+ getSelection():qx.data.IListData;
+ resetSelection():void;
+ setSelection(value:qx.data.IListData):void;
+ getAutoScrollIntoView():boolean;
+ getDragSelection():boolean;
+ getQuickSelection():boolean;
+ getSelectionMode():any;
+ isDragSelection():boolean;
+ isQuickSelection():boolean;
+ resetDragSelection():void;
+ resetQuickSelection():void;
+ resetSelectionMode():void;
+ setAutoScrollIntoView(value:boolean):void;
+ setDragSelection(value:any):boolean;
+ setQuickSelection(value:any):boolean;
+ setSelectionMode(value:any):any;
+ toggleDragSelection():boolean;
+ toggleQuickSelection():boolean;
+ constructor (model?:qx.data.IListData);
+ protected _applyDelegate(value:any,old:any):void;
+ protected _applyGroupLabelOptions(value:any,old:any):void;
+ protected _applyGroupLabelPath(value:string,old:string):void;
+ protected _applyGroupRowHeight(value:number,old:number):void;
+ protected _applyIconOptions(value:any,old:any):void;
+ protected _applyIconPath(value:string,old:string):void;
+ protected _applyLabelOptions(value:any,old:any):void;
+ protected _applyLabelPath(value:string,old:string):void;
+ protected _applyModel(value:qx.data.IListData,old:qx.data.IListData):void;
+ protected _applyRowHeight(value:number,old:number):void;
+ protected _getDataFromRow(row:number):any;
+ protected _getLookupTable():qx.data.Array;
+ protected _getSelectables():qx.data.Array;
+ protected _init():void;
+ protected _initBackground():void;
+ protected _initLayer():void;
+ protected _isGroup(row:number):boolean;
+ protected _lookup(row:number):number;
+ protected _lookupGroup(row:number):number;
+ protected _onModelChange(e:qx.event.type.Data):void;
+ protected _onResize(e:qx.event.type.Data):void;
+ protected _reverseLookup(index:number):number;
+ protected _runDelegateFilter(model:qx.data.IListData):void;
+ protected _runDelegateGroup(model:qx.data.IListData):void;
+ protected _runDelegateSorter(model:qx.data.IListData):void;
+ getAutoGrouping():boolean;
+ getDelegate():any;
+ getGroupItemHeight():number;
+ getGroupLabelOptions():any;
+ getGroupLabelPath():string;
+ getGroups():qx.data.Array;
+ getIconOptions():any;
+ getIconPath():string;
+ getItemHeight():number;
+ getLabelOptions():any;
+ getLabelPath():string;
+ getModel():qx.data.IListData;
+ protected initAutoGrouping(value:any):boolean;
+ protected initDelegate(value:any):any;
+ protected initGroupItemHeight(value:any):number;
+ protected initGroupLabelOptions(value:any):any;
+ protected initGroupLabelPath(value:any):string;
+ protected initGroups(value:any):qx.data.Array;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initItemHeight(value:any):number;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ protected initModel(value:any):qx.data.IListData;
+ isAutoGrouping():boolean;
+ refresh():void;
+ resetAutoGrouping():void;
+ resetDelegate():void;
+ resetGroupItemHeight():void;
+ resetGroupLabelOptions():void;
+ resetGroupLabelPath():void;
+ resetGroups():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetItemHeight():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ resetModel():void;
+ setAutoGrouping(value:any):boolean;
+ setDelegate(value:any):any;
+ setGroupItemHeight(value:any):number;
+ setGroupLabelOptions(value:any):any;
+ setGroupLabelPath(value:any):string;
+ setGroups(value:any):qx.data.Array;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setItemHeight(value:any):number;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+ setModel(value:any):qx.data.IListData;
+ toggleAutoGrouping():boolean;
+
+}
+}
+declare module qx.ui.list.core {
+interface IListDelegate {
+ bindGroupItem(controller:qx.ui.list.core.MWidgetController,item:qx.ui.core.Widget,id:number):void;
+ bindItem(controller:qx.ui.list.core.MWidgetController,item:qx.ui.core.Widget,id:number):void;
+ configureGroupItem(item:qx.ui.core.Widget):void;
+ configureItem(item:qx.ui.core.Widget):void;
+ createGroupItem():qx.ui.core.Widget;
+ createItem():qx.ui.core.Widget;
+ filter(data:any):boolean;
+ group(data:any):string;
+ onPool(item:qx.ui.core.Widget):void;
+ sorter(a:any,b:any):number;
+
+}
+}
+declare module qx.ui.list.core {
+class MWidgetController {
+ constructor ();
+ protected _bindGroupItem(item:qx.ui.core.Widget,index:number):void;
+ protected _bindItem(item:qx.ui.core.Widget,index:number):void;
+ protected _configureGroupItem(item:qx.ui.core.Widget):void;
+ protected _configureItem(item:qx.ui.core.Widget):void;
+ protected _removeBindingsFrom(item:qx.ui.core.Widget):void;
+ bindDefaultProperties(item:qx.ui.core.Widget,index:number):void;
+ bindProperty(sourcePath:string,targetProperty:string,options:IMap,targetWidget:qx.ui.core.Widget,index:number):void;
+ bindPropertyReverse(targetPath:string,sourceProperty:string,options:IMap,sourceWidget:qx.ui.core.Widget,index:number):void;
+ getDelegate():any;
+ getGroupLabelOptions():any;
+ getGroupLabelPath():string;
+ getIconOptions():any;
+ getIconPath():string;
+ getLabelOptions():any;
+ getLabelPath():string;
+ protected initDelegate(value:any):any;
+ protected initGroupLabelOptions(value:any):any;
+ protected initGroupLabelPath(value:any):string;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ removeBindings():void;
+ resetDelegate():void;
+ resetGroupLabelOptions():void;
+ resetGroupLabelPath():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ setDelegate(value:any):any;
+ setGroupLabelOptions(value:any):any;
+ setGroupLabelPath(value:any):string;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+
+}
+}
+declare module qx.ui.list.provider {
+interface IListProvider {
+ createGroupRenderer():any;
+ createItemRenderer():any;
+ createLayer():qx.ui.virtual.layer.Abstract;
+ isSelectable(row:number):boolean;
+ removeBindings():void;
+ setDelegate(delegate:any):void;
+ setIconOptions(options:IMap):void;
+ setIconPath(path:string):void;
+ setLabelOptions(options:IMap):void;
+ setLabelPath(path:string):void;
+ styleSelectabled(row:number):void;
+ styleUnselectabled(row:number):void;
+
+}
+}
+declare module qx.ui.list.provider {
+class WidgetProvider extends qx.core.Object implements qx.ui.virtual.core.IWidgetCellProvider,qx.ui.list.provider.IListProvider {
+ getCellWidget(row:number,column:number):qx.ui.core.LayoutItem;
+ poolCellWidget(widget:qx.ui.core.LayoutItem):void;
+ createGroupRenderer():any;
+ createItemRenderer():any;
+ createLayer():qx.ui.virtual.layer.Abstract;
+ isSelectable(row:number):boolean;
+ removeBindings():void;
+ setDelegate(delegate:any):void;
+ setIconOptions(options:IMap):void;
+ setIconPath(path:string):void;
+ setLabelOptions(options:IMap):void;
+ setLabelPath(path:string):void;
+ styleSelectabled(row:number):void;
+ styleUnselectabled(row:number):void;
+ bindDefaultProperties(item:qx.ui.core.Widget,index:number):void;
+ bindProperty(sourcePath:string,targetProperty:string,options:IMap,targetWidget:qx.ui.core.Widget,index:number):void;
+ bindPropertyReverse(targetPath:string,sourceProperty:string,options:IMap,sourceWidget:qx.ui.core.Widget,index:number):void;
+ getDelegate():any;
+ getGroupLabelOptions():any;
+ getGroupLabelPath():string;
+ getIconOptions():any;
+ getIconPath():string;
+ getLabelOptions():any;
+ getLabelPath():string;
+ resetDelegate():void;
+ resetGroupLabelOptions():void;
+ resetGroupLabelPath():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ setGroupLabelOptions(value:any):any;
+ setGroupLabelPath(value:any):string;
+ constructor (list?:qx.ui.list.List);
+ protected _onChangeDelegate(event:qx.event.type.Data):void;
+ protected _onGroupItemCreated(event:qx.event.type.Data):void;
+ protected _onItemCreated(event:qx.event.type.Data):void;
+ protected _onPool(item:qx.ui.core.Widget):void;
+ protected _styleSelectabled(widget:qx.ui.core.Widget):void;
+ protected _styleUnselectabled(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.menu {
+class AbstractButton extends qx.ui.core.Widget implements qx.ui.form.IExecutable {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ setCommand(command:qx.ui.command.Command):void;
+ resetCommand():void;
+ constructor ();
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applyMenu(value:qx.ui.menu.Menu,old:qx.ui.menu.Menu):void;
+ protected _applyShowCommandLabel(value:boolean,old:boolean):void;
+ protected _onChangeCommand(e:qx.event.type.Data):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+ getChildrenSizes():qx.data.Array;
+ getIcon():string;
+ getLabel():string;
+ getMenu():qx.ui.menu.Menu;
+ getShowCommandLabel():boolean;
+ protected initIcon(value:any):string;
+ protected initLabel(value:any):string;
+ protected initMenu(value:any):qx.ui.menu.Menu;
+ protected initShowCommandLabel(value:any):boolean;
+ isShowCommandLabel():boolean;
+ resetIcon():void;
+ resetLabel():void;
+ resetMenu():void;
+ resetShowCommandLabel():void;
+ setIcon(value:any):string;
+ setLabel(value:any):string;
+ setMenu(value:any):qx.ui.menu.Menu;
+ setShowCommandLabel(value:any):boolean;
+ toggleShowCommandLabel():boolean;
+
+}
+}
+declare module qx.ui.menu {
+class Button extends qx.ui.menu.AbstractButton {
+ constructor (label?:string,icon?:string,command?:qx.ui.command.Command,menu?:qx.ui.menu.Menu);
+
+}
+}
+declare module qx.ui.menu {
+class ButtonLayout extends qx.ui.layout.Abstract {
+
+}
+}
+declare module qx.ui.menu {
+class CheckBox extends qx.ui.menu.AbstractButton implements qx.ui.form.IBooleanForm {
+ getValue():boolean;
+ resetValue():void;
+ setValue(value:boolean):void;
+ constructor (label?:string,menu?:qx.ui.menu.Menu);
+ protected _applyValue(value:boolean,old:boolean):void;
+ protected _onExecute(e:qx.event.type.Event):void;
+ protected initValue(value:any):boolean;
+ isValue():boolean;
+ toggleValue():boolean;
+
+}
+}
+declare module qx.ui.menu {
+class Layout extends qx.ui.layout.VBox {
+ getArrowColumnWidth():number;
+ getColumnSizes():qx.data.Array;
+ getColumnSpacing():number;
+ getIconColumnWidth():number;
+ getSpanColumn():number;
+ protected initArrowColumnWidth(value:any):number;
+ protected initColumnSpacing(value:any):number;
+ protected initIconColumnWidth(value:any):number;
+ protected initSpanColumn(value:any):number;
+ resetArrowColumnWidth():void;
+ resetColumnSpacing():void;
+ resetIconColumnWidth():void;
+ resetSpanColumn():void;
+ setArrowColumnWidth(value:any):number;
+ setColumnSpacing(value:any):number;
+ setIconColumnWidth(value:any):number;
+ setSpanColumn(value:any):number;
+
+}
+}
+declare module qx.ui.menu {
+class Manager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.ui.menu.Manager;
+ __onPreventContextMenu(e:qx.event.type.Mouse):void;
+ protected _getChild(menu:qx.ui.menu.Menu,start:number,iter:number,loop?:boolean):qx.ui.menu.Button;
+ protected _getMenuButton(widget:qx.ui.core.Widget):qx.ui.menu.Button;
+ protected _isInMenu(widget:qx.ui.core.Widget):boolean;
+ protected _isMenuOpener(widget:qx.ui.core.Widget):boolean;
+ protected _onCloseInterval(e:qx.event.type.Event):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onKeyPressDown(menu:qx.ui.menu.Menu):void;
+ protected _onKeyPressEnter(menu:qx.ui.menu.Menu,button:qx.ui.menu.AbstractButton,e:qx.event.type.KeySequence):void;
+ protected _onKeyPressLeft(menu:qx.ui.menu.Menu):void;
+ protected _onKeyPressRight(menu:qx.ui.menu.Menu):void;
+ protected _onKeyPressSpace(menu:qx.ui.menu.Menu,button:qx.ui.menu.AbstractButton,e:qx.event.type.KeySequence):void;
+ protected _onKeyPressUp(menu:qx.ui.menu.Menu):void;
+ protected _onKeyUpDown(e:qx.event.type.KeySequence):void;
+ protected _onOpenInterval(e:qx.event.type.Event):void;
+ protected _onPointerDown(e:qx.event.type.Pointer):void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ add(obj:qx.ui.menu.Menu):void;
+ cancelClose(menu:qx.ui.menu.Menu):void;
+ cancelOpen(menu:qx.ui.menu.Menu):void;
+ getActiveMenu():qx.ui.menu.Menu;
+ hideAll():void;
+ preventContextMenuOnce():void;
+ remove(obj:qx.ui.menu.Menu):void;
+ scheduleClose(menu:qx.ui.menu.Menu):void;
+ scheduleOpen(menu:qx.ui.menu.Menu):void;
+
+}
+}
+declare module qx.ui.menu {
+class Menu extends qx.ui.core.Widget {
+ static getMoveDirection():string;
+ static getVisibleElement():qx.ui.core.Widget;
+ static setMoveDirection(direction:string):void;
+ static setVisibleElement(elem:qx.ui.core.Widget):void;
+ getDomMove():boolean;
+ getLayoutLocation(widget:qx.ui.core.Widget):IMap;
+ getOffsetBottom():number;
+ getOffsetLeft():number;
+ getOffsetRight():number;
+ getOffsetTop():number;
+ getPlacementModeX():any;
+ getPlacementModeY():any;
+ getPlaceMethod():any;
+ getPosition():any;
+ isDomMove():boolean;
+ moveTo(left:number,top:number):void;
+ placeToElement(elem:HTMLElement,liveupdate:boolean):void;
+ placeToPoint(point:IMap):void;
+ placeToPointer(event:qx.event.type.Pointer):void;
+ placeToWidget(target:qx.ui.core.Widget,liveupdate:boolean):boolean;
+ resetDomMove():void;
+ resetOffset():void;
+ resetOffsetBottom():void;
+ resetOffsetLeft():void;
+ resetOffsetRight():void;
+ resetOffsetTop():void;
+ resetPlacementModeX():void;
+ resetPlacementModeY():void;
+ resetPlaceMethod():void;
+ resetPosition():void;
+ setDomMove(value:any):boolean;
+ setOffset(offsetTop:any,offsetRight:any,offsetBottom:any,offsetLeft:any):void;
+ setOffsetBottom(value:any):number;
+ setOffsetLeft(value:any):number;
+ setOffsetRight(value:any):number;
+ setOffsetTop(value:any):number;
+ setPlacementModeX(value:any):any;
+ setPlacementModeY(value:any):any;
+ setPlaceMethod(value:any):any;
+ setPosition(value:any):any;
+ toggleDomMove():boolean;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ constructor ();
+ protected _applyArrowColumnWidth(value:number,old:number):void;
+ protected _applyBlockerColor(value:string,old:string):void;
+ protected _applyBlockerOpacity(value:number,old:number):void;
+ protected _applyIconColumnWidth(value:number,old:number):void;
+ protected _applyOpenedButton(value:qx.ui.core.Widget,old:qx.ui.core.Widget):void;
+ protected _applySelectedButton(value:qx.ui.core.Widget,old:qx.ui.core.Widget):void;
+ protected _applySpacingX(value:number,old:number):void;
+ protected _applySpacingY(value:number,old:number):void;
+ protected _assertSlideBar(callback:Function):any;
+ protected _computePlacementSize():IMap;
+ protected _getMenuBounds():IMap;
+ protected _getMenuLayout():any;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ protected _onResize():void;
+ addSeparator():void;
+ getArrowColumnWidth():number;
+ getBlockBackground():boolean;
+ getBlockerColor():string;
+ getBlockerOpacity():number;
+ getCloseInterval():number;
+ getColumnSizes():qx.data.Array;
+ getIconColumnWidth():number;
+ getOpenedButton():qx.ui.core.Widget;
+ getOpener():qx.ui.core.Widget;
+ getOpenInterval():number;
+ getParentMenu():any;
+ getSelectables():qx.ui.core.Widget[];
+ getSelectedButton():qx.ui.core.Widget;
+ getSpacingX():number;
+ getSpacingY():number;
+ protected initArrowColumnWidth(value:any):number;
+ protected initBlockBackground(value:any):boolean;
+ protected initBlockerColor(value:any):string;
+ protected initBlockerOpacity(value:any):number;
+ protected initCloseInterval(value:any):number;
+ protected initIconColumnWidth(value:any):number;
+ protected initOpenedButton(value:any):qx.ui.core.Widget;
+ protected initOpener(value:any):qx.ui.core.Widget;
+ protected initOpenInterval(value:any):number;
+ protected initSelectedButton(value:any):qx.ui.core.Widget;
+ protected initSpacingX(value:any):number;
+ protected initSpacingY(value:any):number;
+ isBlockBackground():boolean;
+ open():void;
+ openAtPoint(point:IMap):void;
+ openAtPointer(e:qx.event.type.Pointer):void;
+ resetArrowColumnWidth():void;
+ resetBlockBackground():void;
+ resetBlockerColor():void;
+ resetBlockerOpacity():void;
+ resetCloseInterval():void;
+ resetIconColumnWidth():void;
+ resetOpenedButton():void;
+ resetOpener():void;
+ resetOpenInterval():void;
+ resetSelectedButton():void;
+ resetSpacingX():void;
+ resetSpacingY():void;
+ setArrowColumnWidth(value:any):number;
+ setBlockBackground(value:any):boolean;
+ setBlockerColor(value:any):string;
+ setBlockerOpacity(value:any):number;
+ setCloseInterval(value:any):number;
+ setIconColumnWidth(value:any):number;
+ setOpenedButton(value:any):qx.ui.core.Widget;
+ setOpener(value:any):qx.ui.core.Widget;
+ setOpenInterval(value:any):number;
+ setSelectedButton(value:any):qx.ui.core.Widget;
+ setSpacingX(value:any):number;
+ setSpacingY(value:any):number;
+ toggleBlockBackground():boolean;
+
+}
+}
+declare module qx.ui.menu {
+class MenuSlideBar extends qx.ui.container.SlideBar {
+ constructor ();
+
+}
+}
+declare module qx.ui.menu {
+class RadioButton extends qx.ui.menu.AbstractButton implements qx.ui.form.IRadioItem,qx.ui.form.IBooleanForm,qx.ui.form.IModel {
+ getGroup():qx.ui.form.RadioGroup;
+ getValue():boolean;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ setValue(value:boolean):void;
+ resetValue():void;
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ constructor (label?:string,menu?:qx.ui.menu.Menu);
+ protected _applyGroup(value:qx.ui.form.RadioGroup,old:qx.ui.form.RadioGroup):void;
+ protected _applyValue(value:boolean,old:boolean):void;
+ protected _onExecute(e:qx.event.type.Event):void;
+ protected initGroup(value:any):qx.ui.form.RadioGroup;
+ protected initValue(value:any):boolean;
+ isValue():boolean;
+ resetGroup():void;
+ toggleValue():boolean;
+
+}
+}
+declare module qx.ui.menu {
+class Separator extends qx.ui.core.Widget {
+
+}
+}
+declare module qx.ui.menubar {
+class Button extends qx.ui.form.MenuButton {
+ constructor (label?:any,icon?:any,menu?:any);
+ getMenuBar():qx.ui.menubar.MenuBar;
+
+}
+}
+declare module qx.ui.menubar {
+class MenuBar extends qx.ui.toolbar.ToolBar {
+
+}
+}
+declare module qx.ui.popup {
+class Manager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.ui.popup.Manager;
+ add(obj:qx.ui.popup.Popup):void;
+ hideAll():void;
+ remove(obj:qx.ui.popup.Popup):void;
+
+}
+}
+declare module qx.ui.popup {
+class Popup extends qx.ui.container.Composite {
+ static getMoveDirection():string;
+ static getVisibleElement():qx.ui.core.Widget;
+ static setMoveDirection(direction:string):void;
+ static setVisibleElement(elem:qx.ui.core.Widget):void;
+ getDomMove():boolean;
+ getLayoutLocation(widget:qx.ui.core.Widget):IMap;
+ getOffsetBottom():number;
+ getOffsetLeft():number;
+ getOffsetRight():number;
+ getOffsetTop():number;
+ getPlacementModeX():any;
+ getPlacementModeY():any;
+ getPlaceMethod():any;
+ getPosition():any;
+ isDomMove():boolean;
+ moveTo(left:number,top:number):void;
+ placeToElement(elem:HTMLElement,liveupdate:boolean):void;
+ placeToPoint(point:IMap):void;
+ placeToPointer(event:qx.event.type.Pointer):void;
+ placeToWidget(target:qx.ui.core.Widget,liveupdate:boolean):boolean;
+ resetDomMove():void;
+ resetOffset():void;
+ resetOffsetBottom():void;
+ resetOffsetLeft():void;
+ resetOffsetRight():void;
+ resetOffsetTop():void;
+ resetPlacementModeX():void;
+ resetPlacementModeY():void;
+ resetPlaceMethod():void;
+ resetPosition():void;
+ setDomMove(value:any):boolean;
+ setOffset(offsetTop:any,offsetRight:any,offsetBottom:any,offsetLeft:any):void;
+ setOffsetBottom(value:any):number;
+ setOffsetLeft(value:any):number;
+ setOffsetRight(value:any):number;
+ setOffsetTop(value:any):number;
+ setPlacementModeX(value:any):any;
+ setPlacementModeY(value:any):any;
+ setPlaceMethod(value:any):any;
+ setPosition(value:any):any;
+ toggleDomMove():boolean;
+ constructor (layout?:any);
+ getAutoHide():boolean;
+ protected initAutoHide(value:any):boolean;
+ isAutoHide():boolean;
+ resetAutoHide():void;
+ setAutoHide(value:any):boolean;
+ toggleAutoHide():boolean;
+
+}
+}
+declare module qx.ui.progressive {
+class Progressive extends qx.ui.container.Composite {
+ constructor (structure?:qx.ui.progressive.structure.Abstract);
+ protected _applyDataModel(value:qx.ui.progressive.model.Abstract,old:any):void;
+ addRenderer(name:string,renderer:qx.ui.progressive.renderer.Abstract):void;
+ getBatchSize():number;
+ getDataModel():qx.ui.progressive.model.Abstract;
+ getFlushWidgetQueueAfterBatch():boolean;
+ getInterElementTimeout():number;
+ getStructure():qx.ui.progressive.structure.Abstract;
+ protected initBatchSize(value:any):number;
+ protected initDataModel(value:any):qx.ui.progressive.model.Abstract;
+ protected initFlushWidgetQueueAfterBatch(value:any):boolean;
+ protected initInterElementTimeout(value:any):number;
+ isFlushWidgetQueueAfterBatch():boolean;
+ removeRenderer(name:string):void;
+ render():void;
+ resetBatchSize():void;
+ resetDataModel():void;
+ resetFlushWidgetQueueAfterBatch():void;
+ resetInterElementTimeout():void;
+ setBatchSize(value:any):number;
+ setDataModel(value:any):qx.ui.progressive.model.Abstract;
+ setFlushWidgetQueueAfterBatch(value:any):boolean;
+ setInterElementTimeout(value:any):number;
+ toggleFlushWidgetQueueAfterBatch():boolean;
+
+}
+}
+declare module qx.ui.progressive {
+class State extends qx.core.Object {
+ constructor (initialState?:IMap);
+ getBatchSize():any;
+ getModel():any;
+ getPane():any;
+ getProgressive():any;
+ getRendererData():any;
+ protected initBatchSize(value:any):any;
+ protected initModel(value:any):any;
+ protected initPane(value:any):any;
+ protected initProgressive(value:any):any;
+ protected initRendererData(value:any):any;
+ protected initUserData(value:any):any;
+ resetBatchSize():void;
+ resetModel():void;
+ resetPane():void;
+ resetProgressive():void;
+ resetRendererData():void;
+ resetUserData():void;
+ setBatchSize(value:any):any;
+ setModel(value:any):any;
+ setPane(value:any):any;
+ setProgressive(value:any):any;
+ setRendererData(value:any):any;
+
+}
+}
+declare module qx.ui.progressive.headfoot {
+class Abstract extends qx.ui.container.Composite {
+ constructor ();
+ join(progressive:qx.ui.progressive.Progressive):void;
+
+}
+}
+declare module qx.ui.progressive.headfoot {
+class Null extends qx.ui.progressive.headfoot.Abstract {
+ constructor ();
+
+}
+}
+declare module qx.ui.progressive.headfoot {
+class Progress extends qx.ui.progressive.headfoot.Abstract {
+ constructor (columnWidths?:qx.ui.progressive.renderer.table.Widths,labelArr?:qx.data.Array);
+
+}
+}
+declare module qx.ui.progressive.headfoot {
+class TableHeading extends qx.ui.progressive.headfoot.Abstract {
+ constructor (columnWidths?:qx.ui.progressive.renderer.table.Widths,labelArr?:qx.data.Array);
+ protected _resizeColumns(e:qx.event.type.Event):void;
+
+}
+}
+declare module qx.ui.progressive.model {
+class Abstract extends qx.core.Object {
+ getElementCount():number;
+ getNextElement():any;
+
+}
+}
+declare module qx.ui.progressive.model {
+class Default extends qx.ui.progressive.model.Abstract {
+ constructor ();
+ addElement(elem:any):void;
+ addElements(elems:qx.data.Array):void;
+
+}
+}
+declare module qx.ui.progressive.renderer {
+class Abstract extends qx.core.Object {
+ join(progressive:qx.ui.progressive.Progressive,name:string):void;
+ render(state:qx.ui.progressive.State,element:any):void;
+
+}
+}
+declare module qx.ui.progressive.renderer {
+class FunctionCaller extends qx.ui.progressive.renderer.Abstract {
+
+}
+}
+declare module qx.ui.progressive.renderer.table {
+class Row extends qx.ui.progressive.renderer.Abstract {
+ constructor (columnWidths?:qx.ui.progressive.renderer.table.Widths);
+ protected _resizeColumns(e:qx.event.type.Event):void;
+ addRenderer(column:number,renderer:qx.ui.progressive.renderer.table.cell.Abstract):void;
+ getDefaultRowHeight():any;
+ getLayoutChildren():qx.data.Array;
+ protected initDefaultRowHeight(value:any):any;
+ removeRenderer(column:number):void;
+ resetDefaultRowHeight():void;
+ setDefaultRowHeight(value:any):any;
+
+}
+}
+declare module qx.ui.progressive.renderer.table {
+class Widths extends qx.core.Object {
+ constructor (numColumns?:number);
+ getData():qx.data.Array;
+ set(column:number|any,map:IMap):void;
+ setMaxWidth(column:number,width:number):void;
+ setMinWidth(column:number,width:number):void;
+ setWidth(column:number,width:number):void;
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Abstract extends qx.core.Object {
+ protected _getCellExtras(cellInfo:any):string;
+ protected _getCellStyle(cellInfo:any):string;
+ protected _getContentHtml(cellInfo:any):string;
+ render(cellInfo:any):string;
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Boolean extends qx.ui.progressive.renderer.table.cell.Icon {
+ constructor ();
+ getAllowToggle():boolean;
+ protected initAllowToggle(value:any):boolean;
+ isAllowToggle():boolean;
+ resetAllowToggle():void;
+ setAllowToggle(value:any):boolean;
+ toggleAllowToggle():boolean;
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Conditional extends qx.ui.progressive.renderer.table.cell.Abstract {
+ constructor (align?:string,color?:string,style?:string,weight?:string);
+ addBetweenCondition(condition:string,value1:number,value2:number,align:string,color:string,style:string,weight:string,target:string):void;
+ addNumericCondition(condition:string,value1:number,align:string,color:string,style:string,weight:string,target:string):void;
+ addRegex(regex:string,align:string,color:string,style:string,weight:string,target:string):void;
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Default extends qx.ui.progressive.renderer.table.cell.Abstract {
+ constructor ();
+ protected _formatValue(value:any):string;
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Html extends qx.ui.progressive.renderer.table.cell.Abstract {
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Icon extends qx.ui.progressive.renderer.table.cell.Abstract {
+ constructor ();
+ protected _identifyImage(cellInfo:IMap):IMap;
+ getBlankImage():string;
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class Image extends qx.ui.progressive.renderer.table.cell.Icon {
+ constructor (width?:number,height?:number);
+
+}
+}
+declare module qx.ui.progressive.renderer.table.cell {
+class String extends qx.ui.progressive.renderer.table.cell.Abstract {
+ constructor ();
+
+}
+}
+declare module qx.ui.progressive.structure {
+class Abstract extends qx.core.Object {
+ constructor (pane?:qx.ui.core.Widget);
+ applyStructure(progressive:qx.ui.progressive.Progressive):void;
+ getPane():qx.ui.core.Widget;
+
+}
+}
+declare module qx.ui.progressive.structure {
+class Default extends qx.ui.progressive.structure.Abstract {
+ constructor (header?:qx.ui.progressive.headfoot.Abstract,footer?:qx.ui.progressive.headfoot.Abstract,pane?:qx.ui.core.Widget);
+ getFooter():qx.ui.progressive.headfoot.Abstract;
+ getHeader():qx.ui.progressive.headfoot.Abstract;
+
+}
+}
+declare module qx.ui.root {
+class Abstract extends qx.ui.core.Widget {
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ block():void;
+ blockContent(zIndex:number):void;
+ forceUnblock():void;
+ getBlocker():qx.ui.core.Blocker;
+ getBlockerColor():string;
+ getBlockerOpacity():number;
+ isBlocked():boolean;
+ resetBlockerColor():void;
+ resetBlockerOpacity():void;
+ setBlockerColor(value:any):string;
+ setBlockerOpacity(value:any):number;
+ unblock():void;
+ getActiveWindow():qx.ui.window.Window;
+ getWindowManager():qx.ui.window.IWindowManager;
+ getWindows():qx.ui.window.Window[];
+ resetActiveWindow():void;
+ setActiveWindow(value:any):qx.ui.window.Window;
+ setWindowManager(manager:qx.ui.window.IWindowManager):void;
+ supportsMaximize():boolean;
+ constructor ();
+ protected _applyNativeHelp(value:boolean,old:boolean):void;
+ protected _onNativeContextMenu(e:qx.event.type.Mouse):void;
+ getGlobalCursor():string;
+ getLayout():qx.ui.layout.Abstract;
+ getNativeHelp():boolean;
+ protected initGlobalCursor(value:any):string;
+ protected initNativeHelp(value:any):boolean;
+ isNativeHelp():boolean;
+ resetGlobalCursor():void;
+ resetNativeHelp():void;
+ setGlobalCursor(value:any):string;
+ setNativeHelp(value:any):boolean;
+ toggleNativeHelp():boolean;
+
+}
+}
+declare module qx.ui.root {
+class Application extends qx.ui.root.Abstract {
+ constructor (doc?:Document);
+ protected _onResize(e:qx.event.type.Event):void;
+
+}
+}
+declare module qx.ui.root {
+class Inline extends qx.ui.root.Abstract {
+ static remap(members:IMap):void;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+ constructor (el?:HTMLElement,dynamicX?:boolean,dynamicY?:boolean);
+ protected _onResize(e:qx.event.type.Event):void;
+ protected _onWindowResize():void;
+
+}
+}
+declare module qx.ui.root {
+class Page extends qx.ui.root.Abstract {
+ constructor (doc?:Document);
+ supportsMaximize():boolean;
+
+}
+}
+declare module qx.ui.splitpane {
+class Blocker extends qx.html.Element {
+ constructor (orientation?:string);
+ protected _applyOrientation(value:any,old:any):void;
+ getOrientation():any;
+ protected initOrientation(value:any):any;
+ resetOrientation():void;
+ setHeight(offset:number,spliterSize:number):void;
+ setLeft(offset:number,splitterLeft:number):void;
+ setOrientation(value:any):any;
+ setTop(offset:number,splitterTop:number):void;
+ setWidth(offset:number,spliterSize:number):void;
+
+}
+}
+declare module qx.ui.splitpane {
+class HLayout extends qx.ui.layout.Abstract {
+
+}
+}
+declare module qx.ui.splitpane {
+class Pane extends qx.ui.core.Widget {
+ constructor (orientation?:string);
+ protected _applyOffset(value:number,old:number):void;
+ protected _applyOrientation(value:string,old:string):void;
+ protected _finalizeSizes():void;
+ protected _isActiveDragSession():boolean;
+ protected _onPointerDown(e:qx.event.type.Pointer):void;
+ protected _onPointerMove(e:qx.event.type.Pointer):void;
+ protected _onPointerOut(e:qx.event.type.Pointer):void;
+ protected _onPointerUp(e:qx.event.type.Pointer):void;
+ protected _setLastPointerPosition(x:number,y:number):void;
+ add(widget:qx.ui.core.Widget,flex:number):void;
+ getBlocker():qx.ui.splitpane.Blocker;
+ getChildren():qx.ui.core.Widget[];
+ getOffset():number;
+ getOrientation():any;
+ protected initOffset(value:any):number;
+ protected initOrientation(value:any):any;
+ remove(widget:qx.ui.core.Widget):void;
+ resetOffset():void;
+ resetOrientation():void;
+ setOffset(value:any):number;
+ setOrientation(value:any):any;
+
+}
+}
+declare module qx.ui.splitpane {
+class Slider extends qx.ui.core.Widget {
+
+}
+}
+declare module qx.ui.splitpane {
+class Splitter extends qx.ui.core.Widget {
+ constructor (parentWidget?:qx.ui.splitpane.Pane);
+
+}
+}
+declare module qx.ui.splitpane {
+class VLayout extends qx.ui.layout.Abstract {
+
+}
+}
+declare module qx.ui.style {
+class Stylesheet extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.ui.style.Stylesheet;
+ addRule(selector:string,css:string):void;
+ hasRule(selector:string):boolean;
+ removeRule(selector:string):void;
+
+}
+}
+declare module qx.ui.table {
+interface ICellEditorFactory {
+ createCellEditor(cellInfo:IMap):qx.ui.core.Widget;
+ getCellEditorValue(cellEditor:qx.ui.core.Widget):any;
+
+}
+}
+declare module qx.ui.table {
+interface ICellRenderer {
+ createDataCellHtml(cellInfo:IMap,htmlArr:string[]):boolean;
+
+}
+}
+declare module qx.ui.table {
+interface IColumnMenuButton {
+ empty():void;
+ factory(item:string,options:IMap):qx.ui.core.Widget;
+ getMenu():any;
+ initMenu(value:any):any;
+ resetMenu():void;
+ setMenu(value:any):any;
+
+}
+}
+declare module qx.ui.table {
+interface IColumnMenuItem {
+ getVisible():any;
+ // initVisible(value:any):any;
+ resetVisible():void;
+ setVisible(value:any):any;
+
+}
+}
+declare module qx.ui.table {
+interface IHeaderRenderer {
+ createHeaderCell(cellInfo:IMap):qx.ui.core.Widget;
+ updateHeaderCell(cellInfo:IMap,cellWidget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.table {
+interface IRowRenderer {
+ createRowStyle(rowInfo:IMap):void;
+ getRowClass(rowInfo:IMap):void;
+ getRowHeightStyle(height:number):void;
+ updateDataRowElement(rowInfo:IMap,rowElement:HTMLElement):void;
+
+}
+}
+declare module qx.ui.table {
+interface ITableModel {
+ getColumnCount():number;
+ getColumnId(columnIndex:number):string;
+ getColumnIndexById(columnId:string):number;
+ getColumnName(columnIndex:number):string;
+ getRowCount():number;
+ getRowData(rowIndex:number):any;
+ getSortColumnIndex():number;
+ getValue(columnIndex:number,rowIndex:number):any;
+ getValueById(columnId:string,rowIndex:number):any;
+ isColumnEditable(columnIndex:number):boolean;
+ isColumnSortable(columnIndex:number):boolean;
+ isSortAscending():boolean;
+ prefetchRows(firstRowIndex:number,lastRowIndex:number):void;
+ setValue(columnIndex:number,rowIndex:number,value:any):void;
+ setValueById(columnId:string,rowIndex:number,value:any):void;
+ sortByColumn(columnIndex:number,ascending:boolean):void;
+
+}
+}
+declare module qx.ui.table {
+class MTableContextMenu {
+ constructor ();
+ getContextMenuHandler(col:number):Function;
+ setContextMenuHandler(col:number,handler:Function,context?:any):void;
+
+}
+}
+declare module qx.ui.table {
+class Table extends qx.ui.core.Widget {
+ getDragScrollSlowDownFactor():number;
+ getDragScrollThresholdX():number;
+ getDragScrollThresholdY():number;
+ resetDragScrollSlowDownFactor():void;
+ resetDragScrollThresholdX():void;
+ resetDragScrollThresholdY():void;
+ setDragScrollSlowDownFactor(value:any):number;
+ setDragScrollThresholdX(value:any):number;
+ setDragScrollThresholdY(value:any):number;
+ constructor (tableModel?:qx.ui.table.ITableModel,custom?:IMap);
+ protected _applyAdditionalStatusBarText(value:any,old:any):void;
+ protected _applyColumnVisibilityButtonVisible(value:boolean,old:boolean):void;
+ protected _applyContextMenuFromDataCellsOnly(value:boolean,old:boolean):void;
+ protected _applyFocusCellOnPointerMove(value:boolean,old:boolean):void;
+ protected _applyHeaderCellHeight(value:number,old:number):void;
+ protected _applyHeaderCellsVisible(value:boolean,old:boolean):void;
+ protected _applyKeepFirstVisibleRowComplete(value:boolean,old:boolean):void;
+ protected _applyMetaColumnCounts(value:any,old:any):void;
+ protected _applyResetSelectionOnHeaderTap(value:boolean,old:boolean):void;
+ protected _applyRowHeight(value:number,old:number):void;
+ protected _applySelectionModel(value:qx.ui.table.selection.Model,old:qx.ui.table.selection.Model):void;
+ protected _applyShowCellFocusIndicator(value:boolean,old:boolean):void;
+ protected _applyStatusBarVisible(value:boolean,old:boolean):void;
+ protected _applyTableModel(value:qx.ui.table.ITableModel,old:qx.ui.table.ITableModel):void;
+ protected _cleanUpMetaColumns(fromMetaColumn:number):void;
+ protected _createColumnVisibilityCheckBoxHandler(col:number):Function;
+ protected _getMetaColumnAtColumnX(visXPos:number):number;
+ protected _getMetaColumnAtPageX(pageX:number):number;
+ protected _getPaneScrollerArr():qx.ui.table.pane.Scroller[];
+ protected _initColumnMenu():void;
+ protected _onChangeLocale(evt:qx.event.type.Event):void;
+ protected _onColOrderChanged(evt:IMap):void;
+ protected _onColVisibilityChanged(evt:IMap):void;
+ protected _onColWidthChanged(evt:IMap):void;
+ protected _onFocusChanged(evt:IMap):void;
+ protected _onKeyPress(evt:qx.event.type.KeySequence):void;
+ protected _onResize():void;
+ protected _onScrollY(evt:IMap):void;
+ protected _onSelectionChanged(evt:IMap):void;
+ protected _onTableModelDataChanged(evt:IMap):void;
+ protected _onTableModelMetaDataChanged(evt:IMap):void;
+ protected _updateScrollBarVisibility():void;
+ protected _updateScrollerWidths():void;
+ protected _updateStatusBar():void;
+ protected _updateTableData(firstRow:number,lastRow:number,firstColumn:number,lastColumn:number,removeStart?:number,removeCount?:number):void;
+ blockHeaderElements():void;
+ cancelEditing():void;
+ clearFocusedRowHighlight(evt:qx.event.type.Pointer):void;
+ getAdditionalStatusBarText():any;
+ getAlwaysUpdateCells():boolean;
+ getColumnVisibilityButtonVisible():boolean;
+ getContextMenuFromDataCellsOnly():boolean;
+ getDataRowRenderer():qx.ui.table.IRowRenderer;
+ getEmptyTableModel():qx.ui.table.ITableModel;
+ getFocusCellOnPointerMove():boolean;
+ getFocusedColumn():number;
+ getFocusedRow():number;
+ getForceLineHeight():boolean;
+ getHeaderCellHeight():number;
+ getHeaderCellsVisible():boolean;
+ getInitiallyHiddenColumns():any;
+ getKeepFirstVisibleRowComplete():boolean;
+ getMetaColumnCounts():any;
+ getModalCellEditorPreOpenFunction():Function;
+ getNewColumnMenu():Function;
+ getNewSelectionManager():Function;
+ getNewSelectionModel():Function;
+ getNewTableColumnModel():Function;
+ getNewTablePane():Function;
+ getNewTablePaneHeader():Function;
+ getNewTablePaneModel():Function;
+ getNewTablePaneScroller():Function;
+ getPaneScroller(metaColumn:number):qx.ui.table.pane.Scroller;
+ getResetSelectionOnHeaderTap():boolean;
+ getRowFocusChangeModifiesSelection():boolean;
+ getRowHeight():number;
+ getSelectionManager():qx.ui.table.selection.Manager;
+ getSelectionModel():qx.ui.table.selection.Model;
+ getShowCellFocusIndicator():boolean;
+ getStatusBarVisible():boolean;
+ getTableColumnModel():qx.ui.table.columnmodel.Basic;
+ getTableModel():qx.ui.table.ITableModel;
+ getTablePaneScrollerAtPageX(pageX:number):qx.ui.table.pane.Scroller;
+ highlightFocusedRow(bHighlight:boolean):void;
+ protected initAdditionalStatusBarText(value:any):any;
+ protected initAlwaysUpdateCells(value:any):boolean;
+ protected initColumnVisibilityButtonVisible(value:any):boolean;
+ protected initContextMenuFromDataCellsOnly(value:any):boolean;
+ protected initDataRowRenderer(value:any):qx.ui.table.IRowRenderer;
+ protected initFocusCellOnPointerMove(value:any):boolean;
+ protected initForceLineHeight(value:any):boolean;
+ protected initHeaderCellHeight(value:any):number;
+ protected initHeaderCellsVisible(value:any):boolean;
+ protected initInitiallyHiddenColumns(value:any):any;
+ protected initKeepFirstVisibleRowComplete(value:any):boolean;
+ protected initMetaColumnCounts(value:any):any;
+ protected initModalCellEditorPreOpenFunction(value:any):Function;
+ protected initNewColumnMenu(value:any):Function;
+ protected initNewSelectionManager(value:any):Function;
+ protected initNewSelectionModel(value:any):Function;
+ protected initNewTableColumnModel(value:any):Function;
+ protected initNewTablePane(value:any):Function;
+ protected initNewTablePaneHeader(value:any):Function;
+ protected initNewTablePaneModel(value:any):Function;
+ protected initNewTablePaneScroller(value:any):Function;
+ protected initResetSelectionOnHeaderTap(value:any):boolean;
+ protected initRowFocusChangeModifiesSelection(value:any):boolean;
+ protected initRowHeight(value:any):number;
+ protected initSelectionModel(value:any):qx.ui.table.selection.Model;
+ protected initShowCellFocusIndicator(value:any):boolean;
+ protected initStatusBarVisible(value:any):boolean;
+ protected initTableModel(value:any):qx.ui.table.ITableModel;
+ isAlwaysUpdateCells():boolean;
+ isColumnVisibilityButtonVisible():boolean;
+ isContextMenuFromDataCellsOnly():boolean;
+ isEditing():any;
+ isFocusCellOnPointerMove():boolean;
+ isForceLineHeight():boolean;
+ isHeaderCellsVisible():boolean;
+ isKeepFirstVisibleRowComplete():boolean;
+ isResetSelectionOnHeaderTap():boolean;
+ isRowFocusChangeModifiesSelection():boolean;
+ isShowCellFocusIndicator():boolean;
+ isStatusBarVisible():boolean;
+ moveFocusedCell(deltaX:number,deltaY:number):void;
+ resetAdditionalStatusBarText():void;
+ resetAlwaysUpdateCells():void;
+ resetCellFocus():void;
+ resetColumnVisibilityButtonVisible():void;
+ resetContextMenuFromDataCellsOnly():void;
+ resetDataRowRenderer():void;
+ resetFocusCellOnPointerMove():void;
+ resetForceLineHeight():void;
+ resetHeaderCellHeight():void;
+ resetHeaderCellsVisible():void;
+ resetInitiallyHiddenColumns():void;
+ resetKeepFirstVisibleRowComplete():void;
+ resetMetaColumnCounts():void;
+ resetModalCellEditorPreOpenFunction():void;
+ resetNewColumnMenu():void;
+ resetNewSelectionManager():void;
+ resetNewSelectionModel():void;
+ resetNewTableColumnModel():void;
+ resetNewTablePane():void;
+ resetNewTablePaneHeader():void;
+ resetNewTablePaneModel():void;
+ resetNewTablePaneScroller():void;
+ resetResetSelectionOnHeaderTap():void;
+ resetRowFocusChangeModifiesSelection():void;
+ resetRowHeight():void;
+ resetSelection():void;
+ resetSelectionModel():void;
+ resetShowCellFocusIndicator():void;
+ resetStatusBarVisible():void;
+ resetTableModel():void;
+ scrollCellVisible(col:number,row:number):void;
+ setAdditionalStatusBarText(value:any):any;
+ setAlwaysUpdateCells(value:any):boolean;
+ setColumnVisibilityButtonVisible(value:any):boolean;
+ setColumnWidth(col:number,width:number):void;
+ setContextMenuFromDataCellsOnly(value:any):boolean;
+ setDataRowRenderer(value:any):qx.ui.table.IRowRenderer;
+ setFocusCellOnPointerMove(value:any):boolean;
+ setFocusedCell(col?:number,row?:number,scrollVisible?:boolean):void;
+ setForceLineHeight(value:any):boolean;
+ setHeaderCellHeight(value:any):number;
+ setHeaderCellsVisible(value:any):boolean;
+ setInitiallyHiddenColumns(value:any):any;
+ setKeepFirstVisibleRowComplete(value:any):boolean;
+ setMetaColumnCounts(value:any):any;
+ setModalCellEditorPreOpenFunction(value:any):Function;
+ setNewColumnMenu(value:any):Function;
+ setNewSelectionManager(value:any):Function;
+ setNewSelectionModel(value:any):Function;
+ setNewTableColumnModel(value:any):Function;
+ setNewTablePane(value:any):Function;
+ setNewTablePaneHeader(value:any):Function;
+ setNewTablePaneModel(value:any):Function;
+ setNewTablePaneScroller(value:any):Function;
+ setResetSelectionOnHeaderTap(value:any):boolean;
+ setRowFocusChangeModifiesSelection(value:any):boolean;
+ setRowHeight(value:any):number;
+ setSelectionModel(value:any):qx.ui.table.selection.Model;
+ setShowCellFocusIndicator(value:any):boolean;
+ setStatusBarVisible(value:any):boolean;
+ setTableModel(value:any):qx.ui.table.ITableModel;
+ startEditing():boolean;
+ stopEditing():void;
+ toggleAlwaysUpdateCells():boolean;
+ toggleColumnVisibilityButtonVisible():boolean;
+ toggleContextMenuFromDataCellsOnly():boolean;
+ toggleFocusCellOnPointerMove():boolean;
+ toggleForceLineHeight():boolean;
+ toggleHeaderCellsVisible():boolean;
+ toggleKeepFirstVisibleRowComplete():boolean;
+ toggleResetSelectionOnHeaderTap():boolean;
+ toggleRowFocusChangeModifiesSelection():boolean;
+ toggleShowCellFocusIndicator():boolean;
+ toggleStatusBarVisible():boolean;
+ unblockHeaderElements():void;
+ updateContent():void;
+
+}
+}
+declare module qx.ui.table.celleditor {
+class AbstractField extends qx.core.Object implements qx.ui.table.ICellEditorFactory {
+ createCellEditor(cellInfo:IMap):qx.ui.core.Widget;
+ getCellEditorValue(cellEditor:qx.ui.core.Widget):any;
+ protected _createEditor():qx.ui.core.Widget;
+ getValidationFunction():Function;
+ protected initValidationFunction(value:any):Function;
+ resetValidationFunction():void;
+ setValidationFunction(value:any):Function;
+
+}
+}
+declare module qx.ui.table.celleditor {
+class CheckBox extends qx.core.Object implements qx.ui.table.ICellEditorFactory {
+ createCellEditor(cellInfo:IMap):qx.ui.core.Widget;
+ getCellEditorValue(cellEditor:qx.ui.core.Widget):any;
+
+}
+}
+declare module qx.ui.table.celleditor {
+class ComboBox extends qx.core.Object implements qx.ui.table.ICellEditorFactory {
+ createCellEditor(cellInfo:IMap):qx.ui.core.Widget;
+ getCellEditorValue(cellEditor:qx.ui.core.Widget):any;
+ getListData():qx.data.Array;
+ getValidationFunction():Function;
+ protected initListData(value:any):qx.data.Array;
+ protected initValidationFunction(value:any):Function;
+ resetListData():void;
+ resetValidationFunction():void;
+ setListData(value:any):qx.data.Array;
+ setValidationFunction(value:any):Function;
+
+}
+}
+declare module qx.ui.table.celleditor {
+class Dynamic extends qx.core.Object implements qx.ui.table.ICellEditorFactory {
+ createCellEditor(cellInfo:IMap):qx.ui.core.Widget;
+ getCellEditorValue(cellEditor:qx.ui.core.Widget):any;
+ constructor (cellEditorFactoryFunction?:Function);
+ getCellEditorFactoryFunction():Function;
+ protected initCellEditorFactoryFunction(value:any):Function;
+ resetCellEditorFactoryFunction():void;
+ setCellEditorFactoryFunction(value:any):Function;
+
+}
+}
+declare module qx.ui.table.celleditor {
+class PasswordField extends qx.ui.table.celleditor.AbstractField {
+
+}
+}
+declare module qx.ui.table.celleditor {
+class SelectBox extends qx.core.Object implements qx.ui.table.ICellEditorFactory {
+ createCellEditor(cellInfo:IMap):qx.ui.core.Widget;
+ getCellEditorValue(cellEditor:qx.ui.core.Widget):any;
+ getListData():qx.data.Array;
+ getValidationFunction():Function;
+ protected initListData(value:any):qx.data.Array;
+ protected initValidationFunction(value:any):Function;
+ resetListData():void;
+ resetValidationFunction():void;
+ setListData(value:any):qx.data.Array;
+ setValidationFunction(value:any):Function;
+
+}
+}
+declare module qx.ui.table.celleditor {
+class TextField extends qx.ui.table.celleditor.AbstractField {
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Abstract extends qx.core.Object implements qx.ui.table.ICellRenderer {
+ createDataCellHtml(cellInfo:IMap,htmlArr:string[]):boolean;
+ constructor ();
+ protected _createStyleSheet():void;
+ protected _getCellAttributes(cellInfo:IMap):string;
+ protected _getCellClass(cellInfo:IMap):string;
+ protected _getCellSizeStyle(width:number,height:number,insetX:number,insetY:number):string;
+ protected _getCellStyle(cellInfo:IMap):any;
+ protected _getContentHtml(cellInfo:IMap):string;
+ protected _onChangeTheme():void;
+ getDefaultCellStyle():string;
+ protected initDefaultCellStyle(value:any):string;
+ resetDefaultCellStyle():void;
+ setDefaultCellStyle(value:any):string;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class AbstractImage extends qx.ui.table.cellrenderer.Abstract {
+ constructor ();
+ protected _getImageInfos(cellInfo:IMap):IMap;
+ protected _identifyImage(cellInfo:IMap):IMap;
+ getRepeat():any;
+ protected initRepeat(value:any):any;
+ resetRepeat():void;
+ setRepeat(value:any):any;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Boolean extends qx.ui.table.cellrenderer.AbstractImage {
+ constructor ();
+ protected _applyIconFalse(value:string,old:string):void;
+ protected _applyIconTrue(value:string,old:string):void;
+ getIconFalse():string;
+ getIconTrue():string;
+ protected initIconFalse(value:any):string;
+ protected initIconTrue(value:any):string;
+ resetIconFalse():void;
+ resetIconTrue():void;
+ setIconFalse(value:any):string;
+ setIconTrue(value:any):string;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Conditional extends qx.ui.table.cellrenderer.Default {
+ constructor (align?:string,color?:string,style?:string,weight?:string);
+ addBetweenCondition(condition:string,value1:number,value2:number,align:string,color:string,style:string,weight:string,target:string):void;
+ addNumericCondition(condition:string,value1:number,align:string,color:string,style:string,weight:string,target:string):void;
+ addRegex(regex:string,align:string,color:string,style:string,weight:string,target:string):void;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Date extends qx.ui.table.cellrenderer.Conditional {
+ getDateFormat():qx.util.format.DateFormat;
+ protected initDateFormat(value:any):qx.util.format.DateFormat;
+ resetDateFormat():void;
+ setDateFormat(value:any):qx.util.format.DateFormat;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Debug extends qx.ui.table.cellrenderer.Abstract {
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Default extends qx.ui.table.cellrenderer.Abstract {
+ protected _formatValue(cellInfo:IMap):string;
+ protected _getStyleFlags(cellInfo:IMap):number;
+ getUseAutoAlign():boolean;
+ protected initUseAutoAlign(value:any):boolean;
+ isUseAutoAlign():boolean;
+ resetUseAutoAlign():void;
+ setUseAutoAlign(value:any):boolean;
+ toggleUseAutoAlign():boolean;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Dynamic extends qx.ui.table.cellrenderer.Default {
+ constructor (cellRendererFactoryFunction?:Function);
+ getCellRendererFactoryFunction():Function;
+ protected initCellRendererFactoryFunction(value:any):Function;
+ resetCellRendererFactoryFunction():void;
+ setCellRendererFactoryFunction(value:any):Function;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Html extends qx.ui.table.cellrenderer.Conditional {
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Image extends qx.ui.table.cellrenderer.AbstractImage {
+ constructor (width?:number,height?:number);
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Number extends qx.ui.table.cellrenderer.Conditional {
+ getNumberFormat():qx.util.format.NumberFormat;
+ protected initNumberFormat(value:any):qx.util.format.NumberFormat;
+ resetNumberFormat():void;
+ setNumberFormat(value:any):qx.util.format.NumberFormat;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Password extends qx.ui.table.cellrenderer.Default {
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class Replace extends qx.ui.table.cellrenderer.Default {
+ addReversedReplaceMap():boolean;
+ getReplaceFunction():Function;
+ getReplaceMap():any;
+ protected initReplaceFunction(value:any):Function;
+ protected initReplaceMap(value:any):any;
+ resetReplaceFunction():void;
+ resetReplaceMap():void;
+ setReplaceFunction(value:any):Function;
+ setReplaceMap(value:any):any;
+
+}
+}
+declare module qx.ui.table.cellrenderer {
+class String extends qx.ui.table.cellrenderer.Conditional {
+
+}
+}
+declare module qx.ui.table.columnmenu {
+class Button extends qx.ui.form.MenuButton implements qx.ui.table.IColumnMenuButton {
+ empty():void;
+ factory(item:string,options:IMap):qx.ui.core.Widget;
+ getMenu():any;
+ resetMenu():void;
+ setMenu(value:any):any;
+ constructor ();
+ getBlocker():qx.ui.core.Blocker;
+
+}
+}
+declare module qx.ui.table.columnmenu {
+class MenuItem extends qx.ui.menu.CheckBox implements qx.ui.table.IColumnMenuItem {
+ getVisible():any;
+ resetVisible():void;
+ setVisible(value:any):any;
+ constructor (text?:string);
+ protected _applyVisible(value:boolean,old:boolean):void;
+ toggleVisible():boolean;
+
+}
+}
+declare module qx.ui.table.columnmodel {
+class Basic extends qx.core.Object {
+ constructor ();
+ protected _getColToXPosMap():IMap;
+ getCellEditorFactory(col:number):qx.ui.table.ICellEditorFactory;
+ getColumnWidth(col:number):number;
+ getDataCellRenderer(col:number):qx.ui.table.ICellRenderer;
+ getHeaderCellRenderer(col:number):qx.ui.table.IHeaderRenderer;
+ getOverallColumnAtX(overXPos:number):number;
+ getOverallColumnCount():number;
+ getOverallX(col:number):number;
+ getVisibleColumnAtX(visXPos:number):number;
+ getVisibleColumnCount():number;
+ getVisibleColumns():qx.data.Array;
+ getVisibleX(col:number):number;
+ init(colCount:number,table:qx.ui.table.Table):void;
+ isColumnVisible(col:number):boolean;
+ moveColumn(fromOverXPos:number,toOverXPos:number):void;
+ setCellEditorFactory(col:number,factory:qx.ui.table.ICellEditorFactory):void;
+ setColumnsOrder(newPositions:number[]):void;
+ setColumnVisible(col:number,visible:boolean):void;
+ setColumnWidth(col:number,width:number,isPointerAction:boolean):void;
+ setDataCellRenderer(col:number,renderer:qx.ui.table.ICellRenderer):qx.ui.table.ICellRenderer;
+ setHeaderCellRenderer(col:number,renderer:qx.ui.table.IHeaderRenderer):void;
+
+}
+}
+declare module qx.ui.table.columnmodel {
+class Resize extends qx.ui.table.columnmodel.Basic {
+ marktr(messageId:string):string;
+ tr(messageId:string,...varargs:any[]):string;
+ trc(hint:string,messageId:string,...varargs:any[]):string;
+ trn(singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ trnc(hint:string,singularMessageId:string,pluralMessageId:string,count:number,...varargs:any[]):string;
+ constructor ();
+ protected _addResetColumnWidthButton(event:qx.event.type.Data):void;
+ protected _applyBehavior(value:qx.ui.table.columnmodel.resizebehavior.Abstract,old:qx.ui.table.columnmodel.resizebehavior.Abstract):void;
+ protected _onappear(event:qx.event.type.Event):void;
+ protected _oncolumnwidthchanged(event:qx.event.type.Data):void;
+ protected _onTableWidthChanged(event:qx.event.type.Event):void;
+ protected _onverticalscrollbarchanged(event:qx.event.type.Data):void;
+ protected _onvisibilitychanged(event:qx.event.type.Data):void;
+ getBehavior():qx.ui.table.columnmodel.resizebehavior.Abstract;
+ getTable():qx.ui.table.Table;
+ protected initBehavior(value:any):qx.ui.table.columnmodel.resizebehavior.Abstract;
+ resetBehavior():void;
+ setBehavior(value:any):qx.ui.table.columnmodel.resizebehavior.Abstract;
+
+}
+}
+declare module qx.ui.table.columnmodel.resizebehavior {
+class Abstract extends qx.core.Object {
+ protected _getAvailableWidth():number;
+ protected _setNumColumns(numColumns:number):void;
+ onAppear(event:any,forceRefresh?:boolean):void;
+ onColumnWidthChanged(event:any):void;
+ onTableWidthChanged(event:any):void;
+ onVerticalScrollBarChanged(event:any):void;
+ onVisibilityChanged(event:any):void;
+
+}
+}
+declare module qx.ui.table.columnmodel.resizebehavior {
+class Default extends qx.ui.table.columnmodel.resizebehavior.Abstract {
+ constructor ();
+ protected _computeColumnsFlexWidth():void;
+ protected _extendLastColumn(event:qx.event.type.Data):void;
+ protected _extendNextColumn(event:qx.event.type.Data):void;
+ protected _getResizeColumnData():qx.ui.core.ColumnData[];
+ getInitializeWidthsOnEveryAppear():boolean;
+ getLayoutChildren():qx.ui.core.ColumnData[];
+ getNewResizeBehaviorColumnData():Function;
+ getTableColumnModel():qx.ui.table.columnmodel.Resize;
+ protected initInitializeWidthsOnEveryAppear(value:any):boolean;
+ protected initNewResizeBehaviorColumnData(value:any):Function;
+ protected initTableColumnModel(value:any):qx.ui.table.columnmodel.Resize;
+ isInitializeWidthsOnEveryAppear():boolean;
+ resetInitializeWidthsOnEveryAppear():void;
+ resetNewResizeBehaviorColumnData():void;
+ resetTableColumnModel():void;
+ set(col:number|any,map:IMap):void;
+ setInitializeWidthsOnEveryAppear(value:any):boolean;
+ setMaxWidth(col:number,width:number):void;
+ setMinWidth(col:number,width:number):void;
+ setNewResizeBehaviorColumnData(value:any):Function;
+ setTableColumnModel(value:any):qx.ui.table.columnmodel.Resize;
+ setWidth(col:number,width:number,flex?:number):void;
+ toggleInitializeWidthsOnEveryAppear():boolean;
+
+}
+}
+declare module qx.ui.table.headerrenderer {
+class Default extends qx.core.Object implements qx.ui.table.IHeaderRenderer {
+ createHeaderCell(cellInfo:IMap):qx.ui.core.Widget;
+ updateHeaderCell(cellInfo:IMap,cellWidget:qx.ui.core.Widget):void;
+ getToolTip():string;
+ protected initToolTip(value:any):string;
+ resetToolTip():void;
+ setToolTip(value:any):string;
+
+}
+}
+declare module qx.ui.table.headerrenderer {
+class HeaderCell extends qx.ui.container.Composite {
+ constructor ();
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applySortIcon(value:string,old:string):void;
+ getIcon():string;
+ getLabel():string;
+ getSortIcon():string;
+ protected initIcon(value:any):string;
+ protected initLabel(value:any):string;
+ protected initSortIcon(value:any):string;
+ resetIcon():void;
+ resetLabel():void;
+ resetSortIcon():void;
+ setIcon(value:any):string;
+ setLabel(value:any):string;
+ setSortIcon(value:any):string;
+
+}
+}
+declare module qx.ui.table.headerrenderer {
+class Icon extends qx.ui.table.headerrenderer.Default {
+ constructor (iconUrl?:string,tooltip?:string);
+ getIconUrl():string;
+ protected initIconUrl(value:any):string;
+ resetIconUrl():void;
+ setIconUrl(value:any):string;
+
+}
+}
+declare module qx.ui.table.model {
+class Abstract extends qx.core.Object implements qx.ui.table.ITableModel {
+ getColumnCount():number;
+ getColumnId(columnIndex:number):string;
+ getColumnIndexById(columnId:string):number;
+ getColumnName(columnIndex:number):string;
+ getRowCount():number;
+ getRowData(rowIndex:number):any;
+ getSortColumnIndex():number;
+ getValue(columnIndex:number,rowIndex:number):any;
+ getValueById(columnId:string,rowIndex:number):any;
+ isColumnEditable(columnIndex:number):boolean;
+ isColumnSortable(columnIndex:number):boolean;
+ isSortAscending():boolean;
+ prefetchRows(firstRowIndex:number,lastRowIndex:number):void;
+ setValue(columnIndex:number,rowIndex:number,value:any):void;
+ setValueById(columnId:string,rowIndex:number,value:any):void;
+ sortByColumn(columnIndex:number,ascending:boolean):void;
+ constructor ();
+ init(table:qx.ui.table.Table):void;
+ setColumnIds(columnIdArr:string[]):void;
+ setColumnNamesById(columnNameMap:IMap):void;
+ setColumnNamesByIndex(columnNameArr:string[]):void;
+ setColumns(columnNameArr:string[],columnIdArr?:string[]):void;
+
+}
+}
+declare module qx.ui.table.model {
+class Filtered extends qx.ui.table.model.Simple {
+ constructor ();
+ protected _js_in_array(the_needle:string,the_haystack:qx.data.Array):boolean;
+ addBetweenFilter(filter:string,value1:number,value2:number,target:string):void;
+ addNotRegex(regex:string,target:string,ignorecase:boolean):void;
+ addNumericFilter(filter:string,value1:number,target:string):void;
+ addRegex(regex:string,target:string,ignorecase:boolean):void;
+ applyFilters():void;
+ hideRows(rowNum:number,numOfRows:number,dispatchEvent?:boolean):void;
+ resetHiddenRows():void;
+
+}
+}
+declare module qx.ui.table.model {
+class Remote extends qx.ui.table.model.Abstract {
+ constructor ();
+ protected _cancelCurrentRequest():boolean;
+ protected _getIgnoreCurrentRequest():boolean;
+ protected _loadRowCount():void;
+ protected _loadRowData(firstRow:number,lastRow:number):void;
+ protected _onRowCountLoaded(rowCount:number):void;
+ protected _onRowDataLoaded(rowDataArr:IMap[]):void;
+ protected _setRowBlockData(block:number,rowDataArr:any[]):void;
+ clearCache():void;
+ getBlockConcurrentLoadRowCount():boolean;
+ getBlockSize():number;
+ getCacheContent():IMap;
+ getClearCacheOnRemove():boolean;
+ getMaxCachedBlockCount():number;
+ protected initBlockConcurrentLoadRowCount(value:any):boolean;
+ protected initBlockSize(value:any):number;
+ protected initClearCacheOnRemove(value:any):boolean;
+ protected initMaxCachedBlockCount(value:any):number;
+ isBlockConcurrentLoadRowCount():boolean;
+ isClearCacheOnRemove():boolean;
+ iterateCachedRows(iterator:Function,object:any):void;
+ reloadData():void;
+ removeRow(rowIndex:number):void;
+ resetBlockConcurrentLoadRowCount():void;
+ resetBlockSize():void;
+ resetClearCacheOnRemove():void;
+ resetMaxCachedBlockCount():void;
+ restoreCacheContent(cacheContent:IMap):void;
+ setBlockConcurrentLoadRowCount(value:any):boolean;
+ setBlockSize(value:any):number;
+ setClearCacheOnRemove(value:any):boolean;
+ setColumnEditable(columnIndex:number,editable:boolean):void;
+ setColumnSortable(columnIndex:number,sortable:boolean):void;
+ setEditable(editable:boolean):void;
+ setMaxCachedBlockCount(value:any):number;
+ setSortAscendingWithoutSortingData(sortAscending:boolean):void;
+ setSortColumnIndexWithoutSortingData(sortColumnIndex:number):void;
+ toggleBlockConcurrentLoadRowCount():boolean;
+ toggleClearCacheOnRemove():boolean;
+
+}
+}
+declare module qx.ui.table.model {
+class Simple extends qx.ui.table.model.Abstract {
+ constructor ();
+ protected static _defaultSortComparatorAscending(row1:any,row2:any):number;
+ protected static _defaultSortComparatorDescending(row1:any,row2:any):number;
+ protected static _defaultSortComparatorInsensitiveAscending(row1:any,row2:any):number;
+ protected static _defaultSortComparatorInsensitiveDescending(row1:any,row2:any):number;
+ protected _mapArray2RowArr(mapArr:IMap[],rememberMaps?:boolean):any[];
+ protected _setSortAscending(ascending:boolean):void;
+ protected _setSortColumnIndex(columnIndex:number):void;
+ addRows(rowArr:any[],startIndex?:number,clearSorting?:boolean):void;
+ addRowsAsMapArray(mapArr:IMap[],startIndex?:number,rememberMaps?:boolean,clearSorting?:boolean):void;
+ clearSorting():void;
+ getCaseSensitiveSorting():boolean;
+ getData():any[];
+ getDataAsMapArray():IMap[];
+ getRowDataAsMap(rowIndex:number):IMap;
+ getSortMethods(columnIndex:number):IMap;
+ protected initCaseSensitiveSorting(value:any):boolean;
+ isCaseSensitiveSorting():boolean;
+ removeRows(startIndex:number,howMany:number,clearSorting?:boolean):void;
+ resetCaseSensitiveSorting():void;
+ setCaseSensitiveSorting(value:any):boolean;
+ setColumnEditable(columnIndex:number,editable:boolean):void;
+ setColumnSortable(columnIndex:number,sortable:boolean):void;
+ setData(rowArr:any[],clearSorting?:boolean):void;
+ setDataAsMapArray(mapArr:IMap[],rememberMaps?:boolean,clearSorting?:boolean):void;
+ setEditable(editable:boolean):void;
+ setRows(rowArr:any[],startIndex?:number,clearSorting?:boolean):void;
+ setRowsAsMapArray(mapArr:IMap[],startIndex?:number,rememberMaps?:boolean,clearSorting?:boolean):void;
+ setSortMethods(columnIndex:number,compare:Function):void;
+ toggleCaseSensitiveSorting():boolean;
+
+}
+}
+declare module qx.ui.table.pane {
+class CellEvent extends qx.event.type.Pointer {
+ getColumn():number;
+ getRow():number;
+ protected initColumn(value:any):number;
+ protected initRow(value:any):number;
+ resetColumn():void;
+ resetRow():void;
+ setColumn(value:any):number;
+ setRow(value:any):number;
+
+}
+}
+declare module qx.ui.table.pane {
+class Clipper extends qx.ui.container.Composite {
+ constructor ();
+ scrollToX(value:number):void;
+ scrollToY(value:number):void;
+
+}
+}
+declare module qx.ui.table.pane {
+class FocusIndicator extends qx.ui.container.Composite {
+ constructor (scroller?:any);
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ getColumn():number;
+ getRow():number;
+ protected initColumn(value:any):number;
+ protected initRow(value:any):number;
+ moveToCell(col?:number,row?:number):void;
+ resetColumn():void;
+ resetRow():void;
+ setColumn(value:any):number;
+ setRow(value:any):number;
+
+}
+}
+declare module qx.ui.table.pane {
+class Header extends qx.ui.core.Widget {
+ constructor (paneScroller?:qx.ui.table.pane.Scroller);
+ protected _cleanUpCells():void;
+ protected _updateContent(completeUpdate:boolean):void;
+ getBlocker():qx.ui.core.Blocker;
+ getHeaderWidgetAtColumn(col:number):qx.ui.table.headerrenderer.HeaderCell;
+ getPaneScroller():qx.ui.table.pane.Scroller;
+ getTable():qx.ui.table.Table;
+ hideColumnMoveFeedback():void;
+ isShowingColumnMoveFeedback():boolean;
+ onColOrderChanged():void;
+ onPaneModelChanged():void;
+ onTableModelMetaDataChanged():void;
+ setColumnWidth(col:number,width:number,isPointerAction:boolean):void;
+ setPointerOverColumn(col:number):void;
+ showColumnMoveFeedback(col:number,x:number):void;
+
+}
+}
+declare module qx.ui.table.pane {
+class Model extends qx.core.Object {
+ constructor (tableColumnModel?:qx.ui.table.columnmodel.Basic);
+ protected _applyFirstColumnX(value:number,old:number):void;
+ protected _applyMaxColumnCount(value:number,old:number):void;
+ protected _onColVisibilityChanged(evt:IMap):void;
+ protected _onHeaderCellRendererChanged(evt:IMap):void;
+ getColumnAtX(xPos:number):number;
+ getColumnCount():number;
+ getColumnLeft(col:number):any;
+ getFirstColumnX():number;
+ getMaxColumnCount():number;
+ getTotalWidth():number;
+ getX(col:number):number;
+ protected initFirstColumnX(value:any):number;
+ protected initMaxColumnCount(value:any):number;
+ resetFirstColumnX():void;
+ resetMaxColumnCount():void;
+ setFirstColumnX(value:any):number;
+ setMaxColumnCount(value:any):number;
+ setTableColumnModel(tableColumnModel:qx.ui.table.columnmodel.Basic):void;
+
+}
+}
+declare module qx.ui.table.pane {
+class Pane extends qx.ui.core.Widget {
+ constructor (paneScroller?:qx.ui.table.pane.Scroller);
+ protected _applyFirstVisibleRow(value:number,old:number):void;
+ protected _applyMaxCacheLines(value:number,old:number):void;
+ protected _applyVisibleRowCount(value:number,old:number):void;
+ protected _getRowsHtml(firstRow:number,rowCount:number):string;
+ protected _scrollContent(rowOffset:number):void;
+ protected _updateAllRows():void;
+ protected _updateRowStyles(onlyRow?:number):void;
+ getFirstVisibleRow():number;
+ getMaxCacheLines():number;
+ getPaneScroller():qx.ui.table.pane.Scroller;
+ getTable():qx.ui.table.Table;
+ getVisibleRowCount():number;
+ protected initFirstVisibleRow(value:any):number;
+ protected initMaxCacheLines(value:any):number;
+ protected initVisibleRowCount(value:any):number;
+ onColOrderChanged():void;
+ onFocusChanged():void;
+ onPaneModelChanged():void;
+ onSelectionChanged():void;
+ onTableModelDataChanged(firstRow:number,lastRow:number,firstColumn:number,lastColumn:number):void;
+ onTableModelMetaDataChanged():void;
+ resetFirstVisibleRow():void;
+ resetMaxCacheLines():void;
+ resetVisibleRowCount():void;
+ setColumnWidth(col:number,width:number):void;
+ setFirstVisibleRow(value:any):number;
+ setFocusedCell(col?:number,row?:number,massUpdate?:boolean):void;
+ setMaxCacheLines(value:any):number;
+ setVisibleRowCount(value:any):number;
+ updateContent(completeUpdate?:boolean,scrollOffset?:number,onlyRow?:number,onlySelectionOrFocusChanged?:boolean):void;
+
+}
+}
+declare module qx.ui.table.pane {
+class Scroller extends qx.ui.core.Widget {
+ constructor (table?:qx.ui.table.Table);
+ protected _applyHorizontalScrollBarVisible(value:boolean,old:boolean):void;
+ protected _applyScrollTimeout(value:number,old:number):void;
+ protected _applyShowCellFocusIndicator(value:boolean,old:boolean):void;
+ protected _applyTablePaneModel(value:qx.ui.table.pane.Model,old:qx.ui.table.pane.Model):void;
+ protected _applyVerticalScrollBarVisible(value:boolean,old:boolean):void;
+ protected _createHeaderClipper():qx.ui.table.pane.Clipper;
+ protected _createPaneClipper():qx.ui.table.pane.Clipper;
+ protected _focusCellAtPagePos(pageX:number,pageY:number):void;
+ protected _getColumnForPageX(pageX:number):number;
+ protected _getResizeColumnForPageX(pageX:number):number;
+ protected _getRowForPagePos(pageX:number,pageY:number):number;
+ protected _hideResizeLine():void;
+ protected _onAppear():void;
+ protected _onCellEditorModalWindowClose(e:IMap):void;
+ protected _onChangeCaptureHeader(e:qx.event.type.Data):void;
+ protected _onContextMenu(e:qx.event.type.Pointer):void;
+ protected _onDbltapPane(e:IMap):void;
+ protected _onDisappear():void;
+ protected _oninterval():void;
+ protected _onPaneModelChanged():void;
+ protected _onPointerdownHeader(e:IMap):void;
+ protected _onPointerdownPane(e:IMap):void;
+ protected _onPointermoveHeader(e:IMap):void;
+ protected _onPointermovePane(e:IMap):void;
+ protected _onPointerout(e:IMap):void;
+ protected _onPointerupFocusIndicator(e:qx.event.type.Pointer):void;
+ protected _onPointerupHeader(e:IMap):void;
+ protected _onResizePane():void;
+ protected _onRoll(e:qx.event.type.Roll):void;
+ protected _onScrollX(e:IMap):void;
+ protected _onScrollY(e:IMap):void;
+ protected _onTapHeader(e:IMap):void;
+ protected _onTapPane(e:IMap):void;
+ protected _postponedUpdateContent():void;
+ protected _showResizeLine(x:number):void;
+ protected _startInterval(timeout:number):void;
+ protected _startMoveHeader(moveCol:number,pageX:number):void;
+ protected _startResizeHeader(resizeCol:number,pageX:number):void;
+ protected _stopInterval():void;
+ protected _stopMoveHeader():void;
+ protected _stopResizeHeader():void;
+ protected _updateContent():void;
+ protected _updateFocusIndicator():void;
+ cancelEditing():void;
+ flushEditor():void;
+ getContextMenuFromDataCellsOnly():boolean;
+ getFocusCellOnPointerMove():boolean;
+ getFocusedColumn():number;
+ getFocusedRow():number;
+ getHeader():qx.ui.table.pane.Header;
+ getHorizontalScrollBarVisible():boolean;
+ getLiveResize():boolean;
+ getNeededScrollBars(forceHorizontal?:boolean,preventVertical?:boolean):number;
+ getPaneClipper():qx.ui.table.pane.Clipper;
+ getPaneInsetRight():number;
+ getResetSelectionOnHeaderTap():boolean;
+ getScrollAreaContainer():qx.ui.table.pane.Clipper;
+ getScrollTimeout():number;
+ getScrollX():number;
+ getScrollY():number;
+ getSelectBeforeFocus():boolean;
+ getShowCellFocusIndicator():boolean;
+ getTable():qx.ui.table.Table;
+ getTablePane():qx.ui.table.pane.Pane;
+ getTablePaneModel():qx.ui.table.pane.Model;
+ getTopRightWidget():qx.ui.core.Widget;
+ getVerticalScrollBarVisible():boolean;
+ getVerticalScrollBarWidth():number;
+ hideColumnMoveFeedback():void;
+ protected initContextMenuFromDataCellsOnly(value:any):boolean;
+ protected initFocusCellOnPointerMove(value:any):boolean;
+ protected initHorizontalScrollBarVisible(value:any):boolean;
+ protected initLiveResize(value:any):boolean;
+ protected initResetSelectionOnHeaderTap(value:any):boolean;
+ protected initScrollTimeout(value:any):number;
+ protected initSelectBeforeFocus(value:any):boolean;
+ protected initShowCellFocusIndicator(value:any):boolean;
+ protected initTablePaneModel(value:any):qx.ui.table.pane.Model;
+ protected initVerticalScrollBarVisible(value:any):boolean;
+ isContextMenuFromDataCellsOnly():boolean;
+ isEditing():any;
+ isFocusCellOnPointerMove():boolean;
+ isHorizontalScrollBarVisible():boolean;
+ isLiveResize():boolean;
+ isResetSelectionOnHeaderTap():boolean;
+ isSelectBeforeFocus():boolean;
+ isShowCellFocusIndicator():boolean;
+ isVerticalScrollBarVisible():boolean;
+ onColOrderChanged():void;
+ onColVisibilityChanged():void;
+ onFocusChanged():void;
+ onKeepFirstVisibleRowCompleteChanged():void;
+ onSelectionChanged():void;
+ onTableModelDataChanged(firstRow:number,lastRow:number,firstColumn:number,lastColumn:number):void;
+ onTableModelMetaDataChanged():void;
+ resetContextMenuFromDataCellsOnly():void;
+ resetFocusCellOnPointerMove():void;
+ resetHorizontalScrollBarVisible():void;
+ resetLiveResize():void;
+ resetResetSelectionOnHeaderTap():void;
+ resetScrollTimeout():void;
+ resetSelectBeforeFocus():void;
+ resetShowCellFocusIndicator():void;
+ resetTablePaneModel():void;
+ resetVerticalScrollBarVisible():void;
+ scrollCellVisible(col:number,row:number):void;
+ setColumnWidth(col:number,width:number):void;
+ setContextMenuFromDataCellsOnly(value:any):boolean;
+ setFocusCellOnPointerMove(value:any):boolean;
+ setFocusedCell(col:number,row:number):void;
+ setHorizontalScrollBarVisible(value:any):boolean;
+ setLiveResize(value:any):boolean;
+ setPaneWidth(width:number):void;
+ setResetSelectionOnHeaderTap(value:any):boolean;
+ setScrollTimeout(value:any):number;
+ setScrollX(scrollX:number):void;
+ setScrollY(scrollY:number,renderSync?:boolean):void;
+ setSelectBeforeFocus(value:any):boolean;
+ setShowCellFocusIndicator(value:any):boolean;
+ setTablePaneModel(value:any):qx.ui.table.pane.Model;
+ setTopRightWidget(widget:qx.ui.core.Widget):void;
+ setVerticalScrollBarVisible(value:any):boolean;
+ showColumnMoveFeedback(pageX:number):number;
+ startEditing():boolean;
+ stopEditing():void;
+ toggleContextMenuFromDataCellsOnly():boolean;
+ toggleFocusCellOnPointerMove():boolean;
+ toggleHorizontalScrollBarVisible():boolean;
+ toggleLiveResize():boolean;
+ toggleResetSelectionOnHeaderTap():boolean;
+ toggleSelectBeforeFocus():boolean;
+ toggleShowCellFocusIndicator():boolean;
+ toggleVerticalScrollBarVisible():boolean;
+ updateHorScrollBarMaximum():void;
+ updateVerScrollBarMaximum():void;
+
+}
+}
+declare module qx.ui.table.rowrenderer {
+class Default extends qx.core.Object implements qx.ui.table.IRowRenderer {
+ createRowStyle(rowInfo:IMap):void;
+ getRowClass(rowInfo:IMap):void;
+ getRowHeightStyle(height:number):void;
+ updateDataRowElement(rowInfo:IMap,rowElement:HTMLElement):void;
+ constructor ();
+ protected _renderFont(font:qx.bom.Font):void;
+ getHighlightFocusRow():boolean;
+ getRowAttributes(rowInfo:any):string;
+ protected initHighlightFocusRow(value:any):boolean;
+ initThemeValues():void;
+ isHighlightFocusRow():boolean;
+ resetHighlightFocusRow():void;
+ setHighlightFocusRow(value:any):boolean;
+ toggleHighlightFocusRow():boolean;
+
+}
+}
+declare module qx.ui.table.selection {
+class Manager extends qx.core.Object {
+ constructor ();
+ protected _handleSelectEvent(index:number,evt:IMap):void;
+ getSelectionModel():qx.ui.table.selection.Model;
+ handleMoveKeyDown(index:number,evt:IMap):void;
+ handleSelectKeyDown(index:number,evt:IMap):void;
+ handleTap(index:number,evt:qx.event.type.Tap):void;
+ protected initSelectionModel(value:any):qx.ui.table.selection.Model;
+ resetSelectionModel():void;
+ setSelectionModel(value:any):qx.ui.table.selection.Model;
+
+}
+}
+declare module qx.ui.table.selection {
+class Model extends qx.core.Object {
+ constructor ();
+ protected _addSelectionInterval(fromIndex:number,toIndex:number):void;
+ protected _applySelectionMode(selectionMode:any,old:any):void;
+ protected _dumpRanges():void;
+ protected _fireChangeSelection():void;
+ protected _getSelectedRangeArr():IMap[];
+ protected _resetSelection():void;
+ protected _setAnchorSelectionIndex(index:number):void;
+ protected _setLeadSelectionIndex(index:number):void;
+ addSelectionInterval(fromIndex:number,toIndex:number):void;
+ getAnchorSelectionIndex():number;
+ getLeadSelectionIndex():number;
+ getSelectedCount():number;
+ getSelectedRanges():IMap[];
+ getSelectionMode():any;
+ hasBatchMode():boolean;
+ protected initSelectionMode(value:any):any;
+ isSelectedIndex(index:number):boolean;
+ isSelectionEmpty():boolean;
+ iterateSelection(iterator:Function,object?:any):void;
+ removeSelectionInterval(fromIndex:number,toIndex:number):void;
+ resetSelection():void;
+ resetSelectionMode():void;
+ setBatchMode(batchMode:boolean):boolean;
+ setSelectionInterval(fromIndex:number,toIndex:number):void;
+ setSelectionMode(value:any):any;
+
+}
+}
+declare module qx.ui.tabview {
+class Page extends qx.ui.container.Composite {
+ constructor (label?:string,icon?:string);
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applyShowCloseButton(value:boolean,old:boolean):void;
+ protected _onButtonClose():void;
+ getButton():qx.ui.form.RadioButton;
+ getIcon():string;
+ getLabel():string;
+ getShowCloseButton():boolean;
+ protected initIcon(value:any):string;
+ protected initLabel(value:any):string;
+ protected initShowCloseButton(value:any):boolean;
+ isShowCloseButton():boolean;
+ resetIcon():void;
+ resetLabel():void;
+ resetShowCloseButton():void;
+ setIcon(value:any):string;
+ setLabel(value:any):string;
+ setShowCloseButton(value:any):boolean;
+ toggleShowCloseButton():boolean;
+
+}
+}
+declare module qx.ui.tabview {
+class TabButton extends qx.ui.form.RadioButton implements qx.ui.form.IRadioItem {
+ getGroup():qx.ui.form.RadioGroup;
+ getValue():boolean;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ setValue(value:boolean):void;
+ constructor ();
+ protected _applyShowCloseButton(value:boolean,old:boolean):void;
+ protected _onCloseButtonTap():void;
+ getShowCloseButton():boolean;
+ protected initShowCloseButton(value:any):boolean;
+ isShowCloseButton():boolean;
+ resetShowCloseButton():void;
+ setShowCloseButton(value:any):boolean;
+ toggleShowCloseButton():boolean;
+
+}
+}
+declare module qx.ui.tabview {
+class TabView extends qx.ui.core.Widget implements qx.ui.core.ISingleSelection {
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetSelection():void;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ constructor (barPosition?:string);
+ protected _applyBarPosition(value:boolean,old:boolean):void;
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ protected _onBeforeChangeSelection(e:qx.event.type.Event):void;
+ protected _onChangeSelection(e:qx.event.type.Data):void;
+ protected _onPageClose(e:qx.event.type.Pointer):void;
+ protected _onRadioChangeSelection(e:qx.event.type.Data):void;
+ add(page:qx.ui.tabview.Page):void;
+ addAt(page:qx.ui.tabview.Page,index?:number):void;
+ getBarPosition():any;
+ getChildren():qx.ui.tabview.Page[];
+ indexOf(page:qx.ui.tabview.Page):number;
+ protected initBarPosition(value:any):any;
+ remove(page:qx.ui.tabview.Page):void;
+ resetBarPosition():void;
+ setBarPosition(value:any):any;
+
+}
+}
+declare module qx.ui.toolbar {
+class Button extends qx.ui.form.Button {
+ constructor (label?:any,icon?:any,command?:any);
+
+}
+}
+declare module qx.ui.toolbar {
+class CheckBox extends qx.ui.form.ToggleButton {
+ constructor (label?:any,icon?:any);
+
+}
+}
+declare module qx.ui.toolbar {
+class MenuButton extends qx.ui.menubar.Button {
+ protected _applyShowArrow(value:boolean,old:boolean):void;
+ getShowArrow():boolean;
+ protected initShowArrow(value:any):boolean;
+ isShowArrow():boolean;
+ resetShowArrow():void;
+ setShowArrow(value:any):boolean;
+ toggleShowArrow():boolean;
+
+}
+}
+declare module qx.ui.toolbar {
+class Part extends qx.ui.core.Widget {
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ constructor ();
+ protected _applySpacing(value:number,old:number):void;
+ addSeparator():void;
+ getMenuButtons():qx.data.Array;
+ getShow():any;
+ getSpacing():number;
+ protected initShow(value:any):any;
+ protected initSpacing(value:any):number;
+ resetShow():void;
+ resetSpacing():void;
+ setShow(value:any):any;
+ setSpacing(value:any):number;
+
+}
+}
+declare module qx.ui.toolbar {
+class PartContainer extends qx.ui.container.Composite {
+ constructor ();
+ getShow():any;
+ protected initShow(value:any):any;
+ resetShow():void;
+ setShow(value:any):any;
+
+}
+}
+declare module qx.ui.toolbar {
+class RadioButton extends qx.ui.toolbar.CheckBox implements qx.ui.form.IModel,qx.ui.form.IRadioItem {
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ getGroup():qx.ui.form.RadioGroup;
+ getValue():boolean;
+ setGroup(value:qx.ui.form.RadioGroup):void;
+ setValue(value:boolean):void;
+
+}
+}
+declare module qx.ui.toolbar {
+class Separator extends qx.ui.core.Widget {
+
+}
+}
+declare module qx.ui.toolbar {
+class SplitButton extends qx.ui.form.SplitButton {
+ constructor (label?:any,icon?:any,menu?:any,command?:any);
+
+}
+}
+declare module qx.ui.toolbar {
+class ToolBar extends qx.ui.core.Widget {
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ constructor ();
+ protected _applyOverflowHandling(value:boolean,old:boolean):void;
+ protected _applyOverflowIndicator(value:qx.ui.core.Widget,old:qx.ui.core.Widget):void;
+ protected _applyShow(value:any,old:any):void;
+ protected _applySpacing(value:number,old:number):void;
+ protected _getNextToHide():qx.ui.core.Widget;
+ _isAllowMenuOpenHover():boolean;
+ protected _onResize(e:qx.event.type.Data):void;
+ protected _recalculateOverflow(width?:number,requiredWidth?:number):void;
+ _setAllowMenuOpenHover(value:boolean):void;
+ addSeparator():void;
+ addSpacer():qx.ui.core.Spacer;
+ getMenuButtons():qx.data.Array;
+ getOpenMenu():qx.ui.menu.Menu;
+ getOverflowHandling():boolean;
+ getOverflowIndicator():qx.ui.core.Widget;
+ getShow():any;
+ getSpacing():number;
+ protected initOpenMenu(value:any):qx.ui.menu.Menu;
+ protected initOverflowHandling(value:any):boolean;
+ protected initOverflowIndicator(value:any):qx.ui.core.Widget;
+ protected initShow(value:any):any;
+ protected initSpacing(value:any):number;
+ isOverflowHandling():boolean;
+ resetOpenMenu():void;
+ resetOverflowHandling():void;
+ resetOverflowIndicator():void;
+ resetShow():void;
+ resetSpacing():void;
+ setOpenMenu(value:any):qx.ui.menu.Menu;
+ setOverflowHandling(value:any):boolean;
+ setOverflowIndicator(value:any):qx.ui.core.Widget;
+ setRemovePriority(item:qx.ui.core.Widget,priority:number,override:boolean):void;
+ setShow(value:any):any;
+ setSpacing(value:any):number;
+ toggleOverflowHandling():boolean;
+
+}
+}
+declare module qx.ui.tooltip {
+class Manager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.ui.tooltip.Manager;
+ protected _applyCurrent(value:qx.ui.tooltip.ToolTip,old:qx.ui.tooltip.ToolTip):void;
+ getCurrent():qx.ui.tooltip.ToolTip;
+ getSharedErrorTooltip():qx.ui.tooltip.ToolTip;
+ getSharedTooltip():qx.ui.tooltip.ToolTip;
+ getShowInvalidToolTips():boolean;
+ getShowToolTips():boolean;
+ protected initCurrent(value:any):qx.ui.tooltip.ToolTip;
+ protected initShowInvalidToolTips(value:any):boolean;
+ protected initShowToolTips(value:any):boolean;
+ isShowInvalidToolTips():boolean;
+ isShowToolTips():boolean;
+ resetCurrent():void;
+ resetShowInvalidToolTips():void;
+ resetShowToolTips():void;
+ setCurrent(value:any):qx.ui.tooltip.ToolTip;
+ setShowInvalidToolTips(value:any):boolean;
+ setShowToolTips(value:any):boolean;
+ showToolTip(target:any):void;
+ toggleShowInvalidToolTips():boolean;
+ toggleShowToolTips():boolean;
+
+}
+}
+declare module qx.ui.tooltip {
+class ToolTip extends qx.ui.popup.Popup {
+ constructor (label?:string,icon?:string);
+ protected _applyArrowPosition(value:any,old:any):void;
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applyRich(value:boolean,old:boolean):void;
+ protected _onPointerOver(e:qx.event.type.Pointer):void;
+ getArrowPosition():any;
+ getHideTimeout():number;
+ getIcon():string;
+ getLabel():string;
+ getOpener():qx.ui.core.Widget;
+ getRich():boolean;
+ getShowTimeout():number;
+ protected initArrowPosition(value:any):any;
+ protected initHideTimeout(value:any):number;
+ protected initIcon(value:any):string;
+ protected initLabel(value:any):string;
+ protected initOpener(value:any):qx.ui.core.Widget;
+ protected initRich(value:any):boolean;
+ protected initShowTimeout(value:any):number;
+ isRich():boolean;
+ resetArrowPosition():void;
+ resetHideTimeout():void;
+ resetIcon():void;
+ resetLabel():void;
+ resetOpener():void;
+ resetRich():void;
+ resetShowTimeout():void;
+ setArrowPosition(value:any):any;
+ setHideTimeout(value:any):number;
+ setIcon(value:any):string;
+ setLabel(value:any):string;
+ setOpener(value:any):qx.ui.core.Widget;
+ setRich(value:any):boolean;
+ setShowTimeout(value:any):number;
+ toggleRich():boolean;
+
+}
+}
+declare module qx.ui.tree {
+class Tree extends qx.ui.core.scroll.AbstractScrollArea implements qx.ui.core.IMultiSelection,qx.ui.form.IModelSelection,qx.ui.form.IForm {
+ addToSelection(item:qx.ui.core.Widget):void;
+ removeFromSelection(item:qx.ui.core.Widget):void;
+ selectAll():void;
+ getModelSelection():qx.data.Array;
+ setModelSelection(value:qx.data.Array):void;
+ getEnabled():boolean;
+ getInvalidMessage():string;
+ getRequired():boolean;
+ getRequiredInvalidMessage():string;
+ getValid():boolean;
+ setEnabled(enabled:boolean):void;
+ setInvalidMessage(message:string):void;
+ setRequired(required:boolean):void;
+ setRequiredInvalidMessage(message:string):void;
+ setValid(valid:boolean):void;
+ getDragSelection():boolean;
+ getQuickSelection():boolean;
+ getSelectables(all:boolean):qx.ui.core.Widget[];
+ getSelection():qx.ui.core.Widget[];
+ getSelectionContext():string;
+ getSelectionMode():any;
+ getSortedSelection():qx.ui.core.Widget[];
+ invertSelection():void;
+ isDragSelection():boolean;
+ isQuickSelection():boolean;
+ isSelected(item:qx.ui.core.Widget):boolean;
+ isSelectionEmpty():boolean;
+ resetDragSelection():void;
+ resetQuickSelection():void;
+ resetSelection():void;
+ resetSelectionMode():void;
+ selectRange(begin:qx.ui.core.Widget,end:qx.ui.core.Widget):void;
+ setDragSelection(value:any):boolean;
+ setQuickSelection(value:any):boolean;
+ setSelection(items:qx.ui.core.Widget[]):void;
+ setSelectionMode(value:any):any;
+ toggleDragSelection():boolean;
+ toggleQuickSelection():boolean;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ isRequired():boolean;
+ isValid():boolean;
+ resetInvalidMessage():void;
+ resetRequired():void;
+ resetRequiredInvalidMessage():void;
+ resetValid():void;
+ toggleRequired():boolean;
+ toggleValid():boolean;
+ constructor ();
+ protected _applyHideRoot(value:boolean,old:boolean):void;
+ protected _applyOpenMode(value:any,old:any):void;
+ protected _applyRoot(value:qx.ui.tree.core.AbstractTreeItem,old:qx.ui.tree.core.AbstractTreeItem):void;
+ protected _applyRootOpenClose(value:boolean,old:boolean):void;
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ protected _onChangeSelection(e:qx.event.type.Data):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onOpen(e:qx.event.type.Pointer):void;
+ getChildren():qx.ui.tree.core.AbstractTreeItem[];
+ getHideRoot():boolean;
+ getItems(recursive?:boolean,invisible?:boolean):qx.ui.tree.core.AbstractTreeItem[];
+ getNextNodeOf(treeItem:qx.ui.tree.core.AbstractTreeItem,invisible?:boolean):qx.ui.tree.core.AbstractTreeItem;
+ getNextSiblingOf(treeItem:qx.ui.tree.core.AbstractTreeItem):qx.ui.tree.core.AbstractTreeItem;
+ getOpenMode():any;
+ getPreviousNodeOf(treeItem:qx.ui.tree.core.AbstractTreeItem,invisible?:boolean):qx.ui.tree.core.AbstractTreeItem;
+ getPreviousSiblingOf(treeItem:qx.ui.tree.core.AbstractTreeItem):qx.ui.tree.core.AbstractTreeItem;
+ getRoot():qx.ui.tree.core.AbstractTreeItem;
+ getRootOpenClose():boolean;
+ getTreeItem(widget:qx.ui.core.Widget):qx.ui.tree.core.AbstractTreeItem;
+ protected initHideRoot(value:any):boolean;
+ protected initOpenMode(value:any):any;
+ protected initRoot(value:any):qx.ui.tree.core.AbstractTreeItem;
+ protected initRootOpenClose(value:any):boolean;
+ isHideRoot():boolean;
+ isRootOpenClose():boolean;
+ resetHideRoot():void;
+ resetOpenMode():void;
+ resetRoot():void;
+ resetRootOpenClose():void;
+ setHideRoot(value:any):boolean;
+ setOpenMode(value:any):any;
+ setRoot(value:any):qx.ui.tree.core.AbstractTreeItem;
+ setRootOpenClose(value:any):boolean;
+ toggleHideRoot():boolean;
+ toggleRootOpenClose():boolean;
+
+}
+}
+declare module qx.ui.tree {
+class TreeFile extends qx.ui.tree.core.AbstractTreeItem {
+
+}
+}
+declare module qx.ui.tree {
+class TreeFolder extends qx.ui.tree.core.AbstractTreeItem {
+
+}
+}
+declare module qx.ui.tree {
+class VirtualTree extends qx.ui.virtual.core.Scroller implements qx.ui.tree.core.IVirtualTree,qx.data.controller.ISelection {
+ closeNode(node:qx.core.Object):void;
+ closeNodeWithoutScrolling(node:qx.core.Object):void;
+ getLevel(row:number):number;
+ getLookupTable():qx.data.Array;
+ getSelection():qx.data.Array;
+ hasChildren(node:qx.core.Object):boolean;
+ isNode(item:qx.core.Object):boolean;
+ isNodeOpen(node:qx.core.Object):boolean;
+ isShowTopLevelOpenCloseIcons():boolean;
+ openNode(node:qx.core.Object):void;
+ openNodeWithoutScrolling(node:qx.core.Object):void;
+ resetSelection():void;
+ setSelection(value:qx.data.IListData):void;
+ getAutoScrollIntoView():boolean;
+ getDragSelection():boolean;
+ getQuickSelection():boolean;
+ getSelectionMode():any;
+ isDragSelection():boolean;
+ isQuickSelection():boolean;
+ resetDragSelection():void;
+ resetQuickSelection():void;
+ resetSelectionMode():void;
+ setAutoScrollIntoView(value:boolean):void;
+ setDragSelection(value:any):boolean;
+ setQuickSelection(value:any):boolean;
+ setSelectionMode(value:any):any;
+ toggleDragSelection():boolean;
+ toggleQuickSelection():boolean;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ constructor (model?:qx.core.Object,labelPath?:string,childProperty?:string);
+ protected _afterApplySelection():void;
+ protected _applyChildProperty(value:string,old:string):void;
+ protected _applyDelegate(value:any,old:any):void;
+ protected _applyHideRoot(value:boolean,old:boolean):void;
+ protected _applyIconOptions(value:any,old:any):void;
+ protected _applyIconPath(value:string,old:string):void;
+ protected _applyLabelOptions(value:any,old:any):void;
+ protected _applyLabelPath(value:string,old:string):void;
+ protected _applyModel(value:qx.core.Object,old:qx.core.Object):void;
+ protected _applyOpenMode(value:any,old:any):void;
+ protected _applyRowHeight(value:number,old:number):void;
+ protected _applyShowLeafs(value:boolean,old:boolean):void;
+ protected _applyShowTopLevelOpenCloseIcons(value:boolean,old:boolean):void;
+ protected _beforeApplySelection(newSelection:qx.data.Array):void;
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ protected _getDataFromRow(row:number):any;
+ protected _getSelectables():qx.data.Array;
+ protected _init():void;
+ protected _initLayer():void;
+ protected _onChangeBubble(event:qx.event.type.Data):void;
+ protected _onKeyPress(e:qx.event.type.KeySequence):void;
+ protected _onOpen(event:qx.ui.virtual.core.CellEvent):void;
+ protected _onUpdated(event:qx.event.type.Event):void;
+ protected _reverseLookup(index:number):number;
+ buildLookupTable():void;
+ getChildProperty():string;
+ getDelegate():any;
+ getHideRoot():boolean;
+ getIconOptions():any;
+ getIconPath():string;
+ getItemHeight():number;
+ getLabelOptions():any;
+ getLabelPath():string;
+ getModel():qx.core.Object;
+ getOpenMode():any;
+ getOpenNodes():qx.data.Array;
+ getParent(item:qx.core.Object):qx.core.Object;
+ getShowLeafs():boolean;
+ getShowTopLevelOpenCloseIcons():boolean;
+ protected initChildProperty(value:any):string;
+ protected initDelegate(value:any):any;
+ protected initHideRoot(value:any):boolean;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initItemHeight(value:any):number;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ protected initModel(value:any):qx.core.Object;
+ protected initOpenMode(value:any):any;
+ protected initShowLeafs(value:any):boolean;
+ protected initShowTopLevelOpenCloseIcons(value:any):boolean;
+ isHideRoot():boolean;
+ isShowLeafs():boolean;
+ openNodeAndParents(node:qx.core.Object):void;
+ refresh():void;
+ resetChildProperty():void;
+ resetDelegate():void;
+ resetHideRoot():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetItemHeight():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ resetModel():void;
+ resetOpenMode():void;
+ resetShowLeafs():void;
+ resetShowTopLevelOpenCloseIcons():void;
+ setChildProperty(value:any):string;
+ setDelegate(value:any):any;
+ setHideRoot(value:any):boolean;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setItemHeight(value:any):number;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+ setModel(value:any):qx.core.Object;
+ setOpenMode(value:any):any;
+ setShowLeafs(value:any):boolean;
+ setShowTopLevelOpenCloseIcons(value:any):boolean;
+ toggleHideRoot():boolean;
+ toggleShowLeafs():boolean;
+ toggleShowTopLevelOpenCloseIcons():boolean;
+
+}
+}
+declare module qx.ui.tree {
+class VirtualTreeItem extends qx.ui.tree.core.AbstractItem {
+ protected _applyModel(value:any,old:any):void;
+ protected _onChangeChildProperty(e:qx.event.type.Data):void;
+ protected _onChangeLength():void;
+
+}
+}
+declare module qx.ui.tree.core {
+class AbstractItem extends qx.ui.core.Widget implements qx.ui.form.IModel {
+ getModel():any;
+ resetModel():void;
+ setModel(value:any):void;
+ constructor (label?:string);
+ protected _addWidgets():void;
+ protected _applyIcon(value:string,old:string):void;
+ protected _applyIconOpened(value:string,old:string):void;
+ protected _applyIndent(value:number,old:number):void;
+ protected _applyLabel(value:string,old:string):void;
+ protected _applyOpen(value:boolean,old:boolean):void;
+ protected _applyOpenSymbolMode(value:any,old:any):void;
+ protected _onChangeOpen(e:qx.event.type.Data):void;
+ protected _shouldShowOpenSymbol():boolean;
+ protected _updateIndent():void;
+ addIcon():void;
+ addLabel(text?:string):void;
+ addOpenButton():void;
+ addSpacer():void;
+ addWidget(widget:qx.ui.core.Widget,options?:IMap):void;
+ getIcon():string;
+ getIconOpened():string;
+ getIndent():number;
+ getLabel():string;
+ getLevel():number;
+ getOpen():boolean;
+ getOpenSymbolMode():any;
+ hasChildren():boolean;
+ protected initIcon(value:any):string;
+ protected initIconOpened(value:any):string;
+ protected initIndent(value:any):number;
+ protected initLabel(value:any):string;
+ protected initOpen(value:any):boolean;
+ protected initOpenSymbolMode(value:any):any;
+ isOpen():boolean;
+ isOpenable():boolean;
+ resetIcon():void;
+ resetIconOpened():void;
+ resetIndent():void;
+ resetLabel():void;
+ resetOpen():void;
+ resetOpenSymbolMode():void;
+ setIcon(value:any):string;
+ setIconOpened(value:any):string;
+ setIndent(value:any):number;
+ setLabel(value:any):string;
+ setOpen(value:any):boolean;
+ setOpenSymbolMode(value:any):any;
+ toggleOpen():boolean;
+
+}
+}
+declare module qx.ui.tree.core {
+class AbstractTreeItem extends qx.ui.tree.core.AbstractItem {
+ constructor (label?:any);
+ add(...varargs:qx.ui.tree.core.AbstractTreeItem[]):void;
+ addAfter(treeItem:qx.ui.tree.core.AbstractTreeItem,after:qx.ui.tree.core.AbstractTreeItem):void;
+ addAt(treeItem:qx.ui.tree.core.AbstractTreeItem,index:number):void;
+ addAtBegin(treeItem:qx.ui.tree.core.AbstractTreeItem):void;
+ addBefore(treeItem:qx.ui.tree.core.AbstractTreeItem,before:qx.ui.tree.core.AbstractTreeItem):void;
+ getChildren():qx.ui.tree.core.AbstractTreeItem[];
+ getItems(recursive?:boolean,invisible?:boolean,ignoreFirst?:boolean):qx.ui.tree.core.AbstractTreeItem[];
+ getParent():qx.ui.tree.core.AbstractTreeItem;
+ getParentChildrenContainer():qx.ui.core.Widget;
+ getTree():qx.ui.tree.Tree;
+ hasChildrenContainer():boolean;
+ protected initParent(value:any):qx.ui.tree.core.AbstractTreeItem;
+ recursiveAddToWidgetQueue():void;
+ remove(...varargs:qx.ui.tree.core.AbstractTreeItem[]):void;
+ removeAll():void;
+ removeAt(index:number):void;
+ resetParent():void;
+ setParent(value:any):qx.ui.tree.core.AbstractTreeItem;
+
+}
+}
+declare module qx.ui.tree.core {
+class FolderOpenButton extends qx.ui.basic.Image {
+ execute():void;
+ getCommand():qx.ui.command.Command;
+ resetCommand():void;
+ setCommand(value:any):qx.ui.command.Command;
+ constructor ();
+ protected _applyOpen(value:boolean,old:boolean):void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+ protected _stopPropagation(e:qx.event.type.Event):void;
+ getOpen():boolean;
+ protected initOpen(value:any):boolean;
+ isOpen():boolean;
+ resetOpen():void;
+ setOpen(value:any):boolean;
+ toggleOpen():boolean;
+
+}
+}
+declare module qx.ui.tree.core {
+interface IVirtualTree {
+ closeNode(node:qx.core.Object):void;
+ closeNodeWithoutScrolling(node:qx.core.Object):void;
+ getLevel(row:number):number;
+ getLookupTable():qx.data.Array;
+ getSelection():qx.data.Array;
+ hasChildren(node:qx.core.Object):boolean;
+ isNode(item:qx.core.Object):boolean;
+ isNodeOpen(node:qx.core.Object):boolean;
+ isShowTopLevelOpenCloseIcons():boolean;
+ openNode(node:qx.core.Object):void;
+ openNodeWithoutScrolling(node:qx.core.Object):void;
+
+}
+}
+declare module qx.ui.tree.core {
+interface IVirtualTreeDelegate {
+ bindItem(controller:qx.ui.list.core.MWidgetController,item:qx.ui.core.Widget,id:number):void;
+ configureItem(item:qx.ui.core.Widget):void;
+ createItem():qx.ui.core.Widget;
+ filter(data:any):boolean;
+ onPool(item:qx.ui.core.Widget):void;
+ sorter(a:any,b:any):number;
+
+}
+}
+declare module qx.ui.tree.core {
+class MWidgetController {
+ constructor ();
+ protected _bindItem(item:qx.ui.core.Widget,index:number):void;
+ protected _removeBindingsFrom(item:qx.ui.core.Widget):void;
+ bindDefaultProperties(item:qx.ui.core.Widget,index:number):void;
+ bindProperty(sourcePath:string,targetProperty:string,options:IMap,targetWidget:qx.ui.core.Widget,index:number):void;
+ bindPropertyReverse(targetPath:string,sourceProperty:string,options:IMap,sourceWidget:qx.ui.core.Widget,index:number):void;
+ getChildProperty():string;
+ getDelegate():any;
+ getIconOptions():any;
+ getIconPath():string;
+ getLabelOptions():any;
+ getLabelPath():string;
+ protected initChildProperty(value:any):string;
+ protected initDelegate(value:any):any;
+ protected initIconOptions(value:any):any;
+ protected initIconPath(value:any):string;
+ protected initLabelOptions(value:any):any;
+ protected initLabelPath(value:any):string;
+ removeBindings():void;
+ resetChildProperty():void;
+ resetDelegate():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ setChildProperty(value:any):string;
+ setDelegate(value:any):any;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setLabelOptions(value:any):any;
+ setLabelPath(value:any):string;
+
+}
+}
+declare module qx.ui.tree.core {
+class Util {
+ static hasChildren(node:qx.core.Object,childProperty:string,ignoreLeafs?:boolean):boolean;
+ static isNode(node:qx.core.Object,childProperty:string):boolean;
+
+}
+}
+declare module qx.ui.tree.provider {
+interface IVirtualTreeProvider {
+ createLayer():qx.ui.virtual.layer.Abstract;
+ createRenderer():any;
+ isSelectable(row:number):boolean;
+ setChildProperty(value:string):void;
+ setLabelPath(value:string):void;
+ styleSelectabled(row:number):void;
+ styleUnselectabled(row:number):void;
+
+}
+}
+declare module qx.ui.tree.provider {
+class WidgetProvider extends qx.core.Object implements qx.ui.virtual.core.IWidgetCellProvider,qx.ui.tree.provider.IVirtualTreeProvider {
+ getCellWidget(row:number,column:number):qx.ui.core.LayoutItem;
+ poolCellWidget(widget:qx.ui.core.LayoutItem):void;
+ createLayer():qx.ui.virtual.layer.Abstract;
+ createRenderer():any;
+ isSelectable(row:number):boolean;
+ setChildProperty(value:string):void;
+ setLabelPath(value:string):void;
+ styleSelectabled(row:number):void;
+ styleUnselectabled(row:number):void;
+ bindDefaultProperties(item:qx.ui.core.Widget,index:number):void;
+ bindProperty(sourcePath:string,targetProperty:string,options:IMap,targetWidget:qx.ui.core.Widget,index:number):void;
+ bindPropertyReverse(targetPath:string,sourceProperty:string,options:IMap,sourceWidget:qx.ui.core.Widget,index:number):void;
+ getChildProperty():string;
+ getDelegate():any;
+ getIconOptions():any;
+ getIconPath():string;
+ getLabelOptions():any;
+ getLabelPath():string;
+ removeBindings():void;
+ resetChildProperty():void;
+ resetDelegate():void;
+ resetIconOptions():void;
+ resetIconPath():void;
+ resetLabelOptions():void;
+ resetLabelPath():void;
+ setDelegate(value:any):any;
+ setIconOptions(value:any):any;
+ setIconPath(value:any):string;
+ setLabelOptions(value:any):any;
+ constructor (tree?:qx.ui.tree.VirtualTree);
+ protected _onChangeDelegate(event:qx.event.type.Data):void;
+ protected _onItemCreated(event:qx.event.type.Data):void;
+ protected _onPool(item:qx.ui.core.Widget):void;
+ protected _styleSelectabled(widget:qx.ui.core.Widget):void;
+ protected _styleUnselectabled(widget:qx.ui.core.Widget):void;
+
+}
+}
+declare module qx.ui.tree.selection {
+class SelectionManager extends qx.ui.core.selection.ScrollArea {
+
+}
+}
+declare module qx.ui.treevirtual {
+class DefaultDataCellRenderer extends qx.ui.table.cellrenderer.Default {
+
+}
+}
+declare module qx.ui.treevirtual {
+class MFamily {
+ familyGetFirstChild(nodeReference:any):number;
+ familyGetLastChild(nodeReference:any):number;
+ familyGetNextSibling(nodeReference:any):number;
+ familyGetPrevSibling(nodeReference:any):number;
+
+}
+}
+declare module qx.ui.treevirtual {
+class MNode {
+ nodeGet(nodeReference:any):any;
+ nodeGetCellStyle(nodeReference:any):string;
+ nodeGetHideOpenClose(nodeReference:any):boolean;
+ nodeGetIcon(nodeReference:any):string;
+ nodeGetLabel(nodeReference:any):string;
+ nodeGetLabelStyle(nodeReference:any):string;
+ nodeGetOpened(nodeReference:any):boolean;
+ nodeGetSelected(nodeReference:any):boolean;
+ nodeGetSelectedIcon(nodeReference:any):string;
+ nodeSetCellStyle(nodeReference:any,style:string):void;
+ nodeSetHideOpenClose(nodeReference:any,b:boolean):void;
+ nodeSetIcon(nodeReference:any,path:string):void;
+ nodeSetLabel(nodeReference:any,label:string):void;
+ nodeSetLabelStyle(nodeReference:any,style:string):void;
+ nodeSetOpened(nodeReference:any,b:boolean):void;
+ nodeSetSelected(nodeReference:any,b:boolean):void;
+ nodeSetSelectedIcon(nodeReference:any,path:string):void;
+ nodeSetState(nodeReference:any,attributes:IMap):void;
+ nodeToggleOpened(nodeReference:any):void;
+
+}
+}
+declare module qx.ui.treevirtual {
+class MTreePrimitive {
+ protected static _addNode(nodeArr:qx.data.Array,parentNodeId:number,label:string,bOpened:boolean,bHideOpenCloseButton:boolean,type:number,icon:string,iconSelected:string,nodeId?:number):number;
+ protected static _getEmptyTree():IMap;
+
+}
+}
+declare module qx.ui.treevirtual {
+class SelectionManager extends qx.ui.table.selection.Manager {
+ constructor (table?:qx.ui.table.Table);
+ protected _handleExtendedClick(tree:qx.ui.treevirtual.TreeVirtual,evt:IMap,node:IMap,left:number):boolean;
+ getTable():qx.ui.table.Table;
+
+}
+}
+declare module qx.ui.treevirtual {
+class SimpleTreeDataCellRenderer extends qx.ui.table.cellrenderer.Abstract {
+ constructor ();
+ protected _addExtraContentBeforeIcon(cellInfo:IMap,pos:number):IMap;
+ protected _addExtraContentBeforeIndentation(cellInfo:IMap,pos:number):IMap;
+ protected _addExtraContentBeforeLabel(cellInfo:IMap,pos:number):IMap;
+ protected _addIcon(cellInfo:IMap,pos:number):IMap;
+ protected _addImage(imageInfo:IMap):string;
+ protected _addIndentation(cellInfo:IMap,pos:number):IMap;
+ protected _addLabel(cellInfo:IMap,pos:number):string;
+ protected _getIndentSymbol(column:number,node:Node,bUseTreeLines:boolean,bAlwaysShowOpenCloseSymbol:boolean,bExcludeFirstLevelTreeLines:boolean):IMap;
+ getAlwaysShowOpenCloseSymbol():boolean;
+ getExcludeFirstLevelTreeLines():boolean;
+ getUseTreeLines():boolean;
+ protected initAlwaysShowOpenCloseSymbol(value:any):boolean;
+ protected initExcludeFirstLevelTreeLines(value:any):boolean;
+ protected initUseTreeLines(value:any):boolean;
+ isAlwaysShowOpenCloseSymbol():boolean;
+ isExcludeFirstLevelTreeLines():boolean;
+ isUseTreeLines():boolean;
+ resetAlwaysShowOpenCloseSymbol():void;
+ resetExcludeFirstLevelTreeLines():void;
+ resetUseTreeLines():void;
+ setAlwaysShowOpenCloseSymbol(value:any):boolean;
+ setExcludeFirstLevelTreeLines(value:any):boolean;
+ setUseTreeLines(value:any):boolean;
+ toggleAlwaysShowOpenCloseSymbol():boolean;
+ toggleExcludeFirstLevelTreeLines():boolean;
+ toggleUseTreeLines():boolean;
+
+}
+}
+declare module qx.ui.treevirtual {
+class SimpleTreeDataModel extends qx.ui.table.model.Abstract {
+ constructor ();
+ protected _applyFilter(value:Function,old:Function):void;
+ protected _clearSelections():void;
+ addBranch(parentNodeId:number,label:string,bOpened:boolean,bHideOpenCloseButton:boolean,icon:string,iconSelected:string):number;
+ addLeaf(parentNodeId:number,label:string,icon:string,iconSelected:string):number;
+ clearData():void;
+ getColumnData(nodeId:number,columnIndex:number):any;
+ getData():qx.data.Array;
+ getFilter():Function;
+ getNode(rowIndex:number):any;
+ getNodeFromRow(rowIndex:number):any;
+ getNodeRowMap():qx.data.Array;
+ getRowFromNodeId(nodeId:number):number;
+ getSelectedNodes():qx.data.Array;
+ getTree():qx.ui.treevirtual.TreeVirtual;
+ getTreeColumn():number;
+ protected initFilter(value:any):Function;
+ move(moveNodeReference:any,parentNodeReference:any):void;
+ prune(nodeReference:any,bSelfAlso:boolean):void;
+ resetFilter():void;
+ setColumnData(nodeId:number,columnIndex:number,data:any):void;
+ setColumnEditable(columnIndex:number,editable:boolean):void;
+ setData(nodeArr:qx.data.Array):void;
+ setEditable(editable:boolean):void;
+ setFilter(value:any):Function;
+ setState(nodeReference:any,attributes:IMap):void;
+ setTree(tree:qx.ui.treevirtual.TreeVirtual):void;
+ setTreeColumn(columnIndex:number):void;
+
+}
+}
+declare module qx.ui.treevirtual {
+class SimpleTreeDataRowRenderer extends qx.ui.table.rowrenderer.Default {
+ constructor ();
+
+}
+}
+declare module qx.ui.treevirtual {
+class TreeVirtual extends qx.ui.table.Table {
+ constructor (headings?:qx.data.Array,custom?:IMap);
+ protected _calculateSelectedNodes():qx.data.Array;
+ getAlwaysShowOpenCloseSymbol():boolean;
+ getDataModel():qx.ui.table.ITableModel;
+ getExcludeFirstLevelTreeLines():boolean;
+ getHierarchy(nodeReference:any):qx.data.Array;
+ getOpenCloseClickSelectsRow():boolean;
+ getSelectedNodes():qx.data.Array;
+ getSelectionMode():number;
+ getUseTreeLines():boolean;
+ protected initOpenCloseClickSelectsRow(value:any):boolean;
+ isOpenCloseClickSelectsRow():boolean;
+ resetOpenCloseClickSelectsRow():void;
+ setAlwaysShowOpenCloseSymbol(b:boolean):void;
+ setExcludeFirstLevelTreeLines(b:boolean):void;
+ setOpenCloseClickSelectsRow(value:any):boolean;
+ setOverflow(s:string):void;
+ setSelectionMode(mode:number):void;
+ setUseTreeLines(b:boolean):void;
+ toggleOpenCloseClickSelectsRow():boolean;
+
+}
+}
+declare module qx.ui.virtual.behavior {
+class Prefetch extends qx.core.Object {
+ constructor (scroller?:qx.ui.virtual.core.Scroller,settings?:IMap);
+ protected _applyInterval(value:number,old:number):void;
+ protected _applyScroller(value:qx.ui.virtual.core.Scroller,old:qx.ui.virtual.core.Scroller):void;
+ protected _onInterval():void;
+ getInterval():number;
+ getScroller():qx.ui.virtual.core.Scroller;
+ protected initInterval(value:any):number;
+ protected initScroller(value:any):qx.ui.virtual.core.Scroller;
+ resetInterval():void;
+ resetScroller():void;
+ setInterval(value:any):number;
+ setPrefetchX(minLeft:number,maxLeft:number,minRight:number,maxRight:number):void;
+ setPrefetchY(minAbove:number,maxAbove:number,minBelow:number,maxBelow:number):void;
+ setScroller(value:any):qx.ui.virtual.core.Scroller;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Abstract extends qx.core.Object implements qx.ui.virtual.cell.ICell {
+ getCellProperties(data:any,states:IMap):IMap;
+ constructor ();
+ getAttributes(value:any,states:any):string;
+ getContent(value:any,states:any):string;
+ getCssClasses(value:any,states:any):string;
+ getInsets(value:any,states:any):number[];
+ getStyles(value:any,states:any):string;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class AbstractImage extends qx.ui.virtual.cell.Cell {
+ constructor ();
+ protected _identifyImage(value:any):IMap;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class AbstractWidget extends qx.core.Object implements qx.ui.virtual.cell.IWidgetCell {
+ getCellWidget(data:any,states:IMap):qx.ui.core.LayoutItem;
+ pool(widget:qx.ui.core.LayoutItem):void;
+ updateData(widget:qx.ui.core.LayoutItem,data:any):void;
+ updateStates(widget:qx.ui.core.LayoutItem,states:IMap):void;
+ constructor ();
+ protected _cleanupPool():void;
+ protected _createWidget():qx.ui.core.LayoutItem;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Boolean extends qx.ui.virtual.cell.AbstractImage {
+ constructor ();
+ protected _applyIconFalse(value:string,old:string):void;
+ protected _applyIconTrue(value:string,old:string):void;
+ getIconFalse():string;
+ getIconTrue():string;
+ protected initIconFalse(value:any):string;
+ protected initIconTrue(value:any):string;
+ resetIconFalse():void;
+ resetIconTrue():void;
+ setIconFalse(value:any):string;
+ setIconTrue(value:any):string;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Cell extends qx.ui.virtual.cell.Abstract {
+ constructor ();
+ protected _applyAppearance(value:string,old:string):void;
+ protected _applyBackgroundColor(value:string,old:string):void;
+ protected _applyFont(value:string,old:string):void;
+ protected _applyPadding(value:number,old:number):void;
+ protected _applyTextAlign(value:any,old:any):void;
+ protected _applyTextColor(value:string,old:string):void;
+ protected _getCssProperties():qx.data.Array;
+ protected _getValue(propertyName:string):any;
+ protected _storeStyle(propertyName:string,styles:string):void;
+ getAppearance():string;
+ getBackgroundColor():string;
+ getFont():string;
+ getPaddingBottom():number;
+ getPaddingLeft():number;
+ getPaddingRight():number;
+ getPaddingTop():number;
+ getTextAlign():any;
+ getTextColor():string;
+ protected initAppearance(value:any):string;
+ protected initBackgroundColor(value:any):string;
+ protected initFont(value:any):string;
+ protected initPaddingBottom(value:any):number;
+ protected initPaddingLeft(value:any):number;
+ protected initPaddingRight(value:any):number;
+ protected initPaddingTop(value:any):number;
+ protected initTextAlign(value:any):any;
+ protected initTextColor(value:any):string;
+ resetAppearance():void;
+ resetBackgroundColor():void;
+ resetFont():void;
+ resetPadding():void;
+ resetPaddingBottom():void;
+ resetPaddingLeft():void;
+ resetPaddingRight():void;
+ resetPaddingTop():void;
+ resetTextAlign():void;
+ resetTextColor():void;
+ setAppearance(value:any):string;
+ setBackgroundColor(value:any):string;
+ setFont(value:any):string;
+ setPadding(paddingTop:any,paddingRight:any,paddingBottom:any,paddingLeft:any):void;
+ setPaddingBottom(value:any):number;
+ setPaddingLeft(value:any):number;
+ setPaddingRight(value:any):number;
+ setPaddingTop(value:any):number;
+ setTextAlign(value:any):any;
+ setTextColor(value:any):string;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class CellStylesheet extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.ui.virtual.cell.CellStylesheet;
+ computeClassForStyles(key:string,styleString:string):string;
+ getCssClass(key:string):string;
+ getStylesheet():any;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Date extends qx.ui.virtual.cell.Cell {
+ constructor (dateFormat?:qx.util.format.DateFormat);
+ getDateFormat():qx.util.format.DateFormat;
+ protected initDateFormat(value:any):qx.util.format.DateFormat;
+ resetDateFormat():void;
+ setDateFormat(value:any):qx.util.format.DateFormat;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Html extends qx.ui.virtual.cell.Cell {
+
+}
+}
+declare module qx.ui.virtual.cell {
+interface ICell {
+ getCellProperties(data:any,states:IMap):IMap;
+
+}
+}
+declare module qx.ui.virtual.cell {
+interface IWidgetCell {
+ getCellWidget(data:any,states:IMap):qx.ui.core.LayoutItem;
+ pool(widget:qx.ui.core.LayoutItem):void;
+ updateData(widget:qx.ui.core.LayoutItem,data:any):void;
+ updateStates(widget:qx.ui.core.LayoutItem,states:IMap):void;
+
+}
+}
+declare module qx.ui.virtual.cell {
+interface IWidgetCellDelegate {
+ createWidget():qx.ui.core.LayoutItem;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Image extends qx.ui.virtual.cell.AbstractImage {
+
+}
+}
+declare module qx.ui.virtual.cell {
+class Number extends qx.ui.virtual.cell.Cell {
+ constructor (numberFormat?:qx.util.format.NumberFormat);
+ getNumberFormat():qx.util.format.NumberFormat;
+ protected initNumberFormat(value:any):qx.util.format.NumberFormat;
+ resetNumberFormat():void;
+ setNumberFormat(value:any):qx.util.format.NumberFormat;
+
+}
+}
+declare module qx.ui.virtual.cell {
+class String extends qx.ui.virtual.cell.Cell {
+ constructor ();
+
+}
+}
+declare module qx.ui.virtual.cell {
+class WidgetCell extends qx.ui.virtual.cell.AbstractWidget {
+ protected _applyDelegate(value:any,old:any):void;
+ getDelegate():any;
+ protected initDelegate(value:any):any;
+ resetDelegate():void;
+ setDelegate(value:any):any;
+
+}
+}
+declare module qx.ui.virtual.core {
+class Axis extends qx.core.Object {
+ constructor (defaultItemSize?:number,itemCount?:number);
+ getDefaultItemSize():number;
+ getItemAtPosition(position:number):IMap;
+ getItemCount():number;
+ getItemPosition(index:number):number;
+ getItemSize(index:number):number;
+ getItemSizes(startIndex:number,minSizeSum:number):number[];
+ getTotalSize():number;
+ resetItemSizes():void;
+ setDefaultItemSize(defaultItemSize:number):void;
+ setItemCount(itemCount:number):void;
+ setItemSize(index:number,size:number):void;
+
+}
+}
+declare module qx.ui.virtual.core {
+class CellEvent extends qx.event.type.Pointer {
+ getColumn():number;
+ getRow():number;
+ protected initColumn(value:any):number;
+ protected initRow(value:any):number;
+ resetColumn():void;
+ resetRow():void;
+ setColumn(value:any):number;
+ setRow(value:any):number;
+
+}
+}
+declare module qx.ui.virtual.core {
+interface IHtmlCellProvider {
+ getCellProperties(row:number,column:number):IMap;
+
+}
+}
+declare module qx.ui.virtual.core {
+interface ILayer {
+ fullUpdate(firstRow:number,firstColumn:number,rowSizes:number[],columnSizes:number[]):void;
+ updateLayerData():void;
+ updateLayerWindow(firstRow:number,firstColumn:number,rowSizes:number[],columnSizes:number[]):void;
+
+}
+}
+declare module qx.ui.virtual.core {
+interface IWidgetCellProvider {
+ getCellWidget(row:number,column:number):qx.ui.core.LayoutItem;
+ poolCellWidget(widget:qx.ui.core.LayoutItem):void;
+
+}
+}
+declare module qx.ui.virtual.core {
+class Pane extends qx.ui.core.Widget {
+ constructor (rowCount?:number,columnCount?:number,cellHeight?:number,cellWidth?:number);
+ protected _deferredUpdateScrollPosition():void;
+ protected _fullUpdate():void;
+ protected _onAppear():void;
+ protected _onContextmenu(e:qx.event.type.Pointer):void;
+ protected _onDbltap(e:qx.event.type.Pointer):void;
+ protected _onPointerDown(e:qx.event.type.Pointer):void;
+ protected _onResize():void;
+ protected _onTap(e:qx.event.type.Pointer):void;
+ protected _setLayerWindow(layers:qx.ui.virtual.core.ILayer[],left:number,top:number,minWidth:number,minHeight:number,doFullUpdate?:boolean):void;
+ protected _updateScrollPosition():void;
+ addLayer(layer:qx.ui.virtual.core.ILayer):void;
+ fullUpdate():void;
+ getCellAtPosition(documentX:number,documentY:number):IMap;
+ getChildren():any[];
+ getColumnConfig():qx.ui.virtual.core.Axis;
+ getLayers():qx.ui.virtual.core.ILayer[];
+ getRowConfig():qx.ui.virtual.core.Axis;
+ getScrollMaxX():number;
+ getScrollMaxY():number;
+ getScrollSize():IMap;
+ getScrollX():number;
+ getScrollY():number;
+ getVisibleLayers():qx.ui.virtual.core.ILayer[];
+ isUpdatePending():boolean;
+ prefetchX(minLeft:number,maxLeft:number,minRight:number,maxRight:number):void;
+ prefetchY(minAbove:number,maxAbove:number,minBelow:number,maxBelow:number):void;
+ scrollCellIntoView(column:number,row:number):void;
+ scrollColumnIntoView(column:number):void;
+ scrollRowIntoView(row:number):void;
+ setScrollX(value:number):void;
+ setScrollY(value:number):void;
+
+}
+}
+declare module qx.ui.virtual.core {
+class Scroller extends qx.ui.core.scroll.AbstractScrollArea {
+ constructor (rowCount?:number,columnCount?:number,cellHeight?:number,cellWidth?:number);
+ getPane():qx.ui.virtual.core.Pane;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class Abstract extends qx.ui.core.Widget implements qx.ui.virtual.core.ILayer {
+ fullUpdate(firstRow:number,firstColumn:number,rowSizes:number[],columnSizes:number[]):void;
+ updateLayerData():void;
+ updateLayerWindow(firstRow:number,firstColumn:number,rowSizes:number[],columnSizes:number[]):void;
+ constructor ();
+ protected _fullUpdate(firstRow:number,firstColumn:number,rowSizes:number[],columnSizes:number[]):void;
+ protected _updateLayerData():void;
+ protected _updateLayerWindow(firstRow:number,firstColumn:number,rowSizes:number[],columnSizes:number[]):void;
+ getColumnSizes():number[];
+ getFirstColumn():number;
+ getFirstRow():number;
+ getRowSizes():number[];
+
+}
+}
+declare module qx.ui.virtual.layer {
+class AbstractBackground extends qx.ui.virtual.layer.Abstract {
+ constructor (colorEven?:string,colorOdd?:string);
+ protected _applyColorEven(value:string,old:string):void;
+ protected _applyColorOdd(value:string,old:string):void;
+ clearCustomColors():void;
+ getBackground(index:number):qx.ui.decoration.IDecorator;
+ getColor(index:number):string;
+ getColorEven():string;
+ getColorOdd():string;
+ protected initColorEven(value:any):string;
+ protected initColorOdd(value:any):string;
+ resetColorEven():void;
+ resetColorOdd():void;
+ setBackground(index:number,decorator:qx.ui.decoration.IDecorator):void;
+ setColor(index:number,color:string):void;
+ setColorEven(value:any):string;
+ setColorOdd(value:any):string;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class CellSpanManager extends qx.core.Object {
+ constructor (rowConfig?:qx.ui.virtual.core.Axis,columnConfig?:qx.ui.virtual.core.Axis);
+ protected _findCellsInRange(key:string,min:number,max:number):IMap;
+ protected _getColumnPosition(column:number):number;
+ protected _getRowPosition(row:number):number;
+ protected _getSingleCellBounds(cell:IMap,firstVisibleRow:IMap,firstVisibleColumn:IMap):IMap;
+ protected _getSortedCells(key:string):IMap[];
+ protected _invalidatePositionCache():void;
+ protected _invalidateSortCache():void;
+ protected _onColumnConfigChange(e:qx.event.type.Event):void;
+ protected _onRowConfigChange(e:qx.event.type.Event):void;
+ addCell(id:string,row:number,column:number,rowSpan:number,columnSpan:number):void;
+ computeCellSpanMap(cells:IMap[],firstRow:number,firstColumn:number,rowCount:number,columnCount:number):IMap[];
+ findCellsInWindow(firstRow:number,firstColumn:number,rowCount:number,columnCount:number):IMap[];
+ getCellBounds(cells:IMap[],firstVisibleRow:IMap,firstVisibleColumn:IMap):IMap[];
+ removeCell(id:string):void;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class Column extends qx.ui.virtual.layer.AbstractBackground {
+
+}
+}
+declare module qx.ui.virtual.layer {
+class GridLines extends qx.ui.virtual.layer.Abstract {
+ constructor (orientation?:string,lineColor?:string,lineSize?:number);
+ getDefaultLineColor():string;
+ getDefaultLineSize():number;
+ getLineColor(index:number):string;
+ getLineSize(index:number):number;
+ protected initDefaultLineColor(value:any):string;
+ protected initDefaultLineSize(value:any):number;
+ isHorizontal():boolean;
+ resetDefaultLineColor():void;
+ resetDefaultLineSize():void;
+ setDefaultLineColor(value:any):string;
+ setDefaultLineSize(value:any):number;
+ setLineColor(index:number,color:string):void;
+ setLineSize(index:number,size:number):void;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class HtmlCell extends qx.ui.virtual.layer.Abstract {
+ constructor (htmlCellProvider?:qx.ui.virtual.core.IHtmlCellProvider);
+ protected _getCellSizeStyle(width:number,height:number,insetX:number,insetY:number):string;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class HtmlCellSpan extends qx.ui.virtual.layer.HtmlCell {
+ constructor (htmlCellProvider?:qx.ui.virtual.core.IHtmlCellProvider,rowConfig?:qx.ui.virtual.core.Axis,columnConfig?:qx.ui.virtual.core.Axis);
+ setCellSpan(row:number,column:number,rowSpan:number,columnSpan:number):void;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class Row extends qx.ui.virtual.layer.AbstractBackground {
+
+}
+}
+declare module qx.ui.virtual.layer {
+class WidgetCell extends qx.ui.virtual.layer.Abstract {
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ constructor (widgetCellProvider?:qx.ui.virtual.core.IWidgetCellProvider);
+ protected _activateNotEmptyChild(elementToPool:qx.ui.core.Widget):void;
+ protected _getSpacer():qx.ui.core.Spacer;
+ getRenderedCellWidget(row:number,column:number):qx.ui.core.LayoutItem;
+
+}
+}
+declare module qx.ui.virtual.layer {
+class WidgetCellSpan extends qx.ui.virtual.layer.Abstract {
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ constructor (widgetCellProvider?:qx.ui.virtual.core.IWidgetCellProvider,rowConfig?:qx.ui.virtual.core.Axis,columnConfig?:qx.ui.virtual.core.Axis);
+ protected _getSpacer():qx.ui.core.Spacer;
+ getRenderedCellWidget(row:number,column:number):qx.ui.core.LayoutItem;
+ setCellSpan(row:number,column:number,rowSpan:number,columnSpan:number):void;
+
+}
+}
+declare module qx.ui.virtual.selection {
+class Abstract extends qx.ui.core.selection.Abstract {
+ constructor (pane?:qx.ui.virtual.core.Pane,selectionDelegate?:any);
+ attachKeyEvents(target:qx.core.Object):void;
+ attachListEvents(list:qx.core.Object):void;
+ attachPointerEvents():void;
+ detachKeyEvents(target:qx.core.Object):void;
+ detachListEvents(list:qx.core.Object):void;
+ detatchPointerEvents():void;
+
+}
+}
+declare module qx.ui.virtual.selection {
+class CellLines extends qx.ui.virtual.selection.CellRectangle {
+
+}
+}
+declare module qx.ui.virtual.selection {
+class CellRectangle extends qx.ui.virtual.selection.Abstract {
+ protected _getItemCount():number;
+
+}
+}
+declare module qx.ui.virtual.selection {
+class Column extends qx.ui.virtual.selection.Row {
+
+}
+}
+declare module qx.ui.virtual.selection {
+interface ISelectionDelegate {
+ isItemSelectable(item:any):boolean;
+ styleSelectable(item:any,type:string,wasAdded:boolean):void;
+
+}
+}
+declare module qx.ui.virtual.selection {
+class MModel {
+ constructor ();
+ protected _applyDefaultSelection():void;
+ protected _applyDragSelection(value:boolean,old:boolean):void;
+ protected _applyQuickSelection(value:boolean,old:boolean):void;
+ protected _applySelection(value:qx.data.Array,old:qx.data.Array):void;
+ protected _applySelectionMode(value:any,old:any):void;
+ protected _initSelectionManager():void;
+ protected _onChangeSelection(e:qx.event.type.Data):void;
+ protected _onManagerChangeSelection(e:qx.event.type.Data):void;
+ protected _updateSelection():void;
+ getAutoScrollIntoView():boolean;
+ getDragSelection():boolean;
+ getQuickSelection():boolean;
+ getSelection():qx.data.Array;
+ getSelectionMode():any;
+ protected initDragSelection(value:any):boolean;
+ protected initQuickSelection(value:any):boolean;
+ protected initSelection(value:any):qx.data.Array;
+ protected initSelectionMode(value:any):any;
+ isDragSelection():boolean;
+ isQuickSelection():boolean;
+ resetDragSelection():void;
+ resetQuickSelection():void;
+ resetSelection():void;
+ resetSelectionMode():void;
+ setAutoScrollIntoView(value:boolean):void;
+ setDragSelection(value:any):boolean;
+ setQuickSelection(value:any):boolean;
+ setSelection(value:any):qx.data.Array;
+ setSelectionMode(value:any):any;
+ toggleDragSelection():boolean;
+ toggleQuickSelection():boolean;
+
+}
+}
+declare module qx.ui.virtual.selection {
+class Row extends qx.ui.virtual.selection.Abstract {
+ protected _getItemCount():number;
+
+}
+}
+declare module qx.ui.window {
+class Desktop extends qx.ui.core.Widget implements qx.ui.window.IDesktop {
+ blockContent(zIndex:number):void;
+ getWindows():qx.ui.window.Window[];
+ isBlocked():boolean;
+ setWindowManager(manager:qx.ui.window.IWindowManager):void;
+ supportsMaximize():boolean;
+ unblock():void;
+ static remap(members:IMap):void;
+ add(child:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.Widget):number;
+ remove(child:qx.ui.core.LayoutItem):void;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ getActiveWindow():qx.ui.window.Window;
+ getWindowManager():qx.ui.window.IWindowManager;
+ resetActiveWindow():void;
+ setActiveWindow(value:any):qx.ui.window.Window;
+ block():void;
+ forceUnblock():void;
+ getBlocker():qx.ui.core.Blocker;
+ getBlockerColor():string;
+ getBlockerOpacity():number;
+ resetBlockerColor():void;
+ resetBlockerOpacity():void;
+ setBlockerColor(value:any):string;
+ setBlockerOpacity(value:any):number;
+ constructor (windowManager?:qx.ui.window.IWindowManager);
+
+}
+}
+declare module qx.ui.window {
+interface IDesktop {
+ blockContent(zIndex:number):void;
+ getWindows():qx.ui.window.Window[];
+ isBlocked():boolean;
+ setWindowManager(manager:qx.ui.window.IWindowManager):void;
+ supportsMaximize():boolean;
+ unblock():void;
+
+}
+}
+declare module qx.ui.window {
+interface IWindowManager {
+ bringToFront(win:Window):void;
+ changeActiveWindow(active:Window,oldActive:Window):void;
+ sendToBack(win:Window):void;
+ setDesktop(desktop:qx.ui.window.IDesktop):void;
+ updateStack():void;
+
+}
+}
+declare module qx.ui.window {
+class MDesktop {
+ protected _addWindow(win:qx.ui.window.Window):void;
+ protected _afterAddChild(win:qx.ui.core.Widget):void;
+ protected _afterRemoveChild(win:qx.ui.core.Widget):void;
+ protected _applyActiveWindow(value:qx.ui.window.Window,old:qx.ui.window.Window):void;
+ protected _onChangeActive(e:qx.event.type.Event):void;
+ protected _onChangeModal(e:qx.event.type.Event):void;
+ protected _onChangeVisibility():void;
+ protected _removeWindow(win:qx.ui.window.Window):void;
+ getActiveWindow():qx.ui.window.Window;
+ getWindowManager():qx.ui.window.IWindowManager;
+ getWindows():qx.ui.window.Window[];
+ protected initActiveWindow(value:any):qx.ui.window.Window;
+ resetActiveWindow():void;
+ setActiveWindow(value:any):qx.ui.window.Window;
+ setWindowManager(manager:qx.ui.window.IWindowManager):void;
+ supportsMaximize():boolean;
+
+}
+}
+declare module qx.ui.window {
+class Manager extends qx.core.Object implements qx.ui.window.IWindowManager {
+ bringToFront(win:Window):void;
+ changeActiveWindow(active:Window,oldActive:Window):void;
+ sendToBack(win:Window):void;
+ setDesktop(desktop:qx.ui.window.IDesktop):void;
+ updateStack():void;
+ getDesktop():qx.ui.window.IDesktop;
+ syncWidget():void;
+
+}
+}
+declare module qx.ui.window {
+class Window extends qx.ui.core.Widget {
+ add(child:qx.ui.core.LayoutItem,options?:IMap):qx.ui.core.Widget;
+ addAfter(child:qx.ui.core.LayoutItem,after:qx.ui.core.LayoutItem,options?:IMap):void;
+ addAt(child:qx.ui.core.LayoutItem,index:number,options?:IMap):void;
+ addBefore(child:qx.ui.core.LayoutItem,before:qx.ui.core.LayoutItem,options?:IMap):void;
+ getChildren():qx.ui.core.LayoutItem[];
+ hasChildren():boolean;
+ indexOf(child:qx.ui.core.LayoutItem):number;
+ remove(child:qx.ui.core.LayoutItem):qx.ui.core.Widget;
+ removeAll():qx.data.Array;
+ removeAt(index:number):qx.ui.core.LayoutItem;
+ getLayout():qx.ui.layout.Abstract;
+ setLayout(layout:qx.ui.layout.Abstract):void;
+ getResizableBottom():boolean;
+ getResizableLeft():boolean;
+ getResizableRight():boolean;
+ getResizableTop():boolean;
+ getResizeSensitivity():number;
+ getUseResizeFrame():boolean;
+ isResizableBottom():boolean;
+ isResizableLeft():boolean;
+ isResizableRight():boolean;
+ isResizableTop():boolean;
+ isUseResizeFrame():boolean;
+ resetResizable():void;
+ resetResizableBottom():void;
+ resetResizableLeft():void;
+ resetResizableRight():void;
+ resetResizableTop():void;
+ resetResizeSensitivity():void;
+ resetUseResizeFrame():void;
+ setResizable(resizableTop:any,resizableRight:any,resizableBottom:any,resizableLeft:any):void;
+ setResizableBottom(value:any):boolean;
+ setResizableLeft(value:any):boolean;
+ setResizableRight(value:any):boolean;
+ setResizableTop(value:any):boolean;
+ setResizeSensitivity(value:any):number;
+ setUseResizeFrame(value:any):boolean;
+ toggleResizableBottom():boolean;
+ toggleResizableLeft():boolean;
+ toggleResizableRight():boolean;
+ toggleResizableTop():boolean;
+ toggleUseResizeFrame():boolean;
+ getMovable():boolean;
+ getUseMoveFrame():boolean;
+ isMovable():boolean;
+ isUseMoveFrame():boolean;
+ resetMovable():void;
+ resetUseMoveFrame():void;
+ setMovable(value:any):boolean;
+ setUseMoveFrame(value:any):boolean;
+ toggleMovable():boolean;
+ toggleUseMoveFrame():boolean;
+ getContentPaddingBottom():number;
+ getContentPaddingLeft():number;
+ getContentPaddingRight():number;
+ getContentPaddingTop():number;
+ resetContentPadding():void;
+ resetContentPaddingBottom():void;
+ resetContentPaddingLeft():void;
+ resetContentPaddingRight():void;
+ resetContentPaddingTop():void;
+ setContentPadding(contentPaddingTop:any,contentPaddingRight:any,contentPaddingBottom:any,contentPaddingLeft:any):void;
+ setContentPaddingBottom(value:any):number;
+ setContentPaddingLeft(value:any):number;
+ setContentPaddingRight(value:any):number;
+ setContentPaddingTop(value:any):number;
+ constructor (caption?:string,icon?:string);
+ protected _applyActive(value:boolean,old:boolean):void;
+ protected _applyCaptionBarChange(value:any,old:any):void;
+ protected _applyModal(value:boolean,old:boolean):void;
+ protected _applyShowStatusbar(value:boolean,old:boolean):void;
+ protected _applyStatus(value:string,old:string):void;
+ protected _getContentPaddingTarget():qx.ui.core.Widget;
+ protected _onCaptionPointerDblTap(e:qx.event.type.Pointer):void;
+ protected _onCloseButtonTap(e:qx.event.type.Pointer):void;
+ protected _onMaximizeButtonTap(e:qx.event.type.Pointer):void;
+ protected _onMinimizeButtonTap(e:qx.event.type.Pointer):void;
+ protected _onRestoreButtonTap(e:qx.event.type.Pointer):void;
+ protected _onWindowEventStop(e:qx.event.type.Event):void;
+ protected _onWindowFocusOut(e:qx.event.type.Focus):void;
+ protected _onWindowPointerDown(e:qx.event.type.Pointer):void;
+ protected _updateCaptionBar():void;
+ center():void;
+ close():void;
+ getActive():boolean;
+ getAllowClose():boolean;
+ getAllowMaximize():boolean;
+ getAllowMinimize():boolean;
+ getAlwaysOnTop():boolean;
+ getCaption():any;
+ getIcon():string;
+ getModal():boolean;
+ getMode():string;
+ getShowClose():boolean;
+ getShowMaximize():boolean;
+ getShowMinimize():boolean;
+ getShowStatusbar():boolean;
+ getStatus():string;
+ protected initActive(value:any):boolean;
+ protected initAllowClose(value:any):boolean;
+ protected initAllowMaximize(value:any):boolean;
+ protected initAllowMinimize(value:any):boolean;
+ protected initAlwaysOnTop(value:any):boolean;
+ protected initCaption(value:any):any;
+ protected initIcon(value:any):string;
+ protected initModal(value:any):boolean;
+ protected initShowClose(value:any):boolean;
+ protected initShowMaximize(value:any):boolean;
+ protected initShowMinimize(value:any):boolean;
+ protected initShowStatusbar(value:any):boolean;
+ protected initStatus(value:any):string;
+ isActive():boolean;
+ isAllowClose():boolean;
+ isAllowMaximize():boolean;
+ isAllowMinimize():boolean;
+ isAlwaysOnTop():boolean;
+ isMaximized():boolean;
+ isModal():boolean;
+ isShowClose():boolean;
+ isShowMaximize():boolean;
+ isShowMinimize():boolean;
+ isShowStatusbar():boolean;
+ maximize():void;
+ minimize():void;
+ moveTo(left:number,top:number):void;
+ open():void;
+ resetActive():void;
+ resetAllowClose():void;
+ resetAllowMaximize():void;
+ resetAllowMinimize():void;
+ resetAlwaysOnTop():void;
+ resetCaption():void;
+ resetIcon():void;
+ resetModal():void;
+ resetShowClose():void;
+ resetShowMaximize():void;
+ resetShowMinimize():void;
+ resetShowStatusbar():void;
+ resetStatus():void;
+ restore():void;
+ setActive(value:any):boolean;
+ setAllowClose(value:any):boolean;
+ setAllowMaximize(value:any):boolean;
+ setAllowMinimize(value:any):boolean;
+ setAlwaysOnTop(value:any):boolean;
+ setCaption(value:any):any;
+ setIcon(value:any):string;
+ setModal(value:any):boolean;
+ setShowClose(value:any):boolean;
+ setShowMaximize(value:any):boolean;
+ setShowMinimize(value:any):boolean;
+ setShowStatusbar(value:any):boolean;
+ setStatus(value:any):string;
+ toggleActive():boolean;
+ toggleAllowClose():boolean;
+ toggleAllowMaximize():boolean;
+ toggleAllowMinimize():boolean;
+ toggleAlwaysOnTop():boolean;
+ toggleModal():boolean;
+ toggleShowClose():boolean;
+ toggleShowMaximize():boolean;
+ toggleShowMinimize():boolean;
+ toggleShowStatusbar():boolean;
+
+}
+}
+declare module qx.util {
+class AliasManager extends qx.util.ValueManager {
+ constructor ();
+ static getInstance():qx.util.AliasManager;
+ protected _preprocess(value:string):string;
+ add(alias:string,base:string):void;
+ getAliases():IMap;
+ remove(alias:string):void;
+
+}
+}
+declare module qx.util {
+class Animation {
+
+}
+}
+declare module qx.util {
+class Base64 {
+ static decode(input:string,is8bit?:boolean):string;
+ static encode(input:string,is8bit?:boolean):string;
+
+}
+}
+declare module qx.util {
+class ColorUtil {
+ static cssStringToRgb(str:string):qx.data.Array;
+ static hex3StringToHex6String(value:string):string;
+ static hex3StringToRgb(value:string):qx.data.Array;
+ static hex6StringToRgb(value:string):qx.data.Array;
+ static hexStringToRgb(value:string):qx.data.Array;
+ static hsbToRgb(hsb:number[]):number[];
+ static isCssString(str:string):boolean;
+ static isHex3String(str:string):boolean;
+ static isHex6String(str:string):boolean;
+ static isNamedColor(value:string):boolean;
+ static isRgbaString(str:string):boolean;
+ static isRgbString(str:string):boolean;
+ static isSystemColor(value:string):boolean;
+ static isThemedColor(value:string):boolean;
+ static isValidPropertyValue(str:string):boolean;
+ static randomColor():string;
+ static rgbToHexString(rgb:qx.data.Array):string;
+ static rgbToHsb(rgb:number[]):qx.data.Array;
+ static rgbToRgbString(rgb:qx.data.Array):string;
+ static stringToRgb(str:string):qx.data.Array;
+ static stringToRgbString(str:string):string;
+ static supportsThemes():boolean;
+
+}
+}
+declare module qx.util {
+class DeferredCall extends qx.core.Object {
+ constructor (callback?:Function,context?:any);
+ call():void;
+ cancel():void;
+ schedule():void;
+
+}
+}
+declare module qx.util {
+class DeferredCallManager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.util.DeferredCallManager;
+ cancel(deferredCall:qx.util.DeferredCall):void;
+ schedule(deferredCall:qx.util.DeferredCall):void;
+
+}
+}
+declare module qx.util {
+class Delegate {
+ static containsMethod(delegate:any,specificMethod:string):boolean;
+ static getMethod(delegate:any,specificMethod:string):Function;
+
+}
+}
+declare module qx.util {
+class DisposeUtil {
+ protected static _collectContainerChildren(container:qx.ui.container.Composite,arr:qx.data.Array):void;
+ static destroyContainer(container:qx.ui.container.Composite):void;
+ static disposeArray(obj:any,field:string):void;
+ static disposeMap(obj:any,field:string):void;
+ static disposeObjects(obj:any,arr:qx.data.Array,disposeSingletons?:boolean):void;
+ static disposeTriggeredBy(disposeMe:any,trigger:any):void;
+
+}
+}
+declare module qx.util {
+class EditDistance {
+ static getEditOperations(dataA:qx.data.Array,dataB:qx.data.Array):IMap[];
+
+}
+}
+declare module qx.util {
+class ExtendedColor {
+ static isExtendedColor(value:string):boolean;
+ static toRgb(value:string):qx.data.Array;
+ static toRgbString(value:string):string;
+
+}
+}
+declare module qx.util {
+class OOUtil {
+ static classIsDefined(name:string):boolean;
+ static getByInterface(clazz:qx.Class,iface:qx.Interface):qx.Class;
+ static getEventType(clazz:qx.Class,name:string):string;
+ static getMixins(clazz:qx.Class):qx.Mixin[];
+ static getPropertyDefinition(clazz:qx.Class,name:string):IMap;
+ static hasInterface(clazz:qx.Class,iface:qx.Interface):boolean;
+ static hasProperty(clazz:qx.Class,name:string):boolean;
+ static supportsEvent(clazz:qx.Class,name:string):boolean;
+
+}
+}
+declare module qx.util {
+class ObjectPool extends qx.core.Object {
+ constructor (size?:number);
+ getObject(clazz:qx.Class):any;
+ getSize():number;
+ protected initSize(value:any):number;
+ poolObject(obj:any):void;
+ resetSize():void;
+ setSize(value:any):number;
+
+}
+}
+declare module qx.util {
+class Permutation {
+ static permute(options:IMap,callback:Function,context:any):void;
+
+}
+}
+declare module qx.util {
+class PropertyUtil {
+ static deleteInitValue(object:any,propertyName:string):void;
+ static deleteThemeValue(object:any,propertyName:string):void;
+ static deleteUserValue(object:any,propertyName:string):void;
+ static getAllProperties(clazz:qx.Class):IMap;
+ static getInitValue(object:any,propertyName:string):any;
+ static getProperties(clazz:qx.Class):IMap;
+ static getThemeValue(object:any,propertyName:string):any;
+ static getUserValue(object:any,propertyName:string):any;
+ static resetThemed(object:any,propertyName:string):void;
+ static setInitValue(object:any,propertyName:string,value:any):void;
+ static setThemed(object:any,propertyName:string,value:any):void;
+ static setThemeValue(object:any,propertyName:string,value:any):void;
+ static setUserValue(object:any,propertyName:string,value:any):void;
+
+}
+}
+declare module qx.util {
+class Request {
+ static isCrossDomain(url:string):boolean;
+ static isMethod(method:string):boolean;
+ static isSuccessful(status:number):boolean;
+ static methodAllowsRequestBody(method:string):boolean;
+
+}
+}
+declare module qx.util {
+class ResourceManager extends qx.core.Object {
+ constructor ();
+ static getInstance():qx.util.ResourceManager;
+ getCombinedFormat(id:string):string;
+ getData(id:string):qx.data.Array;
+ getImageFormat(id:string):string;
+ getImageHeight(id:string):number;
+ getImageWidth(id:string):number;
+ has(id:string):boolean;
+ toDataUri(resid:string):string;
+ toUri(id:string):string;
+
+}
+}
+declare module qx.util {
+class ResponseParser {
+ constructor (parser?:string);
+ protected _getParser(contentType:string):Function;
+ parse(response:string,contentType:string):string;
+ setParser(parser:string):Function;
+
+}
+}
+declare module qx.util {
+class RingBuffer {
+ constructor (maxEntries?:number);
+ addEntry(entry:any):void;
+ clear():void;
+ clearMark():void;
+ getAllEntries():qx.data.Array;
+ getEntries(count:number,startingFromMark?:boolean):qx.data.Array;
+ getMaxEntries():number;
+ mark():void;
+ setMaxEntries(maxEntries:number):void;
+
+}
+}
+declare module qx.util {
+class Serializer {
+ static toJson(object:qx.core.Object,qxSerializer?:Function,dateFormat?:qx.util.format.DateFormat):string;
+ static toNativeObject(object:qx.core.Object,qxSerializer?:Function,dateFormat?:qx.util.format.DateFormat):string;
+ static toUriParameter(object:qx.core.Object,qxSerializer?:Function,dateFormat?:qx.util.format.DateFormat):string;
+
+}
+}
+declare module qx.util {
+class StringBuilder extends qx.type.BaseArray {
+ constructor (length_or_items?:number);
+ add(...varargs:string[]):void;
+ clear():void;
+ get():string;
+ isEmpty():boolean;
+ size():number;
+
+}
+}
+declare module qx.util {
+class StringEscape {
+ static escape(str:string,charCodeToEntities:IMap):string;
+ static unescape(str:string,entitiesToCharCode:IMap):string;
+
+}
+}
+declare module qx.util {
+class StringSplit {
+ static split(str:string,separator:RegExp,limit?:number):string[];
+
+}
+}
+declare module qx.util {
+class TimerManager extends qx.core.Object {
+ static getInstance():qx.util.TimerManager;
+ start(callback:Function,recurTime:number,context:qx.core.Object,userData:any,initialTime:number):number;
+ stop(timerId:number):void;
+
+}
+}
+declare module qx.util {
+class Uri {
+ static appendParamsToUrl(url:string,params:string):string;
+ static getAbsolute(uri:string):string;
+ static parseUri(str:string,strict:boolean):any;
+ static toParameter(obj:any,post:boolean):string;
+
+}
+}
+declare module qx.util {
+class Validate {
+ static checkColor(value:any,formItem:qx.ui.form.IForm,errorMessage?:string):void;
+ static checkEmail(value:any,formItem:qx.ui.form.IForm,errorMessage?:string):void;
+ static checkNumber(value:any,formItem:qx.ui.form.IForm,errorMessage?:string):void;
+ static checkString(value:any,formItem:qx.ui.form.IForm,errorMessage?:string):void;
+ static checkUrl(value:any,formItem:qx.ui.form.IForm,errorMessage?:string):void;
+ static color(errorMessage?:string):Function;
+ static email(errorMessage?:string):Function;
+ static inArray(array:qx.data.Array,errorMessage?:string):Function;
+ static number(errorMessage?:string):Function;
+ static range(from:number,to:number,errorMessage?:string):Function;
+ static regExp(reg:RegExp,errorMessage?:string):Function;
+ static string(errorMessage?:string):Function;
+ static url(errorMessage?:string):Function;
+
+}
+}
+declare module qx.util {
+class ValueManager extends qx.core.Object {
+ constructor ();
+ protected _getDynamic():IMap;
+ protected _setDynamic(value:IMap):void;
+ isDynamic(value:string):boolean;
+ resolve(value:string):any;
+ resolveDynamic(value:string):any;
+
+}
+}
+declare module qx.util {
+class Wheel {
+ static getDelta(domEvent:qx.event.type.Event,axis?:string):number;
+
+}
+}
+declare module qx.util.format {
+class DateFormat extends qx.core.Object implements qx.util.format.IFormat {
+ format(obj:any):string;
+ parse(str:string):any;
+ constructor (format?:string,locale?:string);
+ static getDateInstance():qx.util.format.DateFormat;
+ static getDateTimeInstance():qx.util.format.DateFormat;
+ protected _applyLocale(value:string,old:string):void;
+ getLocale():string;
+ protected initLocale(value:any):string;
+ resetLocale():void;
+ setLocale(value:any):string;
+
+}
+}
+declare module qx.util.format {
+interface IFormat {
+ format(obj:any):string;
+ parse(str:string):any;
+
+}
+}
+declare module qx.util.format {
+class NumberFormat extends qx.core.Object implements qx.util.format.IFormat {
+ format(obj:any):string;
+ parse(str:string):any;
+ constructor (locale?:string);
+ getGroupingUsed():boolean;
+ getLocale():string;
+ getMaximumFractionDigits():number;
+ getMaximumIntegerDigits():number;
+ getMinimumFractionDigits():number;
+ getMinimumIntegerDigits():number;
+ getPostfix():string;
+ getPrefix():string;
+ protected initGroupingUsed(value:any):boolean;
+ protected initLocale(value:any):string;
+ protected initMaximumFractionDigits(value:any):number;
+ protected initMaximumIntegerDigits(value:any):number;
+ protected initMinimumFractionDigits(value:any):number;
+ protected initMinimumIntegerDigits(value:any):number;
+ protected initPostfix(value:any):string;
+ protected initPrefix(value:any):string;
+ isGroupingUsed():boolean;
+ resetGroupingUsed():void;
+ resetLocale():void;
+ resetMaximumFractionDigits():void;
+ resetMaximumIntegerDigits():void;
+ resetMinimumFractionDigits():void;
+ resetMinimumIntegerDigits():void;
+ resetPostfix():void;
+ resetPrefix():void;
+ setGroupingUsed(value:any):boolean;
+ setLocale(value:any):string;
+ setMaximumFractionDigits(value:any):number;
+ setMaximumIntegerDigits(value:any):number;
+ setMinimumFractionDigits(value:any):number;
+ setMinimumIntegerDigits(value:any):number;
+ setPostfix(value:any):string;
+ setPrefix(value:any):string;
+ toggleGroupingUsed():boolean;
+
+}
+}
+declare module qx.util.fsm {
+class FiniteStateMachine extends qx.core.Object {
+ constructor (machineName?:string);
+ protected _getInternalData():IMap;
+ addObject(friendlyName:string,obj:any,groupNames:qx.data.Array):void;
+ addState(state:qx.util.fsm.State):void;
+ displayAllObjects():void;
+ enqueueEvent(event:qx.event.type.Event,bAddAtHead:boolean):void;
+ eventListener(event:qx.event.type.Event):void;
+ fireImmediateEvent(type:string,target:qx.core.Object,data:any):void;
+ getDebugFlags():number;
+ getFriendlyName(obj:any):string;
+ getGroupObjects(groupName:string):qx.data.Array;
+ getMaxSavedStates():number;
+ getName():string;
+ getNextState():string;
+ getObject(friendlyName:string):any;
+ getPreviousState():string;
+ getState():string;
+ protected initDebugFlags(value:any):number;
+ protected initMaxSavedStates(value:any):number;
+ protected initName(value:any):string;
+ protected initNextState(value:any):string;
+ protected initPreviousState(value:any):string;
+ protected initState(value:any):string;
+ isTerminated():boolean;
+ popState():string;
+ postponeEvent(event:qx.event.type.Event):void;
+ pushState(state:boolean):void;
+ removeObject(friendlyName:string):void;
+ replaceState(state:qx.util.fsm.State,bDispose:boolean):any;
+ resetDebugFlags():void;
+ resetMaxSavedStates():void;
+ resetName():void;
+ resetNextState():void;
+ resetPreviousState():void;
+ resetState():void;
+ scheduleEvent(type:string,target:qx.core.Object,data:any,timeout:number):void;
+ setDebugFlags(value:any):number;
+ setMaxSavedStates(value:any):number;
+ setName(value:any):string;
+ setNextState(value:any):string;
+ setPreviousState(value:any):string;
+ setState(value:any):string;
+ start():void;
+
+}
+}
+declare module qx.util.fsm {
+class State extends qx.core.Object {
+ constructor (stateName?:string,stateInfo?:IMap);
+ protected static _commonTransformAutoActions(actionType:string,value:any,context:any):Function;
+ addTransition(trans:qx.util.fsm.Transition):void;
+ getAutoActionsAfterOnentry():any;
+ getAutoActionsAfterOnexit():any;
+ getAutoActionsBeforeOnentry():any;
+ getAutoActionsBeforeOnexit():any;
+ getEvents():any;
+ getName():any;
+ getOnentry():any;
+ getOnexit():any;
+ protected initAutoActionsAfterOnentry(value:any):any;
+ protected initAutoActionsAfterOnexit(value:any):any;
+ protected initAutoActionsBeforeOnentry(value:any):any;
+ protected initAutoActionsBeforeOnexit(value:any):any;
+ protected initEvents(value:any):any;
+ protected initName(value:any):any;
+ protected initOnentry(value:any):any;
+ protected initOnexit(value:any):any;
+ resetAutoActionsAfterOnentry():void;
+ resetAutoActionsAfterOnexit():void;
+ resetAutoActionsBeforeOnentry():void;
+ resetAutoActionsBeforeOnexit():void;
+ resetEvents():void;
+ resetName():void;
+ resetOnentry():void;
+ resetOnexit():void;
+ setAutoActionsAfterOnentry(value:any):any;
+ setAutoActionsAfterOnexit(value:any):any;
+ setAutoActionsBeforeOnentry(value:any):any;
+ setAutoActionsBeforeOnexit(value:any):any;
+ setEvents(value:any):any;
+ setName(value:any):any;
+ setOnentry(value:any):any;
+ setOnexit(value:any):any;
+
+}
+}
+declare module qx.util.fsm {
+class Transition extends qx.core.Object {
+ constructor (transitionName?:string,transitionInfo?:any);
+ getAutoActionsAfterOntransition():any;
+ getAutoActionsBeforeOntransition():any;
+ getName():string;
+ getNextState():any;
+ getOntransition():any;
+ getPredicate():any;
+ protected initAutoActionsAfterOntransition(value:any):any;
+ protected initAutoActionsBeforeOntransition(value:any):any;
+ protected initName(value:any):string;
+ protected initNextState(value:any):any;
+ protected initOntransition(value:any):any;
+ protected initPredicate(value:any):any;
+ resetAutoActionsAfterOntransition():void;
+ resetAutoActionsBeforeOntransition():void;
+ resetName():void;
+ resetNextState():void;
+ resetOntransition():void;
+ resetPredicate():void;
+ setAutoActionsAfterOntransition(value:any):any;
+ setAutoActionsBeforeOntransition(value:any):any;
+ setName(value:any):string;
+ setNextState(value:any):any;
+ setOntransition(value:any):any;
+ setPredicate(value:any):any;
+
+}
+}
+declare module qx.util.placement {
+class AbstractAxis {
+ protected static _isInRange(start:number,size:number,areaSize:number):boolean;
+ protected static _moveToEdgeAndAlign(size:number,target:IMap,offsets:IMap,position:string):number;
+ static computeStart(size:number,target:IMap,offsets:IMap,areaSize:number,position:string):number;
+
+}
+}
+declare module qx.util.placement {
+class BestFitAxis {
+ static computeStart(size:number,target:IMap,offsets:IMap,areaSize:number,position:string):number;
+
+}
+}
+declare module qx.util.placement {
+class DirectAxis {
+ static computeStart(size:number,target:IMap,offsets:IMap,areaSize:number,position:string):number;
+
+}
+}
+declare module qx.util.placement {
+class KeepAlignAxis {
+ static computeStart(size:number,target:IMap,offsets:IMap,areaSize:number,position:string):number;
+
+}
+}
+declare module qx.util.placement {
+class Placement extends qx.core.Object {
+ constructor ();
+ static compute(size:IMap,area:IMap,target:IMap,offsets:IMap,position:string,modeX:string,modeY:string):IMap;
+ getAlign():any;
+ getAxisX():qx.Class;
+ getAxisY():qx.Class;
+ getEdge():any;
+ protected initAlign(value:any):any;
+ protected initAxisX(value:any):qx.Class;
+ protected initAxisY(value:any):qx.Class;
+ protected initEdge(value:any):any;
+ resetAlign():void;
+ resetAxisX():void;
+ resetAxisY():void;
+ resetEdge():void;
+ setAlign(value:any):any;
+ setAxisX(value:any):qx.Class;
+ setAxisY(value:any):qx.Class;
+ setEdge(value:any):any;
+
+}
+}
+declare module qx.xml {
+class Document {
+ static create(namespaceUri?:string,qualifiedName?:string):Document;
+ static fromString(str:string):Document;
+ static isXmlDocument(elem:Document):boolean;
+
+}
+}
+declare module qx.xml {
+class Element {
+ static createSubElementNS(document:Document,parent:HTMLElement,name:string,namespaceUri:string):HTMLElement;
+ static getAttributeNS(element:HTMLElement,namespaceUri:string,name:string):string;
+ static getElementsByTagNameNS(element:HTMLElement,namespaceURI:any,tagname:string):HTMLElement[];
+ static getSingleNodeText(element:HTMLElement,query:string):string;
+ static selectNodes(element:HTMLElement,query:string,namespaces:IMap):HTMLElement[];
+ static selectSingleNode(element:HTMLElement,query:string,namespaces:IMap):HTMLElement;
+ static serialize(element:HTMLElement):string;
+ static setAttributeNS(document:Document,element:HTMLElement,namespaceUri:string,name:string,value:string):void;
+
+}
+}
+declare module qx.xml {
+class String {
+ static escape(str:string):string;
+ static unescape(str:string):string;
+
+}
+}
+declare module qx.ui.command {
+class Command extends qx.core.Object {
+ constructor (shortcut?:string);
+ protected _applyActive(value:boolean,old:boolean):void;
+ protected _applyEnabled(value:boolean,old:boolean):void;
+ protected _applyShortcut(value:string,old:string):void;
+ execute(target?:any):void;
+ getActive():boolean;
+ getEnabled():boolean;
+ getIcon():string;
+ getLabel():string;
+ getMenu():qx.ui.menu.Menu;
+ getShortcut():string;
+ getToolTipText():string;
+ getValue():any;
+ protected initActive(value:any):boolean;
+ protected initEnabled(value:any):boolean;
+ protected initIcon(value:any):string;
+ protected initLabel(value:any):string;
+ protected initMenu(value:any):qx.ui.menu.Menu;
+ protected initShortcut(value:any):string;
+ protected initToolTipText(value:any):string;
+ protected initValue(value:any):any;
+ isActive():boolean;
+ isEnabled():boolean;
+ resetActive():void;
+ resetEnabled():void;
+ resetIcon():void;
+ resetLabel():void;
+ resetMenu():void;
+ resetShortcut():void;
+ resetToolTipText():void;
+ resetValue():void;
+ setActive(value:any):boolean;
+ setEnabled(value:any):boolean;
+ setIcon(value:any):string;
+ setLabel(value:any):string;
+ setMenu(value:any):qx.ui.menu.Menu;
+ setShortcut(value:any):string;
+ setToolTipText(value:any):string;
+ setValue(value:any):any;
+ toggleActive():boolean;
+ toggleEnabled():boolean;
+
+}
+}
+declare module qx.ui.command {
+class Group extends qx.core.Object {
+ constructor ();
+ protected _applyActive(value:boolean,old:boolean):void;
+ add(key:string,command:qx.ui.command.Command):boolean;
+ get(key:string):qx.ui.command.Command;
+ getActive():boolean;
+ has(key:string):boolean;
+ protected initActive(value:any):boolean;
+ isActive():boolean;
+ remove(key:string):qx.ui.command.Command;
+ resetActive():void;
+ setActive(value:any):boolean;
+ toggleActive():boolean;
+
+}
+}
+declare module qx.ui.command {
+class GroupManager extends qx.core.Object {
+ constructor ();
+ protected _getGroup(group:qx.ui.command.Group):qx.ui.command.Group;
+ add(group:qx.ui.command.Group):boolean;
+ block():void;
+ getActive():qx.ui.command.Group;
+ has(group:qx.ui.command.Group):boolean;
+ remove(group:qx.ui.command.Group):qx.ui.command.Group;
+ setActive(group:qx.ui.command.Group):boolean;
+ unblock():void;
+
+}
+}
diff --git a/source/resource/manager/crc32-LICENSE b/source/resource/manager/crc32-LICENSE
new file mode 100644
index 00000000000..9fd9d568d71
--- /dev/null
+++ b/source/resource/manager/crc32-LICENSE
@@ -0,0 +1,14 @@
+Copyright (C) 2014-present SheetJS
+
+ 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/source/resource/manager/crc32.js b/source/resource/manager/crc32.js
new file mode 100644
index 00000000000..6bcecef9722
--- /dev/null
+++ b/source/resource/manager/crc32.js
@@ -0,0 +1,118 @@
+/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
+/* vim: set ts=2: */
+/*exported CRC32 */
+var CRC32;
+(function (factory) {
+ /*jshint ignore:start */
+ /*eslint-disable */
+ if(typeof DO_NOT_EXPORT_CRC === 'undefined') {
+ if('object' === typeof exports) {
+ factory(exports);
+ } else if ('function' === typeof define && define.amd) {
+ define(function () {
+ var module = {};
+ factory(module);
+ return module;
+ });
+ } else {
+ factory(CRC32 = {});
+ }
+ } else {
+ factory(CRC32 = {});
+ }
+ /*eslint-enable */
+ /*jshint ignore:end */
+}(function(CRC32) {
+CRC32.version = '1.2.0';
+/* see perf/crc32table.js */
+/*global Int32Array */
+function signed_crc_table() {
+ var c = 0, table = new Array(256);
+
+ for(var n =0; n != 256; ++n){
+ c = n;
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
+ table[n] = c;
+ }
+
+ return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;
+}
+
+var T = signed_crc_table();
+function crc32_bstr(bstr, seed) {
+ var C = seed ^ -1, L = bstr.length - 1;
+ for(var i = 0; i < L;) {
+ C = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];
+ C = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];
+ }
+ if(i === L) C = (C>>>8) ^ T[(C ^ bstr.charCodeAt(i))&0xFF];
+ return C ^ -1;
+}
+
+function crc32_buf(buf, seed) {
+ if(buf.length > 10000) return crc32_buf_8(buf, seed);
+ var C = seed ^ -1, L = buf.length - 3;
+ for(var i = 0; i < L;) {
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ }
+ while(i < L+3) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ return C ^ -1;
+}
+
+function crc32_buf_8(buf, seed) {
+ var C = seed ^ -1, L = buf.length - 7;
+ for(var i = 0; i < L;) {
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ }
+ while(i < L+7) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];
+ return C ^ -1;
+}
+
+function crc32_str(str, seed) {
+ var C = seed ^ -1;
+ for(var i = 0, L=str.length, c, d; i < L;) {
+ c = str.charCodeAt(i++);
+ if(c < 0x80) {
+ C = (C>>>8) ^ T[(C ^ c)&0xFF];
+ } else if(c < 0x800) {
+ C = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF];
+ C = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];
+ } else if(c >= 0xD800 && c < 0xE000) {
+ c = (c&1023)+64; d = str.charCodeAt(i++)&1023;
+ C = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF];
+ C = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF];
+ C = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];
+ C = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF];
+ } else {
+ C = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF];
+ C = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF];
+ C = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];
+ }
+ }
+ return C ^ -1;
+}
+CRC32.table = T;
+// $FlowIgnore
+CRC32.bstr = crc32_bstr;
+// $FlowIgnore
+CRC32.buf = crc32_buf;
+// $FlowIgnore
+CRC32.str = crc32_str;
+}));
diff --git a/source/resource/manager/worker.js b/source/resource/manager/worker.js
new file mode 100644
index 00000000000..b0a4b163c09
--- /dev/null
+++ b/source/resource/manager/worker.js
@@ -0,0 +1,182 @@
+/*
+ * copyright (c) 2010-2017, Christian Mayer and the CometVisu contributers.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+/**
+ * Webworker for CometVisu's XML text editor. Detects changes in document,
+ * Syntax errors and other stuff.
+ *
+ * @since 0.11.0
+ * @author Tobias Bräutigam
+ */
+importScripts('xmllint.js');
+importScripts('crc32.js');
+
+let configSchema;
+
+function getFileContent (path) {
+ try {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', path, false); // Note: synchronous
+ xhr.send();
+ return xhr.response;
+ } catch(e) {
+ console.error("XHR Error " + e.toString());
+ return null;
+ }
+}
+
+class SourceFile {
+ constructor(path) {
+ this.path = path;
+ this.initialHash = null;
+ this.initialCode = null;
+ this.currentHash = null;
+ this.isConfigFile = /visu_config.*\.xml$/.test(path);
+
+ if (this.isConfigFile && !configSchema) {
+ // load scheme file
+ configSchema = getFileContent('../visu_config.xsd');
+ }
+ }
+
+ /**
+ * Called after editor has been loaded with a config file
+ * @param data {Map}
+ */
+ open(data) {
+ this.initialCode = data.code.split("\n");
+ this.initialHash = SourceFile.hashCode(data.code);
+
+ // initial syntax check
+ this.contentChange(data);
+ }
+
+ /**
+ * Called after file has been saved
+ * @param data {String} Complete code
+ */
+ saved(data) {
+ this.initialCode = data.split("\n");
+ this.initialHash = SourceFile.hashCode(data);
+ }
+
+ contentChange(data) {
+ this.currentHash = SourceFile.hashCode(data.code);
+ // check modifications
+ postMessage(["modified", {
+ modified: (this.currentHash !== this.initialHash),
+ currentHash: this.currentHash,
+ initialHash: this.initialHash
+ }, this.path]);
+
+ if (this.isConfigFile) {
+ var lint = xmllint.validateXML({
+ xml: data.code,
+ schema: configSchema
+ });
+ postMessage(["errors", lint.errors, this.path]);
+ }
+
+ // currently disabled as these are hard to maintain (e.g. if you delete a line the range of existing decorators change
+ // and they all need to be re-evaluated)
+ //this.checkModification(data.code.split("\n"), data.event.changes);
+ }
+
+ checkModification(lines, changes) {
+ var decorations = [];
+
+ changes.forEach(function(change) {
+ for (var i=change.range.startLineNumber; i<=change.range.endLineNumber; i++) {
+ if (this.initialCode[i] !== lines[i]) {
+ decorations.push({
+ range: {
+ startLineNumber: change.range.startLineNumber+1,
+ endLineNumber: change.range.endLineNumber+1,
+ startColumn: 1,
+ endColumn: 1
+ },
+ options: {
+ isWholeLine: true,
+ linesDecorationsClassName: 'modified-line'
+ }
+ });
+ break;
+ }
+ }
+ });
+ postMessage(["decorations", decorations, this.path]);
+ }
+
+ /**
+ * Calculate HashCode from string using the crc32 lib.
+ *
+ * @return {number}
+ */
+ static hashCode(string) {
+ return CRC32.str(string);
+ }
+}
+
+// mapping calls to SourceFile instances
+const openFiles = {};
+
+function openFile(data) { // jshint ignore:line
+ if (!openFiles.hasOwnProperty(data.path)) {
+ const source = new SourceFile(data.path);
+ source.open(data);
+ openFiles[data.path] = source;
+ }
+}
+
+function closeFile(path) { // jshint ignore:line
+ delete openFiles[path];
+}
+
+function contentChange(data) { // jshint ignore:line
+ if (openFiles.hasOwnProperty(data.path)) {
+ const source = openFiles[data.path];
+ source.contentChange(data);
+ } else {
+ console.error('no open file found for path', data.path);
+ }
+}
+
+function validateConfig (data) {
+ var content = getFileContent('../../' + data.path);
+ if (content) {
+ if (!configSchema) {
+ configSchema = getFileContent('../visu_config.xsd');
+ }
+ var lint = xmllint.validateXML({
+ xml: content,
+ schema: configSchema
+ });
+ postMessage(["validationResult", lint.errors || true, data.path]);
+ }
+}
+
+/**
+ * Handle messages from application
+ */
+onmessage = function(ev) {
+ var topic = ev.data.shift();
+ if (topic in this) {
+ // dispatch message to handler
+ this[topic].apply(this, ev.data);
+ }
+};
diff --git a/source/editor/text/xml.js b/source/resource/manager/xml.js
similarity index 100%
rename from source/editor/text/xml.js
rename to source/resource/manager/xml.js
diff --git a/source/editor/text/xmllint.js b/source/resource/manager/xmllint.js
similarity index 100%
rename from source/editor/text/xmllint.js
rename to source/resource/manager/xmllint.js
diff --git a/source/rest/config.js b/source/rest/config.js
new file mode 100644
index 00000000000..6e3a7796ae9
--- /dev/null
+++ b/source/rest/config.js
@@ -0,0 +1,44 @@
+const path = require('path');
+
+const resourcesDir = path.resolve(path.join(__dirname, '..', 'resource'));
+const configDir = path.join(resourcesDir, 'config');
+const trashFolderName = '.trash';
+
+module.exports = {
+ resourcesDir: resourcesDir,
+ configDir: configDir,
+ designsDir: path.join(resourcesDir, 'designs'),
+ trashFolderName: trashFolderName,
+ trashFolder: path.join(configDir, trashFolderName),
+ backupFolder: path.join(configDir, 'backup'),
+ backupOnChange: [/visu_config.*\.xml/],
+ mounts: [
+ {
+ mountPoint: 'demo',
+ path: path.join(resourcesDir, 'demo'),
+ showSubDirs: false,
+ writeable: false
+ }
+ ],
+ addressFiles: {
+ addresses: [
+ path.join(configDir, 'media', 'eibga.conf'),
+ '/etc/wiregate/eibga.conf'
+ ],
+ mainGroups: [
+ path.join(configDir, 'media', 'eibga_hg.conf'),
+ '/etc/wiregate/eibga_hg.conf'
+ ],
+ middleGroups: [
+ path.join(configDir, 'media', 'eibga_mg.conf'),
+ '/etc/wiregate/eibga_mg.conf'
+ ]
+ },
+ onewire: {
+ sensors: [
+ path.join(configDir, 'media', 'owsensors.conf'),
+ '/etc/wiregate/owsensors.conf'
+ ],
+ rrdDir: '/var/www/rrd/'
+ }
+}
\ No newline at end of file
diff --git a/source/rest/controllers/DataProviderController.js b/source/rest/controllers/DataProviderController.js
new file mode 100644
index 00000000000..55258a1dd45
--- /dev/null
+++ b/source/rest/controllers/DataProviderController.js
@@ -0,0 +1,216 @@
+const fs = require('fs')
+const config = require('../config')
+const ini = require('ini');
+const AbstractHandler = require('../lib/AbstractHandler')
+const influxClient = require('../lib/InfluxClient')
+
+class DataProviderController extends AbstractHandler {
+ constructor() {
+ super()
+ }
+
+ /**
+ * Return folder listing or file content, depending on the path type
+ * @param context {Context}
+ * @returns {*}
+ */
+ getDesigns(context) {
+ return fs.readdirSync(config.designsDir, {withFileTypes: true}).filter(file => {
+ return file.isDirectory();
+ }).map(file => file.name);
+ }
+
+ getAddresses(context) {
+ // read addresses
+ let addresses, mainGroups, middleGroups;
+ config.addressFiles.addresses.some(file => {
+ if (fs.existsSync(file)) {
+ addresses = ini.parse(fs.readFileSync(file, 'utf-8'));
+ return true;
+ }
+ })
+ config.addressFiles.mainGroups.some(file => {
+ if (fs.existsSync(file)) {
+ mainGroups = ini.parse(fs.readFileSync(file, 'utf-8'));
+ return true;
+ }
+ })
+ config.addressFiles.middleGroups.some(file => {
+ if (fs.existsSync(file)) {
+ middleGroups = ini.parse(fs.readFileSync(file, 'utf-8'));
+ return true;
+ }
+ })
+
+ // create a list of ALL group-addresses, multi-dimensional
+ const res = {};
+
+ if (addresses) {
+ let gas = Object.keys(addresses)
+
+ // sort gas
+ gas.sort(function (a, b) {
+ const pa = a.split('/');
+ const pb = b.split('/');
+ let diff = parseInt(pa.shift(), 10) - parseInt(pb.shift(), 10);
+ while (diff === 0) {
+ diff = parseInt(pa.shift(), 10) - parseInt(pb.shift(), 10);
+ }
+ return diff;
+ })
+
+ let mainGroup, middleGroup, key;
+ gas.forEach(ga => {
+ const gaParts = ga.split('/');
+
+ mainGroup = '';
+ middleGroup = '';
+ if (mainGroups && mainGroups.hasOwnProperty(gaParts[0])) {
+ mainGroup = mainGroups[gaParts[0]].name;
+ }
+ if (middleGroups && middleGroups.hasOwnProperty(gaParts[1])) {
+ middleGroup = middleGroups[gaParts[1]].name;
+ }
+ key = mainGroup + ' ' + middleGroup;
+ if (!res.hasOwnProperty(key)) {
+ res[key] = [];
+ }
+ const gaData = addresses[ga];
+ res[key].push({
+ value: ga,
+ label: gaData.name,
+ hints: {
+ transform: `DPT:${gaData.DPTSubId}`
+ }
+ })
+ })
+ }
+ return res;
+ }
+
+ getRRDs(context) {
+ let sensors;
+
+ config.onewire.sensors.some(file => {
+ if (fs.existsSync(file)) {
+ sensors = ini.parse(fs.readFileSync(file, 'utf-8'));
+ return true;
+ }
+ })
+
+ const res = []
+ if (sensors) {
+ let rrdParts, fileBasename
+ fs.readdirSync(config.onewire.rrdDir)
+ .filter(file => path.extname(file) === '.rrd')
+ .forEach(file => {
+ fileBasename = path.basename(file, '.rrd');
+ rrdParts = fileBasename.split('_', 2)
+
+ res.push({
+ value: file,
+ label: sensors[rrdParts[0]]['name'],
+ });
+ })
+ }
+ return res
+ }
+
+ getInfluxDBs(context) {
+ const auth = context.params.query.auth;
+ const res = [];
+ try {
+ return influxClient.query('show databases', null, auth).then(response => {
+ const dbs = JSON.parse(response);
+ const seriesPromises = [];
+ dbs.results[0].series[0].values.map(dbEntry => dbEntry[0]).forEach(database => {
+ if (database !== '_internal') {
+ seriesPromises.push(influxClient.getSeries(database, null, auth).then(measurements => {
+ // translate fake set to real set/array
+ Object.keys(measurements).forEach(measurement => {
+ Object.keys(measurements[measurement]).forEach(tag => {
+ measurements[measurement][tag] = Object.keys(measurements[measurement][tag])
+ })
+ res.push({
+ label: database + '/' + measurement,
+ value: database + '/' + measurement
+ })
+ })
+ }));
+ }
+ })
+ return Promise.all(seriesPromises).then( () => {
+ return res;
+ })
+ })
+ } catch (e) {
+ console.error(e)
+ return res;
+ }
+ }
+
+ getInfluxDBFields(context) {
+ const auth = context.params.query.auth;
+ const [database, measurement] = context.params.query.measurement ? context.params.query.measurement.split('/', 2) : ['', ''];
+ if (!database || !measurement) {
+ this.respondMessage(context, 406, 'Error: wrong measurement parameter [' + context.params.query.measurement + ']')
+ } else {
+ const res = [];
+ try {
+ return influxClient.query('SHOW FIELD KEYS FROM ' + measurement, database, auth).then(response => {
+ res.push({
+ value: '*',
+ label: 'Default: *',
+ forceOnlyLabel: 1
+ })
+
+ const fields = JSON.parse(response).results[0].series[0].values
+ fields.forEach(field => {
+ let l = ''
+ let r = ''
+ if (field[1] === 'string') {
+ l = '['
+ r = ']'
+ }
+ res.push({
+ value: field[0],
+ label: `${l}${field[0]} (${field[1]})${r}`,
+ forceOnlyLabel: 1
+ })
+ })
+ return res
+ })
+ } catch (e) {
+ console.error(e)
+ return res;
+ }
+ }
+ }
+
+ getInfluxDBTags(context) {
+ const auth = context.params.query.auth;
+ const [database, measurement] = context.params.query.measurement ? context.params.query.measurement.split('/', 2) : ['', ''];
+ if (!database || !measurement) {
+ this.respondMessage(context, 406, 'Error: wrong measurement parameter [' + context.params.query.measurement + ']')
+ } else {
+ const res = {};
+ try {
+ return influxClient.getSeries(database, measurement, auth).then(seriesMeasurements => {
+ Object.keys(seriesMeasurements).forEach(measurementName => {
+ Object.keys(seriesMeasurements[measurementName]).forEach(tag => {
+ res[tag] = Object.keys(seriesMeasurements[measurement][tag])
+ })
+ })
+ return res
+ })
+ } catch (e) {
+ console.error(e)
+ return res;
+ }
+ }
+ }
+}
+
+const dataProviderController = new DataProviderController()
+
+module.exports = dataProviderController
\ No newline at end of file
diff --git a/source/rest/controllers/FsController.js b/source/rest/controllers/FsController.js
new file mode 100644
index 00000000000..468e0d93e93
--- /dev/null
+++ b/source/rest/controllers/FsController.js
@@ -0,0 +1,289 @@
+const path = require('path')
+const fs = require('fs')
+const config = require('../config')
+const FileHandler = require('../lib/FileHandler')
+
+class FsController extends FileHandler {
+ constructor() {
+ super()
+ this.basePath = config.configDir;
+ this.mounts = config.mounts.map(mount => mount.mountPoint);
+ }
+
+ /**
+ * Check if the required files/folders exist and are writeable
+ * @param context
+ */
+ checkEnvironment(context) {
+ const res = [];
+ // config folder must be writeable
+ ['.', 'media', 'backup'].forEach(function (folder) {
+ res.push({
+ entity: folder,
+ state: this._getState(path.join(this.basePath, folder))
+ })
+ }.bind(this));
+ return res;
+ }
+
+ _getState(folder) {
+ let state = 0;
+ if (fs.existsSync(folder)) {
+ // Bit 0: exists
+ state = 1;
+ }
+ try {
+ fs.accessSync(folder, fs.constants.R_OK)
+ // Bit 1: readable
+ state |= 1 << 1;
+ } catch (err) {
+ }
+ try {
+ fs.accessSync(folder, fs.constants.W_OK)
+ // Bit 2: writeable
+ state |= 2 << 1;
+ } catch (err) {
+ }
+ return state
+ }
+
+ /**
+ * Return folder listing or file content, depending on the path type
+ * @param context {Context}
+ * @returns {*}
+ */
+ read(context) {
+ return this.__processRequest(context, (fsPath, mount) => {
+ return this.__folderListing(fsPath, mount, context.params.query.recursive);
+ }, fsPath => {
+ this.sendFile(context, fsPath);
+ }, 'read')
+ }
+
+ create(context) {
+ const mount = this.__getMount(context.params.query.path);
+ let fsPath = this.__getAbsolutePath(context.params.query.path, mount)
+ let parentPath = fsPath;
+ let content = context.requestBody;
+ let options = {}
+ if (context.req.file) {
+ fsPath += '/' + (context.requestBody.filename ? context.requestBody.filename : context.req.file.originalname)
+ content = context.req.file.buffer
+ options = context.requestBody
+ } else {
+ const parts = fsPath.split('/')
+ parts.pop();
+ parentPath = parts.join('/')
+ }
+ if (fs.existsSync(parentPath)) {
+ try {
+ if (!FileHandler.checkAccess(parentPath) || (mount && mount.writeable === false)) {
+ this.respondMessage(context, 403, 'Forbidden')
+ } else {
+ if (context.params.query.type === 'dir') {
+ this.createFolder(context, fsPath);
+ } else {
+ this.createFile(context, fsPath, content, options);
+ }
+ }
+ } catch (err) {
+ console.error(err)
+ // no read access to path
+ this.respondMessage(context,403, 'Forbidden')
+ }
+ } else {
+ this.respondMessage(context,404, 'Not found')
+ }
+ }
+
+ update(context) {
+ return this.__processRequest(context, null, fsPath => {
+ this.updateFile(context, fsPath, context.requestBody);
+ }, 'update')
+ }
+
+ delete(context) {
+ return this.__processRequest(context, fsPath => {
+ this.deleteFolder(context, fsPath, context.params.query.force);
+ }, fsPath => {
+ this.deleteFile(context, fsPath, context.params.query.force);
+ }, 'delete')
+ }
+
+ move(context) {
+ const mount = this.__getMount(context.params.query.src);
+ const fsPath = this.__getAbsolutePath(context.params.query.src, mount)
+ const targetMount = this.__getMount(context.params.query.target)
+ const targetPath = this.__getAbsolutePath(context.params.query.target, targetMount)
+ if (!fs.existsSync(fsPath)) {
+ this.respondMessage(context,404, 'Source not found')
+ return;
+ }
+ if (fs.existsSync(targetPath)) {
+ this.respondMessage(context,406, 'Target exists')
+ return;
+ }
+ if (!FileHandler.checkAccess(targetPath) || (mount && mount.writeable === false) || (targetMount && targetMount.writeable === false)) {
+ this.respondMessage(context, 403, 'Forbidden')
+ } else {
+ this.rename(context, fsPath, targetPath);
+ }
+ }
+
+ __getMount(path) {
+ let mountKey = this.mounts.indexOf(path);
+ if (mountKey < 0) {
+ this.mounts.some((mountPoint, index) => {
+ if (path.startsWith(mountPoint)) {
+ mountKey = index;
+ return true;
+ }
+ })
+ }
+ if (mountKey >= 0) {
+ return config.mounts[mountKey];
+ }
+ }
+
+ __processRequest(context, folderCallback, fileCallback, type) {
+ const mount = this.__getMount(context.params.query.path);
+ const fsPath = this.__getAbsolutePath(context.params.query.path, mount)
+ if (fs.existsSync(fsPath)) {
+ try {
+ const stats = fs.statSync(fsPath)
+ if (!FileHandler.checkAccess(fsPath) || (mount && mount.writeable === false && type !== 'read')) {
+ this.respondMessage(context,403, 'Forbidden')
+ } else {
+ if (stats.isDirectory()) {
+ if (folderCallback) {
+ return folderCallback(fsPath, mount)
+ }
+ } else {
+ if (fileCallback) {
+ return fileCallback(fsPath, mount);
+ }
+ }
+ }
+ } catch (err) {
+ console.error(err)
+ // no read access to path
+ this.respondMessage(context,403, 'Forbidden')
+ }
+ } else {
+ this.respondMessage(context,404, 'Not found')
+ }
+ }
+
+ __folderListing(fsPath, mount, recursive) {
+ const res = []
+ let trashFound = false;
+ const inTrash = fsPath === config.trashFolder || fsPath.startsWith(config.trashFolder)
+ fs.readdirSync(fsPath).filter(file => {
+ return FileHandler.checkAccess(fsPath, file) || file === config.trashFolderName
+ }).forEach(file => {
+ try {
+ const entryPath = path.join(fsPath, file)
+ const stats = fs.statSync(entryPath)
+ if (mount && mount.showSubDirs === false && stats.isDirectory()) {
+ // no subdirs in mount
+ return;
+ }
+ let relFolder;
+ if (mount) {
+ relFolder = mount.mountPoint + fsPath.substring(mount.path.length + 1)
+ } else {
+ relFolder = fsPath.substring(this.basePath.length + 1)
+ }
+ if (relFolder.length > 0) {
+ relFolder += '/'
+ }
+ const isTrash = stats.isDirectory() && file === config.trashFolderName
+ const entry = {
+ name: file,
+ type: stats.isDirectory() ? 'dir' : (stats.isFile() ? 'file' : null),
+ parentFolder: relFolder,
+ hasChildren: stats.isDirectory() ? fs.readdirSync(entryPath).length > 0 : false,
+ readable: false,
+ writeable: false,
+ trash: isTrash,
+ inTrash: inTrash
+ }
+ if (isTrash && !trashFound) {
+ trashFound = true;
+ }
+ try {
+ fs.accessSync(entryPath, fs.constants.R_OK)
+ entry.readable = true
+ } catch (err) {
+ }
+ // no write access in demo folder
+ if ((!mount || mount.writeable !== false) && !isTrash && !inTrash) {
+ try {
+ fs.accessSync(entryPath, fs.constants.W_OK)
+ entry.writeable = true
+ } catch (err) {
+ }
+ }
+ res.push(entry)
+ if (recursive === true) {
+ entry.children = this.__folderListing(entryPath, this.__getMount(entryPath), recursive)
+ }
+ } catch (err) {
+ // error accessing the entry -> do not add it to the resultset
+ }
+ })
+ if (fsPath.endsWith('/resource/config')) {
+ // add mounts
+ config.mounts.forEach(mount => {
+ res.push({
+ name: mount.mountPoint,
+ type: 'dir',
+ mounted: true,
+ parentFolder: '',
+ hasChildren: true,
+ readable: true,
+ writeable: mount.writeable !== false
+ });
+ })
+
+ if (!trashFound) {
+ // add trash folder even if it does not exist
+ res.push({
+ name: config.trashFolderName,
+ type: 'dir',
+ mounted: false,
+ parentFolder: '',
+ hasChildren: false,
+ readable: true,
+ writeable: false,
+ trash: true
+ });
+ }
+ }
+ return res
+ }
+
+ __getAbsolutePath(fsPath, mount) {
+ fsPath = this.__sanitize(fsPath)
+ if (mount) {
+ // remove mountPoint from requested path
+ fsPath = fsPath.substring(mount.mountPoint.length + 1)
+ return path.join(mount.path, fsPath);
+ }
+ return path.join(this.basePath, fsPath)
+ }
+
+ __sanitize(folder) {
+ while (folder.startsWith('../')) {
+ folder = folder.substring(3)
+ }
+ if (folder.startsWith('/')) {
+ folder = folder.substring(1);
+ }
+ return folder
+ }
+}
+
+const fsController = new FsController()
+
+module.exports = fsController
\ No newline at end of file
diff --git a/source/rest/controllers/HiddenConfigController.js b/source/rest/controllers/HiddenConfigController.js
new file mode 100644
index 00000000000..ae115c1e8de
--- /dev/null
+++ b/source/rest/controllers/HiddenConfigController.js
@@ -0,0 +1,132 @@
+const config = require('../config')
+const path = require('path')
+const fs = require('fs')
+const AbstractHandler = require('../lib/AbstractHandler')
+
+class HiddenConfigHandler extends AbstractHandler {
+ constructor() {
+ super()
+ this.configFile = path.join(config.configDir, 'hidden.php');
+ this.template = `
+`
+ this.valueRegex = /'([^']+)' => array\(([^)]*)\)/g
+ this.load()
+ }
+
+ load() {
+ this._entries = {};
+ let match
+ while ((match = this.valueRegex.exec(fs.readFileSync(this.configFile))) !== null) {
+ for (let i = 1, l = match.length; i < l; i++) {
+ eval('this._entries["' + match[1] + '"] = {' + match[2].replace(/ =>/g, ':') + '}')
+ }
+ }
+ }
+
+ dump() {
+ var data = []
+ Object.keys(this._entries).forEach(group => {
+ let line = `'${group}' => array(`;
+ line += Object.keys(this._entries[group]).map(key => {
+ return `'${key}' => '${this._entries[group][key]}'`
+ }).join(', ')
+ line += ')';
+ data.push(line)
+ })
+ const content = this.template.replace('###VALUES###', data.join(',\n '))
+ fs.writeFileSync(this.configFile, content)
+ }
+
+ getSection(name) {
+ if (name === '*') {
+ // return everything
+ return this._entries;
+ }
+ return this._entries.hasOwnProperty(name) ? this._entries[name] : null;
+ }
+
+ saveHiddenConfig(context) {
+ this._entries = {};
+ context.requestBody.forEach(section => {
+ if (section.name) {
+ this._entries[section.name] = section.options.reduce((map, obj) => {
+ if (obj.key) {
+ map[obj.key] = obj.value;
+ }
+ return map;
+ }, {});
+ }
+ })
+ this.dump();
+ this.respondMessage(context, 200, 'ok')
+ }
+
+ getHiddenConfig(context) {
+ const sectionName = context.params.path.section
+ const key = context.params.path.key
+ const section = this.getSection(sectionName)
+ if (section && (!key || section.hasOwnProperty(key))) {
+ if (!key) {
+ return section
+ } else {
+ return [section][key]
+ }
+ } else {
+ this.respondMessage(context, 404, 'Config option not found')
+ }
+ }
+
+ createHiddenConfig(context) {
+ const section = context.params.path.section
+ const key = context.params.path.key
+ // TODO: sanitize key / value
+ let value = context.requestBody
+ if (!this._entries.hasOwnProperty(section) || !this._entries[section].hasOwnProperty(key)) {
+ if (!this._entries.hasOwnProperty(section)) {
+ this._entries[section] = {}
+ }
+ this._entries[section][key] = value
+ this.dump()
+ } else {
+ this.respondMessage(context, 406, 'Config option already exists')
+ }
+ }
+
+ updateHiddenConfig(context) {
+ const section = context.params.path.section
+ const key = context.params.path.key
+ // TODO: sanitize key / value
+ let value = context.requestBody
+ if (this._entries.hasOwnProperty(section) && this._entries[section].hasOwnProperty(key)) {
+ this._entries[section][key] = value
+ this.dump()
+ } else {
+ this.respondMessage(context, 403, 'Config option not found')
+ }
+ }
+
+ deleteHiddenConfig(context) {
+ const section = context.params.path.section
+ const key = context.params.path.key
+ if (this._entries.hasOwnProperty(section)) {
+ if (key) {
+ delete this._entries[section][key]
+ } else {
+ // delete complete section
+ delete this._entries[section]
+ }
+ this.dump()
+ } else {
+ this.respondMessage(context, 403, 'Config option not found')
+ }
+ }
+}
+
+const configHandler = new HiddenConfigHandler()
+
+module.exports = configHandler
diff --git a/source/rest/index.js b/source/rest/index.js
new file mode 100644
index 00000000000..9a579d05ed6
--- /dev/null
+++ b/source/rest/index.js
@@ -0,0 +1,60 @@
+const express = require('express');
+const cors = require('cors');
+const exegesisExpress = require('exegesis-express');
+const http = require('http');
+const path = require('path');
+const multer = require('multer');
+const upload = multer();
+
+
+async function createServer() {
+ // See https://github.com/exegesis-js/exegesis/blob/master/docs/Options.md
+ const options = {
+ controllers: path.resolve(__dirname, './controllers'),
+ allowMissingControllers: false,
+ mimeTypeParsers: {
+ 'multipart/form-data': {
+ parseReq: upload.single('file')
+ }
+ }
+ };
+
+ // This creates an exgesis middleware, which can be used with express,
+ // connect, or even just by itself.
+ const exegesisMiddleware = await exegesisExpress.middleware(
+ path.resolve(__dirname, './openapi.yaml'),
+ options
+ );
+
+ const app = express();
+
+ // enable CORS
+ app.use(cors());
+
+ // If you have any body parsers, this should go before them.
+ app.use(exegesisMiddleware);
+
+ // Return a 404
+ app.use((req, res) => {
+ res.status(404).json({message: `No handler found`});
+ });
+
+ // Handle any unexpected errors
+ app.use((err, req, res, next) => {
+ res.status(500).json({message: `Internal error: ${err.message}`});
+ });
+
+ const server = http.createServer(app);
+
+ return server;
+}
+
+createServer()
+ .then(server => {
+ server.listen(3000);
+ console.log("Listening on port 3000");
+ })
+ .catch(err => {
+ console.error(err.stack);
+ process.exit(1);
+ });
\ No newline at end of file
diff --git a/source/rest/lib/AbstractHandler.js b/source/rest/lib/AbstractHandler.js
new file mode 100644
index 00000000000..9cc5f2e77b5
--- /dev/null
+++ b/source/rest/lib/AbstractHandler.js
@@ -0,0 +1,22 @@
+class AbstractHandler {
+
+ ok(context) {
+ this.respondMessage(context,200, 'Ok')
+ }
+
+ respondWithType(context, content, mimeType) {
+ context.res
+ .setStatus(200)
+ .set('content-type', mimeType)
+ .setBody(content);
+ }
+
+ respondMessage(context, status, message) {
+ context.res
+ .setStatus(status)
+ .set('content-type', 'application/json')
+ .setBody({message: message});
+ }
+}
+
+module.exports = AbstractHandler
diff --git a/source/rest/lib/FileHandler.js b/source/rest/lib/FileHandler.js
new file mode 100644
index 00000000000..a3f1da3c17f
--- /dev/null
+++ b/source/rest/lib/FileHandler.js
@@ -0,0 +1,261 @@
+const fs = require('fs-extra')
+const path = require('path')
+const config = require('../config')
+const CRC32 = require('crc-32')
+const AbstractHandler = require('./AbstractHandler')
+
+class FileHandler extends AbstractHandler {
+ constructor() {
+ super()
+ this.useTrash = true;
+ }
+
+ sendFile(context, file) {
+ if (file === null) {
+ this.respondMessage(context,404, 'File not found')
+ } else {
+ if (context.params.query.download) {
+ context.res.set('Content-Disposition', 'attachment; filename=' + path.basename(file));
+ }
+ this.respondWithType(context, fs.readFileSync(file), this.__getMimeTypeFromSuffix(file));
+ }
+ }
+
+ __getMimeTypeFromSuffix(fsPath) {
+ const suffix = fsPath.split('.').pop();
+ switch (suffix) {
+ case 'xml':
+ return 'text/xml';
+ case 'html':
+ return 'text/html';
+ case 'jpg':
+ case 'jpeg':
+ return 'image/jpg';
+ case 'png':
+ return 'image/png';
+ case 'gif':
+ return 'image/gif';
+ case 'js':
+ return 'text/javascript';
+ case 'php':
+ return 'application/x-httpd-php';
+ case 'css':
+ return 'text/css';
+ case 'svg':
+ return 'application/svg+xml';
+ default:
+ return 'text/plain';
+ }
+ }
+
+ /**
+ * Create a new file
+ * @param context {Context}
+ * @param file {String} path to file
+ * @param content
+ * @param options {Map}
+ */
+ createFile(context, file, content, options) {
+ if (fs.existsSync(file) && (!options || !options.force)) {
+ this.respondMessage(context,406, 'File already exists')
+ } else {
+ try {
+ this.__saveFile(file, content, context);
+ } catch (err) {
+ console.error(err)
+ this.respondMessage(context,405, err.toString())
+ }
+ }
+ }
+
+ createFolder(context, folder) {
+ if (fs.existsSync(folder)) {
+ this.respondMessage(context,406, 'Folder already exists')
+ } else {
+ try {
+ fs.mkdirSync(folder, {recursive: true})
+ this.ok(context)
+ } catch (err) {
+ console.error(err)
+ this.respondMessage(context,405, err.toString())
+ }
+ }
+ }
+
+ /**
+ * Update the content of an existing file
+ * @param context {Context}
+ * @param file {String} absolute path to file
+ * @param content {String} file context
+ */
+ updateFile(context, file, content) {
+ if (!fs.existsSync(file)) {
+ this.respondMessage(context,404, 'File not found')
+ } else {
+ try {
+ const dirname = path.dirname(file)
+ if (!fs.existsSync(dirname)) {
+ // create missing dirs first
+ fs.mkdirSync(dirname, {recursive: true})
+ }
+ this.__saveFile(file, content, context);
+ } catch (err) {
+ console.error(err)
+ this.respondMessage(context,405, err.toString())
+ }
+ }
+ }
+
+ rename(context, sourcePath, targetPath) {
+ try {
+ fs.renameSync(sourcePath, targetPath)
+ this.ok(context);
+ } catch (err) {
+ console.error(err)
+ this.respondMessage(context,405, err.toString())
+ }
+ }
+
+ __saveFile(file, content, context) {
+ const hash = context.params.query.hash;
+ if (hash) {
+ const contentHash = Buffer.isBuffer(content) ? CRC32.buf(content) : CRC32.str(content);
+ if (hash !== contentHash) {
+ // data has been corrupted during transport
+ this.respondMessage(context,405, 'data has been corrupted during transport')
+ return
+ }
+ let backupFilename;
+ const backupSuffix = Math.random();
+ const backup = config.backupOnChange.some(check => {
+ return check.test(file)
+ });
+ const fileExists = fs.existsSync(file);
+ if (backup && fileExists) {
+ // store permanent backup of existing file before change
+ const parts = path.basename(file).split('.')
+ const suffix = parts.pop();
+ backupFilename = parts.join('.') + '-'
+ + new Date().toISOString().split('.')[0].replace(/[\D]/g,'')
+ + '.' + suffix
+ ;
+ const target = path.join(config.backupFolder, backupFilename);
+ fs.copyFileSync(file, target);
+ }
+ if (fileExists) {
+ // 1. create backup of existing file (this is just a temporary backup
+ fs.copyFileSync(file, file + backupSuffix);
+ }
+ // 2. write new content
+ fs.writeFileSync(file, content)
+ // 3. check hash of written file
+ const writtenContent = fs.readFileSync(file, {encoding: 'utf-8'})
+ const newHash = CRC32.str(writtenContent)
+ if (newHash !== contentHash) {
+ // something went wrong -> restore old file content
+ if (fileExists) {
+ fs.copyFileSync(file + backupSuffix, file);
+ if (backupFilename) {
+ // no changes no need for backup file
+ fs.unlinkSync(backupFilename);
+ }
+ }
+ this.respondMessage(context,405, 'hash mismatch on written content')
+ } else {
+ // ok delete backup file
+ this.ok(context)
+ }
+ if (fileExists) {
+ fs.unlinkSync(file + backupSuffix);
+ }
+ } else {
+ fs.writeFileSync(file, content)
+ this.ok(context)
+ }
+ }
+
+ /**
+ * Delete a file from filesystem by either moving it to the trash folder or deleting it directly.
+ * @param context {Context}
+ * @param file {String} absolute path to file that should be deleted
+ * @param force {Boolean} if true delete directly, no mosing to trash
+ */
+ deleteFile(context, file, force) {
+ if (!fs.existsSync(file)) {
+ // nothing to do
+ return this.ok(context)
+ }
+ try {
+ if (this.useTrash === true && !file.startsWith(config.trashFolder)) {
+ const relDir = path.dirname(file).substring(config.configDir.length)
+ const filename = path.basename(file)
+ if (!fs.existsSync(config.trashFolder)) {
+ fs.mkdirSync(config.trashFolder)
+ }
+ const trashFile = path.join(config.trashFolder, relDir, filename)
+ if (fs.existsSync(trashFile)) {
+ // delete old trash file with same name
+ fs.unlinkSync(trashFile)
+ }
+ fs.renameSync(file, trashFile)
+ } else {
+ fs.unlinkSync(file)
+ }
+ this.ok(context)
+ } catch (err) {
+ console.error(err)
+ this.respondMessage(context,405, err.toString())
+ }
+ }
+
+ deleteFolder(context, folder, force) {
+ if (!fs.existsSync(folder)) {
+ // nothing to do
+ return this.ok(context)
+ }
+ try {
+ if (this.useTrash === true && !folder.startsWith(config.trashFolder)) {
+ const relDir = folder.substring(config.configDir.length)
+ if (!fs.existsSync(config.trashFolder)) {
+ fs.mkdirSync(config.trashFolder)
+ }
+ const baseTrashFile = path.join(config.trashFolder, relDir)
+ let trashFile = baseTrashFile
+ let index = 1
+ while (fs.existsSync(trashFile)) {
+ trashFile = baseTrashFile + '-' + index++
+ }
+ fs.renameSync(folder, trashFile)
+ } else {
+ if (force === true || fs.readdirSync(folder).length === 0) {
+ fs.removeSync(folder)
+ } else {
+ this.respondMessage(context,406, 'Folder not empty')
+ }
+ }
+ this.ok(context)
+ } catch (err) {
+ console.error(err)
+ this.respondMessage(context,405, err.toString())
+ }
+ }
+
+
+ /**
+ * Returns false if accessing the filesystem item is not allowed (no read, update, delete, create).
+ * The main purpose of this method is to prevent access to hidden files.
+ *
+ * @param fsPath {String} path
+ * @param item {String} file name
+ * @returns {boolean} true if access is allowed
+ */
+ static checkAccess(fsPath, item) {
+ if (!item) {
+ item = path.basename(fsPath)
+ fsPath = path.dirname(fsPath)
+ }
+ return item === config.trashFolderName || !(item.startsWith('.') || (item === 'hidden.php' && fsPath === config.configDir));
+ }
+}
+
+module.exports = FileHandler
\ No newline at end of file
diff --git a/source/rest/lib/InfluxClient.js b/source/rest/lib/InfluxClient.js
new file mode 100644
index 00000000000..6288b2b199b
--- /dev/null
+++ b/source/rest/lib/InfluxClient.js
@@ -0,0 +1,84 @@
+const request = require('request-promise-native')
+const configHandler = require('../controllers/HiddenConfigController')
+
+class InfluxClient {
+ constructor() {
+ configHandler.load();
+ }
+
+ /**
+ *
+ * @param query {String}
+ * @param db {String} database name
+ * @param influxKey {String}
+ * @returns {Promise}
+ */
+ query(query, db, influxKey) {
+ if (db) {
+ db = '&db=' + db
+ } else {
+ db = ''
+ }
+
+ let opts = {
+ url: 'http://localhost:8086/query'
+ }
+
+ if (!influxKey) {
+ influxKey = 'influx'
+ }
+
+ const influxConfig = configHandler.getSection(influxKey)
+
+ if (influxConfig) {
+ if (influxConfig.hasOwnProperty('uri')) {
+ opts.url = influxConfig.uri;
+ }
+
+ opts.headers = {
+ 'Authorization': 'Basic ' + Buffer.from(influxConfig.user + ':' + influxConfig.pass).toString('base64')
+ }
+
+ if (influxConfig.hasOwnProperty('selfsigned') && influxConfig.selfsigned === true) {
+ opts.rejectUnauthorized = false
+ opts.requestCert = true
+ opts.agent = false
+ }
+ }
+ opts.url += '?q=' + encodeURIComponent(query) + db
+ return request.get(opts)
+ }
+
+ getSeries(database, measurement, influxKey) {
+ const measurements = {};
+ let query = 'SHOW SERIES';
+ if (measurement) {
+ query += ' FROM ' + measurement
+ }
+ return this.query(query, database, influxKey).then(seriesRes => {
+ const series = JSON.parse(seriesRes).results[0].series[0].values;
+ if (series) {
+ series.forEach(serie => {
+ const list = serie[0].split(',');
+ const measurement = list.shift();
+ if( !measurements.hasOwnProperty(measurement)) {
+ measurements[measurement] = [];
+ }
+
+ list.forEach(tag => {
+ const tagKV = tag.split('=')
+ if (!measurements[measurement].hasOwnProperty(tagKV[0])) {
+ measurements[measurement][tagKV[0]] = {};
+ }
+ measurements[measurement][tagKV[0]][tagKV[1]] = 1 // fake set operation
+ })
+ })
+ }
+ return measurements
+ })
+ }
+}
+
+const influxClient = new InfluxClient()
+
+module.exports = influxClient
\ No newline at end of file
diff --git a/source/rest/openapi.yaml b/source/rest/openapi.yaml
new file mode 100644
index 00000000000..bc1e00bfb1b
--- /dev/null
+++ b/source/rest/openapi.yaml
@@ -0,0 +1,494 @@
+openapi: 3.0.1
+info:
+ description: ''
+ version: 1.0.0
+ title: CometVisu Manager backend
+tags:
+ - name: fs
+ description: Filesystem handling
+ - name: config
+ description: Configuration and Settings
+ - name: dataprovider
+ description: Dataproviders for config editor.
+paths:
+ '/fs/check':
+ get:
+ tags:
+ - fs
+ summary: Check filesystem environment (access rights, etc)
+ operationId: checkEnvironment
+ x-exegesis-controller: FsController
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CheckResponse'
+ '/fs/move':
+ put:
+ tags:
+ - fs
+ summary: Move folder or file to a new place
+ parameters:
+ - name: src
+ in: query
+ description: current path of the filesystem entry
+ required: true
+ schema:
+ type: string
+ - name: target
+ in: query
+ description: new path of the filesystem entry
+ required: true
+ schema:
+ type: string
+ operationId: move
+ x-exegesis-controller: FsController
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '404':
+ description: Source does not exist
+ '405':
+ description: Error occurred
+ '406':
+ description: Target does exist
+ '/fs':
+ parameters:
+ - name: path
+ in: query
+ description: Relative path inside the config folder
+ required: true
+ schema:
+ type: string
+ - name: hash
+ in: query
+ description: CRC32 hash value of the file content
+ required: false
+ schema:
+ type: number
+ get:
+ tags:
+ - fs
+ summary: Return directory listing or file content
+ description: Returns a list of files/directories if the requested path pointed to a directory or the content of the file otherwise
+ parameters:
+ - name: download
+ in: query
+ description: should the file be downloaded?
+ required: false
+ schema:
+ type: boolean
+ - name: recursive
+ in: query
+ description: also include all sub-folders in the directory listing
+ required: false
+ schema:
+ type: boolean
+ operationId: read
+ x-exegesis-controller: FsController
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ReadResponse'
+ text/*:
+ schema:
+ type: string
+ '403':
+ description: Not allowed
+ '404':
+ description: Path not found
+ post:
+ tags:
+ - fs
+ parameters:
+ - name: type
+ in: query
+ description: type to create (file or folder)
+ required: true
+ schema:
+ type: string
+ enum: ['dir', 'file']
+ summary: Create a new file or folder on the host
+ description: ''
+ operationId: create
+ x-exegesis-controller: FsController
+ requestBody:
+ description: Content of the file (empty when creating folder)
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ file:
+ type: string
+ format: binary
+ filename:
+ type: string
+ description: filename to use (if it should be another one than the original filename)
+ force:
+ type: boolean
+ description: replace existing file
+ text/*:
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '406':
+ description: File exists
+ put:
+ tags:
+ - fs
+ summary: Update an existing file
+ description: ''
+ operationId: update
+ x-exegesis-controller: FsController
+ requestBody:
+ description: Content of the file
+ required: true
+ content:
+ text/*:
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '406':
+ description: File does not exist
+ delete:
+ tags:
+ - fs
+ parameters:
+ - name: force
+ in: query
+ description: force deletion of non empty folders
+ required: false
+ schema:
+ type: boolean
+ summary: Deletes a file/folder
+ description: ''
+ operationId: delete
+ x-exegesis-controller: FsController
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '404':
+ description: File/Folder not found
+ '406':
+ description: Folder not empty
+ '/config/hidden':
+ put:
+ tags:
+ - config
+ summary: Save the hidden config
+ operationId: saveHiddenConfig
+ x-exegesis-controller: HiddenConfigController
+ requestBody:
+ description: Complete config content
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HiddenConfig'
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '404':
+ description: Config option does not exist
+ '/config/hidden/{section}/{key}':
+ parameters:
+ - name: section
+ in: path
+ description: Section of the config option
+ schema:
+ type: string
+ - name: key
+ in: path
+ description: Key (ID) of the config option in the section
+ required: true
+ schema:
+ type: string
+ get:
+ tags:
+ - config
+ summary: Provides the value of a config option
+ operationId: getHiddenConfig
+ x-exegesis-controller: HiddenConfigController
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/HiddenConfig'
+ - $ref: '#/components/schemas/ConfigSection'
+ - $ref: '#/components/schemas/ConfigOption'
+ '403':
+ description: Not allowed
+ '404':
+ description: Config option does not exist
+ put:
+ tags:
+ - config
+ summary: Changes the value of an existing config option
+ operationId: updateHiddenConfig
+ x-exegesis-controller: HiddenConfigController
+ requestBody:
+ description: Value of the config option
+ required: true
+ content:
+ text/plain:
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '404':
+ description: Config option does not exist
+ post:
+ tags:
+ - config
+ summary: Creates a new config option
+ operationId: createHiddenConfig
+ x-exegesis-controller: HiddenConfigController
+ requestBody:
+ description: Value of the config option
+ required: true
+ content:
+ text/plain:
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '406':
+ description: Config option does exist
+ delete:
+ tags:
+ - config
+ summary: Delete config option
+ operationId: deleteHiddenConfig
+ x-exegesis-controller: HiddenConfigController
+ responses:
+ '200':
+ description: successful operation
+ '403':
+ description: Not allowed
+ '404':
+ description: Config option does not exist
+ /data/designs:
+ get:
+ tags:
+ - dataprovider
+ summary: Returns the list of available designs.
+ operationId: getDesigns
+ x-exegesis-controller: DataProviderController
+ responses:
+ 200:
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ type: string
+ /data/addresses:
+ get:
+ tags:
+ - dataprovider
+ summary: Returns the list of available addresses.
+ operationId: getAddresses
+ x-exegesis-controller: DataProviderController
+ responses:
+ 200:
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DataProviderResponse'
+ /data/rrds:
+ get:
+ tags:
+ - dataprovider
+ summary: Returns the list of available RRDs.
+ operationId: getRRDs
+ x-exegesis-controller: DataProviderController
+ responses:
+ 200:
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DataProviderResponse'
+ /data/influxdbs:
+ get:
+ tags:
+ - dataprovider
+ parameters:
+ - name: auth
+ in: query
+ schema:
+ type: string
+ summary: Returns the list of available influx databases.
+ operationId: getInfluxDBs
+ x-exegesis-controller: DataProviderController
+ responses:
+ 200:
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DataProviderResponse'
+ /data/influxdbfields:
+ get:
+ tags:
+ - dataprovider
+ parameters:
+ - name: auth
+ in: query
+ schema:
+ type: string
+ - name: measurement
+ in: query
+ schema:
+ type: string
+ summary: Returns the list of available influx database fields.
+ operationId: getInfluxDBFields
+ x-exegesis-controller: DataProviderController
+ responses:
+ 200:
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DataProviderResponse'
+ '406':
+ description: wrong measurement parameter
+ /data/influxdbtags:
+ get:
+ tags:
+ - dataprovider
+ parameters:
+ - name: auth
+ in: query
+ schema:
+ type: string
+ - name: measurement
+ in: query
+ schema:
+ type: string
+ summary: Returns the list of available influx database tags.
+ operationId: getInfluxDBTags
+ x-exegesis-controller: DataProviderController
+ responses:
+ 200:
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DataProviderResponse'
+ '406':
+ description: wrong measurement parameter
+components:
+ schemas:
+ DataProviderResponse:
+ type: array
+ items:
+ $ref: '#/components/schemas/DataProviderEntry'
+ DataProviderEntry:
+ type: object
+ properties:
+ value:
+ type: string
+ label:
+ type: string
+ ReadResponse:
+ oneOf:
+ - $ref: '#/components/schemas/DirContent'
+ DirContent:
+ type: array
+ items:
+ $ref: '#/components/schemas/FsEntry'
+ HiddenConfig:
+ type: array
+ items:
+ $ref: '#/components/schemas/ConfigSection'
+ ConfigSection:
+ type: object
+ properties:
+ name:
+ type: string
+ options:
+ type: array
+ items:
+ $ref: '#/components/schemas/ConfigOption'
+ CheckResponse:
+ type: array
+ items:
+ $ref: '#/components/schemas/EnvironmentState'
+ EnvironmentState:
+ type: object
+ properties:
+ entity:
+ type: string
+ state:
+ type: number
+ description: bitmask with a list of states
+ ConfigOption:
+ type: object
+ properties:
+ key:
+ type: string
+ value:
+ type: string
+ FsEntry:
+ type: object
+ properties:
+ name:
+ type: string
+ type:
+ type: string
+ enum: ['dir', 'file']
+ parentFolder:
+ type: string
+ hasChildren:
+ type: boolean
+ readable:
+ type: boolean
+ default: false
+ writeable:
+ type: boolean
+ default: false
+ mounted:
+ type: boolean
+ default: false
+ trash:
+ type: boolean
+ description: marks the trash folder
+ default: false
+ hash:
+ type: number
+ description: hash value for file content (CRC32)
+externalDocs:
+ description: Find out more about CometVisu
+ url: 'https://www.cometvisu.org'
diff --git a/source/rest/package-lock.json b/source/rest/package-lock.json
new file mode 100644
index 00000000000..52f72a879cc
--- /dev/null
+++ b/source/rest/package-lock.json
@@ -0,0 +1,660 @@
+{
+ "name": "rest",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/chai": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz",
+ "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA=="
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "ajv": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "body-parser": {
+ "version": "1.18.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "~1.6.3",
+ "iconv-lite": "0.4.23",
+ "on-finished": "~2.3.0",
+ "qs": "6.5.2",
+ "raw-body": "2.3.3",
+ "type-is": "~1.6.16"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-freeze": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz",
+ "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "events-listener": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz",
+ "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g=="
+ },
+ "exegesis": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-1.3.0.tgz",
+ "integrity": "sha512-RXZlSc++jl7VYPqOriWDt2AkaeGdZ2KN6XwIebYCE+e0ccyXZyxZvnF1woXevNrF3OvJPadfUrSqhj7WiKRUvQ==",
+ "requires": {
+ "ajv": "^6.6.1",
+ "body-parser": "^1.18.2",
+ "content-type": "^1.0.4",
+ "deep-freeze": "0.0.1",
+ "events-listener": "^1.1.0",
+ "glob": "^7.1.2",
+ "json-ptr": "^1.1.0",
+ "json-schema-ref-parser": "^6.0.0",
+ "json-schema-traverse": "^0.4.0",
+ "lodash": "^4.17.5",
+ "openapi3-ts": "^1.1.0",
+ "promise-breaker": "^4.1.11",
+ "pump": "^3.0.0",
+ "qs": "^6.5.2",
+ "raw-body": "^2.3.3",
+ "semver": "^5.5.0"
+ }
+ },
+ "exegesis-express": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-1.0.0.tgz",
+ "integrity": "sha512-lA0DQmqEJhpiBEI8DEEdteltL7BjCItFNNSc1FXYd9TR8VZ4FAcwSm2dVwEJdLmhroQxEj5scFB466KmuY3WAw==",
+ "requires": {
+ "@types/chai": "^4.1.3",
+ "exegesis": "^1.0.0"
+ }
+ },
+ "express": {
+ "version": "4.16.4",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.3",
+ "content-disposition": "0.5.2",
+ "content-type": "~1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.1.1",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.4",
+ "qs": "6.5.2",
+ "range-parser": "~1.2.0",
+ "safe-buffer": "5.1.2",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "statuses": "~1.4.0",
+ "type-is": "~1.6.16",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.4.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "format-util": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz",
+ "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU="
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ipaddr.js": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+ "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
+ },
+ "js-yaml": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
+ "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-ptr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-1.1.1.tgz",
+ "integrity": "sha512-AGCtezsBJDtAvh6XP4afC7+EifV4nCJnnUC1lqxBSvu3EGqAtnRz6s1PpsYJqLNCAYsZ1NojXvbga0TIzJyO/w=="
+ },
+ "json-schema-ref-parser": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz",
+ "integrity": "sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==",
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "js-yaml": "^3.12.1",
+ "ono": "^4.0.11"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+ },
+ "mime-db": {
+ "version": "1.38.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
+ "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg=="
+ },
+ "mime-types": {
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
+ "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
+ "requires": {
+ "mime-db": "~1.38.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "ono": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz",
+ "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==",
+ "requires": {
+ "format-util": "^1.0.3"
+ }
+ },
+ "openapi3-ts": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-1.2.0.tgz",
+ "integrity": "sha512-oWRW8aI58UPD1ufx54y4QOCwqdQPedCRBKmqgwRUtetz4+NUJD2opWn3a0Te4yLzlFdf9eGinrKvc3uvD2Wegw=="
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "promise-breaker": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-4.1.13.tgz",
+ "integrity": "sha512-+lGBqmBEgyvKweIrK4smdN1YxdYp5YjSL1us2XhTMBbZf98jdeGys/Edt5S1b1NXMVRQrvh4DrMgGpYPbXZf3g=="
+ },
+ "proxy-addr": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.8.0"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz",
+ "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA=="
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "raw-body": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+ "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
+ "unpipe": "1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "type-is": {
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.18"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ }
+ }
+}
diff --git a/source/rest/package.json b/source/rest/package.json
new file mode 100644
index 00000000000..48c90198e1e
--- /dev/null
+++ b/source/rest/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "rest",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "cors": "^2.8.5",
+ "exegesis-express": "^1.0.0",
+ "express": "^4.16.4"
+ }
+}
diff --git a/source/translation/de.po b/source/translation/de.po
index 505f64fc369..fc51a7d75dc 100644
--- a/source/translation/de.po
+++ b/source/translation/de.po
@@ -4,65 +4,68 @@ msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: you@your.org\n"
"POT-Creation-Date: 2017-04-26 18:57+0100\n"
-"PO-Revision-Date: 2017-04-26 18:57+0100\n"
+"PO-Revision-Date: 2019-04-15 18:49+0200\n"
"Last-Translator: you \n"
"Language-Team: Team \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.1\n"
-#: cv/Application.js:187
+#: cv/Application.js:230
msgid "Please describe what you have done until the error occured?"
msgstr ""
"Bitte beschreiben, was Sie gemacht haben bis der Fehler aufgetreten ist."
-#: cv/Application.js:254
+#: cv/Application.js:297
msgid "An error occured"
msgstr "Ein Fehler ist aufgetreten"
-#: cv/Application.js:260
+#: cv/Application.js:303
msgid "Enable on reload:"
msgstr "Aktivieren beim neu Laden:"
-#: cv/Application.js:265
+#: cv/ui/manager/Main.js:706 cv/Application.js:308
msgid "Reload"
msgstr "Neu laden"
-#: cv/Application.js:297
+#: cv/Application.js:340
msgid "Please do not forget to attach the downloaded Logfile to this ticket."
msgstr ""
"Bitte vergessen Sie nicht, die heruntergeladenen Log-Datei an dieses Ticket "
"zu hängen."
-#: cv/Application.js:304
+#: cv/Application.js:347
msgid "Action recording"
msgstr "Benutzerinteraktionen aufzeichnen"
-#: cv/Application.js:315
+#: cv/Application.js:358
msgid "Send error to sentry.io"
msgstr "Fehlerbericht an sentry.io schicken"
-#: cv/Application.js:329
+#: cv/Application.js:372
msgid "Error reporting (on sentry.io)"
msgstr "Absturzberichte senden (an sentry.io)"
-#: cv/TemplateEngine.js:252
+#: cv/TemplateEngine.js:259
msgid "Connection error"
msgstr "Verbindungsfehler"
-#: cv/TemplateEngine.js:261
+#: cv/TemplateEngine.js:268
msgid "Error requesting %1: %2 - %3."
msgstr "Fehler beim Laden von %1: %2 - %3."
-#: cv/TemplateEngine.js:263
+#: cv/TemplateEngine.js:270
msgid "Connection to backend is lost."
msgstr "Verbindung zum Backend verloren."
-#: cv/TemplateEngine.js:278 cv/TemplateEngine.js:293
+#: cv/TemplateEngine.js:285 cv/TemplateEngine.js:300
msgid "CometVisu protocol error"
msgstr "CometVisu Protokollfehler"
-#: cv/TemplateEngine.js:279
+#: cv/TemplateEngine.js:286
msgid ""
"The backend did send an invalid response to the %1Login%2 request: missing "
"protocol version."
@@ -70,29 +73,51 @@ msgstr ""
"Das Backend hat eine ungültige Antwort auf die %1Login%2-Anfrage geschickt: "
"Fehlende Protokollversion."
-#: cv/TemplateEngine.js:282 cv/TemplateEngine.js:297
+#: cv/TemplateEngine.js:289 cv/TemplateEngine.js:304
msgid "Please try to fix the problem in the backend."
msgstr "Bitte versuchen Sie das Problem im Backend zu lösen."
-#: cv/TemplateEngine.js:283 cv/TemplateEngine.js:298
+#: cv/TemplateEngine.js:290 cv/TemplateEngine.js:305
msgid "Backend-Response:"
msgstr "Antwort des Backends:"
-#: cv/TemplateEngine.js:294
+#: cv/TemplateEngine.js:301
msgid ""
-"The backend did send an invalid response to a %1read%2 request: Missing "
-"\"i\" value."
+"The backend did send an invalid response to a %1read%2 request: Missing \"i"
+"\" value."
msgstr ""
+"Das Backend hat eine ungültige Antwort auf eine %1read%2-Anfrage gesendet: "
+"Fehlender \"i\" Wert."
+
+#: cv/io/rest/Client.js:173
+msgid "Backend does not respond!"
+msgstr "Backend antwortet nicht!"
+
+#: cv/io/rest/Client.js:183 cv/ui/manager/editor/AbstractEditor.js:115
+msgid "File has been saved"
+msgstr "Datei wurde gespeichert"
+
+#: cv/io/rest/Client.js:192
+msgid "Error saving file"
+msgstr "Fehler beim Speichern der Datei"
+
+#: cv/parser/MetaParser.js:365
+msgid "Template loading error"
+msgstr "Fehler beim Laden des Templates"
+
+#: cv/parser/MetaParser.js:368
+msgid "Template '%1' could not be loaded from '%2'."
+msgstr "Template '%1' konnte nicht geladen werden von '%2'."
#: cv/plugins/openhab/Settings.js:174
msgid ""
"The CometVisu seems to be delivered by a proxied webserver. Changing "
-"configuration values might not have the expected effect. Please proceed only"
-" if you know what you are doing."
+"configuration values might not have the expected effect. Please proceed "
+"only if you know what you are doing."
msgstr ""
-"Die CometVisu scheint über einen Proxy ausgeliefert zu werden. Änderungen an"
-" den Einstellungen könnten deshalb nicht den gewünschten Effekt habe.Bitte "
-"führen Sie daher nur Änderungen durch, wenn Sie wissen was Sie tun."
+"Die CometVisu scheint über einen Proxy ausgeliefert zu werden. Änderungen "
+"an den Einstellungen könnten deshalb nicht den gewünschten Effekt habe."
+"Bitte führen Sie daher nur Änderungen durch, wenn Sie wissen was Sie tun."
#: cv/plugins/openhab/Settings.js:212
msgid "openHAB backend settings"
@@ -102,61 +127,475 @@ msgstr "openHAB Backend Einstellungen"
msgid "Cancel"
msgstr "Abbruch"
-#: cv/plugins/openhab/Settings.js:232
+#: cv/ui/manager/MenuBar.js:68 cv/plugins/openhab/Settings.js:232
msgid "Save"
msgstr "Speichern"
-#: cv/ui/NotificationCenter.js:227
+#: cv/ui/NotificationCenter.js:237
msgid "Delete all"
msgstr "Alle löschen"
-#: cv/ui/NotificationCenter.js:227
+#: cv/ui/NotificationCenter.js:237
msgid "Message center"
msgstr "Nachrichtenzentrale"
+#: cv/ui/manager/Main.js:118
+msgid "config folder does not exists"
+msgstr "config Ordner existiert nicht"
+
+#: cv/ui/manager/Main.js:120
+msgid "config folder is not readable"
+msgstr "config Ordner kann nicht gelesen werden"
+
+#: cv/ui/manager/Main.js:122
+msgid "config folder is not writeable"
+msgstr "config Ordner ist nicht schreibbar"
+
+#: cv/ui/manager/Main.js:128
+msgid "backup folder is not writeable"
+msgstr "backup Ordner ist nicht schreibbar"
+
+#: cv/ui/manager/Main.js:134
+msgid "media folder is not writeable"
+msgstr "media Ordner ist nicht schreibbar"
+
+#: cv/ui/manager/Main.js:168
+msgid "Cannot load config template"
+msgstr "Template für Konfigurationsdatei kann nicht geladen werden"
+
+#: cv/ui/manager/Main.js:316
+msgid "Cannot open file: \"%1\""
+msgstr "Datei \"%1\" kann nicht geöffnet werden"
+
+#: cv/ui/manager/Main.js:456
+msgid "Do you really want to clear the trash?"
+msgstr "Mächten Sie den Papirtkorb wirklich leeren?"
+
+#: cv/ui/manager/Main.js:459
+msgid "Do you really want to delete this file from the trash?"
+msgstr "Möchten Sie diese Datei wirklich aus dem Papierkorb entfernen?"
+
+#: cv/ui/manager/Main.js:460
+msgid "Do you really want to delete this folder from the trash?"
+msgstr "Möchten Sie diesen Ordner wirklich aus dem Papierkorb entfernen?"
+
+#: cv/ui/manager/Main.js:463
+msgid "Do you really want to delete this file?"
+msgstr "Möchten Sie diese Datei wirklich löschen?"
+
+#: cv/ui/manager/Main.js:464
+msgid "Do you really want to delete this folder?"
+msgstr "Möchten Sie diesen Ordner wirklich löschen?"
+
+#: cv/ui/manager/Main.js:470
+msgid "Confirm deletion"
+msgstr "Löschen bestätigen"
+
+#: cv/ui/manager/Main.js:498
+msgid ""
+"Please enter the name of the new configuration (without \"visu_config_\" at "
+"the beginning and \".xml\" at the end)"
+msgstr ""
+"Bitte geben Sie den Namen der neuen Konfigurationsdatei ein (ohne "
+"\"visu_config_\" am Anfang und \".xml\" am Ende)"
+
+#: cv/ui/manager/Main.js:499
+msgid "A configuration with this name already exists."
+msgstr "Eine Konfigurationsdatei mit diesem Namen existiert bereits."
+
+#: cv/ui/manager/Main.js:501
+msgid "Please enter the file name."
+msgstr "Bitte geben Sie den Dateinamen ein."
+
+#: cv/ui/manager/Main.js:502
+msgid "A file with this name already exists."
+msgstr "Eine Datei mit diesem Namen exisitert bereits."
+
+#: cv/ui/manager/Main.js:504
+msgid "Please enter the folder name."
+msgstr "Bitte geben Sie den Namen des Ordners ein."
+
+#: cv/ui/manager/Main.js:505
+msgid "A folder with this name already exists."
+msgstr "Eine Ordner mit diesem Namen exisitert bereits."
+
+#: cv/ui/manager/contextmenu/FileItem.js:225 cv/ui/manager/Main.js:674
+msgid "Download"
+msgstr "Herunterladen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:243 cv/ui/manager/Main.js:693
+msgid "Validate"
+msgstr "Prüfen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:205 cv/ui/manager/MenuBar.js:45
+msgid "New file"
+msgstr "Neue Datei"
+
+#: cv/ui/manager/contextmenu/FileItem.js:209 cv/ui/manager/MenuBar.js:50
+msgid "New folder"
+msgstr "Neuer Ordner"
+
+#: cv/ui/manager/MenuBar.js:56
+msgid "New config file"
+msgstr "Neue Konfigurationsdatei"
+
+#: cv/ui/manager/MenuBar.js:62
+msgid "Upload file"
+msgstr "Datei hochladen"
+
+#: cv/ui/manager/MenuBar.js:74
+msgid "Save as..."
+msgstr "Speichern unter..."
+
+#: cv/ui/manager/contextmenu/FileItem.js:56
+#: cv/ui/manager/contextmenu/FileItem.js:126
+#: cv/ui/manager/contextmenu/FileItem.js:218 cv/ui/manager/MenuBar.js:79
+msgid "Delete"
+msgstr "Löschen"
+
+#: cv/ui/manager/MenuBar.js:85
+msgid "Close file"
+msgstr "Datei schlie0en"
+
+#: cv/ui/manager/MenuBar.js:91
+msgid "Quit"
+msgstr "Beenden"
+
+#: cv/ui/manager/MenuBar.js:98
+msgid "Ctrl+Z"
+msgstr "Strg+Z"
+
+#: cv/ui/manager/MenuBar.js:98
+msgid "Undo"
+msgstr "Rückgängig"
+
+#: cv/ui/manager/MenuBar.js:103
+msgid "Ctrl+Y"
+msgstr "Strg+Y"
+
+#: cv/ui/manager/MenuBar.js:103
+msgid "Redo"
+msgstr "Wiederholen"
+
+#: cv/ui/manager/MenuBar.js:108
+msgid "Ctrl+X"
+msgstr "Strg+X"
+
+#: cv/ui/manager/MenuBar.js:108
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: cv/ui/manager/MenuBar.js:114
+msgid "Copy"
+msgstr "Kopieren"
+
+#: cv/ui/manager/MenuBar.js:114
+msgid "Ctrl+C"
+msgstr "Strg+C"
+
+#: cv/ui/manager/MenuBar.js:119
+msgid "Ctrl+V"
+msgstr "Strg+V"
+
+#: cv/ui/manager/MenuBar.js:119
+msgid "Paste"
+msgstr "Einfügen"
+
+#: cv/ui/manager/MenuBar.js:124 cv/ui/manager/model/FileItem.js:81
+#: cv/ui/manager/editor/Config.js:26
+msgid "Hidden configuration"
+msgstr "Versteckte Konfiguration"
+
+#: cv/ui/manager/MenuBar.js:131
+msgid "Use text editor"
+msgstr "Texteditor benutzen"
+
+#: cv/ui/manager/MenuBar.js:142
+msgid "Use xml editor"
+msgstr "XML-Editor benutzen"
+
+#: cv/ui/manager/MenuBar.js:153
+msgid "Enable quick preview"
+msgstr "Schnellvorschau aktivieren"
+
+#: cv/ui/manager/MenuBar.js:161
+msgid "Expert mode"
+msgstr "Expertenansicht"
+
+#: cv/ui/manager/MenuBar.js:260
+msgid "CometVisu Manager"
+msgstr "CometVisu Manager"
+
+#: cv/ui/manager/MenuBar.js:265
+msgid "File"
+msgstr "Datei"
+
+#: cv/ui/manager/MenuBar.js:270
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: cv/ui/manager/MenuBar.js:275
+msgid "New"
+msgstr "Neu"
+
+#: cv/ui/manager/MenuBar.js:279
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: cv/ui/manager/Start.js:124
+msgid "Configurations"
+msgstr "Konfigurationen"
+
+#: cv/ui/manager/Start.js:149
+msgid "Demo configurations"
+msgstr "Demo Konfigurationen"
+
+#: cv/ui/manager/Start.js:173
+msgid "Media files"
+msgstr "Mediendateien"
+
+#: cv/ui/manager/Start.js:189
+msgid "Miscellaneous"
+msgstr "Sonstiges"
+
+#: cv/ui/manager/contextmenu/FileItem.js:55
+msgid "Clear"
+msgstr "Leeren"
+
+#: cv/ui/manager/contextmenu/FileItem.js:78
+msgid "Backup from %1"
+msgstr "Sicherung vom %1"
+
+#: cv/ui/manager/contextmenu/FileItem.js:213
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:230
+msgid "Open"
+msgstr "Öffnen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:237
+msgid "Restore"
+msgstr "Wiederherstellen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:249
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:261
+msgid "Compare with..."
+msgstr "Vergleichen mit..."
+
+#: cv/ui/manager/contextmenu/FileItem.js:265
+msgid "Open with..."
+msgstr "Öffnen mit..."
+
+#: cv/ui/manager/editor/AbstractEditor.js:103
+#: cv/ui/manager/control/FileController.js:39
+msgid "File has been created"
+msgstr "Datei wurde erstellt"
+
+#: cv/ui/manager/control/FileController.js:40
+msgid "Folder has been created"
+msgstr "Verzeichnis wurde erstellt"
+
+#: cv/ui/manager/control/FileController.js:54
+msgid "File has been renamed"
+msgstr "Datei wurde umbenannt"
+
+#: cv/ui/manager/control/FileController.js:55
+msgid "Folder has been renamed"
+msgstr "Verzeichnis wurde umbenannt"
+
+#: cv/ui/manager/control/FileController.js:77
+msgid "File has been moved"
+msgstr "Datei wurde verschoben"
+
+#: cv/ui/manager/control/FileController.js:78
+msgid "Folder has been moved"
+msgstr "Order wurde verschoben"
+
+#: cv/ui/manager/control/FileController.js:100
+msgid "File has been restored"
+msgstr "Datei wurde wiederhergestellt"
+
+#: cv/ui/manager/control/FileController.js:101
+msgid "Folder has been restored"
+msgstr "Ornder wurde wiederhergestellt"
+
+#: cv/ui/manager/control/FileController.js:125
+msgid "Trash has been cleared"
+msgstr "Der Papierkorb wurde geleert"
+
+#: cv/ui/manager/control/FileController.js:128
+msgid "File has been removed from trash"
+msgstr "Die Datei wurde aus dem Papierkorb entfernt"
+
+#: cv/ui/manager/control/FileController.js:129
+msgid "Folder has been removed from trash"
+msgstr "Der Ordner wurde aus dem Papierkorb entfernt"
+
+#: cv/ui/manager/control/FileController.js:132
+msgid "File has been deleted"
+msgstr "Datei wurde gelöscht"
+
+#: cv/ui/manager/control/FileController.js:133
+msgid "Folder has been deleted"
+msgstr "Verzeichnis wurde gelöscht"
+
+#: cv/ui/manager/control/FileController.js:171
+msgid "Validating %1"
+msgstr "Prüfe %1"
+
+#: cv/ui/manager/control/FileController.js:176
+msgid "%1 has no errors!"
+msgstr "%1 hat keine Fehler!"
+
+#: cv/ui/manager/control/FileController.js:184
+msgid "%1 error found in %2!"
+msgid_plural "%1 errors found in %2!"
+msgstr[0] "%1 Fehler gefunden in %2!"
+msgstr[1] "%1 Fehler gefunden in %2!"
+
+#: cv/ui/manager/editor/Config.js:125
+msgid "Add section"
+msgstr "Sektion hinzufügen"
+
+#: cv/ui/manager/editor/Diff.js:24
+msgid "File compare"
+msgstr "Datei vergleichen"
+
+#: cv/ui/manager/editor/Source.js:46
+msgid "Texteditor"
+msgstr "Texteditor"
+
+#: cv/ui/manager/editor/Xml.js:27
+msgid "Xml-editor"
+msgstr "XML-Editor"
+
+#: cv/ui/manager/editor/completion/Config.js:408
+msgid "Variable from template %1"
+msgstr "Variable aus Template %1"
+
+#: cv/ui/manager/form/OptionListItem.js:130
+msgid "Delete option"
+msgstr "Option löschen"
+
+#: cv/ui/manager/form/OptionListItem.js:139
+msgid "Add option"
+msgstr "Option hinzufügen"
+
+#: cv/ui/manager/form/OptionListItem.js:147
+msgid "Key"
+msgstr "Schlüssel"
+
+#: cv/ui/manager/form/OptionListItem.js:153
+msgid "Value"
+msgstr "Wert"
+
+#: cv/ui/manager/form/SectionListItem.js:105
+msgid "Section"
+msgstr "Sektion"
+
+#: cv/ui/manager/form/SectionListItem.js:120
+msgid "Delete section"
+msgstr "Sektion löschen"
+
+#: cv/ui/manager/model/CompareFiles.js:75
+msgid "Diff: %1"
+msgstr "Vergleich: %1"
+
+#: cv/ui/manager/tree/VirtualFsItem.js:83
+msgid "Trash"
+msgstr "Papierkorb"
+
+#: cv/ui/manager/upload/UploadMgr.js:86
+msgid "This file already exists, do you want to replace it?"
+msgstr "Diese Datei existiert bereits, möchten Sie sie überschreiben?"
+
+#: cv/ui/manager/upload/UploadMgr.js:90
+msgid "File already exists"
+msgstr "Diese Datei existiert bereits"
+
+#: cv/ui/manager/upload/UploadMgr.js:94
+msgid "Uploading this file is not allowed here."
+msgstr "Das Hochladen der Datei ist an dieser Stelle nicht erleubt."
+
+#: cv/ui/manager/upload/UploadMgr.js:104
+msgid "File upload stopped with an error: %1"
+msgstr "Das Hochladen der Datei wurde mit einem Fehler beendet: %1"
+
+#: cv/ui/manager/upload/UploadMgr.js:108
+msgid "File has been uploaded"
+msgstr "Die Datei wurde hochgeladen"
+
+#: cv/ui/manager/viewer/Config.js:37
+msgid "Config viewer"
+msgstr "Konfiguration anzeigen"
+
+#: cv/ui/manager/viewer/Config.js:57
+msgid "%1 is no configuration file"
+msgstr "%1 ist keine Konfigurationsdatei"
+
+#: cv/ui/manager/viewer/Folder.js:40
+msgid "Show folder"
+msgstr "Ordner anzeigen"
+
+#: cv/ui/manager/viewer/Folder.js:235
+msgid "Filter by name..."
+msgstr "Nach Namen filtern..."
+
+#: cv/ui/manager/viewer/Icons.js:14
+msgid "Show icons"
+msgstr "Icons anzeigen"
+
+#: cv/ui/manager/viewer/Image.js:36
+msgid "Show image"
+msgstr "Bild anzeigen"
+
#: cv/ui/structure/pure/Unknown.js:88
msgid "unknown: %1"
msgstr "Unbekannt: %1"
-#: cv/util/ConfigLoader.js:169
+#: cv/util/ConfigLoader.js:172
msgid "Config-File Error!"
msgstr "Fehler in Konfigurations-Datei!"
-#: cv/util/ConfigLoader.js:173
+#: cv/util/ConfigLoader.js:176
msgid "Invalid config file!"
msgstr "Ungültige Konfigurations-Datei!"
-#: cv/util/ConfigLoader.js:173
+#: cv/util/ConfigLoader.js:176
msgid "Please check!"
msgstr "Bitte prüfen!"
-#: cv/util/ConfigLoader.js:181
+#: cv/util/ConfigLoader.js:184
msgid "Config file has wrong library version!"
msgstr "Konfigurations-Datei hat die falsche 'library' Version"
-#: cv/util/ConfigLoader.js:182
+#: cv/util/ConfigLoader.js:185
msgid "This can cause problems with your configuration"
msgstr "Das kann Probleme in Ihrer Konfiguration verursachen"
-#: cv/util/ConfigLoader.js:183
+#: cv/util/ConfigLoader.js:186
msgid "You can run the %1Configuration Upgrader%2."
msgstr "Sie können den %1Konfigurations-Upgrader%2 laufen lassen."
-#: cv/util/ConfigLoader.js:184
+#: cv/util/ConfigLoader.js:187
msgid ""
"Or you can start without upgrading %1with possible configuration problems%2"
msgstr ""
"Oder Sie starten ohne Upgrade %1mit möglichen Konfigurations-Problemen%2"
-#: cv/util/ConfigLoader.js:187
+#: cv/util/ConfigLoader.js:190
msgid ""
-"404: Config file not found. Neither as normal config (%1) nor as demo config"
-" (%2)."
+"404: Config file not found. Neither as normal config (%1) nor as demo "
+"config (%2)."
msgstr ""
"404: Konfigurations-Datei nicht gefunden. Weder als normale Konfiguration "
"(%1) noch als Demo-Konfiguration (%2)"
-#: cv/util/ConfigLoader.js:190
+#: cv/util/ConfigLoader.js:193
msgid "Unhandled error of type \"%1\""
msgstr "Unbekannter Fehler vom Typ \"%1\""
@@ -172,14 +611,17 @@ msgstr "Date %1 konnte nicht geladen werden"
msgid "File loading error"
msgstr "Datei-Ladefehler"
-#~ msgid "Enable error reporting"
-#~ msgstr ""
+#~ msgid "Edit hidden config"
+#~ msgstr "Versteckte Konfiguration bearbeiten"
+
+#~ msgid "Enable error sending on reload"
+#~ msgstr "Neu laden mit aktiviertem Senden von Fehlerberichten"
#~ msgid "Enable reporting on reload"
#~ msgstr "Neu laden mit aktivierter Aufzeichnung"
-#~ msgid "Enable error sending on reload"
-#~ msgstr "Neu laden mit aktiviertem Senden von Fehlerberichten"
+#~ msgid "Entries"
+#~ msgstr "Einträge"
#~ msgid "Report Bug"
#~ msgstr "Fehler berichten"
diff --git a/source/translation/en.po b/source/translation/en.po
index bbb218d55bf..2922e90cf91 100644
--- a/source/translation/en.po
+++ b/source/translation/en.po
@@ -11,74 +11,94 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: cv/Application.js:187
+#: cv/Application.js:230
msgid "Please describe what you have done until the error occured?"
msgstr ""
-#: cv/Application.js:254
+#: cv/Application.js:297
msgid "An error occured"
msgstr ""
-#: cv/Application.js:260
+#: cv/Application.js:303
msgid "Enable on reload:"
msgstr ""
-#: cv/Application.js:265
+#: cv/ui/manager/Main.js:706 cv/Application.js:308
msgid "Reload"
msgstr ""
-#: cv/Application.js:297
+#: cv/Application.js:340
msgid "Please do not forget to attach the downloaded Logfile to this ticket."
msgstr ""
-#: cv/Application.js:304
+#: cv/Application.js:347
msgid "Action recording"
msgstr ""
-#: cv/Application.js:315
+#: cv/Application.js:358
msgid "Send error to sentry.io"
msgstr ""
-#: cv/Application.js:329
+#: cv/Application.js:372
msgid "Error reporting (on sentry.io)"
msgstr ""
-#: cv/TemplateEngine.js:252
+#: cv/TemplateEngine.js:259
msgid "Connection error"
msgstr ""
-#: cv/TemplateEngine.js:261
+#: cv/TemplateEngine.js:268
msgid "Error requesting %1: %2 - %3."
msgstr ""
-#: cv/TemplateEngine.js:263
+#: cv/TemplateEngine.js:270
msgid "Connection to backend is lost."
msgstr ""
-#: cv/TemplateEngine.js:278 cv/TemplateEngine.js:293
+#: cv/TemplateEngine.js:285 cv/TemplateEngine.js:300
msgid "CometVisu protocol error"
msgstr ""
-#: cv/TemplateEngine.js:279
+#: cv/TemplateEngine.js:286
msgid ""
"The backend did send an invalid response to the %1Login%2 request: missing "
"protocol version."
msgstr ""
-#: cv/TemplateEngine.js:282 cv/TemplateEngine.js:297
+#: cv/TemplateEngine.js:289 cv/TemplateEngine.js:304
msgid "Please try to fix the problem in the backend."
msgstr ""
-#: cv/TemplateEngine.js:283 cv/TemplateEngine.js:298
+#: cv/TemplateEngine.js:290 cv/TemplateEngine.js:305
msgid "Backend-Response:"
msgstr ""
-#: cv/TemplateEngine.js:294
+#: cv/TemplateEngine.js:301
msgid ""
"The backend did send an invalid response to a %1read%2 request: Missing "
"\"i\" value."
msgstr ""
+#: cv/io/rest/Client.js:173
+msgid "Backend does not respond!"
+msgstr ""
+
+#: cv/io/rest/Client.js:183 cv/ui/manager/editor/AbstractEditor.js:115
+msgid "File has been saved"
+msgstr ""
+
+#: cv/io/rest/Client.js:192
+msgid "Error saving file"
+msgstr ""
+
+#: cv/parser/MetaParser.js:365
+msgid "Template loading error"
+msgstr ""
+
+#: cv/parser/MetaParser.js:368
+msgid "Template '%1' could not be loaded from '%2'."
+msgstr ""
+
#: cv/plugins/openhab/Settings.js:174
msgid ""
"The CometVisu seems to be delivered by a proxied webserver. Changing "
@@ -94,58 +114,470 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#: cv/plugins/openhab/Settings.js:232
+#: cv/ui/manager/MenuBar.js:68 cv/plugins/openhab/Settings.js:232
msgid "Save"
msgstr ""
-#: cv/ui/NotificationCenter.js:227
+#: cv/ui/NotificationCenter.js:237
msgid "Delete all"
msgstr ""
-#: cv/ui/NotificationCenter.js:227
+#: cv/ui/NotificationCenter.js:237
msgid "Message center"
msgstr ""
+#: cv/ui/manager/Main.js:118
+msgid "config folder does not exists"
+msgstr ""
+
+#: cv/ui/manager/Main.js:120
+msgid "config folder is not readable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:122
+msgid "config folder is not writeable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:128
+msgid "backup folder is not writeable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:134
+msgid "media folder is not writeable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:168
+msgid "Cannot load config template"
+msgstr ""
+
+#: cv/ui/manager/Main.js:316
+msgid "Cannot open file: \"%1\""
+msgstr ""
+
+#: cv/ui/manager/Main.js:456
+msgid "Do you really want to clear the trash?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:459
+msgid "Do you really want to delete this file from the trash?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:460
+msgid "Do you really want to delete this folder from the trash?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:463
+msgid "Do you really want to delete this file?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:464
+msgid "Do you really want to delete this folder?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:470
+msgid "Confirm deletion"
+msgstr ""
+
+#: cv/ui/manager/Main.js:498
+msgid ""
+"Please enter the name of the new configuration (without \"visu_config_\" at "
+"the beginning and \".xml\" at the end)"
+msgstr ""
+
+#: cv/ui/manager/Main.js:499
+msgid "A configuration with this name already exists."
+msgstr ""
+
+#: cv/ui/manager/Main.js:501
+msgid "Please enter the file name."
+msgstr ""
+
+#: cv/ui/manager/Main.js:502
+msgid "A file with this name already exists."
+msgstr ""
+
+#: cv/ui/manager/Main.js:504
+msgid "Please enter the folder name."
+msgstr ""
+
+#: cv/ui/manager/Main.js:505
+msgid "A folder with this name already exists."
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:225 cv/ui/manager/Main.js:674
+msgid "Download"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:243 cv/ui/manager/Main.js:693
+msgid "Validate"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:205 cv/ui/manager/MenuBar.js:45
+msgid "New file"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:209 cv/ui/manager/MenuBar.js:50
+msgid "New folder"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:56
+msgid "New config file"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:62
+msgid "Upload file"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:74
+msgid "Save as..."
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:56
+#: cv/ui/manager/contextmenu/FileItem.js:126
+#: cv/ui/manager/contextmenu/FileItem.js:218 cv/ui/manager/MenuBar.js:79
+msgid "Delete"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:85
+msgid "Close file"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:91
+msgid "Quit"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:98
+msgid "Ctrl+Z"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:98
+msgid "Undo"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:103
+msgid "Ctrl+Y"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:103
+msgid "Redo"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:108
+msgid "Ctrl+X"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:108
+msgid "Cut"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:114
+msgid "Copy"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:114
+msgid "Ctrl+C"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:119
+msgid "Ctrl+V"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:119
+msgid "Paste"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:124 cv/ui/manager/model/FileItem.js:81
+#: cv/ui/manager/editor/Config.js:26
+msgid "Hidden configuration"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:131
+msgid "Use text editor"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:142
+msgid "Use xml editor"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:153
+msgid "Enable quick preview"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:161
+msgid "Expert mode"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:260
+msgid "CometVisu Manager"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:265
+msgid "File"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:270
+msgid "Edit"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:275
+msgid "New"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:279
+msgid "Preferences"
+msgstr ""
+
+#: cv/ui/manager/Start.js:124
+msgid "Configurations"
+msgstr ""
+
+#: cv/ui/manager/Start.js:149
+msgid "Demo configurations"
+msgstr ""
+
+#: cv/ui/manager/Start.js:173
+msgid "Media files"
+msgstr ""
+
+#: cv/ui/manager/Start.js:189
+msgid "Miscellaneous"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:55
+msgid "Clear"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:78
+msgid "Backup from %1"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:213
+msgid "Rename"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:230
+msgid "Open"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:237
+msgid "Restore"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:249
+msgid "Replace"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:261
+msgid "Compare with..."
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:265
+msgid "Open with..."
+msgstr ""
+
+#: cv/ui/manager/editor/AbstractEditor.js:103
+#: cv/ui/manager/control/FileController.js:39
+msgid "File has been created"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:40
+msgid "Folder has been created"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:54
+msgid "File has been renamed"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:55
+msgid "Folder has been renamed"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:77
+msgid "File has been moved"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:78
+msgid "Folder has been moved"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:100
+msgid "File has been restored"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:101
+msgid "Folder has been restored"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:125
+msgid "Trash has been cleared"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:128
+msgid "File has been removed from trash"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:129
+msgid "Folder has been removed from trash"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:132
+msgid "File has been deleted"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:133
+msgid "Folder has been deleted"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:171
+msgid "Validating %1"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:176
+msgid "%1 has no errors!"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:184
+msgid "%1 error found in %2!"
+msgid_plural "%1 errors found in %2!"
+msgstr[0] ""
+msgstr[1] ""
+
+#: cv/ui/manager/editor/Config.js:125
+msgid "Add section"
+msgstr ""
+
+#: cv/ui/manager/editor/Diff.js:24
+msgid "File compare"
+msgstr ""
+
+#: cv/ui/manager/editor/Source.js:46
+msgid "Texteditor"
+msgstr ""
+
+#: cv/ui/manager/editor/Xml.js:27
+msgid "Xml-editor"
+msgstr ""
+
+#: cv/ui/manager/editor/completion/Config.js:408
+msgid "Variable from template %1"
+msgstr ""
+
+#: cv/ui/manager/form/OptionListItem.js:130
+msgid "Delete option"
+msgstr ""
+
+#: cv/ui/manager/form/OptionListItem.js:139
+msgid "Add option"
+msgstr ""
+
+#: cv/ui/manager/form/OptionListItem.js:147
+msgid "Key"
+msgstr ""
+
+#: cv/ui/manager/form/OptionListItem.js:153
+msgid "Value"
+msgstr ""
+
+#: cv/ui/manager/form/SectionListItem.js:105
+msgid "Section"
+msgstr ""
+
+#: cv/ui/manager/form/SectionListItem.js:120
+msgid "Delete section"
+msgstr ""
+
+#: cv/ui/manager/model/CompareFiles.js:75
+msgid "Diff: %1"
+msgstr ""
+
+#: cv/ui/manager/tree/VirtualFsItem.js:83
+msgid "Trash"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:86
+msgid "This file already exists, do you want to replace it?"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:90
+msgid "File already exists"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:94
+msgid "Uploading this file is not allowed here."
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:104
+msgid "File upload stopped with an error: %1"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:108
+msgid "File has been uploaded"
+msgstr ""
+
+#: cv/ui/manager/viewer/Config.js:37
+msgid "Config viewer"
+msgstr ""
+
+#: cv/ui/manager/viewer/Config.js:57
+msgid "%1 is no configuration file"
+msgstr ""
+
+#: cv/ui/manager/viewer/Folder.js:40
+msgid "Show folder"
+msgstr ""
+
+#: cv/ui/manager/viewer/Folder.js:235
+msgid "Filter by name..."
+msgstr ""
+
+#: cv/ui/manager/viewer/Icons.js:14
+msgid "Show icons"
+msgstr ""
+
+#: cv/ui/manager/viewer/Image.js:36
+msgid "Show image"
+msgstr ""
+
#: cv/ui/structure/pure/Unknown.js:88
msgid "unknown: %1"
msgstr ""
-#: cv/util/ConfigLoader.js:169
+#: cv/util/ConfigLoader.js:172
msgid "Config-File Error!"
msgstr ""
-#: cv/util/ConfigLoader.js:173
+#: cv/util/ConfigLoader.js:176
msgid "Invalid config file!"
msgstr ""
-#: cv/util/ConfigLoader.js:173
+#: cv/util/ConfigLoader.js:176
msgid "Please check!"
msgstr ""
-#: cv/util/ConfigLoader.js:181
+#: cv/util/ConfigLoader.js:184
msgid "Config file has wrong library version!"
msgstr ""
-#: cv/util/ConfigLoader.js:182
+#: cv/util/ConfigLoader.js:185
msgid "This can cause problems with your configuration"
msgstr ""
-#: cv/util/ConfigLoader.js:183
+#: cv/util/ConfigLoader.js:186
msgid "You can run the %1Configuration Upgrader%2."
msgstr ""
-#: cv/util/ConfigLoader.js:184
+#: cv/util/ConfigLoader.js:187
msgid ""
"Or you can start without upgrading %1with possible configuration problems%2"
msgstr ""
-#: cv/util/ConfigLoader.js:187
+#: cv/util/ConfigLoader.js:190
msgid ""
"404: Config file not found. Neither as normal config (%1) nor as demo config"
" (%2)."
msgstr ""
-#: cv/util/ConfigLoader.js:190
+#: cv/util/ConfigLoader.js:193
msgid "Unhandled error of type \"%1\""
msgstr ""
@@ -161,13 +593,19 @@ msgstr ""
msgid "File loading error"
msgstr ""
+#~ msgid "Edit hidden config"
+#~ msgstr ""
+
#~ msgid "Enable error reporting"
#~ msgstr ""
+#~ msgid "Enable error sending on reload"
+#~ msgstr ""
+
#~ msgid "Enable reporting on reload"
#~ msgstr ""
-#~ msgid "Enable error sending on reload"
+#~ msgid "Entries"
#~ msgstr ""
#~ msgid "Report Bug"
diff --git a/utils/merge-font-map.py b/utils/merge-font-map.py
new file mode 100755
index 00000000000..d46c00c77b0
--- /dev/null
+++ b/utils/merge-font-map.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+
+import json
+
+
+def merge(meta_json, json_file, copy=True):
+ with open(json_file) as fs:
+ map = json.loads(fs.read())
+ inv_map = {v: k for k, v in map.iteritems()}
+ new_mapping = {}
+ with open(meta_json, 'r+') as fm:
+ meta = json.loads(fm.read())
+ for key, value in meta['mapping'].items():
+ if key[0:3] == "uni":
+ hex = key[3:].lower()
+ if hex in inv_map:
+ new_mapping[inv_map[hex]] = value
+ else:
+ new_mapping[key] = value
+ else:
+ new_mapping[key] = value
+
+ meta['mapping'] = new_mapping
+ if copy is True:
+ with open('test.meta', 'w') as f:
+ f.write(json.dumps(meta))
+ else:
+ fm.truncate()
+ fm.seek(0)
+ fm.write(json.dumps(meta))
+
+
+if __name__ == '__main__':
+ merge(
+ './external/qx-iconfont-material/source/resource/iconfont/material/MaterialIcons-Regular.meta',
+ './external/qx-iconfont-material/source/resource/iconfont/material/MaterialIcons-Regular.json',
+ False
+ )
\ No newline at end of file