Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • geocontrib/geocontrib-frontend
  • ext_matthieu/geocontrib-frontend
  • fnecas/geocontrib-frontend
  • MatthieuE/geocontrib-frontend
4 results
Show changes
Showing
with 34 additions and 2496 deletions
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
public/img/logo-geocontrib.png

156 KiB

public/img/logo-neogeo-circle.png

40.5 KiB | W: 0px | H: 0px

public/img/logo-neogeo-circle.png

120 KiB | W: 0px | H: 0px

public/img/logo-neogeo-circle.png
public/img/logo-neogeo-circle.png
public/img/logo-neogeo-circle.png
public/img/logo-neogeo-circle.png
  • 2-up
  • Swipe
  • Onion skin
public/img/logo_g2f.png

54.3 KiB

sonar.sources = src
sonar.exclusions = build/**, node_modules/**, src/assets/resources/**
#sonar.tests = api/tests/
<template>
<div v-frag>
<script
type="application/javascript"
:src="
baseUrl +
'resources/leaflet-control-geocoder-1.13.0/Control.Geocoder.js'
"
<div id="app">
<GeorchestraHeader
v-if="isGeorchestra"
:key="$route.fullPath"
/>
<header class="header-menu">
<div class="menu container">
<div class="ui inverted icon menu">
<router-link
:is="isSharedProject ? 'span' : 'router-link'"
:to="isSharedProject ? '' : '/'"
:class="['header item', {disable: isSharedProject}]"
>
<img
class="ui mini right spaced image"
:src="logo"
>
<span class="desktop">
{{ APPLICATION_NAME }}
</span>
</router-link>
<AppHeader v-else />
<div
v-if="width <= 560 || (width > 560 && project)"
id="menu-dropdown"
:class="['ui dropdown item', { 'active visible': menuIsOpen }]"
@click="menuIsOpen = !menuIsOpen"
>
<!-- empty span to occupy space for style if no project -->
<span>
<span v-if="project"> Projet : {{ project.title }} </span>
</span>
<i class="dropdown icon" />
<div
:class="[
'menu dropdown-list',
{ 'visible transition': menuIsOpen },
]"
style="z-index: 401"
>
<router-link
v-if="project"
:to="{
name: 'project_detail',
params: { slug: project.slug },
}"
class="item"
>
<i class="home icon" />Accueil
</router-link>
<router-link
v-if="project"
:to="{
name: 'liste-signalements',
params: { slug: project.slug },
}"
class="item"
>
<i class="list icon" />Liste & Carte
</router-link>
<router-link
v-if="
project && isOnline &&
(user.is_administrator || user.is_superuser || isAdmin)
"
:to="{
name: 'project_mapping',
params: { slug: project.slug },
}"
class="item"
>
<i class="map icon" />Fonds cartographiques
</router-link>
<router-link
v-if="
project && isOnline &&
(user.is_administrator || user.is_superuser || isAdmin)
"
:to="{
name: 'project_members',
params: { slug: project.slug },
}"
class="item"
>
<i class="users icon" />Membres
</router-link>
<div class="mobile">
<router-link
:is="isOnline ? 'router-link' : 'span'"
v-if="user"
:to="{
name: 'my_account',
params: { slug: isSharedProject && $route.params.slug ? $route.params.slug : null }
}"
class="item"
>
{{ userFullname || user.username || "Utilisateur inconnu" }}
</router-link>
<div
v-if="USER_LEVEL_PROJECTS && project"
class="item ui label vertical no-hover"
>
{{ USER_LEVEL_PROJECTS[project.slug] }}
<br>
</div>
<div
v-if="user && user.is_administrator"
class="item ui label vertical no-hover"
>
Gestionnaire métier
</div>
<div
v-if="!DISABLE_LOGIN_BUTTON"
v-frag
>
<a
v-if="user"
class="item"
@click="logout"
><i class="ui logout icon" />
</a>
<router-link
v-else-if="!user && !SSO_LOGIN_URL"
:to="{ name : 'login' }"
class="item"
>
Se connecter
</router-link>
<a
v-else
class="item"
:href="SSO_LOGIN_URL"
>Se connecter</a>
</div>
</div>
</div>
</div>
<div class="desktop flex push-right-desktop item title abstract">
<span>
{{ APPLICATION_ABSTRACT }}
</span>
</div>
<div class="desktop flex push-right-desktop">
<router-link
:is="isOnline ? 'router-link' : 'span'"
v-if="user"
:to="{
name: 'my_account',
params: { slug: isSharedProject && $route.params.slug ? $route.params.slug : null }
}"
class="item"
>
{{ userFullname || user.username || "Utilisateur inconnu" }}
</router-link>
<div
v-if="USER_LEVEL_PROJECTS && project"
class="item ui label vertical no-hover"
>
{{ USER_LEVEL_PROJECTS[project.slug] }}
<br>
</div>
<div
v-if="user && user.is_administrator"
class="item ui label vertical no-hover"
>
Gestionnaire métier
</div>
<div
v-if="!DISABLE_LOGIN_BUTTON"
v-frag
>
<a
v-if="user"
class="item"
@click="logout"
><i class="ui logout icon" />
</a>
<router-link
v-else-if="!user && !SSO_LOGIN_URL"
:to="{ name : 'login' }"
class="item"
>
Se Connecter
</router-link>
<a
v-else
class="item"
:href="SSO_LOGIN_URL"
>Se connecter</a>
</div>
</div>
</div>
</div>
</header>
<main>
<div id="app-content">
<span id="scroll-top-anchor" />
<div
id="content"
class="ui stackable grid centered container"
:class="{ active: loader.isLoading }"
class="ui inverted dimmer"
>
<transition name="fadeDownUp">
<div
v-if="messages && messages.length > 0"
class="row over-content"
>
<div class="fourteen wide column">
<div
v-for="(message, index) in messages"
:key="'message-' + index"
:class="['ui', message.level ? message.level : 'info', 'message']"
>
<i
class="close icon"
@click="DISCARD_MESSAGE(message)"
/>
<div class="header">
<i class="info circle icon" />
Informations
</div>
<ul class="list">
{{
message.comment
}}
</ul>
</div>
</div>
</div>
</transition>
<div
:class="{ active: loader.isLoading }"
class="ui inverted dimmer"
>
<div class="ui text loader">
{{ loader.message }}
</div>
<div class="ui text loader">
{{ loader.message }}
</div>
<router-view />
<!-- //* Les views sont injectées ici -->
</div>
</main>
<footer>
<div class="ui compact text menu">
<router-link
:to="{name: 'mentions'}"
class="item"
>
Mentions légales
</router-link>
<router-link
:to="{name: 'aide'}"
class="item"
>
Aide
</router-link>
<p class="item">
Version {{ PACKAGE_VERSION }}
</p>
</div>
</footer>
<!-- //* Les views sont injectées ici -->
<router-view class="page-content" />
</div>
<AppFooter />
</div>
</template>
<script>
import frag from 'vue-frag';
import { mapMutations, mapState } from 'vuex';
import { mapState } from 'vuex';
import AppHeader from '@/components/AppHeader';
import AppFooter from '@/components/AppFooter';
import GeorchestraHeader from '@/components/GeorchestraHeader.vue';
export default {
name: 'App',
directives: {
frag,
components: {
GeorchestraHeader,
AppHeader,
AppFooter,
},
data() {
......@@ -292,239 +56,21 @@ export default {
'user',
'USER_LEVEL_PROJECTS',
'configuration',
'messages',
'loader',
]),
...mapState('projects', [
'projects',
'project',
]),
...mapState([
'isOnline',
]),
APPLICATION_NAME() {
return this.configuration.VUE_APP_APPLICATION_NAME;
},
APPLICATION_ABSTRACT() {
return this.$store.state.configuration.VUE_APP_APPLICATION_ABSTRACT;
},
DISABLE_LOGIN_BUTTON() {
return this.configuration.VUE_APP_DISABLE_LOGIN_BUTTON;
},
SSO_LOGIN_URL() {
return this.configuration.VUE_APP_LOGIN_URL;
},
PACKAGE_VERSION: () => process.env.PACKAGE_VERSION || '0',
logo() {
return this.configuration.VUE_APP_LOGO_PATH;
},
userFullname() {
if (this.user.first_name || this.user.last_name)
return this.user.first_name + ' ' + this.user.last_name;
return null;
},
isAdmin() {
return this.USER_LEVEL_PROJECTS &&
this.USER_LEVEL_PROJECTS[this.project.slug] === 'Administrateur projet'
? true
: false;
},
isSharedProject() {
return this.$route.path.includes('projet-partage');
}
},
created() {
window.addEventListener('mousedown', this.clickOutsideMenu);
},
beforeDestroy() {
window.removeEventListener('mousedown', this.clickOutsideMenu);
},
methods: {
...mapMutations(['DISCARD_MESSAGE']),
logout() {
this.$store.dispatch('LOGOUT');
},
clickOutsideMenu(e) {
if (e.target.closest && !e.target.closest('#menu-dropdown'))
this.menuIsOpen = false;
isGeorchestra() {
return this.configuration.GEORCHESTRA_INTEGRATION?.HEADER;
},
},
};
</script>
<style>
@import "./assets/styles/base.css";
@import "./assets/resources/semantic-ui-2.4.2/semantic.min.css";
body {
height: 100vh;
margin: 0;
}
header {
min-height: 61px;
}
footer {
min-height: 40px;
}
/* Trick */
body {
display: flex;
flex-direction: column;
}
/* to display loader between header and footer */
main {
position: relative;
}
footer {
margin-top: auto;
<style scoped>
.ui.active.dimmer {
position: fixed;
}
.vertical {
flex-direction: column;
justify-content: center;
}
.leaflet-container {
background: white !important;
}
.flex {
display: flex;
}
/* keep above loader */
#menu-dropdown {
z-index: 1001;
}
@media screen and (max-width: 985px) {
.abstract{
display: none !important;
}
}
@media screen and (min-width: 590px) {
.mobile {
display: none !important;
}
.header-menu {
min-width: 560px;
}
.menu.container {
width: auto !important;
}
.push-right-desktop {
margin-left: auto;
}
}
@media screen and (max-width: 590px) {
.desktop {
display: none !important;
}
div.dropdown-list {
width: 100vw;
left: -70px !important; /* should be the same than belows */
}
.menu.container a.header {
width: 70px;
}
.menu.container a.header > img {
margin: 0;
}
#menu-dropdown {
width: calc(100vw - 70px);
justify-content: space-between;
}
#menu-dropdown > span {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
}
.ui.menu .ui.dropdown .menu > .item.no-hover:hover {
cursor: auto !important;
background: white !important;
}
/* copy style to apply inside nested div */
.ui.menu .ui.dropdown .menu .item {
margin: 0;
text-align: left;
font-size: 1em !important;
padding: 0.78571429em 1.14285714em !important;
background: 0 0 !important;
color: #252525 !important;
text-transform: none !important;
font-weight: 400 !important;
box-shadow: none !important;
transition: none !important;
}
.item.title::before {
background: none !important;
}
.ui.grid > .row.over-content {
position: absolute;
z-index: 99;
opacity: 0.95;
}
.fadeDownUp-enter-active {
animation: fadeInDown .5s;
}
.fadeDownUp-leave-active {
animation: fadeOutUp .5s;
}
@keyframes fadeOutUp {
0% {
opacity: 1;
}
100% {
opacity: 0;
transform: translate3d(0, -100%, 0);
}
}
@keyframes fadeInDown {
from {
opacity: 0;
transform: translate3d(0, -100%, 0);
}
to {
opacity: 1;
transform: translate3d(0, 0, 0);
}
}
.ui.message > .close.icon {
cursor: pointer;
position: absolute;
margin: 0em;
top: 0.78575em;
right: 0.5em;
opacity: 0.7;
-webkit-transition: opacity 0.1s ease;
transition: opacity 0.1s ease;
}
</style>
<style scoped>
.disable:hover {
cursor: default !important;
background-color: #373636 !important;
}
</style>
\ No newline at end of file
src/assets/img/default.png

