427 Commits

Author SHA1 Message Date
914e272fc2 AW-2924 Cache codelists
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-08-07 14:49:04 +02:00
Willem Dantuma
b182b7fda6 Change select color
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-01 09:18:11 +02:00
Willem Dantuma
22040b43b3 fix selector naam
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 20:25:29 +02:00
Willem Dantuma
50170cf599 Fix selector name
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 20:19:47 +02:00
Willem Dantuma
2deff46a7e AW-5365 add selectViewGetExtent
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 20:07:22 +02:00
Willem Dantuma
e939a787ba AW-5365 add tags parameter
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 19:36:57 +02:00
Willem Dantuma
4ae9562ce1 Kick version
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 19:22:14 +02:00
Willem Dantuma
288e507e6c AW-5365 add crs parameter
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 19:14:13 +02:00
d9848a8ba3 AW-5371 Release 2023.08 libraries
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2023-07-30 10:53:08 +02:00
a9d42484cc jenkins
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-07-26 17:52:01 +02:00
a276593c7f Merge branch 'develop' 2023-07-26 17:45:32 +02:00
ff50650c28 fix jenkins
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-06-27 16:30:49 +02:00
d7efeb8d59 fix build
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-06-27 16:27:18 +02:00
fd71d1f38e no message
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-06-27 16:02:52 +02:00
bc8c9f8bf9 no message
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-06-27 15:56:17 +02:00
0865ca1a93 upped version
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-05-30 21:16:53 +02:00
1bc3983f55 AW-5071 refactor some parts 2023-05-30 21:16:20 +02:00
945d88839f AW-5036 404../api/v1/items/xxx:USER_SETTINGS (new environ)
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-05-08 09:12:37 +02:00
7c06343909 Aw4951 Non-fatal error if no viewer defined for itemtype
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-04-21 09:08:38 +02:00
b8f8f27794 Comment logging
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-04-11 11:33:11 +02:00
2a31771ac6 v3.1.0
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 13:38:35 +02:00
3f17341b2e Revert "++version"
Some checks failed
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit 6165f523cc.
2023-03-28 13:37:50 +02:00
6165f523cc ++version
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 13:30:16 +02:00
19dce51a28 Removed logging
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 13:26:37 +02:00
b29cd8e4c9 AW-4929 Add agrirouter font
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 12:20:27 +02:00
Willem Dantuma
f2e265391c AW-4860
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-03-15 12:18:23 +01:00
Willem Dantuma
3c7adf012f Load profile after refresh
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-07 14:14:14 +01:00
7c8c16362c Aw4751 Update interface
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-06 14:38:48 +01:00
6555e68145 Aw4751 eslint fixes
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-06 14:04:14 +01:00
945c641503 Add more authguard debug loggin'
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-06 10:29:43 +01:00
60bc4c1a10 Add some authguard debug loggin'
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-03 08:40:12 +01:00
7b42ca252b AW-4770 TSLint -> ESLint
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-02 12:02:52 +01:00
9ef6c4d308 AW-4673 Fix ERROR Error: Uncaught (in promise): TypeError: ownedRoleClaims.findIndex is not a function
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-27 09:43:39 +01:00
Willem Dantuma
ed7f7923ca revert openlayers
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-22 18:38:58 +01:00
Willem Dantuma
98142fab56 AW-4707
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-02-22 18:14:52 +01:00
Willem Dantuma
c460d31522 Update open layers 2023-02-22 17:32:59 +01:00
Willem Dantuma
4c5b89852b Fix issue
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-14 17:22:26 +01:00
Willem Dantuma
fa90eaf1af Fix styles
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-14 16:52:46 +01:00
aeded938bd AW-4628 Add role-based security to authguard
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-10 15:30:35 +01:00
c61a4fe7f4 Aw4645 Add get item to admin service
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-09 17:33:27 +01:00
8c3c40cfe6 Aw4645 Add admin service
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-09 14:09:47 +01:00
e6e10c835e AW-4641 Cleanup
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-08 11:36:54 +01:00
07a87175b4 AW-4641 Add fmHasRole directive
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-08 11:25:00 +01:00
e9ace73ddd AW-4641 Fix copy claims from userinfo
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-08 09:25:13 +01:00
Willem Dantuma
12312c0e8b Delete fontawesome 5.15.2
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-02-02 09:42:57 +01:00
Willem Dantuma
2588732b91 Fix menu
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-31 17:30:38 +01:00
Willem Dantuma
de0089fbe8 revert width
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-31 16:04:16 +01:00
Willem Dantuma
d4e7756176 AW-4583
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-31 15:48:27 +01:00
72c34310df AW-4583 Maps thumbnail size
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-30 08:00:53 +01:00
0c0d0989b2 replace gray(' for $gray-
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-26 10:34:18 +01:00
Willem Dantuma
a86ab9f3c7 remove peer dep
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-25 10:24:08 +01:00
Willem Dantuma
a2264a28e0 Fix dependency
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-01-25 10:16:08 +01:00
Willem Dantuma
a4c34fe21c Fix colors
All checks were successful
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
All checks were successful
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
e39c0b055d bootstrap 4.6 -> 5.2 (ng-14)
Some checks failed
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'
All checks were successful
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-12-21 07:45:00 +01:00
Willem Dantuma
0b8dbf4e2e Some fixes
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-10-26 21:31:39 +02:00
2acf13cbac datafilter can now be used with querystate
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-10-24 13:23:33 +02:00
Willem Dantuma
a408f4bffa Some fixes
All checks were successful
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-28 17:32:09 +02:00
Willem Dantuma
2825ce4ccc Kick version
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-09-27 19:58:08 +02:00
Willem Dantuma
15cc2c33f1 Angular cli changes
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-31 11:04:49 +02:00
Willem Dantuma
5631d23355 Fix version
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-31 10:01:15 +02:00
Willem Dantuma
0470cb0fa1 Update packages
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-31 09:53:57 +02:00
Willem Dantuma
1656b465ee Update libs
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-08-29 21:44:55 +02:00
Willem Dantuma
c569076c5d Fix peer dependency
All checks were successful
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"
All checks were successful
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
All checks were successful
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
All checks were successful
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
7b2dbc1777 AW-3912 fix build
All checks were successful
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
8c59976de6 AW-3912 added startDate and endDate to the item child list method
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2022-07-04 16:19:00 +02:00
d551a2cf7a upped version (to fix some faulty builds)
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-06-20 17:11:58 +02:00
a3a09507a6 upped version
All checks were successful
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
9bbde64147 AW-3836 fix build
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-06-06 12:48:52 +02:00
0c4259d72e AW-3836 fixed tags component
Some checks failed
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
All checks were successful
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
All checks were successful
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
All checks were successful
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
e62c185f35 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-21 09:15:14 +01:00
f81b16b966 Remove debugger 2022-02-21 09:15:07 +01:00
b9ee39399c changed getFeatures index parameter use to indexed ?? true
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-05 14:00:25 +01:00
be9b01dbab fixed indexed.toString().....................
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-04 20:17:39 +01:00
feacfd8bb3 fix indexed in getFeatures in item.service.ts
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-04 19:42:09 +01:00
2f0362e730 Add indexed to getFeatures in item.service.ts
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-02-03 12:00:09 +01:00
Willem Dantuma
67335a0a4a Kick version
All checks were successful
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
Some checks reported errors
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
All checks were successful
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
Some checks failed
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
Some checks failed
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'
Some checks failed
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
66e492d2f8 versionnumber
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-28 16:20:17 +01:00
e944064053 cherrypick ac0fe962a0: aw3299 hide questionmark on mobile
Some checks failed
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2022-01-28 16:16:26 +01:00
a1a4fc14ab AW-3441 better test to find real problem. fixed the getValidPackages function.
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 23:20:20 +01:00
122563a0bd AW-3441 another fix...
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 22:35:47 +01:00
33f322424e AW-3441 fix oopsie
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 17:25:12 +01:00
519b81d1fd AW-3441 fix package validation
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 17:07:24 +01:00
b7c80dfdd8 AW-3441 add valid packages selector
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 14:07:02 +01:00
Willem Dantuma
77d2433d63 Export GeometryThumbnailComponent
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 11:40:16 +01:00
Willem Dantuma
9bc78dc302 Export GeometryThumbnailComponent
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-27 10:11:51 +01:00
ac0fe962a0 aw3299: hide help on mobile
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2022-01-20 08:39:18 +01:00
d89670f669 Merge branch 'hotfix/AW-3412-B'
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2022-01-19 14:38:49 +01:00
d025e2e3f6 export GeometryThumbnailComponent 2022-01-19 14:36:34 +01:00
Willem Dantuma
c22cede59b Fix build
All checks were successful
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
Some checks failed
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'
All checks were successful
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
aa1ad9f844 AW-3135
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-12-21 21:01:10 +01:00
Willem Dantuma
c6d14e6c9c Export interface
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-12-02 11:23:36 +01:00
Willem Dantuma
8e4364bd08 bump version
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-12-02 11:16:43 +01:00
Willem Dantuma
af3340ed70 Inject clicked feature in component
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-12-02 11:13:03 +01:00
Willem Dantuma
ff19d830a7 Fix version
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-11-26 12:06:17 +01:00
Willem Dantuma
29914cfb1b oops
Some checks reported errors
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
Some checks failed
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-11-26 12:02:01 +01:00
Willem Dantuma
fdba357e9c Fix matching
Some checks failed
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-11-26 11:58:11 +01:00
Willem Dantuma
e28564c88a Fix matching
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-11-26 11:57:24 +01:00
Willem Dantuma
90c3fa25a4 Fix publish
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-11-25 11:35:27 +01:00
Willem Dantuma
3b8b812c55 Fix build
Some checks failed
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
Some checks failed
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'
All checks were successful
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
All checks were successful
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."
All checks were successful
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
4c1d4137ea Hide help menu
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-18 14:31:28 +02:00
a454f2306d Help menu invisible in release sep 2021.
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-18 14:21:02 +02:00
Willem Dantuma
52a72b042c Fix build
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-17 19:41:20 +02:00
Willem Dantuma
c0c9864b07 AW-2714
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-08-17 19:36:30 +02:00
Willem Dantuma
e0f36b043f Oops
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-12 21:40:40 +02:00
Willem Dantuma
b52bfd4f57 Fix icon
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-12 21:02:55 +02:00
Willem Dantuma
6ff3c0ec96 Fix device geometry update
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-05 16:33:31 +02:00
Willem Dantuma
1daa8e257f make Observable
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-04 16:12:22 +02:00
Willem Dantuma
5db24cc63d Add geolocator service
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-04 16:01:41 +02:00
ff018d9db1 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-08-04 12:05:09 +02:00
8c49965df8 Fix optional has package check/ 2021-08-04 12:05:02 +02:00
Willem Dantuma
f880623337 Fix AW-2620
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-30 14:06:31 +02:00
Willem Dantuma
2da4f88683 Fix AW-2617
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 16:36:18 +02:00
Willem Dantuma
bd125b6f72 Fix check
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 13:24:59 +02:00
Willem Dantuma
610408d17c Add optional replace parameter
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 12:52:26 +02:00
Willem Dantuma
52e3117771 Implement ItemDeleteEvent handling
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-29 08:21:25 +02:00
Willem Dantuma
1b000c6112 Fix initialization error
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-28 17:12:54 +02:00
Willem Dantuma
28e75d5a0d Replace @Effect() with createEffect
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 16:26:57 +02:00
Willem Dantuma
76c431b9c2 Use latest snapshot
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 09:31:14 +02:00
Willem Dantuma
122c49d516 Move the check here
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-27 08:51:56 +02:00
Willem Dantuma
3fcf80c1a0 Add override route parameters
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-07-21 11:17:15 +02:00
9c19595597 Revert "Patch lib"
Some checks failed
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit ea1b22ed41.
2021-06-23 13:52:52 +02:00
ea1b22ed41 Patch lib
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-06-23 13:18:46 +02:00
8d3c098f4e Upgraded custom-webpack and typescript.
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-16 09:15:53 +02:00
22209cfaf6 Update bootstrap to angular 11 compatible version
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-11 10:54:23 +02:00
8b45e431a7 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-11 10:43:50 +02:00
74c792b96a Update references 2021-06-11 10:43:38 +02:00
d833f321d1 aw-1837 add language to user
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-11 08:40:13 +02:00
0d9789d8c6 Version
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-09 14:04:48 +02:00
93513f9dc7 AW-2316 Angular upgrade 11 2021-06-09 14:00:21 +02:00
Willem Dantuma
e465142be0 Increase minor
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 10:03:59 +02:00
Willem Dantuma
92173c9847 Increase patch level
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 10:02:41 +02:00
Willem Dantuma
05292f1e5d Depend on released versions
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2021-06-03 09:53:41 +02:00
Willem Dantuma
e672e28795 Allow same version in master
All checks were successful
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2021-06-03 09:47:17 +02:00
Willem Dantuma
4b7b639046 Remobve build number from version
Some checks failed
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
Some checks failed
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
All checks were successful
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
469bc6f1c1 AW-2390
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-06-02 16:39:33 +02:00
d140d4bd4c AW-2390
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-27 19:44:29 +02:00
1ce259a152 Add %
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-26 16:34:04 +02:00
00ae86ecf2 AW-2388
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-26 16:11:21 +02:00
880eb26a99 getPercentage
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-26 14:59:03 +02:00
bcfa13de60 AW-2388 Fixed mixed decimal in histogram 2021-05-26 14:58:03 +02:00
Willem Dantuma
6f77df0f61 Fix AW-2361
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-25 22:12:32 +02:00
fbe0413c6a Merge branch 'feature/AW-2268' into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-18 13:05:16 +02:00
115f53e93c AW-2268 fix .fullscreen .control-container 2021-05-18 09:49:50 +02:00
ca40ca0927 renamed package guard and added it to public api 2021-05-17 14:23:44 +02:00
29968a736c Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-06 14:05:49 +02:00
077afcb0d7 Fix validToday 2021-05-06 14:05:43 +02:00
Willem Dantuma
6e79afd115 Logout on deleteuser event
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-05 18:56:53 +02:00
4f9cdf1588 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-04 16:23:00 +02:00
fa69dee550 Fix expected selector /deep/ 2021-05-04 16:22:46 +02:00
Willem Dantuma
06e353ee94 Reverse /deep/
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-04 16:21:57 +02:00
8d723477d3 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-05-04 11:28:49 +02:00
771e388f0e AW-2081 Align avatar 2021-05-04 11:28:43 +02:00
Willem Dantuma
040b5b8c4d Cancel only not allready uploaded files
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-05-03 19:00:20 +02:00
3504990708 Add ability to retrieve only items that are valid today.
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-30 10:36:58 +02:00
798ec8d1ca Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-29 14:06:41 +02:00
8f5dd0969c casing 2021-04-29 14:06:35 +02:00
Willem Dantuma
861a8a48fc Add dataFilter to children/count
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-29 13:49:38 +02:00
86a545d7e6 Add IUser.newsLetter
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-26 08:01:43 +02:00
b24e47e39b AW-2214 Fix refactored itemtype.
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-23 10:54:52 +02:00
c0d8e6d615 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-23 10:50:50 +02:00
7192f66420 AW-2211 Update *fmHasPackage directive 2021-04-23 10:50:45 +02:00
Willem Dantuma
dcc24aa149 Fix setExtent
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-19 08:43:20 +02:00
Willem Dantuma
0485c163ad Fix build
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-12 15:55:38 +02:00
Willem Dantuma
1380d7169a Fix trigger
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-04-12 15:10:29 +02:00
Willem Dantuma
cbf805e1ff Fix novalue
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 20:07:31 +01:00
Willem Dantuma
fe1fddd211 Update layer
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 18:35:22 +01:00
Willem Dantuma
fa146f2c6e Refactor fmMapIfZoomToShow
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 12:00:04 +01:00
Willem Dantuma
75d8909997 Fix build
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 11:29:08 +01:00
Willem Dantuma
36d9c98e47 Clear view
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-20 11:06:04 +01:00
00346a963e Pfff
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-17 19:33:54 +01:00
a42059627a Added level to get features call
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-15 16:26:05 +01:00
Willem Dantuma
f8a0e1e167 Add SetUnreadNotifications action
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-08 08:45:13 +01:00
Willem Dantuma
eb46b3496a Fix type check
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-06 14:06:31 +01:00
Willem Dantuma
3d8ce7ee74 Fix null check
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 19:03:50 +01:00
Willem Dantuma
aa308abbb0 Fix request canceling
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 18:41:09 +01:00
Willem Dantuma
9d5cd0fa88 Add layer values
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 17:19:30 +01:00
Willem Dantuma
5760c2b8ea oops
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-05 12:40:52 +01:00
Willem Dantuma
1e6c9e9363 Fix build
Some checks failed
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
Some checks failed
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 17:21:54 +01:00
Willem Dantuma
b000d5119a Return correct file
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 16:51:16 +01:00
2dd10f04a3 Return selected file as well
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 15:36:01 +01:00
4d62184e5b Revert "Return modal reference for client side handling."
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 8ad9d56b07.
2021-03-02 15:13:42 +01:00
8ad9d56b07 Return modal reference for client side handling.
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 14:48:49 +01:00
Willem Dantuma
2b1cb1ac8f Add save image parameter
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 13:15:16 +01:00
Willem Dantuma
08163f86bf Add more open options
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 12:20:53 +01:00
Willem Dantuma
33adb35923 Export image editor
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 09:35:39 +01:00
Willem Dantuma
855bd8fe2d Re add thumbnail component
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-02 08:16:16 +01:00
Willem Dantuma
fad257c6e2 Fix build
All checks were successful
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
Some checks failed
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
3c0f220ee3 Span required instead of div
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-01 12:49:12 +01:00
38e64a0713 Fix
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-03-01 12:38:16 +01:00
0bb5406773 AW-1881
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-03-01 12:32:14 +01:00
7c125f1771 AW-1881
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-27 14:47:16 +01:00
3673e0b349 Fixes
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-27 10:27:49 +01:00
ece6096064 AW-1881 Avatar
All checks were successful
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
535f6bd064 Add ngx avatar
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-25 17:32:58 +01:00
74e7f41583 Added avatar
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-02-25 17:17:52 +01:00
b537239c96 AW-1881 Avatar based on first letters of firstname and lastname
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-18 16:09:25 +01:00
f9ba4fd5e2 Revert "Update version"
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 8326255ce9.
2021-02-17 12:30:54 +01:00
8326255ce9 Update version
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-17 12:27:13 +01:00
3d60d0127b AW-1959 Fix?
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-16 17:23:15 +01:00
697708710e Fix help-menu.component.ts
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-16 17:07:40 +01:00
102d96ded9 AW-1959 Add global help-menu
All checks were successful
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
All checks were successful
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
3242058c4f refactor user api
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-15 11:03:24 +01:00
3f6863845b renamed package guard and added it to public api
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-11 17:43:19 +01:00
Willem Dantuma
231fbf9ee8 Add test
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-11 11:49:28 +01:00
Willem Dantuma
142a1c9e58 Add notification menu
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-11 11:44:34 +01:00
39993e75da added a package guard
All checks were successful
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
All checks were successful
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
da562ca96d fix
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-03 09:13:08 +01:00
33d03c3d58 add searchable field to user
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 17:38:34 +01:00
Willem Dantuma
bb71c043a1 Fix headers
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 17:25:26 +01:00
Willem Dantuma
cb222770d8 Refactor to range requests
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 17:09:03 +01:00
Willem Dantuma
f26ececb9b Fix nullref
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-02 14:45:33 +01:00
Willem Dantuma
2d285eaba0 Fix device change detection
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-02-01 08:34:17 +01:00
Willem Dantuma
0c44beabe0 Change map button styling
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 16:40:25 +01:00
Willem Dantuma
dd97c89254 Fix outlet
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 14:41:34 +01:00
Willem Dantuma
45de27f666 Add haspackage for 3d
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 11:14:25 +01:00
Willem Dantuma
5b0632ebf1 Re enable gps location
All checks were successful
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-30 09:56:56 +01:00
Willem Dantuma
208dfed7fb Add checks
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-29 12:00:59 +01:00
Willem Dantuma
516d63a59e Fix build
All checks were successful
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
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 21:43:46 +01:00
Willem Dantuma
69e153abd7 upgrade
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 10:33:01 +01:00
Willem Dantuma
a7402438a0 oops
All checks were successful
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
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 07:34:10 +01:00
Willem Dantuma
9245003dd9 Export back-button
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-27 07:26:31 +01:00
Willem Dantuma
8d061210dc Fix build
All checks were successful
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
Some checks failed
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 19:53:51 +01:00
Willem Dantuma
a2e7439776 re add Optimisation
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 17:48:11 +01:00
Willem Dantuma
e858ac778c Fix temporal layer selection
Some checks reported errors
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 16:47:08 +01:00
Willem Dantuma
8f54e095fe debug
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 15:27:40 +01:00
Willem Dantuma
431cc78c19 remove layer when destroyed
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 14:38:40 +01:00
Willem Dantuma
878944b056 Export temporal item layer
All checks were successful
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()
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-26 09:12:37 +01:00
Willem Dantuma
ac352473a0 add i18n tag
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 21:14:47 +01:00
Willem Dantuma
8655307858 Fix date
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 21:11:20 +01:00
Willem Dantuma
17a947ce20 Oops
All checks were successful
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
Some checks failed
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
All checks were successful
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
All checks were successful
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
8f364c4990 fix bar-chart icon
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-25 11:42:57 +01:00
Willem Dantuma
46f4ac06f4 Fix icons
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-24 09:26:30 +01:00
Willem Dantuma
b14b01b358 Update icons
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
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
428e3b002d Fix UTC
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-18 16:45:37 +01:00
65366ff09b Again....
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-18 15:23:44 +01:00
0f1ce45b2f AW-1844 Fix fmHasPackage
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2021-01-18 15:21:34 +01:00
1ade8025ab Fix HasPackageDirective
Some checks failed
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
41b1295f9e Move mollie code ( srvice ) uit farmmapslib halen ( is open source ), naar farmmaps
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-13 17:29:48 +01:00
ed5a74ed07 Export new Mollie types
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-13 17:18:45 +01:00
a08eed7c67 AW-1805 Update mollie service (client)
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-13 16:40:35 +01:00
cc421742df AW-1805 Add support for validity
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-12 09:05:27 +01:00
9a38630d01 Fix URL
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-11 19:50:24 +01:00
978360fad0 Build error
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2021-01-11 19:34:39 +01:00
30dab68468 AW-1805 Add mollie service
Some checks failed
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
a782d8ebe9 add clearlayers action
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-16 23:01:59 +01:00
Willem Dantuma
a0816afaea Add SetSelectedItemLayer action
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-16 18:04:39 +01:00
Willem Dantuma
6746047fe2 Add setfeatures action
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-11 12:08:15 +01:00
Willem Dantuma
e873f5af5b Fix icon
All checks were successful
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
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-08 16:14:58 +01:00
Willem Dantuma
f2cb5d4d64 Update configuration
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-12-07 17:20:34 +01:00
6252cc120b aw-1686 expand user profile; added put operation
All checks were successful
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
946cbc6533 AQ-1659 Add getItemListUsingRelationship(...)
All checks were successful
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
All checks were successful
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
65c1643c95 AW-1649 Remove codelistitem
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-11-02 12:24:15 +01:00
Willem Dantuma
d661e5f3f9 Fix zoom padding
All checks were successful
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 16:58:03 +01:00
Willem Dantuma
56a7544c1e Make reverse non destructive
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 13:43:31 +01:00
Willem Dantuma
61636b6e3d Reverse arrays
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 13:38:27 +01:00
Willem Dantuma
ab835e904e Fix routes
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-31 11:45:03 +01:00
Willem Dantuma
cd10165510 Remove old init
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-30 13:12:13 +01:00
Willem Dantuma
446d26607c Fix initalisation
Some checks reported errors
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
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-30 12:37:02 +01:00
Willem Dantuma
2656a67fca Refactor token refresh flows
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-30 08:22:58 +01:00
Willem Dantuma
46c5f74b49 Refactoring for landingpage support
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-29 19:14:06 +01:00
Willem Dantuma
a5ece9b453 Fix map viewport size
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-28 17:54:46 +01:00
Willem Dantuma
9fb5a9698c Refactor map component
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-28 13:31:12 +01:00
fad2f19ae4 added readWrite property for codeListItem
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-13 08:38:23 +02:00
2ad04fc7c1 Added getCodeListItem api for service
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-12 17:41:24 +02:00
f656ecd23f undo previous commit
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-12 14:05:27 +02:00
d42aad87bd Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2020-10-10 12:02:34 +02:00
415ee8ef30 something weird, codeList item in url seems empty. But item is not empty 2020-10-10 12:00:05 +02:00
291 changed files with 87768 additions and 11851 deletions

22
.eslintrc.js Normal file
View File

@@ -0,0 +1,22 @@
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"overrides": [
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
}
}

