diff --git a/jm2l/__init__.py b/jm2l/__init__.py index b31ef08..01b1148 100644 --- a/jm2l/__init__.py +++ b/jm2l/__init__.py @@ -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 diff --git a/jm2l/auth.py b/jm2l/auth.py index 135035b..ca60575 100644 --- a/jm2l/auth.py +++ b/jm2l/auth.py @@ -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) diff --git a/jm2l/forms.py b/jm2l/forms.py index 304a060..51a40a4 100644 --- a/jm2l/forms.py +++ b/jm2l/forms.py @@ -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): diff --git a/jm2l/static/css/jm2l.css b/jm2l/static/css/jm2l.css index 98da619..bea0209 100644 --- a/jm2l/static/css/jm2l.css +++ b/jm2l/static/css/jm2l.css @@ -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; diff --git a/jm2l/static/css/pylons.css b/jm2l/static/css/pylons.css index 2ddc665..13e4e75 100644 --- a/jm2l/static/css/pylons.css +++ b/jm2l/static/css/pylons.css @@ -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;} diff --git a/jm2l/static/favicon.ico b/jm2l/static/favicon.ico index ddcdbf2..a4c5246 100644 Binary files a/jm2l/static/favicon.ico and b/jm2l/static/favicon.ico differ diff --git a/jm2l/static/img/2015/logo_1.png b/jm2l/static/img/2015/logo_1.png new file mode 100644 index 0000000..a707ab4 Binary files /dev/null and b/jm2l/static/img/2015/logo_1.png differ diff --git a/jm2l/static/img/2015/logo_2.png b/jm2l/static/img/2015/logo_2.png new file mode 100644 index 0000000..7f6170f Binary files /dev/null and b/jm2l/static/img/2015/logo_2.png differ diff --git a/jm2l/static/img/chev-left.png b/jm2l/static/img/chev-left.png new file mode 100644 index 0000000..e48b2ee Binary files /dev/null and b/jm2l/static/img/chev-left.png differ diff --git a/jm2l/static/img/chev-right.png b/jm2l/static/img/chev-right.png new file mode 100644 index 0000000..177c924 Binary files /dev/null and b/jm2l/static/img/chev-right.png differ diff --git a/jm2l/static/img/chevrons.png b/jm2l/static/img/chevrons.png new file mode 100644 index 0000000..3b02c98 Binary files /dev/null and b/jm2l/static/img/chevrons.png differ diff --git a/jm2l/static/img/puce.png b/jm2l/static/img/puce.png new file mode 100644 index 0000000..8e0d9dd Binary files /dev/null and b/jm2l/static/img/puce.png differ diff --git a/jm2l/static/img/shadow.svg b/jm2l/static/img/shadow.svg index 05fe88a..1f6a7a0 100644 --- a/jm2l/static/img/shadow.svg +++ b/jm2l/static/img/shadow.svg @@ -24,5 +24,9 @@ + + + + \ No newline at end of file diff --git a/jm2l/static/img/svg-icon.png b/jm2l/static/img/svg-icon.png new file mode 100644 index 0000000..b16d2a1 Binary files /dev/null and b/jm2l/static/img/svg-icon.png differ diff --git a/jm2l/static/js/programme.js b/jm2l/static/js/programme.js index 2ac8a16..3ee7a3d 100644 --- a/jm2l/static/js/programme.js +++ b/jm2l/static/js/programme.js @@ -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 '
' + d.desc + '
' }) .transition() diff --git a/jm2l/static/vendor/datepicker/bootstrap-datepicker.js b/jm2l/static/vendor/datepicker/bootstrap-datepicker.js new file mode 100644 index 0000000..bf3a56d --- /dev/null +++ b/jm2l/static/vendor/datepicker/bootstrap-datepicker.js @@ -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 = ''; + while (dowCnt < this.weekStart + 7) { + html += ''+DPGlobal.dates.daysMin[(dowCnt++)%7]+''; + } + html += ''; + this.picker.find('.datepicker-days thead').append(html); + }, + + fillMonths: function(){ + var html = ''; + var i = 0 + while (i < 12) { + html += ''+DPGlobal.dates.monthsShort[i++]+''; + } + 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(''); + } + 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(''+prevMonth.getDate() + ''); + if (prevMonth.getDay() === this.weekEnd) { + html.push(''); + } + 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 += ''+year+''; + 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: ''+ + ''+ + '‹'+ + ''+ + '›'+ + ''+ + '', + contTemplate: '' + }; + DPGlobal.template = ''; + +}( window.jQuery ); \ No newline at end of file diff --git a/jm2l/static/vendor/datepicker/datepicker.css b/jm2l/static/vendor/datepicker/datepicker.css new file mode 100644 index 0000000..b7065b7 --- /dev/null +++ b/jm2l/static/vendor/datepicker/datepicker.css @@ -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; +} \ No newline at end of file diff --git a/jm2l/templates/NewIndex.mako b/jm2l/templates/NewIndex.mako index d9ebebe..25ce84d 100644 --- a/jm2l/templates/NewIndex.mako +++ b/jm2l/templates/NewIndex.mako @@ -2,7 +2,7 @@ <%def name="jsAddOn()"> @@ -10,42 +10,69 @@ <%def name="cssAddOn()"> + -
-Synchronisez votre calendrier avec le fichier ical JM2L 2015 -
-
-
-
 
