Many changes for templates
@@ -90,6 +90,7 @@ def main(global_config, **settings):
|
||||
# HTML Routes - Logged
|
||||
#config.add_route('profil', 'MesJM2L')
|
||||
config.add_route('jm2l', '/MesJM2L')
|
||||
config.add_route('sejour', '/MonSejour')
|
||||
config.add_route('modal', '/{year:\d+}/modal/{modtype:\w+}/{id:(\d+)}')
|
||||
|
||||
# Handle exchanges
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
# -*- coding: utf8 -*-
|
||||
from pyramid.view import view_config
|
||||
from pyramid.security import remember, forget
|
||||
from pyramid.httpexceptions import HTTPFound
|
||||
@@ -9,6 +9,10 @@ import datetime
|
||||
def login(request):
|
||||
return {}
|
||||
|
||||
@view_config(route_name='auth', match_param="action=forgot", renderer="jm2l:templates/login.mako")
|
||||
def forgot(request):
|
||||
return {'forgot':True}
|
||||
|
||||
@view_config(route_name='bymail', renderer="string")
|
||||
def bymail(request):
|
||||
myhash = request.matchdict.get('hash', "")
|
||||
@@ -30,7 +34,7 @@ def bymail(request):
|
||||
def sign_in_out(request):
|
||||
username = request.POST.get('username')
|
||||
if username:
|
||||
user = User.by_name(username)
|
||||
user = User.by_slug(username)
|
||||
if user and user.verify_password(request.POST.get('password')):
|
||||
user.last_logged=datetime.datetime.now()
|
||||
DBSession.merge(user)
|
||||
@@ -41,6 +45,10 @@ def sign_in_out(request):
|
||||
headers = forget(request)
|
||||
else:
|
||||
headers = forget(request)
|
||||
if request.matchdict.get('action')=='in':
|
||||
request.session.flash(('error',u'Vous avez entré un mauvais couple identifiant/password !'))
|
||||
return HTTPFound(location="/sign/login",
|
||||
headers=headers)
|
||||
return HTTPFound(location=request.route_url('home'),
|
||||
headers=headers)
|
||||
|
||||
|
||||
@@ -94,25 +94,7 @@ class AddIntervenant(MyBaseForm):
|
||||
csrf = False
|
||||
|
||||
event_uid = HiddenField()
|
||||
nom = TextField(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)],
|
||||
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(),
|
||||
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, "+
|
||||
u"pensez d'abord à lui demander de confirmer le mail qu'il a utilisé lors de "+
|
||||
u"son inscription sur le site.")
|
||||
add = SubmitField('Ajouter des intervenants')
|
||||
intervenant = SelectField(u'Intervenant', coerce=int )
|
||||
|
||||
class ConfCreateForm(MyBaseForm):
|
||||
|
||||
|
||||
@@ -123,6 +123,14 @@ a {
|
||||
right: 15px;
|
||||
}
|
||||
|
||||
|
||||
.carousel-vote {
|
||||
padding: 15px 50px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.LogistiqueTable th, .LogistiqueTable td
|
||||
{
|
||||
text-align:center;
|
||||
|
||||
@@ -40,7 +40,7 @@ body h6{font-family:"NeutonRegular","Lucida Grande",Lucida,Verdana,sans-serif;fo
|
||||
.wrapper{width:100%}
|
||||
#top,#top-small,#bottom{width:100%;}
|
||||
#top{color:#000000;height:215px;}
|
||||
#bottom{color:#222;background-color:#ffffff;}
|
||||
#bottom{color:#222;}
|
||||
.top,.top-small,.middle,.bottom{width:750px;margin-right:auto;margin-left:auto;}
|
||||
.top{padding-top:40px;}
|
||||
.top-small{padding-top:10px;}
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 331 KiB |
|
After Width: | Height: | Size: 312 KiB |
|
After Width: | Height: | Size: 799 B |
|
After Width: | Height: | Size: 790 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 514 B |
@@ -24,5 +24,9 @@
|
||||
<stop offset="0%" stop-color="#EEE" stop-opacity="0"/>
|
||||
<stop offset="15%" stop-color="#fff4e5" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="BoxGradient-Concert" spreadMethod="pad" x1="100%" y1="0%" x2="50%" y2="100%">
|
||||
<stop offset="0%" stop-color="#EEE" stop-opacity="0"/>
|
||||
<stop offset="15%" stop-color="#2EE" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
@@ -50,7 +50,8 @@ d3.json("le-prog-json",
|
||||
.attr("id", TypeArea+"-"+Keys[k])
|
||||
.attr("area", TypeArea)
|
||||
.style("float", "left")
|
||||
.style("margin-left", "5px")
|
||||
.style("margin-left", "20px")
|
||||
.style("margin-right", "3px")
|
||||
.property("checked",true);
|
||||
|
||||
d3.select("#Schedule_SVG_"+Keys[k])
|
||||
@@ -64,10 +65,10 @@ d3.json("le-prog-json",
|
||||
svg = d3.select("#Schedule_SVG_"+Keys[k])
|
||||
.append("svg")
|
||||
.attr("id", "TimeTable-"+Keys[k])
|
||||
.attr("width", width + margin.right + margin.left)
|
||||
.attr("height", height + margin.top + margin.bottom)
|
||||
//.attr("viewBox", "0 0 " + width + " " + height )
|
||||
//.attr("preserveAspectRatio", "xMidYMid");
|
||||
.attr("width", "100%") //width + margin.right + margin.left)
|
||||
//.attr("height", height + margin.top + margin.bottom)
|
||||
.attr("viewBox", "0 0 " + (width + margin.right + margin.left) + " " + (height + margin.top + margin.bottom) )
|
||||
.attr("preserveAspectRatio", "xMidYMid meet");
|
||||
|
||||
svg.append("g")
|
||||
.attr("class", "xAxis axis");
|
||||
@@ -78,7 +79,7 @@ d3.json("le-prog-json",
|
||||
var chart = svg.append("g")
|
||||
.attr("class", "timetable");
|
||||
|
||||
HandleEvents(Keys[k])
|
||||
HandleEvents(Keys[k]);
|
||||
displayit(json["all"][Keys[k]], Salles[Keys[k]], Keys[k]);
|
||||
}
|
||||
});
|
||||
@@ -99,7 +100,7 @@ function HandleEvents(Ctrl) {
|
||||
ArrayChoice.push(v.attributes['area'].value)
|
||||
}
|
||||
)
|
||||
area_select = Array()
|
||||
area_select = Array();
|
||||
selection = Tasks[Ctrl].filter(function(v) {
|
||||
return ArrayChoice.indexOf(v.status)>=0;
|
||||
});
|
||||
@@ -160,9 +161,10 @@ function displayit(Set_of_Task, Set_of_Area, key) {
|
||||
|
||||
content.enter()
|
||||
.insert("foreignObject",":first-child")
|
||||
.append("xhtml:div")
|
||||
.append("xhtml:body")
|
||||
.attr("class", "SvgBody")
|
||||
.html(function(d) {
|
||||
return '<div style="padding:5px;height:100%"><a href="/event/'+ d.uid +
|
||||
return '<div class="EvtBox '+ taskStatus[d.status] +'"><a href="/event/'+ d.uid +
|
||||
'">' + d.desc + '</a></div>'
|
||||
})
|
||||
.transition()
|
||||
|
||||
@@ -0,0 +1,474 @@
|
||||
/* =========================================================
|
||||
* bootstrap-datepicker.js
|
||||
* http://www.eyecon.ro/bootstrap-datepicker
|
||||
* =========================================================
|
||||
* Copyright 2012 Stefan Petre
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================= */
|
||||
|
||||
!function( $ ) {
|
||||
|
||||
// Picker object
|
||||
|
||||
var Datepicker = function(element, options){
|
||||
this.element = $(element);
|
||||
this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
|
||||
this.picker = $(DPGlobal.template)
|
||||
.appendTo('body')
|
||||
.on({
|
||||
click: $.proxy(this.click, this)//,
|
||||
//mousedown: $.proxy(this.mousedown, this)
|
||||
});
|
||||
this.isInput = this.element.is('input');
|
||||
this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
|
||||
|
||||
if (this.isInput) {
|
||||
this.element.on({
|
||||
focus: $.proxy(this.show, this),
|
||||
//blur: $.proxy(this.hide, this),
|
||||
keyup: $.proxy(this.update, this)
|
||||
});
|
||||
} else {
|
||||
if (this.component){
|
||||
this.component.on('click', $.proxy(this.show, this));
|
||||
} else {
|
||||
this.element.on('click', $.proxy(this.show, this));
|
||||
}
|
||||
}
|
||||
|
||||
this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0;
|
||||
if (typeof this.minViewMode === 'string') {
|
||||
switch (this.minViewMode) {
|
||||
case 'months':
|
||||
this.minViewMode = 1;
|
||||
break;
|
||||
case 'years':
|
||||
this.minViewMode = 2;
|
||||
break;
|
||||
default:
|
||||
this.minViewMode = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.viewMode = options.viewMode||this.element.data('date-viewmode')||0;
|
||||
if (typeof this.viewMode === 'string') {
|
||||
switch (this.viewMode) {
|
||||
case 'months':
|
||||
this.viewMode = 1;
|
||||
break;
|
||||
case 'years':
|
||||
this.viewMode = 2;
|
||||
break;
|
||||
default:
|
||||
this.viewMode = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.startViewMode = this.viewMode;
|
||||
this.weekStart = options.weekStart||this.element.data('date-weekstart')||0;
|
||||
this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1;
|
||||
this.onRender = options.onRender;
|
||||
this.fillDow();
|
||||
this.fillMonths();
|
||||
this.update();
|
||||
this.showMode();
|
||||
};
|
||||
|
||||
Datepicker.prototype = {
|
||||
constructor: Datepicker,
|
||||
|
||||
show: function(e) {
|
||||
this.picker.show();
|
||||
this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
|
||||
this.place();
|
||||
$(window).on('resize', $.proxy(this.place, this));
|
||||
if (e ) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
}
|
||||
if (!this.isInput) {
|
||||
}
|
||||
var that = this;
|
||||
$(document).on('mousedown', function(ev){
|
||||
if ($(ev.target).closest('.datepicker').length == 0) {
|
||||
that.hide();
|
||||
}
|
||||
});
|
||||
this.element.trigger({
|
||||
type: 'show',
|
||||
date: this.date
|
||||
});
|
||||
},
|
||||
|
||||
hide: function(){
|
||||
this.picker.hide();
|
||||
$(window).off('resize', this.place);
|
||||
this.viewMode = this.startViewMode;
|
||||
this.showMode();
|
||||
if (!this.isInput) {
|
||||
$(document).off('mousedown', this.hide);
|
||||
}
|
||||
//this.set();
|
||||
this.element.trigger({
|
||||
type: 'hide',
|
||||
date: this.date
|
||||
});
|
||||
},
|
||||
|
||||
set: function() {
|
||||
var formated = DPGlobal.formatDate(this.date, this.format);
|
||||
if (!this.isInput) {
|
||||
if (this.component){
|
||||
this.element.find('input').prop('value', formated);
|
||||
}
|
||||
this.element.data('date', formated);
|
||||
} else {
|
||||
this.element.prop('value', formated);
|
||||
}
|
||||
},
|
||||
|
||||
setValue: function(newDate) {
|
||||
if (typeof newDate === 'string') {
|
||||
this.date = DPGlobal.parseDate(newDate, this.format);
|
||||
} else {
|
||||
this.date = new Date(newDate);
|
||||
}
|
||||
this.set();
|
||||
this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
|
||||
this.fill();
|
||||
},
|
||||
|
||||
place: function(){
|
||||
var offset = this.component ? this.component.offset() : this.element.offset();
|
||||
this.picker.css({
|
||||
top: offset.top + this.height,
|
||||
left: offset.left
|
||||
});
|
||||
},
|
||||
|
||||
update: function(newDate){
|
||||
this.date = DPGlobal.parseDate(
|
||||
typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')),
|
||||
this.format
|
||||
);
|
||||
this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
|
||||
this.fill();
|
||||
},
|
||||
|
||||
fillDow: function(){
|
||||
var dowCnt = this.weekStart;
|
||||
var html = '<tr>';
|
||||
while (dowCnt < this.weekStart + 7) {
|
||||
html += '<th class="dow">'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'</th>';
|
||||
}
|
||||
html += '</tr>';
|
||||
this.picker.find('.datepicker-days thead').append(html);
|
||||
},
|
||||
|
||||
fillMonths: function(){
|
||||
var html = '';
|
||||
var i = 0
|
||||
while (i < 12) {
|
||||
html += '<span class="month">'+DPGlobal.dates.monthsShort[i++]+'</span>';
|
||||
}
|
||||
this.picker.find('.datepicker-months td').append(html);
|
||||
},
|
||||
|
||||
fill: function() {
|
||||
var d = new Date(this.viewDate),
|
||||
year = d.getFullYear(),
|
||||
month = d.getMonth(),
|
||||
currentDate = this.date.valueOf();
|
||||
this.picker.find('.datepicker-days th:eq(1)')
|
||||
.text(DPGlobal.dates.months[month]+' '+year);
|
||||
var prevMonth = new Date(year, month-1, 28,0,0,0,0),
|
||||
day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());
|
||||
prevMonth.setDate(day);
|
||||
prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7);
|
||||
var nextMonth = new Date(prevMonth);
|
||||
nextMonth.setDate(nextMonth.getDate() + 42);
|
||||
nextMonth = nextMonth.valueOf();
|
||||
var html = [];
|
||||
var clsName,
|
||||
prevY,
|
||||
prevM;
|
||||
while(prevMonth.valueOf() < nextMonth) {
|
||||
if (prevMonth.getDay() === this.weekStart) {
|
||||
html.push('<tr>');
|
||||
}
|
||||
clsName = this.onRender(prevMonth);
|
||||
prevY = prevMonth.getFullYear();
|
||||
prevM = prevMonth.getMonth();
|
||||
if ((prevM < month && prevY === year) || prevY < year) {
|
||||
clsName += ' old';
|
||||
} else if ((prevM > month && prevY === year) || prevY > year) {
|
||||
clsName += ' new';
|
||||
}
|
||||
if (prevMonth.valueOf() === currentDate) {
|
||||
clsName += ' active';
|
||||
}
|
||||
html.push('<td class="day '+clsName+'">'+prevMonth.getDate() + '</td>');
|
||||
if (prevMonth.getDay() === this.weekEnd) {
|
||||
html.push('</tr>');
|
||||
}
|
||||
prevMonth.setDate(prevMonth.getDate()+1);
|
||||
}
|
||||
this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
|
||||
var currentYear = this.date.getFullYear();
|
||||
|
||||
var months = this.picker.find('.datepicker-months')
|
||||
.find('th:eq(1)')
|
||||
.text(year)
|
||||
.end()
|
||||
.find('span').removeClass('active');
|
||||
if (currentYear === year) {
|
||||
months.eq(this.date.getMonth()).addClass('active');
|
||||
}
|
||||
|
||||
html = '';
|
||||
year = parseInt(year/10, 10) * 10;
|
||||
var yearCont = this.picker.find('.datepicker-years')
|
||||
.find('th:eq(1)')
|
||||
.text(year + '-' + (year + 9))
|
||||
.end()
|
||||
.find('td');
|
||||
year -= 1;
|
||||
for (var i = -1; i < 11; i++) {
|
||||
html += '<span class="year'+(i === -1 || i === 10 ? ' old' : '')+(currentYear === year ? ' active' : '')+'">'+year+'</span>';
|
||||
year += 1;
|
||||
}
|
||||
yearCont.html(html);
|
||||
},
|
||||
|
||||
click: function(e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
var target = $(e.target).closest('span, td, th');
|
||||
if (target.length === 1) {
|
||||
switch(target[0].nodeName.toLowerCase()) {
|
||||
case 'th':
|
||||
switch(target[0].className) {
|
||||
case 'switch':
|
||||
this.showMode(1);
|
||||
break;
|
||||
case 'prev':
|
||||
case 'next':
|
||||
this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call(
|
||||
this.viewDate,
|
||||
this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) +
|
||||
DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1)
|
||||
);
|
||||
this.fill();
|
||||
this.set();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'span':
|
||||
if (target.is('.month')) {
|
||||
var month = target.parent().find('span').index(target);
|
||||
this.viewDate.setMonth(month);
|
||||
} else {
|
||||
var year = parseInt(target.text(), 10)||0;
|
||||
this.viewDate.setFullYear(year);
|
||||
}
|
||||
if (this.viewMode !== 0) {
|
||||
this.date = new Date(this.viewDate);
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date,
|
||||
viewMode: DPGlobal.modes[this.viewMode].clsName
|
||||
});
|
||||
}
|
||||
this.showMode(-1);
|
||||
this.fill();
|
||||
this.set();
|
||||
break;
|
||||
case 'td':
|
||||
if (target.is('.day') && !target.is('.disabled')){
|
||||
var day = parseInt(target.text(), 10)||1;
|
||||
var month = this.viewDate.getMonth();
|
||||
if (target.is('.old')) {
|
||||
month -= 1;
|
||||
} else if (target.is('.new')) {
|
||||
month += 1;
|
||||
}
|
||||
var year = this.viewDate.getFullYear();
|
||||
this.date = new Date(year, month, day,0,0,0,0);
|
||||
this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0);
|
||||
this.fill();
|
||||
this.set();
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date,
|
||||
viewMode: DPGlobal.modes[this.viewMode].clsName
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mousedown: function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
},
|
||||
|
||||
showMode: function(dir) {
|
||||
if (dir) {
|
||||
this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir));
|
||||
}
|
||||
this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.datepicker = function ( option, val ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this),
|
||||
data = $this.data('datepicker'),
|
||||
options = typeof option === 'object' && option;
|
||||
if (!data) {
|
||||
$this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options))));
|
||||
}
|
||||
if (typeof option === 'string') data[option](val);
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.datepicker.defaults = {
|
||||
onRender: function(date) {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
$.fn.datepicker.Constructor = Datepicker;
|
||||
|
||||
var DPGlobal = {
|
||||
modes: [
|
||||
{
|
||||
clsName: 'days',
|
||||
navFnc: 'Month',
|
||||
navStep: 1
|
||||
},
|
||||
{
|
||||
clsName: 'months',
|
||||
navFnc: 'FullYear',
|
||||
navStep: 1
|
||||
},
|
||||
{
|
||||
clsName: 'years',
|
||||
navFnc: 'FullYear',
|
||||
navStep: 10
|
||||
}],
|
||||
dates:{
|
||||
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
|
||||
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
|
||||
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
|
||||
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
|
||||
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
|
||||
},
|
||||
isLeapYear: function (year) {
|
||||
return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
|
||||
},
|
||||
getDaysInMonth: function (year, month) {
|
||||
return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
|
||||
},
|
||||
parseFormat: function(format){
|
||||
var separator = format.match(/[.\/\-\s].*?/),
|
||||
parts = format.split(/\W+/);
|
||||
if (!separator || !parts || parts.length === 0){
|
||||
throw new Error("Invalid date format.");
|
||||
}
|
||||
return {separator: separator, parts: parts};
|
||||
},
|
||||
parseDate: function(date, format) {
|
||||
var parts = date.split(format.separator),
|
||||
date = new Date(),
|
||||
val;
|
||||
date.setHours(0);
|
||||
date.setMinutes(0);
|
||||
date.setSeconds(0);
|
||||
date.setMilliseconds(0);
|
||||
if (parts.length === format.parts.length) {
|
||||
var year = date.getFullYear(), day = date.getDate(), month = date.getMonth();
|
||||
for (var i=0, cnt = format.parts.length; i < cnt; i++) {
|
||||
val = parseInt(parts[i], 10)||1;
|
||||
switch(format.parts[i]) {
|
||||
case 'dd':
|
||||
case 'd':
|
||||
day = val;
|
||||
date.setDate(val);
|
||||
break;
|
||||
case 'mm':
|
||||
case 'm':
|
||||
month = val - 1;
|
||||
date.setMonth(val - 1);
|
||||
break;
|
||||
case 'yy':
|
||||
year = 2000 + val;
|
||||
date.setFullYear(2000 + val);
|
||||
break;
|
||||
case 'yyyy':
|
||||
year = val;
|
||||
date.setFullYear(val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
date = new Date(year, month, day, 0 ,0 ,0);
|
||||
}
|
||||
return date;
|
||||
},
|
||||
formatDate: function(date, format){
|
||||
var val = {
|
||||
d: date.getDate(),
|
||||
m: date.getMonth() + 1,
|
||||
yy: date.getFullYear().toString().substring(2),
|
||||
yyyy: date.getFullYear()
|
||||
};
|
||||
val.dd = (val.d < 10 ? '0' : '') + val.d;
|
||||
val.mm = (val.m < 10 ? '0' : '') + val.m;
|
||||
var date = [];
|
||||
for (var i=0, cnt = format.parts.length; i < cnt; i++) {
|
||||
date.push(val[format.parts[i]]);
|
||||
}
|
||||
return date.join(format.separator);
|
||||
},
|
||||
headTemplate: '<thead>'+
|
||||
'<tr>'+
|
||||
'<th class="prev">‹</th>'+
|
||||
'<th colspan="5" class="switch"></th>'+
|
||||
'<th class="next">›</th>'+
|
||||
'</tr>'+
|
||||
'</thead>',
|
||||
contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>'
|
||||
};
|
||||
DPGlobal.template = '<div class="datepicker dropdown-menu">'+
|
||||
'<div class="datepicker-days">'+
|
||||
'<table class=" table-condensed">'+
|
||||
DPGlobal.headTemplate+
|
||||
'<tbody></tbody>'+
|
||||
'</table>'+
|
||||
'</div>'+
|
||||
'<div class="datepicker-months">'+
|
||||
'<table class="table-condensed">'+
|
||||
DPGlobal.headTemplate+
|
||||
DPGlobal.contTemplate+
|
||||
'</table>'+
|
||||
'</div>'+
|
||||
'<div class="datepicker-years">'+
|
||||
'<table class="table-condensed">'+
|
||||
DPGlobal.headTemplate+
|
||||
DPGlobal.contTemplate+
|
||||
'</table>'+
|
||||
'</div>'+
|
||||
'</div>';
|
||||
|
||||
}( window.jQuery );
|
||||
@@ -0,0 +1,182 @@
|
||||
/*!
|
||||
* Datepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datepicker {
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
/*.dow {
|
||||
border-top: 1px solid #ddd !important;
|
||||
}*/
|
||||
|
||||
}
|
||||
.datepicker:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.datepicker:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.datepicker > div {
|
||||
display: none;
|
||||
}
|
||||
.datepicker table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
.datepicker td,
|
||||
.datepicker th {
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker td.day:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker td.day.disabled {
|
||||
color: #eeeeee;
|
||||
}
|
||||
.datepicker td.old,
|
||||
.datepicker td.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker td.active,
|
||||
.datepicker td.active:hover {
|
||||
color: #ffffff;
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #0044cc;
|
||||
/* Darken IE7 buttons by default so they stand out more given they won't have borders */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker td.active:hover,
|
||||
.datepicker td.active:hover:hover,
|
||||
.datepicker td.active:focus,
|
||||
.datepicker td.active:hover:focus,
|
||||
.datepicker td.active:active,
|
||||
.datepicker td.active:hover:active,
|
||||
.datepicker td.active.active,
|
||||
.datepicker td.active:hover.active,
|
||||
.datepicker td.active.disabled,
|
||||
.datepicker td.active:hover.disabled,
|
||||
.datepicker td.active[disabled],
|
||||
.datepicker td.active:hover[disabled] {
|
||||
color: #ffffff;
|
||||
background-color: #0044cc;
|
||||
*background-color: #003bb3;
|
||||
}
|
||||
.datepicker td.active:active,
|
||||
.datepicker td.active:hover:active,
|
||||
.datepicker td.active.active,
|
||||
.datepicker td.active:hover.active {
|
||||
background-color: #003399 \9;
|
||||
}
|
||||
.datepicker td span {
|
||||
display: block;
|
||||
width: 47px;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 2px;
|
||||
cursor: pointer;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker td span.active {
|
||||
color: #ffffff;
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #0044cc;
|
||||
/* Darken IE7 buttons by default so they stand out more given they won't have borders */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker td span.active:hover,
|
||||
.datepicker td span.active:focus,
|
||||
.datepicker td span.active:active,
|
||||
.datepicker td span.active.active,
|
||||
.datepicker td span.active.disabled,
|
||||
.datepicker td span.active[disabled] {
|
||||
color: #ffffff;
|
||||
background-color: #0044cc;
|
||||
*background-color: #003bb3;
|
||||
}
|
||||
.datepicker td span.active:active,
|
||||
.datepicker td span.active.active {
|
||||
background-color: #003399 \9;
|
||||
}
|
||||
.datepicker td span.old {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker th.switch {
|
||||
width: 145px;
|
||||
}
|
||||
.datepicker th.next,
|
||||
.datepicker th.prev {
|
||||
font-size: 21px;
|
||||
}
|
||||
.datepicker thead tr:first-child th {
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker thead tr:first-child th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.input-append.date .add-on i,
|
||||
.input-prepend.date .add-on i {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
<%def name="jsAddOn()">
|
||||
<script src="/vendor/timeline/js/timeline-src.js"></script>
|
||||
<script>
|
||||
var timeline = new VMM.Timeline("timeline", '850px', '500px');
|
||||
var timeline = new VMM.Timeline("timeline", '95%', '500px');
|
||||
var c = {language:{ lang:"fr",api:{wikipedia:"fr"},date:{month:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],month_abbr:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","dec."],day:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_abbr:["Dim.","Lu.","Ma.","Me.","Jeu.","Vend.","Sam."]},dateformats:{year:"yyyy",month_short:"mmm",month:"mmmm yyyy",full_short:"d mmm",full:"d mmmm yyyy",time_short:"HH:MM:SS",time_no_seconds_short:"HH:MM",time_no_seconds_small_date:"HH:MM'<br/><small>'d mmmm yyyy'</small>'",full_long:"dddd',' d mmm yyyy 'à' HH:MM",full_long_small_date:"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"},messages:{loading_timeline:"Chargement de la frise en cours... ",return_to_title:"Retour à la page d'accueil",expand_timeline:"Elargir la frise",contract_timeline:"Réduire la frise",wikipedia:"Extrait de Wikipedia, l'encyclopédie libre",loading_content:"Chargement",loading:"Chargement",swipe_nav:"Swipe to Navigate"}}};
|
||||
timeline.init(c, "/2015/timeline-json");
|
||||
</script>
|
||||
@@ -10,42 +10,69 @@
|
||||
<%def name="cssAddOn()">
|
||||
<!-- The default timeline stylesheet -->
|
||||
<link rel="stylesheet" href="/vendor/timeline/css/timeline.css" />
|
||||
<style>
|
||||
.enum li {
|
||||
list-style-type: none;
|
||||
background-image: url(/img/puce.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 6px;
|
||||
padding-left: 16px;
|
||||
}
|
||||
</style>
|
||||
</%def>
|
||||
<div class="pull-right">
|
||||
Synchronisez votre calendrier avec <a href="/2015/JM2L.ics">le fichier ical JM2L 2015</a>
|
||||
<H2 style="text-align: center;">9<sup>ème</sup> édition des JM2L</H2>
|
||||
<br>
|
||||
<div class="row-fluid">
|
||||
<div class="span4 offset1">
|
||||
<blockquote>
|
||||
Le 28 Novembre 2015 aura lieu la 9<sup>ème</sup> édition des Journées Méditerranéennes du Logiciel Libre (JM2L) à
|
||||
Polytech'Nice destinée à tout public.
|
||||
</blockquote>
|
||||
Le thème de cette année sera « Do It Yourself » ou « Faîtes le vous-même » :
|
||||
<ul class="enum">
|
||||
<li>Migration vers les logiciels libres</li>
|
||||
## <li>Libres enfants du numérique : jeux et loisirs pour les juniors.</li>
|
||||
## <li>Gérer ses données personnelles</li>
|
||||
<li>Do It Yourself (jeux vidéos, fablabs…)</li>
|
||||
<li>Culture libre</li>
|
||||
## <li>Communautés du libre</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="span4 offset1">
|
||||
<p>
|
||||
Nous faisons appel aux acteurs du numérique libre pour alimenter le programme des conférences/ateliers :
|
||||
<br>
|
||||
Vous pouvez nous faire parvenir vos propositions directement via le menu <a href="/participer-l-evenement">participer.</a>
|
||||
<br>
|
||||
Si vous souhaitez échanger avec le public et partager un bon moment avec la communauté, <a href="/participer-l-evenement#inscription">inscrivez-vous !</a>
|
||||
<br>
|
||||
Vous pouvez d'ores et déjà synchroniser votre calendrier avec <a href="/2015/JM2L.ics">notre fichier ical JM2L 2015</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div id="timeline" style="margin-left: -50px;display:block;"></div>
|
||||
<div class="clearfix"> </div>
|
||||
<div style="top:500px;position: relative">
|
||||
Le 28 Novembre 2015 aura lieu la 9e édition des Journées Méditerranéennes du Logiciel Libre (JM2LL) à
|
||||
Sophia-Antipolis destinées tout public (http://jm2l.linux-azur.org/).
|
||||
<br>
|
||||
Le thème de cette année sera « Do It Yourself » ou « Faîtes le vous-même » :
|
||||
<ul>
|
||||
<li>Migration vers les logiciels libres</li>
|
||||
<li>Libres enfants du numérique : jeux et loisirs pour les juniors.</li>
|
||||
<li>Gérer ses données personnelles</li>
|
||||
<li>Do It Yourself (jeux vidéos, fablabs…)</li>
|
||||
<li>Culture libre</li>
|
||||
<li>Communautés du libre</li>
|
||||
</ul>
|
||||
Nous faisons appel aux acteurs du numérique libre pour alimenter le programme des conférences/ateliers :
|
||||
si vous souhaitez échanger avec le public et partager un bon moment avec la communauté, inscrivez-vous !
|
||||
<br>
|
||||
Nous vous proposons cinq formats de contribution :
|
||||
<ul>
|
||||
<li>Stands au sein du village associatif</li>
|
||||
<li>Conférences de 20 ou 40 minutes suivies d’un échange</li>
|
||||
<li>Ateliers de 45 minutes ou 1h15</li>
|
||||
<li>Démos de vos matériels, logiciels ou projets libres</li>
|
||||
<li>Animations ouvertes</li>
|
||||
</ul>
|
||||
<p>
|
||||
Il sera bien sûr possible de combiner plusieurs formats (par exemple, une démo ou une conférence suivie
|
||||
d’un atelier).
|
||||
</p>
|
||||
<p>
|
||||
Vous pouvez nous faire parvenir vos propositions directement via le menu participer.
|
||||
</p>
|
||||
|
||||
|
||||
## Nous vous proposons plusieurs formats de contribution :
|
||||
## <ul class="enum">
|
||||
## <li>Stands au sein du village associatif</li>
|
||||
## <li>Conférences de 20 à 70 minutes suivies d’un échange</li>
|
||||
## <li>Ateliers de 45 minutes ou 1h15</li>
|
||||
## <li>Démos de vos matériels, logiciels ou projets libres</li>
|
||||
## <li>Animations ouvertes</li>
|
||||
## <li>Vous pouvez aussi aider l'équipe à la logistique.</li>
|
||||
## </ul>
|
||||
## <p>
|
||||
## Il sera bien sûr possible de combiner plusieurs formats (par exemple, une démo ou une conférence suivie
|
||||
## d’un atelier).
|
||||
## </p>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<!-- TimeLine -->
|
||||
<div id="timeline"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<div style="height:500px">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
</ol>
|
||||
% if not link:
|
||||
<strong>Remplissez ce formulaire :</strong>
|
||||
<div class="row-fluid">
|
||||
<div class="span7 offset3">
|
||||
<%
|
||||
DicForm ={
|
||||
'nom': {'PlaceHolder':u"Mon nom", 'ContainerStyle':'float:left;'},
|
||||
@@ -68,10 +70,11 @@ DicForm ={
|
||||
</div>
|
||||
<button class="btn btn-large btn-primary" type="submit">C'est parti !</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
% else:
|
||||
<p>
|
||||
Vous venez de recevoir un mail...
|
||||
Ici, ... le texte à définir ...
|
||||
</p>
|
||||
Cliquez sur ce lien pour finir votre inscription : <a href="${request.route_path('bymail', hash=link)}">Mon lien</a>
|
||||
% endif
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
<%namespace name="Modals" file="jm2l:templates/modals.mako"/>
|
||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||
<%def name="profil_wrapper(uprofil, profil_form)">
|
||||
<div id="Photos">
|
||||
${helpers.show_my_pictures(uprofil)}
|
||||
</div>
|
||||
<a href="/sign/jm2l/${uprofil.my_hash}">Mon lien</a>
|
||||
<h3>${profil_form.prenom.data} ${profil_form.nom.data}</h3>
|
||||
|
||||
##<form id="ProfilForm" action="javascript:DoPost('/2015/modal/Place/${form.place_id.data}');">
|
||||
% if uprofil!=request.user and request.user.uid==1:
|
||||
@@ -14,8 +9,42 @@
|
||||
<form id="ProfilForm" action="/MesJM2L" method="POST">
|
||||
% endif
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span8">
|
||||
<a href="/sign/jm2l/${uprofil.my_hash}">Mon lien de connection</a> -
|
||||
<a href="/user/${request.user.slug}">Mon profil publique</a><br>
|
||||
<h3>${profil_form.prenom.data} ${profil_form.nom.data}</h3>
|
||||
<%
|
||||
DicForm = {
|
||||
DicFormA = {
|
||||
'nom': {'PlaceHolder':u"Mon Nom", 'ContainerClass':"span6", 'next':False},
|
||||
'prenom': {'PlaceHolder':u"Mon Prénom", 'ContainerClass':"span6", 'next':True},
|
||||
'pseudo': {'PlaceHolder':u"Mon Pseudo", 'ContainerClass':"span6", 'next':False},
|
||||
'mail': {'PlaceHolder':u"mon.mail@fqdn.tld", 'ContainerClass':"span6", 'next':True},
|
||||
'phone': {'PlaceHolder':u"0612345678", 'ContainerClass':"span6", 'next':False},
|
||||
'website': {'PlaceHolder':u"http://ma-page-web.moi",'ContainerClass':"span6", 'next':True},
|
||||
'gpg_key': {'PlaceHolder':u"Ma clé gpg", 'ContainerClass':"span6", 'next':False},
|
||||
'soc_link':{'PlaceHolder':u"#jm2l sur irc.freenode.org",'ContainerClass':"span6", 'next':True},
|
||||
'bio': {'Ignore':True},
|
||||
'tiersship': {'Ignore':True},
|
||||
'id': {'Ignore':True},
|
||||
'user_id': {'Ignore':True},
|
||||
}
|
||||
|
||||
DicFormB = {
|
||||
'nom': {'Ignore':True },
|
||||
'prenom': {'Ignore':True },
|
||||
'pseudo': {'Ignore':True },
|
||||
'mail': {'Ignore':True },
|
||||
'phone': {'Ignore':True },
|
||||
'website': {'Ignore':True },
|
||||
'gpg_key': {'Ignore':True},
|
||||
'soc_link': {'Ignore':True},
|
||||
'bio': {'PlaceHolder':u"Ma Bilibiographie", "ckeditor":1, 'ContainerClass':"span11", 'next':False },
|
||||
'tiersship': {'Ignore':True}
|
||||
}
|
||||
|
||||
|
||||
DicForm2 = {
|
||||
'nom': {'PlaceHolder':u"Mon Nom", "FieldStyle":"width:16em;", 'ContainerStyle':"float:left;"},
|
||||
'prenom': {'PlaceHolder':u"Mon Prénom", "FieldStyle":"width:16em;"},
|
||||
'pseudo': {'PlaceHolder':u"Mon Pseudo", "FieldStyle":"width:16em;", 'ContainerStyle':"float:left;"},
|
||||
@@ -27,10 +56,17 @@ DicForm = {
|
||||
'bio': {'PlaceHolder':u"Ma Bilibiographie", "FieldStyle":"width:95%;min-height:150px;", "fieldset":True, "ckeditor":1 },
|
||||
'tiersship': {'Ignore':True}
|
||||
}
|
||||
%>
|
||||
${helpers.DisplayForm(profil_form, DicForm)}
|
||||
|
||||
<fieldset>
|
||||
%>
|
||||
${helpers.DisplayRespForm(profil_form, DicFormA)}
|
||||
</div>
|
||||
<div class="span4">
|
||||
${helpers.show_my_pictures(uprofil)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
${helpers.DisplayRespForm(profil_form, DicFormB)}
|
||||
<fieldset>
|
||||
<legend>Activité</legend>
|
||||
Si vous ne trouvez pas l'entité que vous souhaitez promouvoir (Association, GULL, Entreprise, Logiciel, ...).
|
||||
Vous pouvez <a href="/entity"> en ajouter une. </a>
|
||||
@@ -110,8 +146,9 @@ DicForm = {
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="span2 offset5">
|
||||
<input class="btn btn-primary" type="submit" value="Enregistrer !" />
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</%def>
|
||||
|
||||
@@ -4,21 +4,21 @@ fieldset:disabled {
|
||||
color:#CCC;
|
||||
}
|
||||
</style>
|
||||
##<input type="checkbox" onclick="javascript:$('.ComeToJM2L').attr( 'disabled', !this.checked );">Je viens aux JM2L 2015</input>
|
||||
<form id="ProfilForm" action="/MonSejour" method="POST">
|
||||
<fieldset class="ComeToJM2L">
|
||||
<legend>Arrivée</legend>
|
||||
<div class="form-inline">
|
||||
J'arrive
|
||||
<select style="width:12em;" id="Arrival:Place" name="Arrival:Place" title="Lieu">
|
||||
% for place in Places:
|
||||
<option value="${place.place_id}">${place.display_name}</option>
|
||||
% endfor
|
||||
% for place in Places:
|
||||
<option value="${place.place_id}">${place.display_name}</option>
|
||||
% endfor
|
||||
</select>
|
||||
le
|
||||
<select style="width:7em;" id="Arrival:Day" name="Arrival:Day" title="Jour">
|
||||
<option value="Jeudi">Jeudi</option>
|
||||
<option value="Vendredi">Vendredi</option>
|
||||
<option value="Samedi">Samedi</option>
|
||||
<option value="26">Jeudi</option>
|
||||
<option value="27">Vendredi</option>
|
||||
<option value="28">Samedi</option>
|
||||
</select>
|
||||
,
|
||||
<select style="width:15em;" id="Arrival:Confidence" name="Arrival:Confidence">
|
||||
@@ -29,14 +29,14 @@ fieldset:disabled {
|
||||
</select>
|
||||
|
||||
à
|
||||
<select style="width:6em;" id="Arrival:Hour" class="formforform-field" name="field_8" title="Le">
|
||||
<select style="width:6em;" id="Arrival:Hour" class="formforform-field" name="Arrival:Hour" title="Le">
|
||||
% for hour in range(24):
|
||||
% for minutes in range(0,60,10):
|
||||
<option value="${hour}h${minutes}"
|
||||
% if str("%dh%.2d" % (hour, minutes))=='10h00':
|
||||
selected="selected"
|
||||
% endif
|
||||
>${"%dh%.2d" % (hour, minutes)}</option>
|
||||
% for minutes in range(0,60,10):
|
||||
<option value="${"%d:%.2d" % (hour, minutes)}"
|
||||
% if str("%dh%.2d" % (hour, minutes))=='10h00':
|
||||
selected="selected"
|
||||
% endif
|
||||
>${"%dh%.2d" % (hour, minutes)}</option>
|
||||
% endfor
|
||||
% endfor
|
||||
</select>
|
||||
@@ -46,13 +46,7 @@ fieldset:disabled {
|
||||
context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Day').select2({width:'resolve'});" % jsitem )
|
||||
context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Confidence').select2({width:'resolve'});" % jsitem )
|
||||
context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Hour').select2({width:'resolve'});" % jsitem )
|
||||
%>
|
||||
##<script type="text/javascript">
|
||||
## $("#Arrival\\:Place").select2({});
|
||||
## $("#Arrival\\:Day").select2({});
|
||||
## $("#Arrival\\:Confidence").select2({});
|
||||
## $("#Arrival\\:Hour").select2({});
|
||||
##</script>
|
||||
%>
|
||||
</div>
|
||||
<p>
|
||||
<div class="control-group" style="background-color: #fafafa;padding: 10px 50px; width:60%">
|
||||
@@ -97,9 +91,9 @@ fieldset:disabled {
|
||||
</select>
|
||||
le
|
||||
<select style="width:7em;" id="Departure:Day" class="formforform-field" name="field_8" title="Le">
|
||||
<option value="Samedi">Samedi</option>
|
||||
<option value="Dimanche">Dimanche</option>
|
||||
<option value="Lundi">Lundi</option>
|
||||
<option value="28">Samedi</option>
|
||||
<option value="29">Dimanche</option>
|
||||
<option value="30">Lundi</option>
|
||||
</select>
|
||||
,
|
||||
<select style="width:14em;" id="Departure:Confidence" class="formforform-field" name="field_8" title="Le">
|
||||
@@ -127,14 +121,6 @@ fieldset:disabled {
|
||||
context._kwargs['postpone_js'].append( "$('#Departure\\\\:Confidence').select2({width:'resolve'});" % jsitem )
|
||||
context._kwargs['postpone_js'].append( "$('#Departure\\\\:Hour').select2({width:'resolve'});" % jsitem )
|
||||
%>
|
||||
|
||||
##<script type="text/javascript">
|
||||
## $("#Departure\\:Place").select2({});
|
||||
## $("#Departure\\:Day").select2({});
|
||||
## $("#Departure\\:Confidence").select2({});
|
||||
## $("#Departure\\:Hour").select2({});
|
||||
##</script>
|
||||
|
||||
</div>
|
||||
<p>
|
||||
<div class="control-group" style="background-color: #fafafa;padding: 10px 50px; width:60%">
|
||||
@@ -169,4 +155,11 @@ fieldset:disabled {
|
||||
</div>
|
||||
</p>
|
||||
</fieldset>
|
||||
<center>
|
||||
<button type="submit" class="btn btn-large btn-primary" />
|
||||
<i class="icon-ok icon-white"></i> Enregistrer
|
||||
</button>
|
||||
</center>
|
||||
</form>
|
||||
|
||||
</%def>
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<%def name="jsAddOn_head()">
|
||||
<script src="/vendor/leaflet/js/leaflet.js"></script>
|
||||
</%def>
|
||||
<%def name="cssAddOn()">
|
||||
<link rel="stylesheet" href="/vendor/leaflet/css/leaflet.css" />
|
||||
<style>
|
||||
#come_map {
|
||||
height: 300px;
|
||||
}
|
||||
</style>
|
||||
</%def>
|
||||
|
||||
<h2 class="page-title">Nous rejoindre...</h2>
|
||||
|
||||
<div class="span10 offset1">
|
||||
@@ -12,9 +24,11 @@
|
||||
<div class="span4 offset1">
|
||||
<h4>Le staff</h4>
|
||||
<dl>
|
||||
<dt>Mail</dt>
|
||||
<dt>sur IRC</dt>
|
||||
<dd>» #jm2l@irc.freenode.net</dd>
|
||||
<dt>par Mail</dt>
|
||||
<dd>» contact at jm2l.linux-azur.org</dd>
|
||||
<dt>Téléphone</dt>
|
||||
<dt>par Téléphone</dt>
|
||||
<dd>» +33 (0) 6 52 42 31 37</dd>
|
||||
</dl>
|
||||
</div>
|
||||
@@ -25,12 +39,28 @@
|
||||
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>
|
||||
<p>GPS Lat.: 43°61'56.9"N - Lon.: 7°0'71.95"E</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span6">
|
||||
<div class="span8 offset2">
|
||||
<div id="come_map"></div>
|
||||
<script type="text/javascript">
|
||||
var map = L.map('come_map');
|
||||
// create the tile layer with correct attribution
|
||||
var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
|
||||
var osmAttrib='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors';
|
||||
var osm = new L.TileLayer(osmUrl, {minZoom: 7, maxZoom: 18, attribution: osmAttrib});
|
||||
// start the map on specified GPS Coords
|
||||
map.setView(new L.LatLng(43.61562,7.0724),15);
|
||||
marker = L.marker([43.615693, 7.0726221]).addTo(map);
|
||||
map.addLayer(osm);
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
<div class="tabbable" id="main_tab">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a href="#Trsp" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en bus" src="/img/tr_bus_.png"></a></li>
|
||||
@@ -137,15 +167,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</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>
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||
<%
|
||||
DisplayYear = request.session.get('year',2015)
|
||||
%>
|
||||
<div class="span9">
|
||||
<h1 class="page-title">Dossier de presse ${DisplayYear}</h1>
|
||||
% if content and content.doss_presse:
|
||||
<div class="span10 offset1">
|
||||
@@ -76,4 +78,9 @@ DisplayYear = request.session.get('year',2015)
|
||||
<p class="spip">Et pour ce ux qui veullent tout mettre en local sur leur espace web, l’image banner2007.png est ici : <a href="/web/20071231104349/http://jm2l.linux-azur.org/IMG/png/banner2007.png" class="spip_url spip_out">http://jm2l.linux-azur.org/IMG/png/...</a>
|
||||
Préférez quand même la première méthode qui présente l’avantage de nous permettre de faire quelques statistiques.</p>
|
||||
% endif
|
||||
<br><br>
|
||||
|
||||
</div>
|
||||
<div class="span3">
|
||||
<!--Sidebar content-->
|
||||
${helpers.participants(DisplayYear)}
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||
<%
|
||||
TabDisplay = [
|
||||
(u'Tables rondes', 'Table ronde'),
|
||||
@@ -7,6 +8,11 @@ TabDisplay = [
|
||||
(u'Stands', 'Stand'),
|
||||
]
|
||||
%>
|
||||
<%def name="jsAddOn()">
|
||||
<script type="text/javascript" src="/vendor/d3js/d3.v3.min.js"></script>
|
||||
<script type="text/javascript" src="/js/programme.js"></script>
|
||||
</%def>
|
||||
<%def name="cssAddOn()">
|
||||
<style>
|
||||
.myblock {
|
||||
background-color:#EEE;
|
||||
@@ -31,11 +37,9 @@ TabDisplay = [
|
||||
}
|
||||
.Atelier {
|
||||
fill: #faebeb;
|
||||
stroke: #dc7070;
|
||||
}
|
||||
.Table-ronde {
|
||||
fill: #fff4e5;
|
||||
stroke: #ff9912;
|
||||
}
|
||||
.Repas {
|
||||
fill: #2EE;
|
||||
@@ -54,26 +58,38 @@ rect {
|
||||
fill: none;
|
||||
stroke: #222;
|
||||
}
|
||||
|
||||
</style>
|
||||
<h2>Le Programme ${DisplayYear}</h2>
|
||||
|
||||
<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}">
|
||||
</%def>
|
||||
<div class="row-fluid">
|
||||
<div class="span9">
|
||||
|
||||
<h2>Le Programme ${DisplayYear}</h2>
|
||||
|
||||
<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>
|
||||
% endfor
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="span3">
|
||||
<!--Sidebar content-->
|
||||
${helpers.participants(DisplayYear)}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<div id="DivProg" style="border: 1px solid black;"></div>
|
||||
|
||||
@@ -99,7 +115,7 @@ if Counter==0:
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:7em;text-align:center;">Date</th>
|
||||
<th style="text-align:center;">Sujet - ${Counter} ${Title}</th>
|
||||
<th style="text-align:center;">${Counter} ${Title}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -154,6 +170,6 @@ if Counter==0:
|
||||
|
||||
% endfor
|
||||
##</div>
|
||||
<br/><br/>
|
||||
<script type="text/javascript" src="/vendor/d3js/d3.v3.min.js"></script>
|
||||
<script type="text/javascript" src="/js/programme.js"></script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,6 +8,9 @@ from slugify import slugify
|
||||
</a>
|
||||
<h3>Liste des tâches JM2L Staff</h3>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<div class="tabbable" id="main_tab">
|
||||
<ul class="nav nav-tabs" style="margin-bottom: 5px;">
|
||||
% for Num, Entity in enumerate(sorted(tasks.keys(), key=lambda x:x.name)):
|
||||
@@ -84,6 +87,8 @@ from slugify import slugify
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<%def name="jsAddOn()">
|
||||
<script>
|
||||
$('a[data-toggle="tab"]')
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<h1>Add a new task</h1>
|
||||
|
||||
<form action="/Staff/new" method="post">
|
||||
<input type="text" maxlength="100" name="name">
|
||||
<input type="submit" class="btn btn-primary" name="add" value="ADD" class="button">
|
||||
</form>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -15,6 +15,14 @@
|
||||
<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>
|
||||
</%def>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<a class="btn" href="${request.route_path('list_task', _anchor=form.name.data)}">
|
||||
<i class="icon-arrow-left"></i> Retour à la liste
|
||||
</a>
|
||||
|
||||
% if 'uid' in form._fields.keys():
|
||||
<h3>Editer un Pôle</h3>
|
||||
% else:
|
||||
@@ -34,11 +42,20 @@ DicForm = {
|
||||
<form action="/Staff/poles" method="post">
|
||||
%endif
|
||||
${helpers.DisplayForm(form, DicForm)}
|
||||
<input type="submit" class="btn btn-primary" />
|
||||
|
||||
<br>
|
||||
<center>
|
||||
<button type="submit" class="btn btn-large btn-primary" />
|
||||
<i class="icon-ok icon-white"></i> Enregistrer
|
||||
</button>
|
||||
</center>
|
||||
|
||||
</form>
|
||||
% if 'uid' in form._fields.keys():
|
||||
<center>
|
||||
${helpers.uploader("poles", form.uid.data, u"Attachement" )}
|
||||
</center>
|
||||
%endif
|
||||
<script>
|
||||
## var editor = CKEDITOR.replace( 'description', { autoGrow_onStartup: true, language: 'fr' } );
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -25,8 +25,14 @@
|
||||
<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>
|
||||
</%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>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<a class="btn" href="${request.route_path('list_task', _anchor=area)}">
|
||||
<i class="icon-arrow-left"></i> Retour à la liste
|
||||
</a>
|
||||
|
||||
% if 'uid' in form._fields.keys():
|
||||
<h3>Editer une tâche</h3>
|
||||
% else:
|
||||
@@ -49,8 +55,20 @@ DicForm = {
|
||||
<form action="/Staff/tasks" method="post">
|
||||
%endif
|
||||
${helpers.DisplayForm(form, DicForm)}
|
||||
<input type="submit" class="btn btn-primary" value="Valider" />
|
||||
|
||||
<br>
|
||||
<center>
|
||||
<button type="submit" class="btn btn-large btn-primary" />
|
||||
<i class="icon-ok icon-white"></i> Enregistrer
|
||||
</button>
|
||||
</center>
|
||||
|
||||
</form>
|
||||
% if 'uid' in form._fields.keys():
|
||||
<center>
|
||||
${helpers.uploader("tasks", form.uid.data, u"une pièce jointe" )}
|
||||
</center>
|
||||
%endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,33 +16,10 @@
|
||||
<noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript>
|
||||
</%def>
|
||||
<% from datetime import datetime %>
|
||||
<style>
|
||||
.borderbox {
|
||||
border: 1px solid #e1e4e5;
|
||||
margin: 1px 0 24px;
|
||||
color: #404040;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
overflow: auto;
|
||||
padding: 12px;
|
||||
background: none repeat scroll 0 0 #fcfcfc;
|
||||
font-family: "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;
|
||||
}
|
||||
.titleborderbox {
|
||||
background: none repeat scroll 0 0 #ffffff;
|
||||
border: 1px solid #eee;
|
||||
display: inline;
|
||||
left: 16px;
|
||||
padding: 2px 7px;
|
||||
position: relative;
|
||||
top: 10px;
|
||||
}
|
||||
.borderboxtime {
|
||||
float:right;
|
||||
padding:1px 15px;
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
|
||||
% if 'uid' in form._fields:
|
||||
<div class="borderboxtime">
|
||||
@@ -63,7 +40,7 @@
|
||||
% else:
|
||||
% for num, iterv in enumerate(event.intervenants):
|
||||
<li>
|
||||
<strong><a href="/MesJM2L?user=${iterv.uid}">${iterv.prenom} ${iterv.nom}</a></strong>.
|
||||
<strong><a href="/user/${iterv.slug}">${iterv.prenom} ${iterv.nom}</a></strong>.
|
||||
% if iterv.pseudo:
|
||||
(${iterv.pseudo})
|
||||
%endif
|
||||
@@ -125,56 +102,20 @@ DicForm = {
|
||||
<fieldset>
|
||||
<legend>Ajouter vos co-intervenants</legend>
|
||||
<p>
|
||||
Vous avez la possibilité d'être plusieurs pour un même évenement.
|
||||
Pour enregistrer une autre personne, deux cas peuvent se présenter:
|
||||
<ul>
|
||||
<li>Votre partenaire n'est pas inscrit sur le site</li>
|
||||
<p>
|
||||
Inscrivez son email avec son accord dans le champ suivant,
|
||||
Un mail lui sera envoyé pour qu'il procède à son inscription.
|
||||
Un fois son inscription effectué, reportez vous au deuxième cas.
|
||||
</p>
|
||||
<li>Votre partenaire est inscrit sur le site</li>
|
||||
<p>
|
||||
Demandez lui l'email utilisé lors de son inscription sur le site des JM2L.
|
||||
Complétez le champ suivant et validez.
|
||||
</p>
|
||||
</ul>
|
||||
Notez que les intervenants d'un même évenement ont tous les droits de modification.
|
||||
Vous avez la possibilité d'être plusieurs pour un même évenement.<br>
|
||||
Chacun des intervenants doit être inscrit sur le site.
|
||||
<form action="/MesJM2L/${form.for_year.data}/${form.event_type.data}/link" method="POST">
|
||||
${formAdd.event_uid}
|
||||
<input type="hidden" id="intervenant" name="intervenant" style="width:20em;"
|
||||
class="form-control select2-offscreen" tabindex="-1">
|
||||
</input>
|
||||
<button type="submit" class="btn btn-primary" />
|
||||
<i class="icon-plus icon-white"></i> Ajouter cet intervenant
|
||||
</button>
|
||||
</form>
|
||||
NB : Notez que les intervenants d'un même évenement ont tous les droits de modification.
|
||||
</p>
|
||||
<form action="/MesJM2L/${form.for_year.data}/${form.event_type.data}/link" method="POST">
|
||||
${formAdd.event_uid}
|
||||
<%
|
||||
TabFields = [
|
||||
( formAdd._fields["prenom"], u"Prénom", "padding-right:5px;float:left;" ),
|
||||
( formAdd._fields["nom"], u"Nom", "padding-right:5px;" ),
|
||||
( formAdd._fields["email"], u"son.mail@fqdn.tld", "padding-right:5px;" ),
|
||||
]
|
||||
%>
|
||||
% for Field, PlaceHolder, DivClass in TabFields:
|
||||
<div style="padding-right:5px;${DivClass}">
|
||||
<label for="${Field.label.field_id}">${Field.label.text}
|
||||
% if len(Field.description):
|
||||
<a id="${Field.label.field_id}-help" data-toggle="popover"
|
||||
data-original-title="${Field.label.text}"
|
||||
data-content="${Field.description}">
|
||||
<i class="icon-me" style="background-image: url('/img/Help.png');background-position:1px 2px;"></i>
|
||||
</a>
|
||||
% endif
|
||||
</label>
|
||||
% for error in Field.errors:
|
||||
<div class="alert alert-error">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<h4>Erreur!</h4>
|
||||
${ error }
|
||||
</div>
|
||||
% endfor
|
||||
${Field(placeholder=PlaceHolder, style="width:16em;")}
|
||||
</div>
|
||||
% endfor
|
||||
## Then the submit for this form
|
||||
${formAdd.add}
|
||||
</form>
|
||||
|
||||
</fieldset>
|
||||
<div class="clearfix"> </div>
|
||||
<p style="float:right;">Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}</p>
|
||||
@@ -186,27 +127,31 @@ TabFields = [
|
||||
<br/>
|
||||
<hr/>
|
||||
|
||||
% if 0:
|
||||
% if 'uid' in form._fields:
|
||||
${helpers.uploader_js()}
|
||||
% endif
|
||||
<script type="text/javascript">
|
||||
## Handle Popover of this form
|
||||
% for field in form._fields.keys():
|
||||
|
||||
$('#${field}-help').popover();
|
||||
% if form._fields[field].type=='SelectField':
|
||||
$('#${field}').select2({width:'resolve'});
|
||||
% endif
|
||||
%endfor
|
||||
% if formAdd:
|
||||
% for field in formAdd._fields.keys():
|
||||
$('#${field}-help').popover();
|
||||
%endfor
|
||||
% endif
|
||||
var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } );
|
||||
</script>
|
||||
% else:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%def name="jsAddOn()">
|
||||
<script src="/vendor/select2/js/select2.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$("#intervenant").select2(
|
||||
{
|
||||
placeholder: 'Entrez ici un Nom ou un Prénom',
|
||||
minimumInputLength: 2, allowClear: true,
|
||||
ajax: {
|
||||
quietMillis: 250, url: "/json-users", dataType: 'json',
|
||||
data: function (term, page) {
|
||||
return { pageSize: 8, pageNum: page, searchTerm: term };
|
||||
},
|
||||
results: function (data, page) {
|
||||
var more = (page * 8) < data.Total;
|
||||
return { results: data.Results, more: more };
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
<%
|
||||
for jsitem in form._fields.keys():
|
||||
context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem )
|
||||
@@ -216,5 +161,3 @@ if formAdd:
|
||||
for jsitem in formAdd._fields.keys():
|
||||
context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem )
|
||||
%>
|
||||
##${helpers.uploader_js()}
|
||||
% endif
|
||||
@@ -8,6 +8,11 @@
|
||||
<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>
|
||||
</%def>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
|
||||
<a class="pull-right" href="/categorie/entity">Editer les catégories</a>
|
||||
<br>
|
||||
<form action="" method="POST">
|
||||
@@ -30,18 +35,18 @@ DicForm = {
|
||||
<fieldset>
|
||||
<legend>Acteurs</legend>
|
||||
<div class="repeat">
|
||||
<table class="wrapper" width="100%">
|
||||
<table class="wrapper table table-striped table-bordered" width="100%">
|
||||
<thead>
|
||||
<tr class="row">
|
||||
<th style="width:5em;text-align:center;">Année</th>
|
||||
<th>Personne</th>
|
||||
<th style="width:22em;">Personne</th>
|
||||
<th style="width:22em;">Rôle</th>
|
||||
<th style="width:5em;">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="container">
|
||||
<tr class="row template" style="line-height:2.2em;">
|
||||
<td><span class="move btn btn-mini btn-info">Move</span></td>
|
||||
##<td><span class="move btn btn-mini btn-info">Move</span></td>
|
||||
<td>
|
||||
<select class="form-control" style="width:5em;" name="membership-{{row-count-placeholder}}-year_uid"
|
||||
id="membership-{{row-count-placeholder}}-year_uid">
|
||||
@@ -65,6 +70,7 @@ DicForm = {
|
||||
<option value="${opt.uid}">${opt.exch_subtype}</option>
|
||||
% endfor
|
||||
</select>
|
||||
<input type="text" class="form-control" name="membership-{{row-count-placeholder}}-role" />
|
||||
</td>
|
||||
<td>
|
||||
<span class="remove btn btn-mini btn-danger">
|
||||
@@ -74,7 +80,7 @@ DicForm = {
|
||||
</tr>
|
||||
% for num, dicdata in enumerate(form._fields.get("membership").data):
|
||||
<tr class="row" style="padding:5px;line-height:2.2em;">
|
||||
<td><span class="move btn btn-mini btn-info">Move</span></td>
|
||||
##<td><span class="move btn btn-mini btn-info">Move</span></td>
|
||||
<td style="text-align:center;">
|
||||
<input type="hidden" class="form-control" name="membership-${num}-year_uid"
|
||||
value="${dicdata.get('year_uid')}" style="width:4em;" />
|
||||
@@ -91,8 +97,6 @@ DicForm = {
|
||||
% endif
|
||||
</td>
|
||||
<td style="text-align:center;">
|
||||
<input type="hidden" class="form-control" name="membership-${num}-role"
|
||||
value="${dicdata.get('role')}" />
|
||||
<i>${dicdata.get('role', 'Aucun')}</i>
|
||||
</td>
|
||||
<td>
|
||||
@@ -140,13 +144,9 @@ DicForm = {
|
||||
<br>NB: Vous devez proposer votre entité avant de pouvoir
|
||||
téléverser des fichiers la concernant.
|
||||
% endif
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
##% if 'uid' in form._fields:
|
||||
## ${helpers.uploader_js()}
|
||||
##% endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%def name="jsAddOn()">
|
||||
<script src="/vendor/select2/js/select2.js"></script>
|
||||
@@ -154,7 +154,7 @@ DicForm = {
|
||||
<script src="/vendor/ckeditor/ckeditor.js"></script>
|
||||
<script type="text/javascript">
|
||||
var year_data = Array();
|
||||
##var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } );
|
||||
var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } );
|
||||
for (var i=2005;i<2015;i++)
|
||||
{ year_data[i.toString()] = i.toString(); };
|
||||
|
||||
@@ -190,7 +190,6 @@ jQuery(function() {
|
||||
}
|
||||
});
|
||||
$("#membership-"+ (numrow-1) +"-year_uid").select2({});
|
||||
$("#membership-"+ (numrow-1) +"-role").select2({});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,72 @@
|
||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
## Afficher un form
|
||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
<%def name="DisplayRespForm(form, DicFormat)">
|
||||
<%
|
||||
TabJs = {'select':[], 'desc':[]}
|
||||
%>
|
||||
<div class="row-fluid">
|
||||
% for FieldName, Field in form._fields.items():
|
||||
% if DicFormat.has_key(Field.name) and DicFormat[Field.name].get("Ignore"):
|
||||
<% continue %>
|
||||
% endif
|
||||
% if Field.type in ['HiddenField', 'CSRFTokenField']:
|
||||
${Field}
|
||||
<% continue %>
|
||||
% elif Field.type=="SelectField":
|
||||
<% TabJs['select'].append(Field.label.field_id) %>
|
||||
% endif
|
||||
<div class="${DicFormat[Field.name].get("ContainerClass")}">
|
||||
<label for="${Field.label.field_id}">${Field.label.text}
|
||||
% if Field.description:
|
||||
<% TabJs['desc'].append(Field.label.field_id) %>
|
||||
<a id="${Field.label.field_id}-help" data-toggle="popover"
|
||||
data-original-title="${Field.label.text}"
|
||||
data-content="${Field.description}">
|
||||
<i class="icon-me" style="background-image: url('/img/Help.png');background-position:1px 2px;"></i>
|
||||
</a>
|
||||
% endif
|
||||
</label>
|
||||
% if DicFormat.has_key(Field.name):
|
||||
<%
|
||||
PlaceHolder = DicFormat[Field.name].get("PlaceHolder")
|
||||
Class = [False,"ckeditor"][ "ckeditor" in DicFormat[Field.name] ]
|
||||
%>
|
||||
% if Field.type == "date":
|
||||
${Field(placeholder=PlaceHolder or False, class_="datepicker", style="width:100%" )}
|
||||
% else:
|
||||
${Field(placeholder=PlaceHolder or False, class_=Class, style="width:100%")}
|
||||
% endif
|
||||
% else:
|
||||
${Field(style="width:100%")}
|
||||
% endif
|
||||
% for error in Field.errors:
|
||||
<div class="alert alert-error">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<h4>Erreur!</h4>
|
||||
${ error }
|
||||
</div>
|
||||
% endfor
|
||||
</div>
|
||||
|
||||
% if DicFormat.has_key(Field.name) and DicFormat[Field.name].get("next")==True:
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
% endif
|
||||
|
||||
% endfor
|
||||
</div>
|
||||
<%
|
||||
for jsitem in TabJs['select']:
|
||||
context._kwargs['postpone_js'].append( "$('#%s').select2({});" % jsitem )
|
||||
for jsitem in TabJs['desc']:
|
||||
context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem )
|
||||
%>
|
||||
|
||||
</%def>
|
||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
## Afficher un form
|
||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
<%def name="DisplayForm(form, DicFormat)">
|
||||
<%
|
||||
TabJs = {'select':[], 'desc':[]}
|
||||
@@ -361,14 +427,12 @@ TabJs = {'select':[], 'desc':[]}
|
||||
## Wrapper pour les photos
|
||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
<%def name="show_my_pictures(uprofil)"> \
|
||||
<div class="profile-icon" style="float:right;height:250px;width:250px;">
|
||||
<div class="profile-icon">
|
||||
<% photos = uprofil.PhotosLinks %>
|
||||
<div style="text-align: center;line-height:20px;"><b>${request.user.slug}</b></div>
|
||||
<div style="text-align: center;line-height:20px;">
|
||||
<a data-target="#AjaxModal" Myhref="/2015/modal/Password/1" role="button" handle="modal">Changer mon mot de passe</a>
|
||||
</div>
|
||||
<div style="text-align: center;line-height:20px;">
|
||||
<a data-target="#AjaxModal" Myhref="/2015/modal/UserPicture/${uprofil.uid}" handle="modal">Changer ma photo</a>
|
||||
</div>
|
||||
<div id="MyPictureCarousel" class="carousel slide">
|
||||
% if len(photos)>1:
|
||||
<!-- Carousel nav -->
|
||||
@@ -376,24 +440,27 @@ TabJs = {'select':[], 'desc':[]}
|
||||
<a class="Ucarousel-control right" href="#MyPictureCarousel" data-slide="next">›</a>
|
||||
% endif
|
||||
<!-- Carousel items -->
|
||||
<div class="carousel-inner" style="height: 220px;">
|
||||
<div class="carousel-inner">
|
||||
% if len(photos):
|
||||
% for num, link in enumerate(photos):
|
||||
<div class="${['','active '][num==0]}item" id="UserPic${num}">
|
||||
<div style="margin:auto;">
|
||||
<img src="${link}" class="img-polaroid" style="max-height:205px;max-width:235px;" alt="Photo ${uprofil.slug}" />
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<img src="${link}" class="img-polaroid" style="max-height:310px;" alt="Photo ${uprofil.slug}" />
|
||||
</div>
|
||||
</div>
|
||||
% endfor
|
||||
% else:
|
||||
<div class="active item" id="UserPic0">
|
||||
<div style="margin:auto;width:170px;">
|
||||
<img src="/img/default-user.png" class="img-polaroid" alt="Photo ${uprofil.slug}" style="max-height:205px;" />
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<img src="/img/default-user.png" style="max-height:310px;" class="img-polaroid" alt="Photo ${uprofil.slug}" />
|
||||
</div>
|
||||
</div>
|
||||
% endif
|
||||
</div>
|
||||
</div>
|
||||
<div style="text-align: center;line-height:20px;">
|
||||
<a data-target="#AjaxModal" Myhref="/2015/modal/UserPicture/${uprofil.uid}" handle="modal">Changer ma photo</a>
|
||||
</div>
|
||||
</div>
|
||||
</%def> \
|
||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
<div class="tabbable" id="main_tab">
|
||||
<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>
|
||||
@@ -149,5 +150,6 @@
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
##${h.uploader_js()}
|
||||
|
||||
@@ -21,12 +21,15 @@
|
||||
<link rel="stylesheet" href="/static/ie6.css" type="text/css" media="screen" charset="utf-8" />
|
||||
<![endif]-->
|
||||
<script src="/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>
|
||||
${self.cssAddOn()}
|
||||
${self.jsAddOn_head()}
|
||||
</head>
|
||||
<body>
|
||||
<%
|
||||
context._kwargs['postpone_js']=[]
|
||||
DisplayYear = request.session.get('year', 2015)
|
||||
%>
|
||||
<%def name="jsAddOn_head()"></%def>
|
||||
<%def name="jsAddOn()"></%def>
|
||||
<%def name="cssAddOn()"></%def>
|
||||
${helpers.uploader_js()}
|
||||
@@ -36,8 +39,10 @@ ${helpers.uploader_js()}
|
||||
% if DisplayYear!=2015:
|
||||
## style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;">
|
||||
<div class="align-center">
|
||||
<a href="/">
|
||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
% else:
|
||||
<!-- Carousel
|
||||
@@ -51,14 +56,28 @@ ${helpers.uploader_js()}
|
||||
</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>
|
||||
|
||||
<a href="/">
|
||||
<div style="height:215px;background: url(/img/2015/logo.png) no-repeat scroll center center transparent"></div>
|
||||
</a>
|
||||
<div class="carousel-vote">
|
||||
<a href="#" class="btn btn-primary">Je vote pour ce logo !</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % 2013} ) no-repeat scroll center center transparent"></div>
|
||||
<a href="/">
|
||||
<div style="height:215px;background: url(/img/2015/logo_1.png) no-repeat scroll center center transparent"></div>
|
||||
</a>
|
||||
<div class="carousel-vote">
|
||||
<a href="#" class="btn btn-primary">Je vote pour ce logo !</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div style="height:215px;background: url( ${"/img/%s/logo.png" % 2012} ) no-repeat scroll center center transparent"></div>
|
||||
<a href="/">
|
||||
<div style="height:215px;background: url(/img/2015/logo_2.png) no-repeat scroll center center transparent"></div>
|
||||
</a>
|
||||
<div class="carousel-vote">
|
||||
<a href="#" class="btn btn-primary">Je vote pour ce logo !</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a class="left Tcarousel-control" href="#TitleCarousel" role="button" data-slide="prev">
|
||||
@@ -107,16 +126,17 @@ ${helpers.uploader_js()}
|
||||
<li><a href="/participer-l-evenement#inscription">Je m'inscris</a></li>
|
||||
<li><a href="/sign/login">Je m'identifie</a></li>
|
||||
% endif
|
||||
<li>Mode
|
||||
<span class="visible-phone"> ✔ Phone</span>
|
||||
<span class="visible-tablet"> ✔ Tablet</span>
|
||||
<span class="visible-desktop"> ✔ Desktop</span>
|
||||
</li>
|
||||
## <li>Mode
|
||||
## <span class="visible-phone"> ✔ Phone</span>
|
||||
## <span class="visible-tablet"> ✔ Tablet</span>
|
||||
## <span class="visible-desktop"> ✔ Desktop</span>
|
||||
## </li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="nav nav-pills pull-right">
|
||||
<ul class="nav nav-pills pull-right">
|
||||
<li class="${accueil or ''}"><a href="/">Accueil</a></li>
|
||||
<li class="${programme or ''}"><a href="/${DisplayYear}/le-programme">Programme</a></li>
|
||||
<li class="${presse or ''}"><a href="/${DisplayYear}/dossier-de-presse">Presse</a></li>
|
||||
<li class="${plan or ''}"><a href="/nous-rejoindre">Contact et Plan</a></li>
|
||||
@@ -135,17 +155,20 @@ ${helpers.uploader_js()}
|
||||
</div>
|
||||
</div>
|
||||
<div id="bottom">
|
||||
% for type, message in request.session.pop_flash():
|
||||
<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>
|
||||
<br>
|
||||
<div class="span6 offset3">
|
||||
<div class="alert alert-${type}">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
${message}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
% endfor
|
||||
<div class="container-fluid">
|
||||
<!--Body content-->
|
||||
${next.body()}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -161,9 +184,12 @@ ${helpers.uploader_js()}
|
||||
+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> ~
|
||||
Conception et construction en <a href="http://git.linux-azur.org/JM2L/jm2l/src/master">DIY</a> ~
|
||||
Hébergé par <a href="http://www.heberg-24.com/"> Heberg24 </a>
|
||||
</p>
|
||||
<p>
|
||||
Vous avez trouvé un bug ? <a href="http://git.linux-azur.org/JM2L/jm2l/issues">Reportez le ici</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<a class="pull-right" href="/categorie/entity">Editer les catégories</a>
|
||||
<br>
|
||||
<div class="tabbable" id="main_tab">
|
||||
@@ -31,16 +34,16 @@
|
||||
<img src="${img_path}" alt="logo" />
|
||||
% endfor
|
||||
</td>
|
||||
<td style="text-align:center;">
|
||||
${entity.get_entity_type.entity_subtype}
|
||||
</td>
|
||||
<td style="position: relative;">
|
||||
${Entity_Type}, ${entity.get_entity_type.entity_subtype}<br>
|
||||
<strong>
|
||||
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}">${entity.name}</a>
|
||||
</strong>
|
||||
% if request.user.Staff:
|
||||
<span style="float:right;">
|
||||
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}/edit">edit</a>
|
||||
</span>
|
||||
% endif
|
||||
</td>
|
||||
</tr>
|
||||
% endfor
|
||||
@@ -49,3 +52,6 @@
|
||||
</div>
|
||||
% endfor
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -3,43 +3,55 @@
|
||||
.navbar {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
#bottom {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
.form-signin {
|
||||
max-width: 300px;
|
||||
padding: 19px 29px 29px;
|
||||
margin: 0 auto 20px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #e5e5e5;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
max-width: 300px;
|
||||
padding: 19px 29px 29px;
|
||||
margin: 0 auto 20px;
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #e5e5e5;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
}
|
||||
.form-signin .form-signin-heading,
|
||||
.form-signin,
|
||||
.form-signin .checkbox {
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.form-signin-heading {
|
||||
margin: -15px;
|
||||
text-align:center;
|
||||
}
|
||||
.form-signin input[type="text"],
|
||||
.form-signin input[type="password"] {
|
||||
font-size: 16px;
|
||||
height: auto;
|
||||
margin-bottom: 15px;
|
||||
padding: 7px 9px;
|
||||
font-size: 16px;
|
||||
height: auto;
|
||||
width:100%;
|
||||
margin-bottom: 15px;
|
||||
padding: 7px 9px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<br>
|
||||
<div class="container">
|
||||
% if forgot:
|
||||
<form class="form-signin" action="/sign/forgot" method="post">
|
||||
<h3 class="form-signin-heading">Mes identifiants</h3>
|
||||
<hr>
|
||||
<input name="mail" type="text" class="input-block-level" placeholder="Mon adresse email">
|
||||
<button class="btn btn-primary btn-block" type="submit">Me renvoyer mes identifiants</button>
|
||||
</form>
|
||||
% else:
|
||||
<form class="form-signin" action="/sign/in" method="post">
|
||||
<h2 class="form-signin-heading">Me connecter</h2>
|
||||
<h3 class="form-signin-heading">Me connecter</h3>
|
||||
<hr>
|
||||
<input name="username" type="text" class="input-block-level" placeholder="Nom">
|
||||
<input name="password" type="password" class="input-block-level" placeholder="Mot de passe">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" value="remember-me"> Remember me
|
||||
</label>
|
||||
<button class="btn btn-large btn-primary" type="submit">S'identifier</button>
|
||||
<center><button class="btn btn-large btn-primary btn-block" type="submit">S'identifier</button></center>
|
||||
<br>
|
||||
<a href="/sign/forgot">Je ne me souviens plus de mon mot de passe</a>
|
||||
</form>
|
||||
% endif
|
||||
</div>
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="ModalForm" action="javascript:DoPost('/2015/modal/Password/${uid}');" style='margin:0;'>
|
||||
<div class="description">Votre identifiant est <b>${request.user.slug}</b>
|
||||
<div class="description">Pour modifier le mot de passe actuel,
|
||||
entrez un nouveau mot de passe dans chacune des deux zones de texte.
|
||||
</div>
|
||||
|
||||
@@ -1,35 +1,14 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<style>
|
||||
.borderbox {
|
||||
border: 1px solid #e1e4e5;
|
||||
margin: 1px 0 24px;
|
||||
color: #404040;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
overflow: auto;
|
||||
padding: 12px;
|
||||
background: none repeat scroll 0 0 #fcfcfc;
|
||||
font-family: "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;
|
||||
}
|
||||
.titleborderbox {
|
||||
background: none repeat scroll 0 0 #ffffff;
|
||||
border: 1px solid #eee;
|
||||
display: inline;
|
||||
left: 16px;
|
||||
padding: 2px 7px;
|
||||
position: relative;
|
||||
top: 10px;
|
||||
}
|
||||
.borderboxtime {
|
||||
float:right;
|
||||
padding:1px 15px;
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
</style>
|
||||
% if request.user and DispUser.uid==request.user.uid or request.user.uid==1:
|
||||
% if request.user and request.user.uid==1:
|
||||
<a style="float:right;" href="/MesJM2L?user=${DispUser.uid}">Editer</a>
|
||||
% elif request.user and DispUser.uid==request.user.uid:
|
||||
<a style="float:right;" href="/MesJM2L">Editer</a>
|
||||
% endif
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
|
||||
<h2>${DispUser.prenom} ${DispUser.nom}</h2>
|
||||
|
||||
<div style="display: inline-block;">
|
||||
@@ -75,3 +54,5 @@
|
||||
<hr/>
|
||||
<p style="float:right;">Créé le ${DispUser.created.strftime('%d %b %Y').decode('utf-8')}</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<strong>${event.event_type}</strong>:
|
||||
<div class="borderboxtime">
|
||||
${event.start_time.strftime('%d %b %Y').decode('utf-8')} -
|
||||
@@ -10,7 +15,11 @@ ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')}
|
||||
%if event.event_uid:
|
||||
<a href="http://jm2l.linux-azur.org/node/${event.event_uid}">Link</a> -
|
||||
%endif
|
||||
% if event.for_year==2015 and (request.user.Staff or request.user in event.intervenants):
|
||||
<a href="/MesJM2L/${event.for_year}/${event.event_type}/${event.slug}">Editer</a>
|
||||
% elif request.user.Staff:
|
||||
<a href="/MesJM2L/${event.for_year}/${event.event_type}/${event.slug}">Editer</a>
|
||||
% endif
|
||||
<h3 style="line-height:30px;">${event.name}</h3>
|
||||
|
||||
% if event.description :
|
||||
@@ -42,28 +51,29 @@ ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')}
|
||||
% if iterv.pseudo:
|
||||
(${iterv.pseudo})
|
||||
%endif
|
||||
</div>
|
||||
<div class="intervbox borderbox">
|
||||
% if iterv.PhotosLinks:
|
||||
<div style="float:right;padding:5px;border: 1px solid #eee;background-color:white;">
|
||||
% for img_path in iterv.PhotosLinks:
|
||||
<img src="${img_path}" alt="logo" />
|
||||
% endfor
|
||||
</div>
|
||||
% endif
|
||||
% if iterv.bio:
|
||||
${iterv.bio | n}
|
||||
%endif
|
||||
</div>
|
||||
% if iterv.website:
|
||||
<div class="media borderbox">
|
||||
${helpers.show_pictures(iterv)}
|
||||
<div class="media-body">
|
||||
% if iterv.bio:
|
||||
${iterv.bio | n}
|
||||
% else:
|
||||
<i>Ce profil n'a pas été complété.</i>
|
||||
% endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="footborderbox">
|
||||
<a href="http://${iterv.website}">${iterv.website}</a>
|
||||
% if iterv.website:
|
||||
<div style="float:right;">
|
||||
<a href="http://${iterv.website}">${iterv.website}</a>
|
||||
</div>
|
||||
% endif
|
||||
</div>
|
||||
%endif
|
||||
</p>
|
||||
% endfor
|
||||
<div class="clearfix"> </div>
|
||||
<p style="float:right;">Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}</p>
|
||||
<br/>
|
||||
<hr/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||
|
||||
<% The_entity_type = entity.get_entity_type %>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
<strong>${The_entity_type.entity_type}</strong>
|
||||
% if The_entity_type.entity_subtype!=The_entity_type.entity_type:
|
||||
${The_entity_type.entity_subtype}
|
||||
@@ -12,7 +16,9 @@ ${The_entity_type.entity_subtype}
|
||||
%if entity.tiers_id:
|
||||
<a href="http://jm2l.linux-azur.org/node/${entity.tiers_id}">Link</a> -
|
||||
%endif
|
||||
% if (request.user.Staff or request.user in entity.members):
|
||||
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}/edit">Editer</a>
|
||||
% endif
|
||||
<div clear='both'></div>
|
||||
<div>
|
||||
<a style="float:right;" href="/entities">Liste des entités</a>
|
||||
@@ -57,24 +63,28 @@ ${The_entity_type.entity_subtype}
|
||||
(${iterv.pseudo})
|
||||
%endif
|
||||
</div>
|
||||
<div class="borderbox">
|
||||
% if iterv.PhotosLinks:
|
||||
<div style="float:right;padding:5px;border: 1px solid #eee;background-color:white;">
|
||||
% for img_path in iterv.PhotosLinks:
|
||||
<img src="${img_path}" alt="logo" />
|
||||
<div class="media borderbox">
|
||||
${helpers.show_pictures(iterv)}
|
||||
<div class="media-body">
|
||||
<ul>
|
||||
% for i in filter(lambda x:x.user_uid==iterv.uid and x.tiers_uid==entity.uid, entity.membership):
|
||||
<li>${i.year_uid} ${i.role}</li>
|
||||
% endfor
|
||||
</ul>
|
||||
% if iterv.bio:
|
||||
${iterv.bio | n}
|
||||
% else:
|
||||
<i>Ce profil n'a pas été complété.</i>
|
||||
% endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="footborderbox">
|
||||
% if iterv.website:
|
||||
<div style="float:right;">
|
||||
<a href="http://${iterv.website}">${iterv.website}</a>
|
||||
</div>
|
||||
% endif
|
||||
|
||||
% if iterv.bio:
|
||||
${iterv.bio | n}
|
||||
%endif
|
||||
% if iterv.website:
|
||||
<div style="float:right;">
|
||||
<a href="http://${iterv.website}">${iterv.website}</a>
|
||||
</div>
|
||||
%endif
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
% endfor
|
||||
|
||||
@@ -82,3 +92,5 @@ ${The_entity_type.entity_subtype}
|
||||
<br/>
|
||||
<hr/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,6 +1,10 @@
|
||||
<%inherit file="jm2l:templates/layout.mako"/>
|
||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1">
|
||||
|
||||
% if request.user and (DispUser.uid==request.user.uid or request.user.uid==1):
|
||||
<a style="float:right;" href="/MesJM2L?user=${DispUser.uid}">Editer</a>
|
||||
% endif
|
||||
@@ -43,3 +47,5 @@
|
||||
% endif
|
||||
<p style="float:right;">Créé le ${DispUser.created.strftime('%d %b %Y').decode('utf-8')}</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -96,6 +96,9 @@ class MediaPath():
|
||||
elif media_table=='tasks':
|
||||
# Use Current Year
|
||||
p = IMAGEPATH + [ str(2015), media_table ] + [ linked_id ]
|
||||
elif media_table=='poles':
|
||||
# Use Current Year
|
||||
p = IMAGEPATH + [ str(2015), media_table ] + [ linked_id ]
|
||||
elif media_table in ['RIB', 'Justif']:
|
||||
slug = User.by_id(linked_id).slug
|
||||
p = IMAGEPATH + ['users'] + [ slug ] + [ self.media_table ]
|
||||
|
||||
@@ -195,7 +195,7 @@ def JSON_TimeLine_Request(request):
|
||||
"text":"<i><span class='c1'>9ème Édition</span></i>",
|
||||
"asset":
|
||||
{
|
||||
"media":"",
|
||||
"media":"https://www.youtube.com/watch?v=DnfjrxVoLao",
|
||||
"credit":"JM2L",
|
||||
"caption":""
|
||||
}
|
||||
@@ -208,8 +208,7 @@ def JSON_TimeLine_Request(request):
|
||||
## =-=- Here, We handle HTTP requests - Public Part -=-=
|
||||
@view_config(route_name='home', renderer="jm2l:templates/NewIndex.mako")
|
||||
def index_page(request):
|
||||
MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'',
|
||||
"logged_in":request.authenticated_userid }
|
||||
MainTab = {'accueil':'active', "logged_in":request.authenticated_userid }
|
||||
return MainTab
|
||||
|
||||
@view_config(route_name='programme', renderer="jm2l:templates/Public/Programme.mako")
|
||||
@@ -230,7 +229,7 @@ def programme(request):
|
||||
RefDay = datetime.datetime.strptime(day[0],'%d-%m-%Y')
|
||||
ListDay.append( ( RefDay.strftime('%A %d %b %Y'),
|
||||
RefDay.strftime('%d') ) )
|
||||
MainTab = {'programme':'active','presse':'', 'plan':'', 'participer':'', 'DisplayYear':year, \
|
||||
MainTab = {'programme':'active','DisplayYear':year, \
|
||||
'Events':Events, 'Event':Event, 'Days':ListDay, "logged_in":request.authenticated_userid }
|
||||
return MainTab
|
||||
|
||||
@@ -238,8 +237,7 @@ def programme(request):
|
||||
def static_presse(request):
|
||||
year = int(request.matchdict.get('year', None))
|
||||
content = DBSession.query(JM2L_Year).filter(JM2L_Year.year_uid==year).first()
|
||||
MainTab = {'programme':'','presse':'active', 'plan':'', 'participer':'',
|
||||
"logged_in":request.authenticated_userid, 'content':content, 'DisplayYear':year}
|
||||
MainTab = {'presse':'active', "logged_in":request.authenticated_userid, 'content':content, 'DisplayYear':year}
|
||||
return MainTab
|
||||
|
||||
@view_config(route_name='edit_presse', renderer="jm2l:templates/Staff/EditPresse.mako")
|
||||
@@ -249,15 +247,13 @@ def edit_presse(request):
|
||||
form = DossPresse(request.POST, content, meta={'csrf_context': request.session})
|
||||
if request.method == 'POST' and form.validate():
|
||||
form.populate_obj(content)
|
||||
MainTab = {'programme':'','presse':'active', 'plan':'', 'participer':'',
|
||||
"logged_in":request.authenticated_userid, 'form':form, 'DisplayYear':year}
|
||||
MainTab = {'presse':'active', "logged_in":request.authenticated_userid, 'form':form, 'DisplayYear':year}
|
||||
|
||||
return MainTab
|
||||
|
||||
@view_config(route_name='plan', renderer="jm2l:templates/Public/Plan.mako")
|
||||
def static_plan(request):
|
||||
MainTab = {'programme':'','presse':'', 'plan':'active', 'participer':'',
|
||||
"logged_in":request.authenticated_userid }
|
||||
MainTab = {'plan':'active', "logged_in":request.authenticated_userid }
|
||||
return MainTab
|
||||
|
||||
## =-=- Here, We handle HTTP requests - Staff Logged Part -=-=
|
||||
@@ -272,7 +268,6 @@ def list_view(request):
|
||||
DicTask[grp] = tasks
|
||||
return {'tasks': DicTask }
|
||||
|
||||
|
||||
@view_config(route_name='handle_task', renderer='jm2l:templates/Staff/tasks.mako')
|
||||
def tasks(request):
|
||||
task_id = request.matchdict.get('task_id')
|
||||
@@ -319,7 +314,6 @@ def tasks(request):
|
||||
return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Task.area.name))
|
||||
return {'form':form, 'area':slugify(Areas[Task.area_uid-1].name)}
|
||||
|
||||
|
||||
@view_config(route_name='handle_pole', renderer='jm2l:templates/Staff/pole.mako')
|
||||
def tasks_area(request):
|
||||
pole_id = request.matchdict.get('pole_id')
|
||||
@@ -337,7 +331,7 @@ def tasks_area(request):
|
||||
DBSession.merge(Pole)
|
||||
else:
|
||||
DBSession.add(Pole)
|
||||
return HTTPFound(location=request.route_url('list_task'))
|
||||
return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Pole.name))
|
||||
return {'form':form }
|
||||
|
||||
@view_config(route_name='action_task')
|
||||
@@ -347,10 +341,11 @@ def action_task(request):
|
||||
Task = Tasks.by_id(int(task_id))
|
||||
if action=='close':
|
||||
Task.closed = True
|
||||
request.session.flash(('info','Task was successfully closed!'))
|
||||
if action=='open':
|
||||
Task.closed = False
|
||||
request.session.flash(('info','Task was successfully re-opened!'))
|
||||
DBSession.merge(Task)
|
||||
request.session.flash('Task was successfully closed!')
|
||||
return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Task.area.name))
|
||||
|
||||
|
||||
@@ -404,6 +399,15 @@ def exchange(request):
|
||||
}
|
||||
return MainTab
|
||||
|
||||
@view_config(route_name='sejour')
|
||||
def sejour(request):
|
||||
if request.user is None:
|
||||
# Don't answer to users that aren't logged
|
||||
return HTTPUnauthorized('You have to be logged to hope an answer.')
|
||||
if request.method == 'POST':
|
||||
print request.POST
|
||||
return HTTPFound(location='/MesJM2L#Sejour')
|
||||
|
||||
@view_config(route_name='jm2l', renderer="jm2l:templates/jm2l.mako")
|
||||
def jm2l_page(request):
|
||||
if request.user is None:
|
||||
@@ -443,6 +447,7 @@ def jm2l_page(request):
|
||||
profil.last_change = datetime.datetime.utcnow()
|
||||
profil.slug = slugify(remove_accents('%s %s' % (profil.prenom, profil.nom)).lower().strip())
|
||||
DBSession.merge(profil)
|
||||
request.session.flash(('info',u'Votre fiche a été mise à jour avec succès'))
|
||||
MainTab = {'participer':'active',
|
||||
'Places':Place.get_list(False),
|
||||
'DBTiers':Tiers,
|
||||
@@ -466,6 +471,8 @@ def Modal(request):
|
||||
response = render_to_response('jm2l:templates/modals_js.mako',
|
||||
{'modtype':modtype},
|
||||
request=request)
|
||||
request.user.password = form.password.data
|
||||
DBSession.merge(request.user)
|
||||
response.content_type = 'text/javascript'
|
||||
return response
|
||||
if modtype=='UserPicture':
|
||||
@@ -681,8 +688,6 @@ def participer(request):
|
||||
message.add_bcc("spam@style-python.fr")
|
||||
mailer.send(message)
|
||||
|
||||
|
||||
|
||||
MainTab = {'programme':'','presse':'', 'plan':'',
|
||||
'participer':'active', 'form':form, "link": MyLink,
|
||||
'logged_in':request.authenticated_userid }
|
||||
@@ -724,24 +729,19 @@ def link_event(request):
|
||||
form = AddIntervenant(request.POST, meta={'csrf_context': request.session})
|
||||
intervention = request.matchdict.get('intervention', None)
|
||||
TargetEvent = Event.by_id(form.event_uid.data)
|
||||
Exist = DBSession.query(User)\
|
||||
.filter(User.nom==form.nom.data)\
|
||||
.filter(User.prenom==form.prenom.data)\
|
||||
.first()
|
||||
if Exist:
|
||||
TargetUser = Exist
|
||||
Exist = User.by_id(form.intervenant.data)
|
||||
if not Exist:
|
||||
request.session.flash(('error',u"Une erreur s'est produite lors de l'ajout de votre intervenant !"))
|
||||
return HTTPFound(location=request.route_url('edit_event', sep='/',
|
||||
year=str(year), intervention=intervention, event_id=str(TargetEvent.uid)))
|
||||
else:
|
||||
# Add it to user base
|
||||
TargetUser = User(nom=form.nom.data,
|
||||
prenom=form.prenom.data, password=form.nom.data)
|
||||
DBSession.add(TargetUser)
|
||||
DBSession.flush()
|
||||
TargetUser = Exist
|
||||
|
||||
uev = User_Event(year_uid=year, role="Animateur", user_uid=TargetUser.uid)
|
||||
uev = User_Event(year_uid=year, role=u"Animateur d'un évenement JM2L", user_uid=TargetUser.uid)
|
||||
TargetEvent.interventions.append( uev )
|
||||
|
||||
return HTTPFound(location=request.route_url('edit_event', sep='/',
|
||||
year=str(year), intervention=intervention, uid=str(TargetEvent.uid)))
|
||||
year=str(year), intervention=intervention, event_id=str(TargetEvent.uid)))
|
||||
|
||||
@view_config(route_name='edit_event', renderer="jm2l:templates/edit_event.mako")
|
||||
def edit_event(request):
|
||||
@@ -756,13 +756,13 @@ def edit_event(request):
|
||||
raise HTTPNotFound(u"Ce type d'évenement n'est pas reconnu")
|
||||
TheYear = DBSession.query(JM2L_Year)\
|
||||
.filter(JM2L_Year.year_uid==year)\
|
||||
.all()
|
||||
.first()
|
||||
# Check year avaibility
|
||||
if not TheYear:
|
||||
raise HTTPNotFound(u"Cette année n'est pas pris en charge")
|
||||
# Generate Timeslots for current year
|
||||
TimeSlots = list(enumerate( [ x.strftime('%a %d %b %H:%M') for x in
|
||||
TheYear[0].AvailableTimeSlots ] ))
|
||||
TheYear.AvailableTimeSlots ] ))
|
||||
|
||||
if event_id:
|
||||
# We try to update an existing record
|
||||
@@ -778,8 +778,8 @@ def edit_event(request):
|
||||
if request.user is None or not (request.user.Staff or request.user in TheEvent.intervenants):
|
||||
return HTTPForbidden(u"Vous n'êtes pas identifié comme étant un participant à cette intervention.")
|
||||
# Compute some field value from selected event
|
||||
if TheEvent.start_time in TheYear[0].AvailableTimeSlots:
|
||||
start_sel = TheYear[0].AvailableTimeSlots.index(TheEvent.start_time)
|
||||
if TheEvent.start_time in TheYear.AvailableTimeSlots:
|
||||
start_sel = TheYear.AvailableTimeSlots.index(TheEvent.start_time)
|
||||
else:
|
||||
start_sel = len(TimeSlots)
|
||||
TimeSlots.append( (len(TimeSlots), TheEvent.start_time.strftime('%a %d %b %H:%M')))
|
||||
@@ -793,6 +793,14 @@ def edit_event(request):
|
||||
form.description.label.text += IntervLabel
|
||||
# Each event can get severals members
|
||||
formAdd = AddIntervenant(event_uid=TheEvent.uid)
|
||||
# Build list of intervenant
|
||||
# Get users from db
|
||||
Users = DBSession.query(User)\
|
||||
.filter(User.Staff==1)\
|
||||
.order_by('nom').all()
|
||||
# Put some users on form
|
||||
formAdd.intervenant.choices = [(u.uid, "%s %s" % (u.nom, u.prenom))
|
||||
for u in Users]
|
||||
else:
|
||||
TheEvent = Event()
|
||||
# prepare the form for creation
|
||||
@@ -845,7 +853,7 @@ def edit_event(request):
|
||||
|
||||
if request.method == 'POST' and form.validate():
|
||||
form.populate_obj(TheEvent)
|
||||
TheEvent.start_time = TheYear[0].AvailableTimeSlots[form.start_sel.data]
|
||||
TheEvent.start_time = TheYear.AvailableTimeSlots[form.start_sel.data]
|
||||
TheEvent.end_time = TheEvent.start_time + datetime.timedelta(minutes=form.duration.data)
|
||||
# Ok, time to put in database
|
||||
if not form._fields.has_key("uid"):
|
||||
@@ -857,6 +865,7 @@ def edit_event(request):
|
||||
uev.user_uid = request.user.uid
|
||||
TheEvent.interventions.append( uev )
|
||||
DBSession.flush()
|
||||
request.session.flash(('sucess','Votre intervention a été créee !'))
|
||||
return HTTPFound(location=request.route_url('edit_event', sep='/',
|
||||
year=str(year), intervention=intervention, event_id=str(TheEvent.slug)))
|
||||
else:
|
||||
@@ -898,8 +907,7 @@ def show_tiers(request):
|
||||
return MainTab
|
||||
|
||||
@view_config(route_name='add_entity', renderer="jm2l:templates/edit_tiers.mako")
|
||||
@view_config(route_name='edit_entity', renderer="jm2l:templates/edit_tiers.mako",
|
||||
permission='edit')
|
||||
@view_config(route_name='edit_entity', renderer="jm2l:templates/edit_tiers.mako")
|
||||
def edit_tiers(request):
|
||||
entity_id = request.matchdict.get('entity_id', None)
|
||||
TargetList = list()
|
||||
@@ -1049,7 +1057,6 @@ def show_user(request):
|
||||
'DispUser':DispUser, 'logged_in':request.authenticated_userid }
|
||||
return MainTab
|
||||
|
||||
|
||||
#@view_config(route_name='link_user_entity')
|
||||
def link_user_entity(request):
|
||||
uid = int(request.matchdict.get('uid', -1))
|
||||
|
||||