@@ -1,5 +1,5 @@ | |||
# -*- coding: utf8 -*- | |||
from wtforms import Form, BooleanField, TextField, TextAreaField, SelectField | |||
from wtforms import Form, BooleanField, StringField, TextAreaField, SelectField | |||
from wtforms import SubmitField, validators, FieldList, PasswordField | |||
#import .ExtWforms | |||
from .ExtWtforms import MySelectField | |||
@@ -18,7 +18,7 @@ class MyBaseForm(Form): | |||
csrf_time_limit = timedelta(minutes=60) | |||
class BlogCreateForm(MyBaseForm): | |||
title = TextField('Entry title', [validators.Length(min=1, max=255)], | |||
title = StringField('Entry title', [validators.Length(min=1, max=255)], | |||
filters=[strip_filter]) | |||
body = TextAreaField('Entry body', [validators.Length(min=1)], | |||
filters=[strip_filter]) | |||
@@ -50,7 +50,7 @@ ATELIER_DURATION = [ (15,u'Lighting talk ( 5 min)'), | |||
class StaffArea(MyBaseForm): | |||
name = TextField(u'Pôle') | |||
name = StringField(u'Pôle') | |||
description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)], | |||
filters=[strip_filter] | |||
) | |||
@@ -60,7 +60,7 @@ class EditStaffArea(StaffArea): | |||
uid = HiddenField() | |||
class StaffTasks(MyBaseForm): | |||
name = TextField(u'Nom de la tâche', [validators.Required()]) | |||
name = StringField(u'Nom de la tâche', [validators.Required()]) | |||
area_uid = SelectField(u'Pôle concerné', coerce=int ) | |||
closed_by = SelectField(u'Assigné à', coerce=int ) | |||
due_date = DateField(u'Date prévue', format='%d/%m/%Y') | |||
@@ -86,8 +86,8 @@ class TiersMember(MyBaseForm): | |||
csrf = False | |||
year_uid = SelectField(u'Année', coerce=int, choices=zip(range(2006,CurrentYear+1),range(2006,CurrentYear+1))) | |||
user_uid = TextField(u'user') | |||
role = TextField(u'Role') | |||
user_uid = StringField(u'user') | |||
role = StringField(u'Role') | |||
class TiersRole(MyBaseForm): | |||
class Meta: | |||
@@ -102,8 +102,8 @@ class TiersChoice(MyBaseForm): | |||
year_uid = HiddenField() | |||
user_uid = HiddenField() | |||
tiers_uid = TextField(u'Entité') | |||
role = TextField(u'Role') | |||
tiers_uid = StringField(u'Entité') | |||
role = StringField(u'Role') | |||
class AddIntervenant(MyBaseForm): | |||
class Meta: | |||
@@ -143,7 +143,7 @@ class ConfCreateForm(MyBaseForm): | |||
) | |||
name = TextField(u'Le nom de votre ', | |||
name = StringField(u'Le nom de votre ', | |||
[validators.DataRequired(u'Vous devez spécifier un nom pour votre intérvention'), | |||
validators.Length(min=1, max=80, message='entre 1 et 80 car')], | |||
filters=[strip_filter]) | |||
@@ -162,7 +162,7 @@ class SalleForm(MyBaseForm): | |||
place_type = SelectField('Type', choices=[('Conference',u'Conférence'), | |||
('Stand','Stand'), ('Atelier','Atelier'), ('Table ronde','Table ronde'), | |||
('MAO','MAO'), ('Repas','Repas / Snack'), ('Autres','Autres') ]) | |||
name = TextField('Nom de la salle', [validators.Length(min=1, max=40)], | |||
name = StringField('Nom de la salle', [validators.Length(min=1, max=40)], | |||
filters=[strip_filter]) | |||
description = TextAreaField('Description', | |||
filters=[strip_filter]) | |||
@@ -171,9 +171,9 @@ class EditSalleForm(SalleForm): | |||
salle_id = HiddenField() | |||
class SallePhyForm(MyBaseForm): | |||
name = TextField('Nom de la salle', [validators.Length(min=1, max=40)], | |||
name = StringField('Nom de la salle', [validators.Length(min=1, max=40)], | |||
filters=[strip_filter]) | |||
nb_places = TextField('Nombre de places', [validators.Length(max=4)]) | |||
nb_places = StringField('Nombre de places', [validators.Length(max=4)]) | |||
description = TextAreaField('Description', | |||
filters=[strip_filter]) | |||
@@ -184,19 +184,21 @@ class PlaceCreateForm(MyBaseForm): | |||
place_type = SelectField('Type', choices=PLACE_TYPE) | |||
display_name = TextField(u'Nom affiché', [validators.Length(min=1, max=20)], | |||
display_name = StringField(u'Nom affiché', [validators.Length(min=1, max=20)], | |||
filters=[strip_filter]) | |||
name = TextField('Nom Complet', [validators.Length(min=1, max=80)], | |||
name = StringField('Nom Complet', [validators.Length(min=1, max=80)], | |||
filters=[strip_filter]) | |||
gps_coord = TextField(u'Coordonnées GPS', [validators.Length(max=30)], | |||
gps_coord = StringField(u'Coordonnées GPS', [validators.Length(max=30), | |||
validators.Regexp( "^[0-9]*\.?[0-9],[0-9]*\.?[0-9]+", | |||
message=u"Le GPS devrait être sous la forme 43.6158372,7.0723401")], | |||
filters=[strip_filter]) | |||
adresse = TextAreaField('Adresse', [validators.Length(max=100)], | |||
filters=[strip_filter]) | |||
codePostal = TextField('Code Postal', [validators.Length(max=5)], | |||
codePostal = StringField('Code Postal', [validators.Length(max=5)], | |||
filters=[strip_filter]) | |||
ville = TextField('Ville', [validators.Length(max=40)], | |||
ville = StringField('Ville', [validators.Length(max=40)], | |||
filters=[strip_filter]) | |||
website = TextField('Site Web', [validators.Length(max=100)], | |||
website = StringField('Site Web', [validators.Length(max=100)], | |||
filters=[strip_filter]) | |||
description = TextAreaField('Description', | |||
filters=[strip_filter]) | |||
@@ -222,17 +224,17 @@ class UserPasswordForm(MyBaseForm): | |||
confirm = PasswordField('Confirmez') | |||
class UserRegisterForm(MyBaseForm): | |||
nom = TextField(u'Nom', [ | |||
nom = StringField(u'Nom', [ | |||
validators.Length(max=80, message=u"80 car. maximum"), | |||
validators.required(message=u"Ce champ est obligatoire") ], | |||
filters=[strip_filter] | |||
) | |||
prenom = TextField(u'Prénom', [ | |||
prenom = StringField(u'Prénom', [ | |||
validators.Length(max=80, message=u"80 car. maximum"), | |||
validators.required(message=u"Ce champ est obligatoire"), | |||
validators.Length(max=80)], filters=[strip_filter] | |||
) | |||
mail = TextField(u'Adresse électronique', [ | |||
mail = StringField(u'Adresse électronique', [ | |||
validators.required(message=u"Ce champ est obligatoire"), | |||
validators.Email(message=u"Essayez aussi avec une adresse e-mail valide"), | |||
validators.Length(max=100)], | |||
@@ -241,30 +243,30 @@ class UserRegisterForm(MyBaseForm): | |||
u"Cette adresse ne sera pas rendue publique, "+ | |||
u"et ne sera pas divulguée à des tiers." | |||
) | |||
captcha = TextField(u'Captcha', [validators.Length(max=8), captcha_check], | |||
captcha = StringField(u'Captcha', [validators.Length(max=8), captcha_check], | |||
filters=[strip_filter] | |||
) | |||
class ProfilForm(MyBaseForm): | |||
id = HiddenField() | |||
user_id = HiddenField() | |||
nom = TextField(u'Nom', [validators.Length(max=80)], | |||
nom = StringField(u'Nom', [validators.Length(max=80)], | |||
filters=[strip_filter], | |||
description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||
u"pas autorisée à l'exception des points, traits d'union, " + | |||
u"apostrophes et tirets bas." | |||
) | |||
prenom = TextField(u'Prénom', [validators.Length(max=80)], | |||
prenom = StringField(u'Prénom', [validators.Length(max=80)], | |||
filters=[strip_filter], | |||
description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||
u"pas autorisée à l'exception des points, traits d'union, " + | |||
u"apostrophes et tirets bas." | |||
) | |||
pseudo = TextField(u'Pseudo', [validators.Length(max=80)], | |||
pseudo = StringField(u'Pseudo', [validators.Length(max=80)], | |||
filters=[strip_filter], | |||
description = "Votre pseudo d'usage sur la toile." | |||
) | |||
mail = TextField(u'Adresse électronique', [validators.optional(), validators.Email(), validators.Length(max=100)], | |||
mail = StringField(u'Adresse électronique', [validators.optional(), validators.Email(), validators.Length(max=100)], | |||
filters=[strip_filter], | |||
description = u"Une adresse e-mail valide. Tous les messages de ce système" + | |||
u"seront envoyés à cette adresse. Cette adresse ne sera pas rendue publique,"+ | |||
@@ -272,7 +274,7 @@ class ProfilForm(MyBaseForm): | |||
u"recevoir personnellement certaines nouvelles ou avertissements." | |||
) | |||
phone = TextField(u'Mobile', [validators.optional(), validators.Length(max=10), | |||
phone = StringField(u'Mobile', [validators.optional(), validators.Length(max=10), | |||
validators.Regexp("\d+", message=u"Le numéro de téléphone mobile ne doit contenir que des chiffres")], | |||
filters=[strip_filter], | |||
description = u"Un numéro de mobile valide. Afin de pouvoir rester en" + | |||
@@ -281,7 +283,7 @@ class ProfilForm(MyBaseForm): | |||
u"vous désirez recevoir personnellement certaines nouvelles ou alertes." | |||
) | |||
website = TextField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)], | |||
website = StringField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)], | |||
filters=[strip_filter], | |||
description = "Renseignez ici votre site Web." | |||
) | |||
@@ -349,7 +351,7 @@ class DateStartConfidenceForm(MyBaseForm): | |||
DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")] | |||
Day = SelectField(u'Jour', choices=DayChoice ) | |||
Confidence = SelectField(u'Confiance', choices=ConfidenceLevel) | |||
Hour = TextField(u'Heure', [validators.Length(max=5, | |||
Hour = StringField(u'Heure', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
@@ -381,19 +383,19 @@ class AddItineraireForm(Form): | |||
class AddMember(MyBaseForm): | |||
tiers_uid = HiddenField() | |||
nom = TextField(u'Nom', [validators.Length(max=80)], | |||
nom = StringField(u'Nom', [validators.Length(max=80)], | |||
filters=[strip_filter], | |||
description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||
u"pas autorisée à l'exception des points, traits d'union, " + | |||
u"apostrophes et tirets bas." | |||
) | |||
prenom = TextField(u'Prénom', [validators.Length(max=80)], | |||
prenom = StringField(u'Prénom', [validators.Length(max=80)], | |||
filters=[strip_filter], | |||
description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||
u"pas autorisée à l'exception des points, traits d'union, " + | |||
u"apostrophes et tirets bas." | |||
) | |||
email = TextField(u'Email', [validators.required(), | |||
email = StringField(u'Email', [validators.required(), | |||
validators.length(max=10), | |||
validators.Email(message='Ceci ne ressemble pas à une adresse valide')], | |||
description=u"Afin d'éviter la duplication d'information et les doublons inutile, "+ | |||
@@ -402,7 +404,7 @@ class AddMember(MyBaseForm): | |||
add = SubmitField('Ajouter des membres') | |||
class TiersForm(MyBaseForm): | |||
name = TextField(u'Nom', [validators.Length(max=100)], | |||
name = StringField(u'Nom', [validators.Length(max=100)], | |||
filters=[strip_filter], | |||
description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||
u"pas autorisée à l'exception des points, traits d'union, " + | |||
@@ -411,11 +413,11 @@ class TiersForm(MyBaseForm): | |||
tiers_type = MySelectField('Nature', coerce=int) | |||
website = TextField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)], | |||
filters=[strip_filter], | |||
website = StringField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)], | |||
filters=[strip_filter], | |||
description = "Renseignez ici le site Web." | |||
) | |||
) | |||
description = TextAreaField('Descriptif', | |||
[validators.optional(), validators.Length(max=1000000)], | |||
filters=[strip_filter], | |||
@@ -433,7 +435,7 @@ class UpdateTiersForm(TiersForm): | |||
class ExchCateg(MyBaseForm): | |||
exch_type = HiddenField() | |||
exch_subtype = TextField(u'Catégorie', [validators.Length(max=80)], | |||
exch_subtype = StringField(u'Catégorie', [validators.Length(max=80)], | |||
filters=[strip_filter], | |||
description = "Le nom de la categorie" | |||
) | |||
@@ -453,7 +455,7 @@ class AskCForm(ItineraireForm): | |||
DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")] | |||
Day_start = SelectField(u'Jour', choices=DayChoice ) | |||
Confidence = SelectField(u'Confiance', choices=ConfidenceLevel) | |||
Hour_start = TextField(u'Heure', [validators.Length(max=5, | |||
Hour_start = StringField(u'Heure', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
@@ -475,14 +477,14 @@ class AskHForm(MyBaseForm): | |||
class AskMForm(MyBaseForm): | |||
DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")] | |||
Day_start = SelectField(u"à partir de", choices=DayChoice ) | |||
Hour_start = TextField(u'vers', [validators.Length(max=5, | |||
Hour_start = StringField(u'vers', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
filters=[strip_filter]) | |||
start_time = HiddenField() | |||
Day_end = SelectField(u"Jusqu'à", choices=DayChoice ) | |||
Hour_end = TextField(u'vers', [validators.Length(max=5, | |||
Hour_end = StringField(u'vers', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
@@ -506,7 +508,7 @@ class PropCForm(ItineraireForm): | |||
DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")] | |||
Day_start = SelectField(u'Jour', choices=DayChoice ) | |||
Confidence = SelectField(u'Confiance', choices=ConfidenceLevel) | |||
Hour_start = TextField(u'Heure', [validators.Length(max=5, | |||
Hour_start = StringField(u'Heure', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
@@ -532,14 +534,14 @@ class PropHForm(MyBaseForm): | |||
class PropMForm(MyBaseForm): | |||
DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")] | |||
Day_start = SelectField(u"à partir de", choices=DayChoice ) | |||
Hour_start = TextField(u'vers', [validators.Length(max=5, | |||
Hour_start = StringField(u'vers', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
filters=[strip_filter]) | |||
start_time = HiddenField() | |||
Day_end = SelectField(u"Jusqu'a ", choices=DayChoice ) | |||
Hour_end = TextField(u'vers', [validators.Length(max=5, | |||
Hour_end = StringField(u'vers', [validators.Length(max=5, | |||
message=u"doit faire au maximum 5 caractères"), | |||
validators.Regexp("\d+:\d+", | |||
message=u"doit être sous la forme HH:MM")], | |||
@@ -114,7 +114,7 @@ $(document).ready(function() { | |||
if (bla.target.id=="ItinMap") | |||
setTimeout(function() { | |||
map.invalidateSize(); | |||
toast.route(); | |||
great_route.route(); | |||
$('#map_Itineraire').eq(0).html( $('.leaflet-routing-alt').eq(0).html() ); | |||
$('.leaflet-routing-container').eq(0).attr("style","display:none;") | |||
$('#map_Itineraire > table').eq(0).attr("style","width:100%;"); | |||
@@ -1,12 +1,14 @@ | |||
.leaflet-routing-container { | |||
.leaflet-routing-container, .leaflet-routing-error { | |||
width: 320px; | |||
background-color: white; | |||
padding-top: 4px; | |||
transition: margin-right 0.2s ease; | |||
transition: all 0.2s ease; | |||
box-sizing: border-box; | |||
} | |||
.leaflet-control-container .leaflet-routing-container-hide { | |||
margin-right: -340px; | |||
width: 32px; | |||
height: 32px; | |||
} | |||
.leaflet-routing-container h2 { | |||
@@ -18,7 +20,11 @@ | |||
font-weight: normal; | |||
} | |||
.leaflet-routing-alt, .leaflet-routing-geocoders { | |||
.leaflet-routing-collapsible .leaflet-routing-geocoders { | |||
margin-top: 20px; | |||
} | |||
.leaflet-routing-alt, .leaflet-routing-geocoders, .leaflet-routing-error { | |||
padding: 6px; | |||
margin-top: 2px; | |||
margin-bottom: 6px; | |||
@@ -28,6 +34,11 @@ | |||
transition: all 0.2s ease; | |||
} | |||
.leaflet-control-container .leaflet-routing-container-hide .leaflet-routing-alt, | |||
.leaflet-control-container .leaflet-routing-container-hide .leaflet-routing-geocoders { | |||
display: none; | |||
} | |||
.leaflet-bar .leaflet-routing-alt:last-child { | |||
border-bottom: none; | |||
} | |||
@@ -86,14 +97,15 @@ | |||
.leaflet-routing-icon-depart { background-position: -160px 0; } | |||
.leaflet-routing-icon-enter-roundabout { background-position: -180px 0; } | |||
.leaflet-routing-icon-arrive { background-position: -200px 0; } | |||
.leaflet-routing-icon-via { background-position: -200px 0; } | |||
.leaflet-routing-icon-via { background-position: -220px 0; } | |||
.leaflet-routing-geocoders div { | |||
padding: 4px; | |||
padding: 4px 0px 4px 0px; | |||
} | |||
.leaflet-routing-geocoders input { | |||
width: 286px; | |||
width: 303px; | |||
width: calc(100% - 4px); | |||
line-height: 1.67; | |||
border: 1px solid #ccc; | |||
} | |||
@@ -104,22 +116,36 @@ | |||
border-radius: 4px; | |||
background-color: white; | |||
margin: 0; | |||
margin-right: 3px; | |||
float: right; | |||
cursor: pointer; | |||
transition: background-color 0.2s ease; | |||
} | |||
.leaflet-routing-add-waypoint:after { | |||
content: '+'; | |||
} | |||
.leaflet-routing-reverse-waypoints:after { | |||
font-weight: normal; | |||
content: '\21c5'; | |||
} | |||
.leaflet-routing-geocoders button:hover { | |||
background-color: #eee; | |||
} | |||
.leaflet-routing-geocoders input,.leaflet-routing-remove-waypoint,.leaflet-routing-geocoder { | |||
position: relative; | |||
} | |||
.leaflet-routing-geocoder-result { | |||
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; | |||
position: absolute; | |||
max-height: 0; | |||
overflow: hidden; | |||
transition: all 0.5s ease; | |||
z-index: 15; /* Arbitrary, but try to be above "most" things. */ | |||
z-index: 1000; /* Arbitrary, but try to be above "most" things. */ | |||
} | |||
.leaflet-routing-geocoder-result table { | |||
@@ -144,19 +170,89 @@ | |||
} | |||
.leaflet-routing-remove-waypoint { | |||
position: relative; | |||
float: right; | |||
background-color: transparent; | |||
display: inline-block; | |||
vertical-align: middle; | |||
cursor: pointer; | |||
} | |||
.leaflet-routing-remove-waypoint:after { | |||
position: absolute; | |||
display: block; | |||
width: 15px; | |||
height: 1px; | |||
z-index: 1; | |||
right: 1px; | |||
top: 4px; | |||
bottom: 0; | |||
margin: auto; | |||
padding: 2px; | |||
font-size: 18px; | |||
font-weight: bold; | |||
left: 4px; | |||
content: "\00d7"; | |||
text-align: center; | |||
cursor: pointer; | |||
color: #ccc; | |||
background: white; | |||
padding-bottom: 16px; | |||
margin-top: -16px; | |||
padding-right: 4px; | |||
line-height: 1; | |||
} | |||
.leaflet-routing-remove-waypoint:hover { | |||
color: inherit; | |||
color: black; | |||
} | |||
.leaflet-routing-instruction-distance { | |||
width: 48px; | |||
} | |||
.leaflet-routing-collapse-btn { | |||
position: absolute; | |||
top: 0; | |||
right: 6px; | |||
font-size: 24px; | |||
color: #ccc; | |||
font-weight: bold; | |||
} | |||
.leaflet-routing-collapse-btn:after { | |||
content: '\00d7'; | |||
} | |||
.leaflet-routing-container-hide .leaflet-routing-collapse-btn { | |||
position: relative; | |||
left: 4px; | |||
top: 4px; | |||
display: block; | |||
width: 26px; | |||
height: 23px; | |||
background-image: url('routing-icon.png'); | |||
} | |||
.leaflet-routing-container-hide .leaflet-routing-collapse-btn:after { | |||
content: none; | |||
} | |||
.leaflet-top .leaflet-routing-container.leaflet-routing-container-hide { | |||
margin-top: 10px !important; | |||
} | |||
.leaflet-right .leaflet-routing-container.leaflet-routing-container-hide { | |||
margin-right: 10px !important; | |||
} | |||
.leaflet-bottom .leaflet-routing-container.leaflet-routing-container-hide { | |||
margin-bottom: 10px !important; | |||
} | |||
.leaflet-left .leaflet-routing-container.leaflet-routing-container-hide { | |||
margin-left: 10px !important; | |||
} | |||
.leaflet-routing-remove-waypoint:before { | |||
content: '\00d7' | |||
@media only screen and (max-width: 640px) { | |||
.leaflet-routing-container { | |||
margin: 0 !important; | |||
padding: 0 !important; | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} |
@@ -1,16 +1,12 @@ | |||
/* required styles */ | |||
.leaflet-map-pane, | |||
.leaflet-pane, | |||
.leaflet-tile, | |||
.leaflet-marker-icon, | |||
.leaflet-marker-shadow, | |||
.leaflet-tile-pane, | |||
.leaflet-tile-container, | |||
.leaflet-overlay-pane, | |||
.leaflet-shadow-pane, | |||
.leaflet-marker-pane, | |||
.leaflet-popup-pane, | |||
.leaflet-overlay-pane svg, | |||
.leaflet-pane > svg, | |||
.leaflet-pane > canvas, | |||
.leaflet-zoom-box, | |||
.leaflet-image-layer, | |||
.leaflet-layer { | |||
@@ -20,7 +16,6 @@ | |||
} | |||
.leaflet-container { | |||
overflow: hidden; | |||
-ms-touch-action: none; | |||
} | |||
.leaflet-tile, | |||
.leaflet-marker-icon, | |||
@@ -28,20 +23,49 @@ | |||
-webkit-user-select: none; | |||
-moz-user-select: none; | |||
user-select: none; | |||
-webkit-user-drag: none; | |||
-webkit-user-drag: none; | |||
} | |||
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ | |||
.leaflet-safari .leaflet-tile { | |||
image-rendering: -webkit-optimize-contrast; | |||
} | |||
/* hack that prevents hw layers "stretching" when loading new tiles */ | |||
.leaflet-safari .leaflet-tile-container { | |||
width: 1600px; | |||
height: 1600px; | |||
-webkit-transform-origin: 0 0; | |||
} | |||
.leaflet-marker-icon, | |||
.leaflet-marker-shadow { | |||
display: block; | |||
} | |||
/* map is broken in FF if you have max-width: 100% on tiles */ | |||
.leaflet-container img { | |||
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ | |||
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ | |||
.leaflet-container .leaflet-overlay-pane svg, | |||
.leaflet-container .leaflet-marker-pane img, | |||
.leaflet-container .leaflet-shadow-pane img, | |||
.leaflet-container .leaflet-tile-pane img, | |||
.leaflet-container img.leaflet-image-layer { | |||
max-width: none !important; | |||
} | |||
/* stupid Android 2 doesn't understand "max-width: none" properly */ | |||
.leaflet-container img.leaflet-image-layer { | |||
max-width: 15000px !important; | |||
.leaflet-container.leaflet-touch-zoom { | |||
-ms-touch-action: pan-x pan-y; | |||
touch-action: pan-x pan-y; | |||
} | |||
.leaflet-container.leaflet-touch-drag { | |||
-ms-touch-action: pinch-zoom; | |||
} | |||
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { | |||
-ms-touch-action: none; | |||
touch-action: none; | |||
} | |||
.leaflet-container { | |||
-webkit-tap-highlight-color: transparent; | |||
} | |||
.leaflet-container a { | |||
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); | |||
} | |||
.leaflet-tile { | |||
filter: inherit; | |||
visibility: hidden; | |||
@@ -52,18 +76,26 @@ | |||
.leaflet-zoom-box { | |||
width: 0; | |||
height: 0; | |||
-moz-box-sizing: border-box; | |||
box-sizing: border-box; | |||
z-index: 800; | |||
} | |||
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ | |||
.leaflet-overlay-pane svg { | |||
-moz-user-select: none; | |||
} | |||
.leaflet-tile-pane { z-index: 2; } | |||
.leaflet-objects-pane { z-index: 3; } | |||
.leaflet-overlay-pane { z-index: 4; } | |||
.leaflet-shadow-pane { z-index: 5; } | |||
.leaflet-marker-pane { z-index: 6; } | |||
.leaflet-popup-pane { z-index: 7; } | |||
.leaflet-pane { z-index: 400; } | |||
.leaflet-tile-pane { z-index: 200; } | |||
.leaflet-overlay-pane { z-index: 400; } | |||
.leaflet-shadow-pane { z-index: 500; } | |||
.leaflet-marker-pane { z-index: 600; } | |||
.leaflet-tooltip-pane { z-index: 650; } | |||
.leaflet-popup-pane { z-index: 700; } | |||
.leaflet-map-pane canvas { z-index: 100; } | |||
.leaflet-map-pane svg { z-index: 200; } | |||
.leaflet-vml-shape { | |||
width: 1px; | |||
@@ -80,7 +112,8 @@ | |||
.leaflet-control { | |||
position: relative; | |||
z-index: 7; | |||
z-index: 800; | |||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ | |||
pointer-events: auto; | |||
} | |||
.leaflet-top, | |||
@@ -124,7 +157,9 @@ | |||
/* zoom and fade animations */ | |||
.leaflet-fade-anim .leaflet-tile, | |||
.leaflet-fade-anim .leaflet-tile { | |||
will-change: opacity; | |||
} | |||
.leaflet-fade-anim .leaflet-popup { | |||
opacity: 0; | |||
-webkit-transition: opacity 0.2s linear; | |||
@@ -132,11 +167,17 @@ | |||
-o-transition: opacity 0.2s linear; | |||
transition: opacity 0.2s linear; | |||
} | |||
.leaflet-fade-anim .leaflet-tile-loaded, | |||
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { | |||
opacity: 1; | |||
} | |||
.leaflet-zoom-animated { | |||
-webkit-transform-origin: 0 0; | |||
-ms-transform-origin: 0 0; | |||
transform-origin: 0 0; | |||
} | |||
.leaflet-zoom-anim .leaflet-zoom-animated { | |||
will-change: transform; | |||
} | |||
.leaflet-zoom-anim .leaflet-zoom-animated { | |||
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); | |||
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); | |||
@@ -144,8 +185,7 @@ | |||
transition: transform 0.25s cubic-bezier(0,0,0.25,1); | |||
} | |||
.leaflet-zoom-anim .leaflet-tile, | |||
.leaflet-pan-anim .leaflet-tile, | |||
.leaflet-touching .leaflet-zoom-animated { | |||
.leaflet-pan-anim .leaflet-tile { | |||
-webkit-transition: none; | |||
-moz-transition: none; | |||
-o-transition: none; | |||
@@ -159,24 +199,44 @@ | |||
/* cursors */ | |||
.leaflet-clickable { | |||
.leaflet-interactive { | |||
cursor: pointer; | |||
} | |||
.leaflet-container { | |||
.leaflet-grab { | |||
cursor: -webkit-grab; | |||
cursor: -moz-grab; | |||
} | |||
.leaflet-crosshair, | |||
.leaflet-crosshair .leaflet-interactive { | |||
cursor: crosshair; | |||
} | |||
.leaflet-popup-pane, | |||
.leaflet-control { | |||
cursor: auto; | |||
} | |||
.leaflet-dragging .leaflet-container, | |||
.leaflet-dragging .leaflet-clickable { | |||
.leaflet-dragging .leaflet-grab, | |||
.leaflet-dragging .leaflet-grab .leaflet-interactive, | |||
.leaflet-dragging .leaflet-marker-draggable { | |||
cursor: move; | |||
cursor: -webkit-grabbing; | |||
cursor: -moz-grabbing; | |||
} | |||
/* marker & overlays interactivity */ | |||
.leaflet-marker-icon, | |||
.leaflet-marker-shadow, | |||
.leaflet-image-layer, | |||
.leaflet-pane > svg path, | |||
.leaflet-tile-container { | |||
pointer-events: none; | |||
} | |||
.leaflet-marker-icon.leaflet-interactive, | |||
.leaflet-image-layer.leaflet-interactive, | |||
.leaflet-pane > svg path.leaflet-interactive { | |||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ | |||
pointer-events: auto; | |||
} | |||
/* visual tweaks */ | |||
@@ -249,7 +309,14 @@ | |||
height: 30px; | |||
line-height: 30px; | |||
} | |||
.leaflet-touch .leaflet-bar a:first-child { | |||
border-top-left-radius: 2px; | |||
border-top-right-radius: 2px; | |||
} | |||
.leaflet-touch .leaflet-bar a:last-child { | |||
border-bottom-left-radius: 2px; | |||
border-bottom-right-radius: 2px; | |||
} | |||
/* zoom control */ | |||
@@ -258,16 +325,10 @@ | |||
font: bold 18px 'Lucida Console', Monaco, monospace; | |||
text-indent: 1px; | |||
} | |||
.leaflet-control-zoom-out { | |||
font-size: 20px; | |||
} | |||
.leaflet-touch .leaflet-control-zoom-in { | |||
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { | |||
font-size: 22px; | |||
} | |||
.leaflet-touch .leaflet-control-zoom-out { | |||
font-size: 24px; | |||
} | |||
/* layers control */ | |||
@@ -303,6 +364,11 @@ | |||
color: #333; | |||
background: #fff; | |||
} | |||
.leaflet-control-layers-scrollbar { | |||
overflow-y: scroll; | |||
overflow-x: hidden; | |||
padding-right: 5px; | |||
} | |||
.leaflet-control-layers-selector { | |||
margin-top: 2px; | |||
position: relative; | |||
@@ -317,6 +383,11 @@ | |||
margin: 5px -10px 5px -6px; | |||
} | |||
/* Default icon URLs */ | |||
.leaflet-default-icon-path { | |||
background-image: url(images/marker-icon.png); | |||
} | |||
/* attribution and scale controls */ | |||
@@ -354,8 +425,8 @@ | |||
font-size: 11px; | |||
white-space: nowrap; | |||
overflow: hidden; | |||
-moz-box-sizing: content-box; | |||
box-sizing: content-box; | |||
-moz-box-sizing: border-box; | |||
box-sizing: border-box; | |||
background: #fff; | |||
background: rgba(255, 255, 255, 0.5); | |||
@@ -386,6 +457,7 @@ | |||
.leaflet-popup { | |||
position: absolute; | |||
text-align: center; | |||
margin-bottom: 20px; | |||
} | |||
.leaflet-popup-content-wrapper { | |||
padding: 1px; | |||
@@ -400,11 +472,13 @@ | |||
margin: 18px 0; | |||
} | |||
.leaflet-popup-tip-container { | |||
margin: 0 auto; | |||
width: 40px; | |||
height: 20px; | |||
position: relative; | |||
position: absolute; | |||
left: 50%; | |||
margin-left: -20px; | |||
overflow: hidden; | |||
pointer-events: none; | |||
} | |||
.leaflet-popup-tip { | |||
width: 17px; | |||
@@ -422,7 +496,7 @@ | |||
.leaflet-popup-content-wrapper, | |||
.leaflet-popup-tip { | |||
background: white; | |||
color: #333; | |||
box-shadow: 0 3px 14px rgba(0,0,0,0.4); | |||
} | |||
.leaflet-container a.leaflet-popup-close-button { | |||
@@ -430,6 +504,7 @@ | |||
top: 0; | |||
right: 0; | |||
padding: 4px 4px 0 0; | |||
border: none; | |||
text-align: center; | |||
width: 18px; | |||
height: 14px; | |||
@@ -476,3 +551,82 @@ | |||
background: #fff; | |||
border: 1px solid #666; | |||
} | |||
/* Tooltip */ | |||
/* Base styles for the element that has a tooltip */ | |||
.leaflet-tooltip { | |||
position: absolute; | |||
padding: 6px; | |||
background-color: #fff; | |||
border: 1px solid #fff; | |||
border-radius: 3px; | |||
color: #222; | |||
white-space: nowrap; | |||
-webkit-user-select: none; | |||
-moz-user-select: none; | |||
-ms-user-select: none; | |||
user-select: none; | |||
pointer-events: none; | |||
box-shadow: 0 1px 3px rgba(0,0,0,0.4); | |||
} | |||
.leaflet-tooltip.leaflet-clickable { | |||
cursor: pointer; | |||
pointer-events: auto; | |||
} | |||
.leaflet-tooltip-top:before, | |||
.leaflet-tooltip-bottom:before, | |||
.leaflet-tooltip-left:before, | |||
.leaflet-tooltip-right:before { | |||
position: absolute; | |||
pointer-events: none; | |||
border: 6px solid transparent; | |||
background: transparent; | |||
content: ""; | |||
} | |||
/* Directions */ | |||
.leaflet-tooltip-bottom { | |||
margin-top: 6px; | |||
} | |||
.leaflet-tooltip-top { | |||
margin-top: -6px; | |||
} | |||
.leaflet-tooltip-bottom:before, | |||
.leaflet-tooltip-top:before { | |||
left: 50%; | |||
margin-left: -6px; | |||
} | |||
.leaflet-tooltip-top:before { | |||
bottom: 0; | |||
margin-bottom: -12px; | |||
border-top-color: #fff; | |||
} | |||
.leaflet-tooltip-bottom:before { | |||
top: 0; | |||
margin-top: -12px; | |||
margin-left: -6px; | |||
border-bottom-color: #fff; | |||
} | |||
.leaflet-tooltip-left { | |||
margin-left: -6px; | |||
} | |||
.leaflet-tooltip-right { | |||
margin-left: 6px; | |||
} | |||
.leaflet-tooltip-left:before, | |||
.leaflet-tooltip-right:before { | |||
top: 50%; | |||
margin-top: -6px; | |||
} | |||
.leaflet-tooltip-left:before { | |||
right: 0; | |||
margin-right: -12px; | |||
border-left-color: #fff; | |||
} | |||
.leaflet-tooltip-right:before { | |||
left: 0; | |||
margin-left: -12px; | |||
border-right-color: #fff; | |||
} |
@@ -61,20 +61,23 @@ | |||
var osmAttrib='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors'; | |||
var osm = new L.TileLayer(osmUrl, {minZoom: 8, maxZoom: 17, attribution: osmAttrib}); | |||
map.addLayer(osm); | |||
var toast = L.Routing.control({ | |||
var great_route = L.Routing.control({ | |||
containerClassName: '#map_Itineraire', | |||
show:false, | |||
language:'fr', | |||
waypoints: [ | |||
L.latLng(${Exch.Itin.start.gps_coord}), | |||
L.latLng(${Exch.Itin.arrival.gps_coord}) | |||
] | |||
}); | |||
toast.addTo(map); | |||
great_route.addTo(map); | |||
</script> | |||
</div> | |||
<div class="tab-pane fade in" id="Place_Itin"> | |||
<div id="map_Itineraire"></div> | |||
<div id="map_Itineraire"> | |||
Cliquez sur l'onglet carte pour démarrer la recherche d'intineraire. | |||
</div> | |||
</div> | |||
% endif | |||