15.1 KiB | W: 0px | H: 0px

src/assets/img/default.png

2.7 KiB | W: 0px | H: 0px

src/assets/img/default.png
src/assets/img/default.png
src/assets/img/default.png
src/assets/img/default.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/geolocation-icon.png

12.3 KiB

src/assets/img/line.png

5.89 KiB | W: 0px | H: 0px

src/assets/img/line.png

3.28 KiB | W: 0px | H: 0px

src/assets/img/line.png
src/assets/img/line.png
src/assets/img/line.png
src/assets/img/line.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/logo-geocontrib-large.png

13.8 KiB

src/assets/img/logo-geocontrib.png

13.8 KiB

src/assets/img/logo-large.png

27.4 KiB

src/assets/img/logo-neogeo-circle-inverted.png

47.1 KiB

src/assets/img/logo-neogeo-circle.png

40.5 KiB

src/assets/img/logo-neogeo.png

11.4 KiB

src/assets/img/logo.png

9.98 KiB

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 744.09448819 1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo.svg">
<defs
id="defs4">
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter4343"
x="-0.0516"
width="1.1032"
y="-0.0516"
height="1.1032">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="11.51431"
id="feGaussianBlur4345" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="375"
inkscape:cy="520"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false" />
<metadata
id="metadata7">
<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>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1">
<rect
inkscape:export-ydpi="74.43"
inkscape:export-xdpi="74.43"
transform="matrix(1.0337351,-0.17155069,0.17155069,1.0337351,-49.111849,56.004698)"
y="259.4512"
x="83.736664"
height="465.6055"
width="465.6055"
id="rect4293"
style="opacity:0.46200005;fill:#000000;fill-opacity:1;stroke:none;stroke-width:49.23444748;stroke-linejoin:miter;stroke-miterlimit:22;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4343)" />
<rect
style="fill:#8adcec;fill-opacity:1;stroke:#000000;stroke-width:49.23444748;stroke-linejoin:miter;stroke-miterlimit:22;stroke-dasharray:none;stroke-opacity:1"
id="rect3336"
width="440.76556"
height="440.76556"
x="56.281677"
y="327.0433"
transform="matrix(0.98650797,-0.16371323,0.16371323,0.98650797,0,0)"
inkscape:export-xdpi="74.43"
inkscape:export-ydpi="74.43" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:226.91236877px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="196.70358"
y="579.59528"
id="text4138"
sodipodi:linespacing="125%"
inkscape:export-xdpi="74.43"
inkscape:export-ydpi="74.43"><tspan
sodipodi:role="line"
id="tspan4140"
x="196.70358"
y="579.59528"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:226.91288757px;line-height:125%;font-family:Alegreya;-inkscape-font-specification:'Alegreya Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">Lab</tspan></text>
</g>
</svg>
src/assets/img/marker.png

13 KiB | W: 0px | H: 0px

src/assets/img/marker.png

7.45 KiB | W: 0px | H: 0px

src/assets/img/marker.png
src/assets/img/marker.png
src/assets/img/marker.png
src/assets/img/marker.png
  • 2-up
  • Swipe
  • Onion skin