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/DEVELOPMENT.md b/DEVELOPMENT.md
index 23efe529112..0ddf1b0ab5f 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -9,7 +9,8 @@ Preparation
The new build system requires python2 and grunt. Also you have to run `npm install` once,
because at least the build-task (explained later) includes a grunt task which minifies included
-external dependencies.
+external dependencies. If you want to use the REST API backend included in the CometVisu you
+have to run `grunt composer:rest:install` to load the external dependencies for the PHP code.
After cloning the sources or updating from 0.10.x you have to do the following steps once:
diff --git a/Gruntfile.js b/Gruntfile.js
index 478a508efca..04b3f47872f 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -516,6 +516,14 @@ module.exports = function(grunt) {
dest: 'build/resource/libs'
}]
}
+ },
+ composer : {
+ rest: {
+ options : {
+ flags: ['prefer-dist', 'no-dev'],
+ cwd: 'source/rest/cv'
+ }
+ }
}
};
grunt.initConfig(config);
@@ -642,12 +650,13 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-shell');
grunt.loadNpmTasks('grunt-scaffold');
grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-composer');
// Default task runs all code checks, updates the banner and builds the release
grunt.registerTask('buildicons', ['clean:iconcache', 'svgmin', 'svgstore', 'handle-kuf-svg']);
grunt.registerTask('release-build', [ 'release-cv', 'release-client' ]);
grunt.registerTask('release-cv', [
- 'updateicons', 'shell:lint', 'clean', 'file-creator', 'buildicons', 'shell:build',
+ 'updateicons', 'shell:lint', 'clean', 'file-creator', 'buildicons', 'composer:rest:install', 'shell:build',
'update-demo-config', 'chmod', 'shell:buildToRelease', 'compress:tar', 'compress:zip' ]);
grunt.registerTask('release-client', ['shell:buildClient', 'rename-client-build']);
diff --git a/config.json b/config.json
index c457a9a071b..bd7258d4039 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"
]
},
@@ -163,7 +165,8 @@
"version",
"library_version.inc.php",
"manifest.json",
- "../node_modules/monaco-editor"
+ "../node_modules/monaco-editor",
+ "rest/cv"
]
}
},
@@ -172,7 +175,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 +217,7 @@
{
// "verifier-bombs-on-error" : false,
// "separate-loader" : true,
+ "i18n-as-parts": true,
"parts" :
{
"boot" :
@@ -213,6 +233,10 @@
"include": [ "${APPLICATION}.ui.structure.pure.*" ]
},
+ "manager": {
+ "include": [ "${APPLICATION}.ui.manager.Main" ]
+ },
+
"plugin-diagram" :
{
"include" : [ "${APPLICATION}.plugins.diagram.*" ]
@@ -283,7 +307,7 @@
},
"plugin-openhab" :
{
- "include" : [ "${APPLICATION}.plugins.openhab.*", "${QXTHEME}" ]
+ "include" : [ "${APPLICATION}.plugins.openhab.*" ]
}
}
}
@@ -520,6 +544,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..79685e11685 160000
--- a/external/qooxdoo
+++ b/external/qooxdoo
@@ -1 +1 @@
-Subproject commit 69366cee89bca5972bf0b7350bfe85ec7f4f5ba0
+Subproject commit 79685e11685a2c8953210380af6cf00060d9a8b8
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 f6d5910bcaf..e286107ef51 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,66 +5,66 @@
"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.7.1",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.7.1.tgz",
+ "integrity": "sha512-K0x1XhsHS8PPdtlVOLrKZyYvi5Vexs9WApdd214bO6KaGF296gJvH1mG8XOY0+7aA5i2A7T3ttcaJNDYS49lzw==",
"requires": {
- "@sentry/core": "4.3.4",
- "@sentry/types": "4.3.4",
- "@sentry/utils": "4.3.4",
+ "@sentry/core": "5.7.1",
+ "@sentry/types": "5.7.1",
+ "@sentry/utils": "5.7.1",
"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.7.1",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.7.1.tgz",
+ "integrity": "sha512-AOn3k3uVWh2VyajcHbV9Ta4ieDIeLckfo7UMLM+CTk2kt7C89SayDGayJMSsIrsZlL4qxBoLB9QY4W2FgAGJrg==",
+ "requires": {
+ "@sentry/hub": "5.7.1",
+ "@sentry/minimal": "5.7.1",
+ "@sentry/types": "5.7.1",
+ "@sentry/utils": "5.7.1",
"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.7.1",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.7.1.tgz",
+ "integrity": "sha512-evGh323WR073WSBCg/RkhlUmCQyzU0xzBzCZPscvcoy5hd4SsLE6t9Zin+WACHB9JFsRQIDwNDn+D+pj3yKsig==",
"requires": {
- "@sentry/types": "4.3.4",
- "@sentry/utils": "4.3.4",
+ "@sentry/types": "5.7.1",
+ "@sentry/utils": "5.7.1",
"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.7.1",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.7.1.tgz",
+ "integrity": "sha512-nS/Dg+jWAZtcxQW8wKbkkw4dYvF6uyY/vDiz/jFCaux0LX0uhgXAC9gMOJmgJ/tYBLJ64l0ca5LzpZa7BMJQ0g==",
"requires": {
- "@sentry/hub": "4.3.4",
- "@sentry/types": "4.3.4",
+ "@sentry/hub": "5.7.1",
+ "@sentry/types": "5.7.1",
"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.7.1",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz",
+ "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ=="
},
"@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.7.1",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.7.1.tgz",
+ "integrity": "sha512-nhirUKj/qFLsR1i9kJ5BRvNyzdx/E2vorIsukuDrbo8e3iZ11JMgCOVrmC8Eq9YkHBqgwX4UnrPumjFyvGMZ2Q==",
"requires": {
- "@sentry/types": "4.3.4",
+ "@sentry/types": "5.7.1",
"tslib": "^1.9.3"
}
},
"@types/node": {
- "version": "6.14.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.2.tgz",
- "integrity": "sha512-JWB3xaVfsfnFY8Ofc9rTB/op0fqqTSqy4vBcVk1LuRJvta7KTX+D//fCkiTMeLGhdr2EbFZzQjC97gvmPilk9Q==",
+ "version": "12.12.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.5.tgz",
+ "integrity": "sha512-KEjODidV4XYUlJBF3XdjSH5FWoMCtO0utnhtdLf1AgeuZLOrRbvmU/gaRCVg7ZaQDjVf3l84egiY0mRNe5xE4A==",
"dev": true
},
"@types/q": {
@@ -86,13 +86,13 @@
"dev": true
},
"accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"dev": true,
"requires": {
- "mime-types": "~2.1.18",
- "negotiator": "0.6.1"
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
}
},
"adm-zip": {
@@ -117,9 +117,9 @@
}
},
"ajv": {
- "version": "6.5.5",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
- "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
@@ -137,7 +137,7 @@
},
"ansi-escapes": {
"version": "1.4.0",
- "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
"integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
"dev": true
},
@@ -148,21 +148,37 @@
"dev": true
},
"ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
+ "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"
+ }
},
"anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "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
+ }
}
},
+ "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",
@@ -183,12 +199,11 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true,
- "optional": true
+ "dev": true
},
"archiver": {
"version": "1.3.0",
- "resolved": "http://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
"integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
"dev": true,
"requires": {
@@ -204,41 +219,42 @@
},
"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.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.14"
}
},
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"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"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "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",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "string_decoder": {
+ "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": {
- "brace-expansion": "^1.1.7"
+ "safe-buffer": "~5.1.0"
}
}
}
@@ -257,39 +273,34 @@
"readable-stream": "^2.0.0"
},
"dependencies": {
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"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"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "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
- },
- "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",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "string_decoder": {
+ "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": {
- "brace-expansion": "^1.1.7"
+ "safe-buffer": "~5.1.0"
}
}
}
@@ -299,10 +310,41 @@
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
- "optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"argparse": {
@@ -312,38 +354,22 @@
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
+ },
+ "dependencies": {
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ }
}
},
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
"array-find-index": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
"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",
@@ -359,12 +385,6 @@
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
"dev": true
},
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
"arraybuffer.slice": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
@@ -378,13 +398,10 @@
"dev": true
},
"asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
+ "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
+ "dev": true
},
"assert": {
"version": "1.4.1",
@@ -396,15 +413,9 @@
}
},
"assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
+ "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
"dev": true
},
"async": {
@@ -413,16 +424,10 @@
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
"dev": true
},
- "async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
- "dev": true
- },
"async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
"asynckit": {
@@ -431,12 +436,6 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
"aws-sign": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz",
@@ -444,10 +443,11 @@
"dev": true
},
"aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
+ "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
+ "dev": true,
+ "optional": true
},
"aws4": {
"version": "1.8.0",
@@ -467,67 +467,6 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "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
- }
- }
- },
"base64-arraybuffer": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
@@ -535,9 +474,9 @@
"dev": true
},
"base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"dev": true
},
"base64id": {
@@ -586,9 +525,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": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
"dev": true
},
"bl": {
@@ -599,6 +538,38 @@
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"blob": {
@@ -607,16 +578,6 @@
"integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
"dev": true
},
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "dev": true,
- "optional": true,
- "requires": {
- "inherits": "~2.0.0"
- }
- },
"blocking-proxy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz",
@@ -635,37 +596,59 @@
}
},
"bluebird": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz",
- "integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
+ "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
"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"
}
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "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
}
}
},
@@ -677,7 +660,7 @@
},
"boom": {
"version": "0.4.2",
- "resolved": "http://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
"integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
"dev": true,
"requires": {
@@ -703,47 +686,27 @@
}
},
"braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "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"
- }
- }
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
}
},
"browserstack": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz",
- "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz",
+ "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==",
"dev": true,
"requires": {
"https-proxy-agent": "^2.2.1"
}
},
"buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
- "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
+ "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
"dev": true,
"requires": {
"base64-js": "^1.0.2",
@@ -778,76 +741,63 @@
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
- "builtin-modules": {
+ "buffer-from": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
+ "busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
"requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.x"
}
},
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
"dev": true
},
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
"camelcase-keys": {
"version": "2.1.0",
- "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dev": true,
"requires": {
"camelcase": "^2.0.0",
"map-obj": "^1.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- }
}
},
"caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
"dev": true
},
"chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
}
},
"chardet": {
@@ -870,6 +820,18 @@
"parse5": "^3.0.1"
},
"dependencies": {
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
"dom-serializer": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
@@ -880,71 +842,55 @@
"entities": "^1.1.1"
}
},
- "domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
"dev": true
}
}
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
+ "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.1",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.2.0"
+ },
+ "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": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
- "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
"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",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "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": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
@@ -960,13 +906,67 @@
"integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=",
"dev": true
},
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
"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
+ }
}
},
"code-point-at": {
@@ -981,16 +981,6 @@
"integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=",
"dev": true
},
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -1007,37 +997,25 @@
"dev": true
},
"colors": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz",
- "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"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",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
"dev": true,
"requires": {
- "delayed-stream": "~1.0.0"
+ "delayed-stream": "0.0.5"
}
},
"commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
},
"component-bind": {
"version": "1.0.0",
@@ -1067,6 +1045,38 @@
"crc32-stream": "^2.0.0",
"normalize-path": "^2.0.0",
"readable-stream": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"concat-map": {
@@ -1075,6 +1085,46 @@
"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"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
"config-chain": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
@@ -1086,29 +1136,28 @@
}
},
"connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
"utils-merge": "1.0.1"
}
},
"connect-livereload": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.0.tgz",
- "integrity": "sha1-+fAJh0rWg3GDr7FwtMTjhXodfOs=",
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz",
+ "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==",
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true,
- "optional": true
+ "dev": true
},
"content-type": {
"version": "1.0.4",
@@ -1128,23 +1177,10 @@
"integrity": "sha1-vJon1OK5fhhs1XyeIGPLmfpozMw=",
"dev": true
},
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "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==",
- "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",
@@ -1165,15 +1201,6 @@
"request": "2.79.0"
},
"dependencies": {
- "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"
- }
- },
"assert-plus": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
@@ -1188,34 +1215,49 @@
},
"boom": {
"version": "2.10.1",
- "resolved": "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
"hoek": "2.x.x"
}
},
- "caseless": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
- "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
- "dev": true
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
},
"cryptiles": {
"version": "2.0.5",
- "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"requires": {
"boom": "2.x.x"
}
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
"esprima": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
},
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
"form-data": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
@@ -1227,18 +1269,6 @@
"mime-types": "^2.1.12"
}
},
- "har-validator": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
- "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
- "dev": true,
- "requires": {
- "chalk": "^1.1.1",
- "commander": "^2.9.0",
- "is-my-json-valid": "^2.12.4",
- "pinkie-promise": "^2.0.0"
- }
- },
"hawk": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
@@ -1278,6 +1308,12 @@
"esprima": "^2.6.0"
}
},
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
"log-driver": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz",
@@ -1338,7 +1374,7 @@
},
"sntp": {
"version": "1.0.9",
- "resolved": "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"requires": {
@@ -1359,6 +1395,12 @@
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
"integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
"dev": true
+ },
+ "uuid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+ "dev": true
}
}
},
@@ -1371,6 +1413,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",
@@ -1379,6 +1430,38 @@
"requires": {
"crc": "^3.4.4",
"readable-stream": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"cross-spawn": {
@@ -1390,32 +1473,11 @@
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
- "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^3.0.2"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
}
},
"cryptiles": {
"version": "0.2.2",
- "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
"integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=",
"dev": true,
"requires": {
@@ -1423,15 +1485,15 @@
}
},
"css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+ "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
"dev": true,
"requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
+ "boolbase": "^1.0.0",
+ "css-what": "^2.1.2",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
}
},
"css-select-base-adapter": {
@@ -1450,16 +1512,10 @@
"source-map": "^0.5.3"
}
},
- "css-url-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
- "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
- "dev": true
- },
"css-what": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
- "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
"dev": true
},
"csso": {
@@ -1473,7 +1529,7 @@
},
"ctype": {
"version": "0.5.3",
- "resolved": "http://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
"integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=",
"dev": true
},
@@ -1499,13 +1555,21 @@
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
- }
- },
- "date-format": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
- "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
- "dev": true
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "date-format": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz",
+ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==",
+ "dev": true
},
"dateformat": {
"version": "1.0.12",
@@ -1532,20 +1596,14 @@
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
"decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
"dev": true,
"optional": true,
"requires": {
- "mimic-response": "^1.0.0"
+ "mimic-response": "^2.0.0"
}
},
"deep-extend": {
@@ -1571,56 +1629,9 @@
},
"dependencies": {
"object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
- "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==",
- "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==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
}
}
@@ -1641,17 +1652,16 @@
}
},
"delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
+ "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
"dev": true
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true,
- "optional": true
+ "dev": true
},
"depd": {
"version": "1.1.2",
@@ -1666,11 +1676,10 @@
"dev": true
},
"detect-libc": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz",
- "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=",
- "dev": true,
- "optional": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true
},
"di": {
"version": "0.0.1",
@@ -1678,6 +1687,15 @@
"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"
+ }
+ },
"divhide": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/divhide/-/divhide-2.0.1.tgz",
@@ -1708,33 +1726,27 @@
}
},
"dom-serializer": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz",
+ "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
"dev": true,
"requires": {
- "domelementtype": "~1.1.1",
- "entities": "~1.1.1"
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
},
"dependencies": {
"domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
- "dev": true
- },
- "entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
"dev": true
}
}
},
"domelementtype": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
- "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
"dev": true
},
"domhandler": {
@@ -1747,9 +1759,9 @@
}
},
"domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
"dev": true,
"requires": {
"dom-serializer": "0",
@@ -1758,7 +1770,7 @@
},
"duplexer": {
"version": "0.1.1",
- "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
"dev": true
},
@@ -1769,75 +1781,63 @@
"dev": true,
"requires": {
"readable-stream": "~1.1.9"
+ }
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
},
"dependencies": {
"isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "version": "2.3.6",
+ "resolved": "https://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.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "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
+ "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"
+ }
}
}
},
- "duplexify": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
- "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "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"
- },
- "dependencies": {
- "bluebird": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
- "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
- "dev": true
- }
+ "typescript": "^3.3.0"
}
},
"ecc-jsbn": {
@@ -1862,12 +1862,6 @@
"url-join": "^2.0.5"
},
"dependencies": {
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
@@ -1886,43 +1880,12 @@
"lru-cache": "^4.1.5",
"semver": "^5.6.0",
"sigmund": "^1.0.1"
- },
- "dependencies": {
- "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
- },
- "lru-cache": {
- "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"
- }
- },
- "semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- }
}
},
"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",
@@ -1931,9 +1894,9 @@
"dev": true
},
"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==",
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
@@ -1966,7 +1929,7 @@
},
"engine.io-client": {
"version": "3.2.1",
- "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
"integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
"dev": true,
"requires": {
@@ -2014,9 +1977,9 @@
"dev": true
},
"entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
"dev": true
},
"error-ex": {
@@ -2029,16 +1992,29 @@
}
},
"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.16.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
+ "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
"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"
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.0",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-inspect": "^1.6.0",
+ "object-keys": "^1.1.1",
+ "string.prototype.trimleft": "^2.1.0",
+ "string.prototype.trimright": "^2.1.0"
+ },
+ "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": {
@@ -2117,15 +2093,21 @@
}
},
"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
+ },
+ "estraverse": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.8.0.tgz",
+ "integrity": "sha1-PxJk+2LIUA265eT3NwXNV21q9Cg=",
"dev": true
},
"esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"etag": {
@@ -2136,19 +2118,19 @@
},
"eventemitter2": {
"version": "0.4.14",
- "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
"integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
"dev": true
},
"eventemitter3": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
- "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
"dev": true
},
"events": {
"version": "1.1.1",
- "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
"dev": true
},
@@ -2179,97 +2161,15 @@
"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"
- }
- }
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "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
- }
- }
+ "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-template": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
- "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
"dev": true,
"optional": true
},
@@ -2279,30 +2179,9 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
- "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"
- },
- "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"
- }
- }
- }
- },
"external-editor": {
"version": "2.2.0",
- "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
"integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
"dev": true,
"requires": {
@@ -2311,15 +2190,6 @@
"tmp": "^0.0.33"
},
"dependencies": {
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -2331,77 +2201,6 @@
}
}
},
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "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",
- "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
- }
- }
- },
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
@@ -2444,799 +2243,225 @@
"requires": {
"glob": "3.x",
"minimatch": "0.x"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "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=",
+ "glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "findup-sync": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
- "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
- "dev": true,
- "requires": {
- "glob": "~5.0.0"
- },
- "dependencies": {
- "glob": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
- "dev": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "follow-redirects": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
- "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
- "dev": true,
- "requires": {
- "debug": "=3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
- "fs-access": {
- "version": "1.0.1",
- "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
- "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
- "dev": true,
- "requires": {
- "null-check": "^1.0.0"
- }
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "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,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.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
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "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==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "dev": true,
- "optional": 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"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": "^2.1.0"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "resolved": "http://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
- "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
+ "inherits": "2",
+ "minimatch": "0.3"
},
"dependencies": {
- "chownr": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
- "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+ "minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
"dev": true,
- "optional": true,
"requires": {
- "minipass": "^2.9.0"
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
}
- },
- "safe-buffer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
- "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "optional": true
}
}
},
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
},
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
+ "minimatch": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz",
+ "integrity": "sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs=",
"dev": true,
- "optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
}
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "requires": {
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true,
- "optional": true
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
}
}
},
- "fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
+ "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
"dev": true,
- "optional": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
+ "debug": "^3.0.0"
},
"dependencies": {
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
- "optional": true
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
+ "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
+ "integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=",
+ "dev": true,
+ "requires": {
+ "async": "~0.2.7",
+ "combined-stream": "~0.0.4",
+ "mime": "~1.2.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
}
}
},
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-access": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+ "dev": true,
+ "requires": {
+ "null-check": "^1.0.0"
+ }
+ },
+ "fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.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
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz",
+ "integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==",
+ "dev": true,
+ "optional": true
+ },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -3248,7 +2473,6 @@
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
- "optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
@@ -3292,16 +2516,10 @@
},
"get-stream": {
"version": "3.0.0",
- "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
"getobject": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
@@ -3315,6 +2533,14 @@
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
}
},
"ghauth": {
@@ -3340,12 +2566,6 @@
"readable-stream": "~1.0.26"
}
},
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
@@ -3357,12 +2577,6 @@
"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=",
- "dev": true
}
}
},
@@ -3389,6 +2603,12 @@
"semver": "2.2.1"
},
"dependencies": {
+ "bluebird": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz",
+ "integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=",
+ "dev": true
+ },
"lodash": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
@@ -3415,91 +2635,18 @@
"through": "~2.3.4"
},
"dependencies": {
- "asn1": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
- "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
- "dev": true
- },
- "assert-plus": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
- "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
- "dev": true
- },
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"dev": true
},
- "combined-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
- "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
- "dev": true,
- "requires": {
- "delayed-stream": "0.0.5"
- }
- },
- "delayed-stream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
- "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
- "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
- "dev": true
- },
- "form-data": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
- "integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=",
- "dev": true,
- "requires": {
- "async": "~0.2.7",
- "combined-stream": "~0.0.4",
- "mime": "~1.2.2"
- }
- },
- "http-signature": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
- "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
- "dev": true,
- "requires": {
- "asn1": "0.1.11",
- "assert-plus": "^0.1.5",
- "ctype": "0.5.3"
- }
- },
- "json-stringify-safe": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz",
- "integrity": "sha1-d8JxqupUMC5o7+rMtWq78GqbGlQ=",
- "dev": true
- },
"mime": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true
},
- "oauth-sign": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
- "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=",
- "dev": true
- },
- "qs": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
- "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=",
- "dev": true
- },
"request": {
"version": "2.22.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
@@ -3536,43 +2683,26 @@
"optional": true
},
"glob": {
- "version": "3.1.21",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
- "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
"dev": true,
- "requires": {
- "graceful-fs": "~1.2.0",
- "inherits": "1",
- "minimatch": "~0.2.11"
- },
- "dependencies": {
- "inherits": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
- "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
- "dev": true
- }
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
+ "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
"dev": true,
"requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
+ "is-glob": "^4.0.1"
}
},
"globby": {
@@ -3587,49 +2717,17 @@
"object-assign": "^4.0.1",
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "glob": {
- "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",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
}
},
"graceful-fs": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
- "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
- "dev": true
- },
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
},
"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",
@@ -3643,7 +2741,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",
@@ -3651,23 +2749,9 @@
"rimraf": "~2.6.2"
},
"dependencies": {
- "glob": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
- "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.2",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
"grunt-cli": {
"version": "1.2.0",
- "resolved": "http://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
"integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
"dev": true,
"requires": {
@@ -3677,23 +2761,11 @@
"resolve": "~1.1.0"
}
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
- "dev": true,
- "requires": {
- "glob": "^7.0.5"
- }
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
}
}
},
@@ -3704,6 +2776,33 @@
"dev": true,
"requires": {
"chalk": "^1.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
}
},
"grunt-bump": {
@@ -3713,14 +2812,6 @@
"dev": true,
"requires": {
"semver": "^5.1.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
- "dev": true
- }
}
},
"grunt-chmod": {
@@ -3732,6 +2823,23 @@
"shelljs": "^0.5.3"
}
},
+ "grunt-composer": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/grunt-composer/-/grunt-composer-0.4.5.tgz",
+ "integrity": "sha1-ksV0FwfRpStTDBL5UY8AmHWh0Lc=",
+ "dev": true,
+ "requires": {
+ "shelljs": "~0.2.6"
+ },
+ "dependencies": {
+ "shelljs": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
+ "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=",
+ "dev": true
+ }
+ }
+ },
"grunt-contrib-clean": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.0.tgz",
@@ -3743,80 +2851,67 @@
},
"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"
- }
- },
- "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"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "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/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "lodash": "^4.17.14"
}
}
}
},
"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.6.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.6.0.tgz",
+ "integrity": "sha512-wIFuvk+/Ny4E+OgEfJYFZgoH7KcU/nnNFbYasB7gRvrcRyW6vmTp3Pj8a4rFSR3tbFMjrGvTUszdO6fgLajgZQ==",
"dev": true,
"requires": {
"archiver": "^1.3.0",
"chalk": "^1.1.1",
- "iltorb": "^1.0.13",
+ "iltorb": "^2.4.3",
"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==",
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
}
}
},
"grunt-contrib-connect": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-2.0.0.tgz",
- "integrity": "sha512-JVjM9UDP84WbT2S7swkyuwPuxFtT+zry/RUBuP3IT8LZPEQjtzzMwiM+qimswNKQ9plh5WhcFWaaqz2ruB9/DA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-2.1.0.tgz",
+ "integrity": "sha512-yeCHdz5zqoibhQDyw/X+E/wTzYPpim+C2p+xYyXUsXVEkfxnKVIWYOWrAKkFHlz9//nIC0S3JbUDd3mVvJcxVA==",
"dev": true,
"requires": {
"async": "^2.6.1",
"connect": "^3.6.6",
"connect-livereload": "^0.6.0",
- "morgan": "^1.9.0",
+ "morgan": "^1.9.1",
"node-http2": "^4.0.1",
"opn": "^5.3.0",
"portscanner": "^2.2.0",
@@ -3825,63 +2920,26 @@
},
"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.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.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": {
- "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.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "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"
- }
- }
}
},
"grunt-file-creator": {
@@ -3910,56 +2968,12 @@
"underscore": "~1.5.2"
},
"dependencies": {
- "asn1": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
- "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
- "dev": true,
- "optional": true
- },
- "assert-plus": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
- "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
- "dev": true,
- "optional": true
- },
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"dev": true
},
- "aws-sign2": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
- "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
- "dev": true,
- "optional": true
- },
- "combined-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
- "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
- "dev": true,
- "optional": true,
- "requires": {
- "delayed-stream": "0.0.5"
- }
- },
- "delayed-stream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
- "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
- "dev": true,
- "optional": true
- },
- "forever-agent": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
- "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
- "dev": true
- },
"form-data": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
@@ -4001,17 +3015,11 @@
"dev": true,
"optional": true
},
- "http-signature": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
- "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
- "dev": true,
- "optional": true,
- "requires": {
- "asn1": "0.1.11",
- "assert-plus": "^0.1.5",
- "ctype": "0.5.3"
- }
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
},
"mime": {
"version": "1.2.11",
@@ -4019,25 +3027,6 @@
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
"dev": true
},
- "node-uuid": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
- "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
- "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=",
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
- "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=",
- "dev": true
- },
"request": {
"version": "2.33.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.33.0.tgz",
@@ -4095,9 +3084,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"
@@ -4115,16 +3104,6 @@
"log-driver": "^1.2"
},
"dependencies": {
- "dateformat": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1",
- "meow": "^3.3.0"
- }
- },
"glob": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
@@ -4161,6 +3140,12 @@
}
}
},
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
"minimatch": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
@@ -4177,72 +3162,27 @@
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
"integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==",
"dev": true
- },
- "grunt-legacy-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
- "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
- "dev": true,
- "requires": {
- "colors": "~1.1.2",
- "grunt-legacy-log-utils": "~2.0.0",
- "hooker": "~0.2.3",
- "lodash": "~4.17.5"
- },
- "dependencies": {
- "colors": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
- "dev": true
- }
- }
- },
- "grunt-legacy-log-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
- "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
- "dev": true,
- "requires": {
- "chalk": "~2.4.1",
- "lodash": "~4.17.10"
- },
- "dependencies": {
- "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.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "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"
- }
- }
+ },
+ "grunt-legacy-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
+ "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
+ "dev": true,
+ "requires": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~2.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.5"
+ }
+ },
+ "grunt-legacy-log-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
+ "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
+ "dev": true,
+ "requires": {
+ "chalk": "~2.4.1",
+ "lodash": "~4.17.10"
}
},
"grunt-legacy-util": {
@@ -4258,17 +3198,6 @@
"lodash": "~4.17.10",
"underscore.string": "~3.3.4",
"which": "~1.3.0"
- },
- "dependencies": {
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
}
},
"grunt-prompt": {
@@ -4300,6 +3229,36 @@
"through2": "~2.0.0"
},
"dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -4331,6 +3290,25 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
"cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -4355,11 +3333,15 @@
"escape-string-regexp": "^1.0.5"
}
},
- "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
+ "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"
+ }
},
"inquirer": {
"version": "3.0.1",
@@ -4388,10 +3370,19 @@
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "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"
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"onetime": {
@@ -4442,75 +3433,60 @@
}
}
}
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
}
}
},
"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
+ },
+ "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"
+ }
+ }
}
},
"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": {
- "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.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "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=",
+ "pretty-bytes": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz",
+ "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==",
"dev": true
- },
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1"
- }
- },
- "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"
- }
}
}
},
@@ -4524,43 +3500,6 @@
"cheerio": "^1.0.0-rc.2",
"handlebars": "^4.0.5",
"js-beautify": "^1.5.10"
- },
- "dependencies": {
- "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"
- }
- }
}
},
"gzip-size": {
@@ -4599,13 +3538,42 @@
"dev": true
},
"har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
"dev": true,
"requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
}
},
"has": {
@@ -4650,9 +3618,9 @@
"dev": true
},
"has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"has-symbols": {
@@ -4665,40 +3633,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true,
- "optional": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
+ "dev": true
},
"hawk": {
"version": "0.13.1",
@@ -4731,9 +3666,9 @@
"dev": true
},
"hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
"dev": true
},
"htmlparser2": {
@@ -4750,10 +3685,10 @@
"readable-stream": "^3.1.1"
},
"dependencies": {
- "domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
"dev": true
},
"readable-stream": {
@@ -4766,12 +3701,27 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
+ },
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
}
}
},
"http-errors": {
"version": "1.6.3",
- "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"dev": true,
"requires": {
@@ -4781,21 +3731,21 @@
"statuses": ">= 1.4.0 < 2"
},
"dependencies": {
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
}
}
},
"http-proxy": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
- "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
"dev": true,
"requires": {
- "eventemitter3": "^3.0.0",
+ "eventemitter3": "^4.0.0",
"follow-redirects": "^1.0.0",
"requires-port": "^1.0.0"
}
@@ -4825,14 +3775,14 @@
}
},
"http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
+ "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
"dev": true,
"requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
+ "asn1": "0.1.11",
+ "assert-plus": "^0.1.5",
+ "ctype": "0.5.3"
}
},
"https-browserify": {
@@ -4842,9 +3792,9 @@
"dev": true
},
"https-proxy-agent": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz",
- "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==",
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
"dev": true,
"requires": {
"agent-base": "^4.3.0",
@@ -4906,7 +3856,7 @@
"dependencies": {
"mkdirp": {
"version": "0.3.5",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
"integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
"dev": true
}
@@ -4918,17 +3868,17 @@
"integrity": "sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=",
"dev": true
},
- "estraverse": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.8.0.tgz",
- "integrity": "sha1-PxJk+2LIUA265eT3NwXNV21q9Cg=",
- "dev": true
- },
"lodash": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
"dev": true
+ },
+ "which": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
+ "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
+ "dev": true
}
}
},
@@ -4942,22 +3892,23 @@
}
},
"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": {
- "version": "1.3.10",
- "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.10.tgz",
- "integrity": "sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.4.tgz",
+ "integrity": "sha512-7Qk6O7TK3rSWVRVRkPehcNTSN+P2i7MsG9pWmw6iVw/W6NcoNj0rFKOuBDM6fbZV6NNGuUW3JBRem6Ozn4KXhg==",
"dev": true,
"optional": true,
"requires": {
- "detect-libc": "^0.2.0",
- "nan": "^2.6.2",
- "node-gyp": "^3.6.2",
- "prebuild-install": "^2.3.0"
+ "detect-libc": "^1.0.3",
+ "nan": "^2.14.0",
+ "npmlog": "^4.1.2",
+ "prebuild-install": "^5.3.2",
+ "which-pm-runs": "^1.0.0"
}
},
"immediate": {
@@ -4973,17 +3924,6 @@
"dev": true,
"requires": {
"repeating": "^2.0.0"
- },
- "dependencies": {
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- }
}
},
"indexof": {
@@ -5003,16 +3943,14 @@
}
},
"inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"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",
@@ -5035,11 +3973,36 @@
"through": "^2.3.6"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
"lodash": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
"integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
"dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
}
}
},
@@ -5061,15 +4024,6 @@
"integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=",
"dev": true
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -5077,27 +4031,12 @@
"dev": true
},
"is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
- "builtin-modules": "^1.0.0"
+ "binary-extensions": "^2.0.0"
}
},
"is-callable": {
@@ -5106,46 +4045,12 @@
"integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
"dev": true
},
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
"is-date-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
"integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
"dev": true
},
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -5171,9 +4076,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"
@@ -5186,9 +4091,9 @@
"dev": true
},
"is-my-json-valid": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz",
- "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz",
+ "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==",
"dev": true,
"requires": {
"generate-function": "^2.0.0",
@@ -5199,13 +4104,10 @@
}
},
"is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
},
"is-number-like": {
"version": "1.0.8",
@@ -5246,15 +4148,6 @@
"path-is-inside": "^1.0.1"
}
},
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
"is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
@@ -5303,12 +4196,6 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
@@ -5316,10 +4203,9 @@
"dev": true
},
"isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"isbinaryfile": {
"version": "3.0.3",
@@ -5336,12 +4222,6 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -5376,21 +4256,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": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- },
"esprima": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.5.0.tgz",
@@ -5405,17 +4270,6 @@
"requires": {
"glob": "5.x",
"minimatch": "2.x"
- },
- "dependencies": {
- "minimatch": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.0.0"
- }
- }
}
},
"glob": {
@@ -5431,40 +4285,19 @@
"path-is-absolute": "^1.0.0"
}
},
- "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==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "dependencies": {
- "esprima": {
- "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
- }
- }
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
},
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "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=",
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
"dev": true,
"requires": {
- "abbrev": "1"
+ "brace-expansion": "^1.0.0"
}
},
"resolve": {
@@ -5482,15 +4315,6 @@
"has-flag": "^1.0.0"
}
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -5510,41 +4334,18 @@
"jasmine-core": "~2.8.0"
},
"dependencies": {
- "glob": {
- "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",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
"jasmine-core": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz",
"integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=",
"dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
}
}
},
"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.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz",
+ "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==",
"dev": true
},
"jasminewd2": {
@@ -5554,9 +4355,9 @@
"dev": true
},
"js-beautify": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz",
- "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==",
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz",
+ "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==",
"dev": true,
"requires": {
"config-chain": "^1.1.12",
@@ -5567,9 +4368,9 @@
},
"dependencies": {
"glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
+ "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -5580,15 +4381,6 @@
"path-is-absolute": "^1.0.0"
}
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
"nopt": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
@@ -5602,13 +4394,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": {
@@ -5629,6 +4421,42 @@
"plur": "^2.1.0",
"string-length": "^1.0.0",
"text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
}
},
"json-schema": {
@@ -5644,27 +4472,17 @@
"dev": true
},
"json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz",
+ "integrity": "sha1-d8JxqupUMC5o7+rMtWq78GqbGlQ=",
"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"
- },
- "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,
- "optional": true
- }
}
},
"jsonpointer": {
@@ -5683,6 +4501,14 @@
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
}
},
"jszip": {
@@ -5695,30 +4521,61 @@
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"set-immediate-shim": "~1.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"karma": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz",
- "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz",
+ "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==",
"dev": true,
"requires": {
"bluebird": "^3.3.0",
"body-parser": "^1.16.1",
- "chokidar": "^2.0.3",
+ "braces": "^3.0.2",
+ "chokidar": "^3.0.0",
"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.14",
+ "log4js": "^4.0.0",
"mime": "^2.3.1",
"minimatch": "^3.0.2",
"optimist": "^0.6.1",
@@ -5729,19 +4586,13 @@
"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==",
- "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.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
+ "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -5752,36 +4603,12 @@
"path-is-absolute": "^1.0.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
- },
"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": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
- "dev": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -5807,17 +4634,6 @@
"requires": {
"fs-access": "^1.0.0",
"which": "^1.2.1"
- },
- "dependencies": {
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
}
},
"karma-coverage": {
@@ -5839,31 +4655,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": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- },
- "dateformat": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1",
- "meow": "^3.3.0"
- }
- },
"escodegen": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
@@ -5920,6 +4711,12 @@
"path-is-absolute": "^1.0.0"
}
},
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
"istanbul": {
"version": "0.4.5",
"resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
@@ -5942,24 +4739,6 @@
"wordwrap": "^1.0.0"
}
},
- "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==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "dependencies": {
- "esprima": {
- "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
- }
- }
- },
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -5970,30 +4749,6 @@
"type-check": "~0.3.2"
}
},
- "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",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "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,
- "requires": {
- "abbrev": "1"
- }
- },
"optionator": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
@@ -6023,15 +4778,6 @@
"has-flag": "^1.0.0"
}
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -6041,10 +4787,21 @@
}
},
"karma-firefox-launcher": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz",
- "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==",
- "dev": true
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz",
+ "integrity": "sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^2.1.0"
+ },
+ "dependencies": {
+ "is-wsl": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz",
+ "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==",
+ "dev": true
+ }
+ }
},
"karma-jasmine": {
"version": "2.0.1",
@@ -6070,15 +4827,6 @@
"colors": "^1.1.2"
}
},
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
"lazystream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
@@ -6086,6 +4834,38 @@
"dev": true,
"requires": {
"readable-stream": "^2.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"lcid": {
@@ -6124,7 +4904,7 @@
},
"load-json-file": {
"version": "1.1.0",
- "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true,
"requires": {
@@ -6133,14 +4913,6 @@
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0",
"strip-bom": "^2.0.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
- }
}
},
"locate-path": {
@@ -6151,19 +4923,20 @@
"requires": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "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
- },
- "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
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lodash.isfinite": {
"version": "3.3.2",
@@ -6184,40 +4957,40 @@
"dev": true
},
"log-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
- "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
"dev": true,
"requires": {
- "chalk": "^1.0.0"
+ "chalk": "^2.0.1"
}
},
"log4js": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
- "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz",
+ "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==",
"dev": true,
"requires": {
- "circular-json": "^0.5.5",
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
- "rfdc": "^1.1.2",
- "streamroller": "0.7.0"
+ "date-format": "^2.0.0",
+ "debug": "^4.1.1",
+ "flatted": "^2.0.0",
+ "rfdc": "^1.1.4",
+ "streamroller": "^1.0.6"
},
"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
}
}
@@ -6233,16 +5006,14 @@
}
},
"lru-cache": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
- "dev": true
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
+ "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"
+ }
},
"map-obj": {
"version": "1.0.1",
@@ -6250,15 +5021,6 @@
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
"dev": true
},
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
"maxmin": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
@@ -6271,14 +5033,39 @@
"pretty-bytes": "^3.0.0"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
"pretty-bytes": {
"version": "3.0.1",
- "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
"integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
}
}
},
@@ -6290,9 +5077,8 @@
},
"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
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"mem": {
"version": "1.1.0",
@@ -6305,7 +5091,7 @@
},
"meow": {
"version": "3.7.0",
- "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true,
"requires": {
@@ -6329,54 +5115,23 @@
}
}
},
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "dependencies": {
- "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
- }
- }
- },
"mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
},
"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
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
},
"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,
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"requires": {
- "mime-db": "~1.37.0"
+ "mime-db": "1.40.0"
}
},
"mimic-fn": {
@@ -6386,54 +5141,30 @@
"dev": true
},
"mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz",
+ "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==",
"dev": true,
"optional": true
},
"minimatch": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "lru-cache": "2",
- "sigmund": "~1.0.0"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "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"
- }
- }
- }
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
"requires": {
"minimist": "0.0.8"
}
@@ -6445,9 +5176,9 @@
"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.18.1",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.18.1.tgz",
+ "integrity": "sha512-fmL+RFZ2Hrezy+X/5ZczQW51LUmvzfcqOurnkCIRFTyjdVjzR7JvENzI6+VKBJzJdPh6EYL4RoWl92b2Hrk9fw=="
},
"morgan": {
"version": "1.9.1",
@@ -6468,22 +5199,37 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "multer": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
+ "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
+ "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",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz",
"integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=",
"dev": true
},
"mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true
},
"nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"dev": true,
"optional": true
},
@@ -6493,37 +5239,17 @@
"integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ==",
"dev": true
},
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "napi-build-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
+ "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==",
"dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "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
- }
- }
+ "optional": true
},
"negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
"dev": true
},
"neo-async": {
@@ -6533,94 +5259,13 @@
"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.12.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.12.0.tgz",
+ "integrity": "sha512-VhPBXCIcvmo/5K8HPmnWJyyhvgKxnHTUMXR/XwGHV68+wrgkzST4UmQrY/XszSWA5dtnXpNp528zkcyJ/pzVcw==",
"dev": true,
"optional": true,
"requires": {
"semver": "^5.4.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
- "dev": true,
- "optional": true
- }
- }
- },
- "node-gyp": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
- "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
- "dev": true,
- "optional": true,
- "requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "dev": true,
- "optional": 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"
- }
- },
- "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,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "optional": true,
- "requires": {
- "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": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
- "dev": true,
- "optional": true
- }
}
},
"node-http2": {
@@ -6680,13 +5325,13 @@
}
},
"normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
+ "resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
@@ -6714,7 +5359,6 @@
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
- "optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
@@ -6744,16 +5388,15 @@
"dev": true
},
"oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
+ "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=",
"dev": true
},
"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",
@@ -6761,27 +5404,11 @@
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
"dev": true
},
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "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-inspect": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
+ "dev": true
},
"object-keys": {
"version": "0.2.0",
@@ -6794,15 +5421,6 @@
"is": "~0.2.6"
}
},
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
"object.getownpropertydescriptors": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
@@ -6813,40 +5431,30 @@
"es-abstract": "^1.5.1"
}
},
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
"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"
}
},
"on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"dev": true
},
"once": {
@@ -6871,9 +5479,9 @@
"dev": true
},
"opn": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
- "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
"dev": true,
"requires": {
"is-wsl": "^1.1.0"
@@ -6905,7 +5513,7 @@
},
"os-homedir": {
"version": "1.0.2",
- "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
@@ -6922,7 +5530,7 @@
},
"os-tmpdir": {
"version": "1.0.2",
- "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
@@ -7030,32 +5638,23 @@
}
},
"parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true
},
"path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
},
"path-is-absolute": {
"version": "1.0.1",
- "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
@@ -7071,6 +5670,12 @@
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
@@ -7080,14 +5685,6 @@
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
"pinkie-promise": "^2.0.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
- }
}
},
"performance-now": {
@@ -7096,9 +5693,15 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
+ "picomatch": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.0.tgz",
+ "integrity": "sha512-uhnEDzAbrcJ8R3g2fANnSuXZMBtkpSjxTTgn2LeSiQlfmq72enQJWdQllXW24MBLYnA1SBD2vfvx2o0Zw3Ielw==",
+ "dev": true
+ },
"pify": {
"version": "2.3.0",
- "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
@@ -7127,14 +5730,40 @@
}
},
"portfinder": {
- "version": "1.0.19",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.19.tgz",
- "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==",
+ "version": "1.0.25",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
+ "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
"dev": true,
"requires": {
- "async": "^1.5.2",
- "debug": "^2.2.0",
- "mkdirp": "0.5.x"
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
}
},
"portscanner": {
@@ -7148,53 +5777,40 @@
},
"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.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.14"
}
}
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
+ }
},
"prebuild-install": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz",
- "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.2.tgz",
+ "integrity": "sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==",
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.3",
- "expand-template": "^1.0.2",
+ "expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
- "node-abi": "^2.2.0",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^2.7.0",
"noop-logger": "^0.1.1",
"npmlog": "^4.0.1",
- "os-homedir": "^1.0.1",
- "pump": "^2.0.1",
- "rc": "^1.1.6",
- "simple-get": "^2.7.0",
- "tar-fs": "^1.13.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^3.0.3",
+ "tar-fs": "^2.0.0",
"tunnel-agent": "^0.6.0",
"which-pm-runs": "^1.0.0"
},
"dependencies": {
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true,
- "optional": true
- },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
@@ -7212,15 +5828,19 @@
},
"pretty-bytes": {
"version": "4.0.2",
- "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
"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
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proto-list": {
"version": "1.2.4",
@@ -7251,27 +5871,23 @@
"webdriver-manager": "^12.0.6"
},
"dependencies": {
- "glob": {
- "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",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "brace-expansion": "^1.1.7"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
}
},
"minimist": {
@@ -7280,31 +5896,16 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
- "q": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
- "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
- "dev": true
- },
- "rimraf": {
- "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.1.3"
- }
- },
- "semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
},
"webdriver-manager": {
- "version": "12.1.5",
- "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.5.tgz",
- "integrity": "sha512-f1apDjMpZ8SHlXtXGzqBxOjV+WQcDRz5PN7pWScgjXS7vhUIFcM3V89Shetf4A04n8DDR2MxiVQq6JproFcRZw==",
+ "version": "12.1.7",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz",
+ "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==",
"dev": true,
"requires": {
"adm-zip": "^0.4.9",
@@ -7329,17 +5930,15 @@
"dev": true
},
"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
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
+ "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw=="
},
"pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
- "optional": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -7348,13 +5947,12 @@
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
"dev": true
},
"qjobs": {
@@ -7364,9 +5962,9 @@
"dev": true
},
"qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
+ "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=",
"dev": true
},
"querystring": {
@@ -7376,31 +5974,47 @@
"dev": true
},
"range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"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"
}
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
}
}
},
@@ -7454,61 +6068,26 @@
"requires": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
}
},
"readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
+ "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.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
}
},
"readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
+ "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- },
- "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
- }
+ "picomatch": "^2.0.4"
}
},
"readline2": {
@@ -7540,33 +6119,20 @@
"strip-indent": "^1.0.1"
}
},
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
},
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
},
"request": {
"version": "2.88.0",
@@ -7594,6 +6160,137 @@
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "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"
+ }
+ },
+ "uuid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+ "dev": true
+ }
+ }
+ },
+ "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": {
@@ -7615,16 +6312,13 @@
"dev": true
},
"resolve": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
},
"restore-cursor": {
"version": "1.0.1",
@@ -7636,23 +6330,36 @@
"onetime": "^1.0.0"
}
},
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "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": {
- "version": "2.2.8",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
- "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
- "dev": true
+ "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.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
+ "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
+ "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"
+ }
+ }
+ }
},
"run-async": {
"version": "0.1.0",
@@ -7678,17 +6385,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
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
@@ -7721,52 +6418,18 @@
"rimraf": "^2.5.4",
"tmp": "0.0.30",
"xml2js": "^0.4.17"
- },
- "dependencies": {
- "glob": {
- "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",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "rimraf": {
- "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.1.3"
- }
- }
}
},
"semver": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"dev": true,
"requires": {
"debug": "2.6.9",
@@ -7776,18 +6439,37 @@
"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",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
"on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
},
"dependencies": {
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "http-errors": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
"dev": true
}
}
@@ -7808,15 +6490,15 @@
}
},
"serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"dev": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
}
},
"set-blocking": {
@@ -7825,34 +6507,11 @@
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "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"
- }
- }
- }
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
},
"setimmediate": {
"version": "1.0.5",
@@ -7894,70 +6553,6 @@
"dev": true,
"requires": {
"yargs": "^10.0.3"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "yargs": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
- "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
- "dev": true,
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^8.1.0"
- }
- }
}
},
"sigmund": {
@@ -7980,122 +6575,20 @@
"optional": true
},
"simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
+ "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
"dev": true,
"optional": true,
"requires": {
- "decompress-response": "^3.3.0",
+ "decompress-response": "^4.2.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "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": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "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
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- }
- },
"sntp": {
"version": "0.2.4",
- "resolved": "http://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
"integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=",
"dev": true,
"requires": {
@@ -8176,7 +6669,7 @@
},
"socket.io-parser": {
"version": "3.2.0",
- "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
"integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
"dev": true,
"requires": {
@@ -8208,19 +6701,6 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "dev": true,
- "requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "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",
@@ -8230,16 +6710,10 @@
"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",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
"spdx-correct": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
- "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
@@ -8263,9 +6737,9 @@
}
},
"spdx-license-ids": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
- "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
"dev": true
},
"split": {
@@ -8277,25 +6751,16 @@
"through": "2"
}
},
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
"sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
"dev": true
},
"sshpk": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
- "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
@@ -8307,49 +6772,82 @@
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
- }
- },
- "stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "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=",
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "safer-buffer": "~2.1.0"
}
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
}
}
},
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
"statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"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",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
"dev": true,
"requires": {
"inherits": "~2.0.1",
"readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"stream-buffers": {
@@ -8365,17 +6863,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.6",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz",
+ "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==",
"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.14"
},
"dependencies": {
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
@@ -8385,14 +6893,30 @@
"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"
+ }
+ },
"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",
@@ -8413,15 +6937,31 @@
"strip-ansi": "^3.0.0"
}
},
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "string.prototype.trimleft": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+ "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+ "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
}
},
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
"stringstream": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
@@ -8448,7 +6988,7 @@
},
"strip-eof": {
"version": "1.0.0",
- "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
@@ -8469,10 +7009,13 @@
"optional": true
},
"supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
+ "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"
+ }
},
"svgmin": {
"version": "0.1.0",
@@ -8481,139 +7024,120 @@
"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.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
"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-tree": "1.0.0-alpha.28",
- "css-url-regex": "^1.1.0",
- "csso": "^3.5.0",
- "js-yaml": "^3.12.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "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": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
- "dev": true
- },
- "css-select": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
- "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0",
- "css-what": "^2.1.2",
- "domutils": "^1.7.0",
- "nth-check": "^1.0.2"
- }
- },
"css-tree": {
- "version": "1.0.0-alpha.28",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
- "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
"dev": true,
"requires": {
- "mdn-data": "~1.1.0",
- "source-map": "^0.5.3"
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
}
},
- "domutils": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
- "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "csso": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz",
+ "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==",
"dev": true,
"requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
+ "css-tree": "1.0.0-alpha.37"
}
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
"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==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
+ "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
}
}
},
- "tar": {
- "version": "2.2.2",
- "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
- "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+ "tar-fs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz",
+ "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==",
"dev": true,
"optional": true,
"requires": {
- "block-stream": "*",
- "fstream": "^1.0.12",
- "inherits": "2"
+ "chownr": "^1.1.1",
+ "mkdirp": "^0.5.1",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.0.0"
},
"dependencies": {
- "fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "bl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
+ "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "readable-stream": "^3.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
- "optional": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
+ "safe-buffer": "~5.2.0"
}
},
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
- "dev": true,
- "optional": true
- }
- }
- },
- "tar-fs": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
- "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==",
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.0.1",
- "mkdirp": "^0.5.1",
- "pump": "^1.0.0",
- "tar-stream": "^1.1.2"
- },
- "dependencies": {
- "pump": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
- "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
+ "tar-stream": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
+ "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
"dev": true,
"optional": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
+ "bl": "^3.0.0",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
}
}
}
@@ -8631,6 +7155,38 @@
"readable-stream": "^2.3.0",
"to-buffer": "^1.1.1",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"text-table": {
@@ -8641,7 +7197,7 @@
},
"through": {
"version": "2.3.8",
- "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
@@ -8655,12 +7211,6 @@
"xtend": ">=4.0.0 <4.1.0-0"
},
"dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
@@ -8672,12 +7222,6 @@
"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=",
- "dev": true
}
}
},
@@ -8711,53 +7255,28 @@
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
"dev": true
},
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
"to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
+ "is-number": "^7.0.0"
}
},
+ "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,
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- }
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
}
},
"trim-newlines": {
@@ -8767,9 +7286,9 @@
"dev": true
},
"tslib": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
- "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
},
"tunnel-agent": {
"version": "0.6.0",
@@ -8796,37 +7315,35 @@
}
},
"type-is": {
- "version": "1.6.16",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
- "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
- "dev": true,
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
- "mime-types": "~2.1.18"
+ "mime-types": "~2.1.24"
}
},
+ "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.6.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz",
+ "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==",
"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.7",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.7.tgz",
+ "integrity": "sha512-4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A==",
"dev": true,
"requires": {
- "commander": "~2.17.1",
+ "commander": "~2.20.3",
"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
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -8874,40 +7391,10 @@
}
}
},
- "union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "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",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
- }
+ "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",
@@ -8921,52 +7408,6 @@
"integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
"dev": true
},
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- }
- }
- },
- "upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
- "dev": true
- },
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
@@ -8982,12 +7423,6 @@
"integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
"dev": true
},
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -9012,33 +7447,19 @@
"integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=",
"dev": true
},
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "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": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
- "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
- "dev": true
- }
}
},
"util": {
"version": "0.10.3",
- "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
"dev": true,
"requires": {
@@ -9056,8 +7477,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",
@@ -9075,12 +7495,6 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"dev": true
},
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
- },
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -9100,6 +7514,14 @@
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
}
},
"void-elements": {
@@ -9125,24 +7547,59 @@
}
},
"websocket-stream": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.1.2.tgz",
- "integrity": "sha512-lchLOk435iDWs0jNuL+hiU14i3ERSrMA0IKSiJh7z6X/i4XNsutBZrtqu2CPOZuA4G/zabiqVAos0vW+S7GEVw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.0.tgz",
+ "integrity": "sha512-EXy/zXb9kNHI07TIMz1oIUIrPZxQRA8aeJ5XYg5ihV8K4kD1DuA+FY6R96HfdIHzlSzS8HiISAfrm+vVQkZBug==",
"dev": true,
"requires": {
"duplexify": "^3.5.1",
"inherits": "^2.0.1",
"readable-stream": "^2.3.3",
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"ws": "^3.2.0",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
+ }
}
},
"which": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
- "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
- "dev": true
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
},
"which-module": {
"version": "2.0.0",
@@ -9154,28 +7611,26 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
- "dev": true,
- "optional": true
+ "dev": true
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
- "optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
"dev": true
},
"wrap-ansi": {
"version": "2.1.0",
- "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"dev": true,
"requires": {
@@ -9201,19 +7656,20 @@
}
},
"xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "version": "0.4.22",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz",
+ "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==",
"dev": true,
"requires": {
"sax": ">=0.6.0",
- "xmlbuilder": "~9.0.1"
+ "util.promisify": "~1.0.0",
+ "xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"dev": true
},
"xmlhttprequest-ssl": {
@@ -9223,10 +7679,9 @@
"dev": true
},
"xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
- "dev": true
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"y18n": {
"version": "3.2.1",
@@ -9235,10 +7690,72 @@
"dev": true
},
"yallist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
- "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
- "dev": true
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
+ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
},
"yargs-parser": {
"version": "8.1.0",
@@ -9275,11 +7792,35 @@
"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==",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://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",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "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"
+ }
}
}
}
diff --git a/package.json b/package.json
index 1423173fd63..2e665340c88 100644
--- a/package.json
+++ b/package.json
@@ -20,30 +20,31 @@
],
"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-composer": "^0.4.5",
"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",
@@ -51,11 +52,16 @@
"karma-qooxdoo": "^0.6.0",
"karma-spec-reporter": "0.0.32",
"protractor": "^5.4.2",
- "request": "^2.69.0",
+ "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.18.1",
+ "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 820fe969343..99da610d76f 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 250d1a5b938..271a20184f9 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..d909e3a89a9
--- /dev/null
+++ b/source/class/cv/io/rest/Client.js
@@ -0,0 +1,208 @@
+/**
+ *
+ */
+qx.Class.define('cv.io.rest.Client', {
+ type: 'static',
+
+ /*
+ ***********************************************
+ STATICS
+ ***********************************************
+ */
+ statics: {
+ BASE_URL: null,
+ __configFile: null,
+ __dirClient: null,
+ __dpClient: null,
+ __callbacks: {},
+
+ getBaseUrl: function () {
+ if (!this.BASE_URL) {
+ var path = qx.util.Uri.parseUri(window.location.href).path;
+ path += 'rest/cv/index.php';
+ this.BASE_URL = path;
+ }
+ return this.BASE_URL;
+ },
+
+ getConfigClient: function() {
+ if (!this.__configFile) {
+ var config = {
+ 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 = new qx.io.rest.Resource(config);
+ this.__configFile.setBaseUrl(this.getBaseUrl());
+ 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');
+ }
+ });
+
+ this._enableSync(this.__configFile, config);
+ }
+ 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.getBaseUrl());
+ 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.getBaseUrl());
+
+ 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 a53f57e16a6..98524e3c9a7 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..389d42b4763 100644
--- a/source/class/cv/theme/dark/Appearance.js
+++ b/source/class/cv/theme/dark/Appearance.js
@@ -20,9 +20,389 @@
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 (states) {
+ return {
+ iconPosition: states.list ? 'left' : 'top',
+ show: states.list ? 'label' : 'both',
+ font: states.list ? 'default' : 'small',
+ width: states.list ? 500 : 130,
+ backgroundColor: states.hovered ? 'rgba(255, 255, 255, 0.1)' : 'transparent'
+ };
+ }
+ },
+ 'cv-file-item/atom/label': {
+ include: 'atom/label',
+ style: function () {
+ return {
+ alignY: 'middle',
+ allowGrowY: true
+ };
+ }
+ },
+ '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..95424b36ccc
--- /dev/null
+++ b/source/class/cv/theme/dark/Images.js
@@ -0,0 +1,59 @@
+/**
+ * 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',
+ 'listViewMode': '@MaterialIcons/view_headline',
+ 'previewMode': '@MaterialIcons/view_module'
+ },
+
+ 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 dc14c93ac32..d81ef7abd3c 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..66eae4dcffe
--- /dev/null
+++ b/source/class/cv/ui/manager/Main.js
@@ -0,0 +1,817 @@
+/**
+ * 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;
+
+ case 'hidden.php':
+ if ((env.state & 4) === 0) {
+ cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Hidden configuration file (hidden.php) 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', null, data);
+ 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, data);
+ }
+ }, 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', null, data);
+ 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);
+ if (this.getCurrentFolder() && this.getCurrentFolder().getFullPath() === data.path) {
+ this.resetCurrentFolder();
+ }
+ } else {
+ this.warn('unhandled file event', data.action);
+ }
+ },
+
+ _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);
+ }
+ },
+
+ /**
+ *
+ * @param file {cv.ui.manager.model.FileItem} the file to open
+ * @param preview {Boolean} open the file in preview mode
+ * @param handlerId {String} use this handler to open the file (classname as string)
+ * @param handlerType {String} use a special handler type, e.g. 'edit' if you want to open the file with an editor and not a viewer
+ */
+ openFile: function (file, preview, handlerId, handlerType) {
+ var openFiles = this.getOpenFiles();
+ var openFile;
+ if (!handlerId) {
+ var handlerConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file, handlerType);
+
+ 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);
+ if (file.isTemporary()) {
+ qx.event.message.Bus.dispatchByName('cv.manager.file', {
+ action: 'deleted',
+ path: file.getFullPath()
+ });
+ }
+ }
+ }, 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);
+ var currentHandler = this._stack.getSelection()[0];
+ if (qx.Class.hasInterface(currentHandler.constructor, cv.ui.manager.editor.IEditor)) {
+ // reset the handlers file
+ currentHandler.resetFile();
+ }
+ 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();
+ }
+ // dispose the
+ }
+ },
+
+ 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 || ''
+ });
+ if (type === 'dir') {
+ // create directory directly
+ cv.io.rest.Client.getFsClient().createSync({
+ path: item.getFullPath(),
+ type: type
+ }, null, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('Folder has been created'));
+ item.set({
+ modified: false,
+ temporary: false
+ });
+ qx.event.message.Bus.dispatchByName(item.getBusTopic(), {
+ type: 'created',
+ file: item,
+ data: '',
+ source: this
+ });
+ }
+ }, this);
+ }
+ currentFolder.addChild(item);
+ currentFolder.sortElements();
+ this._tree.refresh();
+ this._tree.setSelection(item);
+ // do not open new folders
+ if (type !== 'dir') {
+ // open the file in an editor
+ this.openFile(item, false, null, 'edit');
+ }
+ }
+ };
+
+ 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 domRoot = this.__getRoot();
+ var root = new qx.ui.root.Inline(domRoot, 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);
+ window.addEventListener('resize', function () {
+ // sync window height with manager height
+ domRoot.style.height = window.innerHeight + 'px';
+ });
+
+ 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);
+ 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..cde861d6a17
--- /dev/null
+++ b/source/class/cv/ui/manager/Start.js
@@ -0,0 +1,317 @@
+/**
+ * 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());
+ this._configRegex = /^visu_config_?([^.]+)?\.xml$/;
+ [ 'toolbar', '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,
+ _previewButton: null,
+ _listButton: null,
+ _radioGroup: null,
+
+ 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));
+ }
+ },
+
+ _onChangeViewMode: function () {
+ switch (cv.ui.manager.model.Preferences.getInstance().getStartViewMode()) {
+ case 'list':
+ this._radioGroup.setSelection([this._listButton]);
+ break;
+
+ case 'preview':
+ this._radioGroup.setSelection([this._previewButton]);
+ break;
+ }
+
+ },
+
+ // overridden
+ _createChildControlImpl : function(id) {
+ var control;
+
+ switch (id) {
+ case 'scroll-container':
+ control = new qx.ui.container.Scroll();
+ this._add(control, {flex: 1});
+ break;
+
+ case 'content':
+ control = new qx.ui.container.Composite(new qx.ui.layout.VBox(8));
+ this.getChildControl('scroll-container').add(control);
+ break;
+
+ case 'toolbar':
+ control = new qx.ui.toolbar.ToolBar();
+ var part = new qx.ui.toolbar.Part();
+ var listButton = this._listButton = new qx.ui.toolbar.RadioButton('', cv.theme.dark.Images.getIcon('listViewMode', 22));
+ listButton.setUserData('mode', 'list');
+ listButton.set({
+ show: 'icon',
+ toolTipText: this.tr('List mode')
+ });
+ var previewButton = this._previewButton = new qx.ui.toolbar.RadioButton('', cv.theme.dark.Images.getIcon('previewMode', 22));
+ previewButton.setUserData('mode', 'preview');
+ previewButton.set({
+ show: 'icon',
+ toolTipText: this.tr('Preview mode')
+ });
+ part.add(listButton);
+ part.add(previewButton);
+ control.add(part);
+ this._radioGroup = new qx.ui.form.RadioGroup(listButton, previewButton);
+ this._onChangeViewMode();
+ this._radioGroup.addListener('changeSelection', function (ev) {
+ var selection = ev.getData()[0];
+ cv.ui.manager.model.Preferences.getInstance().setStartViewMode(selection.getUserData('mode'));
+ }, this);
+ cv.ui.manager.model.Preferences.getInstance().addListener('changeStartViewMode', this._onChangeViewMode, this);
+
+ this._add(control);
+ break;
+
+ 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.getChildControl('content').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,
+ disableScrolling: true
+ });
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this.getChildControl('content').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.getChildControl('content').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) : '';
+ },
+ disableScrolling: true
+ });
+ control.exclude();
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this.getChildControl('content').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.getChildControl('content').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,
+ disableScrolling: true
+ });
+ control.addListener('changeSelection', this._onChangeSelection, this);
+ this.getChildControl('content').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.getChildControl('content').add(control);
+ break;
+
+ case 'misc':
+ control = new cv.ui.manager.viewer.Folder();
+ control.set({
+ showTextFilter: false,
+ disableScrolling: true
+ });
+ 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.getChildControl('content').add(control, {flex: 1});
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._configRegex = null;
+ cv.ui.manager.model.Preferences.getInstance().removeListener('changeStartViewMode', this._onChangeViewMode, this);
+ this._disposeObjects('_previewButton', '_listButton', '_radioGroup');
+ }
+});
diff --git a/source/class/cv/ui/manager/ToolBar.js b/source/class/cv/ui/manager/ToolBar.js
new file mode 100644
index 00000000000..6ed689e1391
--- /dev/null
+++ b/source/class/cv/ui/manager/ToolBar.js
@@ -0,0 +1,201 @@
+/**
+ *
+ */
+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.getFolder());
+ }, this);
+ createPart.add(newButton);
+ } else if (this.__show('new-file')) {
+ newButton = this._createButton('new-file', null, true);
+ newButton.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.new-file',this.getFolder());
+ }, this);
+ 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, doNotUseCommand) {
+ var args = this._menuButtonConfig[name].args;
+ var button = new qx.ui.toolbar.Button(null, icon || args[1].replace(/\/[0-9]+$/, '/15'), !doNotUseCommand ? args[2] : null);
+ 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..b4dd5fa4210
--- /dev/null
+++ b/source/class/cv/ui/manager/contextmenu/FileItem.js
@@ -0,0 +1,336 @@
+/**
+ *
+ */
+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);
+ }
+
+ // only react to events when this menu is visible
+ this.addListener('appear', function () {
+ this.setActive(true);
+ });
+ this.addListener('disappear', function () {
+ this.setActive(false);
+ });
+ },
+
+ /*
+ ***********************************************
+ PROPERTIES
+ ***********************************************
+ */
+ properties: {
+ appearance: {
+ refine: true,
+ init: 'cv-file-contextmenu'
+ },
+
+ /* This flag enables the event handling for this menu */
+ active: {
+ check: 'Boolean',
+ init: false
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _commandGroup: null,
+ _selectedNode: null,
+ _dateFormat: null,
+ _timeFormat: null,
+ _renameDialog: 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() && !file.isMounted() ? '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) {
+ if (this.isActive()) {
+ 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) {
+ if (this.isActive()) {
+ 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._renameDialog && this.isActive()) {
+ this._renameDialog = dialog.Dialog.prompt(this.tr('New name'), function (name) {
+ if (name && name !== this._selectedNode.getName()) {
+ cv.ui.manager.control.FileController.getInstance().rename(this._selectedNode, name);
+ }
+ this._renameDialog = null;
+ }, this, this._selectedNode.getName(), this.tr('Rename file'));
+ }
+ },
+
+ _onDownload: function () {
+ if (this._selectedNode && this.isActive()) {
+ cv.ui.manager.control.FileController.getInstance().download(this._selectedNode);
+ }
+ },
+
+ _onRestore: function () {
+ if (this._selectedNode && this.isActive()) {
+ cv.ui.manager.control.FileController.getInstance().restore(this._selectedNode);
+ }
+ },
+
+ _onValidate: function () {
+ if (this._selectedNode && this.isActive()) {
+ cv.ui.manager.control.FileController.getInstance().validate(this._selectedNode);
+ }
+ },
+
+ _onClone: function () {
+ if (this._selectedNode && this.isActive()) {
+ 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));
+ control.addListener('execute', function () {
+ if (this._selectedNode.isConfigFile()) {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.new-config-file', this._selectedNode.getParent());
+ } else {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.new-file', this._selectedNode.getParent());
+ }
+ }, this);
+ 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));
+ control.addListener('execute', function () {
+ qx.event.message.Bus.dispatchByName('cv.manager.action.new-folder', this._selectedNode.getParent());
+ }, this);
+ break;
+
+ case 'rename-button':
+ control = new qx.ui.menu.Button(this.tr('Rename'), cv.theme.dark.Images.getIcon('rename', 18));
+ 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._renameDialog = 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..c83ab2169c9
--- /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.resetTemporary();
+ 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.getBaseUrl() + '/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..f0bd22d825d
--- /dev/null
+++ b/source/class/cv/ui/manager/control/FileHandlerRegistry.js
@@ -0,0 +1,225 @@
+/**
+ * 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',
+ noTemporaryFiles: true // the old XML-Editor cannot handle temporary files
+ });
+ 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()) && (!file.isTemporary() || !this.__defaults[key].noTemporaryFiles)) {
+ 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 noTemporaryFiles {Boolean} flag to prevent this default editor from being used to open temporary files.
+ * @param clazz {qx.Class}
+ */
+ setDefault: function (selector, clazz, noTemporaryFiles) {
+ 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,
+ noTemporaryFiles: noTemporaryFiles
+ };
+ },
+
+ _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, true);
+ break;
+ }
+ },
+
+ __canHandle: function(config, file) {
+ if (config.noTemporaryFiles === true && file.isTemporary()) {
+ return false;
+ } else 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().toLowerCase())) {
+ 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.assertTrue(file instanceof cv.ui.manager.model.FileItem || file instanceof cv.ui.manager.model.CompareFiles);
+ }
+ 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..d9639b49250
--- /dev/null
+++ b/source/class/cv/ui/manager/core/IconAtom.js
@@ -0,0 +1,57 @@
+/**
+ * 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);
+ },
+
+ /**
+ * Updates the visibility of the icon
+ */
+ _handleIcon : function()
+ {
+ if (!this.getChildControl('icon').getName() || this.getShow() === "label") {
+ this._excludeChildControl("icon");
+ } else {
+ this._showChildControl("icon");
+ }
+ },
+
+ // 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..29914fd8260
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Config.js
@@ -0,0 +1,152 @@
+/**
+ * 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: '*', key: '*'});
+ },
+
+ _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.saveSync(null, data, function (err) {
+ if (err) {
+ cv.ui.manager.snackbar.Controller.error(err);
+ } else {
+ cv.ui.manager.snackbar.Controller.info(this.tr('Hidden config has been saved'));
+ this._onSaved();
+ }
+ }, this);
+ },
+
+ // 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..df02155caab
--- /dev/null
+++ b/source/class/cv/ui/manager/editor/Source.js
@@ -0,0 +1,330 @@
+/**
+ * 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 sourcePath = qx.util.Uri.getAbsolute(qx.util.LibraryManager.getInstance().get('cv', 'resourceUri')+ '/..');
+ var loader = new qx.util.DynamicScriptLoader([
+ sourcePath + 'editor/dependencies/jquery.min.js',
+ sourcePath + 'editor/dependencies/jquery.xpath.min.js',
+ sourcePath + 'editor/lib/Messages.js',
+ sourcePath + 'editor/lib/Schema.js',
+ sourcePath + '../node_modules/monaco-editor/' + version + '/vs/loader.js',
+ 'manager/xml.js'
+ ]);
+ loader.addListener('ready', function () {
+ window.require.config({
+ paths: {
+ 'vs': sourcePath + '../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 file = this.getFile();
+ if (!file) {
+ return;
+ }
+ var model = this._editor.getModel();
+ 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..c1ccdd2d0a5
--- /dev/null
+++ b/source/class/cv/ui/manager/form/FileListItem.js
@@ -0,0 +1,486 @@
+/**
+ * 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"
+ },
+
+ viewMode: {
+ check: ['list', 'preview'],
+ init: 'preview',
+ apply: '_applyViewMode'
+ }
+ },
+
+ /*
+ ***********************************************
+ MEMBERS
+ ***********************************************
+ */
+ members: {
+ _uploadManager: null,
+
+ // overridden
+ /**
+ * @lint ignoreReferenceField(_forwardStates)
+ */
+ _forwardStates: {
+ focused : true,
+ selected : true,
+ dragover : true,
+ hovered: true
+ },
+
+ _applyViewMode: function () {
+ switch (this.getViewMode()) {
+ case 'list':
+ this.addState('list');
+ this.getChildControl('atom').setLayoutProperties({left: 10, top: 0, bottom: 0, right: null});
+ this.getChildControl('bottom-bar').setLayoutProperties({top: 0, bottom: 0, right: 0, left: null});
+ break;
+
+ case 'preview':
+ this.removeState('list');
+ this.getChildControl('atom').setLayoutProperties({left: 0, top: 0, bottom: 34, right: 0});
+ this.getChildControl('bottom-bar').setLayoutProperties({left: 0, bottom: 0, right: 0, top: null});
+ break;
+ }
+ },
+
+ /**
+ * 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) {
+ var resetActionMenu = true;
+ 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);
+ resetActionMenu = false;
+ } 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 && this.getViewMode() === 'preview') {
+ control.show();
+ } else {
+ control.exclude();
+ }
+ } else {
+ control.exclude();
+ }
+ this.getChildControl('action-menu').configure(value);
+ resetActionMenu = false;
+ }
+
+ } else {
+ this.getChildControl('file-type').exclude();
+ }
+ if (resetActionMenu) {
+ this.getChildControl('action-menu').configure(null);
+ }
+ // 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());
+ this.getChildControl('download-button').setVisibility(file.getType() === 'dir' ? 'excluded' : 'visible');
+ 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..b633ef34739
--- /dev/null
+++ b/source/class/cv/ui/manager/model/CompareFiles.js
@@ -0,0 +1,112 @@
+/**
+ *
+ */
+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,
+ event: 'changeModified'
+ }
+ },
+
+ /*
+ ***********************************************
+ 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()));
+ },
+
+ getParent: function () {
+ return this.getModifiedFile().getParent();
+ },
+
+ isWriteable: function () {
+ return this.getModifiedFile().isWriteable();
+ },
+
+ isTrash: function () {
+ return this.getModifiedFile().isTrash();
+ },
+
+ isInTrash: function () {
+ return this.getModifiedFile().isInTrash();
+ },
+
+ isFake: function () {
+ return this.getModifiedFile().isFake();
+ },
+
+ isTemporary: function () {
+ return this.getModifiedFile().isTemporary() || this.getOriginalFile().isTemporary();
+ },
+
+ /**
+ * 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..208ad842489
--- /dev/null
+++ b/source/class/cv/ui/manager/model/FileItem.js
@@ -0,0 +1,555 @@
+/**
+ * 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);
+ this.removeRelatedBindings(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 () {
+ if (!this.__path) {
+ var parentFolder = this.getParentFolder();
+ if (!parentFolder) {
+ parentFolder = '';
+ } else if (!parentFolder.endsWith('/')) {
+ parentFolder += '/';
+ }
+ this.__path = parentFolder;
+ }
+ 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().forEach(function (child) {
+ this.removeRelatedBindings(child);
+ }, this);
+ },
+
+ 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);
+ oldParent.removeRelatedBindings(child);
+ }
+ child.setParent(this);
+ if (child.getType() !== "dir" || !child.isMounted()) {
+ // inherit the mounted state from the parent folder
+ this.bind('mounted', child, 'mounted');
+ }
+ this.getChildren().push(child);
+ },
+
+ _onGet: function (data) {
+ var children = this.getChildren();
+ children.removeAll().forEach(function (child) {
+ this.removeRelatedBindings(child);
+ }, this);
+ 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().forEach(function (child) {
+ this.removeRelatedBindings(child);
+ }, this);
+ 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) {
+ this.__fullPath = this.getPath() + 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)
+ *
+ * Note: Please be aware that this path does not work if the file is in a mounted folder
+ * like the demo configs. The backend handles those mounts transparently to the client. But
+ * because of that the client does not know the real path to the file.
+ *
+ * @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..5b093ec6c6a
--- /dev/null
+++ b/source/class/cv/ui/manager/model/Preferences.js
@@ -0,0 +1,75 @@
+/**
+ * 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'
+ },
+
+ /**
+ * View mode of the start page
+ */
+ startViewMode: {
+ check: ['list', 'preview'],
+ init: 'preview',
+ event: 'changeStartViewMode',
+ 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..96de51f54c2
--- /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.getBaseUrl() + '/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..4107155a6c6
--- /dev/null
+++ b/source/class/cv/ui/manager/viewer/Folder.js
@@ -0,0 +1,333 @@
+/**
+ * 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);
+ cv.ui.manager.model.Preferences.getInstance().bind('startViewMode', this, 'viewMode');
+ 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
+ },
+
+ disableScrolling: {
+ check: 'Boolean',
+ init: false,
+ apply: '_applyDisableScrolling'
+ },
+
+ viewMode: {
+ check: ['list', 'preview'],
+ init: 'list',
+ event: 'changeViewMode'
+ }
+ },
+
+ /*
+ ***********************************************
+ 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) {
+ if (this.getViewMode() === 'list') {
+ // do not remove file type in list mode
+ return 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.bind(this)
+ };
+ 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);
+ this.bind('viewMode', item, 'viewMode');
+ }.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;
+ }
+ },
+
+ _applyDisableScrolling: function (value) {
+ if (value) {
+ this.getChildControl('scroll').exclude();
+ this._addAt(this.getChildControl('list'), 1, {flex: 1});
+ } else {
+ var scrollContainer = this.getChildControl('scroll');
+ scrollContainer.show();
+ scrollContainer.add(this.getChildControl('list'));
+ this._addAt(scrollContainer, 1, {flex: 1});
+ }
+ },
+
+ // 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);
+ if (this.isDisableScrolling()) {
+ this._addAt(control, 1, {flex: 1});
+ } else {
+ this.getChildControl('scroll').add(control);
+ }
+ break;
+ }
+
+ return control || this.base(arguments, id);
+ }
+ },
+
+ /*
+ ***********************************************
+ DESTRUCTOR
+ ***********************************************
+ */
+ destruct: function () {
+ this._disposeObjects('_controller');
+ this._isImageRegex = null;
+ cv.ui.manager.model.Preferences.getInstance().removeRelatedBindings(this);
+ }
+});
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..91e7fb21299
--- /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$/i,
+ 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 9fc00485715..3a907d250cf 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 bda634da4c0..e684f33d10c 100644
--- a/source/resource/config/hidden.php
+++ b/source/resource/config/hidden.php
@@ -1,9 +1,9 @@
array( 'uri' => 'https://192.168.0.1:49443/', 'user' => 'CometVisuTestUser', 'pass' => 'cvtu4here' ),
//'fritzbox' => array( 'uri' => 'http://192.168.0.1:49000/', 'user' => 'CometVisuTestUser', 'pass' => 'cvtu4here' ),
//'fritzbox' => array( 'uri' => 'https://fritz.box:49443/', 'user' => 'CometVisuTestUser', 'pass' => 'cvtu4here' , 'selfsigned' => 'true'),
'influx' => array('uri' => 'https://172.17.0.1/proxy/ts/query', 'user' => 'docker', 'pass' => 'cwkvJPQeFlGlRKc402CA', 'selfsigned' => 'true')
);
-?>
+?>
\ 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.js b/source/resource/manager/crc32.js
new file mode 100644
index 00000000000..7fff9c24408
--- /dev/null
+++ b/source/resource/manager/crc32.js
@@ -0,0 +1,78 @@
+/*!
+ * A crc32 function that will produce the same result as PHP's crc32() function
+ * (http://php.net/crc32).
+ *
+ * The string used in PHP must be encoded in UTF-8 or the checksums will be
+ * different. Use the following PHP to get the unsigned integer result:
+ *
+ * sprintf('%u', crc32($string));
+ *
+ * Copyright 2010, Will Bond
+ * Released under the MIT license
+ */
+var crc32;
+(function() {
+ var table = [
+ 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,
+ 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+ 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,
+ 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+ 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
+ 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+ 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,
+ 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+ 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,
+ 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+ 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,
+ 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+ 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,
+ 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+ 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
+ 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+ 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,
+ 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+ 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,
+ 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+ 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,
+ 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+ 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,
+ 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+ 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
+ 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+ 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,
+ 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+ 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,
+ 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+ 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,
+ 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+ 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,
+ 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+ 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
+ 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+ 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,
+ 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+ 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,
+ 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+ 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,
+ 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+ 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+ ];
+
+ crc32 = function(string) {
+ // This converts a unicode string to UTF-8 bytes
+ string = unescape(encodeURI(string));
+ var crc = 0 ^ (-1);
+ var len = string.length;
+ for (var i=0; i < len; i++) {
+ crc = (crc >>> 8) ^ table[
+ (crc ^ string.charCodeAt(i)) & 0xFF
+ ];
+ }
+ crc = crc ^ (-1);
+ // Turns the signed integer into an unsigned integer
+ if (crc < 0) {
+ crc += 4294967296;
+ }
+ return crc;
+ };
+})();
diff --git a/source/resource/manager/worker.js b/source/resource/manager/worker.js
new file mode 100644
index 00000000000..f0b11f03025
--- /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(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/cv/.gitignore b/source/rest/cv/.gitignore
new file mode 100644
index 00000000000..5657f6ea7d5
--- /dev/null
+++ b/source/rest/cv/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/source/rest/cv/.htaccess b/source/rest/cv/.htaccess
new file mode 100644
index 00000000000..f6a2ceb3952
--- /dev/null
+++ b/source/rest/cv/.htaccess
@@ -0,0 +1,6 @@
+
+ RewriteEngine On
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^ index.php [QSA,L]
+
\ No newline at end of file
diff --git a/source/rest/cv/.openapi-generator-ignore b/source/rest/cv/.openapi-generator-ignore
new file mode 100644
index 00000000000..25c15135533
--- /dev/null
+++ b/source/rest/cv/.openapi-generator-ignore
@@ -0,0 +1,25 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
+
+index.php
diff --git a/source/rest/cv/.openapi-generator/VERSION b/source/rest/cv/.openapi-generator/VERSION
new file mode 100644
index 00000000000..aa31e71b033
--- /dev/null
+++ b/source/rest/cv/.openapi-generator/VERSION
@@ -0,0 +1 @@
+4.0.3
\ No newline at end of file
diff --git a/source/rest/cv/README.md b/source/rest/cv/README.md
new file mode 100644
index 00000000000..c72e8148f35
--- /dev/null
+++ b/source/rest/cv/README.md
@@ -0,0 +1,151 @@
+# php-base - PHP Slim Server library for CometVisu Manager backend
+
+* [OpenAPI Generator](https://openapi-generator.tech)
+* [Slim Framework Documentation](https://www.slimframework.com/docs/)
+
+## Requirements
+
+* Web server with URL rewriting
+* PHP 7.0 or newer
+
+This package contains `.htaccess` for Apache configuration.
+If you use another server(Nginx, HHVM, IIS, lighttpd) check out [Web Servers](https://www.slimframework.com/docs/v3/start/web-servers.html) doc.
+
+## Installation via [Composer](https://getcomposer.org/)
+
+Navigate into your project's root directory and execute the bash command shown below.
+This command downloads the Slim Framework and its third-party dependencies into your project's `vendor/` directory.
+```bash
+$ composer install
+```
+
+## Start devserver
+
+Run the following command in terminal to start localhost web server, assuming `./php-slim-server/` is public-accessible directory with `index.php` file:
+```bash
+$ php -S localhost:8888 -t php-slim-server
+```
+> **Warning** This web server was designed to aid application development.
+> It may also be useful for testing purposes or for application demonstrations that are run in controlled environments.
+> It is not intended to be a full-featured web server. It should not be used on a public network.
+
+## Tests
+
+### PHPUnit
+
+This package uses PHPUnit 6 or 7(depends from your PHP version) for unit testing.
+[Test folder](test) contains templates which you can fill with real test assertions.
+How to write tests read at [PHPUnit Manual - Chapter 2. Writing Tests for PHPUnit](https://phpunit.de/manual/6.5/en/writing-tests-for-phpunit.html).
+
+#### Run
+
+Command | Target
+---- | ----
+`$ composer test` | All tests
+`$ composer test-apis` | Apis tests
+`$ composer test-models` | Models tests
+
+#### Config
+
+Package contains fully functional config `./phpunit.xml.dist` file. Create `./phpunit.xml` in root folder to override it.
+
+Quote from [3. The Command-Line Test Runner — PHPUnit 7.4 Manual](https://phpunit.readthedocs.io/en/7.4/textui.html#command-line-options):
+
+> If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and --configuration is not used, the configuration will be automatically read from that file.
+
+### PHP CodeSniffer
+
+[PHP CodeSniffer Documentation](https://github.com/squizlabs/PHP_CodeSniffer/wiki). This tool helps to follow coding style and avoid common PHP coding mistakes.
+
+#### Run
+
+```bash
+$ composer phpcs
+```
+
+#### Config
+
+Package contains fully functional config `./phpcs.xml.dist` file. It checks source code against PSR-1 and PSR-2 coding standards.
+Create `./phpcs.xml` in root folder to override it. More info at [Using a Default Configuration File](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file)
+
+### PHPLint
+
+[PHPLint Documentation](https://github.com/overtrue/phplint). Checks PHP syntax only.
+
+#### Run
+
+```bash
+$ composer phplint
+```
+
+## Show errors
+
+Switch on option in `./index.php`:
+```diff
+ /**
+ * When true, additional information about exceptions are displayed by the default
+ * error handler.
+ * Default: false
+ */
+--- // 'displayErrorDetails' => false,
++++ 'displayErrorDetails' => true,
+```
+
+## API Endpoints
+
+All URIs are relative to *http://localhost*
+
+> Important! Do not modify abstract API controllers directly! Instead extend them by implementation classes like:
+
+```php
+// src/Api/PetApi.php
+
+namespace OpenAPIServer\Api;
+
+use OpenAPIServer\Api\AbstractPetApi;
+
+class PetApi extends AbstractPetApi
+{
+
+ public function addPet($request, $response, $args)
+ {
+ // your implementation of addPet method here
+ }
+}
+```
+
+Place all your implementation classes in `./src` folder accordingly.
+For instance, when abstract class located at `./lib/Api/AbstractPetApi.php` you need to create implementation class at `./src/Api/PetApi.php`.
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*AbstractConfigApi* | **saveHiddenConfig** | **PUT** /config/hidden | Save the hidden config
+*AbstractConfigApi* | **createHiddenConfig** | **POST** /config/hidden/{section}/{key} | Creates a new config option
+*AbstractConfigApi* | **deleteHiddenConfig** | **DELETE** /config/hidden/{section}/{key} | Delete config option
+*AbstractConfigApi* | **getHiddenConfig** | **GET** /config/hidden/{section}/{key} | Provides the value of a config option
+*AbstractConfigApi* | **updateHiddenConfig** | **PUT** /config/hidden/{section}/{key} | Changes the value of an existing config option
+*AbstractDataproviderApi* | **getAddresses** | **GET** /data/addresses | Returns the list of available addresses.
+*AbstractDataproviderApi* | **getDesigns** | **GET** /data/designs | Returns the list of available designs.
+*AbstractDataproviderApi* | **getInfluxDBFields** | **GET** /data/influxdbfields | Returns the list of available influx database fields.
+*AbstractDataproviderApi* | **getInfluxDBTags** | **GET** /data/influxdbtags | Returns the list of available influx database tags.
+*AbstractDataproviderApi* | **getInfluxDBs** | **GET** /data/influxdbs | Returns the list of available influx databases.
+*AbstractDataproviderApi* | **getRRDs** | **GET** /data/rrds | Returns the list of available RRDs.
+*AbstractFsApi* | **checkEnvironment** | **GET** /fs/check | Check filesystem environment (access rights, etc)
+*AbstractFsApi* | **create** | **POST** /fs | Create a new file or folder on the host
+*AbstractFsApi* | **delete** | **DELETE** /fs | Deletes a file/folder
+*AbstractFsApi* | **move** | **PUT** /fs/move | Move folder or file to a new place
+*AbstractFsApi* | **read** | **GET** /fs | Return directory listing or file content
+*AbstractFsApi* | **update** | **PUT** /fs | Update an existing file
+
+
+## Models
+
+* OpenAPIServer\Model\ConfigOption
+* OpenAPIServer\Model\ConfigSection
+* OpenAPIServer\Model\DataProviderEntry
+* OpenAPIServer\Model\EnvironmentState
+* OpenAPIServer\Model\FsEntry
+* OpenAPIServer\Model\InlineObject
+* OpenAPIServer\Model\ReadResponse
+
+
diff --git a/source/rest/cv/composer.json b/source/rest/cv/composer.json
new file mode 100644
index 00000000000..5ec98b94c39
--- /dev/null
+++ b/source/rest/cv/composer.json
@@ -0,0 +1,22 @@
+{
+ "minimum-stability": "RC",
+ "repositories": [
+ {
+ "type": "github",
+ "url": "https://github.com/ybelenko/slim-token-authentication"
+ }
+ ],
+ "require": {
+ "php": "^7.0",
+ "slim/slim": "3.*",
+ "dyorg/slim-token-authentication": "dev-per_route_apply"
+ },
+ "autoload": {
+ "psr-4": { "OpenAPIServer\\": [
+ "lib/",
+ "src/"
+ ]}
+ },
+ "scripts": {
+ }
+}
diff --git a/source/rest/cv/composer.lock b/source/rest/cv/composer.lock
new file mode 100644
index 00000000000..90c9836a5cd
--- /dev/null
+++ b/source/rest/cv/composer.lock
@@ -0,0 +1,385 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "355625635032a700d04c5484befe32fa",
+ "packages": [
+ {
+ "name": "container-interop/container-interop",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/container-interop/container-interop.git",
+ "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+ "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+ "shasum": ""
+ },
+ "require": {
+ "psr/container": "^1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Interop\\Container\\": "src/Interop/Container/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
+ "homepage": "https://github.com/container-interop/container-interop",
+ "time": "2017-02-14T19:40:03+00:00"
+ },
+ {
+ "name": "dyorg/slim-token-authentication",
+ "version": "dev-per_route_apply",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ybelenko/slim-token-authentication.git",
+ "reference": "868c43d3ac3d5a060d0900f49394d30d3056a10f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ybelenko/slim-token-authentication/zipball/868c43d3ac3d5a060d0900f49394d30d3056a10f",
+ "reference": "868c43d3ac3d5a060d0900f49394d30d3056a10f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "equip/dispatch": "^2.0",
+ "phpunit/phpunit": "^6.5",
+ "slim/slim": "^3.0",
+ "squizlabs/php_codesniffer": "~2.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Dyorg\\": "src"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Dyorg\\": "tests",
+ "Dyorg\\TokenAuthentication\\Example\\": "example"
+ }
+ },
+ "scripts": {
+ "test": [
+ "phpunit"
+ ]
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dyorg Almeida",
+ "email": "dyorg@rabbiit.com",
+ "homepage": "https://rabbiit.com/",
+ "role": "Developer"
+ }
+ ],
+ "description": "Slim 3.0+ Token Authentication Middleware",
+ "homepage": "https://github.com/dyorg/slim-token-authentication",
+ "keywords": [
+ "auth",
+ "authentication",
+ "authorization",
+ "middleware",
+ "slim",
+ "token"
+ ],
+ "support": {
+ "source": "https://github.com/ybelenko/slim-token-authentication/tree/per_route_apply"
+ },
+ "time": "2018-12-25T08:48:29+00:00"
+ },
+ {
+ "name": "nikic/fast-route",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/FastRoute.git",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35|~5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FastRoute\\": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov",
+ "email": "nikic@php.net"
+ }
+ ],
+ "description": "Fast request router for PHP",
+ "keywords": [
+ "router",
+ "routing"
+ ],
+ "time": "2018-02-13T20:26:39+00:00"
+ },
+ {
+ "name": "pimple/pimple",
+ "version": "v3.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silexphp/Pimple.git",
+ "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
+ "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/container": "^1.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Pimple": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Pimple, a simple Dependency Injection Container",
+ "homepage": "http://pimple.sensiolabs.org",
+ "keywords": [
+ "container",
+ "dependency injection"
+ ],
+ "time": "2018-01-21T07:42:36+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "time": "2016-08-06T14:39:51+00:00"
+ },
+ {
+ "name": "slim/slim",
+ "version": "3.12.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slimphp/Slim.git",
+ "reference": "eaee12ef8d0750db62b8c548016d82fb33addb6b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slimphp/Slim/zipball/eaee12ef8d0750db62b8c548016d82fb33addb6b",
+ "reference": "eaee12ef8d0750db62b8c548016d82fb33addb6b",
+ "shasum": ""
+ },
+ "require": {
+ "container-interop/container-interop": "^1.2",
+ "nikic/fast-route": "^1.0",
+ "php": ">=5.5.0",
+ "pimple/pimple": "^3.0",
+ "psr/container": "^1.0",
+ "psr/http-message": "^1.0"
+ },
+ "provide": {
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0",
+ "squizlabs/php_codesniffer": "^2.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Slim\\": "Slim"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Allen",
+ "email": "rob@akrabat.com",
+ "homepage": "http://akrabat.com"
+ },
+ {
+ "name": "Josh Lockhart",
+ "email": "hello@joshlockhart.com",
+ "homepage": "https://joshlockhart.com"
+ },
+ {
+ "name": "Gabriel Manricks",
+ "email": "gmanricks@me.com",
+ "homepage": "http://gabrielmanricks.com"
+ },
+ {
+ "name": "Andrew Smith",
+ "email": "a.smith@silentworks.co.uk",
+ "homepage": "http://silentworks.co.uk"
+ }
+ ],
+ "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
+ "homepage": "https://slimframework.com",
+ "keywords": [
+ "api",
+ "framework",
+ "micro",
+ "router"
+ ],
+ "time": "2019-04-16T16:47:29+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "RC",
+ "stability-flags": {
+ "dyorg/slim-token-authentication": 20
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.0"
+ },
+ "platform-dev": []
+}
diff --git a/source/rest/cv/index.php b/source/rest/cv/index.php
new file mode 100644
index 00000000000..d39ff637c58
--- /dev/null
+++ b/source/rest/cv/index.php
@@ -0,0 +1,118 @@
+ '1.1',
+
+ /**
+ * Size of each chunk read from the Response body when sending to the browser.
+ * Default: 4096
+ */
+ // 'responseChunkSize' => 4096,
+
+ /**
+ * If false, then no output buffering is enabled. If 'append' or 'prepend', then
+ * any echo or print statements are captured and are either appended or prepended
+ * to the Response returned from the route callable.
+ * Default: 'append'
+ */
+ // 'outputBuffering' => 'append',
+
+ /**
+ * When true, the route is calculated before any middleware is executed. This
+ * means that you can inspect route parameters in middleware if you need to.
+ * Default: false
+ */
+ 'determineRouteBeforeAppMiddleware' => true,
+
+ /**
+ * When true, additional information about exceptions are displayed by the default
+ * error handler.
+ * Default: false
+ */
+ 'displayErrorDetails' => true,
+
+ /**
+ * When true, Slim will add a Content-Length header to the response. If you are using
+ * a runtime analytics tool, such as New Relic, then this should be disabled.
+ * Default: true
+ */
+ // 'addContentLengthHeader' => true,
+
+ /**
+ * Filename for caching the FastRoute routes. Must be set to to a valid filename within
+ * a writeable directory. If the file does not exist, then it is created with the correct
+ * cache information on first run.
+ * Set to false to disable the FastRoute cache system.
+ * Default: false
+ */
+ // 'routerCacheFile' => false,
+];
+
+/**
+ * Token Middleware 1.x Options
+ * Options `header`, `regex`, `parameter`, `cookie`, `attribute`, `path`, `except`, `authenticator`
+ * are handled by SlimRouter class. These options are ignored by app and they omitted from current
+ * example.
+ * Ref: https://github.com/dyorg/slim-token-authentication/tree/1.x
+ */
+$config['tokenAuthenticationOptions'] = [
+ /**
+ * Tokens are essentially passwords. You should treat them as such and you should always
+ * use HTTPS. If the middleware detects insecure usage over HTTP it will return unathorized
+ * with a message Required HTTPS for token authentication. This rule is relaxed for requests
+ * on localhost. To allow insecure usage you must enable it manually by setting secure to
+ * false.
+ * Default: true
+ */
+ // 'secure' => true,
+
+ /**
+ * Alternatively you can list your development host to have relaxed security.
+ * Default: ['localhost', '127.0.0.1']
+ */
+ // 'relaxed' => ['localhost', '127.0.0.1'],
+
+ /**
+ * By default on ocurred a fail on authentication, is sent a response on json format with a
+ * message (`Invalid Token` or `Not found Token`) and with the token (if found), with status
+ * `401 Unauthorized`. You can customize it by setting a callable function on error option.
+ * Default: null
+ */
+ // 'error' => null,
+];
+
+$router = new SlimRouter($config);
+$app = $router->getSlimApp();
+$app->add(function($request, $response, $next) {
+ $response = $next($request, $response);
+ return $response
+ ->withHeader('Access-Control-Allow-Origin', '*')
+ ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
+ ->withHeader("Access-Control-Allow-Methods", 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
+});
+//$router->initRoutes();
+$app->run();
diff --git a/source/rest/cv/lib/Api/AbstractConfigApi.php b/source/rest/cv/lib/Api/AbstractConfigApi.php
new file mode 100644
index 00000000000..d57b11b02cb
--- /dev/null
+++ b/source/rest/cv/lib/Api/AbstractConfigApi.php
@@ -0,0 +1,164 @@
+container = $container;
+ }
+
+
+ /**
+ * POST createHiddenConfig
+ * Summary: Creates a new config option
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function createHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ $body = $request->getParsedBody();
+ $message = "How about implementing createHiddenConfig as a POST method in OpenAPIServer\Api\ConfigApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * DELETE deleteHiddenConfig
+ * Summary: Delete config option
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function deleteHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ $message = "How about implementing deleteHiddenConfig as a DELETE method in OpenAPIServer\Api\ConfigApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET getHiddenConfig
+ * Summary: Provides the value of a config option
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ $message = "How about implementing getHiddenConfig as a GET method in OpenAPIServer\Api\ConfigApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * PUT saveHiddenConfig
+ * Summary: Save the hidden config
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function saveHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $body = $request->getParsedBody();
+ $message = "How about implementing saveHiddenConfig as a PUT method in OpenAPIServer\Api\ConfigApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * PUT updateHiddenConfig
+ * Summary: Changes the value of an existing config option
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function updateHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ $body = $request->getParsedBody();
+ $message = "How about implementing updateHiddenConfig as a PUT method in OpenAPIServer\Api\ConfigApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+}
diff --git a/source/rest/cv/lib/Api/AbstractDataproviderApi.php b/source/rest/cv/lib/Api/AbstractDataproviderApi.php
new file mode 100644
index 00000000000..ae07a405ee2
--- /dev/null
+++ b/source/rest/cv/lib/Api/AbstractDataproviderApi.php
@@ -0,0 +1,185 @@
+container = $container;
+ }
+
+
+ /**
+ * GET getAddresses
+ * Summary: Returns the list of available addresses.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getAddresses(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $message = "How about implementing getAddresses as a GET method in OpenAPIServer\Api\DataproviderApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET getDesigns
+ * Summary: Returns the list of available designs.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getDesigns(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $message = "How about implementing getDesigns as a GET method in OpenAPIServer\Api\DataproviderApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET getInfluxDBFields
+ * Summary: Returns the list of available influx database fields.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getInfluxDBFields(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $auth = $request->getQueryParam('auth');
+ $measurement = $request->getQueryParam('measurement');
+ $message = "How about implementing getInfluxDBFields as a GET method in OpenAPIServer\Api\DataproviderApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET getInfluxDBTags
+ * Summary: Returns the list of available influx database tags.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getInfluxDBTags(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $auth = $request->getQueryParam('auth');
+ $measurement = $request->getQueryParam('measurement');
+ $message = "How about implementing getInfluxDBTags as a GET method in OpenAPIServer\Api\DataproviderApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET getInfluxDBs
+ * Summary: Returns the list of available influx databases.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getInfluxDBs(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $auth = $request->getQueryParam('auth');
+ $message = "How about implementing getInfluxDBs as a GET method in OpenAPIServer\Api\DataproviderApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET getRRDs
+ * Summary: Returns the list of available RRDs.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getRRDs(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $message = "How about implementing getRRDs as a GET method in OpenAPIServer\Api\DataproviderApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+}
diff --git a/source/rest/cv/lib/Api/AbstractFsApi.php b/source/rest/cv/lib/Api/AbstractFsApi.php
new file mode 100644
index 00000000000..5bf255dc50a
--- /dev/null
+++ b/source/rest/cv/lib/Api/AbstractFsApi.php
@@ -0,0 +1,197 @@
+container = $container;
+ }
+
+
+ /**
+ * GET checkEnvironment
+ * Summary: Check filesystem environment (access rights, etc)
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function checkEnvironment(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $message = "How about implementing checkEnvironment as a GET method in OpenAPIServer\Api\FsApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * POST create
+ * Summary: Create a new file or folder on the host
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function create(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $path = $request->getQueryParam('path');
+ $hash = $request->getQueryParam('hash');
+ $type = $request->getQueryParam('type');
+ $file = (key_exists('file', $request->getUploadedFiles())) ? $request->getUploadedFiles()['file'] : null;
+ $filename = $request->getParsedBodyParam('filename');
+ $force = $request->getParsedBodyParam('force');
+ $message = "How about implementing create as a POST method in OpenAPIServer\Api\FsApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * DELETE delete
+ * Summary: Deletes a file/folder
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function delete(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $path = $request->getQueryParam('path');
+ $hash = $request->getQueryParam('hash');
+ $force = $request->getQueryParam('force');
+ $message = "How about implementing delete as a DELETE method in OpenAPIServer\Api\FsApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * PUT move
+ * Summary: Move folder or file to a new place
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function move(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $src = $request->getQueryParam('src');
+ $target = $request->getQueryParam('target');
+ $message = "How about implementing move as a PUT method in OpenAPIServer\Api\FsApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * GET read
+ * Summary: Return directory listing or file content
+ * Notes: Returns a list of files/directories if the requested path pointed to a directory or the content of the file otherwise
+ * Output-Formats: [application/json, text/_*]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function read(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $path = $request->getQueryParam('path');
+ $hash = $request->getQueryParam('hash');
+ $download = $request->getQueryParam('download');
+ $recursive = $request->getQueryParam('recursive');
+ $message = "How about implementing read as a GET method in OpenAPIServer\Api\FsApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+
+ /**
+ * PUT update
+ * Summary: Update an existing file
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function update(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $queryParams = $request->getQueryParams();
+ $path = $request->getQueryParam('path');
+ $hash = $request->getQueryParam('hash');
+ $body = $request->getParsedBody();
+ $message = "How about implementing update as a PUT method in OpenAPIServer\Api\FsApi class?";
+ throw new Exception($message);
+
+ return $response->write($message)->withStatus(501);
+ }
+}
diff --git a/source/rest/cv/lib/SlimRouter.php b/source/rest/cv/lib/SlimRouter.php
new file mode 100644
index 00000000000..026084bac64
--- /dev/null
+++ b/source/rest/cv/lib/SlimRouter.php
@@ -0,0 +1,324 @@
+ 'PUT',
+ 'basePathWithoutHost' => '',
+ 'path' => '/config/hidden',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractConfigApi',
+ 'userClassname' => 'ConfigApi',
+ 'operationId' => 'saveHiddenConfig',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'POST',
+ 'basePathWithoutHost' => '',
+ 'path' => '/config/hidden/{section}/{key}',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractConfigApi',
+ 'userClassname' => 'ConfigApi',
+ 'operationId' => 'createHiddenConfig',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'DELETE',
+ 'basePathWithoutHost' => '',
+ 'path' => '/config/hidden/{section}/{key}',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractConfigApi',
+ 'userClassname' => 'ConfigApi',
+ 'operationId' => 'deleteHiddenConfig',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/config/hidden/{section}/{key}',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractConfigApi',
+ 'userClassname' => 'ConfigApi',
+ 'operationId' => 'getHiddenConfig',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'PUT',
+ 'basePathWithoutHost' => '',
+ 'path' => '/config/hidden/{section}/{key}',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractConfigApi',
+ 'userClassname' => 'ConfigApi',
+ 'operationId' => 'updateHiddenConfig',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/data/addresses',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractDataproviderApi',
+ 'userClassname' => 'DataproviderApi',
+ 'operationId' => 'getAddresses',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/data/designs',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractDataproviderApi',
+ 'userClassname' => 'DataproviderApi',
+ 'operationId' => 'getDesigns',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/data/influxdbfields',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractDataproviderApi',
+ 'userClassname' => 'DataproviderApi',
+ 'operationId' => 'getInfluxDBFields',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/data/influxdbtags',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractDataproviderApi',
+ 'userClassname' => 'DataproviderApi',
+ 'operationId' => 'getInfluxDBTags',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/data/influxdbs',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractDataproviderApi',
+ 'userClassname' => 'DataproviderApi',
+ 'operationId' => 'getInfluxDBs',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/data/rrds',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractDataproviderApi',
+ 'userClassname' => 'DataproviderApi',
+ 'operationId' => 'getRRDs',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/fs/check',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractFsApi',
+ 'userClassname' => 'FsApi',
+ 'operationId' => 'checkEnvironment',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'POST',
+ 'basePathWithoutHost' => '',
+ 'path' => '/fs',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractFsApi',
+ 'userClassname' => 'FsApi',
+ 'operationId' => 'create',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'DELETE',
+ 'basePathWithoutHost' => '',
+ 'path' => '/fs',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractFsApi',
+ 'userClassname' => 'FsApi',
+ 'operationId' => 'delete',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'PUT',
+ 'basePathWithoutHost' => '',
+ 'path' => '/fs/move',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractFsApi',
+ 'userClassname' => 'FsApi',
+ 'operationId' => 'move',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'GET',
+ 'basePathWithoutHost' => '',
+ 'path' => '/fs',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractFsApi',
+ 'userClassname' => 'FsApi',
+ 'operationId' => 'read',
+ 'authMethods' => [
+ ],
+ ],
+ [
+ 'httpMethod' => 'PUT',
+ 'basePathWithoutHost' => '',
+ 'path' => '/fs',
+ 'apiPackage' => 'OpenAPIServer\Api',
+ 'classname' => 'AbstractFsApi',
+ 'userClassname' => 'FsApi',
+ 'operationId' => 'update',
+ 'authMethods' => [
+ ],
+ ],
+ ];
+
+ /**
+ * Class constructor
+ *
+ * @param ContainerInterface|array $settings Either a ContainerInterface or an associative array of app settings
+ *
+ * @throws InvalidArgumentException When no container is provided that implements ContainerInterface
+ * @throws Exception When implementation class doesn't exists
+ */
+ public function __construct($settings = [])
+ {
+ $this->slimApp = new App($settings);
+
+ // middlewares requires Psr\Container\ContainerInterface
+ $container = $this->slimApp->getContainer();
+
+
+ foreach ($this->operations as $operation) {
+ $callback = function ($request, $response, $arguments) use ($operation) {
+ $message = "How about extending {$operation['classname']} by {$operation['apiPackage']}\\{$operation['userClassname']} class implementing {$operation['operationId']} as a {$operation['httpMethod']} method?";
+ throw new Exception($message);
+ return $response->withStatus(501)->write($message);
+ };
+ $middlewares = [];
+
+ if (class_exists("\\{$operation['apiPackage']}\\{$operation['userClassname']}")) {
+ $callback = "\\{$operation['apiPackage']}\\{$operation['userClassname']}:{$operation['operationId']}";
+ }
+
+
+ $this->addRoute(
+ [$operation['httpMethod']],
+ "{$operation['basePathWithoutHost']}{$operation['path']}",
+ $callback,
+ $middlewares
+ )->setName($operation['operationId']);
+ }
+ }
+
+ /**
+ * Merges user defined options with dynamic params
+ *
+ * @param array $options Params which need to merge into user options
+ *
+ * @return array Merged array
+ */
+ private function getTokenAuthenticationOptions(array $options)
+ {
+ if (is_array($this->slimApp->getContainer()['tokenAuthenticationOptions']) === false) {
+ return $options;
+ }
+
+ return array_merge($this->slimApp->getContainer()['tokenAuthenticationOptions'], $options);
+ }
+
+ /**
+ * Add route with multiple methods
+ *
+ * @param string[] $methods Numeric array of HTTP method names
+ * @param string $pattern The route URI pattern
+ * @param callable|string $callable The route callback routine
+ * @param array|null $middlewares List of middlewares
+ *
+ * @return RouteInterface
+ *
+ * @throws InvalidArgumentException If the route pattern isn't a string
+ */
+ public function addRoute(array $methods, string $pattern, $callable, $middlewares = [])
+ {
+ $route = $this->slimApp->map($methods, $pattern, $callable);
+ foreach ($middlewares as $middleware) {
+ $route->add($middleware);
+ }
+ return $route;
+ }
+
+ /**
+ * Returns Slim Framework instance
+ *
+ * @return App
+ */
+ public function getSlimApp()
+ {
+ return $this->slimApp;
+ }
+}
diff --git a/source/rest/cv/phpcs.xml.dist b/source/rest/cv/phpcs.xml.dist
new file mode 100644
index 00000000000..455874b77f5
--- /dev/null
+++ b/source/rest/cv/phpcs.xml.dist
@@ -0,0 +1,31 @@
+
+
+ PHP_CodeSniffer config for CometVisu Manager backend
+
+
+ ./
+
+
+ ./vendor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/rest/cv/phpunit.xml.dist b/source/rest/cv/phpunit.xml.dist
new file mode 100644
index 00000000000..6af1442ee65
--- /dev/null
+++ b/source/rest/cv/phpunit.xml.dist
@@ -0,0 +1,30 @@
+
+
+
+
+ ./test/Api
+
+
+ ./test/Model
+
+
+
+
+ ./lib/Api
+ ./lib/Model
+
+
+
+
+
+
diff --git a/source/rest/cv/src/Api/ConfigApi.php b/source/rest/cv/src/Api/ConfigApi.php
new file mode 100644
index 00000000000..992b29bd6f1
--- /dev/null
+++ b/source/rest/cv/src/Api/ConfigApi.php
@@ -0,0 +1,196 @@
+apiConfig = include(getcwd() . '/src/config.php');
+ $this->configFile = realpath($this->apiConfig->configDir . '/hidden.php');
+ $this->load();
+ }
+
+ protected function load()
+ {
+ $hidden = array();
+ include($this->configFile);
+ $this->hidden = $hidden;
+ }
+
+ protected function dump() {
+ $out = <<hidden as $section => $options )
+ {
+ if (!$first) {
+ $out .= ",\n";
+ } else {
+ $first = false;
+ }
+ $out .= " '$section' => array(";
+
+ $firstKey = true;
+ foreach( $options as $key => $value )
+ {
+ if( !$firstKey ) {
+ $out .= ', ';
+ } else {
+ $firstKey = false;
+ }
+ $out .= "'" . $key . "' => '" . $value . "'";
+ }
+ $out .= ')';
+ }
+ $out .= "\n);\n?>";
+
+ print_r($this->hidden);
+
+
+ // step 3: write
+ $res = file_put_contents( $this->configFile, $out );
+ if ($res === false && !is_writeable($this->configFile)) {
+ throw new Exception('Configuration file is not writeable', 403);
+ }
+
+ // step 4: read it in, so that the user sees it
+ $this->load();
+ }
+
+ protected function getSection($name)
+ {
+ if ($name === '*') {
+ // return everything
+ return $this->hidden;
+ }
+ return array_key_exists($name, $this->hidden) ? $this->hidden[$name] : null;
+ }
+
+ public function createHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ // TODO: sanitize key / value
+ $value = $request->getParsedBody();
+
+ if (!array_key_exists($section, $this->hidden)) {
+ $this->hidden[$section] = array();
+ } elseif (array_key_exists($key, $this->config[$section])) {
+ return $response->withJson(['message' => 'Config option already exists'], 406);
+ }
+ $this->hidden[$section][$key] = $value;
+ try {
+ $this->dump();
+ } catch (Exception $e) {
+ return $response->withJson(['message' => $e->getMessage()], $e->getCode());
+ }
+ return $response->withStatus(200);
+ }
+
+ public function deleteHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ if ($key === '*') {
+ $key = null;
+ }
+ if (array_key_exists($section, $this->hidden)) {
+ if ($key) {
+ if (array_key_exists($key, $this->hidden[$section])) {
+ unset($this->hidden[$section][$key]);
+ } else {
+ return $response->withJson(['message' => 'Config option not found'], 403);
+ }
+ } else {
+ // delete complete section
+ unset($this->hidden[$section]);
+ }
+ try {
+ $this->dump();
+ } catch (Exception $e) {
+ return $response->withJson(['message' => $e->getMessage()], $e->getCode());
+ }
+ return $response->withStatus(200);
+ } else {
+ return $response->withJson(['message' => 'Config option not found'], 403);
+ }
+ }
+
+ public function getHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $sectionName = $args['section'];
+ $key = $args['key'];
+ if ($key === '*') {
+ $key = null;
+ }
+
+ $section = $this->getSection($sectionName);
+ if ($section && (!$key || array_key_exists($key, $section))) {
+ if (!$key) {
+ return $response->withJson($section);
+ } else {
+ return $response->withJson($section[$key]);
+ }
+ } else {
+ return $response->withJson(['message' => 'Config option not found'], 404);
+ }
+ }
+
+ public function saveHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $this->hidden = array();
+ $value = $request->getParsedBody();
+ forEach($value as $section) {
+ if ($section['name']) {
+ $this->hidden[$section['name']] = array();
+ forEach ($section['options'] as $option) {
+ if ($option['key']) {
+ $this->hidden[$section['name']][$option['key']] = $option['value'];
+ }
+ };
+ }
+ }
+ try {
+ $this->dump();
+ } catch (Exception $e) {
+ return $response->withJson(['message' => $e->getMessage()], $e->getCode());
+ }
+ return $response->withStatus(200);
+ }
+
+ public function updateHiddenConfig(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $section = $args['section'];
+ $key = $args['key'];
+ // TODO: sanitize key / value
+ $value = $request->getParsedBody();
+
+ if (array_key_exists($section, $this->hidden) && array_key_exists($key, $this->hidden[$section])) {
+ $this->hidden[$section][$key] = $value;
+ try {
+ $this->dump();
+ } catch (Exception $e) {
+ return $response->withJson(['message' => $e->getMessage()], $e->getCode());
+ }
+ } else {
+ return $response->withJson(['message' => 'Config option nit found'], 403);
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/rest/cv/src/Api/DataproviderApi.php b/source/rest/cv/src/Api/DataproviderApi.php
new file mode 100644
index 00000000000..4468305ceb9
--- /dev/null
+++ b/source/rest/cv/src/Api/DataproviderApi.php
@@ -0,0 +1,285 @@
+apiConfig = include(getcwd() . '/src/config.php');
+ }
+
+ private function respondError($response, Exception $e) {
+ return $response->withJson(array('message' => $e->getMessage()), $e->getCode());
+ }
+
+ /**
+ * GET getAddresses
+ * Summary: Returns the list of available addresses.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getAddresses(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ // list of group-addresses, main-groups and middle-groups
+ $arrGA = array();
+ $arrHG = array();
+ $arrMG = array();
+
+ forEach($this->apiConfig->addressFiles['addresses'] as $file) {
+ if (file_exists($file) && filesize($file) > 0) {
+ $arrGA = parse_ini($file);
+ }
+ }
+
+ forEach($this->apiConfig->addressFiles['mainGroups'] as $file) {
+ if (file_exists($file) && filesize($file) > 0) {
+ $arrHG = parse_ini($file);
+ }
+ }
+
+ forEach($this->apiConfig->addressFiles['middleGroups'] as $file) {
+ if (file_exists($file) && filesize($file) > 0) {
+ $arrMG = parse_ini($file);
+ }
+ }
+
+ // create a list of ALL group-addresses, multi-dimensional
+ $arrAdresses = array();
+
+ // sort the group addresses
+ uksort($arrGA, array('DataproviderApi', 'GASort'));
+
+ foreach ($arrGA as $strGA => $arrData) {
+ $arrGAParts = explode("/", $strGA, 3);
+
+ $strHG = "";
+ if (true === isset($arrHG[$arrGAParts[0]])) {
+ $strHG = utf8_encode($arrHG[$arrGAParts[0]]['name']);
+ }
+
+ $strMG = "";
+ if (true === isset($arrMG[$arrGAParts[1]])) {
+ $strMG = utf8_encode($arrMG[$arrGAParts[1]]['name']);
+ }
+
+ $arrAdresses[$strHG . " " . $strMG][] = array(
+ 'value' => $strGA,
+ 'label' => utf8_encode($arrData['name']),
+ 'hints' => array(
+ 'transform' => "DPT:" . $arrData['DPTSubId'],
+ ),
+ );
+ }
+
+ return $response->withJson($arrAdresses);
+ }
+
+ /**
+ * GET getDesigns
+ * Summary: Returns the list of available designs.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getDesigns(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $designs = array();
+ if ($handle = opendir($this->apiConfig->designsDir)) {
+ while (false !== ($entry = readdir($handle))) {
+ $filePath = realpath($this->apiConfig->designsDir . "/" . $entry);
+ if (is_dir($filePath) && substr($entry, 0, 1) !== '.') {
+ array_push($designs, $entry);
+ }
+ }
+ }
+
+ return $response->withJson($designs);
+ }
+
+ /**
+ * GET getInfluxDBFields
+ * Summary: Returns the list of available influx database fields.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getInfluxDBFields(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $auth = $request->getQueryParam('auth');
+ $measurement = $request->getQueryParam('measurement');
+ try {
+ $data = getFields( $measurement, $auth );
+ } catch (Exception $e) {
+ return $this->respondError($response, $e);
+ }
+
+ return $response->withJson($data);
+ }
+
+ /**
+ * GET getInfluxDBTags
+ * Summary: Returns the list of available influx database tags.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getInfluxDBTags(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $auth = $request->getQueryParam('auth');
+ $measurement = $request->getQueryParam('measurement');
+ try {
+ $data = getTags($measurement, $auth);
+ } catch (Exception $e) {
+ return $this->respondError($response, $e);
+ }
+
+ return $response->withJson($data);
+ }
+
+ /**
+ * GET getInfluxDBs
+ * Summary: Returns the list of available influx databases.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getInfluxDBs(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $auth = $request->getQueryParam('auth');
+
+ $arrData = array();
+ try {
+
+ $databases = json_decode(query('show databases', NULL, $auth), true);
+ foreach ($databases['results'][0]['series'][0]['values'] as $databaseEntry) {
+ $database = $databaseEntry[0];
+ if ('_internal' == $database)
+ continue;
+
+ $resSeries = array();
+ $measurements = array();
+
+ $seriesArr = json_decode(query('SHOW SERIES', $database, $auth), true);
+ $series = $seriesArr['results'][0]['series'][0]['values'];
+ if (NULL != $series) {
+ foreach ($series as $thisSeries) {
+ $list = explode(',', $thisSeries[0]);
+ $measurement = array_shift($list);
+ if (!array_key_exists($measurement, $measurements))
+ $measurements[$measurement] = array();
+
+ foreach ($list as $tag) {
+ $tagKV = explode('=', $tag);
+ if (array_key_exists($tagKV[0], $measurements[$measurement])) {
+ $measurements[$measurement][$tagKV[0]][$tagKV[1]] = 1; // fake set operation
+ } else {
+ $measurements[$measurement][$tagKV[0]] = array($tagKV[1] => 1); // fake set operation
+ }
+ }
+ }
+ // translate fake set to real set/array
+ foreach ($measurements as $measurement => $measurementValues) {
+ foreach ($measurementValues as $tag => $tagValues)
+ $measurements[$measurement][$tag] = array_keys($tagValues);
+ $resSeries[$measurement] = $measurements[$measurement];
+
+ // now forget all the nice information and compact to the relevant one:
+ $arrData[] = array(
+ 'value' => $database . '/' . $measurement,
+ 'label' => $database . '/' . $measurement
+ );
+ }
+ }
+ }
+ } catch (Exception $e) {
+ return $this->respondError($response, $e);
+ }
+
+ return $response->withJson($arrData);
+ }
+
+ /**
+ * GET getRRDs
+ * Summary: Returns the list of available RRDs.
+ * Output-Formats: [application/json]
+ *
+ * @param ServerRequestInterface $request Request
+ * @param ResponseInterface $response Response
+ * @param array|null $args Path arguments
+ *
+ * @return ResponseInterface
+ * @throws Exception to force implementation class to override this method
+ */
+ public function getRRDs(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ $sensors = null;
+ forEach ($this->apiConfig->onewire['sensors'] as $file) {
+ if (file_exists($file)) {
+ $sensors = parse_ini($file);
+ break;
+ }
+ }
+ $arrData = array();
+
+ foreach ($this->apiConfig->onewire['rrdDir'] as $strFilename) {
+ $strFileBasename = basename($strFilename, '.rrd');
+ $arrRRDParts = explode("_", $strFileBasename, 2);
+
+ $arrData[] = array(
+ 'value' => utf8_encode($strFileBasename),
+ 'label' => utf8_encode($sensors[$arrRRDParts[0]]['name']),
+ );
+ }
+ return $response->withJson($arrData);
+ }
+
+ /**
+ * Sort two GroupAddresses, natural sorting
+ *
+ * @param string $a
+ * @param string $b
+ */
+ private static function GASort($a, $b) {
+ $strA = preg_replace('/(^|\/)(\d)(\/|$)/', '${1}0${2}${3}', $a);
+ $strB = preg_replace('/(^|\/)(\d)(\/|$)/', '${1}0${2}${3}', $b);
+
+ return strcmp($strA, $strB);
+ }
+}
\ No newline at end of file
diff --git a/source/rest/cv/src/Api/FsApi.php b/source/rest/cv/src/Api/FsApi.php
new file mode 100644
index 00000000000..e024cfa6a97
--- /dev/null
+++ b/source/rest/cv/src/Api/FsApi.php
@@ -0,0 +1,358 @@
+config = include(getcwd() . '/src/config.php');
+ $this->baseDir = $this->config->configDir;
+ if (!$this->baseDir) {
+ throw new Exception("resources/config path not found");
+ }
+ $map = function ($val) { return $val['mountPoint']; };
+ $this->mounts = array_map($map, $this->config->mounts);
+ }
+
+ public function checkEnvironment(ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ $res = [];
+ // config folder must be writeable
+ forEach(['.', 'media', 'backup', 'hidden.php'] as $folder) {
+ array_push($res, [
+ "entity" => $folder,
+ "state" => $this->getState(realpath($this->baseDir . '/' . $folder))
+ ]);
+ };
+ return $response->withJson($res);
+ }
+
+ public function create(ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ return $this->__processRequest($request, $response, function ($request, $response, $fsPath, $mount) {
+ return $this->createFolder($response, $fsPath);
+ }, function ($request, $response, $fsPath, $mount) {
+ return $this->createFile($response, $fsPath, $request->getBody(), $request->getQueryParam('hash'));
+ }, 'create');
+ }
+
+ public function read(ServerRequestInterface $request, ResponseInterface $response, array $args)
+ {
+ return $this->__processRequest($request, $response, function ($request, $response, $fsPath, $mount) {
+ $recursive = $request->getQueryParam('recursive');
+ return $response->withJson($this->listFolder($fsPath, $recursive, $mount));
+ }, function ($request, $response, $fsPath, $mount) {
+ $download = $request->getQueryParam('download');
+ if ($download) {
+ $response = $response->withHeader('Content-Disposition', 'attachment; filename=' . basename($fsPath));
+ }
+ return $response->write(file_get_contents($fsPath))->withHeader('Content-Type', FileHandler::getMimeTypeFromSuffix($fsPath));
+ }, 'read');
+ }
+
+ public function update(ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ return $this->__processRequest($request, $response, null, function ($request, $response, $fsPath, $mount) {
+ return $this->updateFile($response, $fsPath, $request->getBody(), $request->getQueryParam('hash'));
+ }, 'update');
+ }
+
+ public function delete(ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ return $this->__processRequest($request, $response, function ($request, $response, $fsPath) {
+ try {
+ FileHandler::deleteFolder($fsPath, $request->getQueryParam('force'));
+ } catch (Exception $e) {
+ return $response->withJson(array('message' => $e->getMessage()), $e->getCode());
+ }
+ }, function ($request, $response, $fsPath) {
+ try {
+ FileHandler::deleteFile($fsPath, $request->getQueryParam('force'));
+ } catch (Exception $e) {
+ return $response->withJson(array('message' => $e->getMessage()), $e->getCode());
+ }
+ }, 'delete');
+ }
+
+ public function move(ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ $src = $request->getQueryParam('src');
+ $target = $request->getQueryParam('target');
+ $renaming = dirname($src) == dirname($target);
+ $mount = $this->getMount($src);
+ $fsPath = $this->getAbsolutePath($src, $mount);
+ if ($renaming) {
+ $targetPath= dirname($fsPath) . '/' . basename($target);
+ } else {
+ $targetMount = $this->getMount($src);
+ $targetPath = $this->getAbsolutePath($target, $targetMount);
+ }
+ if (!file_exists($fsPath)) {
+ return $response->withJson(array('message' => 'Source not found'), 404);
+ }
+ if (file_exists(targetPath)) {
+ return $response->withJson(array('message' => 'Target exists'), 406);
+ }
+ if (!$this->checkAccess(targetPath) || ($mount && $mount['writeable'] === false) || ($targetMount && $targetMount['writeable'] === false)) {
+ return $response->withJson(array('message' => 'Forbidden'), 403);
+ } else {
+ try {
+ if (FileHandler::rename($fsPath, $targetPath)) {
+ $response->withStatus(200);
+ } else {
+ return $response->withJson(array('message' => 'rename failed'), 500);
+ }
+ } catch (Exception $e) {
+ return $response->withJson(array('message' => $e->getMessage()), $e->getCode());
+ }
+ }
+ }
+
+ private function __processRequest(ServerRequestInterface $request, ResponseInterface $response, $folderCallback, $fileCallback, $type) {
+ $requestPath = $request->getQueryParam('path');
+ $mount = $this->getMount($requestPath);
+ $fsPath = $this->getAbsolutePath($requestPath, $mount);
+ if (file_exists($fsPath) || $type === 'create') {
+ if (!$this->checkAccess($fsPath) || ($mount && $mount['writeable'] === false && $type !== 'read')) {
+ $response->withStatus(403);
+ } else {
+ if (is_dir($fsPath) || ($type === 'create' && $request->getQueryParam('type') === 'dir')) {
+ if ($folderCallback) {
+ return $folderCallback($request, $response, $fsPath, $mount);
+ }
+ } else {
+ if ($fileCallback) {
+ return $fileCallback($request, $response, $fsPath, $mount);
+ }
+ }
+ }
+ } else {
+ return $response->withStatus(404);
+ }
+ }
+
+ private function listFolder($path, $recursive, $mount) {
+ $content = array();
+
+ if ($handle = opendir($path)) {
+ $inTrash = $path === $this->config->trashFolder || substr($path, 0, strlen($this->config->trashFolder )) === $this->config->trashFolder;
+ $trashFound = false;
+ $mounted = false;
+
+ if ($mount) {
+ $relFolder = $mount['mountPoint'] . substr($path, strlen($mount['path']));
+ $mounted = true;
+ } else {
+ $relFolder = substr($path, strlen($this->baseDir));
+ }
+ if (strlen($relFolder) > 0) {
+ $relFolder .= '/';
+ }
+ while (($file = readdir($handle)) !== false) {
+ if ($this->checkAccess($path, $file)) {
+ $filePath = realpath($path . "/" . $file);
+ $isDir = is_dir($filePath);
+ if ($mount && $mount['showSubDirs'] === false && $isDir) {
+ // no subdirs in mount
+ continue;
+ }
+
+ $c = array(
+ 'name' => $file,
+ 'type' => $isDir ? 'dir' : (is_file($filePath) ? 'file' : null),
+ 'parentFolder' => $relFolder,
+ 'hasChildren' => is_dir($filePath) ? !FileHandler::isEmptyDir($filePath) : false,
+ 'readable' => is_readable($filePath),
+ 'writeable' => (!$mount || $mount['writeable'] !== false) && is_writable($filePath),
+ 'trash' => false,
+ 'inTrash' => $inTrash,
+ 'mounted' => $mounted
+ );
+ $isTrash = $isDir && $file === $this->config->trashFolderName;
+ $c['trash'] = $isTrash;
+ if ($recursive && $c['hasChildren']) {
+ $c['children'] = $this->listFolder($filePath, $recursive, $mount);
+ }
+ array_push($content, $c);
+ if ($isTrash && !$trashFound) {
+ $trashFound = true;
+ }
+ }
+ }
+ if (substr($path, -strlen('/resource/config')) === '/resource/config') {
+ forEach($this->config->mounts as $mount) {
+ array_push($content, array(
+ 'name' => $mount['mountPoint'],
+ 'type' => 'dir',
+ 'mounted' => true,
+ 'parentFolder' => '',
+ 'hasChildren' => count(scandir($mount['path'])) > 2,
+ 'readable' => true,
+ 'writeable' => $mount['writeable'] !== false
+ ));
+ };
+ if (!$trashFound) {
+ // add trash folder even if it does not exist
+ array_push($content, [
+ 'name' => $this->config->trashFolderName,
+ 'type' => 'dir',
+ 'mounted' => false,
+ 'parentFolder' => '',
+ 'hasChildren' => false,
+ 'readable' => true,
+ 'writeable' => false,
+ 'trash' => true
+ ]);
+ }
+ }
+ }
+ return $content;
+ }
+
+ /**
+ * Update the content of an existing file
+ * @param $response {ResponseInterface}
+ * @param $file {String} absolute path to file
+ * @param $content {String} file content
+ */
+ private function updateFile(ResponseInterface $response, $file, $content, $hash) {
+ if (!file_exists($file)) {
+ return $response->withStatus(404);
+ } else {
+ try {
+ $dirname = dirname($file);
+ if (!file_exists($dirname)) {
+ // create missing dirs first
+ mkdir($dirname, 0777, true);
+ }
+ FileHandler::saveFile($file, $content, $hash);
+ return $response->withStatus(200);
+ } catch (Exception $e) {
+ var_dump($e);
+ return $response->withJson(array('message' => $e->getMessage()))->withStatus($e->getCode());
+ }
+ }
+ }
+
+ /**
+ * Create a new file with content
+ * @param $response {ResponseInterface}
+ * @param $file {String} absolute path to file
+ * @param $content {String} file content
+ */
+ private function createFile(ResponseInterface $response, $file, $content, $hash) {
+ try {
+ $dirname = dirname($file);
+ if (!file_exists($dirname)) {
+ // create missing dirs first
+ mkdir($dirname, 0777, true);
+ }
+ FileHandler::createFile($file, $content, $hash);
+ return $response->withStatus(200);
+ } catch (Exception $e) {
+ return $response->withJson(array('message' => $e->getMessage()))->withStatus($e->getCode());
+ }
+ }
+
+ private function createFolder(ResponseInterface $response, $file) {
+ try {
+ FileHandler::createFolder($file);
+ return $response->withStatus(200);
+ } catch (Exception $e) {
+ return $response->withJson(array('message' => $e->getMessage()))->withStatus($e->getCode());
+ }
+ }
+
+ private function __saveFile(ResponseInterface $response, $file, $content) {
+
+ }
+
+ private function getState($folder) {
+ $state = 0;
+ if (file_exists($folder)) {
+ // Bit 0: exists
+ $state = 1;
+ }
+ if (is_readable($folder)) {
+ // Bit 1: readable
+ $state |= 1 << 1;
+ }
+ if (is_writeable($folder)) {
+ // Bit 2: writeable
+ $state |= 2 << 1;
+ }
+ return $state;
+ }
+
+ /**
+ * 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
+ * @return {Boolean} true if access is allowed
+ */
+ private function checkAccess($fsPath, $item = null) {
+ if (!$item) {
+ $item = basename($fsPath);
+ $fsPath = dirname($fsPath);
+ }
+ return $item === $this->config->trashFolderName || !(substr($item, 0, 1) === '.') || ($item === 'hidden.php' && $fsPath === $this->config->configDir);
+ }
+
+ private function getMount($path) {
+ $mountKey = array_search($path, $this->mounts);
+ if ($mountKey === false) {
+ forEach($this->mounts as $index => $mountPoint) {
+ if (substr($path, 0, strlen($mountPoint)) === $mountPoint) {
+ $mountKey = $index;
+ break;
+ }
+ };
+ }
+ if ($mountKey !== false) {
+ return $this->config->mounts[$mountKey];
+ }
+ }
+
+ private function getAbsolutePath($fsPath, $mount) {
+ $fsPath = $this->__sanitize($fsPath);
+ if ($mount) {
+ // remove mountPoint from requested path
+ $fsPath = substr($fsPath,strlen($mount['mountPoint']) + 1);
+ $res = realpath($mount['path'] . '/' . $fsPath);
+ if ($res == false) {
+ // path does not exist, create the path without normalizing
+ $res = $mount['path'] . '/' . $fsPath;
+ }
+ return $res;
+ }
+ $res = realpath($this->baseDir . '/' . $fsPath);
+ if ($res == false) {
+ // path does not exist, create the path without normalizing
+ $res = $this->baseDir . '/' . $fsPath;
+ }
+ return $res;
+ }
+
+ private function __sanitize($requestPath) {
+ $parts = explode("/", $requestPath);
+ $normalizedParts = [];
+ // remove leading '..'
+ foreach ($parts as $part) {
+ if ($part == "." || $part == ".." || $part == "") {
+ continue;
+ } else {
+ array_push($normalizedParts, $part);
+ }
+ }
+ return join("/", $normalizedParts);
+ }
+}
\ No newline at end of file
diff --git a/source/rest/cv/src/FileHandler.php b/source/rest/cv/src/FileHandler.php
new file mode 100644
index 00000000000..9f8a8d599dd
--- /dev/null
+++ b/source/rest/cv/src/FileHandler.php
@@ -0,0 +1,202 @@
+getMessage(), 405);
+ }
+ }
+ }
+
+ public static function rename($sourcePath, $targetPath) {
+ try {
+ return rename($sourcePath, $targetPath);
+ } catch (Exception $e) {
+ throw new Exception($e->getMessage(), 405);
+ }
+ }
+
+ public static function saveFile($file, $content, $hash) {
+ $apiConfig = include("config.php");
+ if ($hash) {
+ $contentHash = sprintf('%u', crc32($content));
+ if ($hash != $contentHash) {
+ // data has been corrupted during transport
+ throw new Exception('data has been corrupted during transport' . $hash . ' !=' . sprintf('%u', $contentHash), 405);
+ }
+ $backupFilename = "";
+ $backupSuffix = rand();
+ $backup = false;
+ forEach($apiConfig->backupOnChange as $b) {
+ if (preg_match($b, $file) === 1) {
+ $backup = true;
+ break;
+ }
+ }
+ $fileExists = file_exists($file);
+ if ($backup && $fileExists) {
+ // store permanent backup of existing file before change
+ $parts = explode('.', basename($file));
+ $suffix = array_pop($parts);
+ $backupFilename = join('.', $parts) . '-' . preg_replace('/[\D]/g', '', explode('.', date(DateTime::ISO8601))[0])
+ . '.' . $suffix;
+ $target = $apiConfig->backupFolder . '/' . $backupFilename;
+ copy($file, $target);
+ }
+ if ($fileExists) {
+ // 1. create backup of existing file (this is just a temporary backup
+ copy($file, $file . $backupSuffix);
+ }
+ // 2. write new content
+ if (file_put_contents($file, $content) === false) {
+ throw new Exception('file not written', 405);
+ } else {
+ // 3. check hash of written file
+ $writtenContent = file_get_contents($file);
+ $newHash = sprintf('%u', crc32($writtenContent));
+ if ($newHash !== $contentHash) {
+ // something went wrong -> restore old file content
+ if ($fileExists) {
+ copy($file . $backupSuffix, $file);
+ if ($backupFilename) {
+ // no changes no need for backup file
+ unlink($backupFilename);
+ }
+ }
+ throw new Exception('hash mismatch on written content', 405);
+ }
+ }
+ if ($fileExists) {
+ unlink($file . $backupSuffix);
+ }
+ } else {
+ if (file_put_contents($file, $content) === false) {
+ throw new Exception('file not written', 405);
+ }
+ }
+ }
+
+ /**
+ * Delete a file from filesystem by either moving it to the trash folder or deleting it directly.
+ * @param $file {String} absolute path to file that should be deleted
+ * @param $force {Boolean} if true delete directly, no mosing to trash
+ */
+ public static function deleteFile($file, $force) {
+ if (file_exists($file)) {
+ $apiConfig = include("config.php");
+ try {
+ if (!$force && !FileHandler::startsWith($file, $apiConfig->trashFolder)) {
+ $relDir = substr(dirname($file) , strlen($apiConfig->configDir));
+ $filename = basename($file);
+ if (!file_exists($apiConfig->trashFolder)) {
+ mkdir($apiConfig->trashFolder);
+ }
+ $trashFile = $apiConfig->trashFolder . '/' . $relDir . '/' . $filename;
+ if (file_exists($trashFile)) {
+ // delete old trash file with same name
+ unlink($trashFile);
+ }
+ rename($file, $trashFile);
+ } else {
+ unlink($file);
+ }
+ } catch (Exception $e) {
+ throw new Exception($e->getMessage(), 405);
+ }
+ }
+ }
+
+ public static function deleteFolder($folder, $force) {
+ if (file_exists($folder)) {
+ $apiConfig = include("config.php");
+ try {
+ if (!$force && !FileHandler::startsWith($folder, $apiConfig->trashFolder)) {
+ $relDir = substr($folder, strlen($apiConfig->tconfigDir));
+ if (!file_exists($apiConfig->trashFolder)) {
+ mkdir($apiConfig->trashFolder);
+ }
+ $baseTrashFile = $apiConfig->trashFolder .'/' . $relDir;
+ $trashFile = $baseTrashFile;
+ $index = 1;
+ while (file_exists($trashFile)) {
+ $trashFile = $baseTrashFile - '-' - $index++;
+ }
+ if (rename($folder, $trashFile) === false) {
+ throw new Exception('Folder could not be deleted', 406);
+ }
+ } else {
+ if ($force === true || FileHandler::isEmptyDir($folder)) {
+ if (rmdir($folder) === false) {
+ throw new Exception('Folder could not be deleted', 406);
+ }
+ } else {
+ throw new Exception('Folder not empty', 406);
+ }
+ }
+ } catch (Exception $e) {
+ throw new Exception($e->getMessage(), 406);
+ }
+ }
+ }
+
+ public static function isEmptyDir($path) {
+ return count(scandir($path)) <= 2;
+ }
+
+ public static function startsWith($str, $cmp) {
+ return substr($str, 0, strlen($cmp) === $cmp);
+ }
+
+ public static function getMimeTypeFromSuffix($fsPath) {
+ $suffix = array_pop(explode('.', $fsPath));
+ 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';
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/rest/cv/src/config.php b/source/rest/cv/src/config.php
new file mode 100644
index 00000000000..75f3842828e
--- /dev/null
+++ b/source/rest/cv/src/config.php
@@ -0,0 +1,45 @@
+ $resourcesDir,
+ 'configDir' => $configDir,
+ 'designsDir' => realpath($resourcesDir .'/designs'),
+ 'trashFolderName' => $trashFolderName,
+ 'trashFolder' => realpath($configDir .'/' . $trashFolderName),
+ 'backupFolder' => realpath($configDir . '/backup'),
+ 'backupOnChange' => ['/visu_config.*\.xml/'],
+ 'mounts' => [
+ [
+ 'mountPoint' => 'demo',
+ 'path' => realpath($resourcesDir . '/demo'),
+ 'showSubDirs' => false,
+ 'writeable' => false
+ ]
+ ],
+ 'addressFiles' => [
+ 'addresses' => [
+ realpath($configDir . '/media/eibga.conf'),
+ '/etc/wiregate/eibga.conf'
+ ],
+ 'mainGroups' => [
+ realpath($configDir . '/media/eibga_hg.conf'),
+ '/etc/wiregate/eibga_hg.conf'
+ ],
+ 'middleGroups' => [
+ realpath($configDir . '/media/eibga_mg.conf'),
+ '/etc/wiregate/eibga_mg.conf'
+ ]
+ ],
+ 'onewire' => [
+ 'sensors' => [
+ realpath($configDir . '/media/owsensors.conf'),
+ '/etc/wiregate/owsensors.conf'
+ ],
+ 'rrdDir' => '/var/www/rrd/'
+ ]
+);
diff --git a/source/rest/cv/src/influx.inc.php b/source/rest/cv/src/influx.inc.php
new file mode 100644
index 00000000000..026a4339720
--- /dev/null
+++ b/source/rest/cv/src/influx.inc.php
@@ -0,0 +1,128 @@
+configDir . '/hidden.php'));
+
+function query( $q, $db = '', $auth )
+{
+ global $hidden;
+
+ if( $db )
+ $db = '&db=' . $db;
+
+ $context = NULL;
+ $uri = 'http://localhost:8086/query';
+
+ // default to 'influx' when it is set in the hidden config but not set in the GET URL.
+ if( NULL == $auth && array_key_exists( 'influx', $hidden ) )
+ $influxKey = 'influx';
+ else
+ $influxKey = $auth;
+
+ if( array_key_exists( $influxKey, $hidden ) )
+ {
+ if( array_key_exists( 'uri', $hidden[$influxKey] ) )
+ $uri = $hidden[$influxKey]['uri'];
+
+ $opts = array(
+ 'http' => array(
+ 'method' => "GET",
+ 'header' => "Authorization: Basic " . base64_encode( $hidden[$influxKey]['user'] . ':' . $hidden[$influxKey]['pass'] )
+ )
+ );
+ if( array_key_exists( 'selfsigned', $hidden[$influxKey] ) &&
+ 'true' == $hidden[$influxKey]['selfsigned'] ) {
+ $opts['ssl'] = [
+ 'verify_peer' => false,
+ 'allow_self_signed' => true,
+ 'verify_peer_name' => false
+ ];
+ }
+
+ $context = stream_context_create( $opts );
+ }
+
+ $content = @file_get_contents( $uri . '?q=' . urlencode( $q ) . $db, false, $context );
+ if( FALSE === $content )
+ {
+ $error = error_get_last();
+ throw new Exception($error['message'], 501);
+ }
+ return $content;
+}
+
+function getFields( $tsParameter, $auth )
+{
+ $ts = explode( '/', $tsParameter );
+ if( '' == $ts[0] || '' == $ts[1] )
+ return 'Error: wrong measurement parameter [' . $tsParameter . ']';
+
+ $arrData = array(array('value' => '*', 'label' => 'Default: *', 'forceOnlyLabel' => 1 ));
+
+ $fieldsArr = json_decode( query( 'SHOW FIELD KEYS FROM ' . $ts[1], $ts[0], $auth ), true );
+ $fields = $fieldsArr[ 'results' ][ 0 ][ 'series' ][ 0 ][ 'values' ];
+ if( NULL != $fields )
+ {
+ foreach( $fields as $thisField )
+ {
+ $l = '';
+ $r = '';
+
+ if( 'string' == $thisField[1] )
+ {
+ $l = '[';
+ $r = ']';
+ }
+ $arrData[] = array('value' => $thisField[0], 'label' => sprintf( '%s%s (%s)%s', $l, $thisField[0], $thisField[1], $r ), 'forceOnlyLabel' => 1 );
+ }
+ }
+
+ return $arrData;
+}
+
+function getTags( $tsParameter, $auth )
+{
+ $ts = explode( '/', $tsParameter );
+ if( '' == $ts[0] || '' == $ts[1] )
+ return 'Error: wrong measurement parameter [' . $tsParameter . ']';
+
+ $resSeries = array();
+ $measurements = array();
+
+ $seriesArr = json_decode( query( 'SHOW SERIES FROM ' . $ts[1], $ts[0], $auth ), true );
+ $series = $seriesArr[ 'results' ][ 0 ][ 'series' ][ 0 ][ 'values' ];
+ if( NULL != $series )
+ {
+ foreach( $series as $thisSeries )
+ {
+ $list = explode( ',', $thisSeries[ 0 ] );
+ $measurement = array_shift( $list );
+ if( !array_key_exists( $measurement, $measurements ) )
+ $measurements[ $measurement ] = array();
+
+ foreach( $list as $tag )
+ {
+ $tagKV = explode( '=', $tag );
+ if( array_key_exists( $tagKV[ 0 ], $measurements[ $measurement ] ) )
+ {
+ $measurements[ $measurement ][ $tagKV[ 0 ] ][ $tagKV[ 1 ] ] = 1; // fake set operation
+ } else
+ {
+ $measurements[ $measurement ][ $tagKV[ 0 ] ] = array( $tagKV[ 1 ] => 1 ); // fake set operation
+ }
+ }
+ }
+ // translate fake set to real set/array
+ foreach( $measurements as $measurement => $measurementValues )
+ {
+ foreach( $measurementValues as $tag => $tagValues )
+ {
+ $arrData[$tag] = array_keys( $tagValues );
+ }
+ }
+ }
+
+ return $arrData;
+}
\ No newline at end of file
diff --git a/source/rest/cv/src/parse_ini.inc.php b/source/rest/cv/src/parse_ini.inc.php
new file mode 100644
index 00000000000..2e324b98b6b
--- /dev/null
+++ b/source/rest/cv/src/parse_ini.inc.php
@@ -0,0 +1,79 @@
+;.
+ *
+ * @category editor
+ * @package CometVisu
+ * @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-11-10
+ */
+function parse_ini($filepath) {
+ $ini = file($filepath);
+ if (count($ini) == 0) {
+ return array();
+ }
+ $sections = array();
+ $values = array();
+ $globals = array();
+ $i = 0;
+ foreach ($ini as $line) {
+ $line = trim($line);
+ // Comments
+ if ($line == '' || $line{0} == ';') {
+ continue;
+ }
+ // Sections
+ if ($line{0} == '[') {
+ $sections[] = substr($line, 1, -1);
+ $i++;
+ continue;
+ }
+ // Key-value pair
+ list( $key, $value ) = explode('=', $line, 2);
+ $key = trim($key);
+ $value = trim($value);
+ if ($i == 0) {
+ // Array values
+ if (substr($line, -1, 2) == '[]') {
+ $globals[$key][] = $value;
+ } else {
+ $globals[$key] = $value;
+ }
+ } else {
+ // Array values
+ if (substr($line, -1, 2) == '[]') {
+ $values[$i - 1][$key][] = $value;
+ } else {
+ $values[$i - 1][$key] = $value;
+ }
+ }
+ }
+ for ($j = 0; $j < $i; $j++) {
+ $result[$sections[$j]] = $values[$j];
+ }
+ return $result + $globals;
+}
+
+?>
diff --git a/source/rest/cv/test/Api/ConfigApiTest.php b/source/rest/cv/test/Api/ConfigApiTest.php
new file mode 100644
index 00000000000..7ea5e558330
--- /dev/null
+++ b/source/rest/cv/test/Api/ConfigApiTest.php
@@ -0,0 +1,124 @@
+
+ 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
+ description: true when this file/folder is inside a mounted folder
+ 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/translation/de.po b/source/translation/de.po
index 505f64fc369..1dbd3412e05 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/ToolBar.js:162 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:263
msgid "Connection error"
msgstr "Verbindungsfehler"
-#: cv/TemplateEngine.js:261
+#: cv/TemplateEngine.js:272
msgid "Error requesting %1: %2 - %3."
msgstr "Fehler beim Laden von %1: %2 - %3."
-#: cv/TemplateEngine.js:263
+#: cv/TemplateEngine.js:274
msgid "Connection to backend is lost."
msgstr "Verbindung zum Backend verloren."
-#: cv/TemplateEngine.js:278 cv/TemplateEngine.js:293
+#: cv/TemplateEngine.js:289 cv/TemplateEngine.js:304
msgid "CometVisu protocol error"
msgstr "CometVisu Protokollfehler"
-#: cv/TemplateEngine.js:279
+#: cv/TemplateEngine.js:290
msgid ""
"The backend did send an invalid response to the %1Login%2 request: missing "
"protocol version."
@@ -70,19 +73,41 @@ 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:293 cv/TemplateEngine.js:308
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:294 cv/TemplateEngine.js:309
msgid "Backend-Response:"
msgstr "Antwort des Backends:"
-#: cv/TemplateEngine.js:294
+#: cv/TemplateEngine.js:305
msgid ""
"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:121
+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 ""
@@ -102,53 +127,522 @@ msgstr "openHAB Backend Einstellungen"
msgid "Cancel"
msgstr "Abbruch"
-#: cv/plugins/openhab/Settings.js:232
+#: cv/ui/manager/MenuBar.js:69 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:120
+msgid "config folder does not exists"
+msgstr "config Ordner existiert nicht"
+
+#: cv/ui/manager/Main.js:122
+msgid "config folder is not readable"
+msgstr "config Ordner kann nicht gelesen werden"
+
+#: cv/ui/manager/Main.js:124
+msgid "config folder is not writeable"
+msgstr "config Ordner ist nicht schreibbar"
+
+#: cv/ui/manager/Main.js:130
+msgid "backup folder is not writeable"
+msgstr "backup Ordner ist nicht schreibbar"
+
+#: cv/ui/manager/Main.js:136
+msgid "media folder is not writeable"
+msgstr "media Ordner ist nicht schreibbar"
+
+#: cv/ui/manager/Main.js:170
+msgid "Cannot load config template"
+msgstr "Template für Konfigurationsdatei kann nicht geladen werden"
+
+#: cv/ui/manager/Main.js:180
+msgid "Cannot load file content"
+msgstr "Dateiinhalt kann nicht geladen werden"
+
+#: cv/ui/manager/Main.js:333
+msgid "Cannot open file: \"%1\""
+msgstr "Datei \"%1\" kann nicht geöffnet werden"
+
+#: cv/ui/manager/Main.js:378
+msgid ""
+"This file has unsaved changes that will be lost when you close it. Do you "
+"really want to close the file?"
+msgstr "Diese Daten enthält ungesicherte Änderungen, die verloren gehen, wenn Sie die Datei schließen"
+"Möchten Sie die Datei wirklich schließen?"
+
+#: cv/ui/manager/Main.js:380
+msgid ""
+"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?"
+msgstr "Diese Date wurde noch nicht gespeichert. Sie wird verloren gehen, wenn Sie sie schließen"
+"Möchten Sie die Datei wirklich schließen?"
+
+#: cv/ui/manager/Main.js:386
+msgid "Unsaved changes"
+msgstr "Nicht gespeicherte Änderungen"
+
+#: cv/ui/manager/Main.js:516
+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:517
+msgid "A configuration with this name already exists."
+msgstr "Eine Konfigurationsdatei mit diesem Namen existiert bereits."
+
+#: cv/ui/manager/Main.js:519
+msgid "Please enter the file name."
+msgstr "Bitte geben Sie den Dateinamen ein."
+
+#: cv/ui/manager/Main.js:520
+msgid "A file with this name already exists."
+msgstr "Eine Datei mit diesem Namen exisitert bereits."
+
+#: cv/ui/manager/Main.js:522
+msgid "Please enter the folder name."
+msgstr "Bitte geben Sie den Namen des Ordners ein."
+
+#: cv/ui/manager/Main.js:523
+msgid "A folder with this name already exists."
+msgstr "Eine Ordner mit diesem Namen exisitert bereits."
+
+#: cv/ui/manager/contextmenu/FileItem.js:215 cv/ui/manager/MenuBar.js:46
+msgid "New file"
+msgstr "Neue Datei"
+
+#: cv/ui/manager/contextmenu/FileItem.js:225 cv/ui/manager/MenuBar.js:51
+msgid "New folder"
+msgstr "Neuer Ordner"
+
+#: cv/ui/manager/MenuBar.js:57
+msgid "New config file"
+msgstr "Neue Konfigurationsdatei"
+
+#: cv/ui/manager/MenuBar.js:63 cv/ui/manager/viewer/Folder.js:33
+msgid "Upload file"
+msgstr "Datei hochladen"
+
+#: cv/ui/manager/MenuBar.js:75
+msgid "Save as..."
+msgstr "Speichern unter..."
+
+#: cv/ui/manager/contextmenu/FileItem.js:57
+#: cv/ui/manager/contextmenu/FileItem.js:127
+#: cv/ui/manager/contextmenu/FileItem.js:234 cv/ui/manager/MenuBar.js:80
+msgid "Delete"
+msgstr "Löschen"
+
+#: cv/ui/manager/MenuBar.js:86
+msgid "Close file"
+msgstr "Datei schlie0en"
+
+#: cv/ui/manager/MenuBar.js:92
+msgid "Quit"
+msgstr "Beenden"
+
+#: cv/ui/manager/MenuBar.js:99
+msgid "Ctrl+Z"
+msgstr "Strg+Z"
+
+#: cv/ui/manager/MenuBar.js:99
+msgid "Undo"
+msgstr "Rückgängig"
+
+#: cv/ui/manager/MenuBar.js:104
+msgid "Ctrl+Y"
+msgstr "Strg+Y"
+
+#: cv/ui/manager/MenuBar.js:104
+msgid "Redo"
+msgstr "Wiederholen"
+
+#: cv/ui/manager/MenuBar.js:109
+msgid "Ctrl+X"
+msgstr "Strg+X"
+
+#: cv/ui/manager/MenuBar.js:109
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: cv/ui/manager/MenuBar.js:115
+msgid "Copy"
+msgstr "Kopieren"
+
+#: cv/ui/manager/MenuBar.js:115
+msgid "Ctrl+C"
+msgstr "Strg+C"
+
+#: cv/ui/manager/MenuBar.js:120
+msgid "Ctrl+V"
+msgstr "Strg+V"
+
+#: cv/ui/manager/MenuBar.js:120
+msgid "Paste"
+msgstr "Einfügen"
+
+#: cv/ui/manager/MenuBar.js:125 cv/ui/manager/model/FileItem.js:85
+#: cv/ui/manager/editor/Config.js:26
+msgid "Hidden configuration"
+msgstr "Versteckte Konfiguration"
+
+#: cv/ui/manager/MenuBar.js:132
+msgid "Use text editor"
+msgstr "Texteditor benutzen"
+
+#: cv/ui/manager/MenuBar.js:143
+msgid "Use xml editor"
+msgstr "XML-Editor benutzen"
+
+#: cv/ui/manager/MenuBar.js:154
+msgid "Enable quick preview"
+msgstr "Schnellvorschau aktivieren"
+
+#: cv/ui/manager/MenuBar.js:162
+msgid "Expert mode"
+msgstr "Expertenansicht"
+
+#: cv/ui/manager/MenuBar.js:261
+msgid "CometVisu Manager"
+msgstr "CometVisu Manager"
+
+#: cv/ui/manager/MenuBar.js:266
+msgid "File"
+msgstr "Datei"
+
+#: cv/ui/manager/MenuBar.js:271
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: cv/ui/manager/MenuBar.js:276
+msgid "New"
+msgstr "Neu"
+
+#: cv/ui/manager/MenuBar.js:280
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: cv/ui/manager/Start.js:156
+msgid "List mode"
+msgstr "Listenansicht"
+
+#: cv/ui/manager/Start.js:162
+msgid "Preview mode"
+msgstr "Vorschau-Modus"
+
+#: cv/ui/manager/Start.js:179
+msgid "Configurations"
+msgstr "Konfigurationen"
+
+#: cv/ui/manager/Start.js:222
+msgid "Demo configurations"
+msgstr "Demo Konfigurationen"
+
+#: cv/ui/manager/Start.js:247
+msgid "Media files"
+msgstr "Mediendateien"
+
+#: cv/ui/manager/Start.js:277
+msgid "Miscellaneous"
+msgstr "Sonstiges"
+
+#: cv/ui/manager/contextmenu/FileItem.js:241 cv/ui/manager/ToolBar.js:128
+msgid "Download"
+msgstr "Herunterladen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:259 cv/ui/manager/ToolBar.js:145
+msgid "Validate"
+msgstr "Prüfen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:56
+msgid "Clear"
+msgstr "Leeren"
+
+#: cv/ui/manager/contextmenu/FileItem.js:79
+msgid "Backup from %1"
+msgstr "Sicherung vom %1"
+
+#: cv/ui/manager/contextmenu/FileItem.js:219
+msgid "Clone file"
+msgstr "Datei duplizieren"
+
+#: cv/ui/manager/contextmenu/FileItem.js:229
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:246
+msgid "Open"
+msgstr "Öffnen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:253
+msgid "Restore"
+msgstr "Wiederherstellen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:265
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: cv/ui/manager/contextmenu/FileItem.js:277
+msgid "Compare with..."
+msgstr "Vergleichen mit..."
+
+#: cv/ui/manager/contextmenu/FileItem.js:281
+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:122
+msgid "Do you really want to clear the trash?"
+msgstr "Mächten Sie den Papirtkorb wirklich leeren?"
+
+#: cv/ui/manager/control/FileController.js:125
+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/control/FileController.js:126
+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/control/FileController.js:129
+msgid "Do you really want to delete this file?"
+msgstr "Möchten Sie diese Datei wirklich löschen?"
+
+#: cv/ui/manager/control/FileController.js:130
+msgid "Do you really want to delete this folder?"
+msgstr "Möchten Sie diesen Ordner wirklich löschen?"
+
+#: cv/ui/manager/control/FileController.js:138
+msgid "Confirm deletion"
+msgstr "Löschen bestätigen"
+
+#: cv/ui/manager/control/FileController.js:153
+msgid "Trash has been cleared"
+msgstr "Der Papierkorb wurde geleert"
+
+#: cv/ui/manager/control/FileController.js:156
+msgid "File has been removed from trash"
+msgstr "Die Datei wurde aus dem Papierkorb entfernt"
+
+#: cv/ui/manager/control/FileController.js:157
+msgid "Folder has been removed from trash"
+msgstr "Der Ordner wurde aus dem Papierkorb entfernt"
+
+#: cv/ui/manager/control/FileController.js:160
+msgid "File has been deleted"
+msgstr "Datei wurde gelöscht"
+
+#: cv/ui/manager/control/FileController.js:161
+msgid "Folder has been deleted"
+msgstr "Verzeichnis wurde gelöscht"
+
+#: cv/ui/manager/control/FileController.js:198
+msgid "Validating %1"
+msgstr "Prüfe %1"
+
+#: cv/ui/manager/control/FileController.js:203
+msgid "%1 has no errors!"
+msgstr "%1 hat keine Fehler!"
+
+#: cv/ui/manager/control/FileController.js:211
+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/FileListItem.js:29
+msgid "Drop the file here to replace the content."
+msgstr "Lassen Sie die Datei hier fallen um den Inhalt zu ersetzen."
+
+#: cv/ui/manager/form/FileListItem.js:220
+msgid ""
+"Do you really want to replace the \'%1\' with the uploaded files content?"
+msgstr "Möchten Sie \'%1\' wirklich mit dem Inhalt der hochgeladenen Datei ersetzen?"
+
+#: cv/ui/manager/form/FileListItem.js:387
+msgid "Double click to open"
+msgstr "Doppelklick zum Öffnen"
+
+#: cv/ui/manager/form/FileListItem.js:415
+msgid "Download file"
+msgstr "Datei herunterladen"
+
+#: cv/ui/manager/form/FileListItem.js:428
+msgid "Other file actions"
+msgstr "Andere Datei-Aktionen"
+
+#: 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:94
+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:98
+msgid "File already exists"
+msgstr "Diese Datei existiert bereits"
+
+#: cv/ui/manager/upload/UploadMgr.js:102
+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:112
+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:116
+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:61
+msgid "%1 is no configuration file"
+msgstr "%1 ist keine Konfigurationsdatei"
+
+#: cv/ui/manager/viewer/Folder.js:51
+msgid "Show folder"
+msgstr "Ordner anzeigen"
+
+#: cv/ui/manager/viewer/Folder.js:289
+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)."
@@ -156,7 +650,7 @@ 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 +666,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..0e4fb05b33f 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/ToolBar.js:162 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:263
msgid "Connection error"
msgstr ""
-#: cv/TemplateEngine.js:261
+#: cv/TemplateEngine.js:272
msgid "Error requesting %1: %2 - %3."
msgstr ""
-#: cv/TemplateEngine.js:263
+#: cv/TemplateEngine.js:274
msgid "Connection to backend is lost."
msgstr ""
-#: cv/TemplateEngine.js:278 cv/TemplateEngine.js:293
+#: cv/TemplateEngine.js:289 cv/TemplateEngine.js:304
msgid "CometVisu protocol error"
msgstr ""
-#: cv/TemplateEngine.js:279
+#: cv/TemplateEngine.js:290
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:293 cv/TemplateEngine.js:308
msgid "Please try to fix the problem in the backend."
msgstr ""
-#: cv/TemplateEngine.js:283 cv/TemplateEngine.js:298
+#: cv/TemplateEngine.js:294 cv/TemplateEngine.js:309
msgid "Backend-Response:"
msgstr ""
-#: cv/TemplateEngine.js:294
+#: cv/TemplateEngine.js:305
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:121
+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,523 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#: cv/plugins/openhab/Settings.js:232
+#: cv/ui/manager/MenuBar.js:69 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:120
+msgid "config folder does not exists"
+msgstr ""
+
+#: cv/ui/manager/Main.js:122
+msgid "config folder is not readable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:124
+msgid "config folder is not writeable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:130
+msgid "backup folder is not writeable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:136
+msgid "media folder is not writeable"
+msgstr ""
+
+#: cv/ui/manager/Main.js:170
+msgid "Cannot load config template"
+msgstr ""
+
+#: cv/ui/manager/Main.js:180
+msgid "Cannot load file content"
+msgstr ""
+
+#: cv/ui/manager/Main.js:333
+msgid "Cannot open file: \"%1\""
+msgstr ""
+
+#: cv/ui/manager/Main.js:378
+msgid ""
+"This file has unsaved changes that will be lost when you close it. Do you "
+"really want to close the file?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:380
+msgid ""
+"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?"
+msgstr ""
+
+#: cv/ui/manager/Main.js:386
+msgid "Unsaved changes"
+msgstr ""
+
+#: cv/ui/manager/Main.js:516
+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:517
+msgid "A configuration with this name already exists."
+msgstr ""
+
+#: cv/ui/manager/Main.js:519
+msgid "Please enter the file name."
+msgstr ""
+
+#: cv/ui/manager/Main.js:520
+msgid "A file with this name already exists."
+msgstr ""
+
+#: cv/ui/manager/Main.js:522
+msgid "Please enter the folder name."
+msgstr ""
+
+#: cv/ui/manager/Main.js:523
+msgid "A folder with this name already exists."
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:215 cv/ui/manager/MenuBar.js:46
+msgid "New file"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:225 cv/ui/manager/MenuBar.js:51
+msgid "New folder"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:57
+msgid "New config file"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:63 cv/ui/manager/viewer/Folder.js:33
+msgid "Upload file"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:75
+msgid "Save as..."
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:57
+#: cv/ui/manager/contextmenu/FileItem.js:127
+#: cv/ui/manager/contextmenu/FileItem.js:234 cv/ui/manager/MenuBar.js:80
+msgid "Delete"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:86
+msgid "Close file"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:92
+msgid "Quit"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:99
+msgid "Ctrl+Z"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:99
+msgid "Undo"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:104
+msgid "Ctrl+Y"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:104
+msgid "Redo"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:109
+msgid "Ctrl+X"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:109
+msgid "Cut"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:115
+msgid "Copy"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:115
+msgid "Ctrl+C"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:120
+msgid "Ctrl+V"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:120
+msgid "Paste"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:125 cv/ui/manager/model/FileItem.js:85
+#: cv/ui/manager/editor/Config.js:26
+msgid "Hidden configuration"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:132
+msgid "Use text editor"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:143
+msgid "Use xml editor"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:154
+msgid "Enable quick preview"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:162
+msgid "Expert mode"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:261
+msgid "CometVisu Manager"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:266
+msgid "File"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:271
+msgid "Edit"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:276
+msgid "New"
+msgstr ""
+
+#: cv/ui/manager/MenuBar.js:280
+msgid "Preferences"
+msgstr ""
+
+#: cv/ui/manager/Start.js:156
+msgid "List mode"
+msgstr ""
+
+#: cv/ui/manager/Start.js:162
+msgid "Preview mode"
+msgstr ""
+
+#: cv/ui/manager/Start.js:179
+msgid "Configurations"
+msgstr ""
+
+#: cv/ui/manager/Start.js:222
+msgid "Demo configurations"
+msgstr ""
+
+#: cv/ui/manager/Start.js:247
+msgid "Media files"
+msgstr ""
+
+#: cv/ui/manager/Start.js:277
+msgid "Miscellaneous"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:241 cv/ui/manager/ToolBar.js:128
+msgid "Download"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:259 cv/ui/manager/ToolBar.js:145
+msgid "Validate"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:56
+msgid "Clear"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:79
+msgid "Backup from %1"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:219
+msgid "Clone file"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:229
+msgid "Rename"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:246
+msgid "Open"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:253
+msgid "Restore"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:265
+msgid "Replace"
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:277
+msgid "Compare with..."
+msgstr ""
+
+#: cv/ui/manager/contextmenu/FileItem.js:281
+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:122
+msgid "Do you really want to clear the trash?"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:125
+msgid "Do you really want to delete this file from the trash?"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:126
+msgid "Do you really want to delete this folder from the trash?"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:129
+msgid "Do you really want to delete this file?"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:130
+msgid "Do you really want to delete this folder?"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:138
+msgid "Confirm deletion"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:153
+msgid "Trash has been cleared"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:156
+msgid "File has been removed from trash"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:157
+msgid "Folder has been removed from trash"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:160
+msgid "File has been deleted"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:161
+msgid "Folder has been deleted"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:198
+msgid "Validating %1"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:203
+msgid "%1 has no errors!"
+msgstr ""
+
+#: cv/ui/manager/control/FileController.js:211
+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/FileListItem.js:29
+msgid "Drop the file here to replace the content."
+msgstr ""
+
+#: cv/ui/manager/form/FileListItem.js:220
+msgid ""
+"Do you really want to replace the \'%1\' with the uploaded files content?"
+msgstr ""
+
+#: cv/ui/manager/form/FileListItem.js:387
+msgid "Double click to open"
+msgstr ""
+
+#: cv/ui/manager/form/FileListItem.js:415
+msgid "Download file"
+msgstr ""
+
+#: cv/ui/manager/form/FileListItem.js:428
+msgid "Other file actions"
+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:94
+msgid "This file already exists, do you want to replace it?"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:98
+msgid "File already exists"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:102
+msgid "Uploading this file is not allowed here."
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:112
+msgid "File upload stopped with an error: %1"
+msgstr ""
+
+#: cv/ui/manager/upload/UploadMgr.js:116
+msgid "File has been uploaded"
+msgstr ""
+
+#: cv/ui/manager/viewer/Config.js:37
+msgid "Config viewer"
+msgstr ""
+
+#: cv/ui/manager/viewer/Config.js:61
+msgid "%1 is no configuration file"
+msgstr ""
+
+#: cv/ui/manager/viewer/Folder.js:51
+msgid "Show folder"
+msgstr ""
+
+#: cv/ui/manager/viewer/Folder.js:289
+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 +646,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