From 070ba49b47caaab82f1b69c8cbdd853f9dcb13dd Mon Sep 17 00:00:00 2001 From: Matthias Stein Date: Tue, 30 May 2017 16:34:22 +0200 Subject: [PATCH] Add code --- .gitignore | 4 + README.md | 46 + apache2-license-header.txt | 13 + build.properties | 18 + pom.xml | 942 ++++++++++++++ src/main/config/assembly.xml | 37 + src/main/js/apps/sample/app.css | 28 + src/main/js/apps/sample/app.js | 21 + src/main/js/apps/sample/app.json | 1153 +++++++++++++++++ .../js/apps/sample/images/logo_conterra.png | Bin 0 -> 8616 bytes src/main/js/apps/sample/images/mapCover1.png | Bin 0 -> 16679 bytes src/main/js/apps/sample/images/mapCover2.png | Bin 0 -> 15709 bytes src/main/js/apps/sample/images/mapCover3.png | Bin 0 -> 15195 bytes src/main/js/apps/sample/nls/bundle.js | 169 +++ src/main/js/apps/sample/nls/de/bundle.js | 166 +++ src/main/js/apps/sample/thumbnail.png | Bin 0 -> 1342 bytes src/main/js/bundles/dn_intro/IntroStarter.js | 47 + src/main/js/bundles/dn_intro/IntroWidget.js | 55 + .../js/bundles/dn_intro/IntroWidgetFactory.js | 84 ++ .../SampleStartIntroOnStartupChecker.js | 24 + src/main/js/bundles/dn_intro/UserIntro.js | 102 ++ .../js/bundles/dn_intro/config/DataForm.json | 109 ++ src/main/js/bundles/dn_intro/config/main.js | 16 + .../js/bundles/dn_intro/config/manifest.json | 75 ++ src/main/js/bundles/dn_intro/config/module.js | 20 + .../js/bundles/dn_intro/config/nls/bundle.js | 80 ++ .../bundles/dn_intro/config/nls/de/bundle.js | 77 ++ .../config/styles/images/bundleIcon.png | Bin 0 -> 337 bytes src/main/js/bundles/dn_intro/css/intro.css | 25 + .../js/bundles/dn_intro/img/sprite-green.png | Bin 0 -> 5405 bytes .../js/bundles/dn_intro/img/sprite-orange.png | Bin 0 -> 5374 bytes src/main/js/bundles/dn_intro/main.js | 16 + src/main/js/bundles/dn_intro/manifest.json | 149 +++ src/main/js/bundles/dn_intro/module.js | 22 + src/main/js/bundles/dn_intro/nls/bundle.js | 27 + src/main/js/bundles/dn_intro/nls/de/bundle.js | 24 + .../dn_intro/templates/IntroWidget.html | 18 + src/main/js/bundles/hopscotch/LICENSE | 177 +++ .../bundles/hopscotch/css/hopscotch.min.css | 32 + .../js/bundles/hopscotch/img/sprite-green.png | Bin 0 -> 5405 bytes .../bundles/hopscotch/img/sprite-orange.png | Bin 0 -> 5374 bytes .../js/bundles/hopscotch/js/hopscotch.min.js | 32 + src/main/js/bundles/hopscotch/package.json | 52 + src/test/resources/application.properties | 28 + src/test/webapp/WEB-INF/web.xml | 22 + src/test/webapp/index.html | 67 + src/test/webapp/js/tests/runTests.html | 10 + src/test/webapp/js/tests/test-init.js | 16 + 48 files changed, 4003 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 apache2-license-header.txt create mode 100644 build.properties create mode 100644 pom.xml create mode 100644 src/main/config/assembly.xml create mode 100644 src/main/js/apps/sample/app.css create mode 100644 src/main/js/apps/sample/app.js create mode 100644 src/main/js/apps/sample/app.json create mode 100644 src/main/js/apps/sample/images/logo_conterra.png create mode 100644 src/main/js/apps/sample/images/mapCover1.png create mode 100644 src/main/js/apps/sample/images/mapCover2.png create mode 100644 src/main/js/apps/sample/images/mapCover3.png create mode 100644 src/main/js/apps/sample/nls/bundle.js create mode 100644 src/main/js/apps/sample/nls/de/bundle.js create mode 100644 src/main/js/apps/sample/thumbnail.png create mode 100644 src/main/js/bundles/dn_intro/IntroStarter.js create mode 100644 src/main/js/bundles/dn_intro/IntroWidget.js create mode 100644 src/main/js/bundles/dn_intro/IntroWidgetFactory.js create mode 100644 src/main/js/bundles/dn_intro/SampleStartIntroOnStartupChecker.js create mode 100644 src/main/js/bundles/dn_intro/UserIntro.js create mode 100644 src/main/js/bundles/dn_intro/config/DataForm.json create mode 100644 src/main/js/bundles/dn_intro/config/main.js create mode 100644 src/main/js/bundles/dn_intro/config/manifest.json create mode 100644 src/main/js/bundles/dn_intro/config/module.js create mode 100644 src/main/js/bundles/dn_intro/config/nls/bundle.js create mode 100644 src/main/js/bundles/dn_intro/config/nls/de/bundle.js create mode 100644 src/main/js/bundles/dn_intro/config/styles/images/bundleIcon.png create mode 100644 src/main/js/bundles/dn_intro/css/intro.css create mode 100644 src/main/js/bundles/dn_intro/img/sprite-green.png create mode 100644 src/main/js/bundles/dn_intro/img/sprite-orange.png create mode 100644 src/main/js/bundles/dn_intro/main.js create mode 100644 src/main/js/bundles/dn_intro/manifest.json create mode 100644 src/main/js/bundles/dn_intro/module.js create mode 100644 src/main/js/bundles/dn_intro/nls/bundle.js create mode 100644 src/main/js/bundles/dn_intro/nls/de/bundle.js create mode 100644 src/main/js/bundles/dn_intro/templates/IntroWidget.html create mode 100644 src/main/js/bundles/hopscotch/LICENSE create mode 100644 src/main/js/bundles/hopscotch/css/hopscotch.min.css create mode 100644 src/main/js/bundles/hopscotch/img/sprite-green.png create mode 100644 src/main/js/bundles/hopscotch/img/sprite-orange.png create mode 100644 src/main/js/bundles/hopscotch/js/hopscotch.min.js create mode 100644 src/main/js/bundles/hopscotch/package.json create mode 100644 src/test/resources/application.properties create mode 100644 src/test/webapp/WEB-INF/web.xml create mode 100644 src/test/webapp/index.html create mode 100644 src/test/webapp/js/tests/runTests.html create mode 100644 src/test/webapp/js/tests/test-init.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e0cc28e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +target/* +.idea/* +*.iml +nbactions.xml diff --git a/README.md b/README.md new file mode 100644 index 0000000..fba2969 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# map.apps Remote Project Blueprint + +Development Guide +------------------ +### Pre Conditions +This project requires an existing installation of map.apps to work. You need top copy the libs provided in the CD-Contents folder "m2repository" inside your local maven repository. + +### Define the mapapps remote base +Before you can run the project you have to define the mapapps.remote.base property in the pom.xml-file: +`http://%YOURSERVER%/ct-mapapps-webapp-%VERSION%` + +##### Other methods to to define the mapapps.remote.base property. +######1. Add a goal parameter +`mvn install -Dmapapps.remote.base=http://%YOURSERVER%/ct-mapapps-webapp-%VERSION%` + +######2. Change the mapapps.remote.base property in the build.properties file and run: +`mvn install -Denv=dev -Dlocal.configfile=%ABSOLUTEPATHTOPROJECTROOT%/build.properties` + +### Maven Goals + +##### Start jetty at http://localhost:9090 for local implementation. +`mvn jetty:run` + +##### build uncompressed jar and app template +`mvn install` + +##### build uncompressed jar and app template and upload them to the remote map.apps installation +`mvn clean install -P upload` + +##### build compressed jar and app template +`mvn clean install -P compress` + +##### build compressed jar and app template and upload them to the remote map.apps installation +`mvn clean install -P compress,upload` + +### URLs +The following urls are available after maven goal `jetty:run` was executed. + +##### Base App +http://localhost:9090 + +##### Embedded JS Registry +http://localhost:9090/resources/jsregistry/root + +##### Open Tests in Browser +http://localhost:9090/js/tests/runTests.html diff --git a/apache2-license-header.txt b/apache2-license-header.txt new file mode 100644 index 0000000..08ebe58 --- /dev/null +++ b/apache2-license-header.txt @@ -0,0 +1,13 @@ +Copyright (C) ${project.inceptionYear} ${owner} (${email}) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/build.properties b/build.properties new file mode 100644 index 0000000..35d1826 --- /dev/null +++ b/build.properties @@ -0,0 +1,18 @@ +# +# Copyright (C) 2015 con terra GmbH (info@conterra.de) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# URL to the remote map.apps instance +mapapps.remote.base=http://%YOURSERVER%/ct-mapapps-webapp-%VERSION% \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..32eb3a5 --- /dev/null +++ b/pom.xml @@ -0,0 +1,942 @@ + + + + 4.0.0 + de.conterra.devnet + mapapps-intro + 1.0.0-SNAPSHOT + jar + + + + 52n-dependencies + 52n-dependencies + http://52north.org/maven/repo/releases + + + + + 52n-dependencies + 52n-dependencies + http://52north.org/maven/repo/releases + + + + + + + de.conterra.mapapps + ct-mapapps + ${mapapps4.version} + pom + import + + + + + + + log4j + log4j + test + + + org.slf4j + slf4j-log4j12 + test + + + + de.conterra.mapapps + ct-mapapps-proxy + test + + + + de.conterra.jsregistry + ct-jsregistry-embedded + test + + + + de.conterra.jsrt + ct-jsrt-test-intern + test + + + + + + + de.conterra.mapapps + mapapps-maven-plugin + ${mapapps4.version} + + + de.conterra.jsregistry + ct-jsregistry-maven-plugin + ${ct.jsregistry.version} + + + org.apache.maven.plugins + maven-resources-plugin + 2.7 + + \ + + + + org.apache.maven.plugins + maven-source-plugin + 2.4 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.7 + 1.7 + true + + **/* + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.2 + + true + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + ${js.build.outputPath} + + **/* + + + apps/** + **/tests/** + + + + + maven-war-plugin + 2.6 + + + org.eclipse.jetty + jetty-maven-plugin + 9.2.10.v20150310 + + + org.codehaus.mojo + properties-maven-plugin + 1.0-alpha-2 + + + com.google.code.maven-replacer-plugin + replacer + 1.5.3 + + + org.lesscss + lesscss-maven-plugin + 1.7.0.1.1 + + + org.lesscss + lesscss + 2.7.1-v8 + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.10 + + + maven-release-plugin + 2.5.3 + + + de.jutzig + github-release-plugin + 1.1.1 + + + maven-assembly-plugin + 3.0.0 + + + com.mycila + license-maven-plugin + 2.11 + + + de.conterra.maven + setproperties-maven-plugin + 1.0.2 + + + de.conterra.jsrt + ct-jsrt-test-maven-plugin + ${ct.jsrt-test.version} + + + maven-scm-plugin + 1.9.5 + + + + + src/main/js + + + src/main/js + ${js.build.outputPath} + false + + + + + src/test/resources + + application.properties + + true + + + src/test/resources + + application.properties + + false + + + src/test/webapp + + **/* + + false + + + + + com.mycila + license-maven-plugin + +
${project.baseUri}apache2-license-header.txt
+ + con terra GmbH + info@conterra.de + 2015 + + + **/README* + **/*.html + **/*.json + src/test/** + +
+ + + + format + + process-sources + + +
+ + de.conterra.maven + setproperties-maven-plugin + + + + setProperties + + + + + + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + + unpack-themes-src + generate-sources + + unpack + + + true + + + + de.conterra.mapapps + ct-mapapps-js-api + ${mapapps.version} + src + ${project.build.directory}/unpacked + + bundles/base/themes/themes/winter/**,bundles/base/themes/themes/common/**,bundles/base/templates/templates/common/** + + + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + UTF-8 + + + + de.conterra.jsregistry + ct-jsregistry-maven-plugin + + + build-jsregistry.properties + process-resources + + buildPacksProperties + + + + + ${js.build.outputPath} + ${js.build.outputPath} + + + + org.lesscss + lesscss-maven-plugin + + + process-resources + + compile + + + + + ${js.build.outputPath} + ${js.build.outputPath} + + bundles/**/*.less + + + + + com.google.code.maven-replacer-plugin + replacer + + + replace some config settings in app.json + prepare-package + + replace + + + ${js.build.outputPath} + + **/app.json + + true + + + + \s*"bundleLocations"\s*:\s*\[\s*"localbundles"\s*,\s*"bundles"\s*\]\s*,\s* + + + + + + + + + + de.conterra.mapapps + mapapps-maven-plugin + + + build-app-template + prepare-package + + deployAppTemplate + + + ${project.build.directory}/${project.artifactId}-sample-app.zip + + + ${js.build.outputPath}/apps/sample + + **/* + + + + + + + + true + false + + + + maven-assembly-plugin + + + src/main/config/assembly.xml + + ${project.artifactId}-bundle + false + + + + make-zip + package + + single + + + + + + org.eclipse.jetty + jetty-maven-plugin + + + 9090 + + 9966 + jetty-stop + 60000 + 0 + manual + ${basedir}/src/test/webapp/WEB-INF/web.xml + true + + / + + + ${basedir}/src/main,${basedir}/src/test/webapp,${project.build.directory}/${project.artifactId} + + + + .*/ct-jsregistry-embedded-[^/]*\.jar$ + + + + + catalina.base + ${project.build.directory} + + + + + + maven-release-plugin + + @{project.version} + clean + compress,github-release + true + + -Dusername=${scm.username} -Dpassword=${scm.password} + ${scm.username} + ${scm.password} + + +
+
+ + scm:git:https://github.com/conterra/mapapps-intro.git + scm:git:https://github.com/conterra/mapapps-intro.git + + https://github.com/conterra/mapapps-intro + HEAD + + + + ct-dist-releases-file + repository for sdi.suite releases + ${release.deployment.url} + + + ct-dist-snapshots-file + repository for sdi.suite snapshots + ${snapshot.deployment.url} + + + + UTF-8 + + ${project.build.directory}/${project.artifactId}/js + JDK_1.7 + + + 3.8.0 + 4.1.0-PIONEER + + + + ${mapapps.version} + + + 1.1.1 + 1.0.9 + + + sample + + $\{mapapps.remote.base\}/resources/jsregistry/root/apprt-boot/${mapapps4.version}/boot.js + + + + http,*; + * + + + false + ${env.USER_NAME} + ${env.USER_PW} + + + + run-js-tests + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + reserve-jetty-port + + reserve-network-port + + process-test-classes + + + jetty.server.port + + + + + + + org.eclipse.jetty + jetty-maven-plugin + + + jetty-start + process-test-classes + + start + + + + ${jetty.server.port} + + 0 + true + + + + jetty-stop + prepare-package + + stop + + + + + + de.conterra.jsrt + ct-jsrt-test-maven-plugin + + + test + + runTests + + + + + 2000 + 60000 + + + http://localhost:${jetty.server.port}/resources/jsregistry/root/intern/latest/runner.html?boot=/js/tests/test-init.js&test=sample_helloworld/tests/all + + + + + + + + + env-dev + + + + env + dev + + + + ${basedir}/build.properties + + + + + org.codehaus.mojo + properties-maven-plugin + + + initialize + + read-project-properties + + + + ${local.configfile} + + + + + + + + + + github-release + + + + de.jutzig + github-release-plugin + + + github-upload + deploy + + release + + + ${project.version} + ${project.build.directory}/${project.artifactId}-${project.version}.jar + + + + ${project.build.directory} + + ${project.artifactId}-bundle.zip + ${project.artifactId}-sample-app.zip + + ${project.artifactId}*.zip + + + + + + + + + + + + write-release-versions + + ${project.version} + ${project.version} + + + + + + com.google.code.maven-replacer-plugin + replacer + + + + Set Versions from ${replace.source.version} to ${replace.target.version} + validate + + replace + + + ${basedir} + + src/main/js/**/manifest.json + src/main/js/**/package.json + + + src/main/js/**/tests/** + + false + + + "${replace.source.version}" + "${replace.target.version}" + + + "~${replace.source.version}" + "~${replace.target.version}" + + + + + + + + + + + commit-release-versions + + + + maven-scm-plugin + + + validate + + checkin + + + [update-bundle-package-versions] from ${replace.source.version} to + ${replace.target.version} + + ${basedir}/src/main/js + ${scm.push} + ${scm.username} + ${scm.password} + + + + + + + + + + + compress + + + + de.conterra.jsregistry + ct-jsregistry-maven-plugin + + + calculate js dependencies + + calculateDependencies + + + + optimize js + + optimizeJS + + + + false + + + + apps/** + **/tests/** + + + + + + optimize css + + optimizeCSS + + compile + + + + bundles/*/*/*.css + + + **/themeSettings.css + + + + + + + + + + + upload + + + + de.conterra.mapapps + mapapps-maven-plugin + + + false + true + ${project.artifactId} + ${project.artifactId}-${project.version} + PUBLISHED + ${mapapps.remote.base}/resources + admin + admin + + + + de.conterra.jsregistry + ct-jsregistry-maven-plugin + + + deploy bundles + + deployJSPackage + + + ${mapapps.remote.base}/resources/jsregistry + admin + admin + + + + + + + + + less-v8-x32 + + + sun.arch.data.model + 32 + + + + + + + org.lesscss + lesscss-maven-plugin + + + lu.flier.script + jav8-win32 + 0.4 + + + + + + + + + less-v8-x64 + + + sun.arch.data.model + 64 + + + + + + + org.lesscss + lesscss-maven-plugin + + + lu.flier.script + jav8-win64 + 0.6 + + + + + + + + + less-v8-x64-mac + + + mac + + + + + + + org.lesscss + lesscss-maven-plugin + + + lu.flier.script + jav8-macosx86_64 + 0.6 + + + + + + + + +
\ No newline at end of file diff --git a/src/main/config/assembly.xml b/src/main/config/assembly.xml new file mode 100644 index 0000000..8e08f79 --- /dev/null +++ b/src/main/config/assembly.xml @@ -0,0 +1,37 @@ + + + makeZip + false + + zip + + + + ${js.build.outputPath} + + **/* + + + apps/** + **/tests/** + + . + + + \ No newline at end of file diff --git a/src/main/js/apps/sample/app.css b/src/main/js/apps/sample/app.css new file mode 100644 index 0000000..1ef12ff --- /dev/null +++ b/src/main/js/apps/sample/app.css @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + An own application owned css file. + It should be used to define application own css styles, e.g. special tool icons and so on +*/ +/* example */ +/* .app_traffic.night .basemapToggler { + border: 5px solid red; +} +*/ +.customStyle { + /* app.css must not empty, otherwise it will break the startup in safari!*/ + border : 1px solid; +} \ No newline at end of file diff --git a/src/main/js/apps/sample/app.js b/src/main/js/apps/sample/app.js new file mode 100644 index 0000000..5041529 --- /dev/null +++ b/src/main/js/apps/sample/app.js @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +define(["dojo/i18n!./nls/bundle"], +function(i18n) { +return { + i18n : i18n +} +}); \ No newline at end of file diff --git a/src/main/js/apps/sample/app.json b/src/main/js/apps/sample/app.json new file mode 100644 index 0000000..dd46a2e --- /dev/null +++ b/src/main/js/apps/sample/app.json @@ -0,0 +1,1153 @@ +{ + "properties": { + "title": "${apptitle}", + "amdPackages": "apprt@^3.3.0" + }, + "load": { + "bundleLocations": [ + "localbundles", + "bundles" + ], + "allowedBundles": [ + "console@^3.3.0", + "custominfo@^3.3.0", + "filesaver@^3.3.0", + "languagetoggler@^3.3.0", + "mobileview@^3.3.0", + "notifier@^3.3.0", + "parametermanager@^3.3.0", + "qrcode@^3.3.0", + "remotechannels@^3.3.0", + "splashscreen@^3.3.0", + "system@^3.3.0", + "templatelayout@^3.3.0", + "templates@^3.3.0", + "themes@^3.3.0", + "toolrules@^3.3.0", + "toolset@^3.3.0", + "banner@^3.3.0", + "basemapgallery@^3.3.0", + "basemaptoggler@^3.3.0", + "contentviewer@^3.3.0", + "followme@^3.3.0", + "infoviewer@^3.3.0", + "map@^3.3.0", + "mapdesk@^3.3.0", + "webmap@^3.3.0", + "agsprinting@^3.3.0", + "bookmarks@^3.3.0", + "coordinatefinder@^3.3.0", + "coordinateviewer@^3.3.0", + "legend@^3.3.0", + "locateme@^3.3.0", + "magnifier@^3.3.0", + "maptip@^3.3.0", + "measurement@^3.3.0", + "navigationtoolset@^3.3.0", + "overviewmap@^3.3.0", + "redlining@^3.3.0", + "routing@^3.3.0", + "scalebar@^3.3.0", + "undoredo@^3.3.0", + "reportstore@^3.3.0", + "reporttool@^3.3.0", + "agssearch@^3.3.0", + "geonames@^3.3.0", + "locator@^3.3.0", + "omnisearch@^3.3.0", + "featureinfo@^3.3.0", + "resultcenter@^3.3.0", + "selection@^3.3.0", + "mapflow@^3.3.0", + "mobiletoc@^3.3.0", + "dn_intro" + ], + "require": [ + "${app}.app" + ], + "i18n": [ + "bundle" + ], + "styles": [ + "${app}:app.css" + ] + }, + "bundles": { + "dn_introhopscotch": { + "UserIntro": { + "startIntroOnStartup": true, + "enableCookie": true, + // tour options + "bubbleWidth": 280, + "bubblePadding": 15, + "smoothScroll": true, + "scrollDuration": 1000, + "scrollTopMargin": 200, + "showCloseButton": true, + "showPrevButton": true, + "showNextButton": true, + "arrowWidth": 20, + "skipIfNoElement": true, + "nextOnTargetClick": false, + "i18n": { + "nextBtn": "${intro.next}", + "prevBtn": "${intro.back}", + "doneBtn": "${intro.skip}", + "skipBtn": "${intro.done}", + "closeTooltip": "${intro.closeTooltip}" + }, + "steps": [ + { + "content": "${intro.familiarise}" + }, + { + "target": ".mapview_tools", + "content": "${intro.mapview}", + "placement": "left" + }, + { + "target": ".basemapToggler", + "content": "${intro.basemap}", + "placement": "bottom" + }, + { + "target": ".omnisearch", + "content": "${intro.omnisearch}", + "placement": "right" + }, + { + "target": ".ctWDYWBtn", + "content": "${intro.functions}", + "placement": "right" + }, + { + "target": ".ctTool_basemapgalleryToggleTool", + "content": "${intro.gallery}", + "placement": "top" + }, + { + "target": ".ctBasemapGallery", + "content": "${intro.galleryTool}", + "placement": "top", + "toolId": "basemapgalleryToggleTool" + }, + { + "target": ".ctTool_followmeToggleTool", + "content": "${intro.followme}", + "placement": "top" + }, + { + "target": ".ctTool_mapflowToggleTool", + "content": "${intro.mapflow}", + "placement": "top" + }, + { + "target": ".ctMapFlow", + "content": "${intro.mapflowTool}", + "placement": "top", + "toolId": "mapflowToggleTool" + }, + { + "target": ".ctTool_routingToggleTool", + "content": "${intro.routing}", + "placement": "top" + }, + { + "target": ".ctTool_legendToggleTool", + "content": "${intro.legend}", + "placement": "top" + }, + { + "target": ".themeSelector", + "content": "${intro.theme}", + "placement": "bottom" + }, + { + "target": ".languageToggler", + "content": "${intro.language}", + "placement": "bottom" + }, + { + "content": "${intro.featureinfo}" + } + ] + } + }, + "agssearch": { + "AutoStoreRegistration": { + "componentEnabled": true + }, + "AGSStore": [ + { + "title": "${agssearch.countries.title}", + "description": "${agssearch.countries.description}", + "omniSearchLabelAttr": "cc", + "omniSearchSearchAttr": "cc", + "idProperty": "OBJECTID", + "url": "http://water.discomap.eea.europa.eu/arcgis/rest/services/BathingWater/BathingWater_Dyna_WM/MapServer/0", + "useIn": [ + "omnisearch" + ], + "filterOptions": { + "suggestContains": true + }, + "omniSearchTypingDelay": 500, + "omniSearchPageSize": 20, + "omniSearchDefaultLabel": "${agssearch.countries.placeHolder}", + "fetchIdProperty": true, + "id": "bathingwater_1" + } + ] + }, + "banner": { + "BannerWidget": { + "label": "Developer Network", + "image": "resource('${app}:/images/logo_conterra.png')", + "imagePosition": "above", + "imageWidth": 120, + "link": "http://developernetwork.conterra.de" + } + }, + "basemapgallery": { + "Gallery": { + "showOwnMaps": false + } + }, + "basemaptoggler": { + "DropDownBasemapToggler": { + "showLabel": true + } + }, + "bookmarks": { + "BookmarksFactory": { + "storageName": "Mapapps_mapmarks", + "bookmarksOpts": { + "editable": true + }, + "predefinedBookmarks": [ + { + "extent": { + "spatialReference": { + "wkid": 3857 + }, + "xmax": 1.0576968521053234E7, + "xmin": -8208195.550306687, + "ymax": 1.2931705115558533E7, + "ymin": 2648784.574413076 + }, + "name": "${bookmarks.predefined.europe}" + }, + { + "extent": { + "spatialReference": { + "wkid": 3857 + }, + "xmax": 2357847.7436069767, + "xmin": 9702.234686995856, + "ymax": 7299468.689048652, + "ymin": 6014103.621405475 + }, + "name": "${bookmarks.predefined.germany}" + }, + { + "extent": { + "spatialReference": { + "wkid": 3857 + }, + "xmax": 1564928.2306908383, + "xmin": 1418169.1363834972, + "ymax": 6932972.247678364, + "ymin": 6852636.9309507515 + }, + "name": "Berlin" + } + ] + } + }, + "contentviewer": { + "ContentRegistration": { + "contentRules": [ + { + "info": { + "valueNotFoundString": "-", + "type": "CustomTemplate", + "title": "{short_name}", + "showDetailsButton": true, + "skipProperties": [], + "template": "

{name}


${introviewer.regions.search}
" + }, + "windowSize": { + "w": 280, + "h": 280 + }, + "matches": { + "context": { + "mapModelNodeId": "regions/0" + } + }, + "title": "${introviewer.regions.title}", + "detail": { + "title": "{name}", + "type": "Grid", + "valueNotFoundString": "-", + "allowedProperties": [ + "OBJECTID", + "Shape", + "PK_UID", + "short_name", + "pre_2012", + "code", + "name", + "Shape_Length", + "Shape_Area", + "Region" + ] + }, + "type": "Grid" + } + ] + } + }, + "custominfo": { + "CustomInfoToggleTool": [ + { + "widgetSettings": { + "content": "${custominfo.imprint.content}", + "window": { + "marginBox": { + "w": 300, + "h": 400 + }, + "draggable": true, + "closable": true, + "modal": false, + "maximizable": false, + "resizable": true, + "title": "${custominfo.imprint.title}" + } + }, + "type": "IMPRINT", + "toolClass": "ctInfo", + "title": "${custominfo.imprint.title}", + "tooltip": "${custominfo.imprint.tooltip}", + "iconClass": "icon-custom-info-imprint", + "togglable": true, + "id": "IMPRINT_Imprint_1385994559598_CustomInfoTool" + } + ] + }, + "featureinfo": { + "FeatureInfoController": { + "clickTolerance": 15 + } + }, + "geonames": { + "PostalCodeSearchStore": { + "componentEnabled": true + } + }, + "languagetoggler": { + "LanguageToggler": { + "languageNames": { + "en": "English", + "de": "Deutsch" + }, + "languageTemplate": "${name}" + } + }, + "locateme": { + "LocateMe": { + "showPositionLogs": true + } + }, + "map": { + "MapModelFactory": { + "_configData": { + "maps": [ + { + "id": "default", + "glass_pane": [ + { + "id": "settlements", + "enabled": true, + "maptip": { + "content": "

{name2}
{name3}

{street}
{plz_city}

", + "dimensions": { + "width": 180, + "height": 110 + } + }, + "infoTemplate": { + "title": "${name}", + "content": "

${name2}
${name3}

${street}
${plz_city}

${map.glasspane.settlements.tel} ${tel}
${email}

${map.glasspane.settlements.link}

", + "dimensions": { + "width": 250, + "height": 250 + } + }, + "graphics": [ + { + "geometry": { + "x": 851833, + "y": 6788378, + "spatialReference": { + "wkid": 3857 + } + }, + "attributes": { + "name": "con terra", + "name2": "con terra GmbH", + "name3": "", + "street": "Martin-Luther-King-Weg 24", + "plz_city": "DE-48155 Muenster", + "tel": "+49 89 207 005 2200", + "email": "info@conterra.de", + "link": "http://www.conterra.de/" + }, + "symbol": { + "color": [ + 221, + 0, + 85, + 230 + ], + "size": 12, + "angle": 0, + "xoffset": 0, + "yoffset": 0, + "type": "esriSMS", + "style": "esriSMSSquare", + "outline": { + "color": [ + 255, + 255, + 255, + 255 + ], + "width": 0, + "type": "esriSLS", + "style": "esriSLSSolid" + } + } + } + ] + } + ], + "operationalLayer": [ + { + "id": "bathingwater", + "title": "${map.operational.bathingwater.title}", + "enabled": false, + "service": "bathingwater", + "category": { + "title": "${map.operational.bathingwater.title}", + "description": "${map.operational.bathingwater.description}", + "imgUrl": "${app}:images/mapCover2.png" + }, + "layers": [ + "*" + ], + "opacity": 1 + }, + { + "id": "natura2000", + "title": "${map.operational.natura2000.title}", + "enabled": false, + "service": "natura000", + "category": { + "title": "${map.operational.natura2000.title}", + "description": "${map.operational.natura2000.description}", + "imgUrl": "${app}:images/mapCover3.png" + }, + "layers": [ + "*" + ], + "opacity": 1 + }, + { + "id": "regions", + "title": "${map.operational.regions.title}", + "enabled": false, + "service": "regions", + "category": { + "title": "${map.operational.regions.title}", + "description": "${map.operational.regions.description}", + "imgUrl": "${app}:images/mapCover1.png" + }, + "layers": [ + "*" + ], + "opacity": 0.5 + } + ], + "baseLayer": [ + { + "enabled": false, + "service": "worldimage" + }, + { + "enabled": true, + "service": "worldtopo" + }, + { + "enabled": false, + "service": "streets" + } + ] + } + ] + } + }, + "MapState": { + "initialExtent": { + "xmin": -896965.2750203621, + "xmax": 3212289.3655896215, + "ymin": 5170567.199262223, + "ymax": 8086181.206171212, + "wkid": 3857 + } + }, + "MappingResourceRegistryFactory": { + "_knownServices": { + "services": [ + { + "id": "worldimage", + "url": "http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer", + "type": "AGS_TILED", + "title": "${map.base.aerial.title}", + "description": "${map.base.aerial.description}" + }, + { + "id": "worldtopo", + "url": "http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer", + "type": "AGS_TILED", + "title": "${map.base.topo.title}", + "description": "${map.base.topo.description}" + }, + { + "id": "streets", + "description": "${map.base.streets.description}", + "url": "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer", + "type": "AGS_TILED", + "title": "${map.base.streets.title}" + }, + { + "id": "bathingwater", + "url": "http://water.discomap.eea.europa.eu/arcgis/rest/services/BathingWater/BathingWater_Dyna_WM/MapServer", + "type": "AGS_DYNAMIC", + "title": "${map.operational.bathingwater.title}", + "description": "${map.operational.bathingwater.description}", + "layers": [ + { + "id": "0", + "title": "${map.operational.bathingwater.layers.title}", + "maxScale": 30000001, + "enabled": true + }, + { + "id": "1", + "title": "${map.operational.bathingwater.layers.title}", + "maxScale": 5000001, + "minScale": 30000000, + "enabled": true + }, + { + "id": "2", + "title": "${map.operational.bathingwater.layers.title}", + "maxScale": 3000001, + "minScale": 5000000, + "enabled": true + }, + { + "id": "3", + "title": "${map.operational.bathingwater.layers.title}", + "maxScale": 700001, + "minScale": 3000000, + "enabled": true + }, + { + "id": "4", + "title": "${map.operational.bathingwater.layers.title}", + "maxScale": 500001, + "minScale": 700000, + "enabled": true + }, + { + "id": "5", + "title": "${map.operational.bathingwater.layers.title}", + "maxScale": 200001, + "minScale": 500000, + "enabled": true + }, + { + "id": "6", + "title": "${map.operational.bathingwater.layers.title}", + "minScale": 200000, + "enabled": true + } + ] + }, + { + "id": "regions", + "url": "http://bio.discomap.eea.europa.eu/arcgis/rest/services/BioRegions/Biogeographicalregions_Dyna_WM/MapServer", + "type": "AGS_DYNAMIC", + "title": "${map.operational.regions.title}", + "description": "${map.operational.regions.description}", + "layers": [ + { + "id": "0", + "title": "${map.operational.regions.layers.0}", + "enabled": true + }, + { + "id": "1", + "title": "${map.operational.regions.layers.1}", + "enabled": false + }, + { + "id": "2", + "title": "${map.operational.regions.layers.2}", + "enabled": false + }, + { + "id": "3", + "title": "${map.operational.regions.layers.3}", + "enabled": false + } + ] + }, + { + "id": "natura000", + "url": "http://discomap.eea.europa.eu/arcgis/rest/services/Bio/Natura2000_Dyna_WM/MapServer", + "type": "AGS_DYNAMIC", + "title": "${map.operational.natura2000.title}", + "description": "${map.operational.natura2000.description}", + "layers": [ + { + "id": "1", + "title": "${map.operational.natura2000.layers.1}", + "enabled": true + }, + { + "id": "2", + "title": "${map.operational.natura2000.layers.2}", + "parentId": "1", + "maxScale": 10000000, + "enabled": true + }, + { + "id": "3", + "title": "${map.operational.natura2000.layers.3}", + "parentId": "1", + "maxScale": 300000, + "minScale": 9999999, + "enabled": true + }, + { + "id": "4", + "title": "${map.operational.natura2000.layers.4}", + "parentId": "1", + "minScale": 299999, + "enabled": true + }, + { + "id": "5", + "title": "${map.operational.natura2000.layers.5}", + "enabled": true + }, + { + "id": "6", + "title": "${map.operational.natura2000.layers.6}", + "parentId": "5", + "maxScale": 10000000, + "enabled": true + }, + { + "id": "7", + "title": "${map.operational.natura2000.layers.7}", + "parentId": "5", + "maxScale": 300000, + "minScale": 9999999, + "enabled": true + }, + { + "id": "8", + "title": "${map.operational.natura2000.layers.8}", + "parentId": "5", + "minScale": 299999, + "enabled": true + } + ] + } + ] + } + }, + "MapWidgetFactory": { + "esriMapOpts": { + "slider": false, + "nav": false, + "logo": true, + "sliderStyle": "small", + "doubleClickZoom": true, + "clickRecenter": true, + "pan": true, + "rubberBandZoom": true, + "keyboardNavigation": true, + "scrollWheelZoom": true, + "sliderPosition": "bottom-right", + "displayGraphicsOnPan": true, + "fadeOnZoom": true, + "showAttribution": true, + "sliderOrientation": "vertical", + "sliderLabels": [ + "" + ], + "navigationMode": "css-transforms" + } + } + }, + "mapflow": { + "MapFlow": { + "nodeDepth": 5, + "autoFlipActiveCover": true, + "autoActivate": true + } + }, + "omnisearch": { + "OmniSearchFactory": { + "comboBoxOpts": { + "selectFirstResultOnEnter": false + } + } + }, + "overviewmap": { + "OverviewMap": { + "serviceDefinition": { + "service": "worldtopo", + "layers": [ + "*" + ] + } + } + }, + "resultcenter": { + "ActionController": { + "zoomToFeatures": true, + "zoomToSelected": true, + "centerSelected": true, + "zoomAfterDeletion": true + }, + "DataView": { + "DGRID": { + "checkboxSelection": true, + "columns": [ + { + "matches": { + "identifier": true, + "type": "number" + }, + "title": "ID" + }, + { + "matches": { + "name": "NAME" + }, + "title": "${resultcenter.fields.title}", + "width": 32 + }, + { + "matches": { + "name": { + "$in": [ + "AREA", + "PERIMETER" + ] + } + }, + "skip": true + }, + { + "matches": { + "name": { + "$exists": true + } + } + } + ] + }, + "ICON": { + "iconFields": [ + "adapter" + ] + } + }, + "FeatureMapVisualizer": { + "useDataViewPaging": false + }, + "TriggerShowResultCenterCommand": { + "showToolOnData": true, + "autoOpen": true, + "hideToolOnEmpty": true, + "autoClose": true + } + }, + "selection": { + "SelectionAction": { + "autoDeactivateTool": true + } + }, + "templates": { + "TemplateModel": { + "_selectedTemplate": "seasons", + "_templates": [ + { + "name": "seasons", + "widgets": [ + { + "widgetRole": "printDialogAGSPrinting", + "window": { + "marginBox": { + "l": 20, + "t": 140, + "w": 327, + "h": 210 + } + } + }, + { + "widgetRole": "coordFinder", + "window": { + "marginBox": { + "h": 130, + "l": 20, + "t": 140 + } + } + }, + { + "widgetRole": "parametrizedURL", + "window": { + "marginBox": { + "w": 385, + "h": 300, + "l": 20, + "t": 140 + } + } + }, + { + "widgetRole": "bookmarkstoolbar", + "window": { + "marginBox": { + "w": 327, + "h": 250, + "l": 20, + "t": 145 + } + } + }, + { + "widgetRole": "measurementtoolbar", + "window": { + "marginBox": { + "w": 327, + "h": 165, + "l": 20, + "t": 140 + } + } + }, + { + "widgetRole": "magnifier", + "window": { + "marginBox": { + "w": 255, + "h": 180, + "r": 90, + "b": 99 + } + } + }, + { + "widgetRole": "overviewMap", + "window": { + "marginBox": { + "w": 255, + "h": 180, + "r": 90, + "b": 99 + } + } + }, + { + "widgetRole": "storeListDataView", + "window": { + "marginBox": { + "w": 550, + "h": 300, + "l": 20, + "t": 145 + } + } + } + ] + } + ] + } + }, + "themes": { + "ThemeModel": { + "_selectedTheme": "everlasting", + "_themes": [ + { + "name": "everlasting" + }, + { + "name": "spring" + }, + { + "name": "summer" + }, + { + "name": "autumn" + }, + { + "name": "winter" + } + ] + }, + "ThemeSelector": { + "componentEnabled": true + } + }, + "toolrules": { + "ToolActiveStateManager": { + "activateOnStartToolIds": [ + ] + }, + "ToolRuleManager": { + "_rules": { + "agsprinttool": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape", + "tablet_portrait", + "tablet_landscape" + ] + } + }, + "urlEncoder": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "measurementtool": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "redlining_tools": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "navigation_tools": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "coordinateFinderTool": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "bookmarkstool": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "magnifier": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape", + "tablet_portrait", + "tablet_landscape" + ] + } + }, + "overviewmap": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape" + ] + } + }, + "storeListDialogToggleTool": { + "ruleSuccessProperty": "visibility", + "not": { + "subLayoutNames": [ + "mobile_portrait", + "mobile_landscape", + "tablet_portrait", + "tablet_landscape" + ] + } + }, + "reportTool": { + "datasourceIdInResultcenter": [ + "bathingwater/0", + "bathingwater/1", + "bathingwater/2", + "bathingwater/3", + "bathingwater/4", + "bathingwater/5", + "bathingwater/6" + ], + "ruleSuccessProperty": "visibility" + } + } + } + }, + "toolset": { + "ToolsetManager": { + "toolsets": [ + { + "id": "dropdown1", + "cssClass": "ctWDYWBtn ctPrimaryInput", + "title": "${toolsets.whatdoyouwant}", + "tools": [ + "agsprinttool", + "urlEncoder", + "measurementtool", + "redlining_tools", + "storeListDialogToggleTool", + "navigation_tools", + "coordinateFinderTool", + "bookmarkstool", + "introTool" + ], + "container": "map", + "position": { + "rel_t": 72, + "rel_l": 20 + }, + "windowType": "dropdown" + }, + { + "id": "redlining_tools", + "title": "${toolsets.redliningTools}", + "tooltip": "${toolsets.redliningToolsTooltip}", + "tools": [ + "drawpointtool", + "drawlinetool", + "drawpolylinetool", + "drawfreehandpolylinetool", + "drawpolygontool", + "drawfreehandpolygontool", + "drawellipsetool", + "drawarrowtool", + "drawTextTool", + "drawSymbolTool", + "*EditTool", + "redliningSymbolPropertiesTool", + "undoTool", + "redoTool", + "drawerasealltool" + ], + "container": "map", + "position": { + "rel_t": 110, + "rel_l": 20 + }, + "max_horizontal": 2, + "registerTool": { + "groups": [ + "dropdown1" + ] + }, + "deactivateToolsOnHide": true, + "window": { + "closable": true + } + }, + { + "id": "navigation_tools", + "title": "${toolsets.navigationTools}", + "tooltip": "${toolsets.navigationToolsTooltip}", + "tools": [ + "initialExtentTool", + "zoomInTool", + "zoomOutTool", + "panTool", + "zoomToNextExtentTool", + "zoomToPrevExtentTool", + "zoomToFullExtentTool" + ], + "container": "map", + "position": { + "rel_t": 110, + "rel_l": 20 + }, + "registerTool": { + "groups": [ + "dropdown1" + ] + }, + "deactivateToolsOnHide": true, + "window": { + "closable": true + } + }, + { + "id": "mapview_tools", + "title": "${toolsets.mapviewTools}", + "tooltip": "${toolsets.mapviewToolsTooltip}", + "tools": [ + "zoomInClickTool", + "zoomOutClickTool", + "locateme", + "magnifier", + "overviewmap", + "*CustomInfoTool" + ], + "container": "map", + "max_horizontal": 1, + "windowType": "css_positioned", + "cssClass": "notitle muted mapview_tools", + "deactivateToolsOnHide": true + } + ] + } + } + } +} \ No newline at end of file diff --git a/src/main/js/apps/sample/images/logo_conterra.png b/src/main/js/apps/sample/images/logo_conterra.png new file mode 100644 index 0000000000000000000000000000000000000000..c72c30042f3b8764e1d59c313cf8e2910a688adf GIT binary patch literal 8616 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

vGr-1puy_xIph> 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�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 q{5R%;Nd5R8lAz+Qx*91(aJPeXNUojy4`) zvFQ{2%e1%j$MD>>kk2~uizuq28h6Pux~Qvg*QH+@5#Mokv*agLsM@dNN{CD5A3+5B zu4cMsp;iyCzKg|JOal!stVS}{VmbZ~Huytfbtg9q93p=tbfcfz>*h`g)Y<@R^ccizKf2D zPVE>2PjljAbWpald7SNI_eS?8o>xS=Z)0%@p2tR<3&4$Ma3@|v6P`pR67elKXkkJv z;z43NVo-{YunBMDMtlQ+!BnioYq$YtiU!5q+8aYkV!|RB<-gdm>{|2_X^6A3?f^g= zBsV(I2V`D3_$iLH1Nz`gh$i|{jk#XCsCj8hH80C6E38x#)2 zoa<>mF%*EciK}CNLK#{~gWP6xuy?K%+PNa3!9`zwrZZ!KE-@ICi3~4V!`M z(B>noz+3Rbg-As#Rv`hS@homd15VWdh3rjae~9oe|+Rgz4eiB@I#=0dvO7#I@WSFxzT zrT7T9z#mWI3fzIOu^k*D@Dd30gusgk2aC6`3in_Fo<=BU;5FQXI`n2h2=~7=TZ%Ru zSf4O_#O4owF2e@pw9~z(i%yk5eO1fGGL7;w?On9{3w6 zrlJ7tYDx}#X&*^N1PxNDPd^sJ@lQOBSMUwi;4S1}Dqch=ZUlke5Lf`YOZXUX z;y-v0HzE{g1!<3XCr%9my%fpchY_B}#;T&7Y$U|4y@u#a#TI%A1b}<6KHp(Sk0OV1 z){Kjyk~Mztl4Vn4!LJo{vNkl~^ye+!h820<@(s-1Vu2YFfT{4s`FIyYp@9K<=%7b1 za&ZY>KqSmK<4I<5I0fJF7l{8t02AgolK&%GQ3`=X7lsJMLbMrPvmPg*N#xC{vT#Sl zM2}pxv#}PCr0U}8;=X7^uEP&Vz%7`M3z3V!_RkUUodf z8@D3{Z8R8Rs_Oe#%)tgMff9FOIyM0K5x)2l!1tJeyP(8>@Hu8ekF$kM@jiScbCQl! zI4ie*U~WbSk^l)O;5~#2$8A>#hCp;H_Cn5LYY;O$kHU-p%4D^g`!W_r+=~Oa7*8Ps zkHLd%j0KH%A)_}k-bD(skpvt5jjQk}F7dt|fFJ%0vG~iPCUDK1NtV!w)4~`|987W^ z=+FWEZp09DBPNYCP+NnN_kYJ-=2?cBWa5$SeY;fl02acGB)o|h$XJWdu^h7iY(a0f z0Js>-@igAY_gIOWp@auFVCEkhhIx1q>mVZ!+4yTpk_E=F@5@8K4ZS=f9vw8**^gx3 zaAGV7H9DY{YfQlroqs)&eSUa?csX;At|2pvQMsZ__q3Gv^}_o7SOvh`UM|D}Jc%y= zEW`#V(K9#h2Jjp>-0Usup=uwd5-3Ff%fZge{OW52~Z z9Cb4u#YM;i5Q{S0jW<0_5?#4*1$JTW?QjlG^dZV%zy!R2^~lDDn2W{0pA`&p3K5_@fUXYd1}Tk|pQ9TR zXFiM*9QZXXNq4*ABE@WQ@PfcT&VH=E%5X3Llkz?kfyNl5Nd9~nbphunUe&+5vy6BZ zd02-BFdkd67rWsGumgjz6r(`kI2l_ot9^scg|K1-Zozsyi3M1Odr;QLahT9r2BR}e z>&>5etPwHe9IV5)xcJWt2Kk-fWF6?Lj1UPD-I92f0Tt-L=_uYq?@KwCc$9qUhluoo}mR#f*(9J!s0y+r_vs=oxX3fU&Sb(|-;HS%v*c{bAwLR8Ts}G%6SK7a^xENbef@LTGhe+Iv z1u)}(FbCV)*GQLR1x^%>yD=Eg;$6Iov3TBFM&KF@1=oLZXjhI8FcWjp(Q-_HSL>Cv zz#kh7;UjLn`aPTk(L&mke(1mu7&AJ5WoR_XG*;jkk_?LQGY03n8^KAPgPr2JyL6|i z5$$LOk|6ZwUQXaGT#ZMu8ytWKkcSE^K@c`!d23|;4Hm#W%m)w&JEj9zfqcZ^Rs4Xh zcnn_HhC7jhM*LncA`dNC)*82-eTa2B1umd#RHhZB`CtMbiPMOuAsyNbv<6_0nrS;Gp z4+Y?`$_S0>pICG?13~x!uVEV=LL4?gi^tFeHE7(3>j2Ow!!3x$N@TRwDQodQE=4X* zTWcJ8vk2Lki>}Na>b*SV!wYl!D;UB~`$f`7=)^h1Q~b}|CL)v>itXr`lZHx;JGbMG z3Vkq&0)hy#VjIH@xpL^-toiVA*tfiVPB7ZLzCu>lXF7FML;UObPdunc#=fc|E|A}s7S zI_r^rLann9=*M7ah*(Vo^$dTP5LNQS)}`geq7qiP(6cY)Dp6UmqT`MVW(OWly^J6s z$BvU_TZJi4XYe-yl0>mg19_PE7)NjnnJL=@o{S1;7QP`o4*iuCG4~ zv=rK_8?Lpz<6Oo)3j=zjcv!t8X=?n)ps@7wf)&cyXn>deV0di&)bedjTgrC^h5)5I zfre_Q9e(g~U&DQiqt=q|3s3O>0NCAP4NU{Jr90m#S>X=yPu2(YUo5&B0|wRj8g0%+ z37oLw5JsTQtI&Z$7W&S*lhhZ3Px|+=(b-%q$8qQMc`#DN@WyJO;&A@TgTL+msn#rv zg$6xyG0&45_3lCOx{pFry8N!1iVK zPjNL|Xj6uncmsXOj0so|A9bxQy4Dx{5)8HQi5y6}>@{dblHOrsIsF|@0r!~eK_UlU zQhDdoYe-tWR=NW#8B%IMJ7RK6HNbiDf7-FKc$ZQYJ_zk>7Ds91~kV3HC`((C?s4gcN9QW)%rTGtbYuWaQ1m z=f&jYT$g);TH~i1euFwps1hW}LfA!*G1qwBsrEH!{9gCqxF^uxKJb=oZ;5TM3)TV1 z#yaRvxk-8gFLVjU1ekGpc&sKqV|Ho%0g?0o*%%EQtneGWfS@?bp2f#^TlgCjW(~Sv|5CTB zKVtFc%R^qL_w(=p^gYC=d-`qyFc^85i9DRT5Pq)g&prz)fCR}+mT?TAQu{?wlr#=Y z&;XxE-^vQm)!+Gr1O&i~I-tH99Rx=Z1e!X1Td^XRQI&pGTPDlsAYnxKq$8gl4+YTD zRJI~=pdYKY%JW9cRBnd&g7YnItmg@oG4GHJ z;IMCff6F^9fv&sZ8$Ur+_I=q3M@#8W=Y<#o-~dBV6j~*ZN}m`ulsqi|f)nxl>gFvq zrLv3@l7e~7z~p#6>Eaei9BZW9@V!xs*!eOWzm0`sHiCZU{p zOxF2@z$++K@eE#9%tbT05@^kkD~I2ZH17B?l%k9&TuIkssLjoLe{3--LR04@3_ZJ^ zK9twm5j7v*W6^)X5SuCwH>9o>n& z_iOO@q!DN1L#ZYl8>?h@J42e^OE6;53;shQSa28bF8F!Z$JQf(IoS)+&S6;64;9SC z%mlv+$u({_yhOJ+2tJ`U7!wFWYM>sc?w39ZN-AAV8kJQ^gCbmb1&7fcQoO}AcK^~H zZ|!)!V!0|5?E=H8=<*%tK};H>A!(Nxy`s;^SXhwPKDCyOdB|>G<6Vz+_y9m2^ypa` zdNa0uM{PO0Bx&zA8o#6|0mHTa@+SaXs0PFgdn3GBDh>BZb<8UCih0v`zrBHA@H)W$ zVAyO(C!SUOFFZJr0V6$gh*V}Taf5Ib9uq5K&!N-=O(_}eu(`WF)aoLKYtk*{Json8 zIzDiuWNY}Xy726aMJ!@Y_%TCXHzSXQSnT`KTvyCRLC=KTdid++26#E_yp5VieT`$} z6k8s=>MI3L{J)s}J_KzPZ;8H$Qi``xuS@IX5K6(>lpe%Fg@b6vO&0HR=}eV47&}2+ zN#)2&MU3PW+_G7)TKDTS$34WkL~zX&KcfenO|}((S6>O}42d&TVWrEekDM*BXm3J# z>7tr@nD6+|r-`{nBBF7p$AxyBm5XBGWq=0N&=Mgw3tBZd1X^*U>S6RoW2-4zsy8Ow zOMOP(MvN0w%C+1R^xa&Ma$I}g;%a$O$(p8J@RCGPFuf}X=s=S{^mg-hQ)y!@dQ^G9 z5EnnS<)fHk!J}Obrmcf!sa6;58i>Vl%aM&IFc%$J@PsdQ1uha_fkr9VZD=QpaxA>0 zpAbXdg#_M>V>~ueh2HJZg>at6>fl=c0*PcMi=+5u)(Ra*(vV=_Z;)rZxuTUv!&Y04 zE*v&@gF5Q)W}F1)+5f}vJBHmxGSzF!_5eddLMQhW3-S!@S@fn1^Wcy9cnRyhWf3lc z!Iw~YzVXa)*IN&Rz%eA#dh0cEfk;~JsT)rPs?=zw2_}C-?;6S4q>*aP{$I9#1c`sq zIdAuu`+qI`hKj;h&JS9q?OVU+Cz}N)RkL0dq3R`qvE#tVa{im%P;)vXYCX zd!gjad0&g7K7e5z*0#y(+(+x7uV^|DeuJZ`>2TEen9Slm9nZSh^J&hl)=Kz@Z&rolBs8I-wRk5w z*!2;>vSA4U838#V=ZHLK674b5fq__@sxa9veUjv1^~!4Om0Y9}B>gLZU}SinFg0|J zMMJ6T3uh@CqkIuOjxyj@&fuQZQexhaI@eKCRU~ls7Q3x^N$2$qp6ATQ!Bs`@f!<#o zclaZ;qNtE)&ZX8{TOVmf5Nb_iR^SN9L#fdP$CV!_KLF?qk=X~f$`7JP zQOVI4?Rb^*pjVmG4H?B>)RrZW3(TdIGB3-rKrjTn2w9ZHmc6V&7V?+-_%Q7=aL%GX znZ2b8&cjAilDZk)#=_%nJP;Dk;wXNCsVFctD7vO3FoYs1591`Nj)Yp$F3S5Fz1p`j zCn#)G^mLMGSXY+M^YEf+r5bSBB?+g99%w>NpJom2ge~A6;z`<;{+DMPy3Q z5a|*emFu2TQ(&$jNSY2y7b_|1WH(KgE&Bp<;S*1tKHGZu(03jW+6jW)idF-$SdKr# zW{g(9`Jt+5&8a5t;IfW0jme{Qi8!qK5p6>F=bI0;G_=(s#u(`8 z3egLfg`nUQo5gk{Wv(%7AQry#Ec)LNZk^e$;OEjjOI35}iQU8Mg1XiB* zksdfA_m0uG1qMf^C<7bos*BKz<~oAPnhu}rUCG;HC!-J013in=<$lRU@Xq)l3WHuR z6w595a+4|?Lc=CQO4?k}BU(!LpjU$6ETw4p$Wuk? z{}Qnnh=uY|;vBUOfR%lY^|kXi$&QS!T3vMry;8?FZW@S1M>GGlp2d2_dK|aOTTV3Aqo}WJ`DW;CiL(no z_XY!^=rKcN{BTkfm3gsW62LnxJ85n7Me2Yfn@|4vVe>uBMcW2qaa=a^0M_BpM?ecJ zj$^q8o5}&sv*YE#v(s-VU0PiX6zLrS`0VftJdNecj?QaD7sg!TX<_{dwX34O zyt@gm)Jd%Wj#nfJeSjQjLi$*YSm4=!U;qk?^gQBTZr9e8!AlhPeA==rcH-cv6a~;~ zT8$nV0z<}E|G53#nT5yL=V(@P$heCf}(A^UqA4E)zZ3^ zmV8~>u&am9i%14oMO;?K#o2Q+W{?ngbiuL-!;(gXMpG1g5*pnXu^5=M0C$IHBcIRx z%H4wi01YH-t8(7wT4TPpcw0%n#e@?a+T?M>UusC@EHc~k9D}tHTx3QQnuyll;>`l9VK% z2X>qFaO9MlBOKS=(%ayhoYi~2WEH71lu;HNDflZTvt_4tSk11^O;P%MO2M`4cngRd zZpJ6Ef_;*)$OV)mn1-;95PoDcfQ}& zwNz_@qWmIA#?@%d70H7ixtyUf+AvxzdPth_V?zi<(bCj;4I7Va1k{?e%M`)o-yVI| zGEE!9H32S5P3iFlBsN}g4&=Ux#XKxVn|zc3h&@^>wBD%xzmE1_uV?=`jR?Q5rJ-<( zARMiRc}@`E6TN>}nl?ohdf>gLI&@?7-LlxURT2#uieQqGc%hzDFrn`Hy`LUk`3R1P zI}cjPLjhny?1u%Lx{g^zq>00cIFHrcQdiJa7nKw}qvE^DL-0x&A2g<7dHF%WPn$Sd z=?~Igx$j3mEzf)0K+;I#Z_Lwu6N{Nx)_(Ze!eh53_Sgp6O8_i8x~sYmufK?k+pc%0 zG0O1g7~}q@m{h)@u@=8W<}|;AEia*4i8&z?Wskt|j;fyMP+DpA$Z%_|uxQ^z#gANn>p? z75T?#XeOw5Q+=f|G-fcnn(c#aI0lqK-+I&Lb?F2yhaMK7^`A4bu8*&O&>9>IVqwOg zj-M$$z$r|HNxZ=tjo*hOD~v9jB*gdf3gPd-q~V0)b`k_~7y7-;^JSObp6ojij=4c~pSnW+y9(Ce7=1v@g$l#L5A8N|D{*Ad$m(?wlek7& zD>+?N>er4Qp~6pdKUloy=!i+J$@$0W4^ZcwwKj0i$K3zUx$1Q_Ljen z-&jheb~@mr%o(J_CXW6GWI&c=-c{|Wpq1)qCXiN3BB;nQ&CAe1@DPsVDhqx<7fIte z1>>nJz{wB}2Sd<|D8!DCmcfd4j+wd~%+x6ub zjK36lLuf)tK70}wqDyaF&)GztAOW?}IF@4kbh6fMwUzNsf>Z@aZgimW(3LMWR4A-)XXK{>n12zD}`2oXe4{?j;dn`WvSP(e5dHs6*32*sJ zVSiNp6F#Boq$}*jhc=>J%4lZ;qvM3VZxIBma5^NZ<89Yy!&7xys?1*A-K`G@0!=iP z@4-n~jsy<(G>^WAB;>si&@V3=VGMAx1#a7^u?!lmWk zYT}09Hsto?>vHeOzB+NFR;SZPCZvuVcIn_Nj6n>@@Q5i|edn%eP*~Im0;Q{ZTRT0t zx@9+SwHF=yR0=~FI&-oYw}zr0VlkkYA(blhDmsHw?)?-USWF&Q*a*>KJLImV2tXAP zJYmS4*>}aw^p7Llro+|6VyvVl*oS zuCEY9AU1E?W#Ne;B7bqNS86Y z@&M<-NwpL*Re~*Kl)}k*IJ+h$ZJ5Nh>^-uU=Wz_@ktN8iMik-YFcFN+0_&c zO_c=6!<*X`?JV2`ux#+Cy3*2p=s|R9 z#As3q8K(-+XIu6tgLrFOQ;_#9S_Ort%u615cq>rwa|$0gA|oR23-o{_DXJ}Uf(P2Z z+=eqC6oKf?5U1N+uL*_^f@379`Y^gh5ZM=o@a(zLy9#5#NWNL0t&FHyM^VY6a<0z3 zF6Y{zvoa>P$L^mo0w={ywKbNkuiXzH1Sax!jzhO-Mxj@~jv~p~ys6?_SCw_|mRFj~ zNBtupm$y4>JWT|xj*Gg8*0G^zcjSBC9FR-Wns|c|C&;)k;{2BUyf-UXH*Id(>L?a$ zeb9&u;6Jyk9Zi-xYl$%;`aRTPpW-*{Mj5)&@@b|Ls~J8~hP$fJ1D-P#>c?m{vu`Vn zYAy4c^bd_+^az35@v10xJjf(uEZW(vJKm#dT|nab>9Z||9d+h9NWm$LAEi)47QEBa z1UPI!M0`+?=LZ#fl+NAD`fwV~fK<|>gW23>C1ePA7qiB5@{Ui4Xgb;teUVN*Q&NPo&e zstCqy5?zq2MMqa*wYsDnzlGQX3Eg2m5Aai3nxba*9*Y5#bf4vdz3b75R%eXWhp;lG zBbG2P!+;8ad$l^K;vjr9^kPNmws#~+rHag;SW}s)UJyFOVyb2uOgJi-f5DS!s|p;x z>%ESnoZ;6I)UFRZPGpUHsA^?t0lF1G#JFGiFLY1Gy<-n8-tKgq^LX!livgl^xhe@= z*sP^{^M2m9dH=7rX`VdC$L=r0o2Ai>W$@X)?`6fvdlkx2_0TH55Unp`z7X$|57-t3J439?#Tyx~~!;j`?kTvBP5OOnoep2SoC8## z(x#$YE~nL8@YC)u@;6qv?YA+>NmFUMr?Evqke?PE#0-($GMRai&crTaUshh?H#Z_a zEEer_$>JF2^GFAYR?Kv@DQ;NN3Qtq=HF|%vQ^nM+4ovI#z1!Y)RIx^M%UmJ6<-P`8 z1#mA~1B!O|J`x!aEz^Q4a9B)cKyX}EUJRtj?CuN$5ZoYChEc&QaqKkz(KDZ^wxyabKBZ_WvS^zQ!9ed^Ie+<8Q@Ri3usWW6wQ?FKxXNReujHGg}NF5)W5u0w^ z?_RIC8tY(2JLY?3O=L2TsXVg%3r93R4ei)Rbk_&2rz<2^!c{?GfHB!oB1zS|)Ovl! z@%>(syX$O-J|HnC;|4{jwYXue=W?8nFi-$;x##$O)~Bl*4sJiSb2$ej+27f<_UMj> z^vQ&3+h;hbhy;D2GLQ*iwVbJTZN(uVd6fS~#Zx#cL^wwn42n3S_~v*d#Ji}kP>W34 z%SHJehq(U6w9Dn|J02)6T#iSHSW?}*QyE{n#A(l%Em&nK{~I7EEFdm$s3hin;C7)M zN%|YZvQ!=>NTRndl_VfK**{zrL=$46TW7V@7dvdSjCQ`Bv^U_Y=9>%Fqh03t`izbL zflvGcGj9dwsIXTs8pD^=%Q%@JaTm1!KLNs3?uYk(?{?uBtv+d_;#p<|I*Je zjnBr9Qig!{Pc!ZIOQbZCz&A1mT5<3bQzJl<;qd`6Dw$ZUkQ@&vjN9Mlc|hYAo~qNa z`QrJYJx%%Fp%WiQA_K&KQGRF_6t2&#S_2=oH1GJYxd2q)FkO&GgOlJt;dgN&jPRnD zDn3ga7Z8MFY?jj9;xhmRy|(+a?QeLR<7WUd zX}NP_QniPOJX~#?%X1RL^At5GD|w{<9=|!{Zwd`(D%A*-y;&ah69cWRclxRUaW`+6^qbK`f zodNBtb~X-c`lt0(_pca+6DXD&LIGKJ+XIKdD>OQLo_46Wx_u>5+yw zS{b0yj=oJ#iYn`D&-d;PZZsACzBQ2n=ekFiZ)soAoWMks^Sf#PPx4cLy8lZ7`jrcyO1Lq`Jjp?XW$i>lE@+jt)B2mv>G(iBTN ze5XLLk|YTA8xyX|yh-xZZ#uj#C@eO;v0NJ{mr@1vYxHJ#;s4~TWFmi!AOPN17d{S9 z2e{WADQG(aE&V)wR>{|O74TW^HT2KSC)fr7J`vxMVwf9Hi7xopt!V}8aEw}Gj5fwG z)%0idYFGjIdA4o;T9Sa=>!95JHoQ{C_&0Mgls^-IMshWIFT6l;&opH?Te>^)(f5(a zfXQxUTPOf$13@)Z!Dl*y)FOX@O+JPq$+OIsZi4e6bc1Iu`2Hfa1Xxt`16j9p}AK^C6YuF`0tSlLM|9` zk-srKj#icIK&!e!VIl}BmCU4mYSQ`<>Wl4L)k2!T(6 zBcju#+3Z^QuE|mhxSTQz2Hi0$E>S%fAD=N<9{{i5c;*Rar0NI5AiKkLIb6&Y>Q|C4 zikfOK@p#b6ZaeUs_zZUiTsX#ane4~ANR6NFG-5G;{#N@4;SqUwk)(Q%b-!;1nIz6o zKFt1#qbTI^pUM>=gx{oEbgx>e1xQjBL8AxMCyGn8pT?&|Cj+#KZiL7zVm@cLs@?(M z7J`{Dl0E!=r(NT>V;l&yQ!J)OC~v3gBeMJhe}60nxWGHA+Kw`bA4AST!2bVTHr#@tnBOB+ad;sMmLwa?}C@&S1H7(M*?uaF8adI2**al4`+ zVRYIAhUsqnlsR$u)S**OHk~yfOi%?yRF?q$gPr9b4}3sTQJFY|1{}3fQHnTfBTmlX z@2?Fec=1d0P9e)`&7iT;YBL5c$9TXbnT-CMMj1#z?a!-*Z?V!Tt z$B%)FN(v*rpX7nwPud$W%oVFD;;%Pn_x6z5kjR)Z)Kd0I@aR8D;$!vx+HmE=%=hSO zG?zmhVo1}2`_{rM?HrX#`8;P=Z|fXX;W;D_NupjfalEa%>X66nr_H>Ay#NJ(@39zQ zaKGB1>iO5A8o!tvKapC*u1DXBMlu4S0mTPM;fN*@q2T)`tRiEQb^-FyJyuvt4kE+g zg($?J4n;Uh_O;77piY`U=#iowHY<>j6W~wyiL%?}X>m3?%+Vw1Zfonb7S2>NfIz+a zYBVAW8SX?R5lJXhT#x>d>G+o`va0>e%;?l`n_>Za7s1UG$016jXrppYPs{rJOU#2k z)Nj5wA_Ms8cz_D$s!^$Y5EVF8O6Z|Q3z`9t@B=_29z^?1i{-BtbD%<_@@W*|9IU}n z2JUL%G6&gI*j%UcPfk^w2VbdLzkeTkaayq$z-_a70&?YtspsLVU?hpDd?FGFy{M8! ziKl4#3qnU+At_`M5IE7LXpmdzT!}UnHyrV}gJVNOh(dXkVl>P+EhtB)Te zx=W9pwM&wLA)!NcSW6d_@Y7-Lg}5P)$q| ziiO44M9=MuSPYo#dSTZxQ3N!8DN~p=1dA4Srx;9aK>?1V5H5@s&zGVFt*y~q)zT;k z=+%%b)RCM1i(^v8`mbPLMxWtcb&LQYIU5+Y(x?oSny6*WBJ{xbk;s4q$KB!YT6fugbfHv5rW?~)qgc<|9TsPEOSQQf zrz~@-Dth}nXcrM5kwQPktUzZu(u?F6{4rzz|8M^>z$h364F55}C>R9*RaX6y+U7ws P00000NkvXXu0mjfawgJ$ literal 0 HcmV?d00001 diff --git a/src/main/js/apps/sample/images/mapCover3.png b/src/main/js/apps/sample/images/mapCover3.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbfe13df602e08ac8ab557031086394c2afea31 GIT binary patch literal 15195 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 your imprint here.

" + } + }, + agssearch: { + countries: { + title: "Countries in Europe (Search on ArcGIS for Server Map Service)", + description: "Search for countries in Europe", + placeHolder: "Country..." + } + }, + basemaptoggler: { + ui: { + labelTitle: "Basemap" + } + }, + bookmarks: { + ui: { + toolTitle: "Set spatial bookmarks", + clearButton: "Clear all bookmarks", + deleteMessage: "Do you really want to clear all bookmarks?", + deleteTitle: "Are you sure?", + deleteWarning: "This cannot be undone!" + }, + predefined: { + europe: "Europe", + germany: "Germany" + } + }, + contentviewer: { + regions: { + title: "EU27 Biogeographical Regions 2011", + search: "Search for more information!" + } + }, + map: { + glasspane: { + settlements: { + tel: "Telephone", + link: "Open Homepage" + } + }, + base: { + "topo": { + title: "Topo", + description: "A topographic world map" + }, + "aerial": { + title: "Aerial", + description: "Aerial views of the whole world" + }, + "streets": { + title: "Streets", + description: "A detailed world street map" + } + }, + operational: { + bathingwater: { + title: "Bathing Water", + description: "

Map shows monitoring water locations and quality of bathing water from 2004 till 2014. For the scale 1:5.000.001 and less detailed, data are aggregated by country. In such case, stacked bars show percentage of bathing water quality for coastal and inland waters together. Number of bathing waters within certain category is seen in pop up window which can be turned on with a click on one of the countries. For the scale range 1:5 000.000 to 1:700,001, individual bathing water sites (points) are visible instead of classified stacked charts and are coloured according to the classification of bathing water quality. Symbol size depends on the map scale (in more detailed map scales symbols are bigger). For the scales 1:700,000 and more detailed, symbol of bather in a square appears instead of points. All symbols (charts, circles and squares with bather) are coloured according to achieved quality status. Historical data is seen in pop-up windows which can be opened with a click on individual bathing water monitoring site. Assessment is done according to assessment rules of the Directive 2006/7/EC (classification into categories Excellent, Good, Sufficient...) and of the Directive76/160/EEC (classification into categories CG, CI, NC...). Monitoring requirements such as the taking of a pre-season sample, a minimum of four samples per season and a minimum of one sample per month must be met for all bathing waters. If these rules are satisfied, the bathing water is categorised as 'sampling frequency satisfied'. If at least one monitoring requirement is not fulfilled the bathing water is categorised as 'sampling frequency not satisfied'. In such cases, bathing water can still be quality assessed if at least four samples per season (three samples if the season does not exceed eight weeks or the region is subject to special geographical constraints) are available and are more or less equally distributed throughout the season. Assessment of bathing water quality is possible when the bathing-water sample dataset is available for four consecutive seasons. Bathing waters are accordingly classified to one of the bathing-water quality classes (excellent, good, sufficient, or poor). If intestinal enterococci and Escherichia coli sample datasets for four consecutive seasons are not yet available, the assessment of bathing water quality is made by using the data from the latest year only. In this case, the assessment of bathing water quality is conducted under a set of transitional rules. Bathing waters are accordingly classified into quality categories: CG, CI, NC.

", + layers: { + title: "Bathing water quality" + } + }, + regions: { + title: "Biogeographical Regions", + description: "The bio-geographic regions dataset contains the official delineations used in the Habitats Directive (92/43/EEC) and for the EMERALD Network set up under the Convention on the Conservation of European Wildlife and Natural Habitats (Bern Convention)", + layers: { + 0: "EU27 Bio Geographical Regions 2011", + 1: "EU27 Biogeographical Regions 2008", + 2: "EU27 Biogeographical Regions 2005", + 3: "EU27 Bio Geographical Regions 2011 outline" + } + }, + natura2000: { + title: "Natura 2000 Protected Sites", + description: "Natura 2000 is the key instrument to protect biodiversity in the European Union. It is an ecological network of protected areas, set up to ensure the survival of Europe's most valuable species and habitats. Natura 2000 is based on the 1979 Birds Directive and the 1992 Habitats Directive. The green infrastructure it provides safeguards numerous ecosystem services and ensures that Europe's natural systems remain healthy and resilient.", + layers: { + 1: "Habitats Directive Sites (SCI)", + 2: "Scale under 1:10,000,000", + 3: "Scale between 1:100.000 and 1:10,000,000", + 4: "Scale above 1:100,000", + 5: "Bird Directive Sites (SPA)", + 6: "Scale under 1:10,000,000", + 7: "Scale between 1:100,000 and 1:10,000,000", + 8: "Scale above 1:100,000" + } + } + } + }, + resultcenter: { + fields: { + title: "Title" + } + }, + templates: { + templates: { + seasons: { + mapflow: { + title: "Map Content" + } + } + } + }, + toolsets: { + whatdoyouwant: "What do you want to do?", + redliningTools: "Redlining", + redliningToolsTooltip: "Redlining-Tools", + navigationTools: "Use navigation tools", + navigationToolsTooltip: "Tools for map navigation", + mapviewTools: "Map Tools", + mapviewToolsTooltip: "Map Tools" + }, + fields: { + id: "ID", + title: "Title", + adapter: "Service", + type: "Type" + }, + intro: { + familiarise: "This introduction has the aim to familiarise you with the elements and functionality of map.apps.", + mapview: "These buttons allow you to control the mapview.", + basemap: "You can change the basemap by selecting an entry of this dropdown list.", + theme: "Change the map.apps theme.", + language: "Choose another language.", + functions: "Additional functionality is available here.", + mapflow: "This button opens the mapflow. It allows you to change the map content.", + mapflowTool: "Simply select any map content.", + legend: "The legend shows the layer symbology.", + omnisearch: "Search here and configure the search message.", + featureinfo: "Click on the map to query additional information.", + followme: "Here you are able to work toghether with other user.", + gallery: "Choose another basemap in the gallery.", + galleryTool: "Simply lick on any basemap", + routing: "Here you can calculate a route.", + okButton: "Ok", + closeButton: "Close", + mapScaling: "mapScaling", + mapLoading: "mapLoading", + next: "next", + back: "back", + skip: "skip", + done: "done", + closeTooltip: "close intro" + } + }, + "de": true +}); \ No newline at end of file diff --git a/src/main/js/apps/sample/nls/de/bundle.js b/src/main/js/apps/sample/nls/de/bundle.js new file mode 100644 index 0000000..7e67e8c --- /dev/null +++ b/src/main/js/apps/sample/nls/de/bundle.js @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +define({ + apptitle: "map.apps - Intro Sample", + custominfo: { + imprint: { + title: "Impressum", + tooltip: "Zeige Impressum", + content: "

F\u00FCgen Sie hier Ihr Impressum ein.

" + } + }, + agssearch: { + countries: { + title: "L\u00E4nder in Europa (Suche auf ArcGIS for Server Map Service)", + description: "Suche nach L\u00E4ndern in Europa", + placeHolder: "Land..." + } + }, + basemaptoggler: { + ui: { + labelTitle: "Hintergrund" + } + }, + bookmarks: { + ui: { + toolTitle: "R\u00E4umliche Lesezeichen setzen", + clearButton: "Alle Lesezeichen l\u00F6schen", + deleteMessage: "Wollen Sie wirklich alle Lesezeichen l\u00F6schen?", + deleteTitle: "Sind Sie sicher?", + deleteWarning: "Diese Aktion kann nicht r\u00FCckg\u00E4ngig gemacht werden!" + }, + predefined: { + europe: "Europa", + germany: "Deutschland" + } + }, + contentviewer: { + regions: { + title: "EU27 Biografische Regionen 2011", + search: "Suche nach weiteren Informationen!" + } + }, + map: { + glasspane: { + settlements: { + tel: "Telefon", + link: "Homepage aufrufen" + } + }, + base: { + topo: { + title: "Topographische Karte", + description: "Eine topographische Weltkarte" + }, + aerial: { + title: "Luftbild", + description: "Luftbildaufnahmen der gesamten Welt" + }, + streets: { + title: "Stra\u00DFen", + description: "Eine detaillierte Stra\u00DFenkarte" + } + }, + operational: { + bathingwater: { + title: "Badegew\u00E4sser", + description: "

Diese Karte zeigt Messpunkte und Daten f\u00FCr Badegew\u00E4sserqualit\u00E4t von 2004 bis 2014. F\u00FCr Ma\u00DFst\u00E4be 1:5.000.001 und kleiner sind die Daten auf L\u00E4nderebene aggregiert. Hier werden Diagramme mit den Prozentwerten f\u00FCr K\u00FCsten- und Binnengew\u00E4sser zusammen angezeigt. Zahlen zu den Badegew\u00E4ssern einer bestimmten Kategorie werden in einem Pop-Up Fenster angezeigt. F\u00FCr die Ma\u00DFst\u00E4be 1:5.000.000 bis 1:700.001 werden die einzelnen Messpunkte dargestellt. Diese sind entsprechend ihrer Klassifizierung eingef\u00E4rbt. Die Symbolgr\u00F6\u00DFe h\u00E4ngt vom Kartenma\u00DFstab ab (in detaillierteren Ma\u00DFst\u00E4ben sind die Symbole gr\u00F6\u00DFer). F\u00FCr die Ma\u00DFst\u00E4be 1:700.000 und gr\u00F6\u00DFer werden quadratische Symbole dargestellt. Alle Symbole (Diagramme, Punkte und Quadrate) sind gem\u00E4\u00DF des erreichten Qualit\u00E4tsstatus gef\u00E4rbt. Historische Daten werden in einem Pop-Up Fenster dargestellt, welches mit einem Klick auf einen Messpunkt f\u00FCr Badegew\u00E4sserqualit\u00E4t ge\u00F6ffnet werden kann. Beurteilungen werden auf Grundlage der Direktive 2006/7/EG (Klassifikation nach Kategorien Ausgezeichnet, Gut, Ausreichend...) und auf Grundlage der Direktive 76/160/EWG (Klassifikation nach Kategorien CG, CI, NC...) vorgenommen. \u00DCberwachungskriterien wie das Entnehmen einer Vorsaisonsprobe, einem Minimum von vier Proben pro Saison sowie mindestens einer Probe pro Monat m\u00FCssen von allen Badegew\u00E4ssern erf\u00FCllt werden. Wenn diese Regeln befolgt werden, wird das Gew\u00E4sser als 'ausreichend beprobt' bezeichnet. Falls mindestens ein \u00DCberwachungskriterium nicht erf\u00FCllt worden ist, wird das Wasser als 'unzureichend beprobt' bezeichnet. In solchen F\u00E4llen kann die Badegew\u00E4sserqualit\u00E4t immer noch erhoben werden, wenn mindestens vier Proben pro Badesaison (drei Proben, falls die Badesaison nicht l\u00E4nger als acht Wochen andauert oder die Region speziellen geographischen Gegebenheiten ausgesetzt ist) verf\u00FCgbar sind und ann\u00E4hernd gleichverteilt \u00FCber die Saison entnommen worden sind. Die Badegew\u00E4sserqualit\u00E4t kann erhoben werden, wenn Daten von vier aufeinanderfolgenden Badesaisons verf\u00FCgbar sind. Badegew\u00E4sser werden nach einer der Badegew\u00E4sserqualit\u00E4tsklassen klassifiziert (Ausgezeichnet, Gut, Ausreichend oder Mangelhaft). Falls Datens\u00E4tze \u00FCber iEnterokokken sowie E.coli noch nicht f\u00FCr vier aufeinanderfolgende Badesaisons verf\u00FCgbar sind, so wird die Badegew\u00E4sserqualit\u00E4t auf Grundlage der Daten des aktuellen Jahres ermittelt. In diesem Fall wird die Badegew\u00E4sserqualit\u00E4t mit Hilfe von \u00DCbergangsregelungen ermittelt. Badegew\u00E4sser werden nach folgenden Qualtit\u00E4tskategorien klassifiziert: CG, CI, NC.

", + layers: { + title: "Badegew\u00E4sserqualit\u00E4t" + } + }, + regions: { + title: "Biogeographische Regionen", + description: "Der Biogeographische Reogionen-Datensatz beinhaltet die offiziellen Abgrenzungen, welche Einsatz in der Flora-Fauna-Habitat-Richtlinie (92/43/EWG) sowie im EMERALD Network, welches im Rahmen der Konvention zur Erhaltung wild lebender Pflanzen und Tiere und ihrer Lebensr\u00E4ume (Berner Abkommen) entstand, finden.", + layers: { + 0: "EU27 Biogeographische Regionen 2011", + 1: "EU27 Biogeographische Regionen 2008", + 2: "EU27 Biogeographische Regionen 2005", + 3: "EU27 Biogeographische Regionen 2011 Grenzen" + } + }, + natura2000: { + title: "Natura 2000 Schutzgebiete", + description: "Natura 2000 ist das Hauptinstrument der Europ\u00E4ischen Union zum Bewahren der Biodiversit\u00E4t. Es ist ein \u00F6kologisches Netzwerk von gesch\u00FCtzten Regionen und wurde zum Schutz von seltenen Arten und Habitaten ins Leben gerufen. Natura 2000 basiert auf der Vogelschutzrichtlinie von 1979 sowie auf der FFH-Richtlinie von 1992. Es beinhaltet Schutzma\u00DFnahmen f\u00FCr viele \u00D6kosysteme und sichert die Gesundheit und Robustheit von Europas Umwelt und Natur.", + layers: { + 1: "Fl\u00E4chen nach der FFH-Richtlinie", + 2: "Ma\u00DFstab kleiner als 1:10.000.000", + 3: "Ma\u00DFstab zwischen 1:100.000 und 1:10.000.000", + 4: "Ma\u00DFstab gr\u00F6\u00DFer als 1:100.000", + 5: "Vogelschutzgebiete", + 6: "Ma\u00DFstab kleiner als 1:10,000,000", + 7: "Ma\u00DFstab zwischen 1:100,000 und 1:10,000,000", + 8: "Ma\u00DFstab gr\u00F6\u00DFer als 1:100,000" + } + } + } + }, + resultcenter: { + fields: { + title: "Titel" + } + }, + templates: { + templates: { + seasons: { + mapflow: { + title: "Karteninhalt" + } + } + } + }, + toolsets: { + whatdoyouwant: "Was m\u00f6chten Sie tun?", + redliningTools: "Zeichnen", + redliningToolsTooltip: "Zeichen- und Editier-Werkzeuge", + navigationTools: "Navigationswerkzeuge nutzen", + navigationToolsTooltip: "Werkzeuge zur Kartennavigation", + mapviewTools: "Kartenwerkzeuge", + mapviewToolsTooltip: "Kartenwerkzeuge" + }, + fields: { + id: "ID", + title: "Titel", + adapter: "Dienst", + type: "Typ" + }, + intro: { + familiarise: "Diese Einf\u00fchrung dient dazu Sie mit den Elementen und Funktionalit\u00e4ten von map.apps vertraut zu machen.", + mapview: "Mit diesen Tasten kontrollieren Sie die Kartenansicht.", + basemap: "Wechseln Sie hier die Hintergrundkarte.", + theme: "Hier k\u00f6nnen Sie das aktuelle Farbschema wechseln.", + language: "Eine andere Sprache k\u00f6nnen Sie hier ausw\u00e4hlen.", + functions: "Hier finden Sie weitere Funktionen.", + mapflow: "W\u00e4hlen Sie hier Ihre Kartenthemen.", + mapflowTool: "Aktivieren Sie dazu einfach das gewünschte Kartenthema.", + legend: "Die Legende zeigt Ihnen die Symbolisierung der dargestellten Karteninhalte.", + omnisearch: "Geben Sie hier Ihren Suchbegriff ein und passen Sie die Suchmethode an.", + featureinfo: "Durch Klick in die Karte k\u00f6nnen Sie weitere Informationen abfragen.", + followme: "Hier k\u00f6nnen Sie mit anderen Nutzern zusammenarbeiten.", + gallery: "In der Gallerie können Sie andere Hintergrundkarten ausw\u00e4hlen.", + galleryTool: "Klicken Sie dazu einfach auf die gew\u00FCnschte Karte.", + routing: "Hier können Sie eine Route berechnen.", + okButton: "Ok", + closeButton: "Schliessen", + mapScaling: "mapScaling", + mapLoading: "mapLoading", + next: "Weiter", + back: "Zur\u00fcck", + skip: "\u00dcberspringen", + done: "Beenden", + closeTooltip: "Intro beenden" + } +}); \ No newline at end of file diff --git a/src/main/js/apps/sample/thumbnail.png b/src/main/js/apps/sample/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..00764d05e3271ace4799808607a14b39aef6a5ba GIT binary patch literal 1342 zcmeAS@N?(olHy`uVBq!ia0vp^DM0Ma!3-of9=p^Eq5^zET>lR>Ft7WqE70*)B|(0{ z3{1={Z0sDITmoVWiduRGW>)qN?*0J@1@#RR7OY&eVawKCd-oqWf8oLFH*ep)|M2nC zm#^Qx|N8ys@4qV>J*5~JSeQIr978JNw%&YO_e4d6?Zf6*t2(r`_&l9WUY$CyF7{jK z?8lZNwZq<7<=fxVqnJ4_^{Y!TJ)#_hi zb>{LbohP%me?PI>M(IIfjM(RLH6_`$AICD3R%*WvHhpw)f)<}k#?>QR54Sto3MEZ! zO7k+82(sn6#MIFLBFVt#g;vv4rk4E$ENd7ODtDM1@KQ`NP%$}t#9_0XyQ`>@(Xx{- z+L}Zr7PfWV>N?cH64JiH+3$h9h@77!_`= zkZoDF_-N3XxFbw;U0U)R#deDqieJxKbNsFAqa2Zt%Xtcg`b-YzC4uRPYuG&LeE}j%Zimb&&~3>z5kRm z)BS@9`xsxhw^gg?vf|;!nR-ca$NV_v?{gA7^taQet4%)K?Eg8IV7T=} zE{3GNMcbT`UwxVI*2yNnUixCD!e6mZRjd<_Bz;D>ozp{^|9Tuaq&NXqGf8| z*&Y{z%M&kGa-6rYay-Q3&20E6Y{HBf$C(`+n>oYhc~=H>gkLriaMg3Fs=E-OYck(V zQ8bgiZ&^-@RKbJCPM=>28RhSm+Qqc+TXC)8v`ax^hfeXe^!m8`V0Fpg_9ZSwdCe20 zoF_n1G3Skg$5HKPDyy3Ow7E53ZaI;rJgrP=&%QPLd-lv)^R)YR^^>!o&&%fP>($Ac z-7h&;p8tL#zkSN|OFlo(IK7zeuWohk@4p=9%3DwlL@pVR zM;-+MYX#5O|J(eY-^Kjz%jBN?X~OrLFW>jO-2C}nnd*DHuYb=5{P?&{XE)7O>#0S7Z5vv6!gmK0EE zqNj^vh{y4_Q*Lt|P~dT%{r~?o|yeZo#d(Qd#&4RP7C;IsMS+^?a4hIPVnW Vx+78-7=eys@O1TaS?83{1OSD-m#qK* literal 0 HcmV?d00001 diff --git a/src/main/js/bundles/dn_intro/css/intro.css b/src/main/js/bundles/dn_intro/css/intro.css new file mode 100644 index 0000000..e154b40 --- /dev/null +++ b/src/main/js/bundles/dn_intro/css/intro.css @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +.introWidget .startButton { + display: table; + margin: 0 auto; +} + +.dn_introjs_initializing .ctWindow, +.dn_introjs_initializing .ctWindow * { + opacity: 0; + visibility: hidden; +} diff --git a/src/main/js/bundles/dn_intro/img/sprite-green.png b/src/main/js/bundles/dn_intro/img/sprite-green.png new file mode 100644 index 0000000000000000000000000000000000000000..89fc8f2343c554babe0753c42c0d59ec3059f15a GIT binary patch literal 5405 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 literal 0 HcmV?d00001 diff --git a/src/main/js/bundles/dn_intro/main.js b/src/main/js/bundles/dn_intro/main.js new file mode 100644 index 0000000..82816d0 --- /dev/null +++ b/src/main/js/bundles/dn_intro/main.js @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +define(["dojo/i18n!./nls/bundle"], {}); diff --git a/src/main/js/bundles/dn_intro/manifest.json b/src/main/js/bundles/dn_intro/manifest.json new file mode 100644 index 0000000..1cfa055 --- /dev/null +++ b/src/main/js/bundles/dn_intro/manifest.json @@ -0,0 +1,149 @@ +{ + "Bundle-SymbolicName": "dn_intro", + "Bundle-Version": "1.0.0-SNAPSHOT", + "Bundle-Name": "${bundleName}", + "Bundle-Description": "${bundleDescription}", + "Bundle-Vendor": "con terra GmbH", + "Product-Name": "devnet-mapapps-intro", + "Bundle-StartLevel": 51, + "Bundle-DocURL": "https://github.com/conterra/mapapps-intro/blob/master/README.md", + "Config-Bundle-Location": "/config", + "Require-Bundle": [ + { + "name": "hopscotch" + } + ], + "CSS-Themes-Extension": [ + { + "name": "*", + "files": [ + "./css/intro.css" + ] + } + ], + "layout-widgets": [ + { + "role": "introWidget", + "window": { + "title": "${windowTitle}", + "marginBox": { + "w": 260, + "h": 140 + }, + "dockTool": "introTool", + "closable": true, + "minimizeOnClose": true, + "resizable": false + } + } + ], + "Components": [ + { + "name": "IntroStarter", + "references": [ + { + "name": "_tool", + "providing": "ct.tools.Tool", + "filter": "(id=introTool)" + }, + { + "name": "_userIntro", + "providing": "dn_intro.UserIntro" + }, + { + "name": "_startIntroOnStartupChecker", + "providing": "dn_introjs.StartIntroOnStartupChecker", + "cardinality": "0..1" + } + ] + }, + { + "name": "IntroWidgetFactory", + "provides": [ + "dijit.Widget", + "ct.framework.api.EventHandler" + ], + "properties": { + "widgetRole": "introWidget" + }, + "instanceFactory": true, + "immediate": true, + "references": [ + { + "name": "_userIntro", + "providing": "dn_intro.UserIntro" + }, + { + "name": "_tool", + "providing": "ct.tools.Tool", + "filter": "(id=introTool)" + } + ] + }, + { + "name": "${toolName}", + "impl": "ct/tools/Tool", + "provides": [ + "ct.tools.Tool" + ], + "propertiesConstructor": true, + "properties": { + "id": "introTool", + "toolRole": "toolset", + "title": "${toolName}", + "tooltip": "${toolTooltip}", + "togglable": true, + "iconClass": "icon-add-symbol" + } + }, + { + "name": "UserIntro", + "propertiesConstructor": true, + "immediate": true, + "provides": [ + "ct.framework.api.EventHandler", + "dn_intro.UserIntro" + ], + "properties": { + // start options + "startIntroOnStartup": true, + "enableCookie": true, + // intro options + "bubbleWidth": 280, + "bubblePadding": 15, + "smoothScroll": true, + "scrollDuration": 1000, + "scrollTopMargin": 200, + "showCloseButton": true, + "showPrevButton": true, + "showNextButton": true, + "arrowWidth": 20, + "skipIfNoElement": true, + "nextOnTargetClick": false, + "i18n": { + "nextBtn": "${intro.next}", + "prevBtn": "${intro.back}", + "doneBtn": "${intro.skip}", + "skipBtn": "${intro.done}", + "closeTooltip": "${intro.closeTooltip}" + }, + "steps": [] + }, + "references": [ + { + "name": "_eventService", + "providing": "ct.framework.api.EventService" + }, + { + "name": "_appCtx", + "providing": "ct.framework.api.ApplicationContext" + }, + { + "name": "_tools", + "providing": "ct.tools.Tool", + "cardinality": "0..n" + } + ] + } + ] +} diff --git a/src/main/js/bundles/dn_intro/module.js b/src/main/js/bundles/dn_intro/module.js new file mode 100644 index 0000000..93fb00f --- /dev/null +++ b/src/main/js/bundles/dn_intro/module.js @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +define([ + ".", + "./IntroStarter", + "./IntroWidget", + "./IntroWidgetFactory", + "./UserIntro" +], {}); \ No newline at end of file diff --git a/src/main/js/bundles/dn_intro/nls/bundle.js b/src/main/js/bundles/dn_intro/nls/bundle.js new file mode 100644 index 0000000..feda77c --- /dev/null +++ b/src/main/js/bundles/dn_intro/nls/bundle.js @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +define({ + root: { + bundleName: "Intro Bundle", + bundleDescription: "Intro Bundle", + windowTitle: "Welcome to map.apps!", + toolName: "Intro Tool", + toolTooltip: "Intro Tool", + start: "Start Intro", + hint: "Don't show the intro again on next start-up" + }, + "de": true +}); \ No newline at end of file diff --git a/src/main/js/bundles/dn_intro/nls/de/bundle.js b/src/main/js/bundles/dn_intro/nls/de/bundle.js new file mode 100644 index 0000000..eaee108 --- /dev/null +++ b/src/main/js/bundles/dn_intro/nls/de/bundle.js @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +define({ + bundleName: "Intro Bundle", + bundleDescription: "Intro Bundle", + windowTitle: "Willkommen in map.apps!", + toolName: "Intro Tool", + toolTooltip: "Intro Tool", + start: "Einf\u00fchrung starten", + hint: "Beim n\u00e4chsten Start nicht mehr anzeigen" +}); \ No newline at end of file diff --git a/src/main/js/bundles/dn_intro/templates/IntroWidget.html b/src/main/js/bundles/dn_intro/templates/IntroWidget.html new file mode 100644 index 0000000..605544d --- /dev/null +++ b/src/main/js/bundles/dn_intro/templates/IntroWidget.html @@ -0,0 +1,18 @@ +
+
+
+
+ +
+
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/src/main/js/bundles/hopscotch/LICENSE b/src/main/js/bundles/hopscotch/LICENSE new file mode 100644 index 0000000..f433b1a --- /dev/null +++ b/src/main/js/bundles/hopscotch/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/src/main/js/bundles/hopscotch/css/hopscotch.min.css b/src/main/js/bundles/hopscotch/css/hopscotch.min.css new file mode 100644 index 0000000..b525386 --- /dev/null +++ b/src/main/js/bundles/hopscotch/css/hopscotch.min.css @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/**! hopscotch - v0.2.8 +* +* Copyright 2017 LinkedIn Corp. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +.animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.fade-in-up{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInDown{0%{opacity:0;-moz-transform:translateY(-20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInDown{0%{opacity:0;-ms-transform:translateY(-20px)}100%{opacity:1;-ms-transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-20px)}100%{opacity:1;transform:translateY(0)}}.fade-in-down{-webkit-animation-name:fadeInDown;-moz-animation-name:fadeInDown;-o-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInRight{0%{opacity:0;-moz-transform:translateX(-20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInRight{0%{opacity:0;-o-transform:translateX(-20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;transform:translateX(-20px)}100%{opacity:1;transform:translateX(0)}}.fade-in-right{-webkit-animation-name:fadeInRight;-moz-animation-name:fadeInRight;-o-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInLeft{0%{opacity:0;-moz-transform:translateX(20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInLeft{0%{opacity:0;-o-transform:translateX(20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;transform:translateX(20px)}100%{opacity:1;transform:translateX(0)}}.fade-in-left{-webkit-animation-name:fadeInLeft;-moz-animation-name:fadeInLeft;-o-animation-name:fadeInLeft;animation-name:fadeInLeft}div.hopscotch-bubble .hopscotch-nav-button{font-weight:700;border-width:1px;border-style:solid;cursor:pointer;margin:0;overflow:visible;text-decoration:none!important;width:auto;padding:0 10px;height:26px;line-height:24px;font-size:12px;*zoom:1;white-space:nowrap;display:-moz-inline-stack;display:inline-block;*vertical-align:auto;zoom:1;*display:inline;vertical-align:middle;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.hopscotch-bubble .hopscotch-nav-button:hover{*zoom:1;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25);box-shadow:0 1px 3px rgba(0,0,0,.25)}div.hopscotch-bubble .hopscotch-nav-button:active{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.25) inset;-moz-box-shadow:0 1px 2px rgba(0,0,0,.25) inset;box-shadow:0 1px 2px rgba(0,0,0,.25) inset}div.hopscotch-bubble .hopscotch-nav-button.next{border-color:#1b5480;color:#fff;margin:0 0 0 10px;text-shadow:0 1px 1px rgba(0,0,0,.35);background-color:#287bbc;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#287bbc', endColorstr='#23639a');background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#287bbc),color-stop(100%,#23639a));background-image:-webkit-linear-gradient(to bottom,#287bbc 0,#23639a 100%);background-image:-moz-linear-gradient(to bottom,#287bbc 0,#23639a 100%);background-image:-o-linear-gradient(to bottom,#287bbc 0,#23639a 100%);background-image:linear-gradient(to bottom,#287bbc 0,#23639a 100%)}div.hopscotch-bubble .hopscotch-nav-button.next:hover{background-color:#2672ae;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#2672ae', endColorstr='#1e4f7e');background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#2672ae),color-stop(100%,#1e4f7e));background-image:-webkit-linear-gradient(to bottom,#2672ae 0,#1e4f7e 100%);background-image:-moz-linear-gradient(to bottom,#2672ae 0,#1e4f7e 100%);background-image:-o-linear-gradient(to bottom,#2672ae 0,#1e4f7e 100%);background-image:linear-gradient(to bottom,#2672ae 0,#1e4f7e 100%)}div.hopscotch-bubble .hopscotch-nav-button.prev{border-color:#a7a7a7;color:#444;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f2f2f2;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f2f2f2', endColorstr='#e9e9e9');background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f2f2f2),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(to bottom,#f2f2f2 0,#e9e9e9 100%);background-image:-moz-linear-gradient(to bottom,#f2f2f2 0,#e9e9e9 100%);background-image:-o-linear-gradient(to bottom,#f2f2f2 0,#e9e9e9 100%);background-image:linear-gradient(to bottom,#f2f2f2 0,#e9e9e9 100%)}div.hopscotch-bubble .hopscotch-nav-button.prev:hover{background-color:#e8e8e8;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE8E8E8', endColorstr='#FFA9A9A9');background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e8e8e8),color-stop(13%,#e3e3e3),color-stop(32%,#d7d7d7),color-stop(71%,#b9b9b9),color-stop(100%,#a9a9a9));background-image:-webkit-linear-gradient(to bottom,#e8e8e8 0,#e3e3e3 13%,#d7d7d7 32%,#b9b9b9 71%,#a9a9a9 100%);background-image:-moz-linear-gradient(to bottom,#e8e8e8 0,#e3e3e3 13%,#d7d7d7 32%,#b9b9b9 71%,#a9a9a9 100%);background-image:-o-linear-gradient(to bottom,#e8e8e8 0,#e3e3e3 13%,#d7d7d7 32%,#b9b9b9 71%,#a9a9a9 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#e3e3e3 13%,#d7d7d7 32%,#b9b9b9 71%,#a9a9a9 100%)}div.hopscotch-bubble{background-color:#fff;border:5px solid #000;border:5px solid rgba(0,0,0,.5);color:#333;font-family:Helvetica,Arial;font-size:13px;position:absolute;z-index:999999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box}div.hopscotch-bubble *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}div.hopscotch-bubble.animate{-moz-transition-property:top,left;-moz-transition-duration:1s;-moz-transition-timing-function:ease-in-out;-ms-transition-property:top,left;-ms-transition-duration:1s;-ms-transition-timing-function:ease-in-out;-o-transition-property:top,left;-o-transition-duration:1s;-o-transition-timing-function:ease-in-out;-webkit-transition-property:top,left;-webkit-transition-duration:1s;-webkit-transition-timing-function:ease-in-out;transition-property:top,left;transition-duration:1s;transition-timing-function:ease-in-out}div.hopscotch-bubble.invisible{opacity:0}div.hopscotch-bubble.hide,div.hopscotch-bubble .hide,div.hopscotch-bubble .hide-all{display:none}div.hopscotch-bubble h3{color:#000;font-family:Helvetica,Arial;font-size:16px;font-weight:700;line-height:19px;margin:-1px 15px 0 0;padding:0}div.hopscotch-bubble .hopscotch-bubble-container{padding:15px;position:relative;text-align:left;-webkit-font-smoothing:antialiased}div.hopscotch-bubble .hopscotch-content{font-family:Helvetica,Arial;font-weight:400;line-height:17px;margin:-5px 0 11px;padding-top:8px}div.hopscotch-bubble .hopscotch-bubble-content{margin:0 0 0 40px}div.hopscotch-bubble.no-number .hopscotch-bubble-content{margin:0}div.hopscotch-bubble .hopscotch-bubble-close{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;color:#000;background:transparent url(../img/sprite-green.png) -192px -92px no-repeat;display:block;padding:8px;position:absolute;text-decoration:none;text-indent:-9999px;width:8px;height:8px;top:0;right:0}div.hopscotch-bubble .hopscotch-bubble-close.hide,div.hopscotch-bubble .hopscotch-bubble-close.hide-all{display:none}div.hopscotch-bubble .hopscotch-bubble-number{background:transparent url(../img/sprite-green.png) 0 0 no-repeat;color:#fff;display:block;float:left;font-size:17px;font-weight:700;line-height:31px;padding:0 10px 0 0;text-align:center;width:30px;height:30px}div.hopscotch-bubble .hopscotch-bubble-arrow-container{position:absolute;width:34px;height:34px}div.hopscotch-bubble .hopscotch-bubble-arrow-container .hopscotch-bubble-arrow,div.hopscotch-bubble .hopscotch-bubble-arrow-container .hopscotch-bubble-arrow-border{width:0;height:0}div.hopscotch-bubble .hopscotch-bubble-arrow-container.up{top:-22px;left:10px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow{border-bottom:17px solid #fff;border-left:17px solid transparent;border-right:17px solid transparent;position:relative;top:-10px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow-border{border-bottom:17px solid #000;border-bottom:17px solid rgba(0,0,0,.5);border-left:17px solid transparent;border-right:17px solid transparent}div.hopscotch-bubble .hopscotch-bubble-arrow-container.down{bottom:-39px;left:10px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow{border-top:17px solid #fff;border-left:17px solid transparent;border-right:17px solid transparent;position:relative;top:-24px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow-border{border-top:17px solid #000;border-top:17px solid rgba(0,0,0,.5);border-left:17px solid transparent;border-right:17px solid transparent}div.hopscotch-bubble .hopscotch-bubble-arrow-container.left{top:10px;left:-22px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow{border-bottom:17px solid transparent;border-right:17px solid #fff;border-top:17px solid transparent;position:relative;left:7px;top:-34px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow-border{border-right:17px solid #000;border-right:17px solid rgba(0,0,0,.5);border-bottom:17px solid transparent;border-top:17px solid transparent}div.hopscotch-bubble .hopscotch-bubble-arrow-container.right{top:10px;right:-39px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow{border-bottom:17px solid transparent;border-left:17px solid #fff;border-top:17px solid transparent;position:relative;left:-7px;top:-34px}div.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow-border{border-left:17px solid #000;border-left:17px solid rgba(0,0,0,.5);border-bottom:17px solid transparent;border-top:17px solid transparent}div.hopscotch-bubble .hopscotch-actions{margin:10px 0 0;text-align:right} \ No newline at end of file diff --git a/src/main/js/bundles/hopscotch/img/sprite-green.png b/src/main/js/bundles/hopscotch/img/sprite-green.png new file mode 100644 index 0000000000000000000000000000000000000000..89fc8f2343c554babe0753c42c0d59ec3059f15a GIT binary patch literal 5405 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 literal 0 HcmV?d00001 diff --git a/src/main/js/bundles/hopscotch/js/hopscotch.min.js b/src/main/js/bundles/hopscotch/js/hopscotch.min.js new file mode 100644 index 0000000..31e8211 --- /dev/null +++ b/src/main/js/bundles/hopscotch/js/hopscotch.min.js @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2015 con terra GmbH (info@conterra.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/**! hopscotch - v0.2.8 +* +* Copyright 2017 LinkedIn Corp. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +!function(a,b){"use strict";if("function"==typeof define&&define.amd)define([],b);else if("object"==typeof exports)module.exports=b();else{var c="hopscotch";if(a[c])return;a[c]=b()}}(this,function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n="bubble_default",o=window.Sizzle||null,p="undefined",q=!1,r=typeof jQuery!==p,s=!1,t=!1,u=window.document,v=/^[a-zA-Z]+[a-zA-Z0-9_-]*$/,w={left:"right",right:"left"};try{typeof window.sessionStorage!==p&&(s=!0,sessionStorage.setItem("hopscotch.test.storage","ok"),sessionStorage.removeItem("hopscotch.test.storage"),t=!0)}catch(x){}return l={smoothScroll:!0,scrollDuration:1e3,scrollTopMargin:200,showCloseButton:!0,showPrevButton:!1,showNextButton:!0,bubbleWidth:280,bubblePadding:15,arrowWidth:20,skipIfNoElement:!0,isRtl:!1,cookieName:"hopscotch.tour.state"},Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)}),k=function(){q&&m.startTour()},h={addClass:function(a,b){var c,d,e,f;if(a.className){for(d=b.split(/\s+/),c=" "+a.className+" ",e=0,f=d.length;f>e;++e)c.indexOf(" "+d[e]+" ")<0&&(c+=d[e]+" ");a.className=c.replace(/^\s+|\s+$/g,"")}else a.className=b},removeClass:function(a,b){var c,d,e,f;for(d=b.split(/\s+/),c=" "+a.className+" ",e=0,f=d.length;f>e;++e)c=c.replace(" "+d[e]+" "," ");a.className=c.replace(/^\s+|\s+$/g,"")},hasClass:function(a,b){var c;return a.className?(c=" "+a.className+" ",-1!==c.indexOf(" "+b+" ")):!1},getPixelValue:function(a){var b=typeof a;return"number"===b?a:"string"===b?parseInt(a,10):0},valOrDefault:function(a,b){return typeof a!==p?a:b},invokeCallbackArrayHelper:function(a){var b;return Array.isArray(a)&&(b=j[a[0]],"function"==typeof b)?b.apply(this,a.slice(1)):void 0},invokeCallbackArray:function(a){var b,c;if(Array.isArray(a)){if("string"==typeof a[0])return h.invokeCallbackArrayHelper(a);for(b=0,c=a.length;c>b;++b)h.invokeCallback(a[b])}},invokeCallback:function(a){return"function"==typeof a?a():"string"==typeof a&&j[a]?j[a]():h.invokeCallbackArray(a)},invokeEventCallbacks:function(a,b){var c,d,e=i[a];if(b)return this.invokeCallback(b);for(c=0,d=e.length;d>c;++c)this.invokeCallback(e[c].cb)},getScrollTop:function(){var a;return a=typeof window.pageYOffset!==p?window.pageYOffset:u.documentElement.scrollTop},getScrollLeft:function(){var a;return a=typeof window.pageXOffset!==p?window.pageXOffset:u.documentElement.scrollLeft},getWindowHeight:function(){return window.innerHeight||u.documentElement.clientHeight},addEvtListener:function(a,b,c){return a?a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c):void 0},removeEvtListener:function(a,b,c){return a?a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent("on"+b,c):void 0},documentIsReady:function(){return"complete"===u.readyState},evtPreventDefault:function(a){a.preventDefault?a.preventDefault():event&&(event.returnValue=!1)},extend:function(a,b){var c;for(c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},getStepTargetHelper:function(a){var b=u.getElementById(a);if(b)return b;if(r)return b=jQuery(a),b.length?b[0]:null;if(o)return b=new o(a),b.length?b[0]:null;if(u.querySelector)try{return u.querySelector(a)}catch(c){}return/^#[a-zA-Z][\w-_:.]*$/.test(a)?u.getElementById(a.substring(1)):null},getStepTarget:function(a){var b;if(!a||!a.target)return null;if("string"==typeof a.target)return h.getStepTargetHelper(a.target);if(Array.isArray(a.target)){var c,d;for(c=0,d=a.target.length;d>c;c++)if("string"==typeof a.target[c]&&(b=h.getStepTargetHelper(a.target[c])))return b;return null}return a.target},getI18NString:function(a){return e[a]||d[a]},setState:function(a,b,c){var d,e="";if(s&&t)try{sessionStorage.setItem(a,b)}catch(f){t=!1,this.setState(a,b,c)}else s&&sessionStorage.removeItem(a),c&&(d=new Date,d.setTime(d.getTime()+24*c*60*60*1e3),e="; expires="+d.toGMTString()),u.cookie=a+"="+b+e+"; path=/"},getState:function(a){var b,c,d,e=a+"=",f=u.cookie.split(";");if(s&&(d=sessionStorage.getItem(a)))return d;for(b=0;b0,showNext:h.valOrDefault(a.showNextButton,this.opt.showNextButton),showCTA:h.valOrDefault(a.showCTAButton&&a.ctaLabel,!1),ctaLabel:a.ctaLabel,showClose:h.valOrDefault(this.opt.showCloseButton,!0)},step:{num:b,isLast:h.valOrDefault(o,!1),title:a.title||"",content:a.content||"",isRtl:a.isRtl,placement:a.placement,padding:h.valOrDefault(a.padding,this.opt.bubblePadding),width:h.getPixelValue(a.width)||this.opt.bubbleWidth,customData:a.customData||{}},tour:{isTour:this.opt.isTourBubble,numSteps:j,unsafe:h.valOrDefault(g,!1),customData:e||{}}},"function"==typeof d)r.innerHTML=d(q);else if("string"==typeof d){if(!m.templates||"function"!=typeof m.templates[d])throw new Error('Bubble rendering failed - template "'+d+'" is not a function.');r.innerHTML=m.templates[d](q)}else if(f)r.innerHTML=f(q);else{if(!m.templates||"function"!=typeof m.templates[n])throw new Error('Bubble rendering failed - template "'+n+'" is not a function.');r.innerHTML=m.templates[n](q)}for(children=r.children,numChildren=children.length,p=0;pc;c++)b=e[c],a>b&&d++;return a-d},_getStepI18nNum:function(a){var b=h.getI18NString("stepNums");return b&&at||t>=s.steps.length?null:s.steps[t]},G=function(){z.nextStep()},H=function(a){var b,c,d,e,f,g,i=C(),j=i.element,k=h.getPixelValue(j.style.top),l=k+h.getPixelValue(j.offsetHeight),m=h.getStepTarget(F()),n=m.getBoundingClientRect(),o=n.top+h.getScrollTop(),q=n.bottom+h.getScrollTop(),s=o>k?k:o,t=l>q?l:q,v=h.getScrollTop(),w=v+h.getWindowHeight(),x=s-E("scrollTopMargin");s>=v&&(s<=v+E("scrollTopMargin")||w>=t)?a&&a():E("smoothScroll")?typeof YAHOO!==p&&typeof YAHOO.env!==p&&typeof YAHOO.env.ua!==p&&typeof YAHOO.util!==p&&typeof YAHOO.util.Scroll!==p?(b=YAHOO.env.ua.webkit?u.body:u.documentElement,d=YAHOO.util.Easing?YAHOO.util.Easing.easeOut:void 0,c=new YAHOO.util.Scroll(b,{scroll:{to:[0,x]}},E("scrollDuration")/1e3,d),c.onComplete.subscribe(a),c.animate()):r?jQuery("body, html").animate({scrollTop:x},E("scrollDuration"),a):(0>x&&(x=0),e=v>s?-1:1,f=Math.abs(v-x)/(E("scrollDuration")/10),(g=function(){var b=h.getScrollTop(),c=b+e*f;return e>0&&c>=x||0>e&&x>=c?(c=x,a&&a(),void window.scrollTo(0,c)):(window.scrollTo(0,c),h.getScrollTop()===b?void(a&&a()):void setTimeout(g,10))})()):(window.scrollTo(0,x),a&&a())},I=function(a,b){var c,d,e;t+a>=0&&t+a0?d.multipage:t>0&&s.steps[t-1].multipage,f=function(c){var f;if(-1===c)return this.endTour(!0);if(a&&(f=b>0?h.invokeEventCallbacks("next",d.onNext):h.invokeEventCallbacks("prev",d.onPrev)),c===t){if(e)return void N();f=h.valOrDefault(f,!0),f?this.showStep(c):this.endTour(!1)}},!e&&E("skipIfNoElement"))I(b,function(a){f.call(i,a)});else if(t+b>=0&&t+b2&&(B=d[2].split(",")),x=parseInt(x,10)),this},L=function(a,b,c){var d,e;if(t=a||0,A=b||{},d=F(),e=h.getStepTarget(d))return void c(t);if(!e){if(h.invokeEventCallbacks("error"),A[t]=!0,E("skipIfNoElement"))return void I(1,c);t=-1,c(t)}},M=function(a){function b(){d.show(),h.invokeEventCallbacks("show",c.onShow)}var c=s.steps[a],d=C(),e=h.getStepTarget(c);t!==a&&F().nextOnTargetClick&&h.removeEvtListener(h.getStepTarget(F()),"click",G),t=a,d.hide(!1),d.render(c,a,function(a){a?H(b):b(),c.nextOnTargetClick&&h.addEvtListener(e,"click",G)}),N()},N=function(){var a=s.id+":"+t,b=m.getSkippedStepsIndexes();b&&b.length>0&&(a+=":"+b.join(",")),h.setState(E("cookieName"),a,1)},O=function(a){a&&this.configure(a)};this.getCalloutManager=function(){return typeof k===p&&(k=new c),k},this.startTour=function(a,b){var c,d,e={},f=this;if(!s){if(!a)throw new Error("Tour data is required for startTour.");if(!a.id||!v.test(a.id))throw new Error("Tour ID is using an invalid format. Use alphanumeric, underscores, and/or hyphens only. First character must be a letter.");s=a,K.call(this,a)}if(typeof b!==p){if(b>=s.steps.length)throw new Error("Specified step number out of bounds.");d=b}if(!h.documentIsReady())return q=!0,this;if("undefined"==typeof d&&s.id===w&&typeof x!==p){if(d=x,B.length>0)for(var g=0,i=B.length;i>g;g++)e[B[g]]=!0}else d||(d=0);return L(d,e,function(a){var b=-1!==a&&h.getStepTarget(s.steps[a]);return b?(h.invokeEventCallbacks("start"),c=C(),c.hide(!1),f.isActive=!0,void(h.getStepTarget(F())?f.showStep(a):(h.invokeEventCallbacks("error"),E("skipIfNoElement")&&f.nextStep(!1)))):void f.endTour(!1,!1)}),this},this.showStep=function(a){var b=s.steps[a],c=t;return h.getStepTarget(b)?(b.delay?setTimeout(function(){M(a)},b.delay):M(a),this):(t=a,h.invokeEventCallbacks("error"),void(t=c))},this.prevStep=function(a){return J.call(this,a,-1),this},this.nextStep=function(a){return J.call(this,a,1),this},this.endTour=function(a,b){var c,d=C();return a=h.valOrDefault(a,!0),b=h.valOrDefault(b,!0),s&&(c=F(),c&&c.nextOnTargetClick&&h.removeEvtListener(h.getStepTarget(c),"click",G)),t=0,x=void 0,d.hide(),a&&h.clearState(E("cookieName")),this.isActive&&(this.isActive=!1,s&&b&&h.invokeEventCallbacks("end")),this.removeCallbacks(null,!0),this.resetDefaultOptions(),D(),s=null,this},this.getCurrTour=function(){return s},this.getCurrTarget=function(){return h.getStepTarget(F())},this.getCurrStepNum=function(){return t},this.getSkippedStepsIndexes=function(){var a,b=[];for(a in A)b.push(a);return b},this.refreshBubblePosition=function(){var a=F();return a&&C().setPosition(a),this.getCalloutManager().refreshCalloutPositions(),this},this.listen=function(a,b,c){return a&&i[a].push({cb:b,fromTour:c}),this},this.unlisten=function(a,b){var c,d,e=i[a];for(c=0,d=e.length;d>c;++c)e[c].cb===b&&e.splice(c,1);return this},this.removeCallbacks=function(a,b){var c,d,e,f;for(f in i)if(!a||a===f)if(b)for(c=i[f],d=0,e=c.length;e>d;++d)c[d].fromTour&&(c.splice(d--,1),--e);else i[f]=[];return this},this.registerHelper=function(a,b){"string"==typeof a&&"function"==typeof b&&(j[a]=b)},this.unregisterHelper=function(a){j[a]=null},this.invokeHelper=function(a){var b,c,d=[];for(b=1,c=arguments.length;c>b;++b)d.push(arguments[b]);j[a]&&j[a].call(null,d)},this.setCookieName=function(a){return o.cookieName=a,this},this.resetDefaultOptions=function(){return o={},this},this.resetDefaultI18N=function(){return e={},this},this.getState=function(){return h.getState(E("cookieName"))},y=function(a,b){var c,d,f,g,i=["next","prev","start","end","show","error","close"];for(o||this.resetDefaultOptions(),h.extend(o,a),a&&h.extend(e,a.i18n),f=0,g=i.length;g>f;++f)d="on"+i[f].charAt(0).toUpperCase()+i[f].substring(1),a[d]&&this.listen(i[f],a[d],b);return c=C(!0),this},this.configure=function(a){return y.call(this,a,!1)},this.setRenderer=function(a){var b=typeof a;return"string"===b?(n=a,f=void 0):"function"===b&&(f=a),this},this.setEscaper=function(a){return"function"==typeof a&&(g=a),this},O.call(this,a)},m=new a,function(){var a={};a.escape=function(a){return g?g(a):null==a?"":(""+a).replace(new RegExp("[&<>\"']","g"),function(a){return"&"==a?"&":"<"==a?"<":">"==a?">":'"'==a?""":"'"==a?"'":void 0})},this.templates=this.templates||{},this.templates.bubble_default=function(b){function c(b,c){return c?a.escape(b):b}var d,e="";a.escape,Array.prototype.join;e+="\n";var f=b.i18n,g=b.buttons,h=b.step,i=b.tour;return e+='\n
\n ',i.isTour&&(e+=''+(null==(d=f.stepNum)?"":d)+""),e+='\n
\n ',""!==h.title&&(e+='

'+(null==(d=c(h.title,i.unsafe))?"":d)+"

"),e+="\n ",""!==h.content&&(e+='
'+(null==(d=c(h.content,i.unsafe))?"":d)+"
"),e+='\n
\n
\n ',g.showPrev&&(e+='"),e+="\n ",g.showCTA&&(e+='"),e+="\n ",g.showNext&&(e+='"),e+="\n
\n ",g.showClose&&(e+='"),e+='\n
\n
\n
\n
\n
\n'}}.call(m),m}); \ No newline at end of file diff --git a/src/main/js/bundles/hopscotch/package.json b/src/main/js/bundles/hopscotch/package.json new file mode 100644 index 0000000..e2a2c2a --- /dev/null +++ b/src/main/js/bundles/hopscotch/package.json @@ -0,0 +1,52 @@ +{ + "name": "hopscotch", + "version": "0.2.8", + "description": "A framework to make it easy for developers to add product tours to their pages.", + "main": "js/hopscotch.min.js", + "directories": { + "test": "test" + }, + "i18n": [], + "scripts": { + "test": "grunt test" + }, + "CSS-Themes-Extension": [ + { + "name": "*", + "files": [ + "./css/hopscotch.min.css" + ] + } + ], + "repository": { + "type": "git", + "url": "git://github.com/linkedin/hopscotch.git" + }, + "author": { + "name": "Hopscotch's community of authors and contributors", + "url": "https://github.com/linkedin/hopscotch/graphs/contributors" + }, + "license": "Apache-2.0", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/linkedin/hopscotch/issues" + }, + "devDependencies": { + "grunt": "~0.4.1", + "grunt-bump": "~0.0.13", + "grunt-contrib-clean": "~0.5.0", + "grunt-contrib-compress": "~1.4.1", + "grunt-contrib-connect": "^0.9.0", + "grunt-contrib-copy": "~0.5.0", + "grunt-contrib-jasmine": "^0.9.2", + "grunt-contrib-jshint": "~0.6.0", + "grunt-contrib-jst": "~0.6.0", + "grunt-contrib-less": "~0.9.0", + "grunt-contrib-uglify": "~0.2.2", + "grunt-contrib-watch": "~0.5.1", + "grunt-include-replace": "~1.2.0", + "grunt-shell": "~0.3.1", + "grunt-template-jasmine-istanbul": "^0.3.0", + "jquery": "~2.1.0" + } +} diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 0000000..bc7fd23 --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,28 @@ +# Global configuration properties +# These properties are used inside the test jetty server +# and can be used to document required global properties + +# url to the remote map.apps instance +mapapps.remote.base=${mapapps.remote.base} +# defines runtime version for the sample project. Defaults to map.apps 3.x +# to develope mapapps 4.x apps, change this property +apprt.version=${apprt.version} +# the init file to bootstrap map.apps +client.config.initjs=${client.config.initjs} +#local (embedded) js registry root url +jsregistry.root.url=${applicationURL.noscheme}/resources/jsregistry/root +# This is used to filter a default app name in the *.html files +default.app.name=${default.app.name} + +# the following is used by the ProxyServlet to read the allowed url which can be forwared by this application +# For ex. (secured server): http://myserver.mycompany.com/arcgis/rest/services,ayn2C2iPvqjeqWoXwV6rjmr43kyo23mhIPnXz2CEiMA6rVu0xR0St8gKsd0olv8a; +# For ex. (non-secured server): http://sampleserver1.arcgisonline.com/arcgis/rest/services; +# [,];\ or +# [,,];\ (username/password currently not encrypted) +proxy.allowedServerUrls=${proxy.allowedServerUrls} + +# the following is support for proxied ssl connections +# if you configure '*' then you trust all ssl server certificates +# you can also confige the dns of the certificate subjects to trust them, separated by '|' +# or leave the configuration empty, then the normal java mechanism is used. +proxy.allowedSSLDNs=${proxy.allowedSSLDNs} \ No newline at end of file diff --git a/src/test/webapp/WEB-INF/web.xml b/src/test/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..29ca804 --- /dev/null +++ b/src/test/webapp/WEB-INF/web.xml @@ -0,0 +1,22 @@ + + + + map.apps remote sample + + + + + ProxyServlet + ProxyServlet + de.conterra.mapapps.proxy.ProxyServlet + 0 + + + ProxyServlet + /proxy + + + \ No newline at end of file diff --git a/src/test/webapp/index.html b/src/test/webapp/index.html new file mode 100644 index 0000000..a77d3a6 --- /dev/null +++ b/src/test/webapp/index.html @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + map.apps remote sample + + + + + + + + + + + + + + +
+
+
+
+

Start

+

 

+
+
+
+
+
+ + \ No newline at end of file diff --git a/src/test/webapp/js/tests/runTests.html b/src/test/webapp/js/tests/runTests.html new file mode 100644 index 0000000..3814c4c --- /dev/null +++ b/src/test/webapp/js/tests/runTests.html @@ -0,0 +1,10 @@ + + + + Intern Tests + + + + Redirecting to Intern runner. + + \ No newline at end of file diff --git a/src/test/webapp/js/tests/test-init.js b/src/test/webapp/js/tests/test-init.js new file mode 100644 index 0000000..60de79c --- /dev/null +++ b/src/test/webapp/js/tests/test-init.js @@ -0,0 +1,16 @@ +testConfig({ + jsregistry: [{ + //root: "url to registry..", + packages: [ + // register all self hosted packages + "*" + ] + }, + { + root: "@@mapapps.remote.base@@/resources/jsregistry/root", + packages: [ + "apprt@3.x" + ] + } + ] +}); \ No newline at end of file