-
-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/). -
-Le thème de cette année sera « Do It Yourself » ou « Faîtes le vous-même » : -
    -
  • Migration vers les logiciels libres
  • -
  • Libres enfants du numérique : jeux et loisirs pour les juniors.
  • -
  • Gérer ses données personnelles
  • -
  • Do It Yourself (jeux vidéos, fablabs…)
  • -
  • Culture libre
  • -
  • Communautés du libre
  • -
-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 ! +

9ème édition des JM2L


-Nous vous proposons cinq formats de contribution : -
    -
  • Stands au sein du village associatif
  • -
  • Conférences de 20 ou 40 minutes suivies d’un échange
  • -
  • Ateliers de 45 minutes ou 1h15
  • -
  • Démos de vos matériels, logiciels ou projets libres
  • -
  • Animations ouvertes
  • -
-

-Il sera bien sûr possible de combiner plusieurs formats (par exemple, une démo ou une conférence suivie -d’un atelier). -

-

-Vous pouvez nous faire parvenir vos propositions directement via le menu participer. -

+
+
+
+ Le 28 Novembre 2015 aura lieu la 9ème édition des Journées Méditerranéennes du Logiciel Libre (JM2L) à + Polytech'Nice destinée à tout public. +
+ Le thème de cette année sera « Do It Yourself » ou « Faîtes le vous-même » : +
    +
  • Migration vers les logiciels libres
  • +##
  • Libres enfants du numérique : jeux et loisirs pour les juniors.
  • +##
  • Gérer ses données personnelles
  • +
  • Do It Yourself (jeux vidéos, fablabs…)
  • +
  • Culture libre
  • +##
  • Communautés du libre
  • +
+
+
+

+ Nous faisons appel aux acteurs du numérique libre pour alimenter le programme des conférences/ateliers : +
+ Vous pouvez nous faire parvenir vos propositions directement via le menu participer. +
+ Si vous souhaitez échanger avec le public et partager un bon moment avec la communauté, inscrivez-vous ! +
+ Vous pouvez d'ores et déjà synchroniser votre calendrier avec notre fichier ical JM2L 2015 +

+
+
+ + +## Nous vous proposons plusieurs formats de contribution : +##
    +##
  • Stands au sein du village associatif
  • +##
  • Conférences de 20 à 70 minutes suivies d’un échange
  • +##
  • Ateliers de 45 minutes ou 1h15
  • +##
  • Démos de vos matériels, logiciels ou projets libres
  • +##
  • Animations ouvertes
  • +##
  • Vous pouvez aussi aider l'équipe à la logistique.
  • +##
+##

+## Il sera bien sûr possible de combiner plusieurs formats (par exemple, une démo ou une conférence suivie +## d’un atelier). +##

