486 Commits
Author SHA1 Message Date
Willem Dantuma 12312c0e8b Delete fontawesome 5.15.2
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-06 13:59:03 +01:00
Willem Dantuma d365b1d5b5 Add fontawesome 6.2.1 2023-02-06 13:55:37 +01:00
Willem Dantuma 846eee1ae5 AW-4605
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-02 09:42:57 +01:00
Willem Dantuma 2588732b91 Fix menu
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-31 17:30:38 +01:00
Willem Dantuma de0089fbe8 revert width
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-31 16:04:16 +01:00
Willem Dantuma d4e7756176 AW-4583
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-31 15:48:27 +01:00
peter 72c34310df AW-4583 Maps thumbnail size
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-30 08:00:53 +01:00
francisco 0c0d0989b2 replace gray(' for $gray-
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-26 10:34:18 +01:00
Willem Dantuma a86ab9f3c7 remove peer dep
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-25 10:24:08 +01:00
Willem Dantuma a2264a28e0 Fix dependency
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-25 10:16:08 +01:00
Willem Dantuma a4c34fe21c Fix colors
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-24 16:39:42 +01:00
Willem Dantuma 9196358842 Fix input groups 2023-01-24 16:28:38 +01:00
Willem Dantuma f4cbb1ff68 Fix 2023-01-24 16:21:04 +01:00
Willem Dantuma f008e97e39 Fix start end naming 2023-01-24 16:16:20 +01:00
Willem Dantuma 61d2fc8d54 Add container
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-24 15:44:38 +01:00
Willem Dantuma 80760a8fdd Fix sass parameters 2023-01-24 15:26:02 +01:00
Willem Dantuma a7f53a841b Kick version 2023-01-24 15:17:08 +01:00
Willem Dantuma 9d64fce22c Npm auit fix 2023-01-24 15:16:51 +01:00
peter e39c0b055d bootstrap 4.6 -> 5.2 (ng-14)
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-01-24 14:35:00 +01:00
Willem Dantuma 237fd27489 Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-23 15:24:24 +01:00
Willem Dantuma 296385ab33 Kick version
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-12-21 07:48:24 +01:00
Willem Dantuma 402bbcea0d AW-4406 2022-12-21 07:47:43 +01:00
Willem Dantuma 161717bc7b AW-4406
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-12-21 07:45:00 +01:00
Willem Dantuma 0b8dbf4e2e Some fixes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-10-26 21:31:39 +02:00
mark 2acf13cbac datafilter can now be used with querystate
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-10-24 13:23:33 +02:00
Willem Dantuma a408f4bffa Some fixes
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-09-28 21:32:15 +02:00
Willem Dantuma ac5bd7d635 Do not handle map event in 3D mode 2022-09-28 21:17:57 +02:00
Willem Dantuma cf84f8c93d Upgrade to olcs 2022-09-28 21:17:21 +02:00
Willem Dantuma 4872dee094 Upgrade cesium to 1.97 2022-09-28 21:16:21 +02:00
Willem Dantuma b76a933dba Upgrade to ol 6.14.1 2022-09-28 21:10:12 +02:00
Willem Dantuma 41c7ab15f3 Do not handle map event in 3D mode
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-28 21:03:21 +02:00
Willem Dantuma a9185b86af Upgrade to olcs 2022-09-28 19:20:45 +02:00
Willem Dantuma eb1b8f18eb Upgrade cesium to 1.97 2022-09-28 18:16:11 +02:00
Willem Dantuma bce562fb8e Upgrade to ol 6.14.1
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-28 17:32:09 +02:00
Willem Dantuma 2825ce4ccc Kick version
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-09-28 12:04:15 +02:00
Willem Dantuma 5d83293540 Fix slide for temporal layer 2022-09-28 12:03:44 +02:00
Willem Dantuma b652555f37 Update packages
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-28 12:02:44 +02:00
Willem Dantuma 3db09c1e2a Fix slide for temporal layer 2022-09-28 12:01:59 +02:00
Willem Dantuma 0d40141b2d Kick version
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-09-27 21:59:35 +02:00
Willem Dantuma 33e7a2310d ingnore .angular 2022-09-27 21:42:10 +02:00
Willem Dantuma ddb112b989 implement layer compare slider 2022-09-27 21:39:02 +02:00
Willem Dantuma 7502bc54d1 implement layer compare slider
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-27 19:58:08 +02:00
Willem Dantuma 15cc2c33f1 Angular cli changes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-27 11:42:42 +02:00
Willem Dantuma eb0e928c6f Make peer dependencies more permissive
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-31 11:04:49 +02:00
Willem Dantuma 5631d23355 Fix version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-31 10:01:15 +02:00
Willem Dantuma 0470cb0fa1 Update packages
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-31 09:53:57 +02:00
Willem Dantuma 1656b465ee Update libs
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2022-08-31 09:26:26 +02:00
Willem Dantuma a558b23a98 Fix peer dependency
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-29 21:44:55 +02:00
Willem Dantuma c569076c5d Fix peer dependency
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-29 21:28:13 +02:00
Willem Dantuma be2516a3b8 Revert "Try to fix localization error"
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 7f62a74877.
2022-08-29 18:43:01 +02:00
Willem Dantuma 7f62a74877 Try to fix localization error
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-29 17:43:07 +02:00
Willem Dantuma 3b296a1fba Merge branch 'feature/Upgrade_to_angular_14' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-19 21:56:17 +02:00
Willem Dantuma 28c9cd353d Fix webpack not found 2022-08-19 21:47:51 +02:00
Willem Dantuma 83a5c1a7d2 Some more fixes 2022-08-19 21:17:13 +02:00
Willem Dantuma a767502d66 update peer dependencies 2022-08-19 20:59:51 +02:00
Willem Dantuma 897ac3dab5 Update to angular 13 2022-08-19 20:39:00 +02:00
Willem Dantuma 2f165b4b48 npm audit fix 2022-08-19 20:27:38 +02:00
Willem Dantuma 3994818b6a Update @ng-bootstrap/ng-bootstrap 2022-08-19 20:26:10 +02:00
mark 7b2dbc1777 AW-3912 fix build
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-07-04 16:23:08 +02:00
mark 8c59976de6 AW-3912 added startDate and endDate to the item child list method
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2022-07-04 16:19:00 +02:00
mark d551a2cf7a upped version (to fix some faulty builds)
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-06-20 17:11:58 +02:00
mark a3a09507a6 upped version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-06-06 12:52:56 +02:00
mark 9bbde64147 AW-3836 fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-06-06 12:48:52 +02:00
mark 0c4259d72e AW-3836 fixed tags component
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2022-06-06 12:45:23 +02:00
Willem Dantuma 57e0a37c78 add ifPackageListExists to packageservice
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-03-16 15:56:23 +01:00
Willem Dantuma 713af307cd Add fmPackageExists directive
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-03-16 14:20:28 +01:00
Willem Dantuma 521b882798 Add gradient service 2022-03-16 14:20:08 +01:00
Willem Dantuma b850f5d621 Add gradient service 2022-03-16 14:19:51 +01:00
Willem Dantuma d8730e77ad AW-3573
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-02-23 11:57:36 +01:00
peter e62c185f35 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-21 09:15:14 +01:00
peter f81b16b966 Remove debugger 2022-02-21 09:15:07 +01:00
mark b9ee39399c changed getFeatures index parameter use to indexed ?? true
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-05 14:00:25 +01:00
mark be9b01dbab fixed indexed.toString().....................
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-04 20:17:39 +01:00
mark feacfd8bb3 fix indexed in getFeatures in item.service.ts
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-04 19:42:09 +01:00
mark 2f0362e730 Add indexed to getFeatures in item.service.ts
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-04 18:27:18 +01:00
Willem Dantuma f4ba89920c AW-3096 Zoeken op locatie (geocoding) mogelijk maken
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-04 16:21:26 +01:00
Willem Dantuma f5b312a888 AW-3489 Initialen ( avatar) missen bij profiel
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-03 18:09:32 +01:00
Willem Dantuma 97142bc986 AW-3488 Make startpage configurable
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-03 12:00:09 +01:00
Willem Dantuma 67335a0a4a Kick version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-02-02 19:10:32 +01:00
Willem Dantuma b752b377da AW-3477 fmHasPackage check werkt niet correct voor vandaag
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2022-02-02 18:56:58 +01:00
Willem Dantuma 74c77bae5e Fix build
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-31 21:51:37 +01:00
Willem Dantuma b22278a75f Kick version
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-31 21:44:41 +01:00
Willem Dantuma 37854d43fc Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2022-01-31 21:38:23 +01:00
Willem Dantuma 2161951cbb Merge branch 'develop'
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
# Conflicts:
#	package.json
#	projects/common-map/src/fm-map/common-map.module.ts
#	projects/common/src/fm/reducers/app-common.reducer.ts
2022-01-31 21:04:52 +01:00
francisco 66e492d2f8 versionnumber
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-28 16:20:17 +01:00
francisco e944064053 cherrypick ac0fe962a0: aw3299 hide questionmark on mobile
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2022-01-28 16:16:26 +01:00
mark a1a4fc14ab AW-3441 better test to find real problem. fixed the getValidPackages function.
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 23:20:20 +01:00
mark 122563a0bd AW-3441 another fix...
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 22:35:47 +01:00
mark 33f322424e AW-3441 fix oopsie
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 17:25:12 +01:00
mark 519b81d1fd AW-3441 fix package validation
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 17:07:24 +01:00
mark b7c80dfdd8 AW-3441 add valid packages selector
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 14:07:02 +01:00
Willem Dantuma 77d2433d63 Export GeometryThumbnailComponent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 11:40:16 +01:00
Willem Dantuma 9bc78dc302 Export GeometryThumbnailComponent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 10:11:51 +01:00
francisco ac0fe962a0 aw3299: hide help on mobile
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-20 08:39:18 +01:00
mark d89670f669 Merge branch 'hotfix/AW-3412-B'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-19 14:38:49 +01:00
mark d025e2e3f6 export GeometryThumbnailComponent 2022-01-19 14:36:34 +01:00
Willem Dantuma c22cede59b Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-19 13:47:13 +01:00
Willem Dantuma 48574dc0b0 Merge tag 'AW-3412' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
# Conflicts:
#	package.json
#	projects/common-map/src/fm-map/components/feature-thumbnail/feature-thumbnail.component.ts
#	src/configuration.json
2022-01-19 13:29:44 +01:00
Willem Dantuma 57407d83d3 Merge branch 'hotfix/AW-3412'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-19 13:24:14 +01:00
Willem Dantuma f83549b5af Update version 2022-01-19 13:22:55 +01:00
Willem Dantuma 132556da81 AW-3412 2022-01-19 13:21:44 +01:00
Willem Dantuma c2350eec52 Fix configuration for local authentication 2022-01-19 11:56:30 +01:00
wilco aa1ad9f844 AW-3135
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-12-21 21:01:10 +01:00
Willem Dantuma c6d14e6c9c Export interface
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-12-02 11:23:36 +01:00
Willem Dantuma 8e4364bd08 bump version
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-12-02 11:16:43 +01:00
Willem Dantuma af3340ed70 Inject clicked feature in component
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-12-02 11:13:36 +01:00
Willem Dantuma cc4726e85c Inject clicked feature in component
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-12-02 11:13:03 +01:00
Willem Dantuma ff19d830a7 Fix version
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-11-26 12:06:17 +01:00
Willem Dantuma 29914cfb1b oops
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2021-11-26 12:04:17 +01:00
Willem Dantuma 7bca0a57c4 Fix build
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-11-26 12:02:01 +01:00
Willem Dantuma fdba357e9c Fix matching
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-11-26 11:58:11 +01:00
Willem Dantuma e28564c88a Fix matching
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-11-26 11:57:24 +01:00
Willem Dantuma 90c3fa25a4 Fix publish
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-11-25 11:35:27 +01:00
Willem Dantuma 3b8b812c55 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-11-25 11:15:34 +01:00
Willem Dantuma 025889b390 Merge branch 'feature/update_openlayers_to_6.8' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-11-25 10:53:55 +01:00
Willem Dantuma eabaa1db19 oauth2 fixes 2021-10-05 20:56:27 +02:00
Willem Dantuma ba541c4e08 Use local environment 2021-10-05 20:55:51 +02:00
Willem Dantuma b994bc51cd Add development configuration 2021-10-05 20:55:08 +02:00
Willem Dantuma 960275dd38 Fix localize polyfill 2021-10-05 16:59:04 +02:00
Willem Dantuma 5b7fef689a Update versions 2021-10-05 16:35:12 +02:00
Willem Dantuma 1c1315a580 More type fixes 2021-10-05 16:13:25 +02:00
Willem Dantuma 5d21d66589 More type fixes 2021-10-05 14:08:55 +02:00
Willem Dantuma 160eb10aba Refactoring types 2021-10-05 13:46:10 +02:00
Willem Dantuma 4ef077f8d7 Update to angular 12 2021-10-05 06:39:38 +02:00
Willem Dantuma df84a7c217 Update packages 2021-10-05 06:27:18 +02:00
Willem Dantuma b5d00f5619 Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-25 08:19:12 +02:00
Willem Dantuma 89a0fb13a5 AW-2757
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-19 15:25:22 +02:00
Willem Dantuma 2861ba220e Revert "Help menu invisible in release sep 2021."
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit a454f2306d.
2021-08-18 14:37:41 +02:00
Willem Dantuma 45e0d5e836 Revert "Hide help menu"
This reverts commit 4c1d4137ea.
2021-08-18 14:37:31 +02:00
Willem Dantuma 312611cdc1 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop 2021-08-18 14:34:53 +02:00
Willem Dantuma 54b8a3bf24 AW-1855 2021-08-18 14:34:45 +02:00
peter 4c1d4137ea Hide help menu
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-18 14:31:28 +02:00
peter a454f2306d Help menu invisible in release sep 2021.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-18 14:21:02 +02:00
Willem Dantuma 52a72b042c Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-17 19:41:20 +02:00
Willem Dantuma c0c9864b07 AW-2714
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-08-17 19:36:30 +02:00
Willem Dantuma e0f36b043f Oops
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-12 21:40:40 +02:00
Willem Dantuma b52bfd4f57 Fix icon
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-12 21:02:55 +02:00
Willem Dantuma 6ff3c0ec96 Fix device geometry update
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-12 17:13:40 +02:00
Willem Dantuma eb1157d608 Fix thumbnail editing, add blobtodataurl method
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-05 16:33:31 +02:00
Willem Dantuma 1daa8e257f make Observable
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-04 16:12:22 +02:00
Willem Dantuma 5db24cc63d Add geolocator service
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-04 16:01:41 +02:00
peter ff018d9db1 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-04 12:05:09 +02:00
peter 8c49965df8 Fix optional has package check/ 2021-08-04 12:05:02 +02:00
Willem Dantuma f880623337 Fix AW-2620
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-30 14:06:31 +02:00
Willem Dantuma 2da4f88683 Fix AW-2617
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 16:36:18 +02:00
Willem Dantuma bd125b6f72 Fix check
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 13:24:59 +02:00
Willem Dantuma 610408d17c Add optional replace parameter
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 12:52:26 +02:00
Willem Dantuma 52e3117771 Implement ItemDeleteEvent handling
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 08:21:25 +02:00
Willem Dantuma 1b000c6112 Fix initialization error
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-28 17:12:54 +02:00
Willem Dantuma 28e75d5a0d Replace @Effect() with createEffect
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 16:26:57 +02:00
Willem Dantuma 76c431b9c2 Use latest snapshot
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 09:31:14 +02:00
Willem Dantuma 122c49d516 Move the check here
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 09:16:58 +02:00
Willem Dantuma 5c549c5851 Use route parameters here also
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 08:51:56 +02:00
Willem Dantuma 3fcf80c1a0 Add override route parameters
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-26 21:53:55 +02:00
Willem Dantuma 519e5c9032 Make zoom-to padding configurable per route
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-21 11:17:15 +02:00
peter 9c19595597 Revert "Patch lib"
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit ea1b22ed41.
2021-06-23 13:52:52 +02:00
peter ea1b22ed41 Patch lib
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-06-23 13:18:46 +02:00
peter 8d3c098f4e Upgraded custom-webpack and typescript.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-16 09:15:53 +02:00
peter 22209cfaf6 Update bootstrap to angular 11 compatible version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-11 10:54:23 +02:00
peter 8b45e431a7 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-11 10:43:50 +02:00
peter 74c792b96a Update references 2021-06-11 10:43:38 +02:00
francisco d833f321d1 aw-1837 add language to user
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-11 08:40:13 +02:00
peter 0d9789d8c6 Version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-09 14:04:48 +02:00
peter 93513f9dc7 AW-2316 Angular upgrade 11 2021-06-09 14:00:21 +02:00
Willem Dantuma e465142be0 Increase minor
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 10:03:59 +02:00
Willem Dantuma 92173c9847 Increase patch level
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 10:02:41 +02:00
Willem Dantuma 05292f1e5d Depend on released versions
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 09:53:41 +02:00
Willem Dantuma e672e28795 Allow same version in master
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 09:47:17 +02:00
Willem Dantuma 4b7b639046 Remobve build number from version
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-06-03 09:42:59 +02:00
Willem Dantuma 34b067fd28 Add jenkins file for master
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-06-03 09:37:13 +02:00
Willem Dantuma fb9a046ff8 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 09:34:11 +02:00
Willem Dantuma c4934d799d release 1.0.0 2021-06-03 09:34:03 +02:00
wilco 469bc6f1c1 AW-2390
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-02 16:39:33 +02:00
wilco d140d4bd4c AW-2390
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-27 19:44:29 +02:00
peter 1ce259a152 Add %
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-26 16:34:04 +02:00
peter 00ae86ecf2 AW-2388
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-26 16:11:21 +02:00
peter 880eb26a99 getPercentage
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-26 14:59:03 +02:00
peter bcfa13de60 AW-2388 Fixed mixed decimal in histogram 2021-05-26 14:58:03 +02:00
Willem Dantuma 6f77df0f61 Fix AW-2361
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-25 22:12:32 +02:00
mark fbe0413c6a Merge branch 'feature/AW-2268' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-18 13:05:16 +02:00
mark 115f53e93c AW-2268 fix .fullscreen .control-container 2021-05-18 09:49:50 +02:00
mark ca40ca0927 renamed package guard and added it to public api 2021-05-17 14:23:44 +02:00
peter 29968a736c Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-06 14:05:49 +02:00
peter 077afcb0d7 Fix validToday 2021-05-06 14:05:43 +02:00
Willem Dantuma 6e79afd115 Logout on deleteuser event
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-05 18:56:53 +02:00
peter 4f9cdf1588 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-04 16:23:00 +02:00
peter fa69dee550 Fix expected selector /deep/ 2021-05-04 16:22:46 +02:00
Willem Dantuma 06e353ee94 Reverse /deep/
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-04 16:21:57 +02:00
peter 8d723477d3 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-05-04 11:28:49 +02:00
peter 771e388f0e AW-2081 Align avatar 2021-05-04 11:28:43 +02:00
Willem Dantuma 040b5b8c4d Cancel only not allready uploaded files
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-03 19:00:20 +02:00
peter 3504990708 Add ability to retrieve only items that are valid today.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-30 10:36:58 +02:00
peter 798ec8d1ca Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-29 14:06:41 +02:00
peter 8f5dd0969c casing 2021-04-29 14:06:35 +02:00
Willem Dantuma 861a8a48fc Add dataFilter to children/count
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-29 13:49:38 +02:00
peter 86a545d7e6 Add IUser.newsLetter
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-29 10:29:31 +02:00
Willem Dantuma 8a1c4b5e20 Only show prent namewhen of type ..cropfield
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-26 08:01:43 +02:00
peter b24e47e39b AW-2214 Fix refactored itemtype.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-23 10:54:52 +02:00
peter c0d8e6d615 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-23 10:50:50 +02:00
peter 7192f66420 AW-2211 Update *fmHasPackage directive 2021-04-23 10:50:45 +02:00
Willem Dantuma dcc24aa149 Fix setExtent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-19 08:43:20 +02:00
Willem Dantuma 0485c163ad Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-12 15:55:38 +02:00
Willem Dantuma 1380d7169a Fix trigger
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-04-12 15:52:42 +02:00
Willem Dantuma a6d3b208b0 Hide buttons when no routing to sink
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-12 15:10:29 +02:00
Willem Dantuma cbf805e1ff Fix novalue
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 20:29:27 +01:00
Willem Dantuma 8907dca091 Set color default to no value color
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 20:07:31 +01:00
Willem Dantuma fe1fddd211 Update layer
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 18:35:22 +01:00
Willem Dantuma fa146f2c6e Refactor fmMapIfZoomToShow
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 18:26:01 +01:00
Willem Dantuma c9fac05aa6 Refactor to fm-map-feature-thumbnail
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 12:00:04 +01:00
Willem Dantuma 75d8909997 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 11:29:08 +01:00
Willem Dantuma 36d9c98e47 Clear view
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-20 11:25:23 +01:00
Willem Dantuma e2255164fc Run npm audit fix 2021-03-20 11:09:26 +01:00
Willem Dantuma 4c5b77000f Update libs 2021-03-20 11:08:54 +01:00
Willem Dantuma 997ebb24a7 Implement then else for haspackage
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 11:06:04 +01:00
wilco 00346a963e Pfff
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-17 19:33:54 +01:00
wilco a42059627a Added level to get features call
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-16 21:30:20 +01:00
Willem Dantuma 5b710ce200 Refactor getcolor
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-15 16:26:05 +01:00
Willem Dantuma f8a0e1e167 Add SetUnreadNotifications action
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-08 08:45:13 +01:00
Willem Dantuma eb46b3496a Fix type check
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-06 14:29:01 +01:00
Willem Dantuma e8bbb74185 Fix temporal and initial loading
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-06 14:06:31 +01:00
Willem Dantuma 3d8ce7ee74 Fix null check
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 19:03:50 +01:00
Willem Dantuma aa308abbb0 Fix request canceling
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 18:41:09 +01:00
Willem Dantuma 9d5cd0fa88 Add layer values
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 17:19:30 +01:00
Willem Dantuma 5760c2b8ea oops
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 12:40:52 +01:00
Willem Dantuma 1e6c9e9363 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-05 12:39:41 +01:00
Willem Dantuma 8f06a56e52 Add ngx-clipboard
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-05 12:37:10 +01:00
Willem Dantuma 2f74f43c8e Add getLayerValue
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 11:10:39 +01:00
Willem Dantuma c093ffae50 run npm audit fix 2021-03-05 07:52:05 +01:00
Willem Dantuma c7da0866ef Fix mime type
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 17:21:54 +01:00
Willem Dantuma b000d5119a Return correct file
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 16:51:16 +01:00
peter 2dd10f04a3 Return selected file as well
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 15:36:01 +01:00
peter 4d62184e5b Revert "Return modal reference for client side handling."
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 8ad9d56b07.
2021-03-02 15:13:42 +01:00
peter 8ad9d56b07 Return modal reference for client side handling.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 14:48:49 +01:00
Willem Dantuma 2b1cb1ac8f Add save image parameter
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 13:15:16 +01:00
Willem Dantuma 08163f86bf Add more open options
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 12:20:53 +01:00
Willem Dantuma 33adb35923 Export image editor
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 09:35:39 +01:00
Willem Dantuma 855bd8fe2d Re add thumbnail component
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 08:16:16 +01:00
Willem Dantuma fad257c6e2 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 08:13:07 +01:00
Willem Dantuma e262f7c65d Merge branch 'feature/thumbnail_upload' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-02 08:10:10 +01:00
Willem Dantuma cabdeaa875 Reload image on change 2021-03-02 08:09:42 +01:00
Willem Dantuma 2f1c5210ea Save image 2021-03-01 22:03:18 +01:00
Willem Dantuma 47f3238edd Add no-image placeholder 2021-03-01 17:25:40 +01:00
Willem Dantuma 01488ae2e0 Remove background color 2021-03-01 17:01:57 +01:00
Willem Dantuma ae02dd0b53 Merge branch 'develop' into feature/thumbnail_upload 2021-03-01 16:57:15 +01:00
Willem Dantuma 7768387f58 Basic edit-image-modal 2021-03-01 16:56:48 +01:00
peter 3c0f220ee3 Span required instead of div
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-01 12:49:12 +01:00
peter 38e64a0713 Fix
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-01 12:38:16 +01:00
peter 0bb5406773 AW-1881
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-01 12:32:14 +01:00
peter 7c125f1771 AW-1881
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-27 14:47:16 +01:00
peter 3673e0b349 Fixes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-27 10:27:49 +01:00
peter ece6096064 AW-1881 Avatar
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-27 10:16:07 +01:00
Willem Dantuma dd71b49502 Merge branch 'develop' into feature/thumbnail_upload
# Conflicts:
#	package-lock.json
#	projects/common/src/fm/common.module.ts
2021-02-25 20:18:59 +01:00
Willem Dantuma a098f72b1a Start of thumbnail upload dialog 2021-02-25 19:57:09 +01:00
peter 535f6bd064 Add ngx avatar
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-25 17:32:58 +01:00
peter 74e7f41583 Added avatar
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-02-25 17:17:52 +01:00
peter b537239c96 AW-1881 Avatar based on first letters of firstname and lastname
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-18 16:09:25 +01:00
peter f9ba4fd5e2 Revert "Update version"
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 8326255ce9.
2021-02-17 12:30:54 +01:00
peter 8326255ce9 Update version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-17 12:27:13 +01:00
peter 3d60d0127b AW-1959 Fix?
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-16 17:23:15 +01:00
peter 697708710e Fix help-menu.component.ts
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-16 17:07:40 +01:00
peter 102d96ded9 AW-1959 Add global help-menu
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-16 16:49:23 +01:00
Willem Dantuma f802f41bbb Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-15 11:34:27 +01:00
Willem Dantuma d134240b8b Add fm-thumbnail component 2021-02-15 11:34:21 +01:00
francisco 3242058c4f refactor user api
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-15 11:03:24 +01:00
mark 3f6863845b renamed package guard and added it to public api
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-11 17:43:19 +01:00
Willem Dantuma 231fbf9ee8 Add test
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-11 11:49:28 +01:00
Willem Dantuma 142a1c9e58 Add notification menu
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-11 11:44:34 +01:00
mark 39993e75da added a package guard
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-05 12:51:43 +01:00
Willem Dantuma b7b168dffb Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-03 17:28:42 +01:00
Willem Dantuma fb9c11fce6 Some fixes update libs 2021-02-03 17:28:35 +01:00
francisco da562ca96d fix
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-03 09:13:08 +01:00
francisco 33d03c3d58 add searchable field to user
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-02-03 09:02:58 +01:00
Willem Dantuma 335078a10c Fix header
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 17:38:34 +01:00
Willem Dantuma bb71c043a1 Fix headers
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 17:25:26 +01:00
Willem Dantuma cb222770d8 Refactor to range requests
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 17:09:03 +01:00
Willem Dantuma f26ececb9b Fix nullref
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 14:45:33 +01:00
Willem Dantuma 2d285eaba0 Fix device change detection
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-01 08:43:33 +01:00
Willem Dantuma d9a42ca75a Hide heading and tolerance on desktop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-01 08:34:17 +01:00
Willem Dantuma 0c44beabe0 Change map button styling
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 16:40:25 +01:00
Willem Dantuma dd97c89254 Fix outlet
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 14:41:34 +01:00
Willem Dantuma 45de27f666 Add haspackage for 3d
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 11:14:25 +01:00
Willem Dantuma 5b0632ebf1 Re enable gps location
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 10:51:45 +01:00
Willem Dantuma 8389943d1a update to ol 6.5.0 and ol-cesium 2.12.0
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 10:20:17 +01:00
Willem Dantuma 2606de5f0a Fix side panel display logic
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 09:56:56 +01:00
Willem Dantuma 208dfed7fb Add checks
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-29 12:42:19 +01:00
Willem Dantuma eb50218a8d Refactor some stuff to a service
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-29 12:00:59 +01:00
Willem Dantuma 516d63a59e Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-29 11:33:22 +01:00
Willem Dantuma 321d34870e Add zoom to show alert
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-29 11:25:37 +01:00
Willem Dantuma dbc330ab46 Move side panels to map context to get access to map 2021-01-29 10:10:13 +01:00
Willem Dantuma 154bcba620 Implement *fm-map-ifZoomToShowdirective 2021-01-29 10:04:47 +01:00
Willem Dantuma 2f5ffde4d9 More updates
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 21:43:46 +01:00
Willem Dantuma 69e153abd7 upgrade
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 21:32:31 +01:00
Willem Dantuma 669c724e3a Fix styling app and user menu on mobile device
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 10:33:01 +01:00
Willem Dantuma a7402438a0 oops
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 08:14:13 +01:00
Willem Dantuma dda82c8b09 Add device service migrate, use back-button
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-27 08:11:37 +01:00
Willem Dantuma 3e14157e87 Adjust bottom margin 2021-01-27 07:53:59 +01:00
Willem Dantuma 1e84874695 Export back-button
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 07:34:10 +01:00
Willem Dantuma 9245003dd9 Export back-button
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 07:26:31 +01:00
Willem Dantuma 8d061210dc Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 07:15:11 +01:00
Willem Dantuma 8a40335cf2 Fix build 2021-01-27 07:11:06 +01:00
Willem Dantuma ce9c72016d Add back button
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-27 07:08:31 +01:00
Willem Dantuma a082967c69 Add getItemFeature method
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 19:53:51 +01:00
Willem Dantuma a2e7439776 re add Optimisation
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 17:48:11 +01:00
Willem Dantuma e858ac778c Fix temporal layer selection
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2021-01-26 17:47:17 +01:00
Willem Dantuma 290d5d1d26 Fix eventhandler install for temporal
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 17:07:45 +01:00
Willem Dantuma e75afdc01d Fix destroy and eventhandler install
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 16:47:08 +01:00
Willem Dantuma 8f54e095fe debug
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 15:27:40 +01:00
Willem Dantuma 431cc78c19 remove layer when destroyed
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 14:38:40 +01:00
Willem Dantuma 878944b056 Export temporal item layer
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 09:59:02 +01:00
Willem Dantuma d2b8de17d1 Fix hover and select remove @Host()
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 09:12:37 +01:00
Willem Dantuma ac352473a0 add i18n tag
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 21:14:47 +01:00
Willem Dantuma 8655307858 Fix date
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 21:11:20 +01:00
Willem Dantuma 17a947ce20 Oops
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 20:32:52 +01:00
Willem Dantuma fe356441d0 Use timespan for temporal items
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-25 20:30:13 +01:00
Willem Dantuma b17bce1cd2 Add default unitScale
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 20:18:04 +01:00
Willem Dantuma bb555eec74 Remove fill colors for selected items 2021-01-25 18:28:26 +01:00
Willem Dantuma d3c28847ec Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	projects/common-map/src/fm-map/components/aol/layer-list/layer-list.component.html
2021-01-25 17:26:59 +01:00
Willem Dantuma e2499d0403 Fix icons 2021-01-25 17:26:15 +01:00
mark 8f364c4990 fix bar-chart icon
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 11:42:57 +01:00
Willem Dantuma 46f4ac06f4 Fix icons
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-24 11:08:41 +01:00
Willem Dantuma b5d42d855e Fix spacing and up down icon
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-24 09:26:30 +01:00
Willem Dantuma b14b01b358 Update icons
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-24 09:09:43 +01:00
Willem Dantuma 08acba9a88 Merge branch 'feature/vectortileselect' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-23 18:41:44 +01:00
Willem Dantuma b30c29a5f1 Some fixes and optimizations 2021-01-23 18:30:29 +01:00
Willem Dantuma 2f4e14ca1f Merge branch 'develop' into feature/vectortileselect 2021-01-23 17:28:24 +01:00
Willem Dantuma bfcdcce9ef Fix fontawesome class names
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-22 14:52:10 +01:00
Willem Dantuma 9e3e7d5d47 Upgrade to fontawesom 5.15.2 2021-01-22 13:13:48 +01:00
Willem Dantuma 2949e39fcd wip 2021-01-22 12:26:14 +01:00
Willem Dantuma 9376c236aa Merge branch 'develop' into feature/vectortileselect
# Conflicts:
#	package-lock.json
#	package.json
2021-01-21 11:04:57 +01:00
Willem Dantuma a1079eb21f update libs
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-21 11:04:22 +01:00
Willem Dantuma c266ce7d42 Update libs 2021-01-21 11:03:37 +01:00
peter 428e3b002d Fix UTC
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-18 16:45:37 +01:00
peter 65366ff09b Again....
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-18 15:23:44 +01:00
peter 0f1ce45b2f AW-1844 Fix fmHasPackage
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-18 15:21:34 +01:00
peter 1ade8025ab Fix HasPackageDirective
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-18 15:01:08 +01:00
Willem Dantuma ac8815e8f1 Commit 2021-01-13 17:33:01 +01:00
peter 41b1295f9e Move mollie code ( srvice ) uit farmmapslib halen ( is open source ), naar farmmaps
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-13 17:29:48 +01:00
peter ed5a74ed07 Export new Mollie types
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-13 17:18:45 +01:00
peter a08eed7c67 AW-1805 Update mollie service (client)
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-13 16:40:35 +01:00
peter cc421742df AW-1805 Add support for validity
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-12 09:05:27 +01:00
peter 9a38630d01 Fix URL
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-11 19:50:24 +01:00
peter 978360fad0 Build error
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-11 19:34:39 +01:00
peter 30dab68468 AW-1805 Add mollie service
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-11 19:32:08 +01:00
Willem Dantuma 80fec7ccaa Some fixes 2020-12-18 20:16:22 +01:00
Willem Dantuma 1a1cd7a81c Merge branch 'develop' into feature/vectortileselect 2020-12-18 19:22:33 +01:00
mark a782d8ebe9 add clearlayers action
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-16 23:01:59 +01:00
Willem Dantuma a0816afaea Add SetSelectedItemLayer action
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-16 18:04:39 +01:00
Willem Dantuma 6746047fe2 Add setfeatures action
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-11 13:35:51 +01:00
Willem Dantuma 7266c98a10 Add router-outlet to map component to make it more reusable
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-11 12:08:15 +01:00
Willem Dantuma e873f5af5b Fix icon
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-09 23:39:44 +01:00
Willem Dantuma 44f476d5fd Add app-menu 2020-12-09 21:45:38 +01:00
Willem Dantuma 200f3e95eb Dont's show blank screen 2020-12-09 20:35:01 +01:00
Willem Dantuma 1a8bc43c60 Remove horizontal scrollbar
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-09 15:23:50 +01:00
Willem Dantuma 6dccaa8ce5 Wait for item types to be loaded
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-08 16:14:58 +01:00
Willem Dantuma f2cb5d4d64 Update configuration
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-07 17:20:34 +01:00
francisco 6252cc120b aw-1686 expand user profile; added put operation
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-18 15:07:39 +01:00
Willem Dantuma 03284d26dd Merge branch 'develop' into feature/vectortileselect 2020-11-06 08:59:08 +01:00
peter 946cbc6533 AQ-1659 Add getItemListUsingRelationship(...)
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-05 17:44:39 +01:00
Willem Dantuma 6277236993 Merge branch 'develop' into feature/vectortileselect 2020-11-03 20:22:25 +01:00
Willem Dantuma 20bda6b81f Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-03 20:21:39 +01:00
Willem Dantuma 9a338c04e6 Basic working implementation 2020-11-03 20:21:18 +01:00
peter 65c1643c95 AW-1649 Remove codelistitem
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-03 13:05:59 +01:00
Willem Dantuma 9cbc9f1293 Implement event handlers 2020-11-02 21:00:13 +01:00
Willem Dantuma 34b75a4c18 Upgrade openlayers 2020-11-02 20:58:32 +01:00
Willem Dantuma 1991e79ed2 Add landingpage and lazyloading voor 3d map
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-02 12:24:15 +01:00
Willem Dantuma d661e5f3f9 Fix zoom padding
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-01 15:35:38 +01:00
Willem Dantuma 0a384a9196 Fix zoomto padding 2020-11-01 15:34:01 +01:00
Willem Dantuma 0e13b98b7f Detect changes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 16:58:03 +01:00
Willem Dantuma 56a7544c1e Make reverse non destructive
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 13:43:31 +01:00
Willem Dantuma 61636b6e3d Reverse arrays
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 13:38:27 +01:00
Willem Dantuma ab835e904e Fix routes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 11:45:03 +01:00
Willem Dantuma cd10165510 Remove old init
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-30 13:12:13 +01:00
Willem Dantuma 446d26607c Fix initalisation
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2020-10-30 13:11:20 +01:00
Willem Dantuma 8d204ce1cd Some fixes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-30 12:37:02 +01:00
Willem Dantuma 2656a67fca Refactor token refresh flows
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-30 08:22:58 +01:00
Willem Dantuma 46c5f74b49 Refactoring for landingpage support
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-29 19:14:06 +01:00
Willem Dantuma a5ece9b453 Fix map viewport size
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-28 17:54:46 +01:00
Willem Dantuma 9fb5a9698c Refactor map component
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-28 13:31:12 +01:00
francisco fad2f19ae4 added readWrite property for codeListItem
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-13 08:38:23 +02:00
mark 2ad04fc7c1 Added getCodeListItem api for service
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-12 17:41:24 +02:00
francisco f656ecd23f undo previous commit
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-12 14:05:27 +02:00
francisco d42aad87bd Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-10 12:02:34 +02:00
francisco 415ee8ef30 something weird, codeList item in url seems empty. But item is not empty 2020-10-10 12:00:05 +02:00
Willem Dantuma 306065dcbd Fix logout issue
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-09 16:35:14 +02:00
francisco 824ba97704 try to fix deleteCodeListItem
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-09 07:47:47 +02:00
francisco ac8ab147bc added codelist service
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-08 14:25:33 +02:00
Willem Dantuma 640c99cde2 Add test component
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-06 09:07:40 +02:00
Willem Dantuma da2492e017 Add fm-gradient-select
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-06 08:22:10 +02:00
Willem Dantuma f93d235877 add fm-gradient component
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-05 14:58:47 +02:00
Willem Dantuma fe798e3f60 Fix AW-1508
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-05 11:08:36 +02:00
Willem Dantuma b8dcc4e9e0 Add 3D example to test app
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-02 17:48:34 +02:00
Willem Dantuma 4b6175b6c4 Add npm scope
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-02 17:37:36 +02:00
Willem Dantuma 388a2faf84 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-02 17:33:25 +02:00
Willem Dantuma 0b0bb4d598 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-10-02 17:26:18 +02:00
Willem Dantuma 7696ddd8d2 Add common-map3d to jenkins build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-10-02 17:23:11 +02:00
Willem Dantuma 1301a9d082 Merge branch 'feature/Resurect_3D' into develop 2020-10-02 17:21:01 +02:00
Willem Dantuma e87affee08 Refactor 3d to own library 2020-10-02 17:20:00 +02:00
Willem Dantuma b00b21e6b8 Merge branch 'develop' into feature/Resurect_3D 2020-10-02 16:44:11 +02:00
Willem Dantuma 835851350c Fix i18n tags
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-02 07:46:59 +02:00
Willem Dantuma 7bdb48b644 Fix signalr authentication
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-30 18:30:36 +02:00
Willem Dantuma 84d6f44e9b Fix transition
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-29 20:57:14 +02:00
Willem Dantuma 2fd109d967 Fix AW-1414
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-29 15:27:21 +02:00
Willem Dantuma f9934ccf27 Fix AW-1355
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-29 14:56:23 +02:00
Willem Dantuma b93218e165 Merge branch 'develop' into feature/Resurect_3D
# Conflicts:
#	angular.json
#	package-lock.json
#	package.json
#	projects/common-map/package.json
2020-09-26 12:17:58 +02:00
Willem Dantuma 8e55308df9 First working angular 10 version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-26 10:10:38 +02:00
Willem Dantuma 5270739641 Fix versions
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-26 10:03:15 +02:00
Willem Dantuma ce8e8fa706 Update common
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 21:24:54 +02:00
Willem Dantuma d326a82c4e Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 21:18:04 +02:00
Willem Dantuma c1683a058c Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 21:16:38 +02:00
Willem Dantuma aa168bb3a1 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 19:55:08 +02:00
Willem Dantuma fe53955bea Try to fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 19:47:39 +02:00
Willem Dantuma ba3dad1365 Fix dep
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 19:38:47 +02:00
Willem Dantuma 6d2d259c01 Merge branch 'feature/angular_upgrade_10' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-25 19:28:18 +02:00
Willem Dantuma 92774647ff Upgrade to angular 10 2020-09-25 19:27:53 +02:00
Willem Dantuma 9ca047923f npm auit fix 2020-09-25 17:10:17 +02:00
Willem Dantuma c893a2820b Fix responsetype
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-22 19:29:44 +02:00
Willem Dantuma baa0166fc8 Stupid bug :-(
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-22 15:13:00 +02:00
Willem Dantuma 58c200aca0 Another attempt to fix parameter
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-22 15:03:23 +02:00
Willem Dantuma b8a4b3541d Fix params
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-22 14:46:51 +02:00
Willem Dantuma 584a1514ac Add getItemData
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-22 13:58:33 +02:00
Willem Dantuma 21af6ab2c4 Some styling fixes 2020-09-18 17:19:29 +02:00
Willem Dantuma c606e02673 Fix static image layer 2020-09-18 16:05:44 +02:00
Willem Dantuma ff4eb296ff Update libs
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-18 14:50:17 +02:00
Willem Dantuma ea26cdd628 Update libs
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-18 14:30:20 +02:00
Willem Dantuma 26e28bdda8 Revert changes 2020-09-18 14:29:50 +02:00
Willem Dantuma 15d1f14ee1 More or less working now 2020-09-18 14:20:33 +02:00
Willem Dantuma 22e007b70b First attempt to bring back 3D view in map 2020-09-18 08:38:05 +02:00
Willem Dantuma 9e4a538a07 Implement min/maxzoom on vectorlayer
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-16 20:09:52 +02:00
Willem Dantuma c44c771feb Use indexKey if specified
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-16 15:02:42 +02:00
Willem Dantuma 394bbab320 Add support for alpha in legend
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-16 14:40:03 +02:00
Willem Dantuma 3008081ae8 Implement stylecache for vectorlayer
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-16 13:38:06 +02:00
Willem Dantuma 7474c00498 Fix layerindex
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-16 10:34:04 +02:00
Willem Dantuma 964bf925e7 Fix typo
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-15 15:01:20 +02:00
Willem Dantuma fb8129148d Add to module
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-15 14:01:24 +02:00
Willem Dantuma 73db03148a First attempt package preload strategy 2020-09-15 14:00:18 +02:00
Willem Dantuma 6367d3399d Implement default baselayer option
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-09 09:54:50 +02:00
Willem Dantuma ee4e7113d2 Add TileJSON interface 2020-09-09 09:47:32 +02:00
Willem Dantuma ad86e41345 Add background-color padding and border
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-04 10:40:34 +02:00
Willem Dantuma e682b375e7 Add user-menu router outlet
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-04 10:10:01 +02:00
Willem Dantuma 78425a621a Fix fm-hasclaim
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-03 12:43:55 +02:00
mark 1030b1c41a removed logging in weather service.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
changed moment to peerdependency.
2020-09-03 10:37:24 +02:00
mark 76bdad6eaf fixed build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-03 10:25:39 +02:00
mark ce56dd9e9f updated weather service with correct date manipulation.
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-03 10:19:12 +02:00
mark e7a53ba7b5 HourlyWeatherData time changed to string.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-02 21:32:47 +02:00
mark 9f1f6934ee made hourly weather data static typed.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-02 16:21:49 +02:00
mark 773bf3f5e7 fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-09-02 15:28:12 +02:00
mark cdc900d5fd fixed weather service
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-09-02 15:23:54 +02:00
peter 80522a3a2f Revert "AW-1435 Add links to package manager and widget manager"
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 0157812357.
2020-08-17 15:53:02 +02:00
peter 0157812357 AW-1435 Add links to package manager and widget manager
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-17 14:19:38 +02:00
peter 329564d8f6 AW-1431 Oops
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-13 15:47:04 +02:00
peter ba2a067c8b AW-1431 Expose new property
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-13 15:28:30 +02:00
peter 4d67a656f5 AW-1431 Add InitUserSettingsRoot
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-13 13:06:28 +02:00
peter ad1d40cdd1 AW-1426 Add extra check.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-11 19:13:57 +02:00
peter 131e0eb371 Cleanup
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-11 19:03:05 +02:00
peter e563011099 New try
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 18:58:50 +02:00
peter 7c072752c8 Build fixed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 18:52:39 +02:00
peter 36ced002e0 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 18:50:08 +02:00
peter 3e1b892eef Fix build?
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 18:38:15 +02:00
peter f4004cf2be Revert "AW-1426 Add extra check"
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit a6fd052a4f.
2020-08-11 14:42:45 +02:00
peter d1d8723186 Rollback c028adfb77
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 14:40:04 +02:00
peter a6fd052a4f AW-1426 Add extra check
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 14:35:04 +02:00
peter cede944538 Revert "AW-1426 Remove default component if none found"
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit 3b3c2768d3.
2020-08-11 14:24:12 +02:00
peter 3b3c2768d3 AW-1426 Remove default component if none found
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 14:11:51 +02:00
peter 3dd19c702f Remove Trijntje
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2020-08-11 13:32:05 +02:00
mark c028adfb77 Updated statistics confidence interval.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-06 12:04:56 +02:00
mark 1d2caa0fe3 Updated statistics labels.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-06 09:15:31 +02:00
Willem Dantuma d7ca1512bd Add TaskProgressEvent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-05 20:05:44 +02:00
Willem Dantuma ebe435027f Add addedfiles stream
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-05 15:49:02 +02:00
Willem Dantuma dfefa6746f Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-05 10:34:04 +02:00
Willem Dantuma c90df5c972 Fix userPackagesChanged 2020-08-05 10:33:55 +02:00
peter 514a91c2c7 Improved implementation to retrieve user packages.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-05 09:02:28 +02:00
Willem Dantuma ee7d1cb9a2 AW-1419
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-04 16:09:22 +02:00
peter 309b320534 AW-1415 Add postItemPackageTask
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-04 14:08:50 +02:00
peter fdfa7d3387 Typo
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-03 08:48:11 +02:00
Willem Dantuma 6785bfc3e0 Fix when not having READ rights on the parent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-08-01 09:44:32 +02:00
Willem Dantuma c682fb9184 Fix z-index
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-31 09:51:28 +02:00
Willem Dantuma ca6ea96eae Add interfacetype VectorWFSJson
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-30 09:33:32 +02:00
Willem Dantuma 3ebc197fac Make extent nullable
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-29 08:43:17 +02:00
mark 52871efb09 fix for statistics
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-28 20:02:23 +02:00
mark f014dc9f93 now use statistics if available in band.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-28 19:05:38 +02:00
mark e6cda406c9 improved alignment of legend. fixed rain in weatherservice.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-25 09:57:24 +02:00
mark df04397b13 I info icon now placed in the top right.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-23 19:39:06 +02:00
Willem Dantuma e0b29c905c Fix height
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-23 11:48:31 +02:00
Willem Dantuma 44ae806b30 Add offline alert
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-23 11:28:07 +02:00
Willem Dantuma 78e3cf74b9 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-07-23 09:43:03 +02:00
Willem Dantuma 428353d379 Fix inituser flow 2020-07-23 09:42:44 +02:00
277 changed files with 86298 additions and 14272 deletions
View File
+2
View File
@@ -33,6 +33,7 @@ speed-measure-plugin.json
.history/* .history/*
# misc # misc
/.angular/cache
/.sass-cache /.sass-cache
/connect.lock /connect.lock
/coverage /coverage
@@ -47,3 +48,4 @@ testem.log
Thumbs.db Thumbs.db
projects/common/node_modules/ projects/common/node_modules/
projects/common-map/node_modules/ projects/common-map/node_modules/
.angular/*
-1
View File
@@ -1 +0,0 @@
@FarmMaps:registry=https://repository.akkerweb.nl/repository/npm-group/
Vendored
+54
View File
@@ -0,0 +1,54 @@
pipeline {
agent any
environment {
PACKAGE_VERSION_PREFIX=sh(script: 'jq .version package.json |sed "s/\\"//g"', returnStdout: true).trim()
PACKAGE_VERSION="${PACKAGE_VERSION_PREFIX}"
}
stages {
stage('npm install'){
steps {
sh '''rm -rf node_modules/
npm install --legacy-peer-deps
cd projects/common
npm install --legacy-peer-deps
cd ../common-map
npm install --legacy-peer-deps
cd ../common-map3d
npm install --legacy-peer-deps
'''
}
}
stage('build'){
steps {
sh '''ng build common --configuration production
ng build common-map --configuration production
ng build common-map3d --configuration production'''
}
}
stage('npm publish'){
steps {
sh '''cd dist/common
npm version ${PACKAGE_VERSION} --allow-same-version
npm publish
cd ../common-map
npm version ${PACKAGE_VERSION} --allow-same-version
npm publish
cd ../common-map3d
npm version ${PACKAGE_VERSION} --allow-same-version
npm publish'''
}
}
}
post {
always {
emailext (
body: '${DEFAULT_CONTENT}',
mimeType: 'text/html',
replyTo: '${DEFAULT_REPLYTO}',
subject: '${DEFAULT_SUBJECT}',
to: emailextrecipients([[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']])
)
}
}
}
+12 -5
View File
@@ -7,18 +7,22 @@ pipeline {
stages { stages {
stage('npm install'){ stage('npm install'){
steps { steps {
sh '''npm install sh '''rm -rf node_modules/
npm install --legacy-peer-deps
cd projects/common cd projects/common
npm install npm install --legacy-peer-deps
cd ../common-map cd ../common-map
npm install npm install --legacy-peer-deps
cd ../common-map3d
npm install --legacy-peer-deps
''' '''
} }
} }
stage('build'){ stage('build'){
steps { steps {
sh '''ng build common sh '''ng build common --configuration production
ng build common-map''' ng build common-map --configuration production
ng build common-map3d --configuration production'''
} }
} }
stage('npm publish'){ stage('npm publish'){
@@ -28,6 +32,9 @@ pipeline {
npm publish npm publish
cd ../common-map cd ../common-map
npm version ${PACKAGE_VERSION} npm version ${PACKAGE_VERSION}
npm publish
cd ../common-map3d
npm version ${PACKAGE_VERSION}
npm publish''' npm publish'''
} }
} }
+82 -59
View File
@@ -11,8 +11,11 @@
"schematics": {}, "schematics": {},
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-angular:browser", "builder": "@angular-builders/custom-webpack:browser",
"options": { "options": {
"customWebpackConfig": {
"path": "./custom-webpack.config.js"
},
"aot": true, "aot": true,
"outputPath": "dist/farmmaps-lib-app", "outputPath": "dist/farmmaps-lib-app",
"index": "src/index.html", "index": "src/index.html",
@@ -22,29 +25,35 @@
"assets": [ "assets": [
{ {
"glob": "**/*", "glob": "**/*",
"input":"src/assets/images", "input": "src/assets/images",
"output":"/images" "output": "/images"
}, },
{ {
"glob": "silent-refresh.html", "glob": "silent-refresh.html",
"input":"src/assets", "input": "src/assets",
"output":"/" "output": "/"
}, },
{ {
"glob": "favicon.ico", "glob": "favicon.ico",
"input":"src/assets", "input": "src/assets",
"output":"/" "output": "/"
},
{
"glob": "**/*",
"input": "node_modules/cesium/Build/Cesium",
"output": "/assets/cesium"
}, },
"src/configuration.json" "src/configuration.json"
], ],
"styles": [ "styles": [
"src/styles.css", "src/styles.css",
"node_modules/bootstrap/dist/css/bootstrap.min.css", "node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/font-awesome/css/font-awesome.min.css", "fontawesome-6.2.1/css/all.min.css",
"fonts/FMIconFont/style.css" "fonts/FMIconFont/style.css",
"node_modules/cesium/Build/Cesium/Widgets/widgets.css",
"node_modules/ol/ol.css"
], ],
"scripts": [], "scripts": []
"es5BrowserSupport": true
}, },
"configurations": { "configurations": {
"production": { "production": {
@@ -74,19 +83,48 @@
"maximumWarning": "6kb" "maximumWarning": "6kb"
} }
] ]
},
"development": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": false,
"sourceMap": true,
"namedChunks": true,
"extractLicenses": false,
"vendorChunk": false,
"buildOptimizer": false,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "7mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
]
} }
} }
}, },
"serve": { "serve": {
"builder": "@angular-devkit/build-angular:dev-server", "builder": "@angular-builders/custom-webpack:dev-server",
"options": { "options": {
"browserTarget": "farmmaps-lib-app:build" "browserTarget": "farmmaps-lib-app:build"
}, },
"configurations": { "configurations": {
"production": { "production": {
"browserTarget": "farmmaps-lib-app:build:production" "browserTarget": "farmmaps-lib-app:build:production"
},
"development": {
"browserTarget": "farmmaps-lib-app:build:development"
} }
} },
"defaultConfiguration": "development"
}, },
"extract-i18n": { "extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n", "builder": "@angular-devkit/build-angular:extract-i18n",
@@ -110,18 +148,6 @@
"src/assets" "src/assets"
] ]
} }
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
} }
} }
}, },
@@ -141,15 +167,6 @@
"devServerTarget": "farmmaps-lib-app:serve:production" "devServerTarget": "farmmaps-lib-app:serve:production"
} }
} }
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**"
]
}
} }
} }
}, },
@@ -160,7 +177,7 @@
"prefix": "fm", "prefix": "fm",
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-ng-packagr:build", "builder": "@angular-devkit/build-angular:ng-packagr",
"options": { "options": {
"tsConfig": "projects/common/tsconfig.lib.json", "tsConfig": "projects/common/tsconfig.lib.json",
"project": "projects/common/ng-package.json" "project": "projects/common/ng-package.json"
@@ -178,18 +195,6 @@
"tsConfig": "projects/common/tsconfig.spec.json", "tsConfig": "projects/common/tsconfig.spec.json",
"karmaConfig": "projects/common/karma.conf.js" "karmaConfig": "projects/common/karma.conf.js"
} }
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"projects/common/tsconfig.lib.json",
"projects/common/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
} }
} }
}, },
@@ -200,7 +205,7 @@
"prefix": "fm-map", "prefix": "fm-map",
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-ng-packagr:build", "builder": "@angular-devkit/build-angular:ng-packagr",
"options": { "options": {
"tsConfig": "projects/common-map/tsconfig.lib.json", "tsConfig": "projects/common-map/tsconfig.lib.json",
"project": "projects/common-map/ng-package.json" "project": "projects/common-map/ng-package.json"
@@ -218,21 +223,39 @@
"tsConfig": "projects/common-map/tsconfig.spec.json", "tsConfig": "projects/common-map/tsconfig.spec.json",
"karmaConfig": "projects/common-map/karma.conf.js" "karmaConfig": "projects/common-map/karma.conf.js"
} }
}, }
"lint": { }
"builder": "@angular-devkit/build-angular:tslint", },
"common-map3d": {
"projectType": "library",
"root": "projects/common-map3d",
"sourceRoot": "projects/common-map3d/src",
"prefix": "fm-map3d",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:ng-packagr:build",
"options": { "options": {
"tsConfig": [ "tsConfig": "projects/common-map3d/tsconfig.lib.json",
"projects/common-map/tsconfig.lib.json", "project": "projects/common-map3d/ng-package.json"
"projects/common-map/tsconfig.spec.json" },
], "configurations": {
"exclude": [ "production": {
"**/node_modules/**" "tsConfig": "projects/common-map3d/tsconfig.lib.prod.json"
] }
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "projects/common-map3d/src/test.ts",
"tsConfig": "projects/common-map3d/tsconfig.spec.json",
"karmaConfig": "projects/common-map3d/karma.conf.js"
} }
} }
} }
} }
}, },
"defaultProject": "farmmaps-lib-app" "cli": {
"analytics": false
}
} }
+16
View File
@@ -0,0 +1,16 @@
module.exports = {
resolve: {
fallback: {
// Resolve node module use of fs
fs: "empty",
Buffer: false,
http: require.resolve("stream-http"),
https: require.resolve("https-browserify"),
url: require.resolve("url/"),
zlib: require.resolve('browserify-zlib'),
assert: require.resolve("assert/"),
util: require.resolve("util/"),
buffer: require.resolve("buffer/")
}
}
};
+18
View File
@@ -0,0 +1,18 @@
Font Awesome Pro License
------------------------
Font Awesome Pro is commercial software that requires a paid license. Full
Font Awesome Pro license: https://fontawesome.com/license.
# Commercial License
The Font Awesome Pro commercial license allows you to pay for FA Pro once, own
it, and use it just about everywhere you'd like.
# Attribution
Attribution is not required by the Font Awesome Pro commercial license.
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+19
View File
@@ -0,0 +1,19 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Pro';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Pro'; }
@font-face {
font-family: 'Font Awesome 6 Pro';
font-style: normal;
font-weight: 300;
font-display: block;
src: url("../webfonts/fa-light-300.woff2") format("woff2"), url("../webfonts/fa-light-300.ttf") format("truetype"); }
.fal,
.fa-light {
font-weight: 300; }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.ttf) format("truetype")}.fa-light,.fal{font-weight:300}
+19
View File
@@ -0,0 +1,19 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Pro';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Pro'; }
@font-face {
font-family: 'Font Awesome 6 Pro';
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
.far,
.fa-regular {
font-weight: 400; }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
+19
View File
@@ -0,0 +1,19 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-sharp: 'Font Awesome 6 Sharp';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp'; }
@font-face {
font-family: 'Font Awesome 6 Sharp';
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../webfonts/fa-sharp-solid-900.woff2") format("woff2"), url("../webfonts/fa-sharp-solid-900.ttf") format("truetype"); }
.fass,
.fa-sharp-solid {
font-weight: 900; }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-sharp:"Font Awesome 6 Sharp";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp"}@font-face{font-family:"Font Awesome 6 Sharp";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-sharp-solid-900.woff2) format("woff2"),url(../webfonts/fa-sharp-solid-900.ttf) format("truetype")}.fa-sharp-solid,.fass{font-weight:900}
+19
View File
@@ -0,0 +1,19 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Pro';
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Pro'; }
@font-face {
font-family: 'Font Awesome 6 Pro';
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
.fas,
.fa-solid {
font-weight: 900; }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
+635
View File
@@ -0,0 +1,635 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Solid';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Regular';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Light';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Thin';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; }
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
overflow: visible;
box-sizing: content-box; }
.svg-inline--fa {
display: var(--fa-display, inline-block);
height: 1em;
overflow: visible;
vertical-align: -.125em; }
.svg-inline--fa.fa-2xs {
vertical-align: 0.1em; }
.svg-inline--fa.fa-xs {
vertical-align: 0em; }
.svg-inline--fa.fa-sm {
vertical-align: -0.07143em; }
.svg-inline--fa.fa-lg {
vertical-align: -0.2em; }
.svg-inline--fa.fa-xl {
vertical-align: -0.25em; }
.svg-inline--fa.fa-2xl {
vertical-align: -0.3125em; }
.svg-inline--fa.fa-pull-left {
margin-right: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-pull-right {
margin-left: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-li {
width: var(--fa-li-width, 2em);
top: 0.25em; }
.svg-inline--fa.fa-fw {
width: var(--fa-fw-width, 1.25em); }
.fa-layers svg.svg-inline--fa {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers {
display: inline-block;
height: 1em;
position: relative;
text-align: center;
vertical-align: -.125em;
width: 1em; }
.fa-layers svg.svg-inline--fa {
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-text {
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-counter {
background-color: var(--fa-counter-background-color, #ff253a);
border-radius: var(--fa-counter-border-radius, 1em);
box-sizing: border-box;
color: var(--fa-inverse, #fff);
line-height: var(--fa-counter-line-height, 1);
max-width: var(--fa-counter-max-width, 5em);
min-width: var(--fa-counter-min-width, 1.5em);
overflow: hidden;
padding: var(--fa-counter-padding, 0.25em 0.5em);
right: var(--fa-right, 0);
text-overflow: ellipsis;
top: var(--fa-top, 0);
-webkit-transform: scale(var(--fa-counter-scale, 0.25));
transform: scale(var(--fa-counter-scale, 0.25));
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-bottom-right {
bottom: var(--fa-bottom, 0);
right: var(--fa-right, 0);
top: auto;
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: bottom right;
transform-origin: bottom right; }
.fa-layers-bottom-left {
bottom: var(--fa-bottom, 0);
left: var(--fa-left, 0);
right: auto;
top: auto;
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: bottom left;
transform-origin: bottom left; }
.fa-layers-top-right {
top: var(--fa-top, 0);
right: var(--fa-right, 0);
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-top-left {
left: var(--fa-left, 0);
right: auto;
top: var(--fa-top, 0);
-webkit-transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(var(--fa-layers-scale, 0.25));
-webkit-transform-origin: top left;
transform-origin: top left; }
.fa-1x {
font-size: 1em; }
.fa-2x {
font-size: 2em; }
.fa-3x {
font-size: 3em; }
.fa-4x {
font-size: 4em; }
.fa-5x {
font-size: 5em; }
.fa-6x {
font-size: 6em; }
.fa-7x {
font-size: 7em; }
.fa-8x {
font-size: 8em; }
.fa-9x {
font-size: 9em; }
.fa-10x {
font-size: 10em; }
.fa-2xs {
font-size: 0.625em;
line-height: 0.1em;
vertical-align: 0.225em; }
.fa-xs {
font-size: 0.75em;
line-height: 0.08333em;
vertical-align: 0.125em; }
.fa-sm {
font-size: 0.875em;
line-height: 0.07143em;
vertical-align: 0.05357em; }
.fa-lg {
font-size: 1.25em;
line-height: 0.05em;
vertical-align: -0.075em; }
.fa-xl {
font-size: 1.5em;
line-height: 0.04167em;
vertical-align: -0.125em; }
.fa-2xl {
font-size: 2em;
line-height: 0.03125em;
vertical-align: -0.1875em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: var(--fa-li-margin, 2.5em);
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: calc(var(--fa-li-width, 2em) * -1);
position: absolute;
text-align: center;
width: var(--fa-li-width, 2em);
line-height: inherit; }
.fa-border {
border-color: var(--fa-border-color, #eee);
border-radius: var(--fa-border-radius, 0.1em);
border-style: var(--fa-border-style, solid);
border-width: var(--fa-border-width, 0.08em);
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
.fa-pull-left {
float: left;
margin-right: var(--fa-pull-margin, 0.3em); }
.fa-pull-right {
float: right;
margin-left: var(--fa-pull-margin, 0.3em); }
.fa-beat {
-webkit-animation-name: fa-beat;
animation-name: fa-beat;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-bounce {
-webkit-animation-name: fa-bounce;
animation-name: fa-bounce;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
.fa-fade {
-webkit-animation-name: fa-fade;
animation-name: fa-fade;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-beat-fade {
-webkit-animation-name: fa-beat-fade;
animation-name: fa-beat-fade;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-flip {
-webkit-animation-name: fa-flip;
animation-name: fa-flip;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-shake {
-webkit-animation-name: fa-shake;
animation-name: fa-shake;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin {
-webkit-animation-name: fa-spin;
animation-name: fa-spin;
-webkit-animation-delay: var(--fa-animation-delay, 0s);
animation-delay: var(--fa-animation-delay, 0s);
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 2s);
animation-duration: var(--fa-animation-duration, 2s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, linear);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin-reverse {
--fa-animation-direction: reverse; }
.fa-pulse,
.fa-spin-pulse {
-webkit-animation-name: fa-spin;
animation-name: fa-spin;
-webkit-animation-direction: var(--fa-animation-direction, normal);
animation-direction: var(--fa-animation-direction, normal);
-webkit-animation-duration: var(--fa-animation-duration, 1s);
animation-duration: var(--fa-animation-duration, 1s);
-webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
-webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
animation-timing-function: var(--fa-animation-timing, steps(8)); }
@media (prefers-reduced-motion: reduce) {
.fa-beat,
.fa-bounce,
.fa-fade,
.fa-beat-fade,
.fa-flip,
.fa-pulse,
.fa-shake,
.fa-spin,
.fa-spin-pulse {
-webkit-animation-delay: -1ms;
animation-delay: -1ms;
-webkit-animation-duration: 1ms;
animation-duration: 1ms;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s; } }
@-webkit-keyframes fa-beat {
0%, 90% {
-webkit-transform: scale(1);
transform: scale(1); }
45% {
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
transform: scale(var(--fa-beat-scale, 1.25)); } }
@keyframes fa-beat {
0%, 90% {
-webkit-transform: scale(1);
transform: scale(1); }
45% {
-webkit-transform: scale(var(--fa-beat-scale, 1.25));
transform: scale(var(--fa-beat-scale, 1.25)); } }
@-webkit-keyframes fa-bounce {
0% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
10% {
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); } }
@keyframes fa-bounce {
0% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
10% {
-webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
-webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
-webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
-webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: scale(1, 1) translateY(0);
transform: scale(1, 1) translateY(0); } }
@-webkit-keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@-webkit-keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
-webkit-transform: scale(1);
transform: scale(1); }
50% {
opacity: 1;
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
-webkit-transform: scale(1);
transform: scale(1); }
50% {
opacity: 1;
-webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@-webkit-keyframes fa-flip {
50% {
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@keyframes fa-flip {
50% {
-webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@-webkit-keyframes fa-shake {
0% {
-webkit-transform: rotate(-15deg);
transform: rotate(-15deg); }
4% {
-webkit-transform: rotate(15deg);
transform: rotate(15deg); }
8%, 24% {
-webkit-transform: rotate(-18deg);
transform: rotate(-18deg); }
12%, 28% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg); }
16% {
-webkit-transform: rotate(-22deg);
transform: rotate(-22deg); }
20% {
-webkit-transform: rotate(22deg);
transform: rotate(22deg); }
32% {
-webkit-transform: rotate(-12deg);
transform: rotate(-12deg); }
36% {
-webkit-transform: rotate(12deg);
transform: rotate(12deg); }
40%, 100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } }
@keyframes fa-shake {
0% {
-webkit-transform: rotate(-15deg);
transform: rotate(-15deg); }
4% {
-webkit-transform: rotate(15deg);
transform: rotate(15deg); }
8%, 24% {
-webkit-transform: rotate(-18deg);
transform: rotate(-18deg); }
12%, 28% {
-webkit-transform: rotate(18deg);
transform: rotate(18deg); }
16% {
-webkit-transform: rotate(-22deg);
transform: rotate(-22deg); }
20% {
-webkit-transform: rotate(22deg);
transform: rotate(22deg); }
32% {
-webkit-transform: rotate(-12deg);
transform: rotate(-12deg); }
36% {
-webkit-transform: rotate(12deg);
transform: rotate(12deg); }
40%, 100% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } }
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
.fa-rotate-90 {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
.fa-rotate-180 {
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
.fa-rotate-270 {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
.fa-flip-horizontal {
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
.fa-flip-vertical {
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
.fa-flip-both,
.fa-flip-horizontal.fa-flip-vertical {
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1); }
.fa-rotate-by {
-webkit-transform: rotate(var(--fa-rotate-angle, none));
transform: rotate(var(--fa-rotate-angle, none)); }
.fa-stack {
display: inline-block;
vertical-align: middle;
height: 2em;
position: relative;
width: 2.5em; }
.fa-stack-1x,
.fa-stack-2x {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
z-index: var(--fa-stack-z-index, auto); }
.svg-inline--fa.fa-stack-1x {
height: 1em;
width: 1.25em; }
.svg-inline--fa.fa-stack-2x {
height: 2em;
width: 2.5em; }
.fa-inverse {
color: var(--fa-inverse, #fff); }
.sr-only,
.fa-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.sr-only-focusable:not(:focus),
.fa-sr-only-focusable:not(:focus) {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.svg-inline--fa .fa-primary {
fill: var(--fa-primary-color, currentColor);
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa .fa-secondary {
fill: var(--fa-secondary-color, currentColor);
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-primary {
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-secondary {
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa mask .fa-primary,
.svg-inline--fa mask .fa-secondary {
fill: black; }
.fad.fa-inverse,
.fa-duotone.fa-inverse {
color: var(--fa-inverse, #fff); }
File diff suppressed because one or more lines are too long
+19
View File
@@ -0,0 +1,19 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Pro';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Pro'; }
@font-face {
font-family: 'Font Awesome 6 Pro';
font-style: normal;
font-weight: 100;
font-display: block;
src: url("../webfonts/fa-thin-100.woff2") format("woff2"), url("../webfonts/fa-thin-100.ttf") format("truetype"); }
.fat,
.fa-thin {
font-weight: 100; }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(../webfonts/fa-thin-100.woff2) format("woff2"),url(../webfonts/fa-thin-100.ttf) format("truetype")}.fa-thin,.fat{font-weight:100}
+26
View File
@@ -0,0 +1,26 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+34
View File
@@ -0,0 +1,34 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face {
font-family: 'Font Awesome 5 Brands';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Pro';
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Pro';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Pro';
font-display: block;
font-weight: 300;
src: url("../webfonts/fa-light-300.woff2") format("woff2"), url("../webfonts/fa-light-300.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Duotone';
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-duotone-900.woff2") format("woff2"), url("../webfonts/fa-duotone-900.ttf") format("truetype"); }
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
* Copyright 2022 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(../webfonts/fa-duotone-900.woff2) format("woff2"),url(../webfonts/fa-duotone-900.ttf) format("truetype")}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
+30
View File
@@ -23,6 +23,36 @@
content: "b"; content: "b";
} }
.fm-trijntje:before {
content: "c";
}
.fm-satellite:before {
content: "d";
}
.fm-sensoterra:before {
content: "e";
}
.fm-blight:before {
content: "f";
}
.fm-agrodatacube:before {
content: "g";
}
.fm-app-menu:before {
content: "h";
}
.fm-blight-holes:before {
content: "i";
}
hallo
@font-face { @font-face {
font-family: "FarmMaps"; font-family: "FarmMaps";
src: url("./FMIconFont.woff") format("woff"), /* Modern Browsers */ src: url("./FMIconFont.woff") format("woff"), /* Modern Browsers */
+22821 -12431
View File
File diff suppressed because it is too large Load Diff
+63 -47
View File
@@ -1,6 +1,6 @@
{ {
"name": "farmmaps-lib-app", "name": "farmmaps-lib-app",
"version": "0.0.1", "version": "3.0.1",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
@@ -11,57 +11,73 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "~9.1.0", "@angular/animations": "^14.1.3",
"@angular/common": "~9.1.0", "@angular/common": "^14.1.3",
"@angular/compiler": "~9.1.0", "@angular/compiler": "^14.1.3",
"@angular/core": "~9.1.0", "@angular/core": "^14.1.3",
"@angular/forms": "~9.1.0", "@angular/forms": "^14.1.3",
"@angular/platform-browser": "~9.1.0", "@angular/platform-browser": "^14.1.3",
"@angular/platform-browser-dynamic": "~9.1.0", "@angular/platform-browser-dynamic": "^14.1.3",
"@angular/router": "~9.1.0", "@angular/router": "^14.1.3",
"@farmmaps/common": ">=0.0.1-prerelease.325 <0.0.1", "@farmmaps/common": "file:dist/common",
"@farmmaps/common-map": ">=0.0.1-prerelease.325 <0.0.1", "@farmmaps/common-map": "file:dist/common-map",
"@microsoft/signalr": "^3.1.3", "@farmmaps/common-map3d": "file:dist/common-map3d",
"@ng-bootstrap/ng-bootstrap": "^6.0", "@microsoft/signalr": "^3.1.16",
"@ngrx/effects": "^9.0", "@ng-bootstrap/ng-bootstrap": "^13.0.0",
"@ngrx/router-store": "^9.0", "@ngrx/effects": "^14",
"@ngrx/store": "^9.0", "@ngrx/router-store": "^14",
"angular-oauth2-oidc": "^9.1", "@ngrx/store": "^14",
"bootstrap": "^4.4.1", "@popperjs/core": "^2.11.6",
"core-js": "^2.6.11", "angular-oauth2-oidc": "^13",
"font-awesome": "^4.7.0", "assert": "^2.0.0",
"ngrx-store-localstorage": "^9.0", "bootstrap": "^5.2.0",
"ngx-bootstrap": "^5.6.1", "browserify-zlib": "^0.2.0",
"ngx-openlayers": "1.0.0-next.13", "buffer": "^6.0.3",
"ngx-uploadx": "^3.5.1", "cesium": "^1.97.0",
"ol": "6.1.1", "core-js": "^2.6.12",
"https-browserify": "^1.0.0",
"moment": "^2.29.4",
"ngrx-store-localstorage": "^14",
"ngx-avatar": "^4.1.0",
"ngx-clipboard": "^14.0.1",
"ngx-image-cropper": "^3.3.5",
"ngx-openlayers": "1.0.0-next.19",
"ngx-uploadx": "^5.2.0",
"ol": "6.14.1",
"olcs": "^2.13.1",
"resumablejs": "^1.1.0", "resumablejs": "^1.1.0",
"rxjs": "^6.5.4", "rxjs": "^6.6.7",
"stream": "^0.0.2",
"stream-http": "^3.2.0",
"tassign": "^1.0.0", "tassign": "^1.0.0",
"tslib": "^1.10.0", "tslib": "^2.4.0",
"zone.js": "~0.10.2" "url": "^0.11.0",
"util": "^0.12.4",
"zone.js": "~0.11.4"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "~0.901.0", "@angular-builders/custom-webpack": "^14",
"@angular-devkit/build-ng-packagr": "~0.901.0", "@angular-devkit/build-angular": "^14.1.3",
"@angular/cli": "^9.1.0", "@angular/cli": "^14.1.3",
"@angular/compiler-cli": "~9.1.0", "@angular/compiler-cli": "^14.1.3",
"@angular/language-service": "~9.1.0", "@angular/language-service": "^14.1.3",
"@angular/localize": "^14.1.3",
"@types/arcgis-rest-api": "^10.4.5",
"@types/jasmine": "~2.8.8", "@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "^2.0.9",
"@types/node": "^12.11.1", "@types/node": "^12.20.15",
"codelyzer": "^5.1.2", "codelyzer": "^0.0.28",
"jasmine-core": "~2.99.1", "jasmine-core": "^4.3.0",
"jasmine-spec-reporter": "~4.2.1", "jasmine-spec-reporter": "^7.0.0",
"karma": "^5.0.2", "karma": "^6.3.20",
"karma-chrome-launcher": "~2.2.0", "karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~2.0.1", "karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "~1.1.2", "karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^0.2.2", "karma-jasmine-html-reporter": "^2.0.0",
"ng-packagr": "^9.0.0", "ng-packagr": "^14.1.0",
"protractor": "^5.4.4", "protractor": "~7.0.0",
"ts-node": "^8.8.1", "ts-node": "^8.8.1",
"tslint": "~5.11.0", "tslint": "~6.1.0",
"typescript": "~3.8.3" "typescript": "~4.6.4"
} }
} }
+1 -1
View File
@@ -4,7 +4,7 @@
"lib": { "lib": {
"entryFile": "src/public-api.ts" "entryFile": "src/public-api.ts"
}, },
"whitelistedNonPeerDependencies": [ "allowedNonPeerDependencies": [
"." "."
] ]
} }
+9 -1
View File
@@ -1,5 +1,13 @@
{ {
"name": "@farmmaps/common-map", "name": "@farmmaps/common-map",
"version": "0.0.1", "version": "0.0.1",
"lockfileVersion": 1 "lockfileVersion": 1,
"requires": true,
"dependencies": {
"tslib": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
"integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ=="
}
}
} }
+12 -10
View File
@@ -1,18 +1,20 @@
{ {
"name": "@farmmaps/common-map", "name": "@farmmaps/common-map",
"version": "0.0.1", "version": "2.0.0",
"publishConfig": { "publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": { "peerDependencies": {
"@angular/core": "^9.1.0", "@angular/core": ">=14.0.0",
"ngrx-store-localstorage": "^9.0", "ngrx-store-localstorage": ">=14.0.0",
"@ngrx/effects": "^9.0", "@ngrx/effects": ">=14.0.0",
"@ngrx/router-store": "^9.0", "@ngrx/router-store":">=14.0.0",
"@ngrx/store": "^9.0", "@ngrx/store":">=14.0.0",
"tassign": "^1.0.0", "tassign": ">=1.0.0",
"@farmmaps/common": ">=0.0.1-prerelease.308 <0.0.1", "ngx-openlayers": ">=1.0.0-next.19",
"ngx-openlayers": "1.0.0-next.13", "ol": ">=6.8.1"
"ol": "6.1.1"
} }
} }
@@ -2,20 +2,26 @@ import { Action } from '@ngrx/store';
import { IMapState } from '../models/map.state'; import { IMapState } from '../models/map.state';
import { IItemLayer } from '../models/item.layer'; import { IItemLayer } from '../models/item.layer';
import { ILayervalue } from '../models/layer.value';
import { IQueryState } from '@farmmaps/common'; import { IQueryState } from '@farmmaps/common';
import { IItem } from '@farmmaps/common'; import { IItem } from '@farmmaps/common';
import { Feature,Style } from 'ol'; import { Feature } from 'ol';
import { Style } from 'ol/style';
import { Geometry } from 'ol/geom';
import { IPeriodState } from '../models/period.state';
export const SETSTATE = '[Map] SetState'; export const SETSTATE = '[Map] SetState';
export const SETMAPSTATE = '[Map] MapState'; export const SETMAPSTATE = '[Map] MapState';
export const SETVIEWEXTENT = '[Map] SetViewExtent'; export const SETVIEWEXTENT = '[Map] SetViewExtent';
export const INIT = '[Map] Init'; export const INIT = '[Map] Init';
export const SETPARENT = '[Map] SetParent'; export const SETPARENT = '[Map] SetParent';
export const SETPERIOD = '[Map] SetPeriod';
export const STARTSEARCH = '[Map] StartSearch'; export const STARTSEARCH = '[Map] StartSearch';
export const STARTSEARCHSUCCESS = '[Map] StartSearchSuccess'; export const STARTSEARCHSUCCESS = '[Map] StartSearchSuccess';
export const SELECTFEATURE = '[Map] SelectFeature'; export const SELECTFEATURE = '[Map] SelectFeature';
export const SELECTITEM = '[Map] SelectItem'; export const SELECTITEM = '[Map] SelectItem';
export const SELECTITEMSUCCESS = '[Map] SelectItemSuccess'; export const SELECTITEMSUCCESS = '[Map] SelectItemSuccess';
export const SETSELECTEDITEMLAYER = '[Map] SetSelectedItemLayer';
export const SELECTTEMPORALITEMSSUCCESS = '[Map] SelectTemporalItemsSuccess'; export const SELECTTEMPORALITEMSSUCCESS = '[Map] SelectTemporalItemsSuccess';
export const NEXTTEMPORAL = '[Map] NextTemporal'; export const NEXTTEMPORAL = '[Map] NextTemporal';
export const PREVIOUSTEMPORAL = '[Map] PreviousTemporal'; export const PREVIOUSTEMPORAL = '[Map] PreviousTemporal';
@@ -32,6 +38,7 @@ export const SETVISIBILITY = '[Map] SetVisibility';
export const SETOPACITY = '[Map] SetOpacity'; export const SETOPACITY = '[Map] SetOpacity';
export const SETLAYERINDEX = '[Map] SetLayerIndex'; export const SETLAYERINDEX = '[Map] SetLayerIndex';
export const REMOVELAYER = '[Map] RemoveLayer'; export const REMOVELAYER = '[Map] RemoveLayer';
export const CLEARLAYERS = '[Map] ClearLayers';
export const LOADBASELAYERS = '[Map] LoadLayers'; export const LOADBASELAYERS = '[Map] LoadLayers';
export const LOADBASELAYERSSUCCESS = '[Map] LoadLayersSuccess'; export const LOADBASELAYERSSUCCESS = '[Map] LoadLayersSuccess';
export const SELECTBASELAYER = '[Map] SelectBaseLayers'; export const SELECTBASELAYER = '[Map] SelectBaseLayers';
@@ -42,6 +49,14 @@ export const SETSTYLE = '[Map] SetStyle';
export const SHOWLAYERSWITCHER = '[Map] ShowLayerSwitcher'; export const SHOWLAYERSWITCHER = '[Map] ShowLayerSwitcher';
export const CLEAR = '[Map] Clear'; export const CLEAR = '[Map] Clear';
export const SETREPLACEURL = '[Map] SetReplaceUrl'; export const SETREPLACEURL = '[Map] SetReplaceUrl';
export const SETFEATURES = '[Map] SetFeatures'
export const SETLAYERVALUESLOCATION = '[Map] SetLayerValuesLocation'
export const TOGGLELAYERVALUESENABLED = '[Map] ToggleLayerValuesEnabled'
export const GETLAYERVALUE = '[Map] GetLayerValue'
export const GETLAYERVALUESUCCESS = '[Map] GetLayerValueSuccess'
export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide'
export const SETVIEWSTATE = '[Map] SetViewState'
export class Clear implements Action { export class Clear implements Action {
readonly type = CLEAR; readonly type = CLEAR;
@@ -78,6 +93,12 @@ export class SetParent implements Action {
constructor(public parentCode:string) { } constructor(public parentCode:string) { }
} }
export class SetPeriod implements Action {
readonly type = SETPERIOD;
constructor(public period:IPeriodState) { }
}
export class StartSearch implements Action { export class StartSearch implements Action {
readonly type = STARTSEARCH; readonly type = STARTSEARCH;
@@ -87,13 +108,13 @@ export class StartSearch implements Action {
export class StartSearchSuccess implements Action { export class StartSearchSuccess implements Action {
readonly type = STARTSEARCHSUCCESS; readonly type = STARTSEARCHSUCCESS;
constructor(public features: Array<Feature>, public query:IQueryState,public setStateCount:number) { } constructor(public features: Array<Feature<Geometry>>, public query:IQueryState) { }
} }
export class SelectFeature implements Action { export class SelectFeature implements Action {
readonly type = SELECTFEATURE; readonly type = SELECTFEATURE;
constructor(public feature:Feature) { } constructor(public feature:Feature<Geometry>) { }
} }
export class SelectItem implements Action { export class SelectItem implements Action {
@@ -135,13 +156,13 @@ export class SelectTemporal implements Action {
export class AddFeatureSuccess implements Action { export class AddFeatureSuccess implements Action {
readonly type = ADDFEATURESUCCESS; readonly type = ADDFEATURESUCCESS;
constructor(public feature: Feature) { } constructor(public feature: Feature<Geometry>) { }
} }
export class UpdateFeatureSuccess implements Action { export class UpdateFeatureSuccess implements Action {
readonly type = UPDATEFEATURESUCCESS; readonly type = UPDATEFEATURESUCCESS;
constructor(public feature: Feature) { } constructor(public feature: Feature<Geometry>) { }
} }
export class ExpandSearch implements Action { export class ExpandSearch implements Action {
@@ -180,6 +201,12 @@ export class AddLayer implements Action {
constructor(public item:IItem,public layerIndex=-1) { } constructor(public item:IItem,public layerIndex=-1) { }
} }
export class SetSelectedItemLayer implements Action {
readonly type = SETSELECTEDITEMLAYER;
constructor(public item:IItem,public layerIndex=-1) { }
}
export class SetVisibility implements Action { export class SetVisibility implements Action {
readonly type = SETVISIBILITY; readonly type = SETVISIBILITY;
@@ -204,6 +231,12 @@ export class RemoveLayer implements Action {
constructor(public itemLayer: IItemLayer) { } constructor(public itemLayer: IItemLayer) { }
} }
export class ClearLayers implements Action {
readonly type = CLEARLAYERS;
constructor() { }
}
export class LoadBaseLayers implements Action { export class LoadBaseLayers implements Action {
readonly type = LOADBASELAYERS; readonly type = LOADBASELAYERS;
@@ -237,13 +270,13 @@ export class ZoomToExtent implements Action {
export class DoQuery implements Action { export class DoQuery implements Action {
readonly type = DOQUERY; readonly type = DOQUERY;
constructor(public query:IQueryState) { } constructor(public query:IQueryState,public replace:boolean = false) { }
} }
export class SetStyle implements Action { export class SetStyle implements Action {
readonly type = SETSTYLE; readonly type = SETSTYLE;
constructor(public itemType:string,public style: Style | (Feature)) { } constructor(public itemType:string,public style: Style | ((feature:Feature<Geometry>) => Style )) { }
} }
export class ShowLayerSwitcher implements Action { export class ShowLayerSwitcher implements Action {
@@ -256,6 +289,46 @@ export class SetReplaceUrl implements Action {
constructor(public replaceUrl:boolean) {} constructor(public replaceUrl:boolean) {}
} }
export class SetFeatures implements Action {
readonly type = SETFEATURES;
constructor(public features: Array<Feature<Geometry>>) { }
}
export class SetLayerValuesLocation implements Action {
readonly type = SETLAYERVALUESLOCATION;
constructor(public x:number, public y:number) { }
}
export class ToggleLayerValuesEnabled implements Action {
readonly type = TOGGLELAYERVALUESENABLED;
constructor() { }
}
export class GetLayerValue implements Action {
readonly type = GETLAYERVALUE;
constructor(public itemLayer:IItemLayer,public x:number,public y:number) { }
}
export class GetLayerValueSuccess implements Action {
readonly type = GETLAYERVALUESUCCESS;
constructor(public layervalue:ILayervalue) { }
}
export class ToggleShowDataLayerSlide implements Action {
readonly type = TOGGLESHOWDATALAYERSLIDE;
constructor() {}
}
export class SetViewState implements Action {
readonly type = SETVIEWSTATE;
constructor(public enabled:boolean) {}
}
export type Actions = SetMapState export type Actions = SetMapState
| Init | Init
| Clear | Clear
@@ -278,6 +351,7 @@ export type Actions = SetMapState
| SetTimeSpan | SetTimeSpan
| AddLayer | AddLayer
| RemoveLayer | RemoveLayer
| ClearLayers
| SetVisibility | SetVisibility
| SetOpacity | SetOpacity
| SetLayerIndex | SetLayerIndex
@@ -291,5 +365,14 @@ export type Actions = SetMapState
| DoQuery | DoQuery
| SetStyle | SetStyle
| ShowLayerSwitcher | ShowLayerSwitcher
| SetReplaceUrl; | SetReplaceUrl
| SetFeatures
| SetSelectedItemLayer
| SetLayerValuesLocation
| ToggleLayerValuesEnabled
| GetLayerValueSuccess
| GetLayerValue
| SetPeriod
| ToggleShowDataLayerSlide
| SetViewState;
@@ -5,21 +5,21 @@ import { AuthGuard } from '@farmmaps/common';
const routes = [ const routes = [
{ {
path: '', children: [ path: '',
{ component: MapComponent
path: '',
component: MapComponent
}
]
}, },
{ {
path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer/:queryState', children: [ path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer',
{ component: MapComponent
path: '', },
component: MapComponent {
} path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer/:queryState',
] component: MapComponent
} },
{
path: ':queryState',
component: MapComponent
}
]; ];
@NgModule({ @NgModule({
@@ -18,13 +18,12 @@ import * as mapEffects from './effects/map.effects';
import { IMapState} from './models/map.state'; import { IMapState} from './models/map.state';
import { ISelectedFeatures } from './models/selected.features'; import { ISelectedFeatures } from './models/selected.features';
import { IItemLayer } from './models/item.layer'; import { IItemLayer,ItemLayer,ITemporalItemLayer,TemporalItemLayer } from './models/item.layer';
import { ItemLayer} from './models/item.layer'; import { IClickedFeature } from './models/clicked.feature';
import { IPeriodState } from './models/period.state'; import { IPeriodState } from './models/period.state';
// components // components
import { GpsLocation} from './components/aol/gps-location/gps-location.component'; import { GpsLocation} from './components/aol/gps-location/gps-location.component';
//import {Switch2D3DComponent } from './components/aol/switch2d3d/switch2d3d.component';
import {FeatureListFeatureCropfieldComponent } from './components/feature-list-feature-cropfield/feature-list-feature-cropfield.component'; import {FeatureListFeatureCropfieldComponent } from './components/feature-list-feature-cropfield/feature-list-feature-cropfield.component';
import { FeatureListFeatureCroppingschemeComponent} from './components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component'; import { FeatureListFeatureCroppingschemeComponent} from './components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component';
import { ItemWidgetListComponent} from './components/item-widget-list/item-widget-list.component'; import { ItemWidgetListComponent} from './components/item-widget-list/item-widget-list.component';
@@ -60,6 +59,7 @@ import { LayerVectorImageComponent } from './components/aol/layer-vector-image/l
import {FeatureIconService} from './services/feature-icon.service'; import {FeatureIconService} from './services/feature-icon.service';
import { GeolocationService } from './services/geolocation.service'; import { GeolocationService } from './services/geolocation.service';
import {DeviceOrientationService} from './services/device-orientation.service'; import {DeviceOrientationService} from './services/device-orientation.service';
import { TemporalService} from './services/temporal.service';
import { WidgetStatusComponent } from './components/widget-status/widget-status.component'; import { WidgetStatusComponent } from './components/widget-status/widget-status.component';
import { ForChild} from './components/for-item/for-child.decorator'; import { ForChild} from './components/for-item/for-child.decorator';
import {ForItemType } from './components/for-item/for-itemtype.decorator'; import {ForItemType } from './components/for-item/for-itemtype.decorator';
@@ -67,6 +67,12 @@ import { ForSourceTask} from './components/for-item/for-sourcetask.decorator';
import { ForPackage } from './components/for-item/for-package.decorator'; import { ForPackage } from './components/for-item/for-package.decorator';
import { PanToLocation} from './components/aol/pan-to-location/pan-to-location.component'; import { PanToLocation} from './components/aol/pan-to-location/pan-to-location.component';
import {LayerSwitcher} from './components/layer-switcher/layer-switcher.component'; import {LayerSwitcher} from './components/layer-switcher/layer-switcher.component';
import {HistogramDetailsComponent} from './components/legend/histogram-details/histogram-details.component';
import {StatisticsDetailsComponent} from './components/legend/statistics-details/statistics-details.component';
import { ifZoomToShowDirective} from './components/if-zoom-to-show/if-zoom-to-show.directive';
import { ZoomToShowAlert} from './components/zoom-to-show-alert/zoom-to-show-alert.component';
import { LayerValuesComponent } from './components/aol/layer-values/layer-values.component';
import { GeometryThumbnailComponent } from './components/feature-thumbnail/feature-thumbnail.component';
export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> { export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> {
const r = function(state, action) { const r = function(state, action) {
@@ -77,9 +83,17 @@ export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any
if(ms) { if(ms) {
r2["mapState"] = JSON.parse(ms); r2["mapState"] = JSON.parse(ms);
} }
let sp = window.localStorage.getItem(MODULE_NAME+"_searchPeriod");
if(sp) {
let p = JSON.parse(sp);
r2["period"] = { startDate: new Date(Date.parse(p.startDate)),endDate:new Date(Date.parse(p.endDate))};
}
} }
if(action.type == "[Map] MapState" || action.type == "[Map] SetState") { if(action.type == "[Map] MapState" || action.type == "[Map] SetState") {
window.localStorage.setItem(MODULE_NAME + "_mapState",JSON.stringify(r2["mapState"])); window.localStorage.setItem(MODULE_NAME + "_mapState",JSON.stringify(r2["mapState"]));
}
if(action.type == "[Map] SetPeriod" ) {
window.localStorage.setItem(MODULE_NAME + "_searchPeriod",JSON.stringify(r2["period"]));
} }
return r2; return r2;
@@ -137,6 +151,7 @@ export {
FeatureIconService, FeatureIconService,
GeolocationService, GeolocationService,
DeviceOrientationService, DeviceOrientationService,
TemporalService,
IMapState, IMapState,
ISelectedFeatures, ISelectedFeatures,
IItemLayer, IItemLayer,
@@ -145,134 +160,130 @@ export {
ForChild, ForChild,
ForItemType, ForItemType,
ForSourceTask, ForSourceTask,
ForPackage ForPackage ,
ITemporalItemLayer,
TemporalItemLayer,
ifZoomToShowDirective,
ZoomToShowAlert,
IClickedFeature,
GeometryThumbnailComponent
} }
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
AngularOpenlayersModule, AngularOpenlayersModule,
MapRoutingModule, MapRoutingModule,
StoreModule.forFeature(MODULE_NAME, mapReducers.reducer,{metaReducers:metaReducers}), StoreModule.forFeature(MODULE_NAME, mapReducers.reducer, { metaReducers: metaReducers }),
EffectsModule.forFeature([mapEffects.MapEffects]), EffectsModule.forFeature([mapEffects.MapEffects]),
NgbModule, NgbModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
AppCommonModule AppCommonModule
], ],
declarations: [ declarations: [
ZoomToExtentComponent, ZoomToExtentComponent,
ItemVectorSourceComponent, ItemVectorSourceComponent,
ItemLayersComponent, ItemLayersComponent,
FileDropTargetComponent, FileDropTargetComponent,
MapComponent, MapComponent,
MetaDataModalComponent, MetaDataModalComponent,
RotationResetComponent, RotationResetComponent,
MapSearchComponent, MapSearchComponent,
SelectPeriodModalComponent, SelectPeriodModalComponent,
LayerListComponent, LayerListComponent,
LegendComponent, LegendComponent,
LayerVectorImageComponent, LayerVectorImageComponent,
FeatureListComponent, FeatureListComponent,
WidgetHostDirective, WidgetHostDirective,
FeatureListContainerComponent, FeatureListContainerComponent,
FeatureListCroppingschemeComponent, FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent, FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent, FeatureListFeatureContainerComponent,
FeatureListFeatureComponent, FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent, FeatureListFeatureCroppingschemeComponent,
FeatureListFeatureCropfieldComponent, FeatureListFeatureCropfieldComponent,
SelectedItemContainerComponent, SelectedItemContainerComponent,
SelectedItemComponent, SelectedItemComponent,
SelectedItemCropfieldComponent, SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent, SelectedItemGeotiffComponent,
SelectedItemTemporalComponent, SelectedItemTemporalComponent,
SelectedItemShapeComponent, SelectedItemShapeComponent,
ItemListItemComponent, ItemListItemComponent,
ItemListItemContainerComponent, ItemListItemContainerComponent,
ItemListComponent, ItemListComponent,
ItemWidgetListComponent, ItemWidgetListComponent,
WidgetStatusComponent, WidgetStatusComponent,
GpsLocation, GpsLocation,
PanToLocation, PanToLocation,
LayerSwitcher LayerSwitcher,
], HistogramDetailsComponent,
entryComponents: [ StatisticsDetailsComponent,
FeatureListComponent, ifZoomToShowDirective,
FeatureListCroppingschemeComponent, ZoomToShowAlert,
FeatureListCropfieldComponent, LayerValuesComponent,
FeatureListFeatureComponent, GeometryThumbnailComponent
FeatureListFeatureCroppingschemeComponent, ],
FeatureListFeatureCropfieldComponent, exports: [
SelectedItemComponent, ItemVectorSourceComponent,
SelectedItemCropfieldComponent, ItemLayersComponent,
SelectedItemGeotiffComponent, FileDropTargetComponent,
SelectedItemTemporalComponent, MetaDataModalComponent,
SelectedItemShapeComponent, MapComponent,
ItemListComponent, GpsLocation,
ItemListItemComponent, PanToLocation,
], LayerSwitcher,
exports: [ FeatureListFeatureComponent,
ItemVectorSourceComponent, FeatureListFeatureCropfieldComponent,
ItemLayersComponent, FeatureListFeatureCroppingschemeComponent,
FileDropTargetComponent, SelectedItemContainerComponent,
MetaDataModalComponent, SelectedItemComponent,
MapComponent, SelectedItemCropfieldComponent,
GpsLocation, SelectedItemGeotiffComponent,
PanToLocation, SelectedItemTemporalComponent,
LayerSwitcher, SelectedItemShapeComponent,
FeatureListFeatureComponent, ItemListItemComponent,
FeatureListFeatureCropfieldComponent, ItemListItemContainerComponent,
FeatureListFeatureCroppingschemeComponent, ItemListComponent,
SelectedItemContainerComponent, ItemWidgetListComponent,
SelectedItemComponent, WidgetStatusComponent,
SelectedItemCropfieldComponent, RotationResetComponent,
SelectedItemGeotiffComponent, MapSearchComponent,
SelectedItemTemporalComponent, SelectPeriodModalComponent,
SelectedItemShapeComponent, LayerListComponent,
ItemListItemComponent, LegendComponent,
ItemListItemContainerComponent, LayerVectorImageComponent,
ItemListComponent, FeatureListComponent,
ItemWidgetListComponent, WidgetHostDirective,
WidgetStatusComponent, FeatureListContainerComponent,
RotationResetComponent, FeatureListCroppingschemeComponent,
MapSearchComponent, FeatureListCropfieldComponent,
SelectPeriodModalComponent, FeatureListFeatureContainerComponent,
LayerListComponent, ZoomToExtentComponent,
LegendComponent, ifZoomToShowDirective,
LayerVectorImageComponent, ZoomToShowAlert,
FeatureListComponent, GeometryThumbnailComponent
WidgetHostDirective, ],
FeatureListContainerComponent, providers: [
FeatureListCroppingschemeComponent, FeatureIconService,
FeatureListCropfieldComponent, GeolocationService,
FeatureListFeatureContainerComponent, DeviceOrientationService,
ZoomToExtentComponent TemporalService,
] { provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
{ provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemTemporalComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemShapeComponent, multi: true },
{ provide: AbstractItemListItemComponent, useClass: ItemListItemComponent, multi: true },
{ provide: AbstractItemListComponent, useClass: ItemListComponent, multi: true }
]
}) })
export class AppCommonMapModule { export class AppCommonMapModule {
static forRoot(): ModuleWithProviders<AppCommonMapModule> {
return {
ngModule: AppCommonMapModule,
providers: [
FeatureIconService,
GeolocationService,
DeviceOrientationService,
{ provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
{ provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemTemporalComponent, multi: true },
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemShapeComponent, multi: true },
{ provide: AbstractItemListItemComponent, useClass: ItemListItemComponent, multi: true },
{ provide: AbstractItemListComponent, useClass: ItemListComponent, multi: true }
]
};
}
} }
@@ -4,7 +4,7 @@ import { MapComponent } from 'ngx-openlayers';
import * as proj from 'ol/proj'; import * as proj from 'ol/proj';
import {Point,Geometry} from 'ol/geom'; import {Point,Geometry} from 'ol/geom';
import { GeoJSON } from 'ol/format'; import { GeoJSON } from 'ol/format';
import { Feature } from 'ol'; import { Feature} from 'ol';
export interface IDroppedFile { export interface IDroppedFile {
files: any, files: any,
@@ -21,7 +21,7 @@ export class FileDropTargetComponent implements OnInit, OnDestroy {
element: Element; element: Element;
@Output() onFileDropped = new EventEmitter<IDroppedFile>(); @Output() onFileDropped = new EventEmitter<IDroppedFile>();
@Input() parentCode: string; @Input() parentCode: string;
@Input() features: Array<Feature>; @Input() features: Array<Feature<Geometry>>;
constructor(private map: MapComponent) { constructor(private map: MapComponent) {
} }
@@ -6,8 +6,8 @@
<stop offset="100%" class="stop2" /> <stop offset="100%" class="stop2" />
</linearGradient> </linearGradient>
</defs> </defs>
<circle class="tolerance" cx="500" cy="500" stroke="none" [attr.r]="locTolerancePixels" /> <circle class="tolerance hidden" [ngClass]="{'hidden':!showTolerance}" cx="500" cy="500" stroke="none" [attr.r]="locTolerancePixels" />
<path *ngIf="showHeading" class="heading" stroke="none" [attr.d]="path" fill="url(#grad1)" [attr.transform]="rotate"></path> <path class="heading hidden" [ngClass]="{'hidden': !showHeading }" stroke="none" [attr.d]="path" fill="url(#grad1)" [attr.transform]="rotate"></path>
<circle class="border" cx="500" cy="500" r="7" stroke="none" /> <circle class="border" cx="500" cy="500" r="7" stroke="none" />
<circle class="center" cx="500" cy="500" r="6" stroke="none" /> <circle class="center" cx="500" cy="500" r="6" stroke="none" />
@@ -9,11 +9,19 @@
stroke-width: 0; stroke-width: 0;
} }
.heading.hidden {
display: none;
}
.tolerance { .tolerance {
fill: $primary; fill: $primary;
fill-opacity:0.4; fill-opacity:0.4;
} }
.tolerance.hidden {
display: none
}
.border { .border {
fill: $white; fill: $white;
} }
@@ -1,6 +1,6 @@
import { Component, OnInit, Input, ViewChild, ElementRef, OnChanges, SimpleChanges } from '@angular/core'; import { Component, OnInit, Input, ViewChild, ElementRef, OnChanges, SimpleChanges ,Host} from '@angular/core';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from 'ngx-openlayers';
import Overlay from 'ol/Overlay'; import Overlay from 'ol/Overlay';
import { fromLonLat, toLonLat } from 'ol/proj'; import { fromLonLat, toLonLat } from 'ol/proj';
@@ -13,16 +13,18 @@ export class GpsLocation implements OnInit,OnChanges{
@Input() enable:boolean; @Input() enable:boolean;
public instance: Overlay; public instance: Overlay;
@Input() position: Position; @Input() position: GeolocationPosition;
@Input() location: number[]=[0,0]; @Input() location: number[]=[0,0];
@Input() locationTolerance: number = 0; @Input() locationTolerance: number = 0;
@Input() showHeading: boolean = false; @Input() showHeading: boolean = false;
@Input() showTolerance: boolean = false;
@Input() heading: number = 0; @Input() heading: number = 0;
@Input() headingTolerance: number = 0; @Input() headingTolerance: number = 0;
public locTolerancePixels: number = 0; public locTolerancePixels: number = 0;
public path: string = ""; public path: string = "";
public rotate: string = ""; public rotate: string = "";
private resolution: number = 0; private resolution: number = 0;
initialized:boolean = false;
@ViewChild('location', { static: true }) locationElement: ElementRef; @ViewChild('location', { static: true }) locationElement: ElementRef;
constructor(private map: MapComponent) { constructor(private map: MapComponent) {
@@ -50,16 +52,17 @@ export class GpsLocation implements OnInit,OnChanges{
this.rotate = "rotate(" + Math.round(this.heading) + " 500 500)"; this.rotate = "rotate(" + Math.round(this.heading) + " 500 500)";
this.locTolerancePixels = this.locationTolerance; this.locTolerancePixels = this.locationTolerance;
this.map.instance.addOverlay(this.instance); this.map.instance.addOverlay(this.instance);
this.map.instance.getView().on('change:resolution', (evt) => { this.map.instance.getView().on('change:resolution', (evt:any) => {
this.resolution = evt.target.get('resolution'); this.resolution = evt.target.get('resolution');
this.recalcLocationTolerance(); this.recalcLocationTolerance();
}); });
this.initialized = true;
} }
ngOnChanges(changes: SimpleChanges) { ngOnChanges(changes: SimpleChanges) {
if (changes.position && this.instance) { if (changes.position && this.instance) {
var p = changes.position.currentValue as Position; var p = changes.position.currentValue as GeolocationPosition;
if(p) { if(p && this.initialized) {
this.instance.setPosition(fromLonLat([p.coords.longitude, p.coords.latitude])); this.instance.setPosition(fromLonLat([p.coords.longitude, p.coords.latitude]));
this.locationTolerance = p.coords.accuracy; this.locationTolerance = p.coords.accuracy;
this.recalcLocationTolerance(); this.recalcLocationTolerance();
@@ -1,23 +1,24 @@
import { Component, Host, Input, Output, EventEmitter, Optional, QueryList, OnInit, AfterViewInit, OnChanges, SimpleChanges, SkipSelf, forwardRef, Inject, InjectionToken } from '@angular/core'; import { Component, Host, Input, Output, EventEmitter,OnDestroy, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { HttpClient } from "@angular/common/http"; import { LayerGroupComponent, MapComponent } from 'ngx-openlayers';
import { LayerVectorComponent, LayerTileComponent, LayerGroupComponent, MapComponent } from 'ngx-openlayers';
import { ItemService,IItem,AppConfig } from '@farmmaps/common'; import { ItemService,IItem,AppConfig } from '@farmmaps/common';
import { IItemLayer,ItemLayer, ITemporalItemLayer} from '../../../models/item.layer'; import { IItemLayer, ITemporalItemLayer} from '../../../models/item.layer';
import { ILayerData} from '../../../models/layer.data'; import { ILayerData} from '../../../models/layer.data';
import { IRenderoutputTiles,IRenderoutputImage,IGradientstop,ILayer,IHistogram} from '../../../models/color.map'; import { IRenderoutputTiles,IRenderoutputImage,IGradientstop,ILayer,IHistogram,IColor} from '../../../models/color.map';
import {Extent} from 'ol/extent'; import {Extent} from 'ol/extent';
import Projection from 'ol/proj/Projection'; import Projection from 'ol/proj/Projection';
import * as proj from 'ol/proj'; import * as proj from 'ol/proj';
import * as loadingstrategy from 'ol/loadingstrategy'; import * as loadingstrategy from 'ol/loadingstrategy';
import * as style from 'ol/style'; import * as style from 'ol/style';
import {Tile,Layer,Image} from 'ol/layer'; import {Tile,Layer,Image} from 'ol/layer';
import {XYZ,ImageStatic,OSM,BingMaps,TileWMS,TileArcGISRest} from 'ol/source'; import {XYZ,ImageStatic,OSM,BingMaps,TileWMS,TileArcGISRest,TileJSON,Source} from 'ol/source';
import {Vector as VectorSource} from 'ol/source'; import {Vector as VectorSource} from 'ol/source';
import { Vector as VectorLayer } from 'ol/layer'; import { Vector as VectorLayer } from 'ol/layer';
import { VectorImage as VectorImageLayer } from 'ol/layer';
import VectorTileSource from 'ol/source/VectorTile'; import VectorTileSource from 'ol/source/VectorTile';
import VectorTileLayer from 'ol/layer/VectorTile'; import VectorTileLayer from 'ol/layer/VectorTile';
import {GeoJSON,MVT} from 'ol/format'; import {GeoJSON,MVT} from 'ol/format';
import { from } from 'rxjs'; import { Geometry } from 'ol/geom';
import BaseLayer from 'ol/layer/Base';
@Component({ @Component({
selector: 'fm-map-item-layers', selector: 'fm-map-item-layers',
@@ -27,12 +28,20 @@ import { from } from 'rxjs';
] ]
}) })
export class ItemLayersComponent extends LayerGroupComponent implements OnChanges, OnInit { export class ItemLayersComponent extends LayerGroupComponent implements OnChanges, OnInit,OnDestroy {
@Input() itemLayers: IItemLayer[]; @Input() itemLayers: IItemLayer[];
@Input() itemLayer: IItemLayer; @Input() itemLayer: IItemLayer;
@Output() onFeatureSelected: EventEmitter<any> = new EventEmitter<any>();
@Output() onFeatureHover: EventEmitter<any> = new EventEmitter<any>();
@Output() onPrerender: EventEmitter<any> = new EventEmitter<any>();
private _apiEndPoint: string; private _apiEndPoint: string;
private initialized:boolean = false;
constructor(private itemService: ItemService, @Host() private map: MapComponent, public appConfig: AppConfig) { private mapEventHandlerInstalled = false;
private topLayerPrerenderEventhandlerInstalled = false;
private selectedFeatures = {};
private selectionLayer:Layer<Source> = null;
constructor(private itemService: ItemService, private map: MapComponent, public appConfig: AppConfig) {
super(map); super(map);
this._apiEndPoint = appConfig.getConfig("apiEndPoint"); this._apiEndPoint = appConfig.getConfig("apiEndPoint");
} }
@@ -48,8 +57,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return "#" + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b) + this.componentToHex(a); return "#" + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b) + this.componentToHex(a);
} }
getColorFromGradient(layer: ILayer, feature): style.Style { getColorFromGradient(layer: ILayer, value: number): IColor {
var value = feature.get(layer.name);
var gradient: IGradientstop[] = layer.renderer.colorMap.gradient; var gradient: IGradientstop[] = layer.renderer.colorMap.gradient;
var histogram: IHistogram = layer.renderer.band.histogram; var histogram: IHistogram = layer.renderer.band.histogram;
var index = (value - histogram.min) / histogram.max; var index = (value - histogram.min) / histogram.max;
@@ -62,32 +70,63 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
} }
var i = index - min.relativestop; var i = index - min.relativestop;
var size = max.relativestop - min.relativestop; var size = max.relativestop - min.relativestop;
var alpha = Math.round( min.color.alpha + ((max.color.alpha - min.color.alpha) * i / size)); var alpha = Math.round(min.color.alpha + ((max.color.alpha - min.color.alpha) * i / size));
var red = Math.round(min.color.red + ((max.color.red - min.color.red) * i / size)); var red = Math.round(min.color.red + ((max.color.red - min.color.red) * i / size));
var green = Math.round(min.color.green + ((max.color.green - min.color.green) * i / size)); var green = Math.round(min.color.green + ((max.color.green - min.color.green) * i / size));
var blue = Math.round(min.color.blue + ((max.color.blue - min.color.blue) * i / size)); var blue = Math.round(min.color.blue + ((max.color.blue - min.color.blue) * i / size));
return new style.Style( return { alpha: alpha, red: red, green: green, blue: blue };
{
image: new style.Circle({
fill: new style.Fill({
color: this.rgbaToHex(red,green,blue,alpha)
}),
radius: 3
}),
fill: new style.Fill({
color: this.rgbaToHex(red, green, blue, alpha)
}),
stroke: new style.Stroke({
color: this.rgbaToHex(red, green, blue, alpha),
width: 1.25
}),
});
} }
createGeotiffLayer(item:IItem,itemLayer:IItemLayer):Layer { getColorForValue(layer: ILayer, value: number): IColor {
var color: IColor = { alpha:0,red:0,green:0,blue:0};
if(layer.renderer.colorMap.entries.length>0) {
color=layer.renderer.colorMap.noValue;
}
layer.renderer.colorMap.entries.forEach((entry) => {
if(entry.value==value) {
color =entry.color;
return;
}
});
return color;
}
getColor(item: IItem, layer: ILayer, feature): style.Style {
var value = layer.indexKey ? feature.get(layer.indexKey) : feature.get(layer.name);
var key = item.code + "_" + value;
if (!this.styleCache[key]) {
var color: IColor;
if(layer.renderer.colorMap.colormapType == "manual") {
color = this.getColorForValue(layer, value);
} else {
color = this.getColorFromGradient(layer, value);
}
this.styleCache[key] = new style.Style(
{
image: new style.Circle({
fill: new style.Fill({
color: this.rgbaToHex(color.red, color.green, color.blue, color.alpha)
}),
radius: 3
}),
fill: new style.Fill({
color: this.rgbaToHex(color.red, color.green, color.blue, color.alpha)
}),
stroke: new style.Stroke({
color: this.rgbaToHex(color.red, color.green, color.blue, 255),
width: 1.25
}),
});
}
return this.styleCache[key];
}
createGeotiffLayer(item:IItem,itemLayer:IItemLayer):Layer<Source> {
var layerIndex = -1; var layerIndex = -1;
var layer: Layer = null; var layer: Layer<Source> = null;
layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : item.data.layers[0].index; layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : item.data.layers[0].index;
let source = new XYZ({ maxZoom: 19, minZoom: 1, url: `${this._apiEndPoint}/api/v1/items/${item.code}/tiles/${layerIndex}/{z}/{x}/{y}.png?v=${Date.parse(item.updated)}` }); let source = new XYZ({ maxZoom: 19, minZoom: 1, url: `${this._apiEndPoint}/api/v1/items/${item.code}/tiles/${layerIndex}/{z}/{x}/{y}.png?v=${Date.parse(item.updated)}` });
layer = new Tile({ source: source }); layer = new Tile({ source: source });
@@ -95,30 +134,25 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
var l = (data && data.layers && data.layers.length > 0) ? data.layers[0] : null; var l = (data && data.layers && data.layers.length > 0) ? data.layers[0] : null;
if (l && l.rendering && l.rendering.renderoutputType == "Tiles") { if (l && l.rendering && l.rendering.renderoutputType == "Tiles") {
var rt = l.rendering as IRenderoutputTiles; var rt = l.rendering as IRenderoutputTiles;
let source = new XYZ({ maxZoom: rt.maxzoom, minZoom: rt.minzoom, url: `${this._apiEndPoint}/api/v1/items/${item.code}/tiles/${layerIndex}/{z}/{x}/{y}.png?v=${Date.parse(item.updated)}` }); let source = new XYZ({crossOrigin: 'use-credentials', maxZoom: rt.maxzoom, minZoom: rt.minzoom, url: `${this._apiEndPoint}/api/v1/items/${item.code}/tiles/${layerIndex}/{z}/{x}/{y}.png?v=${Date.parse(item.updated)}` });
layer = new Tile({ source: source }); layer = new Tile({ source: source });
} }
if (l && l.rendering && l.rendering.renderoutputType == "Image") { if (l && l.rendering && l.rendering.renderoutputType == "Image") {
var ri = l.rendering as IRenderoutputImage; var ri = l.rendering as IRenderoutputImage;
let projection = new Projection({ let source = new ImageStatic({ imageExtent:ri.extent,projection:'EPSG:3857', crossOrigin: 'use-credentials', url: `${this._apiEndPoint}/api/v1/items/${item.code}/mapimage/${layerIndex}?v=${Date.parse(item.updated)}` });
code: 'image',
units: 'pixels',
extent: ri.extent
});
let source = new ImageStatic({ imageExtent: ri.extent, projection: projection, url: `${this._apiEndPoint}/api/v1/items/${item.code}/mapimage/${layerIndex}?v=${Date.parse(item.updated)}` });
layer = new Image({ source: source }); layer = new Image({ source: source });
} }
return layer; return layer;
} }
createShapeLayer(item:IItem,itemLayer:IItemLayer):Layer { createShapeLayer(item:IItem,itemLayer:IItemLayer):Layer<Source> {
var layerIndex = -1; var layerIndex = -1;
var layer: Layer = null; var layer: Layer<Source> = null;
layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : item.data.layers[0].index; layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : item.data.layers[0].index;
var data = item.data; var data = item.data;
var l = (data && data.layers && data.layers.length > 0) ? data.layers[0] : null; var l:ILayer = (data && data.layers && data.layers.length > 0) ? data.layers[layerIndex] : null;
if (l && l.rendering && l.rendering.renderoutputType == "VectorTiles") { if (l && l.rendering && l.rendering.renderoutputType == "VectorTiles") {
var rt = item.data.layers[layerIndex].rendering as IRenderoutputTiles; var rt = l.rendering as IRenderoutputTiles;
layer = new VectorTileLayer({ layer = new VectorTileLayer({
declutter: true, declutter: true,
source: new VectorTileSource({ source: new VectorTileSource({
@@ -128,7 +162,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
url: `${this._apiEndPoint}/api/v1/items/${item.code}/vectortiles/{z}/{x}/{y}.pbf?v=${Date.parse(item.updated)}` url: `${this._apiEndPoint}/api/v1/items/${item.code}/vectortiles/{z}/{x}/{y}.pbf?v=${Date.parse(item.updated)}`
}), }),
style: (feature) => { style: (feature) => {
return this.getColorFromGradient(l, feature); return this.getColor(item,l, feature);
} }
}) })
} else if (l && l.rendering && l.rendering.renderoutputType == "Tiles") { } else if (l && l.rendering && l.rendering.renderoutputType == "Tiles") {
@@ -146,7 +180,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
let source = new VectorSource({ let source = new VectorSource({
strategy: loadingstrategy.bbox, strategy: loadingstrategy.bbox,
loader: function (extent: Extent, resolution: number, projection: Projection) { loader: function (extent: Extent, resolution: number, projection: Projection) {
var source = this as VectorSource; var source = this as VectorSource<Geometry>;
__this.itemService.getItemFeatures(item.code, extent, projection.getCode(), layerIndex).subscribe(function (data) { __this.itemService.getItemFeatures(item.code, extent, projection.getCode(), layerIndex).subscribe(function (data) {
var features = format.readFeatures(data); var features = format.readFeatures(data);
for (let f of features) { for (let f of features) {
@@ -158,10 +192,11 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
}); });
} }
}); });
layer = new VectorLayer({ layer = new VectorImageLayer({
declutter: true,
source: source, source: source,
style: (feature) => { style: (feature) => {
var key = feature.get("color"); var key =feature.get("code") + "_" + feature.get("color");
if (!this.styleCache[key]) { if (!this.styleCache[key]) {
var color = feature.get("color"); var color = feature.get("color");
this.styleCache[key] = new style.Style( this.styleCache[key] = new style.Style(
@@ -190,12 +225,48 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
} }
}); });
} }
if(l.minzoom) {
layer.setMinZoom(l.minzoom);
}
if(l.maxzoom) {
layer.setMaxZoom(l.maxzoom);
}
return layer; return layer;
} }
createExternalLayer(item:IItem,itemLayer:IItemLayer):Layer { createSelectionLayer(itemLayer:IItemLayer):Layer<Source> {
var layerIndex = -1;
var layer: Layer<Source> = null;
layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : itemLayer.item.data.layers[0].index;
var data = itemLayer.item.data;
var l:ILayer = (data && data.layers && data.layers.length > 0) ? data.layers[layerIndex] : null;
if (l && l.rendering && l.rendering.renderoutputType == "VectorTiles") {
return new VectorTileLayer({
renderMode: 'vector',
source: (itemLayer.layer as VectorTileLayer).getSource(),
style: (feature) => {
if (feature.getId() in this.selectedFeatures) {
return new style.Style(
{
stroke: new style.Stroke({
color: 'red',
width: 2
})
}
);
}
},
minZoom: itemLayer.layer.getMinZoom(),
maxZoom: itemLayer.layer.getMaxZoom()
});
}
return null;
}
createExternalLayer(item:IItem,itemLayer:IItemLayer):Layer<Source> {
let data = item.data as ILayerData; let data = item.data as ILayerData;
var layer: Layer = null; var layer: Layer<Source> = null;
switch (data.interfaceType) { switch (data.interfaceType) {
case 'OSM': { case 'OSM': {
let source = new OSM(); let source = new OSM();
@@ -212,11 +283,32 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
layer = new Tile({ source: source }); layer = new Tile({ source: source });
break; break;
} }
case 'TileJSON': {
let source = new TileJSON(data.options);
layer = new Tile({ source: source });
break;
}
case 'TileArcGISRest': { case 'TileArcGISRest': {
let source = new TileArcGISRest(data.options); let source = new TileArcGISRest(data.options);
layer = new Tile({ source: source }); layer = new Tile({ source: source });
break; break;
} }
case 'VectorWFSJson': {
let source = new VectorSource({
format: new GeoJSON(),
url: function (extent) {
return (
data.options.url + '&srsname=' + data.projection +
'&bbox=' +
extent.join(',') +
',EPSG:3857'
);
},
strategy: loadingstrategy.bbox,
});
layer = new VectorLayer({ source: source });
break;
}
default: { default: {
break; break;
} }
@@ -224,8 +316,8 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return layer; return layer;
} }
createLayer(itemLayer: IItemLayer): Layer { createLayer(itemLayer: IItemLayer): Layer<Source> {
var layer: Layer = null; var layer: Layer<Source> = null;
var layerIndex = -1; var layerIndex = -1;
if (itemLayer.item.itemType == 'vnd.farmmaps.itemtype.geotiff.processed') { if (itemLayer.item.itemType == 'vnd.farmmaps.itemtype.geotiff.processed') {
layer = this.createGeotiffLayer(itemLayer.item,itemLayer); layer = this.createGeotiffLayer(itemLayer.item,itemLayer);
@@ -245,10 +337,58 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
ngOnInit() { ngOnInit() {
super.ngOnInit(); super.ngOnInit();
this.updateLayers(this.itemLayers); if(this.itemLayers) {
this.updateLayers(this.itemLayers);
} else if(this.itemLayer) {
if(this.getItemlayer(this.itemLayer).item.itemType == 'vnd.farmmaps.itemtype.shape.processed') {
this.installMapEventHandler();
}
this.updateLayers([this.itemLayer])
} else {
this.updateLayers([]);
}
this.initialized=true;
} }
addOrUpdateOlLayer(itemLayer:IItemLayer,index:number):Layer { installMapEventHandler() {
if(!this.mapEventHandlerInstalled) {
this.map.instance.on(['click', 'pointermove'],this.mapEventHandler);
this.mapEventHandlerInstalled=true;
}
}
unInstallMapEventHandler() {
if(this.mapEventHandlerInstalled) {
this.map.instance.un(['click', 'pointermove'],this.mapEventHandler);
this.mapEventHandlerInstalled=false;
}
}
installTopLayerPrerenderEventhandler(olLayer : Layer<Source>) {
if(!this.topLayerPrerenderEventhandlerInstalled && this.onPrerender.observers.length > 0 && olLayer) {
if(this.instance.getVisible()) {
olLayer.on('prerender',this.topLayerPrerenderEventhandler);
olLayer.on('postrender',this.topLayerPostrenderEventhandler);
this.topLayerPrerenderEventhandlerInstalled = true;
}
}
}
unInstallTopLayerPrerenderEventhandler() {
if(this.topLayerPrerenderEventhandlerInstalled && this.onPrerender.observers.length > 0 )
{
if(this.instance.getVisible()) {
var olLayers = this.instance.getLayers().getArray().forEach((l:any) => {
l.un('prerender',this.topLayerPrerenderEventhandler);
l.un('postrender',this.topLayerPostrenderEventhandler);
});
this.topLayerPrerenderEventhandlerInstalled = false;
}
}
}
addOrUpdateOlLayer(itemLayer:IItemLayer,index:number):Layer<Source> {
if(!itemLayer) return null; if(!itemLayer) return null;
var olLayers = this.instance.getLayers(); var olLayers = this.instance.getLayers();
var layer = itemLayer.layer; var layer = itemLayer.layer;
@@ -272,10 +412,19 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return layer; return layer;
} }
updateLayers(itemLayers: IItemLayer[]) { updateLayers(itemLayers: IItemLayer[] | IItemLayer) {
let newLayers: IItemLayer[] = []; this.unInstallTopLayerPrerenderEventhandler();
if (itemLayers) { let dataLayer = false;
itemLayers.forEach((itemLayer, index) => { var ils:IItemLayer[] = [];
if(Array.isArray(itemLayers)) {
ils = itemLayers;
} else {
dataLayer=true;
ils=[itemLayers];
}
let newLayers: Layer<Source>[] = [];
if (ils) {
ils.forEach((itemLayer, index) => {
if(itemLayer.item.itemType == 'vnd.farmmaps.itemtype.temporal') { if(itemLayer.item.itemType == 'vnd.farmmaps.itemtype.temporal') {
let il = itemLayer as ITemporalItemLayer; let il = itemLayer as ITemporalItemLayer;
let previousLayer = this.addOrUpdateOlLayer(il.previousItemLayer,newLayers.length); let previousLayer = this.addOrUpdateOlLayer(il.previousItemLayer,newLayers.length);
@@ -284,9 +433,11 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
if(selectedLayer) newLayers.push(selectedLayer); if(selectedLayer) newLayers.push(selectedLayer);
let nextLayer = this.addOrUpdateOlLayer(il.nextItemLayer,newLayers.length); let nextLayer = this.addOrUpdateOlLayer(il.nextItemLayer,newLayers.length);
if(nextLayer) newLayers.push(nextLayer); if(nextLayer) newLayers.push(nextLayer);
this.installTopLayerPrerenderEventhandler(selectedLayer);
} else { } else {
let layer = this.addOrUpdateOlLayer(itemLayer,newLayers.length); let layer = this.addOrUpdateOlLayer(itemLayer,newLayers.length);
if(layer) newLayers.push(layer); if(layer) newLayers.push(layer);
this.installTopLayerPrerenderEventhandler(layer);
} }
}); });
// Remove the layers that have disapeared from childrenLayers // Remove the layers that have disapeared from childrenLayers
@@ -294,23 +445,84 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
while(olLayers.getLength() > newLayers.length) { while(olLayers.getLength() > newLayers.length) {
olLayers.removeAt(newLayers.length); olLayers.removeAt(newLayers.length);
} }
this.selectionLayer=null;
if(this.mapEventHandlerInstalled && ils.length==1 && this.getItemlayer(itemLayers[0]).item.itemType == 'vnd.farmmaps.itemtype.shape.processed') {
this.selectionLayer = this.createSelectionLayer(this.getItemlayer(itemLayers[0]));
if(this.selectionLayer) olLayers.push(this.selectionLayer)
}
} }
} }
topLayerPrerenderEventhandler = (event) => {
this.onPrerender.emit(event);
}
topLayerPostrenderEventhandler = (event) => {
const ctx = event.context;
ctx.restore();
}
mapEventHandler = (event) => {
// select only when having observers
if(event.type === 'click' && !this.onFeatureSelected.observers.length) return;
if(event.type === 'pointermove' && !this.onFeatureHover.observers.length) return;
let itemLayer= this.getItemlayer(this.itemLayer);
if(itemLayer && itemLayer.layer) {
this.selectedFeatures = {};
if(itemLayer.layer ) {
let minZoom = itemLayer.layer.getMinZoom();
let currentZoom = this.map.instance.getView().getZoom();
if(currentZoom>minZoom) {
itemLayer.layer.getFeatures(event.pixel).then((features) => {
if(!features.length) {
this.onFeatureHover.emit(null);
return;
}
let fid = features[0].getId();
let feature = features[0];
if(event.type === 'pointermove') {
this.selectedFeatures[fid] = features[0];
this.onFeatureHover.emit({ "feature": feature,"itemCode":itemLayer.item.code });
} else {
this.onFeatureSelected.emit({ "feature": feature,"itemCode":itemLayer.item.code });
}
})
if(this.selectionLayer) this.selectionLayer.changed();
}
}
}
}
getItemlayer(itemLayer:IItemLayer):IItemLayer {
if((itemLayer as ITemporalItemLayer).selectedItemLayer) return (itemLayer as ITemporalItemLayer).selectedItemLayer;
return itemLayer;
}
ngOnChanges(changes: SimpleChanges) { ngOnChanges(changes: SimpleChanges) {
if (this.instance) { if (this.instance && this.initialized) {
if (changes['itemLayers']) { if (changes['itemLayers']) {
var itemLayers = changes['itemLayers'].currentValue as IItemLayer[]; var itemLayers = changes['itemLayers'].currentValue as IItemLayer[];
this.updateLayers(itemLayers); this.updateLayers(itemLayers);
} }
if (changes['itemLayer']) { if (changes['itemLayer']) {
var itemLayer = changes['itemLayer'].currentValue as IItemLayer; var itemLayer = changes['itemLayer'].currentValue as IItemLayer;
this.itemLayer = itemLayer
if(itemLayer) { if(itemLayer) {
if(this.getItemlayer(this.itemLayer).item.itemType == 'vnd.farmmaps.itemtype.shape.processed') {
this.installMapEventHandler();
}
this.updateLayers([itemLayer]); this.updateLayers([itemLayer]);
} else { } else {
this.updateLayers([]); this.unInstallMapEventHandler();
this.updateLayers([]);
} }
} }
} }
} }
ngOnDestroy() {
this.unInstallMapEventHandler();
super.ngOnDestroy();
}
} }
@@ -1,16 +1,17 @@
import { Component, Host, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, forwardRef, Inject, InjectionToken } from '@angular/core'; import { Component, Host, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, forwardRef, Inject, InjectionToken } from '@angular/core';
import { LayerVectorComponent, SourceVectorComponent, MapComponent } from 'ngx-openlayers'; import { LayerVectorComponent, SourceVectorComponent, MapComponent } from 'ngx-openlayers';
import { ItemService,ItemTypeService,IItem, IItemType } from '@farmmaps/common'; import { ItemService,ItemTypeService,IItem, IItemType } from '@farmmaps/common';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Point } from 'ol/geom'; import { Point,Geometry } from 'ol/geom';
import { MapBrowserEvent } from 'ol'; import { MapBrowserEvent } from 'ol';
import { Types } from 'ol/MapBrowserEventType';
import * as style from 'ol/style'; import * as style from 'ol/style';
import * as color from 'ol/color'; import * as color from 'ol/color';
import * as loadingstrategy from 'ol/loadingstrategy'; import * as loadingstrategy from 'ol/loadingstrategy';
import * as condition from 'ol/events/condition'; import * as condition from 'ol/events/condition';
import * as extent from 'ol/extent'; import * as extent from 'ol/extent';
import {Vector,Cluster} from 'ol/source'; import {Vector,Cluster,Source} from 'ol/source';
import {Layer} from 'ol/layer'; import {Layer} from 'ol/layer';
import {GeoJSON} from 'ol/format'; import {GeoJSON} from 'ol/format';
import {Select} from 'ol/interaction'; import {Select} from 'ol/interaction';
@@ -25,25 +26,25 @@ import {FeatureIconService} from '../../../services/feature-icon.service';
] ]
}) })
export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnChanges { export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnChanges {
instance: Vector; instance: Vector<Geometry>;
private _format: GeoJSON; private _format: GeoJSON;
private _select: Select; private _select: Select;
private _hoverSelect: Select; private _hoverSelect: Select;
private _iconScale: number = 0.05; private _iconScale: number = 0.05;
@Input() features: Array<Feature>; @Input() features: Array<Feature<Geometry>>;
@Input() selectedFeature: Feature; @Input() selectedFeature: Feature<Geometry>;
@Input() selectedItem: IItem; @Input() selectedItem: IItem;
@Input() styles:IStyles; @Input() styles:IStyles;
@Output() onFeaturesSelected: EventEmitter<Feature> = new EventEmitter<Feature>(); @Output() onFeatureSelected: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>();
@Output() onFeatureHover: EventEmitter<Feature> = new EventEmitter<Feature>(); @Output() onFeatureHover: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>();
private stylesCache:IStyles = {}; private stylesCache:IStyles = {};
constructor(@Host() private layer: LayerVectorComponent, private itemService: ItemService, @Host() private map: MapComponent, private itemTypeService: ItemTypeService,private featureIconService$:FeatureIconService) { constructor(@Host() private layer: LayerVectorComponent, private itemService: ItemService, private map: MapComponent, private itemTypeService: ItemTypeService,private featureIconService$:FeatureIconService) {
super(layer); super(layer);
this._format = new GeoJSON(); this._format = new GeoJSON();
} }
geometry(feature: Feature) { geometry(feature: Feature<Geometry>) {
let view = this.map.instance.getView(); let view = this.map.instance.getView();
let resolution = view.getResolution(); let resolution = view.getResolution();
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
@@ -55,9 +56,9 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
return geometry; return geometry;
} }
getSelectedStyle(feature:Feature):style.Style { getSelectedStyle(feature:Feature<Geometry>):style.Style {
let key = feature.get('itemType')+"_selected"; let key = feature.get('itemType')+"_selected";
let evaluatedStyle =null; let evaluatedStyle: style.Style =undefined;
var styleEntry = this.stylesCache[key]; var styleEntry = this.stylesCache[key];
if(styleEntry) { if(styleEntry) {
if(typeof styleEntry === 'function') { if(typeof styleEntry === 'function') {
@@ -66,12 +67,12 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
evaluatedStyle = styleEntry; evaluatedStyle = styleEntry;
} }
} else { } else {
evaluatedStyle = this.stylesCache["selected"]; evaluatedStyle = this.stylesCache["selected"] as style.Style;
} }
if(evaluatedStyle ) { if(evaluatedStyle ) {
evaluatedStyle.setGeometry((feature) => this.geometry(feature)); evaluatedStyle .setGeometry((feature:Feature<Geometry>) => this.geometry(feature));
} }
return evaluatedStyle return evaluatedStyle as style.Style
} }
ngOnInit() { ngOnInit() {
@@ -80,25 +81,25 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
this._select = new Select({ this._select = new Select({
style:null, style:null,
hitTolerance: 10, hitTolerance: 10,
layers: [this.layer.instance as Layer] layers: [this.layer.instance as Layer<Source>]
}); });
this._hoverSelect = new Select({ this._hoverSelect = new Select({
style: (feature) => { style: (feature:Feature<Geometry>) => {
return this.getSelectedStyle(feature); return this.getSelectedStyle(feature);
}, },
hitTolerance: 10, hitTolerance: 10,
condition: (e: MapBrowserEvent) => { condition: (e: MapBrowserEvent<UIEvent>) => {
return e.type == 'pointermove'; return e.type == 'pointermove';
}, },
layers: [this.layer.instance as Layer] layers: [this.layer.instance as Layer<Source>]
}); });
this.map.instance.addInteraction(this._select); this.map.instance.addInteraction(this._select);
this.map.instance.addInteraction(this._hoverSelect); this.map.instance.addInteraction(this._hoverSelect);
this._select.on('select', (e) => { this._select.on('select', (e) => {
if (e.selected.length > 0 && e.selected[0]) { if (e.selected.length > 0 && e.selected[0]) {
this.onFeaturesSelected.emit(e.selected[0]); this.onFeatureSelected.emit(e.selected[0]);
} else { } else {
this.onFeaturesSelected.emit(null); this.onFeatureSelected.emit(null);
} }
}); });
this._hoverSelect.on('select', (e) => { this._hoverSelect.on('select', (e) => {
@@ -112,17 +113,18 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
this.host.instance.setSource(this.instance); this.host.instance.setSource(this.instance);
this.host.instance.setStyle((feature) => { this.host.instance.setStyle((feature) => {
var key = feature.get('itemType') + (this.selectedItem?"_I":""); var itemType = feature.get('itemType');
var key = itemType + (this.selectedItem?"_I":"");
if (!this.stylesCache[key]) { if (!this.stylesCache[key]) {
if (this.itemTypeService.itemTypes[key]) { if (this.itemTypeService.itemTypes[itemType]) {
let itemType = this.itemTypeService.itemTypes[key]; let itemTypeEntry = this.itemTypeService.itemTypes[itemType];
let fillColor = color.asArray(itemType.iconColor); let fillColor = color.asArray(itemTypeEntry.iconColor);
fillColor[3] = this.selectedItem?0:0.5; fillColor[3] = 0;
this.stylesCache[key] = new style.Style({ this.stylesCache[key] = new style.Style({
image: itemType.icon ? new style.Icon({ image: itemTypeEntry.icon ? new style.Icon({
anchor: [0.5, 1], anchor: [0.5, 1],
scale: 0.05, scale: 0.05,
src: this.featureIconService$.getIconImageDataUrl(itemType.icon) src: this.featureIconService$.getIconImageDataUrl(itemTypeEntry.icon)
}):null, }):null,
stroke: new style.Stroke({ stroke: new style.Stroke({
color: 'red', color: 'red',
@@ -131,7 +133,7 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
fill: new style.Fill({ fill: new style.Fill({
color: fillColor color: fillColor
}), }),
geometry:(feature) => this.geometry(feature) geometry:(feature:Feature<Geometry>) => this.geometry(feature)
}); });
} else { } else {
key = 'file'; key = 'file';
@@ -11,13 +11,13 @@
<a title="Transparency 75%" *ngIf="itemLayer.visible" href="#" class="btn btn-light btn-sm" (click)="handleSetOpacity($event,itemLayer,0.75)">75%</a> <a title="Transparency 75%" *ngIf="itemLayer.visible" href="#" class="btn btn-light btn-sm" (click)="handleSetOpacity($event,itemLayer,0.75)">75%</a>
<a title="No transparency" *ngIf="itemLayer.visible" href="#" class="btn btn-light btn-sm" (click)="handleSetOpacity($event,itemLayer,1)">100%</a> <a title="No transparency" *ngIf="itemLayer.visible" href="#" class="btn btn-light btn-sm" (click)="handleSetOpacity($event,itemLayer,1)">100%</a>
</span> </span>
<a href="#" title="Zoom to extent" class="btn btn-light btn-sm" (click)="handleZoomToExtent($event,itemLayer)"><i class="fa fa-search-plus" aria-hidden="true"></i></a> <a href="#" title="Zoom to extent" class="btn btn-light btn-sm" (click)="handleZoomToExtent($event,itemLayer)"><i class="far fa-search-plus" aria-hidden="true"></i></a>
<span *ngIf="firstLayer(itemLayer)"><a href="#" title="Toggle legend" class="btn btn-light btn-sm" (click)="itemLayer.legendVisible=toggleLegend($event,itemLayer.legendVisible)"><i class="fa fa-bar-chart" aria-hidden="true"></i></a></span> <span *ngIf="firstLayer(itemLayer)"><a href="#" title="Toggle legend" class="btn btn-light btn-sm" (click)="itemLayer.legendVisible=toggleLegend($event,itemLayer.legendVisible)"><i class="far fa-chart-bar" aria-hidden="true"></i></a></span>
<span class="float-right"><a href="#" title="Remove overlay" class="btn btn-light btn-sm" (click)="handleDelete($event,itemLayer)"><i class="fa fa-minus" aria-hidden="true"></i></a></span> <span *ngIf="!dataLayers" class="float-end"><a href="#" title="Remove overlay" class="btn btn-light btn-sm" (click)="handleDelete($event,itemLayer)"><i class="fas fa-layer-minus" aria-hidden="true"></i></a></span>
</div> </div>
<div *ngIf="itemLayer.legendVisible"> <div *ngIf="itemLayer.legendVisible">
<div class="card legend"> <div class="card legend">
<fm-map-layer-legend [layer]="firstLayer(itemLayer)" (click)="handleLegendClick($event,itemLayer);"></fm-map-layer-legend> <fm-map-layer-legend [layer]="firstLayer(itemLayer)" (click)="handleLegendClick($event,itemLayer);" [histogramenabled]="true"></fm-map-layer-legend>
</div> </div>
</div> </div>
</div> </div>
@@ -10,6 +10,7 @@ import { IItemLayer } from '../../../models/item.layer';
export class LayerListComponent { export class LayerListComponent {
@Input() itemLayers: IItemLayer[] = []; @Input() itemLayers: IItemLayer[] = [];
@Input() baseLayers: boolean = false; @Input() baseLayers: boolean = false;
@Input() dataLayers: boolean = false;
@Output() onToggleVisibility = new EventEmitter<IItemLayer>(); @Output() onToggleVisibility = new EventEmitter<IItemLayer>();
@Output() onSetOpacity = new EventEmitter<{layer: IItemLayer,opacity:number }>(); @Output() onSetOpacity = new EventEmitter<{layer: IItemLayer,opacity:number }>();
@Output() onDelete = new EventEmitter<IItemLayer>(); @Output() onDelete = new EventEmitter<IItemLayer>();
@@ -0,0 +1,18 @@
<div #layerValues class="layer-values">
<div class="cross" *ngIf="enabled$ | async">
<div class="pointer"></div>
<div class="values-container border border-dark rounded p-2" *ngIf="(layerValues$ | async ) as layers">
<div class="lonlat pb-2 "><span class="font-weight-bold">{{lonlat$}}</span><i class="ms-2 fal fa-copy" (click)="copyToClipboard()"></i> </div>
<ul class="value-list p-0 mb-0" *ngIf="layers.length>0 ;else no_data">
<li class="border-top pt-1 pb-1 value" *ngFor="let layerValue of layers">
<div>{{layerValue.layerName}}</div>
<div>{{layerValue.date|date}}</div>
<div><span *ngIf="layerValue.quantity"><span class="me-1">{{layerValue.quantity}}</span> </span><span class="me-1 font-weight-bold">{{layerValue.value}}</span><span>{{layerValue.unit}}</span></div>
</li>
</ul>
<ng-template #no_data>
<div i18n class="border-top pt-1 pb-1">No data at location</div>
</ng-template>
</div>
</div>
</div>>
@@ -0,0 +1,37 @@
.layer-values {
position: absolute;
left: 50%;
top: 30%;
}
.cross {
display: block;
position: relative;
width: 1em;
height: 1em;
left: -0.5em;
top: -0.5em;
}
.values-container {
position: relative;
background-color: white;
left: calc( 1em - 1px);
top: -1.3em;
min-width: 15em;
}
.value-list {
list-style: none;
}
.pointer {
position: relative;
width: 0px;
height: 0px;
left: 0.5em;
border-top: 0.5em solid transparent;
border-bottom: 0.5em solid transparent;
border-right: 0.5em solid black;
}
@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { LayerValuesComponent } from './layer-values.component';
describe('LayerValuesComponent', () => {
let component: LayerValuesComponent;
let fixture: ComponentFixture<LayerValuesComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ LayerValuesComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(LayerValuesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,62 @@
import { Component, OnInit,Input,ViewChild,ElementRef,AfterViewInit } from '@angular/core';
import {IItemLayer} from '../../../models/item.layer';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../../reducers/map.reducer';
import * as mapActions from '../../../actions/map.actions';
import { MapComponent } from 'ngx-openlayers';
import { ILayervalue } from '../../../models/layer.value';
import { Observable,interval,Subject } from 'rxjs';
import { debounce, throttle } from 'rxjs/operators';
import { toLonLat } from 'ol/proj';
import { toStringHDMS } from 'ol/coordinate';
import { ClipboardService } from 'ngx-clipboard'
import {GeoJSON,WKT} from 'ol/format';
import { Point } from 'ol/geom';
@Component({
selector: 'fm-map-layer-values',
templateUrl: './layer-values.component.html',
styleUrls: ['./layer-values.component.scss']
})
export class LayerValuesComponent implements OnInit,AfterViewInit {
@ViewChild('layerValues') containerRef:ElementRef;
offsetX$:number =0;
offsetY$:number =0;
lonlat$: string="";
wkt$= "";
layerValues$:Observable<Array<ILayervalue>> = this.store.select(mapReducers.selectGetLayerValues);
enabled$:Observable<boolean> = this.store.select(mapReducers.selectGetLayerValuesEnabled);
wktFormat$:WKT;
constructor( private store: Store<mapReducers.State>,private map: MapComponent,private clipboardService$:ClipboardService) {
this.wktFormat$=new WKT();
}
ngOnInit(): void {
}
moveEndSubject = new Subject<any>();
ngAfterViewInit():void {
this.offsetY$ = this.containerRef.nativeElement.offsetTop;
this.offsetX$ = this.containerRef.nativeElement.offsetLeft;
this.map.instance.on('moveend', () => {
this.moveEndSubject.next({});
});
this.moveEndSubject.pipe(throttle(ev => interval(100))).subscribe(() => this.updateValuesLocation());
}
updateValuesLocation() {
var xy = this.map.instance.getCoordinateFromPixel([this.offsetX$,this.offsetY$])
var lonlat = toLonLat(xy);
this.wkt$ = this.wktFormat$.writeGeometry(new Point(lonlat))
this.lonlat$ = toStringHDMS(lonlat);
this.store.dispatch(new mapActions.SetLayerValuesLocation(xy[0],xy[1]));
}
copyToClipboard() {
this.clipboardService$.copy(this.wkt$);
}
}
@@ -1,9 +1,8 @@
import { Component, OnDestroy, OnInit, Input, Optional, OnChanges, SimpleChanges } from '@angular/core'; import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { Vector } from 'ol/layer'; import { LayerVectorComponent, MapComponent } from 'ngx-openlayers';
import { Style } from 'ol/style'; import RenderType from 'ol/layer/Vector';
import { StyleFunction } from 'ol/style/Style'; import { Vector as VectorSource } from 'ol/source';
import { LayerVectorComponent, LayerGroupComponent, MapComponent } from 'ngx-openlayers'; import { Geometry } from 'ol/geom';
import { RenderType } from 'ol/layer/Vector';
@Component({ @Component({
selector: 'fm-map-aol-layer-vector-image', selector: 'fm-map-aol-layer-vector-image',
@@ -12,10 +11,10 @@ import { RenderType } from 'ol/layer/Vector';
`, `,
}) })
export class LayerVectorImageComponent extends LayerVectorComponent implements OnInit, OnDestroy, OnChanges { export class LayerVectorImageComponent extends LayerVectorComponent implements OnInit, OnDestroy, OnChanges {
public source: Vector; //public source: Vector;
@Input() @Input()
renderMode: RenderType | string = "image"; renderMode: RenderType<VectorSource<Geometry>> | string = "image";
constructor(map: MapComponent) { constructor(map: MapComponent) {
super(map); super(map);
@@ -1,4 +1,4 @@
<div (click)="handleClick($event)" class="btn btn-outline-secondary gps-location"> <div (click)="handleClick($event)" class="btn btn-outline-primary gps-location">
<svg height="100%" width="100%" viewBox="0 0 96 96"> <svg height="100%" width="100%" viewBox="0 0 96 96">
<g <g
id="XMLID_1_"><circle id="XMLID_1_"><circle
@@ -29,7 +29,7 @@ div.gps-location:hover .pan-to {
} }
div.gps-location:hover .pan-to-centered { div.gps-location:hover .pan-to-centered {
fill: theme-color-level($color-name: "primary", $level: -10) fill: theme-color-level(primary, -10)
} }
.pan-to.pan-to-disabled { .pan-to.pan-to-disabled {
@@ -14,7 +14,7 @@ export class PanToLocation implements OnInit,OnChanges{
view: View; view: View;
map: MapComponent; map: MapComponent;
@Input() position: Position; @Input() position: GeolocationPosition;
@Input() mapState: IMapState; @Input() mapState: IMapState;
@Input() animate: boolean; @Input() animate: boolean;
@@ -1,4 +1,4 @@
<div (click)="handleClick($event)" class="btn btn-outline-secondary compass" [style.transform]="Rotation()" [ngClass]="{'compass-n':IsNorth()}"> <div (click)="handleClick($event)" class="btn btn-outline-primary compass" [style.transform]="Rotation()" [ngClass]="{'compass-n':IsNorth()}">
<svg height="100%" width="100%" viewBox="0 0 132.29166 132.29167"> <svg height="100%" width="100%" viewBox="0 0 132.29166 132.29167">
<g <g
inkscape:label="Laag 1" inkscape:label="Laag 1"
@@ -8,6 +8,7 @@
border-radius:1.75em; border-radius:1.75em;
padding:0; padding:0;
margin-top:0.5em; margin-top:0.5em;
display: block;
} }
#north { #north {
@@ -29,7 +29,7 @@ export class RotationResetComponent implements OnInit {
}); });
} }
constructor( @Host() private map: MapComponent, private changeDetectorRef$: ChangeDetectorRef ) { constructor( private map: MapComponent, private changeDetectorRef$: ChangeDetectorRef ) {
} }
handleClick(event:Event) { handleClick(event:Event) {
@@ -1,40 +0,0 @@
// import { Component, OnInit,Input } from '@angular/core';
//import { MapComponent } from 'ngx-openlayers';
//import OLCesium from 'olcs/OLCesium.js';
// @Component({
// selector: 'fm-map-switch2d3d',
// template: '<div (click)="handleClick($event)" class="rounded-circle twotreed">{{label}}</div>',
// styles: [`.twotreed {
// width:2.5em;
// height:2.5em;
// background-color: white;
// text-align:center;
// line-height:2.5em;
// font-weight:bold;
// cursor:default;}`]
// })
// export class Switch2D3DComponent {
// @Input() enable:boolean;
// public label: string = "3D";
// private ol3d: OLCesium;
// constructor(private map: MapComponent) {
// }
// ngOnInit() {
// this.ol3d = new OLCesium({ map: this.map.instance }); // ol2dMap is the ol.Map instance
// }
// handleClick(event) {
// this.enable = !this.enable;
// if (this.enable)
// this.ol3d.setEnabled(this.enable);
// this.label = this.enable?"2D":"3D";
// }
// }
@@ -1,4 +1,5 @@
import { Component, Host, Input, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core'; import { Component, Host, Input, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ViewComponent, MapComponent } from 'ngx-openlayers'; import { ViewComponent, MapComponent } from 'ngx-openlayers';
@@ -9,12 +10,24 @@ import { ViewComponent, MapComponent } from 'ngx-openlayers';
export class ZoomToExtentComponent implements OnChanges { export class ZoomToExtentComponent implements OnChanges {
view: ViewComponent; view: ViewComponent;
map: MapComponent; map: MapComponent;
paddingTop: number = 0;
paddingLeft: number = 0;
paddingBottom: number = 0;
paddingRight: number = 0;
@Input() extent: number[]; @Input() extent: number[];
@Input() animate: boolean = false; @Input() animate: boolean = false;
constructor(@Host() view: ViewComponent, @Host() map: MapComponent) { constructor(@Host() view: ViewComponent, @Host() map: MapComponent,route: ActivatedRoute ) {
this.view = view; this.view = view;
this.map = map; this.map = map;
if(route && route.snapshot && route.snapshot.data && route.snapshot.data["fm-map-zoom-to-extent"]) {
let params = route.snapshot.data["fm-map-zoom-to-extent"];
this.paddingTop = params["padding-top"] ? params["padding-top"] : 0;
this.paddingBottom = params["padding-bottom"] ? params["padding-bottom"] : 0;
this.paddingLeft = params["padding-left"] ? params["padding-left"] : 0;
this.paddingRight = params["padding-right"] ? params["padding-right"] : 0;
}
} }
ngOnChanges(changes: SimpleChanges) { ngOnChanges(changes: SimpleChanges) {
@@ -25,13 +38,13 @@ export class ZoomToExtentComponent implements OnChanges {
let threshold = 40 * rem; let threshold = 40 * rem;
var left = 1 * rem; var left = 1 * rem;
var right = 1 * rem; var right = 1 * rem;
var bottom = Math.round(size[1] / 2); var bottom = Math.round((size[1] / 2) + (4*rem));
var top = 1 * rem; var top = 1 * rem;
if (size[0] > threshold) { if (size[0] > threshold) {
bottom = 1 * rem; bottom = 5 * rem;
left = 23 * rem; left = 23 * rem;
} }
options.padding = [top, right, bottom, left]; options.padding = [top + (this.paddingTop*rem), right+ (this.paddingRight*rem), bottom + (this.paddingBottom*rem), left+ (this.paddingLeft*rem)];
if (this.animate) options["duration"] = 1000; if (this.animate) options["duration"] = 1000;
this.view.instance.fit(this.extent, options); this.view.instance.fit(this.extent, options);
} }
@@ -3,12 +3,12 @@
.row { .row {
border-bottom: 1px solid gray('500'); border-bottom: 1px solid $gray-500;
user-select: none; user-select: none;
} }
.row.selected { .row.selected {
background-color: gray('100'); background-color: $gray-100;
} }
@media screen and (min-width: 44rem) { @media screen and (min-width: 44rem) {
@@ -1,5 +1,6 @@
import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject} from '@angular/core'; import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject} from '@angular/core';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Geometry} from 'ol/geom';
import { FeatureListComponent,AbstractFeatureListComponent } from '../feature-list/feature-list.component'; import { FeatureListComponent,AbstractFeatureListComponent } from '../feature-list/feature-list.component';
import { WidgetHostDirective } from '../widget-host/widget-host.directive'; import { WidgetHostDirective } from '../widget-host/widget-host.directive';
import {IQueryState,PackageService } from '@farmmaps/common'; import {IQueryState,PackageService } from '@farmmaps/common';
@@ -17,12 +18,13 @@ import { Observable } from 'rxjs';
export class FeatureListContainerComponent { export class FeatureListContainerComponent {
constructor(private store: Store<mapReducers.State>,private componentFactoryResolver: ComponentFactoryResolver, @Inject(AbstractFeatureListComponent) public featureLists: AbstractFeatureListComponent[],private packageService:PackageService ) { constructor(private store: Store<mapReducers.State>,private componentFactoryResolver: ComponentFactoryResolver, @Inject(AbstractFeatureListComponent) public featureLists: AbstractFeatureListComponent[],private packageService:PackageService ) {
this.featureLists = [...this.featureLists].reverse();
} }
@Input() features: Array<Feature> @Input() features: Array<Feature<Geometry>>
@Input() queryState: IQueryState; @Input() queryState: IQueryState;
@Input() selectedFeature: Feature; @Input() selectedFeature: Feature<Geometry>;
@Input() clickedFeature:Observable<Feature>; @Input() clickedFeature:Observable<Feature<Geometry>>;
@ViewChild(WidgetHostDirective, { static: true }) widgetHost: WidgetHostDirective; @ViewChild(WidgetHostDirective, { static: true }) widgetHost: WidgetHostDirective;
componentRef:any; componentRef:any;
@@ -37,7 +39,7 @@ export class FeatureListContainerComponent {
let criteria=0; let criteria=0;
if (this.featureLists[i]['forItemType']) { if (this.featureLists[i]['forItemType']) {
criteria++; criteria++;
if( this.featureLists[i]['forItemType'].indexOf(queryState.itemType) >= 0) { if( this.featureLists[i]['forItemType'].split(",").filter(part => part == queryState.itemType).length == 1) {
matches++; matches++;
} }
} }
@@ -80,9 +82,11 @@ export class FeatureListContainerComponent {
} }
if ((changes["features"] && changes["features"].currentValue)) { if ((changes["features"] && changes["features"].currentValue)) {
(<AbstractFeatureListComponent>this.componentRef.instance).features = changes["features"].currentValue; (<AbstractFeatureListComponent>this.componentRef.instance).features = changes["features"].currentValue;
this.componentRef.changeDetectorRef.detectChanges();
} }
if(changes["selectedFeature"]) { if(changes["selectedFeature"]) {
(<AbstractFeatureListComponent>this.componentRef.instance).selectedFeature = changes["selectedFeature"].currentValue; (<AbstractFeatureListComponent>this.componentRef.instance).selectedFeature = changes["selectedFeature"].currentValue;
this.componentRef.changeDetectorRef.detectChanges();
} }
} }
} }
@@ -1,11 +1,11 @@
<div class="card border-0"> <div class="card border-0">
<div class="card-body" *ngIf="(schemeItem|async);let schemeItem"> <div class="card-body" *ngIf="(schemeItem|async);let schemeItem">
<div><a href="#" (click)="handleBackClick($event)" i18n>back</a></div> <fm-back-button></fm-back-button>
<h4 i18n>Farm</h4> <h4 i18n>Farm</h4>
<h3>{{schemeItem.name}}</h3> <h3>{{schemeItem.name}}</h3>
<div *ngIf="features;let features"> <div *ngIf="features;let features">
<div class="cropfields"> <div class="cropfields">
<div class="row m-0 pl-3 pr-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>
</div> </div>
@@ -6,17 +6,17 @@ fm-map-feature-list-feature-container {
} }
.row { .row {
border-bottom: 1px solid gray('500'); border-bottom: 1px solid $gray-500;
user-select: none; user-select: none;
padding-left:1.5rem; padding-left:1.5rem;
} }
.row.selected { .row.selected {
background-color: gray('100'); background-color: $gray-100;
} }
.cropfields { .cropfields {
border-top: 1px solid gray('500'); border-top: 1px solid $gray-500;
margin-left: -1.25rem; margin-left: -1.25rem;
margin-right: -1.25rem; margin-right: -1.25rem;
} }
@@ -1,10 +1,10 @@
<div class="card border-0"> <div class="card border-0">
<div class="card-body"> <div class="card-body">
<div><a href="#" (click)="handleBackClick($event)" i18n>Back</a></div> <fm-back-button></fm-back-button>
<h3><i class="fm fm-farm"></i>&nbsp;<span i18n>Farms</span></h3> <h3><i class="far fa-farm"></i>&nbsp;<span i18n>Farms</span></h3>
<div *ngIf="features;let features"> <div *ngIf="features;let features">
<div class="farms"> <div class="farms">
<div class="row m-0 pl-3 pr-3" *ngFor="let feature of features"[ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3" *ngFor="let feature of features"[ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>
</div> </div>
@@ -6,17 +6,17 @@ fm-map-feature-list-feature-container {
} }
.row { .row {
border-bottom: 1px solid gray('500'); border-bottom: 1px solid $gray-500;
user-select: none; user-select: none;
padding-left:1.5rem; padding-left:1.5rem;
} }
.row.selected { .row.selected {
background-color: gray('100'); background-color: $gray-100;
} }
.farms { .farms {
border-top: 1px solid gray('500'); border-top: 1px solid $gray-500;
margin-left: -1.25rem; margin-left: -1.25rem;
margin-right: -1.25rem; margin-right: -1.25rem;
} }
@@ -9,6 +9,7 @@ import * as mapActions from '../../actions/map.actions';
import { tassign } from 'tassign'; import { tassign } from 'tassign';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Geometry} from 'ol/geom';
@ForItemType("vnd.farmmaps.itemtype.croppingscheme") @ForItemType("vnd.farmmaps.itemtype.croppingscheme")
@Injectable() @Injectable()
@@ -23,7 +24,7 @@ export class FeatureListCroppingschemeComponent extends AbstractFeatureListCompo
super(store, itemTypeService, location); super(store, itemTypeService, location);
} }
getAction(feature:Feature):Action { getAction(feature:Feature<Geometry>):Action {
var queryState = tassign(mapReducers.initialState.queryState, { parentCode: feature.get('code'), itemType: "vnd.farmmaps.itemtype.cropfield" }); var queryState = tassign(mapReducers.initialState.queryState, { parentCode: feature.get('code'), itemType: "vnd.farmmaps.itemtype.cropfield" });
return new mapActions.DoQuery(queryState); return new mapActions.DoQuery(queryState);
} }
@@ -1,5 +1,6 @@
import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject, Type} from '@angular/core'; import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject, Type} from '@angular/core';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Geometry } from 'ol/geom';
import { AbstractFeatureListFeatureComponent,FeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component'; import { AbstractFeatureListFeatureComponent,FeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
import { WidgetHostDirective } from '../widget-host/widget-host.directive'; import { WidgetHostDirective } from '../widget-host/widget-host.directive';
@@ -15,9 +16,10 @@ import { WidgetHostDirective } from '../widget-host/widget-host.directive';
export class FeatureListFeatureContainerComponent { export class FeatureListFeatureContainerComponent {
constructor(private componentFactoryResolver: ComponentFactoryResolver, @Inject(AbstractFeatureListFeatureComponent) public featureLists: AbstractFeatureListFeatureComponent[] ) { constructor(private componentFactoryResolver: ComponentFactoryResolver, @Inject(AbstractFeatureListFeatureComponent) public featureLists: AbstractFeatureListFeatureComponent[] ) {
this.featureLists = [...this.featureLists].reverse();
} }
@Input() feature: Feature; @Input() feature: Feature<Geometry>;
@ViewChild(WidgetHostDirective, { static: true }) widgetHost: WidgetHostDirective; @ViewChild(WidgetHostDirective, { static: true }) widgetHost: WidgetHostDirective;
@@ -31,7 +33,7 @@ export class FeatureListFeatureContainerComponent {
let criteria=0; let criteria=0;
if (this.featureLists[i]['forItemType']) { if (this.featureLists[i]['forItemType']) {
criteria++; criteria++;
if(this.featureLists[i]['forItemType'].indexOf(this.feature.get("itemType")) >= 0) { if(this.featureLists[i]['forItemType'].split(",").filter(part => part == this.feature.get("itemType")).length == 1) {
matches++; matches++;
} }
} }
@@ -1,12 +1,14 @@
<div *ngIf="feature;let feature" class="d-flex m-0"> <div *ngIf="feature;let feature" class="d-flex m-0">
<div class="p-2"> <div class="p-2">
<div #container class="thumbnail"> <div class="thumbnail">
<canvas #canvas ></canvas> <fm-map-feature-thumbnail [feature]="feature"></fm-map-feature-thumbnail>
</div> </div>
</div> </div>
<div class="flex-grow p-2 overflow-hidden"> <div class="flex-grow p-2 overflow-hidden">
<h1 class="card-title" title="{{feature.get('name')}}">{{feature.get('name')}}</h1> <h1 class="card-title" title="{{feature.get('name')}}">{{feature.get('name')}}</h1>
<div class="card-text"><span>{{areaInHa(feature)| number:'1.2-2'}} ha</span>&nbsp;<span>{{feature.get('cropTypeName')}}</span> </div> <div class="card-text"><span>{{areaInHa(feature)| number:'1.2-2'}}
<div class="card-text"><span>{{feature.get('datadate')|date}}</span> - <span>{{feature.get('dataenddate')|date}}</span> </div> ha</span>&nbsp;<span>{{feature.get('cropTypeName')}}</span> </div>
<div class="card-text"><span>{{feature.get('datadate')|date}}</span> -
<span>{{feature.get('dataenddate')|date}}</span> </div>
</div> </div>
</div> </div>
@@ -1,14 +1,13 @@
import { Component, Injectable,ViewChild,AfterViewInit} from '@angular/core'; import { Component, Injectable,ViewChild,AfterViewInit} from '@angular/core';
import { Feature } from 'ol'; import { Feature } from 'ol';
import * as extent from 'ol/extent'; import { Geometry } from 'ol/geom';
import * as render from 'ol/render';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common'; import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component'; import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
import { ForItemType } from '../for-item/for-itemtype.decorator'; import { ForItemType } from '../for-item/for-itemtype.decorator';
import {getArea} from 'ol/sphere'; import {getArea} from 'ol/sphere';
import * as style from 'ol/style';
@ForItemType("vnd.farmmaps.itemtype.cropfield") @ForItemType("vnd.farmmaps.itemtype.cropfield")
@@ -18,58 +17,18 @@ import * as style from 'ol/style';
templateUrl: './feature-list-feature-cropfield.component.html', templateUrl: './feature-list-feature-cropfield.component.html',
styleUrls: ['./feature-list-feature-cropfield.component.scss'] styleUrls: ['./feature-list-feature-cropfield.component.scss']
}) })
export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent implements AfterViewInit { export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent {
@ViewChild('canvas') canvas;
@ViewChild('container') container;
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) { constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) {
super(store, itemTypeService,config); super(store, itemTypeService,config);
} }
areaInHa(feature:Feature):number { areaInHa(feature:Feature<Geometry>):number {
if(!feature) return 0; if(!feature) return 0;
// get area from faeture if 0 calculate from polygon // get area from faeture if 0 calculate from polygon
let a = feature.get('area'); let a = feature.get('area');
if(a) return a; if(a) return a;
return getArea(feature.getGeometry(),{projectio:"EPSG:3857"}) / 10000; return getArea(feature.getGeometry(),{projection:"EPSG:3857"}) / 10000;
} }
render(canvas,width,height,feature:Feature) {
let renderContext = render.toContext(canvas.getContext( '2d'),{ size: [width, height] });
let strokeStyle = new style.Style({
stroke: new style.Stroke({ color: 'black',width:1.5 })
});
let geom = feature.getGeometry().clone(),
line = geom.getCoordinates()[0],
e = extent.boundingExtent( line );
let dxy = extent.getCenter(e),
sxy = [
(width - 2 ) / extent.getWidth(e),
(height - 2 ) / extent.getHeight(e)
];
let dx = dxy[0],
dy = dxy[1],
sx = sxy[0],
sy = sxy[1];
geom.translate( -dx, -dy );
geom.scale( Math.min(sx, sy), -Math.min(sx, sy));
geom.translate( width / 2, height / 2 );
renderContext.setStyle( strokeStyle );
renderContext.drawGeometry( geom );
}
ngAfterViewInit() {
this.render(this.canvas.nativeElement,
this.container.nativeElement.offsetWidth,
this.container.nativeElement.offsetHeight,
this.feature);
}
} }
@@ -1,5 +1,5 @@
<div *ngIf="feature;let feature" class="row m-0"> <div *ngIf="feature;let feature" class="row m-0">
<div class="col-3 m-0 p-2 thumbnail"> <div class="col-3 w-25 m-0 p-2 thumbnail">
<img *ngIf="feature.get('thumbnail')" [src]="config.getConfig('apiEndPoint') + '/api/v1/items/'+feature.get('code')+'/thumbnail'" /> <img *ngIf="feature.get('thumbnail')" [src]="config.getConfig('apiEndPoint') + '/api/v1/items/'+feature.get('code')+'/thumbnail'" />
<div *ngIf="!feature.get('thumbnail')" [style.background-color]="itemTypeService.getColor(feature.get('itemType'))"> <div *ngIf="!feature.get('thumbnail')" [style.background-color]="itemTypeService.getColor(feature.get('itemType'))">
<i [ngClass]="itemTypeService.getIcon(feature.get('itemType'))"></i> <i [ngClass]="itemTypeService.getIcon(feature.get('itemType'))"></i>
@@ -10,12 +10,12 @@
} }
.thumbnail > img { .thumbnail > img {
width: 100%;
height: auto; height: auto;
width: 100%;
} }
.thumbnail > div { .thumbnail > div {
width: 100%; width: 100%;
font-size: 2rem; font-size: 2rem;
text-align: center; text-align: center;
min-height: 3rem; min-height: 3rem;
@@ -1,5 +1,6 @@
import { Component, Input, Injectable,Directive} from '@angular/core'; import { Component, Input, Injectable,Directive} from '@angular/core';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Geometry } from 'ol/geom';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common'; import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@@ -9,7 +10,7 @@ import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@Injectable() @Injectable()
@Directive() @Directive()
export abstract class AbstractFeatureListFeatureComponent { export abstract class AbstractFeatureListFeatureComponent {
@Input() feature: Feature @Input() feature: Feature<Geometry>
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService,public config:AppConfig) { constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService,public config:AppConfig) {
} }
@@ -1,6 +1,6 @@
<div *ngIf="features;let features"> <div *ngIf="features;let features">
<a href="#" (click)="handleBackClick($event)">Go back</a> <fm-back-button></fm-back-button>
<div class="row m-0 pl-3 pr-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>
</div> </div>
@@ -6,10 +6,10 @@ fm-map-feature-list-feature-container {
} }
.row { .row {
border-bottom: 1px solid gray('500'); border-bottom: 1px solid $gray-500;
user-select: none; user-select: none;
} }
.row.selected { .row.selected {
background-color: gray('100'); background-color: $gray-100;
} }
@@ -1,6 +1,7 @@
import { Component, Input, Injectable,Directive,SimpleChanges } from '@angular/core'; import { Component, Input, Injectable,Directive,SimpleChanges } from '@angular/core';
import { Location } from '@angular/common'; import { Location } from '@angular/common';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Geometry} from 'ol/geom';
import { Store,Action} from '@ngrx/store'; import { Store,Action} from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService, IItem, Item } from '@farmmaps/common'; import { commonReducers,ItemTypeService, IItem, Item } from '@farmmaps/common';
@@ -14,20 +15,20 @@ import { IQueryState } from '@farmmaps/common';
@Injectable() @Injectable()
@Directive() @Directive()
export abstract class AbstractFeatureListComponent { export abstract class AbstractFeatureListComponent {
@Input() features: Array<Feature>; @Input() features: Array<Feature<Geometry>>;
@Input() queryState: IQueryState; @Input() queryState: IQueryState;
@Input() selectedFeature: Feature; @Input() selectedFeature: Feature<Geometry>;
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location) { constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location) {
} }
handleFeatureClick(feature:Feature) { handleFeatureClick(feature:Feature<Geometry>) {
if(feature) { if(feature) {
let action = this.getAction(feature); let action = this.getAction(feature);
this.store.dispatch(action); this.store.dispatch(action);
} }
} }
getAction(feature:Feature):Action { getAction(feature:Feature<Geometry>):Action {
var newQuery: any = tassign(mapReducers.initialState.queryState); var newQuery: any = tassign(mapReducers.initialState.queryState);
newQuery.parentCode = feature.get('parentCode'); newQuery.parentCode = feature.get('parentCode');
newQuery.itemCode = feature.get('code'); newQuery.itemCode = feature.get('code');
@@ -48,7 +49,7 @@ export abstract class AbstractFeatureListComponent {
this.location.back(); this.location.back();
} }
isFeatureSelected(feature:Feature):boolean { isFeatureSelected(feature:Feature<Geometry>):boolean {
if(!this.selectedFeature) return false; if(!this.selectedFeature) return false;
return feature.getId() == this.selectedFeature.getId(); return feature.getId() == this.selectedFeature.getId();
} }

Some files were not shown because too many files have changed in this diff Show More