diff options
-rw-r--r-- | app/assets/images/icon-menu-off.svg | 36 | ||||
-rw-r--r-- | app/assets/images/icon-menu-on.svg | 36 | ||||
-rw-r--r-- | app/assets/stylesheets/application/_body.scss | 7 | ||||
-rw-r--r-- | app/assets/stylesheets/application/_map.scss | 2 | ||||
-rw-r--r-- | app/assets/stylesheets/application/_user_info.scss | 2 | ||||
-rw-r--r-- | app/assets/stylesheets/welcome.scss | 34 | ||||
-rw-r--r-- | app/controllers/welcome_controller.rb | 1 | ||||
-rw-r--r-- | app/helpers/agents_helper.rb | 7 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 14 | ||||
-rw-r--r-- | app/javascript/controllers/index.js | 9 | ||||
-rw-r--r-- | app/javascript/packs/application.js | 2 | ||||
-rw-r--r-- | app/jobs/agency_watcher_job.rb | 2 | ||||
-rw-r--r-- | app/models/map.rb | 4 | ||||
-rw-r--r-- | app/views/application/_user_info.html.erb | 4 | ||||
-rw-r--r-- | app/views/layouts/application.html.erb | 6 | ||||
-rw-r--r-- | app/views/resources/_resource.html.erb | 1 | ||||
-rw-r--r-- | app/views/welcome/index.html.erb | 32 | ||||
-rw-r--r-- | db/schema.rb | 17 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | yarn.lock | 37 |
20 files changed, 216 insertions, 39 deletions
diff --git a/app/assets/images/icon-menu-off.svg b/app/assets/images/icon-menu-off.svg new file mode 100644 index 0000000..850e76a --- /dev/null +++ b/app/assets/images/icon-menu-off.svg @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + id="svg4344" + width="36.25" + height="36.25" + version="1.1"> + <metadata + id="metadata4350"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs4348" /> + <path + id="path4342" + d="m 19.48433,21.2344 q 0.64062,-1.4844 0.64062,-3.1094 0,-1.625 -0.64062,-3.0937 -0.625,-1.4844 -1.7031,-2.5625 -1.07814,-1.0781 -2.56249,-1.7031 -1.46873,-0.6407 -3.09371,-0.6407 -1.62497,0 -3.10939,0.6407 Q 7.5469,11.3907 6.46877,12.4688 5.39063,13.5469 4.75,15.0313 4.125,16.5 4.125,18.125 q 0,1.625 0.625,3.1094 0.64062,1.4687 1.71877,2.5469 1.07813,1.078 2.54687,1.7187 1.48435,0.625 3.10939,0.625 1.62498,0 3.09371,-0.625 1.48435,-0.6407 2.56249,-1.7187 1.07814,-1.0782 1.7031,-2.5469 z m 12.00006,0 q 0.64063,-1.4844 0.64063,-3.1094 0,-1.625 -0.64063,-3.0937 -0.625,-1.4844 -1.70309,-2.5625 -1.07813,-1.0781 -2.56248,-1.7031 -1.46874,-0.6407 -3.09371,-0.6407 h -6.03126 q 1.85933,1.4063 2.93747,3.5 1.09375,2.0938 1.09375,4.5 0,2.4063 -1.09375,4.5 -1.07814,2.0937 -2.93747,3.5 h 6.03126 q 1.62497,0 3.09371,-0.625 1.48435,-0.6407 2.56248,-1.7187 1.07814,-1.0782 1.70309,-2.5469 z M 33.32812,14.25 q 0.79688,1.8438 0.79688,3.875 0,2.0313 -0.79688,3.8906 -0.79687,1.8438 -2.14059,3.1875 -1.32811,1.3281 -3.18751,2.125 -1.84373,0.7969 -3.87498,0.7969 H 12.12496 q -2.03126,0 -3.89059,-0.7969 Q 6.39065,26.5312 5.04686,25.2031 3.71875,23.8594 2.92187,22.0156 2.125,20.1563 2.125,18.125 2.125,16.0938 2.92187,14.25 3.71875,12.3906 5.04686,11.0625 6.39058,9.7188 8.23437,8.9219 10.0937,8.125 12.12496,8.125 h 12.00008 q 2.03125,0 3.87498,0.7969 1.85933,0.7969 3.18751,2.1406 1.34372,1.3281 2.14059,3.1875 z" + style="fill:#008080" /> + <circle + r="8.0150003" + cy="18.133831" + cx="12.125704" + id="path4895" + style="opacity:1;fill:#edeec9;fill-opacity:1;stroke:none;stroke-width:18.63586235;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke" /> +</svg> diff --git a/app/assets/images/icon-menu-on.svg b/app/assets/images/icon-menu-on.svg new file mode 100644 index 0000000..fa455f0 --- /dev/null +++ b/app/assets/images/icon-menu-on.svg @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + id="svg3443" + width="36.25" + height="36.25" + version="1.1"> + <metadata + id="metadata3449"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs3447" /> + <path + id="path3441" + d="m 2.9188574,22.01679 q -0.7938571,-1.863674 -0.7938571,-3.89368 0,-2.030006 0.7938571,-3.874779 Q 3.7202749,12.388438 5.0471501,11.061562 6.3929268,9.7157853 8.2339194,8.9181483 10.093813,8.1242913 12.1276,8.1242913 h 11.998582 q 2.030006,0 3.874778,0.793857 1.859894,0.797637 3.186769,2.1434137 1.345777,1.326876 2.143415,3.186769 0.793856,1.844773 0.793856,3.874779 0,2.033785 -0.793856,3.89368 -0.797638,1.844772 -2.143415,3.186769 -1.323095,1.326875 -3.186769,2.124512 -1.844772,0.797638 -3.874778,0.797638 H 12.1276 q -2.033787,0 -3.8936806,-0.793858 Q 6.3929268,26.530434 5.0471501,25.203559 3.7202749,23.861562 2.9226376,22.01679 Z M 21.018799,25.5022 q 1.485646,0.623745 3.111163,0.623745 1.625517,0 3.092262,-0.623745 1.485647,-0.642646 2.563025,-1.720024 1.081157,-1.077377 1.701122,-2.547903 0.642646,-1.485646 0.642646,-3.111163 0,-1.625517 -0.642646,-3.092262 -0.619965,-1.485647 -1.701122,-2.563025 -1.077378,-1.077377 -2.563025,-1.701122 -1.466745,-0.642646 -3.092262,-0.642646 -1.625517,0 -3.111163,0.642646 -1.470526,0.623745 -2.547904,1.701122 -1.077377,1.077378 -1.720023,2.563025 -0.623745,1.466745 -0.623745,3.092262 0,1.625517 0.623745,3.111163 0.642646,1.470526 1.720023,2.547903 1.077378,1.077378 2.547904,1.720024 z" + style="fill:#008080;fill-opacity:1" /> + <circle + r="8.0150003" + cy="18.132078" + cx="24.122789" + id="path4895" + style="opacity:1;fill:#edeec9;fill-opacity:1;stroke:none;stroke-width:18.63586235;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke" /> +</svg> diff --git a/app/assets/stylesheets/application/_body.scss b/app/assets/stylesheets/application/_body.scss index a282ba3..06db39a 100644 --- a/app/assets/stylesheets/application/_body.scss +++ b/app/assets/stylesheets/application/_body.scss @@ -61,6 +61,11 @@ main { } } +body>aside { + position: fixed; + z-index: 1001; +} + :root { --font-family: Helvetica, Arial, sans-serif; @@ -150,4 +155,6 @@ main { --gold: #e7c300; --silver: silver; --bronze: #cd7f32; + --icon-menu-off: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgaWQ9InN2ZzQzNDQiCiAgIHdpZHRoPSIzNi4yNSIKICAgaGVpZ2h0PSIzNi4yNSIKICAgdmVyc2lvbj0iMS4xIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0MzUwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDM0OCIgLz4KICA8cGF0aAogICAgIGlkPSJwYXRoNDM0MiIKICAgICBkPSJtIDE5LjQ4NDMzLDIxLjIzNDQgcSAwLjY0MDYyLC0xLjQ4NDQgMC42NDA2MiwtMy4xMDk0IDAsLTEuNjI1IC0wLjY0MDYyLC0zLjA5MzcgLTAuNjI1LC0xLjQ4NDQgLTEuNzAzMSwtMi41NjI1IC0xLjA3ODE0LC0xLjA3ODEgLTIuNTYyNDksLTEuNzAzMSAtMS40Njg3MywtMC42NDA3IC0zLjA5MzcxLC0wLjY0MDcgLTEuNjI0OTcsMCAtMy4xMDkzOSwwLjY0MDcgUSA3LjU0NjksMTEuMzkwNyA2LjQ2ODc3LDEyLjQ2ODggNS4zOTA2MywxMy41NDY5IDQuNzUsMTUuMDMxMyA0LjEyNSwxNi41IDQuMTI1LDE4LjEyNSBxIDAsMS42MjUgMC42MjUsMy4xMDk0IDAuNjQwNjIsMS40Njg3IDEuNzE4NzcsMi41NDY5IDEuMDc4MTMsMS4wNzggMi41NDY4NywxLjcxODcgMS40ODQzNSwwLjYyNSAzLjEwOTM5LDAuNjI1IDEuNjI0OTgsMCAzLjA5MzcxLC0wLjYyNSAxLjQ4NDM1LC0wLjY0MDcgMi41NjI0OSwtMS43MTg3IDEuMDc4MTQsLTEuMDc4MiAxLjcwMzEsLTIuNTQ2OSB6IG0gMTIuMDAwMDYsMCBxIDAuNjQwNjMsLTEuNDg0NCAwLjY0MDYzLC0zLjEwOTQgMCwtMS42MjUgLTAuNjQwNjMsLTMuMDkzNyAtMC42MjUsLTEuNDg0NCAtMS43MDMwOSwtMi41NjI1IC0xLjA3ODEzLC0xLjA3ODEgLTIuNTYyNDgsLTEuNzAzMSAtMS40Njg3NCwtMC42NDA3IC0zLjA5MzcxLC0wLjY0MDcgaCAtNi4wMzEyNiBxIDEuODU5MzMsMS40MDYzIDIuOTM3NDcsMy41IDEuMDkzNzUsMi4wOTM4IDEuMDkzNzUsNC41IDAsMi40MDYzIC0xLjA5Mzc1LDQuNSAtMS4wNzgxNCwyLjA5MzcgLTIuOTM3NDcsMy41IGggNi4wMzEyNiBxIDEuNjI0OTcsMCAzLjA5MzcxLC0wLjYyNSAxLjQ4NDM1LC0wLjY0MDcgMi41NjI0OCwtMS43MTg3IDEuMDc4MTQsLTEuMDc4MiAxLjcwMzA5LC0yLjU0NjkgeiBNIDMzLjMyODEyLDE0LjI1IHEgMC43OTY4OCwxLjg0MzggMC43OTY4OCwzLjg3NSAwLDIuMDMxMyAtMC43OTY4OCwzLjg5MDYgLTAuNzk2ODcsMS44NDM4IC0yLjE0MDU5LDMuMTg3NSAtMS4zMjgxMSwxLjMyODEgLTMuMTg3NTEsMi4xMjUgLTEuODQzNzMsMC43OTY5IC0zLjg3NDk4LDAuNzk2OSBIIDEyLjEyNDk2IHEgLTIuMDMxMjYsMCAtMy44OTA1OSwtMC43OTY5IFEgNi4zOTA2NSwyNi41MzEyIDUuMDQ2ODYsMjUuMjAzMSAzLjcxODc1LDIzLjg1OTQgMi45MjE4NywyMi4wMTU2IDIuMTI1LDIwLjE1NjMgMi4xMjUsMTguMTI1IDIuMTI1LDE2LjA5MzggMi45MjE4NywxNC4yNSAzLjcxODc1LDEyLjM5MDYgNS4wNDY4NiwxMS4wNjI1IDYuMzkwNTgsOS43MTg4IDguMjM0MzcsOC45MjE5IDEwLjA5MzcsOC4xMjUgMTIuMTI0OTYsOC4xMjUgaCAxMi4wMDAwOCBxIDIuMDMxMjUsMCAzLjg3NDk4LDAuNzk2OSAxLjg1OTMzLDAuNzk2OSAzLjE4NzUxLDIuMTQwNiAxLjM0MzcyLDEuMzI4MSAyLjE0MDU5LDMuMTg3NSB6IgogICAgIHN0eWxlPSJmaWxsOiMwMDgwODAiIC8+CiAgPGNpcmNsZQogICAgIHI9IjguMDE1MDAwMyIKICAgICBjeT0iMTguMTMzODMxIgogICAgIGN4PSIxMi4xMjU3MDQiCiAgICAgaWQ9InBhdGg0ODk1IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZWRlZWM5O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxOC42MzU4NjIzNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+Cjwvc3ZnPgo='); + --icon-menu-on: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgaWQ9InN2ZzM0NDMiCiAgIHdpZHRoPSIzNi4yNSIKICAgaGVpZ2h0PSIzNi4yNSIKICAgdmVyc2lvbj0iMS4xIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEzNDQ5Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzQ0NyIgLz4KICA8cGF0aAogICAgIGlkPSJwYXRoMzQ0MSIKICAgICBkPSJtIDIuOTE4ODU3NCwyMi4wMTY3OSBxIC0wLjc5Mzg1NzEsLTEuODYzNjc0IC0wLjc5Mzg1NzEsLTMuODkzNjggMCwtMi4wMzAwMDYgMC43OTM4NTcxLC0zLjg3NDc3OSBRIDMuNzIwMjc0OSwxMi4zODg0MzggNS4wNDcxNTAxLDExLjA2MTU2MiA2LjM5MjkyNjgsOS43MTU3ODUzIDguMjMzOTE5NCw4LjkxODE0ODMgMTAuMDkzODEzLDguMTI0MjkxMyAxMi4xMjc2LDguMTI0MjkxMyBoIDExLjk5ODU4MiBxIDIuMDMwMDA2LDAgMy44NzQ3NzgsMC43OTM4NTcgMS44NTk4OTQsMC43OTc2MzcgMy4xODY3NjksMi4xNDM0MTM3IDEuMzQ1Nzc3LDEuMzI2ODc2IDIuMTQzNDE1LDMuMTg2NzY5IDAuNzkzODU2LDEuODQ0NzczIDAuNzkzODU2LDMuODc0Nzc5IDAsMi4wMzM3ODUgLTAuNzkzODU2LDMuODkzNjggLTAuNzk3NjM4LDEuODQ0NzcyIC0yLjE0MzQxNSwzLjE4Njc2OSAtMS4zMjMwOTUsMS4zMjY4NzUgLTMuMTg2NzY5LDIuMTI0NTEyIC0xLjg0NDc3MiwwLjc5NzYzOCAtMy44NzQ3NzgsMC43OTc2MzggSCAxMi4xMjc2IHEgLTIuMDMzNzg3LDAgLTMuODkzNjgwNiwtMC43OTM4NTggUSA2LjM5MjkyNjgsMjYuNTMwNDM0IDUuMDQ3MTUwMSwyNS4yMDM1NTkgMy43MjAyNzQ5LDIzLjg2MTU2MiAyLjkyMjYzNzYsMjIuMDE2NzkgWiBNIDIxLjAxODc5OSwyNS41MDIyIHEgMS40ODU2NDYsMC42MjM3NDUgMy4xMTExNjMsMC42MjM3NDUgMS42MjU1MTcsMCAzLjA5MjI2MiwtMC42MjM3NDUgMS40ODU2NDcsLTAuNjQyNjQ2IDIuNTYzMDI1LC0xLjcyMDAyNCAxLjA4MTE1NywtMS4wNzczNzcgMS43MDExMjIsLTIuNTQ3OTAzIDAuNjQyNjQ2LC0xLjQ4NTY0NiAwLjY0MjY0NiwtMy4xMTExNjMgMCwtMS42MjU1MTcgLTAuNjQyNjQ2LC0zLjA5MjI2MiAtMC42MTk5NjUsLTEuNDg1NjQ3IC0xLjcwMTEyMiwtMi41NjMwMjUgLTEuMDc3Mzc4LC0xLjA3NzM3NyAtMi41NjMwMjUsLTEuNzAxMTIyIC0xLjQ2Njc0NSwtMC42NDI2NDYgLTMuMDkyMjYyLC0wLjY0MjY0NiAtMS42MjU1MTcsMCAtMy4xMTExNjMsMC42NDI2NDYgLTEuNDcwNTI2LDAuNjIzNzQ1IC0yLjU0NzkwNCwxLjcwMTEyMiAtMS4wNzczNzcsMS4wNzczNzggLTEuNzIwMDIzLDIuNTYzMDI1IC0wLjYyMzc0NSwxLjQ2Njc0NSAtMC42MjM3NDUsMy4wOTIyNjIgMCwxLjYyNTUxNyAwLjYyMzc0NSwzLjExMTE2MyAwLjY0MjY0NiwxLjQ3MDUyNiAxLjcyMDAyMywyLjU0NzkwMyAxLjA3NzM3OCwxLjA3NzM3OCAyLjU0NzkwNCwxLjcyMDAyNCB6IgogICAgIHN0eWxlPSJmaWxsOiMwMDgwODA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgPGNpcmNsZQogICAgIHI9IjguMDE1MDAwMyIKICAgICBjeT0iMTguMTMyMDc4IgogICAgIGN4PSIyNC4xMjI3ODkiCiAgICAgaWQ9InBhdGg0ODk1IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZWRlZWM5O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxOC42MzU4NjIzNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+Cjwvc3ZnPgo='); } diff --git a/app/assets/stylesheets/application/_map.scss b/app/assets/stylesheets/application/_map.scss index ba86dd4..e474843 100644 --- a/app/assets/stylesheets/application/_map.scss +++ b/app/assets/stylesheets/application/_map.scss @@ -12,7 +12,7 @@ position: fixed; height: 100%; width: 100%; - top: 0; + top: 4rem; left: 0; right: 0; bottom: 0; diff --git a/app/assets/stylesheets/application/_user_info.scss b/app/assets/stylesheets/application/_user_info.scss index 2d80a09..765be0a 100644 --- a/app/assets/stylesheets/application/_user_info.scss +++ b/app/assets/stylesheets/application/_user_info.scss @@ -10,7 +10,7 @@ User Info #user_info { position: absolute; - right: 0; + right: 0.8rem; nav { top: 0; diff --git a/app/assets/stylesheets/welcome.scss b/app/assets/stylesheets/welcome.scss index 8175046..aae15d5 100644 --- a/app/assets/stylesheets/welcome.scss +++ b/app/assets/stylesheets/welcome.scss @@ -7,3 +7,37 @@ // Place all the styles related to the welcome controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: https://sass-lang.com/ + +button[data-action="taxonomy#toggle"] { + position: absolute; + top: 9rem; + left: 0.7rem; + display: block; + cursor: pointer; + padding: 16px; + color: transparent; + z-index: 990; + background: transparent var(--icon-menu-off) top left/32px no-repeat; + border: none; + text-align: center; +} +button[data-action="taxonomy#toggle"].on { + background-image: var(--icon-menu-on); +} + +[data-controller="taxonomy"] nav { + display: block; + position: fixed; + top: 9rem; + bottom: 0; + max-width: 35rem; + background-color: rgba(0,128,128,0.5); + z-index: -1; + display: none; + border-top-right-radius: 1rem; +} +[data-controller="taxonomy"] nav.on { + width: 89vw; + z-index: 900; + display: block; +} diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index cafddd1..e7743e8 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -5,6 +5,7 @@ class WelcomeController < ApplicationController # GET / def index + @map = Map.first @resources = Resource.order(:uuid).page params[:page] Rails.logger.info "WECLOME ///// #{@resources&.count || 0}" end diff --git a/app/helpers/agents_helper.rb b/app/helpers/agents_helper.rb index 6b2ff82..bbaeeca 100644 --- a/app/helpers/agents_helper.rb +++ b/app/helpers/agents_helper.rb @@ -3,11 +3,4 @@ # SPDX-License-Identifier: AGPL-3.0-or-later module AgentsHelper - # Form to select an Agent - def agent_selector_form - form_for current_agent, url: '/my/current_agent', method: :patch do |f| - f.submit('select') - f.select(:id, options_for_select(current_user.agents.map { |a| [a.name, a.id] }), selected: current_agent.id) - end - end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4689613..15d5082 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -12,6 +12,20 @@ module ApplicationHelper end end + def map_container(map = Map.first) + raw tag.div( + tag.div(id: 'map', + data: { + target: 'map.container' + }), + data: { + controller: 'map', + 'map-latitude': map.latitude, + 'map-longitude': map.longitude, + 'map-zoom': map.zoom + }) + end + # Markdown helper # Always use all extensions. Additional parser and render options may be # passed as a second argument. diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js new file mode 100644 index 0000000..6f53d84 --- /dev/null +++ b/app/javascript/controllers/index.js @@ -0,0 +1,9 @@ +// Load all the controllers within this directory and all subdirectories. +// Controller files must be named *_controller.js. + +import { Application } from "stimulus" +import { definitionsFromContext } from "stimulus/webpack-helpers" + +const application = Application.start() +const context = require.context("controllers", true, /_controller\.js$/) +application.load(definitionsFromContext(context)) diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 5512f7f..5e3eec0 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -14,3 +14,5 @@ require("@rails/activestorage").start() // // const images = require.context('../images', true) // const imagePath = (name) => images(name, true) + +import "controllers" diff --git a/app/jobs/agency_watcher_job.rb b/app/jobs/agency_watcher_job.rb index 7a114d2..23266e8 100644 --- a/app/jobs/agency_watcher_job.rb +++ b/app/jobs/agency_watcher_job.rb @@ -33,6 +33,8 @@ class AgencyWatcherJob < ApplicationJob Rails.logger.debug("AgencyWatcher: grant leader to %s in %s" % [user.username, g]) # Grant leader r.grant(:leader) + # Grant maintainer + r.grant(:maintainer) elsif r.roles == 0 # No role: grant editor Rails.logger.debug("AgencyWatcher: grant editor to %s in %s" % [user.username, g]) diff --git a/app/models/map.rb b/app/models/map.rb new file mode 100644 index 0000000..10a55f6 --- /dev/null +++ b/app/models/map.rb @@ -0,0 +1,4 @@ +class Map < ApplicationRecord + include UUIDParameter + belongs_to :taxonomy +end diff --git a/app/views/application/_user_info.html.erb b/app/views/application/_user_info.html.erb index be3b6c5..048e6fb 100644 --- a/app/views/application/_user_info.html.erb +++ b/app/views/application/_user_info.html.erb @@ -3,10 +3,6 @@ <% if current_user.present? %> <a href="/my/dashboard"><%= image_tag current_user.avatar_url, alt: current_user.username %></a> <ul> - <%#= tag.li(link_to(new_agent_switch_url, method: :get, remote: true, title: "Changer d'Agent") do - "Agent: %s" % current_agent - end, id: 'current_agent_name') %> - <%= tag.li agent_selector_form %> <%= tag.li link_to("Ajouter un point", new_agent_resource_url(agent_id: current_agent)) %> <%= tag.li link_to("Terminer la session", logout_url) %> </ul> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 02c8553..210ace8 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,7 +1,9 @@ <!DOCTYPE html> <html> - <head> - <title>Carte IN COMMON</title> + <head> + <meta charset="UTF-8"> + <title>Carte IN COMMON</title> + <meta name="viewport" content="initial-width: device-width initial-scale=1.0 viewport-fit=cover"> <%= csrf_meta_tags %> <%= csp_meta_tag %> diff --git a/app/views/resources/_resource.html.erb b/app/views/resources/_resource.html.erb index 2debec2..37c0d66 100644 --- a/app/views/resources/_resource.html.erb +++ b/app/views/resources/_resource.html.erb @@ -8,7 +8,6 @@ <%= m resource.description %> <hr> <code><pre><%= h JSON.pretty_generate(resource.feature.as_json) %></pre></code> - <p>... <%= session[:current_agent] %>...</p> <nav> <ul> <li><%= link_to('show', resource_url(resource)) %></li> diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb index 1b6ab77..eac1eff 100644 --- a/app/views/welcome/index.html.erb +++ b/app/views/welcome/index.html.erb @@ -9,7 +9,17 @@ <h1>Bienvenue à l'atelier carto d'IN COMMON</h1> -<%= tag.div(id: 'map') %> +<%= map_container %> + +<% content_for :aside do %> + <div data-controller="taxonomy" data-taxonomy-id="2519915f-d19c-4281-b758-f5ddb889d7fa"> + <div class="leaflet-bar leaftlet-control" id="taxonomy-toggle"> + <button data-action="taxonomy#toggle"></button> + </div> + <nav data-target="taxonomy.filter"> + </nav> + </div> +<% end %> <% content_for :debug do %> <% if current_user.present? %> @@ -19,23 +29,3 @@ <p><%= res.feature["geometry"]["coordinates"] %></p> <% end %><%# ensure it does not break when we don't have a record... %> <% end %> - -<% content_for :body_end do %> -<script> - var mymap = L.map('map').setView([50.8503396, 4.3517103],13); - - L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', { - attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery <a href="https://www.mapbox.com/">Mapbox</a>', - maxZoom: 18, - id: 'mapbox/streets-v11', - tileSize: 512, - zoomOffset: -1, - accessToken: 'pk.eyJ1IjoibmVtYWVsIiwiYSI6ImNrZzBrYjBudTB3bnMyenFmNWtrN3h3bmMifQ.Rkeyhm-9iIQOV7NAMA5LaA' - }).addTo(mymap); - var marker = L.marker([50.850, 4.351]).addTo(mymap); - //CONTINUER AVEC LES WHILE ET CONDITIONS, @resources ne contient que 25 elements (lié au nombre d'élément par page?) -- oui - //OU PLUTOT UTILISER POSTGRES POUR FAIRE DES REQUESTES SUR @resources - var count = 0 - console.log(count) -</script> -<% end %> diff --git a/db/schema.rb b/db/schema.rb index 0660ef9..fa53f85 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_10_09_061548) do +ActiveRecord::Schema.define(version: 2020_11_10_225447) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -55,9 +55,21 @@ ActiveRecord::Schema.define(version: 2020_10_09_061548) do t.bigint "section_id", null: false end + create_table "maps", force: :cascade do |t| + t.uuid "uuid", null: false + t.decimal "latitude", precision: 9, scale: 7 + t.decimal "longitude", precision: 10, scale: 7 + t.integer "zoom", default: 13 + t.bigint "taxonomy_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["taxonomy_id"], name: "index_maps_on_taxonomy_id" + t.index ["uuid"], name: "index_maps_on_uuid", unique: true + end + create_table "resources", force: :cascade do |t| t.uuid "uuid" - t.jsonb "feature", default: {"geometry"=>{"type"=>"Point", "coordinates"=>[0, 0]}, "properties"=>{"city"=>"", "name"=>"", "srid"=>4326, "email"=>"", "source"=>"incommon", "address"=>"", "website"=>"", "categories"=>[], "description"=>"", "postal_code"=>"", "entry_number"=>nil, "phone_number"=>""}} + t.jsonb "feature", default: {"geometry"=>{"type"=>"Point", "coordinates"=>[0, 0]}, "properties"=>{"city"=>"", "name"=>"", "srid"=>4326, "email"=>"", "source"=>"incommon", "address"=>"", "website"=>"", "categories"=>[], "description"=>"", "postal_code"=>"", "entry_number"=>"", "phone_number"=>""}} t.bigint "agent_id", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false @@ -109,6 +121,7 @@ ActiveRecord::Schema.define(version: 2020_10_09_061548) do add_foreign_key "agencies", "agents" add_foreign_key "agencies", "users" add_foreign_key "categories", "taxonomies" + add_foreign_key "maps", "taxonomies" add_foreign_key "resources", "agents" add_foreign_key "sections", "categories" add_foreign_key "taxonomies", "agents" diff --git a/package.json b/package.json index cf700bb..101fb8b 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "@rails/activestorage": "^6.0.0", "@rails/ujs": "^6.0.0", "@rails/webpacker": "4.3.0", + "leaflet": "^1.7.1", + "stimulus": "^1.1.1", "turbolinks": "^5.2.0" }, "version": "0.1.0", @@ -906,6 +906,30 @@ webpack-cli "^3.3.10" webpack-sources "^1.4.3" +"@stimulus/core@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@stimulus/core/-/core-1.1.1.tgz#42b0cfe5b73ca492f41de64b77a03980bae92c82" + integrity sha512-PVJv7IpuQx0MVPCBblXc6O2zbCmU8dlxXNH4bC9KK6LsvGaE+PCXXrXQfXUwAsse1/CmRu/iQG7Ov58himjiGg== + dependencies: + "@stimulus/mutation-observers" "^1.1.1" + +"@stimulus/multimap@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@stimulus/multimap/-/multimap-1.1.1.tgz#b95e3fd607345ab36e5d5b55486ee1a12d56b331" + integrity sha512-26R1fI3a8uUj0WlMmta4qcfIQGlagegdP4PTz6lz852q/dXlG6r+uPS/bx+H8GtfyS+OOXVr3SkZ0Zg0iRqRfQ== + +"@stimulus/mutation-observers@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@stimulus/mutation-observers/-/mutation-observers-1.1.1.tgz#0f6c6f081308427fed2a26360dda0c173b79cfc0" + integrity sha512-/zCnnw1KJlWO2mrx0yxYaRFZWMGnDMdOgSnI4hxDLxdWVuL2HMROU8FpHWVBLjKY3T9A+lGkcrmPGDHF3pfS9w== + dependencies: + "@stimulus/multimap" "^1.1.1" + +"@stimulus/webpack-helpers@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@stimulus/webpack-helpers/-/webpack-helpers-1.1.1.tgz#eff60cd4e58b921d1a2764dc5215f5141510f2c2" + integrity sha512-XOkqSw53N9072FLHvpLM25PIwy+ndkSSbnTtjKuyzsv8K5yfkFB2rv68jU1pzqYa9FZLcvZWP4yazC0V38dx9A== + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -4136,6 +4160,11 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" +leaflet@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" + integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -6763,6 +6792,14 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stimulus@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stimulus/-/stimulus-1.1.1.tgz#53c2fded6849e7b85eed3ed8dd76e33abd74bec5" + integrity sha512-R0mBqKp48YnRDZOxZ8hiOH4Ilph3Yj78CIFTBkCwyHs4iGCpe7xlEdQ7cjIxb+7qVCSxFKgxO+mAQbsNgt/5XQ== + dependencies: + "@stimulus/core" "^1.1.1" + "@stimulus/webpack-helpers" "^1.1.1" + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" |