+ +
+
+ +
+
+
+
+
+
diff --git a/jm2l/templates/Participer.mako b/jm2l/templates/Participer.mako index a9e823d..b3efdfe 100644 --- a/jm2l/templates/Participer.mako +++ b/jm2l/templates/Participer.mako @@ -47,6 +47,8 @@ % if not link: Remplissez ce formulaire : +
+
<% DicForm ={ 'nom': {'PlaceHolder':u"Mon nom", 'ContainerStyle':'float:left;'}, @@ -68,10 +70,11 @@ DicForm ={
+
+
% else:

Vous venez de recevoir un mail... - Ici, ... le texte à définir ...

Cliquez sur ce lien pour finir votre inscription : Mon lien % endif diff --git a/jm2l/templates/Profil/Profil.mako b/jm2l/templates/Profil/Profil.mako index 9777124..247551c 100644 --- a/jm2l/templates/Profil/Profil.mako +++ b/jm2l/templates/Profil/Profil.mako @@ -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)"> -
- ${helpers.show_my_pictures(uprofil)} -
-Mon lien -

${profil_form.prenom.data} ${profil_form.nom.data}

##
% if uprofil!=request.user and request.user.uid==1: @@ -14,8 +9,42 @@ % endif +
+
+ Mon lien de connection - + Mon profil publique
+

${profil_form.prenom.data} ${profil_form.nom.data}

<% -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)} -
+%> + ${helpers.DisplayRespForm(profil_form, DicFormA)} +
+
+ ${helpers.show_my_pictures(uprofil)} +
+
+ +${helpers.DisplayRespForm(profil_form, DicFormB)} +
Activité Si vous ne trouvez pas l'entité que vous souhaitez promouvoir (Association, GULL, Entreprise, Logiciel, ...). Vous pouvez en ajouter une. @@ -110,8 +146,9 @@ DicForm = {
+
- +
diff --git a/jm2l/templates/Profil/Sejour.mako b/jm2l/templates/Profil/Sejour.mako index 3fcd647..f577a58 100644 --- a/jm2l/templates/Profil/Sejour.mako +++ b/jm2l/templates/Profil/Sejour.mako @@ -4,21 +4,21 @@ fieldset:disabled { color:#CCC; } - ##Je viens aux JM2L 2015 +
Arrivée
J'arrive le , à - % for hour in range(24): - % for minutes in range(0,60,10): - + % for minutes in range(0,60,10): + % endfor % endfor @@ -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 ) - %> - ## + %>

@@ -97,9 +91,9 @@ fieldset:disabled { le , + +
+
+ +
+ % if 'uid' in form._fields.keys(): +
${helpers.uploader("tasks", form.uid.data, u"une pièce jointe" )} +
%endif + +
+ diff --git a/jm2l/templates/edit_event.mako b/jm2l/templates/edit_event.mako index f033810..6faa5d4 100644 --- a/jm2l/templates/edit_event.mako +++ b/jm2l/templates/edit_event.mako @@ -16,33 +16,10 @@ <% from datetime import datetime %> - + +
+
+ % if 'uid' in form._fields:
@@ -63,7 +40,7 @@ % else: % for num, iterv in enumerate(event.intervenants):
  • - ${iterv.prenom} ${iterv.nom}. + ${iterv.prenom} ${iterv.nom}. % if iterv.pseudo: (${iterv.pseudo}) %endif @@ -125,56 +102,20 @@ DicForm = {
    Ajouter vos co-intervenants

    - Vous avez la possibilité d'être plusieurs pour un même évenement. - Pour enregistrer une autre personne, deux cas peuvent se présenter: -

      -
    • Votre partenaire n'est pas inscrit sur le site
    • -

      - 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. -

      -
    • Votre partenaire est inscrit sur le site
    • -

      - Demandez lui l'email utilisé lors de son inscription sur le site des JM2L. - Complétez le champ suivant et validez. -

      -
    - 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.
    + Chacun des intervenants doit être inscrit sur le site. +
    + ${formAdd.event_uid} + + + +
    + NB : Notez que les intervenants d'un même évenement ont tous les droits de modification.

    -
    -${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: -
    - - % for error in Field.errors: -
    - -

    Erreur!

    - ${ error } -
    - % endfor - ${Field(placeholder=PlaceHolder, style="width:16em;")} -
    -% endfor - ## Then the submit for this form - ${formAdd.add} -
    +
     

    Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}

    @@ -186,27 +127,31 @@ TabFields = [

    -% if 0: - % if 'uid' in form._fields: - ${helpers.uploader_js()} - % endif - -% else: +
  • +
    + +<%def name="jsAddOn()"> + + + <% 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 \ No newline at end of file diff --git a/jm2l/templates/edit_tiers.mako b/jm2l/templates/edit_tiers.mako index 427c555..ce07b37 100644 --- a/jm2l/templates/edit_tiers.mako +++ b/jm2l/templates/edit_tiers.mako @@ -8,6 +8,11 @@ + +
    +
    + + Editer les catégories
    @@ -30,18 +35,18 @@ DicForm = {
    Acteurs
    - +
    - + - + ## % for num, dicdata in enumerate(form._fields.get("membership").data): - + ## - % endfor @@ -49,3 +52,6 @@ % endfor + + + \ No newline at end of file diff --git a/jm2l/templates/login.mako b/jm2l/templates/login.mako index d2a1756..df91eb6 100644 --- a/jm2l/templates/login.mako +++ b/jm2l/templates/login.mako @@ -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; } +
    + % if forgot: + + +
    + + + + % else: - + +
    - - +
    +
    + Je ne me souviens plus de mon mot de passe + % endif
    diff --git a/jm2l/templates/modals.mako b/jm2l/templates/modals.mako index 5848be6..008ce98 100644 --- a/jm2l/templates/modals.mako +++ b/jm2l/templates/modals.mako @@ -166,6 +166,7 @@
    AnnéePersonnePersonne Rôle Action
    MoveMove + @@ -74,7 +80,7 @@ DicForm = {
    MoveMove @@ -91,8 +97,6 @@ DicForm = { % endif - ${dicdata.get('role', 'Aucun')} @@ -140,13 +144,9 @@ DicForm = {
    NB: Vous devez proposer votre entité avant de pouvoir téléverser des fichiers la concernant. % endif -
    -
    -
    -##% if 'uid' in form._fields: -## ${helpers.uploader_js()} -##% endif + + <%def name="jsAddOn()"> @@ -154,7 +154,7 @@ DicForm = { + ${self.cssAddOn()} + ${self.jsAddOn_head()} <% context._kwargs['postpone_js']=[] DisplayYear = request.session.get('year', 2015) %> +<%def name="jsAddOn_head()"> <%def name="jsAddOn()"> <%def name="cssAddOn()"> ${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;">
    +
    +
    % else: - ${next.body()} - -
    - - ${helpers.participants(DisplayYear)} -
    +
    +
    +
    + + ${message}
    +
    + + % endfor +
    + + ${next.body()}
    @@ -161,9 +184,12 @@ ${helpers.uploader_js()} +33 (0) 6 52 42 31 37 ~ contact at jm2l.linux-azur.org

    - Conception et construction en DIY ~ + Conception et construction en DIY ~ Hébergé par Heberg24

    +

    + Vous avez trouvé un bug ? Reportez le ici +

    diff --git a/jm2l/templates/list_tiers.mako b/jm2l/templates/list_tiers.mako index d4d9a69..4797466 100644 --- a/jm2l/templates/list_tiers.mako +++ b/jm2l/templates/list_tiers.mako @@ -1,5 +1,8 @@ <%inherit file="jm2l:templates/layout.mako"/> +
    +
    + Editer les catégories
    @@ -31,16 +34,16 @@ logo % endfor
    - ${entity.get_entity_type.entity_subtype} - + ${Entity_Type}, ${entity.get_entity_type.entity_subtype}
    ${entity.name} + % if request.user.Staff: edit + % endif