5
.gitignore vendored
View File

@@ -33,6 +33,7 @@ speed-measure-plugin.json
.history/*
# misc
/.angular/cache
/.sass-cache
/connect.lock
/coverage
@@ -47,3 +48,7 @@ testem.log
Thumbs.db
projects/common/node_modules/
projects/common-map/node_modules/
.angular/*
projects/common-map3d/node_modules/
projects/common-map/node_modules/
projects/common/node_modules/

24
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,24 @@
@Library('farmmaps-shared-library') _
pipeline {
agent any;
options {
copyArtifactPermission projectNames: env.allProjectsArtifactPermission;
disableConcurrentBuilds abortPrevious: true;
}
stages {
stage('FarmmapsLibBuildAll') {
steps {
stepFarmmapsLibBuildAll();
}
}
}
post {
success {
postSuccess();
}
always {
postAlways();
}
}
}

View File

@@ -1,54 +1,24 @@
@Library('farmmaps-shared-library') _
pipeline {
agent any
environment {
PACKAGE_VERSION_PREFIX=sh(script: 'jq .version package.json |sed "s/\\"//g"', returnStdout: true).trim()
PACKAGE_VERSION="${PACKAGE_VERSION_PREFIX + '-prerelease.' + env.BUILD_NUMBER}"
agent any;
options {
copyArtifactPermission projectNames: env.allProjectsArtifactPermission;
disableConcurrentBuilds abortPrevious: true;
}
stages {
stage('npm install'){
stage('FarmmapsLibBuildAll') {
steps {
sh '''rm -rf node_modules/
npm install
cd projects/common
npm install
cd ../common-map
npm install
cd ../common-map3d
npm install
'''
stepFarmmapsLibBuildAll();
}
}
stage('build'){
steps {
sh '''ng build common
ng build common-map
ng build common-map3d'''
}
}
stage('npm publish'){
steps {
sh '''cd dist/common
npm version ${PACKAGE_VERSION}
npm publish
cd ../common-map
npm version ${PACKAGE_VERSION}
npm publish
cd ../common-map3d
npm version ${PACKAGE_VERSION}
npm publish'''
}
}
}
post {
success {
postSuccess();
}
always {
emailext (
body: '${DEFAULT_CONTENT}',
mimeType: 'text/html',
replyTo: '${DEFAULT_REPLYTO}',
subject: '${DEFAULT_SUBJECT}',
to: emailextrecipients([[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']])
)
postAlways();
}
}
}

View File

@@ -55,5 +55,11 @@ ng serve
Point your browser to http://localhost:4200
*ESLint*
```
npm run lint src
npm run lint projects/common/src
npm run lint projects/common-map/src
npm run lint projects/common-map3d/src
```

View File

@@ -48,7 +48,7 @@
"styles": [
"src/styles.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",
"node_modules/cesium/Build/Cesium/Widgets/widgets.css",
"node_modules/ol/ol.css"
@@ -83,6 +83,31 @@
"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"
}
]
}
}
},
@@ -94,8 +119,12 @@
"configurations": {
"production": {
"browserTarget": "farmmaps-lib-app:build:production"
},
"development": {
"browserTarget": "farmmaps-lib-app:build:development"
}
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
@@ -119,18 +148,6 @@
"src/assets"
]
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
@@ -150,15 +167,6 @@
"devServerTarget": "farmmaps-lib-app:serve:production"
}
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**"
]
}
}
}
},
@@ -169,7 +177,7 @@
"prefix": "fm",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"builder": "@angular-devkit/build-angular:ng-packagr",
"options": {
"tsConfig": "projects/common/tsconfig.lib.json",
"project": "projects/common/ng-package.json"
@@ -187,18 +195,6 @@
"tsConfig": "projects/common/tsconfig.spec.json",
"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/**"
]
}
}
}
},
@@ -209,7 +205,7 @@
"prefix": "fm-map",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"builder": "@angular-devkit/build-angular:ng-packagr",
"options": {
"tsConfig": "projects/common-map/tsconfig.lib.json",
"project": "projects/common-map/ng-package.json"
@@ -227,18 +223,6 @@
"tsConfig": "projects/common-map/tsconfig.spec.json",
"karmaConfig": "projects/common-map/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"projects/common-map/tsconfig.lib.json",
"projects/common-map/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
@@ -267,21 +251,11 @@
"tsConfig": "projects/common-map3d/tsconfig.spec.json",
"karmaConfig": "projects/common-map3d/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"projects/common-map3d/tsconfig.lib.json",
"projects/common-map3d/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "farmmaps-lib-app"
"cli": {
"analytics": false
}
}

View File

@@ -1,10 +1,16 @@
module.exports = {
node: {
resolve: {
fallback: {
// Resolve node module use of fs
fs: "empty",
Buffer: false,
http: "empty",
https: "empty",
zlib: "empty"
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/")
}
};
}
};

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.**

27013
fontawesome-6.2.1/css/all.css Normal file

File diff suppressed because it is too large Load Diff

6
fontawesome-6.2.1/css/all.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

6
fontawesome-6.2.1/css/brands.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

6
fontawesome-6.2.1/css/duotone.min.css vendored Normal file

File diff suppressed because one or more lines are too long

12940
fontawesome-6.2.1/css/fontawesome.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

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
fontawesome-6.2.1/css/light.min.css vendored Normal file
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}

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
fontawesome-6.2.1/css/regular.min.css vendored Normal file
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}

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; }

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}

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
fontawesome-6.2.1/css/solid.min.css vendored Normal file
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}

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

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
fontawesome-6.2.1/css/thin.min.css vendored Normal file
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}

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; }

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

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"); }

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: 143 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -23,6 +23,46 @@
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";
}
.fm-carbon:before {
content: "j";
}
.fm-bo-akkerbouw:before {
content: "k";
}
.fm-grass:before {
content: "l";
}
@font-face {
font-family: "FarmMaps";
src: url("./FMIconFont.woff") format("woff"), /* Modern Browsers */

