Add the poi detail and poi list table
[infos-pratiques:etalage.git] / poiscasse / templates / poi-lib.mako
1 ## -*- coding: utf-8 -*-
2
3
4 ## PoisCasse -- Open Data POIs portal
5 ## By: Emmanuel Raviart <eraviart@easter-eggs.com>
6 ##     Romain Soufflet <rsoufflet@easter-eggs.com>
7 ##
8 ## Copyright (C) 2011 Easter-eggs
9 ## http://gitorious.org/infos-pratiques/poiscasse
10 ##
11 ## This file is part of PoisCasse.
12 ##
13 ## PoisCasse is free software; you can redistribute it and/or modify
14 ## it under the terms of the GNU Affero General Public License as
15 ## published by the Free Software Foundation, either version 3 of the
16 ## License, or (at your option) any later version.
17 ##
18 ## PoisCasse is distributed in the hope that it will be useful,
19 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 ## GNU Affero General Public License for more details.
22 ##
23 ## You should have received a copy of the GNU Affero General Public License
24 ## along with this program.  If not, see <http://www.gnu.org/licenses/>.
25
26
27 <%!
28 import markupsafe
29 import uuid
30
31 from territoria2 import territories
32 %>\
33
34
35 <%def name="field(id, value, label, label_plural = None)" filter="trim">
36 <%
37     if value is None:
38         return ''
39 %>\
40 <div class="field">
41     % if label_plural is not None and isinstance(value, (list, set, tuple)) and len(value) > 1:
42     <span class="field-label">${label_plural}¬†:</span>
43     % else:
44     <span class="field-label">${label}¬†:</span>
45     % endif
46     <%self:field_value id="${id}" value="${value}"/>
47 </div>
48 </%def>
49
50
51 <%def name="field_value(id, value)" filter="trim">
52     % if id == 'activities':
53 <%
54     activities_code = value
55     activities_title = [
56         title
57         for slug, title in sorted(
58             (activity.slug, activity.title)
59             for activity in Activity.find(dict(code = {'$in': list(value)}))
60             )
61         ]
62 %>\
63     <span class="field-value">${u', '.join(activities_title)}</span>
64     % elif id == 'adr':
65     <div class="field-value">
66         <div class="adr">
67         % if 'street-address' in value:
68             % for line in value['street-address'][0].split('\n'):
69             ${line}<br />
70             % endfor
71         % endif
72             ${(value.get('postal-distribution') or [''])[0]}
73         </div>
74     </div>
75     % elif id == 'email':
76     <span class="field-value"><a href="mailto:${value}">${value}</a></span>
77     % elif id == 'emails':
78         % if len(value) == 1:
79 <%self:field_value id="email" value="${value[0]}"/>
80         % else:
81     <ul class="field-value">
82             % for email in value:
83         <li>${email}</li>
84             % endfor
85     </ul>
86         % endif
87     % elif id == 'fax':
88     <span class="field-value">${value}</span>
89     % elif id == 'faxes':
90         % if len(value) == 1:
91 <%self:field_value id="fax" value="${value[0]}"/>
92         % else:
93     <ul class="field-value">
94             % for fax in value:
95         <li>${fax}</li>
96             % endfor
97     </ul>
98         % endif
99     % elif id == 'feed':
100     <div class="field-value">
101 <%
102         import feedparser
103         d = feedparser.parse(value)
104 %>\
105         % if d is None or 'status' not in d \
106             or not d.version and d.status != 304 and d.status != 401 \
107             or d.status >= 400:
108         <em class="error">Erreur dans le flux d'actualit√© <a href="${value}" rel="external">${value}</a></em>
109         % else:
110         <strong>${d.feed.title}</strong>
111         <a href="${value}" rel="external"><img alt="" src="http://cdn.comarquage.fr/images/misc/feed.png" /></a>
112         % endif
113         <ul>
114         % for entry in d.entries[:10]:
115             <li class="feed-entry">${entry.title | n}
116             % for content in entry.content:
117                 <div>${content.value | n}</div>
118             % endfor
119             </li>
120         % endfor
121         % if len(d.entries) > 10:
122             <li>...</li>
123         % endif
124         </ul>
125     </div>
126     % elif id == 'geo':
127         <div class="field-value">
128 <%
129         map_id = u'map-{0}'.format(uuid.uuid4())
130 %>\
131             <div class="single-marker-map" id="${map_id}" style="height: 500px;"></div>
132             <script type="text/javascript">
133                 singleMarkerMap("${map_id}", ${value[0]}, ${value[1]});
134             </script>
135             <div class="bigger-map-link">
136                 Voir sur une carte plus grande avec
137                 <a href="${u'http://www.openstreetmap.org/?mlat={0}&mlon={1}&zoom=15&layers=M'\
138 .format(value[0], value[1])}" rel="external">OpenStreetMap</a>
139                 ou
140                 <a href="${u'http://maps.google.com/maps?q={0},{1}'.format(value[0], value[1])}" \
141 rel="external">Google Maps</a>
142             </div>
143         </div>
144     % elif id == 'image':
145         <img class="field-value" alt="" src="${value}" />
146     % elif id == 'link':
147 <%
148         target = ramdb.ram_pois_by_id.get(value)
149 %>\
150         % if target is None:
151     <em class="field-value">Lien manquant</em>
152         % else:
153     <a class="field-value" href="/poi/${target._id}">${target.name}</a>
154         % endif
155     % elif id == 'links':
156         % if len(value) == 1:
157 <%self:field_value id="link" value="${value[0]}"/>
158         % else:
159     <ul class="field-value">
160             % for target in value:
161 <%
162                 target = ramdb.ram_pois_by_id.get(value)
163                 if target is None:
164                     continue
165 %>\
166         <li><a href="/poi/${target._id}">${target.name}</a></li>
167             % endfor
168     </ul>
169         % endif
170     % elif id == 'org':
171     <span class="field-value">${value}</span>
172     % elif id == 'organism-type':
173     <span class="field-value">${value.title}</span>
174     % elif id == 'tags':
175 <%
176     tags_code = value
177     tags_title = [
178         title
179         for slug, title in sorted(
180             (tag.slug, tag.title)
181             for tag in Tag.find(dict(code = {'$in': list(value)}))
182             )
183         ]
184 %>\
185     <span class="field-value">${u', '.join(tags_title)}</span>
186     % elif id == 'tel':
187     <span class="field-value">${value}</span>
188     % elif id == 'tels':
189         % if len(value) == 1:
190 <%self:field_value id="tel" value="${value[0]}"/>
191         % else:
192     <ul class="field-value">
193             % for tel in value:
194         <li>${tel}</li>
195             % endfor
196     </ul>
197         % endif
198     % elif id == 'territories':
199 <%
200         territories_title = [
201             title
202             for slug, title in sorted(
203                 ## FIXME : Ne pas utiliser ncc
204                 (territory.ncc, territory.name)
205                 for territory in (
206                     territories.Territory.find_one(dict(code = territory_kind_code['code'], kind = territory_kind_code['kind']))
207                     for territory_kind_code in value
208                     )
209                 if territory is not None
210                 )
211             ]
212 %>\
213     <span class="field-value">${u', '.join(territories_title)}</span>
214     % elif id == 'text-block':
215     <div class="field-value">${markupsafe.Markup('<br />').join(value.split('\n'))}</div>
216     % elif id == 'text-rich':
217     <div class="field-value">${value | n}</div>
218     % elif id == 'url':
219     <a class="field-value" href="${value}" rel="external">${value}</a>
220     % elif id == 'urls':
221         % if len(value) == 1:
222 <%self:field_value id="url" value="${value[0]}"/>
223         % else:
224     <ul class="field-value">
225             % for url in value:
226         <li><a href="${url}" rel="external">${url}</a></li>
227             % endfor
228     </ul>
229         % endif
230     % else:
231     <span class="field-value">${value}</span>
232     % endif
233 </%def>
234