@@ -5,7 +5,7 @@ from pyramid.renderers import JSON, JSONP | |||||
from pyramid.session import SignedCookieSessionFactory | from pyramid.session import SignedCookieSessionFactory | ||||
from sqlalchemy import engine_from_config | from sqlalchemy import engine_from_config | ||||
from pyramid.renderers import render_to_response | from pyramid.renderers import render_to_response | ||||
from .models import DBSession, get_user | |||||
from .models import DBSession, get_user, get_sponsors, get_exposants | |||||
from .security import EntryFactory, groupfinder | from .security import EntryFactory, groupfinder | ||||
from pyramid_mailer import mailer_factory_from_settings | from pyramid_mailer import mailer_factory_from_settings | ||||
import locale | import locale | ||||
@@ -17,7 +17,7 @@ def main(global_config, **settings): | |||||
locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") | locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") | ||||
engine = engine_from_config(settings, 'sqlalchemy.') | engine = engine_from_config(settings, 'sqlalchemy.') | ||||
DBSession.configure(bind=engine) | DBSession.configure(bind=engine) | ||||
# Extract secrets from configuration file | |||||
# Extract secrets from configuration file if any | |||||
CookiesPasswd = settings.get('secret_Cookies', 'itsthefirstseekreet') | CookiesPasswd = settings.get('secret_Cookies', 'itsthefirstseekreet') | ||||
AuthTktPasswd = settings.get('secret_AuthTkt', 'itsthesecondseekreet') | AuthTktPasswd = settings.get('secret_AuthTkt', 'itsthesecondseekreet') | ||||
my_session_factory = SignedCookieSessionFactory(CookiesPasswd) | my_session_factory = SignedCookieSessionFactory(CookiesPasswd) | ||||
@@ -34,6 +34,8 @@ def main(global_config, **settings): | |||||
config.add_renderer('jsonp', JSONP(param_name='callback')) | config.add_renderer('jsonp', JSONP(param_name='callback')) | ||||
config.set_session_factory(my_session_factory) | config.set_session_factory(my_session_factory) | ||||
config.add_request_method(get_user, 'user', reify=True) | config.add_request_method(get_user, 'user', reify=True) | ||||
config.add_request_method(get_sponsors, 'sponsors', reify=False) | |||||
config.add_request_method(get_exposants, 'exposants', reify=False) | |||||
config.add_static_view('static', 'static', cache_max_age=3600) | config.add_static_view('static', 'static', cache_max_age=3600) | ||||
config.add_static_view('img', 'static/img', cache_max_age=3600) | config.add_static_view('img', 'static/img', cache_max_age=3600) | ||||
config.add_static_view('css', 'static/css', cache_max_age=3600) | config.add_static_view('css', 'static/css', cache_max_age=3600) | ||||
@@ -73,7 +75,7 @@ def main(global_config, **settings): | |||||
config.add_route('link_event', '/MesJM2L/{year:\d+}/{intervention:\w+}/link') | config.add_route('link_event', '/MesJM2L/{year:\d+}/{intervention:\w+}/link') | ||||
config.add_route('edit_event', '/MesJM2L/{year:\d+}/{intervention:\w+}{sep:/*}{event_id:([\w-]+)?}') | config.add_route('edit_event', '/MesJM2L/{year:\d+}/{intervention:\w+}{sep:/*}{event_id:([\w-]+)?}') | ||||
## Entities | |||||
## Entities | |||||
config.add_route('entities', '/entities') #{sep:/*}{Nature:\w+?}') | config.add_route('entities', '/entities') #{sep:/*}{Nature:\w+?}') | ||||
config.add_route('add_entity', '/entity') | config.add_route('add_entity', '/entity') | ||||
config.add_route('show_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}') | config.add_route('show_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}') | ||||
@@ -60,7 +60,7 @@ class StaffTasks(MyBaseForm): | |||||
name = TextField(u'Nom de la tâche', [validators.Required()]) | name = TextField(u'Nom de la tâche', [validators.Required()]) | ||||
area_uid = SelectField(u'Pôle concerné', coerce=int ) | area_uid = SelectField(u'Pôle concerné', coerce=int ) | ||||
closed_by = SelectField(u'Assigné à', coerce=int ) | closed_by = SelectField(u'Assigné à', coerce=int ) | ||||
due_date = DateField(u'Date prévue', format='%Y-%m-%d') | |||||
due_date = DateField(u'Date prévue', format='%d/%m/%Y') | |||||
description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)], | description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)], | ||||
filters=[strip_filter]) | filters=[strip_filter]) | ||||
@@ -243,7 +243,7 @@ class Tiers(Base): | |||||
lazy='dynamic') | lazy='dynamic') | ||||
creator_id = Column(Integer) | creator_id = Column(Integer) | ||||
membership = relationship('User_Tiers', backref="matching_tiers") | membership = relationship('User_Tiers', backref="matching_tiers") | ||||
roles = relationship('Tiers', secondary='role_tiers_link' ) | |||||
roles = relationship('Role_Tiers', backref="roles_tiers") #secondary='role_tiers_link' ) | |||||
@classmethod | @classmethod | ||||
def by_id(cls, id): | def by_id(cls, id): | ||||
@@ -618,3 +618,27 @@ def get_user(request): | |||||
# this should return None if the user doesn't exist | # this should return None if the user doesn't exist | ||||
# in the database | # in the database | ||||
return DBSession.query(User).filter(User.uid==userid).first() | return DBSession.query(User).filter(User.uid==userid).first() | ||||
def get_sponsors(request, Year): | |||||
if Year: | |||||
return DBSession.query(Tiers)\ | |||||
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\ | |||||
.filter( Role_Tiers.tiers_role == 'Sponsor')\ | |||||
.filter( Role_Tiers.year_uid == Year) | |||||
else: | |||||
return DBSession.query(Tiers)\ | |||||
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\ | |||||
.filter( Role_Tiers.tiers_role == 'Sponsor') | |||||
def get_exposants(request, Year): | |||||
if Year: | |||||
return DBSession.query(Tiers)\ | |||||
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\ | |||||
.filter( Role_Tiers.tiers_role == 'Exposant')\ | |||||
.filter( Role_Tiers.year_uid == Year) | |||||
else: | |||||
return DBSession.query(Tiers)\ | |||||
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\ | |||||
.filter( Role_Tiers.tiers_role == 'Exposant') | |||||
@@ -2,6 +2,10 @@ a { | |||||
cursor: pointer; | cursor: pointer; | ||||
} | } | ||||
.pagecontent { | |||||
padding: 0 50px; | |||||
} | |||||
.borderbox { | .borderbox { | ||||
border: 1px solid #e1e4e5; | border: 1px solid #e1e4e5; | ||||
margin: 1px 0 24px; | margin: 1px 0 24px; | ||||
@@ -84,6 +88,7 @@ a { | |||||
opacity: 0.5; | opacity: 0.5; | ||||
position: absolute; | position: absolute; | ||||
text-align: center; | text-align: center; | ||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); | |||||
width: 15px; | width: 15px; | ||||
top: -20px; | top: -20px; | ||||
} | } | ||||
@@ -96,6 +101,28 @@ a { | |||||
right: 15px; | right: 15px; | ||||
} | } | ||||
.Tcarousel-control { | |||||
bottom: 0; | |||||
color: #fff; | |||||
font-size: 20px; | |||||
left: 0; | |||||
opacity: 0.5; | |||||
position: absolute; | |||||
text-align: center; | |||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); | |||||
top: 100px;; | |||||
width: 3%; | |||||
} | |||||
.Tcarousel-control.left { | |||||
right: auto; | |||||
left: 15px; | |||||
} | |||||
.Tcarousel-control.right { | |||||
left: auto; | |||||
right: 15px; | |||||
} | |||||
.LogistiqueTable th, .LogistiqueTable td | .LogistiqueTable th, .LogistiqueTable td | ||||
{ | { | ||||
text-align:center; | text-align:center; | ||||
@@ -143,6 +170,47 @@ a { | |||||
text-align: right; | text-align: right; | ||||
display: inline-block; | display: inline-block; | ||||
} | } | ||||
.ShowEntities td, .ShowEntities th { | |||||
border-top: none; | |||||
} | |||||
.ShowEntities td { | |||||
padding:10px; | |||||
text-align: center; | |||||
} | |||||
.ShowEntities th { | |||||
background-color: #fafafa; | |||||
background-image: linear-gradient(to bottom, #fff, #f2f2f2); | |||||
background-repeat: repeat-x; | |||||
border: 1px solid #d4d4d4; | |||||
border-radius: 4px; | |||||
} | |||||
.ShowEntities { | |||||
border: 1px solid #d4d4d4; | |||||
} | |||||
.ShowEntities td img { | |||||
width: 60px; | |||||
height: 60px; | |||||
} | |||||
.ShowEntities td:hover { | |||||
background-color: #F5F5F5; | |||||
} | |||||
.footer { | |||||
background-color: #f5f5f5; | |||||
border-top: 1px solid #e5e5e5; | |||||
margin-top: 70px; | |||||
padding: 10px 0; | |||||
text-align: center; | |||||
width: auto; | |||||
} | |||||
.footer p { | |||||
color: #777; | |||||
margin-bottom: 0; | |||||
} | |||||
/* Fix calendar button vertical pos */ | /* Fix calendar button vertical pos */ | ||||
.date-input-buttons { | .date-input-buttons { | ||||
@@ -1,6 +1,6 @@ | |||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | ||||
<%def name="Resume()"> | <%def name="Resume()"> | ||||
<table width="100%" class="table table-striped table-bordered table-hover"> | |||||
<table class="table table-striped table-bordered table-hover"> | |||||
<CAPTION>La feuille de route de mes interventions</CAPTION> | <CAPTION>La feuille de route de mes interventions</CAPTION> | ||||
<thead style="text-align:center"> | <thead style="text-align:center"> | ||||
<tr> | <tr> | ||||
@@ -197,7 +197,7 @@ ListWrap = ["Co-voiturage",u"Hébergement","Matos"] | |||||
<div id="collapseMe" class="accordion-body collapse in"> | <div id="collapseMe" class="accordion-body collapse in"> | ||||
<div class="accordion-inner"> | <div class="accordion-inner"> | ||||
<table width="100%" class="table table-striped table-bordered table-hover LogistiqueTable"> | |||||
<table class="table table-striped table-bordered table-hover LogistiqueTable"> | |||||
<thead style="text-align:center"> | <thead style="text-align:center"> | ||||
<tr> | <tr> | ||||
<th>Section</th> | <th>Section</th> | ||||
@@ -246,7 +246,7 @@ ListWrap = ["Co-voiturage",u"Hébergement","Matos"] | |||||
<div id="collapseAll" class="accordion-body collapse"> | <div id="collapseAll" class="accordion-body collapse"> | ||||
<div class="accordion-inner"> | <div class="accordion-inner"> | ||||
<table width="100%" class="table table-striped table-bordered table-hover LogistiqueTable"> | |||||
<table class="table table-striped table-bordered table-hover LogistiqueTable"> | |||||
<thead style="text-align:center"> | <thead style="text-align:center"> | ||||
<tr> | <tr> | ||||
<th>Section</th> | <th>Section</th> | ||||
@@ -1,5 +1,7 @@ | |||||
<%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | ||||
<div class="span10 offset1"> | |||||
<h3><a href="mailto:contact@jm2l.linux-azur.org">Sponsoriser l’événement</a></h3> | <h3><a href="mailto:contact@jm2l.linux-azur.org">Sponsoriser l’événement</a></h3> | ||||
<p> | <p> | ||||
Si vous voulez aider l’organisation par des moyens financiers ou | Si vous voulez aider l’organisation par des moyens financiers ou | ||||
@@ -73,7 +75,5 @@ DicForm ={ | |||||
</p> | </p> | ||||
Cliquez sur ce lien pour finir votre inscription : <a href="${request.route_path('bymail', hash=link)}">Mon lien</a> | Cliquez sur ce lien pour finir votre inscription : <a href="${request.route_path('bymail', hash=link)}">Mon lien</a> | ||||
% endif | % endif | ||||
<br> | |||||
<br> | |||||
<br> | |||||
<br> | |||||
</div> |
@@ -1,65 +1,77 @@ | |||||
<%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
<h1 class="page-title">Nous rejoindre</h1> | |||||
<div class="row"> | |||||
<h2 class="page-title">Nous rejoindre...</h2> | |||||
<div class="span10 offset1"> | |||||
<p>D’où que vous veniez, tout est mis en place pour que vous | |||||
puissiez vous rendre en toute simplicité sur les lieux de l’événement. | |||||
<br> N'hésitez pas à utiliser la section covoiturage de votre profil. Et | |||||
pas de panique ! Demain, ce sera pire... </p> | |||||
</div> | |||||
<div class="row-fluid"> | |||||
<div class="span4 offset1"> | |||||
<h4>Le staff</h4> | |||||
<dl> | |||||
<dt>Mail</dt> | |||||
<dd>» contact at jm2l.linux-azur.org</dd> | |||||
<dt>Téléphone</dt> | |||||
<dd>» +33 (0) 6 52 42 31 37</dd> | |||||
</dl> | |||||
</div> | |||||
<div class="span4 offset1"> | |||||
<h4>Le lieu</h4> | |||||
<address> | |||||
<strong>École </strong><strong>Polytech’Nice-Sophia </strong><br> | |||||
930, route des Colles (site des Templiers) <br> | |||||
06903 Sophia Antipolis (Biot) | |||||
</address> | |||||
<p>GPS Lat.: 43°36'57.72"N - Lon.: 7°4'17.03"E</p> | |||||
</div> | |||||
</div> | |||||
<div class="row-fluid"> | |||||
<div class="span6"> | |||||
<div class="tabbable" id="main_tab"> | <div class="tabbable" id="main_tab"> | ||||
<ul class="nav nav-tabs"> | <ul class="nav nav-tabs"> | ||||
<li class="active"><a href="#home" data-toggle="tab">C'est où ?</a></li> | |||||
<li><a href="#Trsp" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en bus" src="/img/tr_bus_.png"></a></li> | |||||
<li class="active"><a href="#Trsp" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en bus" src="/img/tr_bus_.png"></a></li> | |||||
<li><a href="#Voiture" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en voiture" src="/img/tr_voiture_.png"></a></li> | <li><a href="#Voiture" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en voiture" src="/img/tr_voiture_.png"></a></li> | ||||
<li><a href="#Train" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en train" src="/img/tr_train_.png"></a></li> | <li><a href="#Train" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en train" src="/img/tr_train_.png"></a></li> | ||||
<li><a href="#Avion" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en avion" src="/img/tr_avion_.png"></a></li> | |||||
<li><a href="#Contact" data-toggle="tab">Contact</a></li> | |||||
<li><a href="#Avion" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en avion" src="/img/tr_avion_.png"></a></li> | |||||
</ul> | </ul> | ||||
<div class="tab-content"> | <div class="tab-content"> | ||||
<div class="tab-pane fade active in" id="home"> | |||||
<h2>Lieu</h2> | |||||
<p><strong>École </strong><strong>Polytech’Nice-Sophia </strong><br> | |||||
930, route des Colles (site des Templiers) <br> | |||||
06903 Sophia Antipolis (Biot) | |||||
</p> | |||||
<p> GPS Lat.: 43°36'57.72"N - Lon.: 7°4'17.03"E</p> | |||||
<p>D’où que vous veniez, tout est mis en place pour que vous | |||||
puissiez vous rendre en toute simplicité sur les lieux de l’événement. | |||||
</p> | |||||
<p> | |||||
<img alt="" src="http://jm2l.linux-azur.org/sites/jm2l.linux-azur.org/files/jm2l_plan_acces_polytech.png" style="height:507px; width:665px"> | |||||
</p> | |||||
<p> | |||||
<a href="http://www.openstreetmap.org/?lat=43.61211&lon=7.07081&zoom=14&layers=M&mlat=43.61637&mlon=7.08520">Voir une carte plus grande</a> | |||||
</p> | |||||
</div> | |||||
<div class="tab-pane fade in" id="Trsp"> | |||||
<h3>Depuis Nice (durée : environ 30') :</h3> | |||||
<div class="tab-pane fade active in" id="Trsp"> | |||||
<h3>Bus</h3> | |||||
<h4>Depuis Nice (durée : environ 30') :</h4> | |||||
<ul> | <ul> | ||||
<li>Trajet sur la ligne Nice-Sophia Express : | <li>Trajet sur la ligne Nice-Sophia Express : | ||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/230.pdf">ligne 230</a> | |||||
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/cg06-transports_lignes_230.pdf">ligne 230</a> | |||||
</li> | </li> | ||||
<li>Trajet sur la ligne Cagnes-Villeneuve-Biot-Sophia : | <li>Trajet sur la ligne Cagnes-Villeneuve-Biot-Sophia : | ||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/231.pdf">ligne 231</a> | <a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/231.pdf">ligne 231</a> | ||||
</li> | </li> | ||||
<li>Trajet sur la ligne StLaurent-Cagnes-Sophia : | <li>Trajet sur la ligne StLaurent-Cagnes-Sophia : | ||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/232.pdf">ligne 232</a> | |||||
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/232.pdf">ligne 232</a> | |||||
</li> | </li> | ||||
<li>Trajet sur la ligne Vence-StPaul-Valbonne-Sophia : | <li>Trajet sur la ligne Vence-StPaul-Valbonne-Sophia : | ||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/233.pdf">ligne 233</a> | |||||
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/233.pdf">ligne 233</a> | |||||
<ul> | <ul> | ||||
<li>Arrivée : descendre à l’arrêt lesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li> | <li>Arrivée : descendre à l’arrêt lesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li> | ||||
</ul> | </ul> | ||||
</li> | </li> | ||||
</ul> | </ul> | ||||
<h3>Depuis Cannes (durée : environ 30') :</h3> | |||||
<h4>Depuis Cannes (durée : environ 30') :</h4> | |||||
<ul> | <ul> | ||||
<li>Trajet sur la ligne Cannes - Sophia Antipolis : | <li>Trajet sur la ligne Cannes - Sophia Antipolis : | ||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/630.pdf">ligne 630</a> | |||||
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/630.pdf">ligne 630</a> | |||||
<ul> | <ul> | ||||
<li>Arrivée : descendre à l’arrêt des LesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li> | <li>Arrivée : descendre à l’arrêt des LesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li> | ||||
</ul> | </ul> | ||||
</li> | </li> | ||||
</ul> | </ul> | ||||
<h3>Depuis Antibes (durée : entre 10 et 30') :</h3> | |||||
<h4>Depuis Antibes (durée : entre 10 et 30') :</h4> | |||||
<ul> | <ul> | ||||
<li>Trajet sur la ligne Express (uniquement pour le vendredi) | <li>Trajet sur la ligne Express (uniquement pour le vendredi) | ||||
<a href="http://www.envibus.fr/ligne_detail.asp?id=79&id_commune=1">ligne 100</a> | <a href="http://www.envibus.fr/ligne_detail.asp?id=79&id_commune=1">ligne 100</a> | ||||
@@ -120,22 +132,20 @@ | |||||
</div> | </div> | ||||
<div class="tab-pane fade in" id="Contact"> | <div class="tab-pane fade in" id="Contact"> | ||||
<h3>Staff JM2L :</h3> | |||||
<ul> | |||||
<li> | |||||
<strong>Arnaud Delcasse +33 (0) 6 70 73 94 12</strong> | |||||
</li> | |||||
<li> | |||||
<strong>Véronique Fritière +33 (0) 6 52 42 31 37</strong> | |||||
</li> | |||||
</ul> | |||||
<h3>Coordinateur Polytech :</h3> | |||||
<ul> | |||||
<li><strong>Romain +33 (0) 7 60 57 42 68</strong></li> | |||||
</ul> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | |||||
<p>Pas de panique ! Demain, ce sera pire... Enjoy ;-)</p> | |||||
</div> | |||||
<div class="span6"> | |||||
<p> | |||||
<img alt="" src="http://jm2l.linux-azur.org/sites/jm2l.linux-azur.org/files/jm2l_plan_acces_polytech.png" style="height:507px; width:665px"> | |||||
</p> | |||||
<p> | |||||
<a href="http://www.openstreetmap.org/?lat=43.61211&lon=7.07081&zoom=14&layers=M&mlat=43.61637&mlon=7.08520">Voir une carte plus grande</a> | |||||
</p> | |||||
</div> | |||||
</div> | |||||
<br> | |||||
@@ -4,7 +4,9 @@ DisplayYear = request.session.get('year',2015) | |||||
%> | %> | ||||
<h1 class="page-title">Dossier de presse ${DisplayYear}</h1> | <h1 class="page-title">Dossier de presse ${DisplayYear}</h1> | ||||
% if content and content.doss_presse: | % if content and content.doss_presse: | ||||
<div class="span10 offset1"> | |||||
${content.doss_presse | n} | ${content.doss_presse | n} | ||||
</div> | |||||
% endif | % endif | ||||
%if 0 and DisplayYear==2013: | %if 0 and DisplayYear==2013: | ||||
<div class="region region-content"> | <div class="region region-content"> | ||||
@@ -13,13 +13,21 @@ TabDisplay = [ | |||||
border: 1px solid #ccc; | border: 1px solid #ccc; | ||||
height: 65px; | height: 65px; | ||||
} | } | ||||
.SvgBody { | |||||
padding: 0px; | |||||
background-color: transparent; | |||||
} | |||||
.EvtBox { | |||||
font-size: 0.7em; | |||||
line-height: 1.2em; | |||||
padding:5px; | |||||
height:100%; | |||||
} | |||||
.Conference { | .Conference { | ||||
fill:#f9fde8; | |||||
stroke: #a2bc13; | |||||
fill: #f9fde8; | |||||
} | } | ||||
.Concert { | .Concert { | ||||
fill:#2EE; | |||||
stroke: #ccc; | |||||
fill: #2EE; | |||||
} | } | ||||
.Atelier { | .Atelier { | ||||
fill: #faebeb; | fill: #faebeb; | ||||
@@ -30,8 +38,7 @@ TabDisplay = [ | |||||
stroke: #ff9912; | stroke: #ff9912; | ||||
} | } | ||||
.Repas { | .Repas { | ||||
fill:#2EE; | |||||
stroke: #ccc; | |||||
fill: #2EE; | |||||
} | } | ||||
svg { | svg { | ||||
font: 10px sans-serif; | font: 10px sans-serif; | ||||
@@ -45,30 +52,28 @@ rect { | |||||
.axis path, | .axis path, | ||||
.axis line { | .axis line { | ||||
fill: none; | fill: none; | ||||
stroke: #000; | |||||
stroke: #222; | |||||
} | } | ||||
</style> | </style> | ||||
<h2>Le Programme ${DisplayYear}</h2> | <h2>Le Programme ${DisplayYear}</h2> | ||||
<div class="row"> | |||||
<div class="tabbable" id="main_tab"> | |||||
<ul class="nav nav-tabs" style="margin-bottom: 5px;"> | |||||
% for Num, (Day, IdDay) in enumerate(Days): | |||||
<li class="${['','active'][Num==0]}"><a href="#Day${Num}" id="Schedule_${Num}" data-toggle="tab">${Day}</a></li> | |||||
% endfor | |||||
</ul> | |||||
<div class="tab-content" style="padding:0"> | |||||
% for Num, (Day, IdDay) in enumerate(Days): | |||||
<div class="tab-pane fade ${['','active '][Num==0]}in" id="Day${Num}"> | |||||
## Container for SVG version of Programme | |||||
<div id="Schedule_SVG_${IdDay}"> | |||||
</div> | |||||
<div class="tabbable" id="main_tab"> | |||||
<ul class="nav nav-tabs" style="margin-bottom: 5px;"> | |||||
% for Num, (Day, IdDay) in enumerate(Days): | |||||
<li class="${['','active'][Num==0]}"><a href="#Day${Num}" id="Schedule_${Num}" data-toggle="tab">${Day}</a></li> | |||||
% endfor | |||||
</ul> | |||||
<div class="tab-content" style="padding:0"> | |||||
% for Num, (Day, IdDay) in enumerate(Days): | |||||
<div class="tab-pane fade ${['','active '][Num==0]}in" id="Day${Num}"> | |||||
## Container for SVG version of Programme | |||||
<div id="Schedule_SVG_${IdDay}"> | |||||
</div> | </div> | ||||
% endfor | |||||
</div> | </div> | ||||
% endfor | |||||
</div> | </div> | ||||
</div> | |||||
</div> | |||||
<div id="DivProg" style="border: 1px solid black;"></div> | <div id="DivProg" style="border: 1px solid black;"></div> | ||||
@@ -5,20 +5,14 @@ | |||||
<script src="/js/jm2l.js"></script> | <script src="/js/jm2l.js"></script> | ||||
<script src="/vendor/ckeditor/ckeditor.js"></script> | <script src="/vendor/ckeditor/ckeditor.js"></script> | ||||
<script src="/vendor/select2/js/select2.js"></script> | <script src="/vendor/select2/js/select2.js"></script> | ||||
<script src="//cdn.jsdelivr.net/webshim/1.15.7/polyfiller.js"></script> | |||||
<script src="/vendor/datepicker/bootstrap-datepicker.js"></script> | |||||
<script type="text/javascript"> | <script type="text/javascript"> | ||||
webshim.setOptions('forms-ext', { | |||||
replaceUI: 'auto', | |||||
types: 'date', | |||||
date: { | |||||
startView: 2, | |||||
classes: 'hide-spinbtns', | |||||
} | |||||
}); | |||||
//start polyfilling | |||||
webshim.polyfill('forms-ext'); | |||||
var checkout = $('#due_date').datepicker({ | |||||
format: "dd/mm/yyyy" | |||||
}) | |||||
.on('changeDate', function(ev) { | |||||
checkout.hide(); | |||||
}).data('datepicker'); | |||||
</script> | </script> | ||||
</%def> | </%def> | ||||
<%def name="cssAddOn()"> | <%def name="cssAddOn()"> | ||||
@@ -26,10 +20,12 @@ | |||||
<link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui.css"> | <link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui.css"> | ||||
<link rel="stylesheet" href="/css/jm2l.css" /> | <link rel="stylesheet" href="/css/jm2l.css" /> | ||||
<link rel="stylesheet" href="/vendor/select2/css/select2.css" type="text/css" media="screen" /> | <link rel="stylesheet" href="/vendor/select2/css/select2.css" type="text/css" media="screen" /> | ||||
<link rel="stylesheet" href="/vendor/datepicker/datepicker.css" type="text/css" media="screen" /> | |||||
<!-- CSS adjustments for browsers with JavaScript disabled --> | <!-- CSS adjustments for browsers with JavaScript disabled --> | ||||
<noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | ||||
<noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | ||||
</%def> | </%def> | ||||
<p>Green checkmarks indicate that class is visible in your current viewport.</p> | |||||
<a style="float:right;" href="${request.route_path('list_task', _anchor=area)}">Retour à la liste</a> | <a style="float:right;" href="${request.route_path('list_task', _anchor=area)}">Retour à la liste</a> | ||||
% if 'uid' in form._fields.keys(): | % if 'uid' in form._fields.keys(): | ||||
<h3>Editer une tâche</h3> | <h3>Editer une tâche</h3> | ||||
@@ -41,7 +37,7 @@ DicForm = { | |||||
'name': {'PlaceHolder':u"Nom de la tâche", "FieldStyle":"width:90%;" }, | 'name': {'PlaceHolder':u"Nom de la tâche", "FieldStyle":"width:90%;" }, | ||||
'area_uid': {"FieldStyle":"width:16em;", 'ContainerStyle':"float:left;" }, | 'area_uid': {"FieldStyle":"width:16em;", 'ContainerStyle':"float:left;" }, | ||||
'closed_by': {"FieldStyle":"width:16em;", 'ContainerStyle':"float:left;" }, | 'closed_by': {"FieldStyle":"width:16em;", 'ContainerStyle':"float:left;" }, | ||||
'due_date': {'PlaceHolder':u"27/11/2015", "FieldStyle":"width:8em;"}, | |||||
'due_date': {'PlaceHolder':u"27/11/2015", "FieldStyle":"width:8em;"}, | |||||
'description': {'PlaceHolder':u"Description", "FieldStyle":"width:95%;min-height:150px;", "ckeditor":"1" }, | 'description': {'PlaceHolder':u"Description", "FieldStyle":"width:95%;min-height:150px;", "ckeditor":"1" }, | ||||
} | } | ||||
%> | %> | ||||
@@ -41,8 +41,8 @@ TabJs = {'select':[], 'desc':[]} | |||||
FieldStyle = DicFormat[Field.name].get("FieldStyle") | FieldStyle = DicFormat[Field.name].get("FieldStyle") | ||||
Class = [False,"ckeditor"][ "ckeditor" in DicFormat[Field.name] ] | Class = [False,"ckeditor"][ "ckeditor" in DicFormat[Field.name] ] | ||||
%> | %> | ||||
% if Field.type == "DateField": | |||||
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_=Class, type = "date")} | |||||
% if Field.type == "date": | |||||
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_="datepicker" )} | |||||
% else: | % else: | ||||
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_=Class)} | ${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_=Class)} | ||||
% endif | % endif | ||||
@@ -253,7 +253,7 @@ TabJs = {'select':[], 'desc':[]} | |||||
## Wrapper pour les intervention utilisateur | ## Wrapper pour les intervention utilisateur | ||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
<%def name="show_Interventions(ListEvent, HeadTitle=None, NotFoundTitle=None)"> \ | <%def name="show_Interventions(ListEvent, HeadTitle=None, NotFoundTitle=None)"> \ | ||||
<table width="100%" class="table table-striped table-bordered table-hover"> | |||||
<table class="table table-striped table-bordered table-hover"> | |||||
<tr> | <tr> | ||||
<th style="width:6em;text-align:center;">Date</th> | <th style="width:6em;text-align:center;">Date</th> | ||||
% if HeadTitle: | % if HeadTitle: | ||||
@@ -521,3 +521,52 @@ TabJs = {'select':[], 'desc':[]} | |||||
${Place.description | n} | ${Place.description | n} | ||||
% endif | % endif | ||||
</%def> \ | </%def> \ | ||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |||||
## Wrapper pour les sponsors | |||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |||||
<%def name="participants(Year)"> \ | |||||
<table class="ShowEntities table"> | |||||
<thead> | |||||
<th colspan="3">Nos sponsors ${Year}</th> | |||||
</thead> | |||||
<tr> | |||||
<% num = -1 %> | |||||
% for entity in request.sponsors(Year): | |||||
% for thumb in entity.ThumbLinks: | |||||
<% num+=1 %> | |||||
% if (num%3==0): | |||||
</tr><tr> | |||||
% endif | |||||
<td> | |||||
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}"> | |||||
<img src="${thumb}" alt="${entity.name}" /> | |||||
</a> | |||||
</td> | |||||
% endfor | |||||
% endfor | |||||
</tr> | |||||
</table> | |||||
<br /> | |||||
<table class="ShowEntities table"> | |||||
<thead> | |||||
<th colspan="3">Nos exposants ${Year}</th> | |||||
</thead> | |||||
<tr> | |||||
<% num = -1 %> | |||||
% for entity in request.exposants(Year): | |||||
% for thumb in entity.ThumbLinks: | |||||
<% num+=1 %> | |||||
% if (num%3==0): | |||||
</tr><tr> | |||||
% endif | |||||
<td> | |||||
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}"> | |||||
<img src="${thumb}" alt="${entity.name}" /> | |||||
</a> | |||||
</td> | |||||
% endfor | |||||
% endfor | |||||
</tr> | |||||
</table> | |||||
</%def> \ |
@@ -56,7 +56,7 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="row"> | |||||
<div class="row-fluid"> | |||||
<div class="tabbable" id="main_tab"> | <div class="tabbable" id="main_tab"> | ||||
<ul class="nav nav-tabs" style="margin-bottom: 5px;"> | <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | ||||
<li class="active"><a href="#Profil" id="Map_Profil" data-toggle="tab">Mon Profil</a></li> | <li class="active"><a href="#Profil" id="Map_Profil" data-toggle="tab">Mon Profil</a></li> | ||||
@@ -32,10 +32,44 @@ DisplayYear = request.session.get('year', 2015) | |||||
${helpers.uploader_js()} | ${helpers.uploader_js()} | ||||
<div id="wrap"> | <div id="wrap"> | ||||
<div id="top" style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;"> | |||||
<div class="align-center"> | |||||
<div><img src="${"/img/%s/logo.png" % DisplayYear}" height="215" alt="JM2L 2015"/></div> | |||||
<div id="top"> | |||||
% if DisplayYear!=2015: | |||||
## style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;"> | |||||
<div class="align-center"> | |||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent"> | |||||
</div> | |||||
</div> | |||||
% else: | |||||
<!-- Carousel | |||||
================================================== --> | |||||
<div id="TitleCarousel" class="carousel slide" data-ride="carousel"> | |||||
<!-- Indicators --> | |||||
<ol class="carousel-indicators"> | |||||
<li data-target="#TitleCarousel" data-slide-to="0" class="active"></li> | |||||
<li data-target="#TitleCarousel" data-slide-to="1"></li> | |||||
<li data-target="#TitleCarousel" data-slide-to="2"></li> | |||||
</ol> | |||||
<div class="carousel-inner" role="listbox"> | |||||
<div class="item active"> | |||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent"></div> | |||||
</div> | |||||
<div class="item"> | |||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % 2013} ) no-repeat scroll center center transparent"></div> | |||||
</div> | |||||
<div class="item"> | |||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % 2012} ) no-repeat scroll center center transparent"></div> | |||||
</div> | |||||
</div> | </div> | ||||
<a class="left Tcarousel-control" href="#TitleCarousel" role="button" data-slide="prev"> | |||||
<img src="/img/chev-left.png"> | |||||
</a> | |||||
<a class="right Tcarousel-control" href="#TitleCarousel" role="button" data-slide="next"> | |||||
<img src="/img/chev-right.png"> | |||||
</a> | |||||
</div><!-- /.carousel --> | |||||
% endif | |||||
</div> | </div> | ||||
<div id="middle"> | <div id="middle"> | ||||
<div class="navbar"> | <div class="navbar"> | ||||
@@ -73,6 +107,11 @@ ${helpers.uploader_js()} | |||||
<li><a href="/participer-l-evenement#inscription">Je m'inscris</a></li> | <li><a href="/participer-l-evenement#inscription">Je m'inscris</a></li> | ||||
<li><a href="/sign/login">Je m'identifie</a></li> | <li><a href="/sign/login">Je m'identifie</a></li> | ||||
% endif | % endif | ||||
<li>Mode | |||||
<span class="visible-phone"> ✔ Phone</span> | |||||
<span class="visible-tablet"> ✔ Tablet</span> | |||||
<span class="visible-desktop"> ✔ Desktop</span> | |||||
</li> | |||||
</ul> | </ul> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -96,19 +135,38 @@ ${helpers.uploader_js()} | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div id="bottom"> | <div id="bottom"> | ||||
<div class="bottom"> | |||||
${next.body()} | |||||
</div> | |||||
<div class="container-fluid"> | |||||
<div class="row-fluid"> | |||||
<div class="span9"> | |||||
<!--Body content--> | |||||
${next.body()} | |||||
</div> | |||||
<div class="span3"> | |||||
<!--Sidebar content--> | |||||
${helpers.participants(DisplayYear)} | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
## <br><br><br> | |||||
## <div id="footer"> | |||||
## <div class="footer">CopyFriendly ~ JM2L 2005-2015 ~ +33 (0) 6 52 42 31 37 | |||||
## <br>Ni les représentant légaux de l'équipe de Linux-Azur, | |||||
## ni l'équipe de coordination des JM2L ne sont résponsable des | |||||
## informations publiés par les intervenants, dans le doute merci de nous contacter. | |||||
## </div> | |||||
<footer class="footer"> | |||||
<div class="container"> | |||||
<h4>JM2L 2005-2015</h4> | |||||
<p> | |||||
Concocté par <a href="http://www.linux-azur.org/">Linux Azur</a> ~ | |||||
<a href="http://creativecommons.org/licenses/by-sa/4.0/">CopyFriendly</a> ~ | |||||
</p> | |||||
<p> | |||||
+33 (0) 6 52 42 31 37 ~ contact at jm2l.linux-azur.org | |||||
</p> | |||||
<p> | |||||
Conception et construction en <a href="http://git.linux-azur.org/jm2l/">DIY</a> ~ | |||||
Hébergé par <a href="http://www.heberg-24.com/"> Heberg24 </a> | |||||
</p> | |||||
</div> | |||||
</footer> | |||||
<script src="/vendor/jquery.min.js"></script> | <script src="/vendor/jquery.min.js"></script> | ||||
<script src="/vendor/bootstrap.min.js"></script> | <script src="/vendor/bootstrap.min.js"></script> | ||||
<script src="/vendor/fileupload/js/jquery-uploader.min.js"></script> | <script src="/vendor/fileupload/js/jquery-uploader.min.js"></script> | ||||
@@ -16,7 +16,7 @@ | |||||
% for Num, Entity_Type in enumerate(entities.keys()): | % for Num, Entity_Type in enumerate(entities.keys()): | ||||
<div class="tab-pane fade ${["","active "][Num==0]} in" id="${Entity_Type}"> | <div class="tab-pane fade ${["","active "][Num==0]} in" id="${Entity_Type}"> | ||||
<table width="100%" class="table table-striped table-bordered table-hover"> | |||||
<table class="table table-striped table-bordered table-hover"> | |||||
<thead> | <thead> | ||||
<tr> | <tr> | ||||
<th style="width:7em;text-align:center;">Type</th> | <th style="width:7em;text-align:center;">Type</th> | ||||
@@ -1,15 +1,36 @@ | |||||
## -*- coding: utf-8 -*- | ## -*- coding: utf-8 -*- | ||||
<%def name="Bienvenue(request, User)"> | <%def name="Bienvenue(request, User)"> | ||||
<H4>JM2L</H4> | <H4>JM2L</H4> | ||||
<p> | |||||
Bonjour ${User.prenom}.<br> | |||||
Vous venez de valider votre inscription sur le site des JM2L.<br> | |||||
Voici <a href="${request.route_url('bymail', hash=User.my_hash)}">votre lien</a> pour vous connecter.<br> | |||||
Bonjour ${User.prenom},<br> | |||||
<br> | |||||
Vous venez de vous inscrire sur le site des JM2L et c'est une bonne idée :).<br> | |||||
<br> | |||||
Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant :<br> | |||||
<a href="${request.route_url('bymail', hash=User.my_hash)}">Votre lien !</a> | |||||
<br> | |||||
À partir de là vous avez la possibilité de : | |||||
<ul> | |||||
<li>inscrire votre stand pour la journée du 28 novembre</li> | |||||
<li>inscrire une conférence</li> | |||||
<li>inscrire un atelier</li> | |||||
<li>chercher/proposer du covoiturage</li> | |||||
<li>chercher/proposer un hébergement</li> | |||||
<li>vous faire rembourser vos frais</li> | |||||
<li>chercher proposer du matériel (câbles, etc)</li> | |||||
</ul> | |||||
Toute l'équipe vous souhaite une agréable visite !<br> | |||||
<p> | |||||
Pour plus d'information vous pouvez vous connectez au site des JM2L : http://jm2l.linux-azur.org ou | |||||
nous envoyer un mail à «contact at jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez | |||||
toujours nous téléphoner au +33 6 52 42 31 37. | |||||
</p> | |||||
<p> | |||||
Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêter le libre et partager | |||||
de la connaissance, de la bonne humeur et du soleil :) | |||||
</p> | </p> | ||||
<br> | |||||
L'équipe des <b>JM2L</b> | |||||
<br> | |||||
</%def> \ | </%def> \ | ||||
% if action=='Welcome': | % if action=='Welcome': | ||||
${self.Bienvenue(request, User)} | ${self.Bienvenue(request, User)} | ||||
@@ -1,14 +1,29 @@ | |||||
## -*- coding: utf-8 -*- | ## -*- coding: utf-8 -*- | ||||
<%def name="Bienvenue(request, User)"> | <%def name="Bienvenue(request, User)"> | ||||
Bonjour ${User.prenom}. | |||||
Bonjour ${User.prenom}, | |||||
Vous venez de valider votre inscription sur le site des JM2L. | |||||
Vous venez de vous inscrire sur le site des JM2L et c'est une bonne idée :) | |||||
Voici votre le lien pour vous connecter à votre profil: | |||||
Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant : | |||||
${request.route_url('bymail', hash=User.my_hash)} | ${request.route_url('bymail', hash=User.my_hash)} | ||||
Toute l'équipe vous souhaite une très agréable visite ! | |||||
À partir de là vous avez la possibilité de : | |||||
- inscrire votre stand pour la journée du 28 novembre | |||||
- inscrire une conférence | |||||
- inscrire un atelier | |||||
- chercher/proposer du covoiturage | |||||
- chercher/proposer un hébergement | |||||
- vous faire rembourser vos frais | |||||
- chercher proposer du matériel (câbles, etc) | |||||
Pour plus d'information vous pouvez vous connectez au site des JM2L : http://jm2l.linux-azur.org ou nous envoyer un mail à « contact at jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez toujours nous téléphoner au +33 6 52 42 31 37. | |||||
Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêter le libre et partager de la connaissance, de la bonne humeur et du soleil :) | |||||
L'équipe des JM2L | |||||
</%def> \ | </%def> \ | ||||
% if action=='Welcome': | % if action=='Welcome': | ||||
${self.Bienvenue(request, User)} | ${self.Bienvenue(request, User)} | ||||
@@ -211,6 +211,30 @@ class MediaUpload(MediaPath): | |||||
return self.thumbnailurl( os.path.basename(TargetFileName+".jpg") ) | return self.thumbnailurl( os.path.basename(TargetFileName+".jpg") ) | ||||
return self.ExtMimeIcon('application/pdf') | return self.ExtMimeIcon('application/pdf') | ||||
def svgthumbnail(self, filename): | |||||
TargetFileName = self.thumbnailpath(filename) | |||||
Command = ["convert","./%s[0]" % self.mediapath(filename),"./%s_.jpg" % TargetFileName] | |||||
Result = subprocess.call(Command) | |||||
if Result==0: | |||||
image = Image.open( TargetFileName+"_.jpg" ) | |||||
pdf_indicator = Image.open( "jm2l/static/img/svg-icon.png" ) | |||||
image.thumbnail((THUMBNAIL_SIZE, THUMBNAIL_SIZE), Image.ANTIALIAS) | |||||
timage = Image.new('RGBA', (THUMBNAIL_SIZE, THUMBNAIL_SIZE), (255, 255, 255, 0)) | |||||
# Add thumbnail | |||||
timage.paste( | |||||
image, | |||||
((THUMBNAIL_SIZE - image.size[0]) / 2, (THUMBNAIL_SIZE - image.size[1]) / 2)) | |||||
# Stamp with PDF file type | |||||
timage.paste( | |||||
pdf_indicator, | |||||
(timage.size[0]-30, timage.size[1]-30), | |||||
pdf_indicator, | |||||
) | |||||
timage.convert('RGB').save( TargetFileName+".jpg", 'JPEG') | |||||
os.unlink(TargetFileName+"_.jpg") | |||||
return self.thumbnailurl( os.path.basename(TargetFileName+".jpg") ) | |||||
return self.ExtMimeIcon('image/svg+xml') | |||||
def docthumbnail(self, filename): | def docthumbnail(self, filename): | ||||
TargetFileName = self.thumbnailpath(filename) | TargetFileName = self.thumbnailpath(filename) | ||||
# unoconv need a libre office server to be up | # unoconv need a libre office server to be up | ||||
@@ -349,6 +373,8 @@ class MediaUpload(MediaPath): | |||||
result['thumbnailUrl'] = self.createthumbnail(result['name']) | result['thumbnailUrl'] = self.createthumbnail(result['name']) | ||||
elif result['type']=='application/pdf': | elif result['type']=='application/pdf': | ||||
result['thumbnailUrl'] = self.pdfthumbnail(result['name']) | result['thumbnailUrl'] = self.pdfthumbnail(result['name']) | ||||
elif result['type']=='image/svg+xml': | |||||
result['thumbnailUrl'] = self.svgthumbnail(result['name']) | |||||
elif result['type'].startswith('application/vnd'): | elif result['type'].startswith('application/vnd'): | ||||
result['thumbnailUrl'] = self.docthumbnail(result['name']) | result['thumbnailUrl'] = self.docthumbnail(result['name']) | ||||
else: | else: | ||||