33353
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,72 +1,89 @@
{
"name": "farmmaps-lib-app",
"version": "0.0.1",
"version": "3.4.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"lint": "eslint -c .eslintrc.js --ext .ts",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "~10.1.3",
"@angular/common": "~10.1.3",
"@angular/compiler": "~10.1.3",
"@angular/core": "~10.1.3",
"@angular/forms": "~10.1.3",
"@angular/platform-browser": "~10.1.3",
"@angular/platform-browser-dynamic": "~10.1.3",
"@angular/router": "~10.1.3",
"@farmmaps/common": ">=0.0.1-prerelease.434 <0.0.1",
"@farmmaps/common-map": ">=0.0.1-prerelease.434 <0.0.1",
"@farmmaps/common-map3d": ">=0.0.1-prerelease.434 <0.0.1",
"@microsoft/signalr": "^3.1.3",
"@ng-bootstrap/ng-bootstrap": "^7.0",
"@ngrx/effects": "^10.0",
"@ngrx/router-store": "^10.0",
"@ngrx/store": "^10.0",
"angular-oauth2-oidc": "^10.0.3",
"bootstrap": "^4.4.1",
"cesium": "^1.73.0",
"core-js": "^2.6.11",
"font-awesome": "^4.7.0",
"ngrx-store-localstorage": "^10.0",
"ngx-bootstrap": "^5.6.1",
"ngx-openlayers": "1.0.0-next.16",
"ngx-uploadx": "^3.5.1",
"ol": "6.1.1",
"ol-cesium": "^2.11.3",
"@angular/animations": "^14.1.3",
"@angular/common": "^14.1.3",
"@angular/compiler": "^14.1.3",
"@angular/core": "^14.1.3",
"@angular-eslint/eslint-plugin": "^15.2.1",
"@angular/forms": "^14.1.3",
"@angular/platform-browser": "^14.1.3",
"@angular/platform-browser-dynamic": "^14.1.3",
"@angular/router": "^14.1.3",
"@farmmaps/common": "file:dist/common",
"@farmmaps/common-map": "file:dist/common-map",
"@farmmaps/common-map3d": "file:dist/common-map3d",
"@microsoft/signalr": "^3.1.16",
"@ng-bootstrap/ng-bootstrap": "^13.0.0",
"@ngrx/effects": "^14",
"@ngrx/router-store": "^14",
"@ngrx/store": "^14",
"@popperjs/core": "^2.11.6",
"angular-oauth2-oidc": "^13",
"assert": "^2.0.0",
"bootstrap": "^5.2.0",
"browserify-zlib": "^0.2.0",
"buffer": "^6.0.3",
"cesium": "^1.97.0",
"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",
"rxjs": "^6.5.4",
"rxjs": "^6.6.7",
"stream": "^0.0.2",
"stream-http": "^3.2.0",
"tassign": "^1.0.0",
"tslib": "^2.0.0",
"zone.js": "~0.10.2",
"moment": "^2.27.0"
"tslib": "^2.4.0",
"url": "^0.11.0",
"util": "^0.12.4",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.1001.3",
"@angular-devkit/build-ng-packagr": "~0.1001.3",
"@angular/cli": "^10.1.3",
"@angular/compiler-cli": "~10.1.3",
"@angular/language-service": "~10.1.3",
"@angular-builders/custom-webpack": "~10.0.1",
"@angular-builders/custom-webpack": "^14",
"@angular-devkit/build-angular": "^14.1.3",
"@angular/cli": "^14.1.3",
"@angular/compiler-cli": "^14.1.3",
"@angular/language-service": "^14.1.3",
"@angular/localize": "^14.1.3",
"@types/arcgis-rest-api": "^10.4.5",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1",
"codelyzer": "^5.1.2",
"jasmine-core": "~3.5.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0",
"@types/jasminewd2": "^2.0.9",
"@types/node": "^12.20.15",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/eslint-plugin-tslint": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",
"codelyzer": "^0.0.28",
"eslint": "^8.35.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-import": "^2.27.5",
"jasmine-core": "^4.3.0",
"jasmine-spec-reporter": "^7.0.0",
"karma": "^6.3.20",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"ng-packagr": "^10.1.0",
"karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0",
"ng-packagr": "^14.1.0",
"protractor": "~7.0.0",
"ts-node": "^8.8.1",
"tslint": "~6.1.0",
"typescript": "~4.0.3"
"typescript": "~4.6.4"
}
}

View File

@@ -0,0 +1,22 @@
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"overrides": [
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
}
}

View File

@@ -4,7 +4,7 @@
"lib": {
"entryFile": "src/public-api.ts"
},
"whitelistedNonPeerDependencies": [
"allowedNonPeerDependencies": [
"."
]
}

View File

@@ -1,10 +1,27 @@
{
"name": "@farmmaps/common-map",
"version": "0.0.1",
"lockfileVersion": 1,
"version": "2.0.0",
"lockfileVersion": 3,
"requires": true,
"dependencies": {
"tslib": {
"packages": {
"": {
"name": "@farmmaps/common-map",
"version": "2.0.0",
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/core": ">=14.0.0",
"@ngrx/effects": ">=14.0.0",
"@ngrx/router-store": ">=14.0.0",
"@ngrx/store": ">=14.0.0",
"ngrx-store-localstorage": ">=14.0.0",
"ngx-openlayers": ">=1.0.0-next.19",
"ol": ">=6.8.1",
"tassign": ">=1.0.0"
}
},
"node_modules/tslib": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
"integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ=="

View File

@@ -1,6 +1,6 @@
{
"name": "@farmmaps/common-map",
"version": "0.0.1",
"version": "2.0.0",
"publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
},
@@ -8,14 +8,13 @@
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/core": "^10.1.3",
"ngrx-store-localstorage": "^10.0",
"@ngrx/effects": "^10.0",
"@ngrx/router-store": "^10.0",
"@ngrx/store": "^10.0",
"tassign": "^1.0.0",
"@farmmaps/common": ">=0.0.1-prerelease.420 <0.0.1",
"ngx-openlayers": "1.0.0-next.16",
"ol": "6.1.1"
"@angular/core": ">=14.0.0",
"ngrx-store-localstorage": ">=14.0.0",
"@ngrx/effects": ">=14.0.0",
"@ngrx/router-store":">=14.0.0",
"@ngrx/store":">=14.0.0",
"tassign": ">=1.0.0",
"ngx-openlayers": ">=1.0.0-next.19",
"ol": ">=6.8.1"
}
}

View File

@@ -2,20 +2,26 @@ import { Action } from '@ngrx/store';
import { IMapState } from '../models/map.state';
import { IItemLayer } from '../models/item.layer';
import { ILayervalue } from '../models/layer.value';
import { IQueryState } from '@farmmaps/common';
import { IItem } from '@farmmaps/common';
import { Feature,Style } from 'ol';
import { Feature, Observable } 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 SETMAPSTATE = '[Map] MapState';
export const SETVIEWEXTENT = '[Map] SetViewExtent';
export const INIT = '[Map] Init';
export const SETPARENT = '[Map] SetParent';
export const SETPERIOD = '[Map] SetPeriod';
export const STARTSEARCH = '[Map] StartSearch';
export const STARTSEARCHSUCCESS = '[Map] StartSearchSuccess';
export const SELECTFEATURE = '[Map] SelectFeature';
export const SELECTITEM = '[Map] SelectItem';
export const SELECTITEMSUCCESS = '[Map] SelectItemSuccess';
export const SETSELECTEDITEMLAYER = '[Map] SetSelectedItemLayer';
export const SELECTTEMPORALITEMSSUCCESS = '[Map] SelectTemporalItemsSuccess';
export const NEXTTEMPORAL = '[Map] NextTemporal';
export const PREVIOUSTEMPORAL = '[Map] PreviousTemporal';
@@ -32,6 +38,7 @@ export const SETVISIBILITY = '[Map] SetVisibility';
export const SETOPACITY = '[Map] SetOpacity';
export const SETLAYERINDEX = '[Map] SetLayerIndex';
export const REMOVELAYER = '[Map] RemoveLayer';
export const CLEARLAYERS = '[Map] ClearLayers';
export const LOADBASELAYERS = '[Map] LoadLayers';
export const LOADBASELAYERSSUCCESS = '[Map] LoadLayersSuccess';
export const SELECTBASELAYER = '[Map] SelectBaseLayers';
@@ -42,6 +49,14 @@ export const SETSTYLE = '[Map] SetStyle';
export const SHOWLAYERSWITCHER = '[Map] ShowLayerSwitcher';
export const CLEAR = '[Map] Clear';
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 const SETCODELIST = '[Map] SetCodeList'
export class Clear implements Action {
readonly type = CLEAR;
@@ -78,6 +93,12 @@ export class SetParent implements Action {
constructor(public parentCode:string) { }
}
export class SetPeriod implements Action {
readonly type = SETPERIOD;
constructor(public period:IPeriodState) { }
}
export class StartSearch implements Action {
readonly type = STARTSEARCH;
@@ -87,13 +108,13 @@ export class StartSearch implements Action {
export class StartSearchSuccess implements Action {
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 {
readonly type = SELECTFEATURE;
constructor(public feature:Feature) { }
constructor(public feature:Feature<Geometry>) { }
}
export class SelectItem implements Action {
@@ -135,13 +156,13 @@ export class SelectTemporal implements Action {
export class AddFeatureSuccess implements Action {
readonly type = ADDFEATURESUCCESS;
constructor(public feature: Feature) { }
constructor(public feature: Feature<Geometry>) { }
}
export class UpdateFeatureSuccess implements Action {
readonly type = UPDATEFEATURESUCCESS;
constructor(public feature: Feature) { }
constructor(public feature: Feature<Geometry>) { }
}
export class ExpandSearch implements Action {
@@ -180,6 +201,12 @@ export class AddLayer implements Action {
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 {
readonly type = SETVISIBILITY;
@@ -204,6 +231,12 @@ export class RemoveLayer implements Action {
constructor(public itemLayer: IItemLayer) { }
}
export class ClearLayers implements Action {
readonly type = CLEARLAYERS;
constructor() { }
}
export class LoadBaseLayers implements Action {
readonly type = LOADBASELAYERS;
@@ -237,13 +270,13 @@ export class ZoomToExtent implements Action {
export class DoQuery implements Action {
readonly type = DOQUERY;
constructor(public query:IQueryState) { }
constructor(public query:IQueryState,public replace:boolean = false) { }
}
export class SetStyle implements Action {
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 {
@@ -256,6 +289,52 @@ export class SetReplaceUrl implements Action {
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 class SetCodeList implements Action {
readonly type = SETCODELIST;
constructor(public itemType:string, public values: IItem[]) { }
}
export type Actions = SetMapState
| Init
| Clear
@@ -278,6 +357,7 @@ export type Actions = SetMapState
| SetTimeSpan
| AddLayer
| RemoveLayer
| ClearLayers
| SetVisibility
| SetOpacity
| SetLayerIndex
@@ -291,5 +371,15 @@ export type Actions = SetMapState
| DoQuery
| SetStyle
| ShowLayerSwitcher
| SetReplaceUrl;
| SetReplaceUrl
| SetFeatures
| SetSelectedItemLayer
| SetLayerValuesLocation
| ToggleLayerValuesEnabled
| GetLayerValueSuccess
| GetLayerValue
| SetPeriod
| ToggleShowDataLayerSlide
| SetViewState
| SetCodeList;

View File

@@ -5,21 +5,21 @@ import { AuthGuard } from '@farmmaps/common';
const routes = [
{
path: '', children: [
{
path: '',
component: MapComponent
}
]
path: '',
component: MapComponent
},
{
path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer/:queryState', children: [
{
path: '',
component: MapComponent
}
]
}
path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer',
component: MapComponent
},
{
path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer/:queryState',
component: MapComponent
},
{
path: ':queryState',
component: MapComponent
}
];
@NgModule({

View File

@@ -18,8 +18,8 @@ import * as mapEffects from './effects/map.effects';
import { IMapState} from './models/map.state';
import { ISelectedFeatures } from './models/selected.features';
import { IItemLayer } from './models/item.layer';
import { ItemLayer} from './models/item.layer';
import { IItemLayer,ItemLayer,ITemporalItemLayer,TemporalItemLayer } from './models/item.layer';
import { IClickedFeature } from './models/clicked.feature';
import { IPeriodState } from './models/period.state';
// components
@@ -59,6 +59,7 @@ import { LayerVectorImageComponent } from './components/aol/layer-vector-image/l
import {FeatureIconService} from './services/feature-icon.service';
import { GeolocationService } from './services/geolocation.service';
import {DeviceOrientationService} from './services/device-orientation.service';
import { TemporalService} from './services/temporal.service';
import { WidgetStatusComponent } from './components/widget-status/widget-status.component';
import { ForChild} from './components/for-item/for-child.decorator';
import {ForItemType } from './components/for-item/for-itemtype.decorator';
@@ -68,19 +69,31 @@ import { PanToLocation} from './components/aol/pan-to-location/pan-to-location.c
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> {
const r = function(state, action) {
const r2 = reducer(state, action);
if(action.type == "@ngrx/store/update-reducers") {
let ms = window.localStorage.getItem(MODULE_NAME+"_mapState");
const ms = window.localStorage.getItem(MODULE_NAME+"_mapState");
if(ms) {
r2["mapState"] = JSON.parse(ms);
}
const sp = window.localStorage.getItem(MODULE_NAME+"_searchPeriod");
if(sp) {
const 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") {
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;
@@ -138,6 +151,7 @@ export {
FeatureIconService,
GeolocationService,
DeviceOrientationService,
TemporalService,
IMapState,
ISelectedFeatures,
IItemLayer,
@@ -146,136 +160,130 @@ export {
ForChild,
ForItemType,
ForSourceTask,
ForPackage
ForPackage ,
ITemporalItemLayer,
TemporalItemLayer,
ifZoomToShowDirective,
ZoomToShowAlert,
IClickedFeature,
GeometryThumbnailComponent
}
@NgModule({
imports: [
CommonModule,
AngularOpenlayersModule,
MapRoutingModule,
StoreModule.forFeature(MODULE_NAME, mapReducers.reducer,{metaReducers:metaReducers}),
EffectsModule.forFeature([mapEffects.MapEffects]),
NgbModule,
FormsModule,
ReactiveFormsModule,
AppCommonModule
],
declarations: [
ZoomToExtentComponent,
ItemVectorSourceComponent,
ItemLayersComponent,
FileDropTargetComponent,
MapComponent,
MetaDataModalComponent,
RotationResetComponent,
MapSearchComponent,
SelectPeriodModalComponent,
LayerListComponent,
LegendComponent,
LayerVectorImageComponent,
FeatureListComponent,
WidgetHostDirective,
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent,
FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent,
FeatureListFeatureCropfieldComponent,
SelectedItemContainerComponent,
SelectedItemComponent,
SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent,
SelectedItemTemporalComponent,
SelectedItemShapeComponent,
ItemListItemComponent,
ItemListItemContainerComponent,
ItemListComponent,
ItemWidgetListComponent,
WidgetStatusComponent,
GpsLocation,
PanToLocation,
LayerSwitcher,
HistogramDetailsComponent,
StatisticsDetailsComponent
],
entryComponents: [
FeatureListComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent,
FeatureListFeatureCropfieldComponent,
SelectedItemComponent,
SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent,
SelectedItemTemporalComponent,
SelectedItemShapeComponent,
ItemListComponent,
ItemListItemComponent,
],
exports: [
ItemVectorSourceComponent,
ItemLayersComponent,
FileDropTargetComponent,
MetaDataModalComponent,
MapComponent,
GpsLocation,
PanToLocation,
LayerSwitcher,
FeatureListFeatureComponent,
FeatureListFeatureCropfieldComponent,
FeatureListFeatureCroppingschemeComponent,
SelectedItemContainerComponent,
SelectedItemComponent,
SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent,
SelectedItemTemporalComponent,
SelectedItemShapeComponent,
ItemListItemComponent,
ItemListItemContainerComponent,
ItemListComponent,
ItemWidgetListComponent,
WidgetStatusComponent,
RotationResetComponent,
MapSearchComponent,
SelectPeriodModalComponent,
LayerListComponent,
LegendComponent,
LayerVectorImageComponent,
FeatureListComponent,
WidgetHostDirective,
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent,
ZoomToExtentComponent
]
@NgModule({
imports: [
CommonModule,
AngularOpenlayersModule,
MapRoutingModule,
StoreModule.forFeature(MODULE_NAME, mapReducers.reducer, { metaReducers: metaReducers }),
EffectsModule.forFeature([mapEffects.MapEffects]),
NgbModule,
FormsModule,
ReactiveFormsModule,
AppCommonModule
],
declarations: [
ZoomToExtentComponent,
ItemVectorSourceComponent,
ItemLayersComponent,
FileDropTargetComponent,
MapComponent,
MetaDataModalComponent,
RotationResetComponent,
MapSearchComponent,
SelectPeriodModalComponent,
LayerListComponent,
LegendComponent,
LayerVectorImageComponent,
FeatureListComponent,
WidgetHostDirective,
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent,
FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent,
FeatureListFeatureCropfieldComponent,
SelectedItemContainerComponent,
SelectedItemComponent,
SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent,
SelectedItemTemporalComponent,
SelectedItemShapeComponent,
ItemListItemComponent,
ItemListItemContainerComponent,
ItemListComponent,
ItemWidgetListComponent,
WidgetStatusComponent,
GpsLocation,
PanToLocation,
LayerSwitcher,
HistogramDetailsComponent,
StatisticsDetailsComponent,
ifZoomToShowDirective,
ZoomToShowAlert,
LayerValuesComponent,
GeometryThumbnailComponent
],
exports: [
ItemVectorSourceComponent,
ItemLayersComponent,
FileDropTargetComponent,
MetaDataModalComponent,
MapComponent,
GpsLocation,
PanToLocation,
LayerSwitcher,
FeatureListFeatureComponent,
FeatureListFeatureCropfieldComponent,
FeatureListFeatureCroppingschemeComponent,
SelectedItemContainerComponent,
SelectedItemComponent,
SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent,
SelectedItemTemporalComponent,
SelectedItemShapeComponent,
ItemListItemComponent,
ItemListItemContainerComponent,
ItemListComponent,
ItemWidgetListComponent,
WidgetStatusComponent,
RotationResetComponent,
MapSearchComponent,
SelectPeriodModalComponent,
LayerListComponent,
LegendComponent,
LayerVectorImageComponent,
FeatureListComponent,
WidgetHostDirective,
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent,
ZoomToExtentComponent,
ifZoomToShowDirective,
ZoomToShowAlert,
GeometryThumbnailComponent
],
providers: [
FeatureIconService,
GeolocationService,
DeviceOrientationService,
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 {
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 }
]
};
}
export class AppCommonMapModule {
}

View File

@@ -4,7 +4,7 @@ import { MapComponent } from 'ngx-openlayers';
import * as proj from 'ol/proj';
import {Point,Geometry} from 'ol/geom';
import { GeoJSON } from 'ol/format';
import { Feature } from 'ol';
import { Feature} from 'ol';
export interface IDroppedFile {
files: any,
@@ -21,14 +21,14 @@ export class FileDropTargetComponent implements OnInit, OnDestroy {
element: Element;
@Output() onFileDropped = new EventEmitter<IDroppedFile>();
@Input() parentCode: string;
@Input() features: Array<Feature>;
@Input() features: Array<Feature<Geometry>>;
constructor(private map: MapComponent) {
}
ngOnInit() {
this.element = this.map.instance.getViewport();
let other = this;
const other = this;
this.element.addEventListener('drop', this.onDrop, false);
this.element.addEventListener('dragover', this.preventDefault, false);
this.element.addEventListener('dragenter', this.preventDefault, false);
@@ -36,20 +36,20 @@ export class FileDropTargetComponent implements OnInit, OnDestroy {
private onDrop = (event: DragEvent) => {
this.stopEvent(event);
let geojsonFormat = new GeoJSON();
var parentCode = this.parentCode;
var coordinate = this.map.instance.getEventCoordinate(event);
const geojsonFormat = new GeoJSON();
let parentCode = this.parentCode;
const coordinate = this.map.instance.getEventCoordinate(event);
//coordinate = proj.transform(coordinate, this.map.instance.getView().getProjection(), 'EPSG:4326');
var geometry:Geometry = new Point(coordinate);
var hitFeatures = this.map.instance.getFeaturesAtPixel([event.pageX, event.pageY]);
var hitFeature = hitFeatures && hitFeatures.length > 0 ? hitFeatures[0] : null;
let geometry:Geometry = new Point(coordinate);
const hitFeatures = this.map.instance.getFeaturesAtPixel([event.pageX, event.pageY]);
const hitFeature = hitFeatures && hitFeatures.length > 0 ? hitFeatures[0] : null;
if (hitFeature) {
if (hitFeature.get("code")) {
parentCode = hitFeature.get("code");
}
geometry = geojsonFormat.readGeometry(geojsonFormat.writeGeometry(geometry)); // create copy instead of reference
}
var projectedGeometry = geometry.transform(this.map.instance.getView().getProjection(), 'EPSG:4326');
const projectedGeometry = geometry.transform(this.map.instance.getView().getProjection(), 'EPSG:4326');
if (event.dataTransfer && event.dataTransfer.files) {
this.onFileDropped.emit({ files: event.dataTransfer.files, event: event, geometry: JSON.parse(geojsonFormat.writeGeometry(projectedGeometry)),parentCode:parentCode})

View File

@@ -6,8 +6,8 @@
<stop offset="100%" class="stop2" />
</linearGradient>
</defs>
<circle class="tolerance" 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>
<circle class="tolerance hidden" [ngClass]="{'hidden':!showTolerance}" cx="500" cy="500" stroke="none" [attr.r]="locTolerancePixels" />
<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="center" cx="500" cy="500" r="6" stroke="none" />

View File

@@ -9,11 +9,19 @@
stroke-width: 0;
}
.heading.hidden {
display: none;
}
.tolerance {
fill: $primary;
fill-opacity:0.4;
}
.tolerance.hidden {
display: none
}
.border {
fill: $white;
}

View File

@@ -1,6 +1,6 @@
import { Component, OnInit, Input, ViewChild, ElementRef, OnChanges, SimpleChanges ,Host} from '@angular/core';
import { MapComponent } from 'ngx-openlayers';
import Overlay from 'ol/Overlay';
import Overlay from 'ol/Overlay';
import { fromLonLat, toLonLat } from 'ol/proj';
@@ -13,20 +13,21 @@ export class GpsLocation implements OnInit,OnChanges{
@Input() enable:boolean;
public instance: Overlay;
@Input() position: Position;
@Input() position: GeolocationPosition;
@Input() location: number[]=[0,0];
@Input() locationTolerance: number = 0;
@Input() showHeading: boolean = false;
@Input() heading: number = 0;
@Input() headingTolerance: number = 0;
public locTolerancePixels: number = 0;
public path: string = "";
public rotate: string = "";
private resolution: number = 0;
initialized:boolean = false;
@Input() locationTolerance = 0;
@Input() showHeading = false;
@Input() showTolerance = false;
@Input() heading = 0;
@Input() headingTolerance = 0;
public locTolerancePixels = 0;
public path = "";
public rotate = "";
private resolution = 0;
initialized = false;
@ViewChild('location', { static: true }) locationElement: ElementRef;
constructor(@Host() private map: MapComponent) {
constructor(private map: MapComponent) {
}
@@ -41,17 +42,17 @@ export class GpsLocation implements OnInit,OnChanges{
position: fromLonLat( this.location),
element: this.locationElement.nativeElement
});
var x = Math.tan(this.headingTolerance * Math.PI / 180)*40;
var y = Math.cos(this.headingTolerance * Math.PI / 180) * 40;
var y1 = Math.round(500 - y);
var x1 = Math.round(500 - x);
var y2 = Math.round(y1);
var x2 = Math.round(500 + x);
const x = Math.tan(this.headingTolerance * Math.PI / 180)*40;
const y = Math.cos(this.headingTolerance * Math.PI / 180) * 40;
const y1 = Math.round(500 - y);
const x1 = Math.round(500 - x);
const y2 = Math.round(y1);
const x2 = Math.round(500 + x);
this.path = "M " + x2 + " " + y2 + " A 45 45,0,0,0, " + x1 + " " + y1 + " L 493 500 L 507 500 Z";
this.rotate = "rotate(" + Math.round(this.heading) + " 500 500)";
this.locTolerancePixels = this.locationTolerance;
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.recalcLocationTolerance();
});
@@ -60,7 +61,7 @@ export class GpsLocation implements OnInit,OnChanges{
ngOnChanges(changes: SimpleChanges) {
if (changes.position && this.instance) {
var p = changes.position.currentValue as Position;
const p = changes.position.currentValue as GeolocationPosition;
if(p && this.initialized) {
this.instance.setPosition(fromLonLat([p.coords.longitude, p.coords.latitude]));
this.locationTolerance = p.coords.accuracy;

View File

@@ -1,23 +1,24 @@
import { Component, Host, Input, Output, EventEmitter, Optional, QueryList, OnInit, AfterViewInit, OnChanges, SimpleChanges, SkipSelf, forwardRef, Inject, InjectionToken } from '@angular/core';
import { HttpClient } from "@angular/common/http";
import { LayerVectorComponent, LayerTileComponent, LayerGroupComponent, MapComponent } from 'ngx-openlayers';
import { Component, Host, Input, Output, EventEmitter,OnDestroy, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { LayerGroupComponent, MapComponent } from 'ngx-openlayers';
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 { 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 Projection from 'ol/proj/Projection';
import * as proj from 'ol/proj';
import * as loadingstrategy from 'ol/loadingstrategy';
import * as style from 'ol/style';
import {Tile,Layer,Image} from 'ol/layer';
import {XYZ,ImageStatic,OSM,BingMaps,TileWMS,TileArcGISRest,TileJSON} 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 VectorLayer } from 'ol/layer';
import { VectorImage as VectorImageLayer } from 'ol/layer';
import VectorTileSource from 'ol/source/VectorTile';
import VectorTileLayer from 'ol/layer/VectorTile';
import {GeoJSON,MVT} from 'ol/format';
import { from } from 'rxjs';
import { Geometry } from 'ol/geom';
import BaseLayer from 'ol/layer/Base';
@Component({
selector: 'fm-map-item-layers',
@@ -27,13 +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() 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 initialized:boolean = false;
constructor(private itemService: ItemService, @Host() private map: MapComponent, public appConfig: AppConfig) {
private initialized = false;
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);
this._apiEndPoint = appConfig.getConfig("apiEndPoint");
}
@@ -41,7 +49,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
private styleCache = {}
componentToHex(c) {
var hex = c.toString(16);
const hex = c.toString(16);
return hex.length == 1 ? "0" + hex : hex;
}
@@ -49,76 +57,100 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return "#" + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b) + this.componentToHex(a);
}
getColorFromGradient(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 gradient: IGradientstop[] = layer.renderer.colorMap.gradient;
var histogram: IHistogram = layer.renderer.band.histogram;
var index = (value - histogram.min) / histogram.max;
var min = gradient[0];
var max = gradient[gradient.length - 1];
for (var n = 0; n < gradient.length; n++) {
var s = gradient[n];
getColorFromGradient(layer: ILayer, value: number): IColor {
const gradient: IGradientstop[] = layer.renderer.colorMap.gradient;
const histogram: IHistogram = layer.renderer.band.histogram;
const index = (value - histogram.min) / histogram.max;
let min = gradient[0];
let max = gradient[gradient.length - 1];
for (let n = 0; n < gradient.length; n++) {
const s = gradient[n];
if (s.relativestop <= index && min.relativestop < s.relativestop && n < gradient.length - 1) min = s;
if (s.relativestop >= index && max.relativestop > s.relativestop && n > 0) max = s;
}
var i = index - min.relativestop;
var size = max.relativestop - min.relativestop;
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 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));
const i = index - min.relativestop;
const size = max.relativestop - min.relativestop;
const alpha = Math.round(min.color.alpha + ((max.color.alpha - min.color.alpha) * i / size));
const red = Math.round(min.color.red + ((max.color.red - min.color.red) * i / size));
const green = Math.round(min.color.green + ((max.color.green - min.color.green) * i / size));
const blue = Math.round(min.color.blue + ((max.color.blue - min.color.blue) * i / size));
this.styleCache[key] = new style.Style(
{
image: new style.Circle({
fill: new style.Fill({
color: this.rgbaToHex(red,green,blue,alpha)
return { alpha: alpha, red: red, green: green, blue: blue };
}
getColorForValue(layer: ILayer, value: number): IColor {
let 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 {
const value = layer.indexKey ? feature.get(layer.indexKey) : feature.get(layer.name);
const key = item.code + "_" + value;
if (!this.styleCache[key]) {
let 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
}),
radius: 3
}),
fill: new style.Fill({
color: this.rgbaToHex(red, green, blue, alpha)
}),
stroke: new style.Stroke({
color: this.rgbaToHex(red, green, blue, 255),
width: 1.25
}),
});
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 {
var layerIndex = -1;
var layer: Layer = null;
createGeotiffLayer(item:IItem,itemLayer:IItemLayer):Layer<Source> {
let layerIndex = -1;
let layer: Layer<Source> = null;
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)}` });
const 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 });
var data = item.data;
var l = (data && data.layers && data.layers.length > 0) ? data.layers[0] : null;
const data = item.data;
const l = (data && data.layers && data.layers.length > 0) ? data.layers[0] : null;
if (l && l.rendering && l.rendering.renderoutputType == "Tiles") {
var rt = l.rendering as IRenderoutputTiles;
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)}` });
const rt = l.rendering as IRenderoutputTiles;
const 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 });
}
if (l && l.rendering && l.rendering.renderoutputType == "Image") {
var ri = l.rendering as IRenderoutputImage;
// convert to EPSG:4326 asworkaround for cesium
var projectedExtent = proj.transformExtent( ri.extent, 'EPSG:3857','EPSG:4326');
let source = new ImageStatic({ imageExtent:projectedExtent,projection:'EPSG:4326', crossOrigin: 'use-credentials', url: `${this._apiEndPoint}/api/v1/items/${item.code}/mapimage/${layerIndex}?v=${Date.parse(item.updated)}` });
const ri = l.rendering as IRenderoutputImage;
const 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)}` });
layer = new Image({ source: source });
}
return layer;
}
createShapeLayer(item:IItem,itemLayer:IItemLayer):Layer {
var layerIndex = -1;
var layer: Layer = null;
createShapeLayer(item:IItem,itemLayer:IItemLayer):Layer<Source> {
let layerIndex = -1;
let layer: Layer<Source> = null;
layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : item.data.layers[0].index;
var data = item.data;
var l:ILayer = (data && data.layers && data.layers.length > 0) ? data.layers[layerIndex] : null;
const data = item.data;
const l:ILayer = (data && data.layers && data.layers.length > 0) ? data.layers[layerIndex] : null;
if (l && l.rendering && l.rendering.renderoutputType == "VectorTiles") {
var rt = l.rendering as IRenderoutputTiles;
layer = new VectorTileLayer({
@@ -130,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)}`
}),
style: (feature) => {
return this.getColorFromGradient(item,l, feature);
return this.getColor(item,l, feature);
}
})
} else if (l && l.rendering && l.rendering.renderoutputType == "Tiles") {
@@ -143,15 +175,15 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
})
});
} else {
let __this = this;
let format = new GeoJSON();
let source = new VectorSource({
const __this = this;
const format = new GeoJSON();
const source = new VectorSource({
strategy: loadingstrategy.bbox,
loader: function (extent: Extent, resolution: number, projection: Projection) {
var source = this as VectorSource;
const source = this as VectorSource<Geometry>;
__this.itemService.getItemFeatures(item.code, extent, projection.getCode(), layerIndex).subscribe(function (data) {
var features = format.readFeatures(data);
for (let f of features) {
const features = format.readFeatures(data);
for (const f of features) {
if (f.get("code")) {
f.setId(f.get("code"));
}
@@ -160,12 +192,13 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
});
}
});
layer = new VectorLayer({
layer = new VectorImageLayer({
declutter: true,
source: source,
style: (feature) => {
var key =feature.get("code") + "_" + feature.get("color");
const key =feature.get("code") + "_" + feature.get("color");
if (!this.styleCache[key]) {
var color = feature.get("color");
const color = feature.get("color");
this.styleCache[key] = new style.Style(
{
fill: new style.Fill({
@@ -201,37 +234,67 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return layer;
}
createExternalLayer(item:IItem,itemLayer:IItemLayer):Layer {
let data = item.data as ILayerData;
var layer: Layer = null;
createSelectionLayer(itemLayer:IItemLayer):Layer<Source> {
let layerIndex = -1;
const layer: Layer<Source> = null;
layerIndex = itemLayer.layerIndex != -1 ? itemLayer.layerIndex : itemLayer.item.data.layers[0].index;
const data = itemLayer.item.data;
const 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: '#0d6efd',
width: 3
})
}
);
}
},
minZoom: itemLayer.layer.getMinZoom(),
maxZoom: itemLayer.layer.getMaxZoom()
});
}
return null;
}
createExternalLayer(item:IItem,itemLayer:IItemLayer):Layer<Source> {
const data = item.data as ILayerData;
let layer: Layer<Source> = null;
switch (data.interfaceType) {
case 'OSM': {
let source = new OSM();
const source = new OSM();
layer = new Tile({ source: source });
break;
}
case 'BingMaps': {
let source = new BingMaps(data.options);
const source = new BingMaps(data.options);
layer = new Tile({ source: source });
break;
}
case 'TileWMS': {
let source = new TileWMS(data.options);
const source = new TileWMS(data.options);
layer = new Tile({ source: source });
break;
}
case 'TileJSON': {
let source = new TileJSON(data.options);
const source = new TileJSON(data.options);
layer = new Tile({ source: source });
break;
}
case 'TileArcGISRest': {
let source = new TileArcGISRest(data.options);
const source = new TileArcGISRest(data.options);
layer = new Tile({ source: source });
break;
}
case 'VectorWFSJson': {
let source = new VectorSource({
const source = new VectorSource({
format: new GeoJSON(),
url: function (extent) {
return (
@@ -253,9 +316,9 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return layer;
}
createLayer(itemLayer: IItemLayer): Layer {
var layer: Layer = null;
var layerIndex = -1;
createLayer(itemLayer: IItemLayer): Layer<Source> {
let layer: Layer<Source> = null;
const layerIndex = -1;
if (itemLayer.item.itemType == 'vnd.farmmaps.itemtype.geotiff.processed') {
layer = this.createGeotiffLayer(itemLayer.item,itemLayer);
} else if (itemLayer.item.itemType == 'vnd.farmmaps.itemtype.shape.processed') {
@@ -264,8 +327,8 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
layer = this.createExternalLayer(itemLayer.item,itemLayer);
}
if (layer) {
let geometry = new GeoJSON().readGeometry(itemLayer.item.geometry);
let extent = geometry ? proj.transformExtent(geometry.getExtent(), 'EPSG:4326', 'EPSG:3857') : null;
const geometry = new GeoJSON().readGeometry(itemLayer.item.geometry);
const extent = geometry ? proj.transformExtent(geometry.getExtent(), 'EPSG:4326', 'EPSG:3857') : null;
if (extent) layer.setExtent(extent);
}
@@ -277,6 +340,9 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
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([]);
@@ -284,11 +350,49 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
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()) {
const 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;
var olLayers = this.instance.getLayers();
var layer = itemLayer.layer;
let olIndex = olLayers.getArray().indexOf(layer);
const olLayers = this.instance.getLayers();
let layer = itemLayer.layer;
const olIndex = olLayers.getArray().indexOf(layer);
if (olIndex < 0) {
// New layer: we add it to the map
layer = this.createLayer(itemLayer);
@@ -308,45 +412,117 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return layer;
}
updateLayers(itemLayers: IItemLayer[]) {
let newLayers: IItemLayer[] = [];
if (itemLayers) {
itemLayers.forEach((itemLayer, index) => {
updateLayers(itemLayers: IItemLayer[] | IItemLayer) {
this.unInstallTopLayerPrerenderEventhandler();
let dataLayer = false;
let ils:IItemLayer[] = [];
if(Array.isArray(itemLayers)) {
ils = itemLayers;
} else {
dataLayer=true;
ils=[itemLayers];
}
const newLayers: Layer<Source>[] = [];
if (ils) {
ils.forEach((itemLayer, index) => {
if(itemLayer.item.itemType == 'vnd.farmmaps.itemtype.temporal') {
let il = itemLayer as ITemporalItemLayer;
let previousLayer = this.addOrUpdateOlLayer(il.previousItemLayer,newLayers.length);
const il = itemLayer as ITemporalItemLayer;
const previousLayer = this.addOrUpdateOlLayer(il.previousItemLayer,newLayers.length);
if(previousLayer) newLayers.push(previousLayer);
let selectedLayer = this.addOrUpdateOlLayer(il.selectedItemLayer,newLayers.length);
const selectedLayer = this.addOrUpdateOlLayer(il.selectedItemLayer,newLayers.length);
if(selectedLayer) newLayers.push(selectedLayer);
let nextLayer = this.addOrUpdateOlLayer(il.nextItemLayer,newLayers.length);
const nextLayer = this.addOrUpdateOlLayer(il.nextItemLayer,newLayers.length);
if(nextLayer) newLayers.push(nextLayer);
this.installTopLayerPrerenderEventhandler(selectedLayer);
} else {
let layer = this.addOrUpdateOlLayer(itemLayer,newLayers.length);
if(layer) newLayers.push(layer);
const layer = this.addOrUpdateOlLayer(itemLayer,newLayers.length);
if(layer) newLayers.push(layer);
this.installTopLayerPrerenderEventhandler(layer);
}
});
// Remove the layers that have disapeared from childrenLayers
var olLayers = this.instance.getLayers();
const olLayers = this.instance.getLayers();
while(olLayers.getLength() > 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;
const itemLayer= this.getItemlayer(this.itemLayer);
if(itemLayer && itemLayer.layer) {
this.selectedFeatures = {};
if(itemLayer.layer ) {
const minZoom = itemLayer.layer.getMinZoom();
const currentZoom = this.map.instance.getView().getZoom();
if(currentZoom>minZoom) {
itemLayer.layer.getFeatures(event.pixel).then((features) => {
if(!features.length) {
this.onFeatureHover.emit(null);
return;
}
const fid = features[0].getId();
const 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) {
if (this.instance && this.initialized) {
if (changes['itemLayers']) {
var itemLayers = changes['itemLayers'].currentValue as IItemLayer[];
const itemLayers = changes['itemLayers'].currentValue as IItemLayer[];
this.updateLayers(itemLayers);
}
if (changes['itemLayer']) {
var itemLayer = changes['itemLayer'].currentValue as IItemLayer;
if (changes['itemLayer']) {
const itemLayer = changes['itemLayer'].currentValue as IItemLayer;
this.itemLayer = itemLayer
if(itemLayer) {
if(this.getItemlayer(this.itemLayer).item.itemType == 'vnd.farmmaps.itemtype.shape.processed') {
this.installMapEventHandler();
}
this.updateLayers([itemLayer]);
} else {
this.updateLayers([]);
this.unInstallMapEventHandler();
this.updateLayers([]);
}
}
}
}
ngOnDestroy() {
this.unInstallMapEventHandler();
super.ngOnDestroy();
}
}

View File

@@ -1,104 +1,105 @@
import { Component, Host, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, forwardRef, Inject, InjectionToken } from '@angular/core';
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 { Point } from 'ol/geom';
import { Point, Geometry } from 'ol/geom';
import { MapBrowserEvent } from 'ol';
import { Types } from 'ol/MapBrowserEventType';
import * as style from 'ol/style';
import * as color from 'ol/color';
import * as loadingstrategy from 'ol/loadingstrategy';
import * as condition from 'ol/events/condition';
import * as extent from 'ol/extent';
import {Vector,Cluster} from 'ol/source';
import {Layer} from 'ol/layer';
import {GeoJSON} from 'ol/format';
import {Select} from 'ol/interaction';
import {IStyles} from '../../../models/style.cache';
import {FeatureIconService} from '../../../services/feature-icon.service';
import { Vector, Cluster, Source } from 'ol/source';
import { Layer } from 'ol/layer';
import { GeoJSON } from 'ol/format';
import { Select } from 'ol/interaction';
import { IStyles } from '../../../models/style.cache';
import { FeatureIconService } from '../../../services/feature-icon.service';
@Component({
selector: 'fm-map-item-source-vector',
template: `<ng-content></ng-content>`,
providers: [
{ provide: SourceVectorComponent , useExisting: forwardRef(() => ItemVectorSourceComponent) }
{ provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) }
]
})
export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnChanges {
instance: Vector;
instance: Vector<Geometry>;
private _format: GeoJSON;
private _select: Select;
private _hoverSelect: Select;
private _iconScale: number = 0.05;
@Input() features: Array<Feature>;
@Input() selectedFeature: Feature;
private _iconScale = 0.05;
@Input() features: Array<Feature<Geometry>>;
@Input() selectedFeature: Feature<Geometry>;
@Input() selectedItem: IItem;
@Input() styles:IStyles;
@Output() onFeaturesSelected: EventEmitter<Feature> = new EventEmitter<Feature>();
@Output() onFeatureHover: EventEmitter<Feature> = new EventEmitter<Feature>();
private stylesCache:IStyles = {};
@Input() styles: IStyles;
@Output() onFeatureSelected: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>();
@Output() onFeatureHover: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>();
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);
this._format = new GeoJSON();
}
}
geometry(feature: Feature) {
let view = this.map.instance.getView();
let resolution = view.getResolution();
var geometry = feature.getGeometry();
let e = geometry.getExtent();
geometry(feature: Feature<Geometry>) {
const view = this.map.instance.getView();
const resolution = view.getResolution();
let geometry = feature.getGeometry();
const e = geometry.getExtent();
//var size = Math.max((e[2] - e[0]) / resolution, (e[3] - e[1]) / resolution);
if (resolution > 12) {
geometry = new Point(extent.getCenter(e));
}
return geometry;
}
}
getSelectedStyle(feature:Feature):style.Style {
let key = feature.get('itemType')+"_selected";
let evaluatedStyle =null;
var styleEntry = this.stylesCache[key];
if(styleEntry) {
if(typeof styleEntry === 'function') {
getSelectedStyle(feature: Feature<Geometry>): style.Style {
const key = feature.get('itemType') + "_selected";
let evaluatedStyle: style.Style = undefined;
const styleEntry = this.stylesCache[key];
if (styleEntry) {
if (typeof styleEntry === 'function') {
evaluatedStyle = styleEntry(feature);
} else {
evaluatedStyle = styleEntry;
}
} else {
evaluatedStyle = this.stylesCache["selected"];
}
if(evaluatedStyle ) {
evaluatedStyle.setGeometry((feature) => this.geometry(feature));
}
return evaluatedStyle
evaluatedStyle = this.stylesCache["selected"] as style.Style;
}
if (evaluatedStyle) {
evaluatedStyle.setGeometry((feature: Feature<Geometry>) => this.geometry(feature));
}
return evaluatedStyle as style.Style
}
ngOnInit() {
this.strategy = loadingstrategy.bbox;
this.format = new GeoJSON();
this._select = new Select({
style:null,
style: null,
hitTolerance: 10,
layers: [this.layer.instance as Layer]
layers: [this.layer.instance as Layer<Source>]
});
this._hoverSelect = new Select({
style: (feature) => {
style: (feature: Feature<Geometry>) => {
return this.getSelectedStyle(feature);
},
hitTolerance: 10,
condition: (e: MapBrowserEvent) => {
condition: (e: MapBrowserEvent<UIEvent>) => {
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._hoverSelect);
this.map.instance.addInteraction(this._hoverSelect);
this._select.on('select', (e) => {
if (e.selected.length > 0 && e.selected[0]) {
this.onFeaturesSelected.emit(e.selected[0]);
this.onFeatureSelected.emit(e.selected[0]);
} else {
this.onFeaturesSelected.emit(null);
this.onFeatureSelected.emit(null);
}
});
this._hoverSelect.on('select', (e) => {
@@ -110,43 +111,44 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
});
this.instance = new Vector(this);
this.host.instance.setSource(this.instance);
this.host.instance.setStyle((feature) => {
var key = feature.get('itemType') + (this.selectedItem?"_I":"");
this.host.instance.setStyle((feature) => {
const itemType = feature.get('itemType');
let key = itemType + (this.selectedItem ? "_I" : "");
if (!this.stylesCache[key]) {
if (this.itemTypeService.itemTypes[key]) {
let itemType = this.itemTypeService.itemTypes[key];
let fillColor = color.asArray(itemType.iconColor);
fillColor[3] = this.selectedItem?0:0.5;
if (this.itemTypeService.itemTypes[itemType]) {
const itemTypeEntry = this.itemTypeService.itemTypes[itemType];
const fillColor = color.asArray(itemTypeEntry.iconColor);
fillColor[3] = 0;
this.stylesCache[key] = new style.Style({
image: itemType.icon ? new style.Icon({
anchor: [0.5, 1],
scale: 0.05,
src: this.featureIconService$.getIconImageDataUrl(itemType.icon)
}):null,
stroke: new style.Stroke({
color: 'red',
width: 1
}),
fill: new style.Fill({
color: fillColor
}),
geometry:(feature) => this.geometry(feature)
});
image: itemTypeEntry.icon ? new style.Icon({
anchor: [0.5, 1],
scale: 0.05,
src: this.featureIconService$.getIconImageDataUrl(itemTypeEntry.icon)
}) : null,
stroke: new style.Stroke({
color: 'red',
width: 1
}),
fill: new style.Fill({
color: fillColor
}),
geometry: (feature: Feature<Geometry>) => this.geometry(feature)
});
} else {
key = 'file';
}
}
let evaluatedStyle =null;
var styleEntry = this.stylesCache[key];
if(typeof styleEntry === 'function') {
}
let evaluatedStyle = null;
const styleEntry = this.stylesCache[key];
if (typeof styleEntry === 'function') {
evaluatedStyle = styleEntry(feature);
} else {
evaluatedStyle = styleEntry;
}
if(evaluatedStyle && evaluatedStyle.geometry_ == null) {
if (evaluatedStyle && evaluatedStyle.geometry_ == null && !Array.isArray(evaluatedStyle)) {
evaluatedStyle.setGeometry((feature) => this.geometry(feature));
}
}
return evaluatedStyle;
});
}
@@ -159,29 +161,29 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
}
if (changes["selectedFeature"] && this.instance) {
var features = this._hoverSelect.getFeatures();
var feature = changes["selectedFeature"].currentValue
const features = this._hoverSelect.getFeatures();
const feature = changes["selectedFeature"].currentValue
//this.instance.clear(false);
//this.instance.addFeatures(features.getArray());
features.clear();
if (feature) {
//this.instance.removeFeature(feature);
features.push(feature)
}
}
if (changes["selectedItem"] && this.instance) {
var item = changes["selectedItem"].currentValue
if (item) {
this.map.instance.removeInteraction(this._hoverSelect);
} else {
this.map.instance.addInteraction(this._hoverSelect);
}
}
if (changes["styles"] && this.instance) {
let styles = changes["styles"].currentValue;
if (changes["selectedItem"] && this.instance) {
const item = changes["selectedItem"].currentValue
if (item) {
this.map.instance.removeInteraction(this._hoverSelect);
} else {
this.map.instance.addInteraction(this._hoverSelect);
}
}
if (changes["styles"]) {
const styles = changes["styles"].currentValue;
for (const key in styles) {
if (styles.hasOwnProperty(key)) {
this.stylesCache[key]=styles[key];
this.stylesCache[key] = styles[key];
}
}
}

View 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="No transparency" *ngIf="itemLayer.visible" href="#" class="btn btn-light btn-sm" (click)="handleSetOpacity($event,itemLayer,1)">100%</a>
</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>
<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 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>
<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="far fa-chart-bar" 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 *ngIf="itemLayer.legendVisible">
<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>

View File

@@ -9,7 +9,8 @@ import { IItemLayer } from '../../../models/item.layer';
export class LayerListComponent {
@Input() itemLayers: IItemLayer[] = [];
@Input() baseLayers: boolean = false;
@Input() baseLayers = false;
@Input() dataLayers = false;
@Output() onToggleVisibility = new EventEmitter<IItemLayer>();
@Output() onSetOpacity = new EventEmitter<{layer: IItemLayer,opacity:number }>();
@Output() onDelete = new EventEmitter<IItemLayer>();

View File

@@ -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">{{getScaledValue(layerValue)}}</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>

View File

@@ -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;
}

View File

@@ -1,20 +1,20 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { GradientComponent } from './gradient.component';
import { LayerValuesComponent } from './layer-values.component';
describe('GradientComponent', () => {
let component: GradientComponent;
let fixture: ComponentFixture<GradientComponent>;
describe('LayerValuesComponent', () => {
let component: LayerValuesComponent;
let fixture: ComponentFixture<LayerValuesComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ GradientComponent ]
declarations: [ LayerValuesComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(GradientComponent);
fixture = TestBed.createComponent(LayerValuesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

View File

@@ -0,0 +1,70 @@
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$ = 0;
offsetY$ = 0;
lonlat$ = "";
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() {
const xy = this.map.instance.getCoordinateFromPixel([this.offsetX$, this.offsetY$])
const 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$);
}
public getScaledValue(layerValue: ILayervalue): number {
let v = layerValue.value;
if (layerValue.scale && layerValue.scale != 0) {
v = layerValue.scale * layerValue.value;
}
return v;
}
}

View File

@@ -1,9 +1,8 @@
import { Component, OnDestroy, OnInit, Input, Optional, OnChanges, SimpleChanges } from '@angular/core';
import { Vector } from 'ol/layer';
import { Style } from 'ol/style';
import { StyleFunction } from 'ol/style/Style';
import { LayerVectorComponent, LayerGroupComponent, MapComponent } from 'ngx-openlayers';
import { RenderType } from 'ol/layer/Vector';
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { LayerVectorComponent, MapComponent } from 'ngx-openlayers';
import RenderType from 'ol/layer/Vector';
import { Vector as VectorSource } from 'ol/source';
import { Geometry } from 'ol/geom';
@Component({
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 {
public source: Vector;
//public source: Vector;
@Input()
renderMode: RenderType | string = "image";
renderMode: RenderType<VectorSource<Geometry>> | string = "image";
constructor(map: MapComponent) {
super(map);

View File

@@ -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">
<g
id="XMLID_1_"><circle

View File

@@ -29,7 +29,7 @@ div.gps-location:hover .pan-to {
}
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 {

View File

@@ -14,7 +14,7 @@ export class PanToLocation implements OnInit,OnChanges{
view: View;
map: MapComponent;
@Input() position: Position;
@Input() position: GeolocationPosition;
@Input() mapState: IMapState;
@Input() animate: boolean;
@@ -43,12 +43,12 @@ export class PanToLocation implements OnInit,OnChanges{
public centered():boolean {
if(this.position && this.mapState) {
let center = this.view.getCenter();
let newCenter = fromLonLat([this.position.coords.longitude,this.position.coords.latitude]);
let x1 = newCenter[0].toFixed(0);
let x2 = center[0].toFixed(0);
let y1 = newCenter[1].toFixed(0);
let y2 = center[1].toFixed(0);
const center = this.view.getCenter();
const newCenter = fromLonLat([this.position.coords.longitude,this.position.coords.latitude]);
const x1 = newCenter[0].toFixed(0);
const x2 = center[0].toFixed(0);
const y1 = newCenter[1].toFixed(0);
const y2 = center[1].toFixed(0);
return x1==x2 && y1==y2;
}
return false;
@@ -60,17 +60,17 @@ export class PanToLocation implements OnInit,OnChanges{
handleClick(event:Event) {
if(this.position) {
let view = this.map.instance.getView();
let newCenter = fromLonLat([this.position.coords.longitude,this.position.coords.latitude]);
let extent = [newCenter[0]-500,newCenter[1]-500,newCenter[0]+500,newCenter[1]+500];
var options = { padding: [0, 0, 0, 0],minResolution:1 };
let size = this.map.instance.getSize();
let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);
let threshold = 44 * rem;
var left = 1 * rem;
var right = 1 * rem;
var bottom = Math.round(size[1] / 2);
var top = 1 * rem;
const view = this.map.instance.getView();
const newCenter = fromLonLat([this.position.coords.longitude,this.position.coords.latitude]);
const extent = [newCenter[0]-500,newCenter[1]-500,newCenter[0]+500,newCenter[1]+500];
const options = { padding: [0, 0, 0, 0],minResolution:1 };
const size = this.map.instance.getSize();
const rem = parseFloat(getComputedStyle(document.documentElement).fontSize);
const threshold = 44 * rem;
let left = 1 * rem;
const right = 1 * rem;
let bottom = Math.round(size[1] / 2);
const top = 1 * rem;
if (size[0] > threshold) {
bottom = 1 * rem;
left = 23 * rem;

View File

@@ -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">
<g
inkscape:label="Laag 1"

View File

@@ -8,6 +8,7 @@
border-radius:1.75em;
padding:0;
margin-top:0.5em;
display: block;
}
#north {

View File

@@ -14,7 +14,7 @@ export class RotationResetComponent implements OnInit {
view: View;
public Rotation() {
let rotation = this.view ? this.view.getRotation() : 0;
const rotation = this.view ? this.view.getRotation() : 0;
return `rotate(${rotation}rad)`;
}
@@ -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) {

View File

@@ -1,4 +1,5 @@
import { Component, Host, Input, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ViewComponent, MapComponent } from 'ngx-openlayers';
@@ -9,29 +10,41 @@ import { ViewComponent, MapComponent } from 'ngx-openlayers';
export class ZoomToExtentComponent implements OnChanges {
view: ViewComponent;
map: MapComponent;
@Input() extent: number[];
@Input() animate: boolean = false;
paddingTop = 0;
paddingLeft = 0;
paddingBottom = 0;
paddingRight = 0;
constructor(@Host() view: ViewComponent, @Host() map: MapComponent) {
@Input() extent: number[];
@Input() animate = false;
constructor(@Host() view: ViewComponent, @Host() map: MapComponent,route: ActivatedRoute ) {
this.view = view;
this.map = map;
if(route && route.snapshot && route.snapshot.data && route.snapshot.data["fm-map-zoom-to-extent"]) {
const 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) {
if (this.extent) {
var options = { padding: [0, 0, 0, 0],minResolution:1 };
let size = this.map.instance.getSize();
let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);
let threshold = 40 * rem;
var left = 1 * rem;
var right = 1 * rem;
var bottom = Math.round(size[1] / 2);
var top = 1 * rem;
const options = { padding: [0, 0, 0, 0],minResolution:1 };
const size = this.map.instance.getSize();
const rem = parseFloat(getComputedStyle(document.documentElement).fontSize);
const threshold = 40 * rem;
let left = 1 * rem;
const right = 1 * rem;
let bottom = Math.round((size[1] / 2) + (4*rem));
const top = 1 * rem;
if (size[0] > threshold) {
bottom = 1 * rem;
bottom = 5 * 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;
this.view.instance.fit(this.extent, options);
}

View File

@@ -3,12 +3,12 @@
.row {
border-bottom: 1px solid gray('500');
border-bottom: 1px solid $gray-500;
user-select: none;
}
.row.selected {
background-color: gray('100');
background-color: $gray-100;
}
@media screen and (min-width: 44rem) {

View File

@@ -1,5 +1,6 @@
import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject} from '@angular/core';
import { Feature } from 'ol';
import { Geometry} from 'ol/geom';
import { FeatureListComponent,AbstractFeatureListComponent } from '../feature-list/feature-list.component';
import { WidgetHostDirective } from '../widget-host/widget-host.directive';
import {IQueryState,PackageService } from '@farmmaps/common';
@@ -17,12 +18,13 @@ import { Observable } from 'rxjs';
export class FeatureListContainerComponent {
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() selectedFeature: Feature;
@Input() clickedFeature:Observable<Feature>;
@Input() selectedFeature: Feature<Geometry>;
@Input() clickedFeature:Observable<Feature<Geometry>>;
@ViewChild(WidgetHostDirective, { static: true }) widgetHost: WidgetHostDirective;
componentRef:any;
@@ -31,13 +33,13 @@ export class FeatureListContainerComponent {
let componentFactory: ComponentFactory<AbstractFeatureListComponent> = this.componentFactoryResolver.resolveComponentFactory(FeatureListComponent); // default
let selected = -1;
let maxMatches =0;
let showItem = true;
const showItem = true;
for (let i = 0; i < this.featureLists.length; i++) {
let matches=0;
let criteria=0;
if (this.featureLists[i]['forItemType']) {
criteria++;
if( this.featureLists[i]['forItemType'].indexOf(queryState.itemType) >= 0) {
if( this.featureLists[i]['forItemType'].split(",").filter(part => part == queryState.itemType).length == 1) {
matches++;
}
}
@@ -80,9 +82,11 @@ export class FeatureListContainerComponent {
}
if ((changes["features"] && changes["features"].currentValue)) {
(<AbstractFeatureListComponent>this.componentRef.instance).features = changes["features"].currentValue;
this.componentRef.changeDetectorRef.detectChanges();
}
if(changes["selectedFeature"]) {
(<AbstractFeatureListComponent>this.componentRef.instance).selectedFeature = changes["selectedFeature"].currentValue;
this.componentRef.changeDetectorRef.detectChanges();
}
}
}

View File

@@ -1,11 +1,11 @@
<div class="card border-0">
<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>
<h3>{{schemeItem.name}}</h3>
<div *ngIf="features;let features">
<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>
</div>
</div>

View File

@@ -6,17 +6,17 @@ fm-map-feature-list-feature-container {
}
.row {
border-bottom: 1px solid gray('500');
border-bottom: 1px solid $gray-500;
user-select: none;
padding-left:1.5rem;
}
.row.selected {
background-color: gray('100');
background-color: $gray-100;
}
.cropfields {
border-top: 1px solid gray('500');
border-top: 1px solid $gray-500;
margin-left: -1.25rem;
margin-right: -1.25rem;
}

View File

@@ -1,10 +1,10 @@
<div class="card border-0">
<div class="card-body">
<div><a href="#" (click)="handleBackClick($event)" i18n>Back</a></div>
<h3><i class="fm fm-farm"></i>&nbsp;<span i18n>Farms</span></h3>
<fm-back-button></fm-back-button>
<h3><i class="far fa-farm"></i>&nbsp;<span i18n>Farms</span></h3>
<div *ngIf="features;let features">
<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>
</div>
</div>

View File

@@ -6,17 +6,17 @@ fm-map-feature-list-feature-container {
}
.row {
border-bottom: 1px solid gray('500');
border-bottom: 1px solid $gray-500;
user-select: none;
padding-left:1.5rem;
}
.row.selected {
background-color: gray('100');
background-color: $gray-100;
}
.farms {
border-top: 1px solid gray('500');
border-top: 1px solid $gray-500;
margin-left: -1.25rem;
margin-right: -1.25rem;
}

View File

@@ -9,6 +9,7 @@ import * as mapActions from '../../actions/map.actions';
import { tassign } from 'tassign';
import { Router } from '@angular/router';
import { Feature } from 'ol';
import { Geometry} from 'ol/geom';
@ForItemType("vnd.farmmaps.itemtype.croppingscheme")
@Injectable()
@@ -23,8 +24,8 @@ export class FeatureListCroppingschemeComponent extends AbstractFeatureListCompo
super(store, itemTypeService, location);
}
getAction(feature:Feature):Action {
var queryState = tassign(mapReducers.initialState.queryState, { parentCode: feature.get('code'), itemType: "vnd.farmmaps.itemtype.cropfield" });
getAction(feature:Feature<Geometry>):Action {
const queryState = tassign(mapReducers.initialState.queryState, { parentCode: feature.get('code'), itemType: "vnd.farmmaps.itemtype.cropfield" });
return new mapActions.DoQuery(queryState);
}
}

View File

@@ -1,5 +1,6 @@
import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject, Type} from '@angular/core';
import { Feature } from 'ol';
import { Geometry } from 'ol/geom';
import { AbstractFeatureListFeatureComponent,FeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
import { WidgetHostDirective } from '../widget-host/widget-host.directive';
@@ -15,14 +16,15 @@ import { WidgetHostDirective } from '../widget-host/widget-host.directive';
export class FeatureListFeatureContainerComponent {
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;
loadComponent() {
var componentFactory: ComponentFactory<AbstractFeatureListFeatureComponent> = this.componentFactoryResolver.resolveComponentFactory(FeatureListFeatureComponent); // default
let componentFactory: ComponentFactory<AbstractFeatureListFeatureComponent> = this.componentFactoryResolver.resolveComponentFactory(FeatureListFeatureComponent); // default
let selected = -1;
let maxMatches =0;
@@ -31,7 +33,7 @@ export class FeatureListFeatureContainerComponent {
let criteria=0;
if (this.featureLists[i]['forItemType']) {
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++;
}
}

View File

@@ -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 #container class="thumbnail">
<canvas #canvas ></canvas>
</div>
<div class="thumbnail">
<fm-map-feature-thumbnail [feature]="feature"></fm-map-feature-thumbnail>
</div>
</div>
<div class="flex-grow p-2 overflow-hidden">
<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>{{feature.get('datadate')|date}}</span> - <span>{{feature.get('dataenddate')|date}}</span> </div>
<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>{{feature.get('datadate')|date}}</span> -
<span>{{feature.get('dataenddate')|date}}</span> </div>
</div>
</div>
</div>

View File

@@ -1,14 +1,13 @@
import { Component, Injectable,ViewChild,AfterViewInit} from '@angular/core';
import { Feature } from 'ol';
import * as extent from 'ol/extent';
import * as render from 'ol/render';
import { Geometry } from 'ol/geom';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
import { ForItemType } from '../for-item/for-itemtype.decorator';
import {getArea} from 'ol/sphere';
import * as style from 'ol/style';
@ForItemType("vnd.farmmaps.itemtype.cropfield")
@@ -18,58 +17,18 @@ import * as style from 'ol/style';
templateUrl: './feature-list-feature-cropfield.component.html',
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) {
super(store, itemTypeService,config);
}
areaInHa(feature:Feature):number {
areaInHa(feature:Feature<Geometry>):number {
if(!feature) return 0;
// get area from faeture if 0 calculate from polygon
let a = feature.get('area');
const a = feature.get('area');
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);
}
}

View File

@@ -1,5 +1,5 @@
<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'" />
<div *ngIf="!feature.get('thumbnail')" [style.background-color]="itemTypeService.getColor(feature.get('itemType'))">
<i [ngClass]="itemTypeService.getIcon(feature.get('itemType'))"></i>

View File

@@ -10,12 +10,12 @@
}
.thumbnail > img {
width: 100%;
height: auto;
width: 100%;
}
.thumbnail > div {
width: 100%;
width: 100%;
font-size: 2rem;
text-align: center;
min-height: 3rem;

View File

@@ -1,5 +1,6 @@
import { Component, Input, Injectable,Directive} from '@angular/core';
import { Feature } from 'ol';
import { Geometry } from 'ol/geom';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@@ -9,7 +10,7 @@ import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@Injectable()
@Directive()
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) {
}

View File

@@ -1,6 +1,6 @@
<div *ngIf="features;let features">
<a href="#" (click)="handleBackClick($event)">Go back</a>
<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)">
<fm-back-button></fm-back-button>
<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>
</div>
</div>

View File

@@ -6,10 +6,10 @@ fm-map-feature-list-feature-container {
}
.row {
border-bottom: 1px solid gray('500');
border-bottom: 1px solid $gray-500;
user-select: none;
}
.row.selected {
background-color: gray('100');
background-color: $gray-100;
}

View File

@@ -1,6 +1,7 @@
import { Component, Input, Injectable,Directive,SimpleChanges } from '@angular/core';
import { Location } from '@angular/common';
import { Feature } from 'ol';
import { Geometry} from 'ol/geom';
import { Store,Action} from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService, IItem, Item } from '@farmmaps/common';
@@ -14,21 +15,21 @@ import { IQueryState } from '@farmmaps/common';
@Injectable()
@Directive()
export abstract class AbstractFeatureListComponent {
@Input() features: Array<Feature>;
@Input() features: Array<Feature<Geometry>>;
@Input() queryState: IQueryState;
@Input() selectedFeature: Feature;
@Input() selectedFeature: Feature<Geometry>;
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location) {
}
handleFeatureClick(feature:Feature) {
handleFeatureClick(feature:Feature<Geometry>) {
if(feature) {
let action = this.getAction(feature);
const action = this.getAction(feature);
this.store.dispatch(action);
}
}
getAction(feature:Feature):Action {
var newQuery: any = tassign(mapReducers.initialState.queryState);
getAction(feature:Feature<Geometry>):Action {
const newQuery: any = tassign(mapReducers.initialState.queryState);
newQuery.parentCode = feature.get('parentCode');
newQuery.itemCode = feature.get('code');
newQuery.itemType = feature.get('itemType');
@@ -48,7 +49,7 @@ export abstract class AbstractFeatureListComponent {
this.location.back();
}
isFeatureSelected(feature:Feature):boolean {
isFeatureSelected(feature:Feature<Geometry>):boolean {
if(!this.selectedFeature) return false;
return feature.getId() == this.selectedFeature.getId();
}

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