Compare commits

...
This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.

4 Commits

Author SHA1 Message Date
Frédéric Péters b1eeaa6e0d misc: remove root directory changes (#72822) 2022-12-29 11:14:45 +01:00
Frédéric Péters 784f536b17 misc: remove custom myspace page (#72820) 2022-12-29 10:06:03 +01:00
Frédéric Péters d4335655b4 misc: remove bigdiv context variable (#72814)
(this also no longer makes sure "gauche" is available in context, which
is not necessary since django templates)
2022-12-28 17:41:15 +01:00
Frédéric Péters 4d6903a9f9 remove themes (#72813) 2022-12-28 17:38:37 +01:00
120 changed files with 2 additions and 5218 deletions

View File

@ -4,7 +4,5 @@ include MANIFEST.in
include VERSION
recursive-include auquotidien/locale *.po *.mo
recursive-include apache-errors/ *.html
recursive-include data/themes/ *.css *.png *.jpeg '*.jpg *.xml *.html *.js *.ezt *.gif *.otf
recursive-include auquotidien/ *.py
recursive-include static/ *.png *.jpeg '*.jpg *.js *.gif
recursive-include theme/ *.css *.png *.jpeg '*.jpg *.xml *.html *.js *.ezt *.gif

View File

@ -1,322 +0,0 @@
try:
import lasso
except ImportError:
pass
import json
import time
from quixote import get_publisher, get_request, redirect, get_response, get_session_manager, get_session
from quixote.directory import AccessControlled, Directory
from quixote.html import TemplateIO, htmltext
from quixote.util import StaticFile, FileStream
from wcs.qommon import _, N_
from wcs.qommon import template
from wcs.qommon.form import *
from wcs.qommon import get_cfg, get_logger
from wcs.qommon import errors
from wcs.api import get_user_from_api_query_string
import wcs.qommon.ident.password
from wcs.qommon.ident.password_accounts import PasswordAccount
from wcs.qommon.admin.texts import TextsDirectory
from wcs.formdef import FormDef
import wcs.myspace
class JsonDirectory(Directory):
"""Export of several lists in json, related to the current user or the
SAMLv2 NameID we'd get in the URL"""
_q_exports = ['forms']
user = None
def _q_traverse(self, path):
self.user = get_user_from_api_query_string() or get_request().user
if not self.user:
raise errors.AccessUnauthorizedError()
return Directory._q_traverse(self, path)
def forms(self):
formdefs = FormDef.select(order_by='name', ignore_errors=True)
user_forms = []
for formdef in formdefs:
user_forms.extend(formdef.data_class().get_with_indexed_value('user_id', self.user.id))
epoch = time.localtime(1970)
user_forms.sort(key=lambda x: x.receipt_time or epoch)
get_response().set_content_type('application/json')
forms_output = []
for form in user_forms:
visible_status = form.get_visible_status(user=self.user)
# skip drafts and hidden forms
if not visible_status:
continue
name = form.formdef.name
id = form.get_display_id()
status = visible_status.name
title = _('%(name)s #%(id)s (%(status)s)') % {'name': name, 'id': id, 'status': status}
url = form.get_url()
d = {'title': title, 'url': url}
d.update(form.get_substitution_variables(minimal=True))
forms_output.append(d)
return json.dumps(forms_output, cls=misc.JSONEncoder)
class MyspaceDirectory(wcs.myspace.MyspaceDirectory):
_q_exports = ['', 'profile', 'new', 'password', 'remove', 'drafts', 'forms', 'json']
json = JsonDirectory()
def _q_traverse(self, path):
get_response().filter['bigdiv'] = 'profile'
get_response().breadcrumb.append(('myspace/', _('My Space')))
# Migrate custom text settings
texts_cfg = get_cfg('texts', {})
if 'text-aq-top-of-profile' in texts_cfg and (not 'text-top-of-profile' in texts_cfg):
texts_cfg['text-top-of-profile'] = texts_cfg['text-aq-top-of-profile']
del texts_cfg['text-aq-top-of-profile']
get_publisher().write_cfg()
return Directory._q_traverse(self, path)
def _q_index(self):
user = get_request().user
if not user:
raise errors.AccessUnauthorizedError()
template.html_top(_('My Space'))
r = TemplateIO(html=True)
if user.anonymous:
return redirect('new')
user_formdef = user.get_formdef()
user_forms = []
if user:
formdefs = FormDef.select(order_by='name', ignore_errors=True)
user_forms = []
for formdef in formdefs:
user_forms.extend(formdef.data_class().get_with_indexed_value('user_id', user.id))
epoch = time.localtime(1970)
user_forms.sort(key=lambda x: x.receipt_time or epoch)
profile_links = []
if not get_cfg('sp', {}).get('idp-manage-user-attributes', False):
if user_formdef:
profile_links.append('<a href="#my-profile">%s</a>' % _('My Profile'))
if user_forms:
profile_links.append('<a href="#my-forms">%s</a>' % _('My Forms'))
root_url = get_publisher().get_root_url()
if user.can_go_in_backoffice():
profile_links.append('<a href="%sbackoffice/">%s</a>' % (root_url, _('Back office')))
if user.is_admin:
profile_links.append('<a href="%sadmin/">%s</a>' % (root_url, _('Admin')))
if profile_links:
r += htmltext('<p id="profile-links">')
r += htmltext(' - '.join(profile_links))
r += htmltext('</p>')
if not get_cfg('sp', {}).get('idp-manage-user-attributes', False):
if user_formdef:
r += self._my_profile(user_formdef, user)
r += self._index_buttons(user_formdef)
try:
x = PasswordAccount.get_on_index(get_request().user.id, str('user_id'))
except KeyError:
pass
else:
r += htmltext('<p>')
r += _(
'You can delete your account freely from the services portal. '
'This action is irreversible; it will destruct your personal '
'datas and destruct the access to your request history.'
)
r += htmltext(' <strong><a href="remove" rel="popup">%s</a></strong>.') % _(
'Delete My Account'
)
r += htmltext('</p>')
if user_forms:
r += htmltext('<h3 id="my-forms">%s</h3>') % _('My Forms')
from . import root
r += root.FormsRootDirectory().user_forms(user_forms)
return r.getvalue()
def _my_profile(self, user_formdef, user):
r = TemplateIO(html=True)
r += htmltext('<h3 id="my-profile">%s</h3>') % _('My Profile')
r += TextsDirectory.get_html_text('top-of-profile')
if user.form_data:
r += htmltext('<ul>')
for field in user_formdef.fields:
if not hasattr(field, str('get_view_value')):
continue
value = user.form_data.get(field.id)
r += htmltext('<li>')
r += field.label
r += ' : '
if value:
r += field.get_view_value(value)
r += htmltext('</li>')
r += htmltext('</ul>')
else:
r += htmltext('<p>%s</p>') % _('Empty profile')
return r.getvalue()
def _index_buttons(self, form_data):
r = TemplateIO(html=True)
passwords_cfg = get_cfg('passwords', {})
ident_method = get_cfg('identification', {}).get('methods', ['idp'])[0]
if get_session().lasso_session_dump:
ident_method = 'idp'
if form_data and ident_method != 'idp':
r += htmltext('<p class="command"><a href="profile" rel="popup">%s</a></p>') % _(
'Edit My Profile'
)
if ident_method == 'password' and passwords_cfg.get('can_change', False):
r += htmltext('<p class="command"><a href="password" rel="popup">%s</a></p>') % _(
'Change My Password'
)
return r.getvalue()
def profile(self):
user = get_request().user
if not user or user.anonymous:
raise errors.AccessUnauthorizedError()
form = Form(enctype='multipart/form-data')
formdef = user.get_formdef()
formdef.add_fields_to_form(form, form_data=user.form_data)
form.add_submit('submit', _('Apply Changes'))
form.add_submit('cancel', _('Cancel'))
if form.get_submit() == 'cancel':
return redirect('.')
if form.is_submitted() and not form.has_errors():
self.profile_submit(form, formdef)
return redirect('.')
template.html_top(_('Edit Profile'))
return form.render()
def profile_submit(self, form, formdef):
user = get_request().user
data = formdef.get_data(form)
user.set_attributes_from_formdata(data)
user.form_data = data
user.store()
def password(self):
ident_method = get_cfg('identification', {}).get('methods', ['idp'])[0]
if ident_method != 'password':
raise errors.TraversalError()
user = get_request().user
if not user or user.anonymous:
raise errors.AccessUnauthorizedError()
form = Form(enctype='multipart/form-data')
form.add(PasswordWidget, 'new_password', title=_('New Password'), required=True)
form.add(PasswordWidget, 'new2_password', title=_('New Password (confirm)'), required=True)
form.add_submit('submit', _('Change Password'))
form.add_submit('cancel', _('Cancel'))
if form.get_submit() == 'cancel':
return redirect('.')
if form.is_submitted() and not form.has_errors():
wcs.qommon.ident.password.check_password(form, 'new_password')
new_password = form.get_widget('new_password').parse()
new2_password = form.get_widget('new2_password').parse()
if new_password != new2_password:
form.set_error('new2_password', _('Passwords do not match'))
if form.is_submitted() and not form.has_errors():
self.submit_password(new_password)
return redirect('.')
template.html_top(_('Change Password'))
return form.render()
def submit_password(self, new_password):
passwords_cfg = get_cfg('passwords', {})
account = PasswordAccount.get(get_session().username)
account.hashing_algo = passwords_cfg.get('hashing_algo')
account.set_password(new_password)
account.store()
def new(self):
if not get_request().user or not get_request().user.anonymous:
raise errors.AccessUnauthorizedError()
form = Form(enctype='multipart/form-data')
formdef = get_publisher().user_class.get_formdef()
if formdef:
formdef.add_fields_to_form(form)
else:
get_logger().error('missing user formdef (in myspace/new)')
form.add_submit('submit', _('Register'))
if form.is_submitted() and not form.has_errors():
user = get_publisher().user_class()
data = formdef.get_data(form)
user.set_attributes_from_formdata(data)
user.name_identifiers = get_request().user.name_identifiers
user.lasso_dump = get_request().user.lasso_dump
user.set_attributes_from_formdata(data)
user.form_data = data
user.store()
get_session().set_user(user.id)
root_url = get_publisher().get_root_url()
return redirect('%smyspace' % root_url)
template.html_top(_('Welcome'))
return form.render()
def remove(self):
user = get_request().user
if not user or user.anonymous:
raise errors.AccessUnauthorizedError()
form = Form(enctype='multipart/form-data')
form.widgets.append(
HtmlWidget('<p>%s</p>' % _('Are you really sure you want to remove your account?'))
)
form.add_submit('submit', _('Remove my account'))
form.add_submit('cancel', _('Cancel'))
if form.get_submit() == 'cancel':
return redirect('.')
if form.is_submitted() and not form.has_errors():
user = get_request().user
account = PasswordAccount.get_on_index(user.id, str('user_id'))
get_session_manager().expire_session()
account.remove_self()
return redirect(get_publisher().get_root_url())
template.html_top(_('Removing Account'))
return form.render()

View File

@ -1,218 +1,14 @@
import urllib.parse
from quixote import get_publisher, get_response, get_request, redirect, get_session
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from wcs.qommon import _
from wcs.qommon.misc import get_variadic_url, simplify
import os
import re
import string
try:
import lasso
except ImportError:
pass
import wcs
import wcs.root
from wcs import qommon
from wcs.forms.root import RootDirectory as FormsRootDirectory
from wcs.qommon import N_, get_cfg, get_logger
from wcs.qommon import template
from wcs.qommon import errors
from wcs.qommon.form import *
from wcs.qommon import logger
from wcs.roles import logged_users_role
from wcs.qommon import emails
from wcs.qommon.sms import SMS
from wcs.categories import Category
from wcs.formdef import FormDef
from wcs.data_sources import NamedDataSource
from wcs.qommon.tokens import Token
from wcs.qommon.admin.emails import EmailsDirectory
from wcs.qommon.admin.texts import TextsDirectory
from .myspace import MyspaceDirectory
import wcs.forms.root
from wcs.workflows import Workflow
from wcs.forms.preview import PreviewDirectory
from .saml2 import Saml2Directory
OldRootDirectory = wcs.root.RootDirectory
import wcs.qommon.ident.password
import wcs.qommon.ident.idp
def category_get_homepage_position(self):
if hasattr(self, 'homepage_position') and self.homepage_position:
return self.homepage_position
if self.url_name == 'consultations':
return '2nd'
return '1st'
Category.get_homepage_position = category_get_homepage_position
def category_get_limit(self):
if hasattr(self, 'limit') and self.limit is not None:
return self.limit
return 7
Category.get_limit = category_get_limit
Category.TEXT_ATTRIBUTES = ['name', 'url_name', 'description', 'homepage_position']
Category.INT_ATTRIBUTES = ['position', 'limit']
OldRegisterDirectory = wcs.root.RegisterDirectory
class AlternateRegisterDirectory(OldRegisterDirectory):
def _q_traverse(self, path):
get_response().filter['bigdiv'] = 'new_member'
return OldRegisterDirectory._q_traverse(self, path)
def _q_index(self):
get_logger().info('register')
ident_methods = get_cfg('identification', {}).get('methods', [])
if len(ident_methods) == 0:
idps = get_cfg('idp', {})
if len(idps) == 0:
return template.error_page(_('Authentication subsystem is not yet configured.'))
ident_methods = ['idp'] # fallback to old behaviour; saml.
if len(ident_methods) == 1:
method = ident_methods[0]
else:
method = 'password'
return wcs.qommon.ident.register(method)
OldLoginDirectory = wcs.root.LoginDirectory
class AlternateLoginDirectory(OldLoginDirectory):
def _q_traverse(self, path):
get_response().filter['bigdiv'] = 'member'
return OldLoginDirectory._q_traverse(self, path)
def _q_index(self):
get_logger().info('login')
ident_methods = get_cfg('identification', {}).get('methods', [])
if get_request().form.get('ReturnUrl'):
get_request().form['next'] = get_request().form.pop('ReturnUrl')
if 'IsPassive' in get_request().form and 'idp' in ident_methods:
# if isPassive is given in query parameters, we restrict ourselves
# to saml login.
ident_methods = ['idp']
if len(ident_methods) > 1 and 'idp' in ident_methods:
# if there is more than one identification method, and there is a
# possibility of SSO, if we got there as a consequence of an access
# unauthorized url on admin/ or backoffice/, then idp auth method
# is chosen forcefully.
after_url = get_request().form.get('next')
if after_url:
root_url = get_publisher().get_root_url()
after_path = urllib.parse.urlparse(after_url)[2]
after_path = after_path[len(root_url) :]
if after_path.startswith(str('admin')) or after_path.startswith(str('backoffice')):
ident_methods = ['idp']
# don't display authentication system choice
if len(ident_methods) == 1:
method = ident_methods[0]
try:
return wcs.qommon.ident.login(method)
except KeyError:
get_logger().error('failed to login with method %s' % method)
return errors.TraversalError()
if sorted(ident_methods) == ['idp', 'password']:
r = TemplateIO(html=True)
get_response().breadcrumb.append(('login', _('Login')))
identities_cfg = get_cfg('identities', {})
form = Form(enctype='multipart/form-data', id='login-form', use_tokens=False)
if identities_cfg.get('email-as-username', False):
form.add(StringWidget, 'username', title=_('Email'), size=25, required=True)
else:
form.add(StringWidget, 'username', title=_('Username'), size=25, required=True)
form.add(PasswordWidget, 'password', title=_('Password'), size=25, required=True)
form.add_submit('submit', _('Connect'))
if form.is_submitted() and not form.has_errors():
tmp = wcs.qommon.ident.password.MethodDirectory().login_submit(form)
if not form.has_errors():
return tmp
r += htmltext('<div id="login-password">')
r += get_session().display_message()
r += form.render()
base_url = get_publisher().get_root_url()
r += htmltext('<p><a href="%sident/password/forgotten">%s</a></p>') % (
base_url,
_('Forgotten password ?'),
)
r += htmltext('</div>')
# XXX: this part only supports a single IdP
r += htmltext('<div id="login-sso">')
r += TextsDirectory.get_html_text('aq-sso-text')
form = Form(enctype='multipart/form-data', action='%sident/idp/login' % base_url)
form.add_hidden('method', 'idp')
for kidp, idp in get_cfg('idp', {}).items():
p = lasso.Provider(
lasso.PROVIDER_ROLE_IDP,
misc.get_abs_path(idp['metadata']),
misc.get_abs_path(idp.get('publickey')),
None,
)
form.add_hidden('idp', p.providerId)
break
form.add_submit('submit', _('Connect'))
r += form.render()
r += htmltext('</div>')
get_request().environ['REQUEST_METHOD'] = 'GET'
r += htmltext(
"""<script type="text/javascript">
document.getElementById('login-form')['username'].focus();
</script>"""
)
return r.getvalue()
else:
return OldLoginDirectory._q_index(self)
OldIdentDirectory = wcs.root.IdentDirectory
class AlternateIdentDirectory(OldIdentDirectory):
def _q_traverse(self, path):
get_response().filter['bigdiv'] = 'member'
return OldIdentDirectory._q_traverse(self, path)
class AlternatePreviewDirectory(PreviewDirectory):
def _q_traverse(self, path):
get_response().filter['bigdiv'] = 'rub_service'
return super(AlternatePreviewDirectory, self)._q_traverse(path)
class AlternateRootDirectory(OldRootDirectory):
_q_exports = [
@ -246,320 +42,11 @@ class AlternateRootDirectory(OldRootDirectory):
'actions',
]
register = AlternateRegisterDirectory()
login = AlternateLoginDirectory()
ident = AlternateIdentDirectory()
myspace = MyspaceDirectory()
saml = Saml2Directory()
code = wcs.forms.root.TrackingCodesDirectory()
preview = AlternatePreviewDirectory()
def get_substitution_variables(self):
return {'links': ''}
def _q_traverse(self, path):
self.feed_substitution_parts()
response = get_response()
if not hasattr(response, 'filter'):
response.filter = {}
response.filter['auquotidien'] = True
if not path or (path[0] not in ('api', 'backoffice') and not get_request().is_json()):
# api & backoffice have no use for a side box
response.filter['gauche'] = lambda x: self.box_side(path)
get_publisher().substitutions.feed(self)
response.breadcrumb = [('', _('Home'))]
if not self.admin:
self.admin = get_publisher().admin_directory_class()
if not self.backoffice:
self.backoffice = get_publisher().backoffice_directory_class()
return super()._q_traverse(path)
def json(self):
return FormsRootDirectory().json()
def categories(self):
return FormsRootDirectory().categories()
def _q_index(self):
if get_request().is_json():
return FormsRootDirectory().json()
root_url = get_publisher().get_root_url()
if get_request().user and get_request().user.anonymous and get_request().user.lasso_dump:
return redirect('%smyspace/new' % root_url)
redirect_url = get_cfg('misc', {}).get('homepage-redirect-url')
if redirect_url:
return redirect(
misc.get_variadic_url(redirect_url, get_publisher().substitutions.get_context_variables())
)
template.html_top()
r = TemplateIO(html=True)
get_response().filter['is_index'] = True
r += htmltext('<div id="centre">')
r += self.box_services(position='1st')
r += htmltext('</div>')
r += htmltext('<div id="droite">')
r += self.myspace_snippet()
r += self.box_services(position='2nd')
r += self.consultations()
r += htmltext('</div>')
user = get_request().user
if user and user.can_go_in_backoffice():
get_response().filter['backoffice'] = True
return r.getvalue()
def services(self):
template.html_top()
get_response().filter['bigdiv'] = 'rub_service'
return self.box_services(level=2)
def box_services(self, level=3, position=None):
## Services
if get_request().user and get_request().user.roles:
accepted_roles = get_request().user.roles
else:
accepted_roles = []
cats = Category.select(order_by='name')
cats = [x for x in cats if x.url_name != 'consultations']
Category.sort_by_position(cats)
all_formdefs = FormDef.select(
lambda x: not x.is_disabled() or x.disabled_redirection, order_by='name'
)
if position:
t = self.display_list_of_formdefs(
[x for x in cats if x.get_homepage_position() == position], all_formdefs, accepted_roles
)
else:
t = self.display_list_of_formdefs(cats, all_formdefs, accepted_roles)
if not t:
return
r = TemplateIO(html=True)
if position == '2nd':
r += htmltext('<div id="services-2nd">')
else:
r += htmltext('<div id="services">')
if level == 2:
r += htmltext('<h2>%s</h2>') % _('Services')
else:
r += htmltext('<h3>%s</h3>') % _('Services')
if 'auquotidien-welcome-in-services' in get_response().filter.get('keywords', []):
homepage_text = TextsDirectory.get_html_text('aq-home-page')
if homepage_text:
r += htmltext('<div id="home-page-intro">')
r += homepage_text
r += htmltext('</div>')
r += htmltext('<ul>')
r += t
r += htmltext('</ul>')
r += htmltext('</div>')
return r.getvalue()
def display_list_of_formdefs(self, cats, all_formdefs, accepted_roles):
r = TemplateIO(html=True)
for category in cats:
if category.url_name == 'consultations':
self.consultations_category = category
continue
formdefs = [x for x in all_formdefs if str(x.category_id) == str(category.id)]
formdefs_advertise = []
for formdef in formdefs[:]:
if formdef.is_disabled(): # is a redirection
continue
if not formdef.roles:
continue
if not get_request().user:
if formdef.always_advertise:
formdefs_advertise.append(formdef)
formdefs.remove(formdef)
continue
if logged_users_role().id in formdef.roles:
continue
for q in accepted_roles:
if q in formdef.roles:
break
else:
if formdef.always_advertise:
formdefs_advertise.append(formdef)
formdefs.remove(formdef)
if not formdefs and not formdefs_advertise:
continue
keywords = {}
for formdef in formdefs:
for keyword in formdef.keywords_list:
keywords[keyword] = True
r += htmltext('<li id="category-%s" data-keywords="%s">') % (
category.url_name,
' '.join(keywords),
)
r += htmltext('<strong>')
r += htmltext('<a href="%s/">') % category.url_name
r += category.name
r += htmltext('</a></strong>\n')
r += category.get_description_html_text()
r += htmltext('<ul>')
limit = category.get_limit()
for formdef in formdefs[:limit]:
r += htmltext('<li data-keywords="%s">') % ' '.join(formdef.keywords_list)
classes = []
if formdef.is_disabled() and formdef.disabled_redirection:
classes.append('redirection')
r += htmltext('<a class="%s" href="%s/%s/">%s</a>') % (
' '.join(classes),
category.url_name,
formdef.url_name,
formdef.name,
)
r += htmltext('</li>\n')
if len(formdefs) < limit:
for formdef in formdefs_advertise[: limit - len(formdefs)]:
r += htmltext('<li class="required-authentication">')
r += htmltext('<a href="%s/%s/">%s</a>') % (
category.url_name,
formdef.url_name,
formdef.name,
)
r += htmltext('<span> (%s)</span>') % _('authentication required')
r += htmltext('</li>\n')
if (len(formdefs) + len(formdefs_advertise)) > limit:
r += htmltext('<li class="all-forms"><a href="%s/" title="%s">%s</a></li>') % (
category.url_name,
_('Access to all forms of the "%s" category') % category.name,
_('Access to all forms in this category'),
)
r += htmltext('</ul>')
r += htmltext('</li>\n')
return r.getvalue()
def consultations(self):
cats = [x for x in Category.select() if x.url_name == 'consultations']
if not cats:
return
consultations_category = cats[0]
formdefs = FormDef.select(
lambda x: (
str(x.category_id) == str(consultations_category.id)
and (not x.is_disabled() or x.disabled_redirection)
),
order_by='name',
)
if not formdefs:
return
## Consultations
r = TemplateIO(html=True)
r += htmltext('<div id="consultations">')
r += htmltext('<h3>%s</h3>') % _('Consultations')
r += consultations_category.get_description_html_text()
r += htmltext('<ul>')
for formdef in formdefs:
r += htmltext('<li>')
r += htmltext('<a href="%s/%s/">%s</a>') % (
consultations_category.url_name,
formdef.url_name,
formdef.name,
)
r += htmltext('</li>')
r += htmltext('</ul>')
r += htmltext('</div>')
return r.getvalue()
def box_side(self, path):
r = TemplateIO(html=True)
root_url = get_publisher().get_root_url()
if (
path == ['']
and 'include-tracking-code-form' in get_response().filter.get('keywords', [])
and self.has_anonymous_access_codes()
):
r += htmltext('<form id="follow-form" action="%scode/load">') % root_url
r += htmltext('<h3>%s</h3>') % _('Tracking code')
r += htmltext('<input size="12" name="code" placeholder="%s"/>') % _('ex: RPQDFVCD')
r += htmltext('<input type="submit" value="%s"/>') % _('Load')
r += htmltext('</form>')
cats = Category.select(order_by='name')
cats = [x for x in cats if x.url_name != 'consultations' and x.get_homepage_position() == 'side']
Category.sort_by_position(cats)
if cats:
r += htmltext('<div id="side-services">')
r += htmltext('<h3>%s</h3>') % _('Services')
r += htmltext('<ul>')
for cat in cats:
r += htmltext('<li><a href="%s/">%s</a></li>') % (cat.url_name, cat.name)
r += htmltext('</ul>')
r += htmltext('</div>')
v = r.getvalue()
if v:
r = TemplateIO(html=True)
r += htmltext('<div id="sidebox">')
r += v
r += htmltext('</div>')
return r.getvalue()
return None
def has_anonymous_access_codes(self):
return any((x for x in FormDef.select() if x.enable_tracking_codes))
def myspace_snippet(self):
r = TemplateIO(html=True)
r += htmltext('<div id="myspace">')
r += htmltext('<h3>%s</h3>') % _('My Space')
r += htmltext('<ul>')
if get_request().user and not get_request().user.anonymous:
r += htmltext(' <li><a href="myspace/" id="member">%s</a></li>') % _(
'Access to your personal space'
)
r += htmltext(' <li><a href="logout" id="logout">%s</a></li>') % _('Logout')
else:
r += htmltext(' <li><a href="register/" id="inscr">%s</a></li>') % _('Registration')
r += htmltext(' <li><a href="login/" id="login">%s</a></li>') % _('Login')
r += htmltext('</ul>')
r += htmltext('</div>')
return r.getvalue()
from qommon.publisher import get_publisher_class
get_publisher_class().root_directory_class = AlternateRootDirectory
get_publisher_class().after_login_url = 'myspace/'
get_publisher_class().use_sms_feature = True
TextsDirectory.register(
'aq-sso-text',
N_('Connecting with Identity Provider'),
default=N_(
'''<h3>Connecting with Identity Provider</h3>
<p>You can also use your identity provider to connect.
</p>'''
),
)
TextsDirectory.register('aq-home-page', N_('Home Page'), wysiwyg=True)

View File

@ -8,10 +8,6 @@ def get_decorate_vars(body, response, generate_breadcrumb=True, template_context
# force rendering as it will put new variables in the context
template_context['form_side'] = template_context['form_side']()
for key in ('bigdiv', 'gauche'):
if not key in response.filter:
response.filter[key] = None
return wcs_get_decorate_vars(body, response, generate_breadcrumb)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,9 +0,0 @@
<?xml version="1.0"?>
<theme name="auquo2" version="1.0">
<label>Au Quotidien 2</label>
<desc>Theme for au-quotidien.fr</desc>
<author>Frederic et Victor</author>
<keywords>
<keyword>auquotidien-no-titles-in-section</keyword>
</keywords>
</theme>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,66 +0,0 @@
<!DOCTYPE html>
<html lang="[site_lang]">
<head>
<title>[page_title]</title>
<link rel="shortcut icon" href="/themes/auquotidien/favicon.png" />
<link rel="alternate" type="application/atom+xml" title="[site_name]" href="[root_url]announces/atom"/>
[script]
<link rel="stylesheet" type="text/css" href="[css]"/>
</head>
<body[if-any onload] onload="[onload]"[end]>
<div id="page">
<div id="header">
<div id="top"> <h1><a href="[root_url]" accesskey="1"><span>[site_name]</span></a></h1> </div>
<!--
<div id="toplinks">
<ul>
[if-any user]<li><a href="[root_url]myspace/" id="member">[user.display_name]</a></li>
<li><a href="[root_url]logout" id="logout">D&eacute;connexion</a></li>
[else]
<li><a href="[root_url]register/" id="inscr">Inscription</a></li>
<li><a href="[root_url]login/" id="login">Connexion</a></li>
[end]
</ul>
</div>
-->
</div> <!-- header -->
<div id="main-content-wrapper">
<div id="main-content">
[if-any breadcrumb]<div id="breadcrumb">[breadcrumb]</div>[else]
<div id="breadcrumb">[site_name], bienvenue !</div>[end]
<div id="content">
[if-any gauche]
<div id="gauche">
[gauche]
</div>
[end]
[if-any bigdiv]<div id="[bigdiv]">[end]
[if-any title]<h2>[title]</h2>[end]
[body]
[if-any bigdiv]</div>[end]
</div> <!-- #content -->
<hr class="clear"/>
</div> <!-- #main-content -->
</div> <!-- #main-content-wrapper -->
<div id="footer">
<p id="bottom-links">
<a href="[root_url]help">Aide</a>
<a href="[root_url]contact" accesskey="9" class="sep">Contact</a>
<a href="[root_url]accessibility" accesskey="0" class="sep">D&eacute;claration d'accessibilit&eacute;</a>
<a href="[root_url]informations-editeur" class="sep">Informations &eacute;diteur</a>
</p>
<p id="legal">
Copyright &copy; 2006-2013 Entr'ouvert
</p>
</div>
</div>
</body>
</html>

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html lang="[site_lang]">
<head>
<title>[page_title]</title>
<link rel="stylesheet" type="text/css" href="[css].iframe.css"/>
[script]
</head>
<body[if-any onload] onload="[onload]"[end]>
<div id="main-content">
[if-any bigdiv]<div id="[bigdiv]">[end]
[if-any title]<h2>[title]</h2>[end]
[body]
[if-any bigdiv]</div>[end]
</div>
</body>
</html>

View File

@ -1,688 +0,0 @@
/* general stuff */
@import url(/static/xstatic/themes/smoothness/jquery-ui.min.css);
html, body { margin: 0; font-family: sans-serif; }
a { text-decoration: none; }
a:hover { text-decoration: underline; }
h1, h2, h3 { margin-top: 0; }
h1, h2, h3, h4 { color: #2a2a2a; }
ul { list-style: circle; }
a {
-webkit-transition: color 200ms ease-out;
}
/* layout */
body {
background: #1499cb url(ciel-haut.png) top left repeat-x;
}
div#top {
background: url(mairie-nuage.png) top left no-repeat;
height: 180px;
width: 900px;
margin: 0 auto;
}
div#top h1 {
width: 10em;
text-align: center;
padding-top: 3em;
padding-left: 2em;
font-size: 120%;
font-weight: bold;
}
div#top h1 a {
color: white;
text-shadow: #6374AB 0px 0px 3px;
}
div#main-content-wrapper {
margin: 0 20px;
}
div#main-content {
margin: 0 auto;
background: white url(motif.png);
-webkit-border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
min-height: 400px;
max-width: 110em;
}
div#breadcrumb {
background: white;
position: relative;
margin: 0 auto;
padding: 2px 5px;
top: -1ex;
max-width: 880px;
border: 1px solid #888;
-webkit-box-shadow:0 0 1em hsla(0, 0%, 0%, 1.0);
-moz-box-shadow:0 0 1em hsla(0, 0%, 0%, 1.0);
color: #5f5f5f;
}
div#breadcrumb a {
color: #5f5f5f;
font-weight: bold;
}
div#content {
margin: 2ex 1.5% 0 1.5%;
}
div#sidebox h3 {
margin: 0 0 1em 0;
}
div#member,
div#new_member,
div#accessibility,
div#contact,
div#info,
div#help,
div#rub_annonce,
div#rub_agenda,
div#rub_consultation,
div#profile,
div#services-2nd,
div#consultations,
div#gauche, div#centre, div#myspace, div#announces, div#rub_service {
margin: 0 0.6% 10px 0.6%;
background: white;
border: 1px solid #888;
-webkit-box-shadow:0 0 1em hsla(0, 0%, 0%, 1.0);
-moz-box-shadow:0 0 1em hsla(0, 0%, 0%, 1.0);
padding: 5px 5px 15px 5px;
}
div#gauche {
width: 20%;
float: left;
}
div#centre {
width: 50%;
float: left;
}
div#droite {
width: 25%;
float: left;
}
div#member,
div#new_member,
div#accessibility,
div#contact,
div#info,
div#help,
div#rub_agenda,
div#rub_annonce,
div#profile,
div#rub_consultation,
div#rub_service {
float: right;
width: 74%;
}
hr.clear {
clear: both;
padding-bottom: 2em;
border: none;
}
div#footer {
margin: 0 0 0 0;
background: url(footer-shade.png) top left repeat-x;
text-align: center;
color: white;
padding-top: 25px;
padding-bottom: 5px;
margin-top: -30px;
}
p#bottom-links a {
color: white;
font-weight: bold;
font-size: 110%;
padding: 0 20px;
text-decoration: none;
}
p#legal {
margin-top: 30px;
font-size: small;
}
/* content styling */
div#rub_consultation h2,
div#rub_service h2,
div#rub_annonce h2,
div#rub_agenda h2,
div#profile h2,
div#services-2nd h3,
div#member h2,
div#help h2, div#info h2, div#accessibility h2, div#contact h2,
div#gauche h3,
div#centre h3 {
background: url(motif.png);
border-left: 10px solid #00cbfe;
padding: 1px 0 1px 6px;
}
div#rub_consultation h2,
div#rub_service h2,
div#rub_annonce h2,
div#rub_agenda h2,
div#help h2, div#info h2, div#accessibility h2, div#contact h2,
div#centre h3 {
font-size: 150%;
}
div#services-2nd ul,
div#centre ul {
padding: 0;
list-style: none;
}
div#services-2nd ul strong,
div#centre ul strong {
border-bottom: 1px solid #00cbfe;
margin-left: 18px;
padding: 1px 0 1px 0;
}
div#services-2nd ul strong a,
div#centre ul strong a {
color: black;
}
div#services-2nd ul strong a:hover,
div#centre ul strong a:hover {
text-decoration: none;
border-color: #0ac1fc;
}
div#services-2nd ul ul,
div#centre ul ul {
padding-left: 26px;
margin-bottom: 20px;
}
div#services-2nd ul p,
div#centre ul p {
margin-left: 18px;
}
div#myspace h3 {
background: url(motif.png);
border-left: 10px solid #ff0084;
padding: 1px 0 1px 6px;
}
div#consultations h3 {
background: url(motif.png);
border-left: 10px solid #fa0510;
padding: 1px 0 1px 6px;
}
div#consultations ul {
margin: 0;
padding: 0 0 0 10px;
}
ul.catforms li,
div#consultations li {
list-style: none;
padding-left: 12px;
background: url(puce.gif) left center no-repeat;
}
div#announces h3 {
background: url(motif.png);
border-left: 10px solid #a2ff00;
padding: 1px 0 1px 6px;
}
div#announces h4 {
border-bottom: 1px solid #a2ff00;
}
div#announces h4, p {
margin-left: 7px;
margin-right: 7px;
}
div#announces p {
text-align: justify;
}
ul#announces-links {
background: #a2ff00;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding: 2px 5px;
list-style: none;
font-weight: bold;
}
ul#announces-links li {
background: url(puce.gif) 10px center no-repeat;
padding-left: 22px;
margin: 0.5ex 0;
}
div#content ul#announces-links a:hover {
color: black;
}
div#rub_consultation h2,
div#rub_service h2 {
padding: 1px 0 1px 6px;
}
/* Form Elements */
div.buttons {
margin-top: 1em;
text-align: center;
}
div.buttons div {
display: inline;
}
div.buttons br {
display: none;
}
p.command,
a.edit-custom-text,
#page div.back-home-button a,
div.buttons input {
background: #00cbfe;
color: white;
font-size: 120%;
font-weight: bold;
border: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding: 5px 15px;
cursor: pointer;
display: inline;
border: 1px solid transparent;
}
p.command {
line-height: 300%;
}
p.command a:focus,
#page div.back-home-button a:focus,
div.buttons input:focus {
border: 1px solid black;
}
#page div.back-home-button a:hover {
color: white;
text-decoration: none;
}
#content p.command a {
color: white;
cursor: pointer;
}
#content p.command a:hover {
color: white;
text-decoration: none;
}
form.quixote h3 {
padding-top: 1em;
border-bottom: 1px solid #00cbfe;
}
form.quixote h4 {
color: #616161;
}
div.widget div.title {
color: #2f2f2f;
font-weight: bold;
}
div.widget div.content {
margin-left: 1em;
}
div.widget div.content ul {
padding-left: 0;
}
div.DateWidget input,
div.EmailWidget input,
div.StringWidget input,
div.PasswordWidget input,
div.WcsExtraStringWidget input,
div.TextWidget textarea,
div.SingleSelectHintWidget select {
border: 1px solid #5fdefe;
background: #b5e0f0;
padding: 1px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
color: black;
-webkit-transition: background 200ms ease-out;
}
div.DateWidget input:focus,
div.EmailWidget input:focus,
div.StringWidget input:focus,
div.PasswordWidget input:focus,
div.WcsExtraStringWidget input:focus,
div.TextWidget textarea:focus,
div.SingleSelectHintWidget select:focus {
border: 1px solid #5fdefe;
background: white;
}
div.widget {
margin-bottom: 1ex;
}
div.hint {
font-size: 80%;
}
span.required {
background: transparent url(/qo/css/required.png) 0px 0.5ex no-repeat;
padding: 0 0 0 24px;
margin-left: 1ex;
overflow: hidden;
color: white;
}
form ul {
list-style: none;
}
div.errornotice {
background: #fd6;
border: 1px solid #ffae15;
margin: 1em 1em 1em 1em;
padding: 5px;
}
div.infonotice {
background: #7b95a6;
border: 1px solid #153eaf;
margin: 0em 1em 1em 1em;
padding: 5px;
}
div.error {
color: black;
font-weight: bold;
background: transparent url(/qo/css/warning.png) top left no-repeat;
padding-left: 20px;
}
/* steps */
div#steps h2 {
background: url(motif.png);
border-left: 10px solid #00cbfe;
padding: 1px 0 1px 6px;
}
div#steps ol {
list-style: none;
margin: 0;
padding: 0;
text-align: right;
}
div#steps span.marker {
float:left;
font-size:150%;
font-weight:bold;
color:#fff;
margin:-5px 0 0 ;
}
div#steps ol li {
margin: 1ex 0;
color: #fff;
letter-spacing:1px;
padding: 1ex;
font-weight: bold;
background: #646f72;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
div#steps ol li.current {
background: #00cbfe;
color:#fff;
}
div#steps ol ul {
background: white;
margin: 0 -1ex;
padding: 0px;
}
div#steps ol li.current ul li.current {
font-weight: bold;
}
div#steps li ul li.current {
background: white;
}
div#steps li ul li {
background: white;
font-weight: normal;
font-size:80%;
display:block;
color: #666;
}
div#steps li.current ul li {
color: #000;
}
/* other stuff */
div#gauche ul,
div#myspace ul {
padding: 0 0 0 1ex;
margin: 2ex 0;
}
div#gauche li,
div#myspace li {
list-style: none;
padding: 0;
margin: 1ex 0;
}
li a#logout,
li a#login {
background: url(key.gif) left center no-repeat;
padding-left: 20px;
}
li a#member,
li a#inscr {
background: url(member.gif) left center no-repeat;
padding-left: 20px;
}
div#gauche li a {
background: url(puce.gif) left center no-repeat;
padding-left: 15px;
}
div#gauche li a:hover {
background-image: url(puce-hover.gif);
}
div#services-2nd ul ul,
div#centre ul ul {
margin-top: 0.5ex;
}
div#services-2nd ul ul li a,
div#centre ul ul li a {
background: url(puce.gif) left center no-repeat;
padding-left: 12px;
}
div#services-2nd ul ul li a:hover,
div#centre ul ul li a:hover {
background-image: url(puce-hover.gif);
}
div#content a {
color: #222;
}
div#content a:hover {
color: #0ac1fc;
}
li.all-forms {
margin-top: 1ex;
}
div#new_member div.buttons,
div#member div.buttons {
text-align: left;
}
ul#announce-modes {
list-style:none;
margin:1em 0 0 2em;
}
ul#announce-modes li {
margin:0 0 0.5em 0;
}
li #par_mail{
background: url(mail.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
li #par_sms {
background: url(tel.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
li a#par_rss {
background: url(rss.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
li a#par_ical {
background: url(ical.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
div.address {
margin-left: 2em;
}
ul#month-links {
float: right;
padding: 1em;
text-align: right;
list-style: none;
}
ul#month-links li a {
color: #379cdb;
}
ul#month-links li a:hover {
text-decoration: underline;
}
div#page a.edit-custom-text {
float: right;
font-size: 50%;
margin: 0 0 1ex 1ex;
}
div#page a.edit-custom-text:hover {
color: black;
}
p#receiver {
margin-left: 2em;
}
#page div.back-home-button {
margin: 2em auto 1em auto;
text-align: center;
}
div#profile h3 {
margin-top: 2em;
}
div.dataview div.field {
margin: 1em 0;
}
div.dataview .value {
display: block;
margin-left: 1em;
margin-bottom: 1ex;
}
form div.page,
div.dataview div.page {
border: 1px solid #aaa;
padding: 1ex;
margin-bottom: 1em;
}
form div.page p,
div.dataview div.page p {
margin-top: 0;
}
form div.page h3,
div.dataview div.page h3 {
margin: 0;
margin-bottom: 1ex;
}
table#strongbox-items tr.expired td.expiration {
color: #800;
}
table#strongbox-items td {
padding: 2px 1ex;
}
table#strongbox-items tr.even {
background: #ddd;
}
table#strongbox-items tr.odd {
background: #eee;
}
p.use-file-from-strongbox span {
cursor: pointer;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,9 +0,0 @@
$(function() {
$('.dataview').before('<a href="#" id="disclose-dataview">Afficher le détail de la demande</a>');
$('#disclose-dataview').click(
function() {
$(this).hide();
$('.dataview').show();
return false;
});
});

View File

@ -1,9 +0,0 @@
<?xml version="1.0"?>
<theme name="entrouvert" version="1.0">
<label>Entr'ouvert</label>
<desc>Demonstrateur portails Au quotidien</desc>
<keywords>
<keyword>auquotidien-no-titles-in-section</keyword>
<keyword>auquotidien-welcome-in-services</keyword>
</keywords>
</theme>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 683 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1016 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

View File

@ -1,10 +0,0 @@
msgid "There were errors processing your form. See below for details."
msgstr ""
"Attention, un problème est survenu lors du remplissage du formulaire. "
"Veuillez regarder ci-dessous pour le corriger."
msgid "My Space"
msgstr "Mes démarches"
msgid "Services"
msgstr "Démarches en ligne"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,999 +0,0 @@
@font-face {
font-family: 'Museo500';
src: url(Museo500-Regular.otf);
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'MuseoSlab';
src: url(Museo_Slab.otf);
font-weight: normal;
font-style: normal;
}
html, body { margin: 0; font-family: arial, sans-serif; font-size: 13px;}
a { text-decoration: none; }
a:hover { text-decoration: underline; }
h1, h2, h3 { margin-top: 0; }
div#single-title, #nav,
#top, h2 {
font-family: MuseoSlab, sans-serif;
font-weight: normal;
}
h3, h4 {
font-family: Museo500, sans-serif;
font-weight: normal;
}
a {
-webkit-transition: color 200ms ease-out;
}
/* layout */
body {
overflow-x: hidden;
background: white;
max-width: 1000px;
margin: 0 auto;
}
div#page {
width: 100%;
}
div#header {
background-color: #ffffff;
width: 100%;
margin: 0 0 0 0;
position: relative;
top: 0px;
z-index: 0;
}
div#top {
margin: 0 auto 0 auto;
}
div#top h1 {
width: 12em;
text-align: center;
padding-top: 3em;
padding-left: 2em;
margin-left: 20px;
font-size: 120%;
font-weight: normal;
}
div#top h1 a {
color: white;
text-shadow: #6374AB 0px 0px 3px;
}
div#top a img {
border: 0;
}
div#main-content-wrapper {
position: relative;
z-index: 100;
max-width: 1000px;
margin: 0px auto 0px auto;
}
div#main-content {
margin: 0;
min-height: 300px;
}
div#footer {
clear: both;
background: white;
padding: 0px;
width: 90%;
margin: 10px auto 0 auto;
position: relative;
}
p#legal {
font-size: small;
color: #666;
margin: 0;
margin-top: 5em;
font-size: 70%;
display: inline-block;
padding-top: 5px;
border-top: 1px solid #666;
}
#content {
position: relative;
margin:0;
color: rgb(58, 58, 58);
}
div#content a {
color: #37a7da;
}
div#content a:hover {
text-decoration: underline;
}
#menu {
font-size: 130%;
margin-top: -1px;
}
#menu ul {
list-style: none;
margin: 0;
padding: 10px 0 32px 0;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topright: 5px;
border-top-right-radius: 5px;
}
#menu li {
display: inline;
margin: 0px 10px 0 0;
padding: 5px;
background: #37a7da;
border: 5px solid transparent;
border-width: 2px 5px;
-webkit-transition: all .2s ease-in-out;
-moz-transition: all .2s ease-in-out;
}
#menu li a {
color: white;
text-transform: uppercase;
white-space: pre;
}
#menu li:hover {
background-color: #f4bc03;
border-color: #f4bc03;
}
#menu li:hover a {
text-decoration: none;
}
#menu li.selected, #menu li.ancestor {
background: #515151;
border-color: #515151;
}
#menu li.selected a {
color: white;
}
#left {
float: left;
width: 49.5%;
}
#right {
float: right;
width: 49.5%;
}
br.clear {
clear: both;
}
#error-404, #error-500, #content .block, #password-changed {
background: white;
font-size: 110%;
margin-bottom: 1em;
}
#content .block h2 {
background: transparent;
font-weight: normal;
color: white;
text-transform: uppercase;
padding: 6px 10px 6px 10px;
color: #333;
font-size: 130%;
cursor: default; /* someday, perhaps, cursor: move */
}
#content .block h2.feeds {
background-image: url(Picto-Bulle.png);
}
#content .block h2.newsletters {
background-image: url(Picto-coeur.png);
}
#content .block h3,
#content .block p {
margin: 1ex 10px;
padding-bottom: 1px;
}
#content .demarches ul,
#content ul.mes-demarches {
list-style: none;
padding-left: 0px;
margin: 0px;
-webkit-column-count: 2;
-moz-column-count: 2;
column-count: 2;
}
#content ul.mes-demarches a,
#content .demarches ul a {
color: inherit;
font-weight: bold;
background: transparent url(bullet_rouge.png) left center no-repeat;
padding-left: 10px;
}
#content ul.mes-demarches a:hover,
#content .demarches ul a:hover {
color: #37a7da;
}
#content ul.mes-demarches li,
#content .demarches ul li {
margin: 1ex 0 10px 1ex;
padding-left: 10px;
-webkit-column-break-inside: avoid;
-moz-column-break-inside: avoid;
column-break-inside: avoid;
}
#content .demarches .toutes-les-demarches {
padding: 10px 0 10px 0;
margin-left: 20px;
}
#content .toutes-les-demarches a {
background: transparent url(button_orange_eye.png) no-repeat 0px center;
color: #37a7da;
text-transform: uppercase;
padding-left: 30px;
font-size: 130%;
}
#content .toutes-les-demarches a:hover {
color: #37a7da;
}
#commune-selector {
margin-left: 5px;
margin-bottom: 10px;
}
#content #futurs-demarches {
overflow-y: hidden;
margin: 5px;
padding-bottom: 15px;
}
#content #futurs-demarches.selected {
display: block;
}
div#single-title {
border: 1px solid #a5a7aa;
border-width: 1px 0px;
font-size: 110%;
text-align: center;
padding: 10px 0;
}
body.narrow-page #main-content {
background: white;
margin-top: 0;
padding: 10px 10px 0 10px;
}
body.narrow-page #main-content form div input {
display: block;
margin-left: 10px;
margin-bottom: 2ex;
}
div#welcome {
text-align: justify;
margin: 0 1em;
}
div#welcome h2 {
margin: 1ex 0;
font-size: 300%;
background: transparent url(e54.png) left center no-repeat;
padding-left: 70px;
text-align: left;
width: 150%;
}
div#welcome {
float: left;
width: 60%;
}
span.helptext {
color: #666;
}
body.narrow-page div.right {
width: 30%;
float: right;
margin: 1ex auto;
}
body.narrow-page div.right form {
text-align: left;
background: white;
margin: 10px 10px;
padding: 10px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: 1px solid #ccc;
box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
}
body.narrow-page div.right form div label {
font-weight: bold;
width: 14em;
display: block;
float: left;
padding-top: 3px;
}
body.narrow-page div.right form div input {
width: 17em;
}
body.narrow-page div.right form div.form-field-required label:after {
content: "";
}
body.narrow-page div.right form > input {
display: block;
margin: 1em auto 0 auto;
background: #37a7da;
color: white;
border: none;
padding: 3px 1em;
}
div.login-actions {
text-align: center;
}
.region-header {
width: 100%;
position: absolute;
top: 0px;
}
#toplinks {
background: #ffffff;
position: relative;
float: right;
width: 250px;
padding: 5px 5px 5px 5px;
}
#toplinks span {
width: 100%;
display: block;
margin: 0;
padding: 0;
color: #888;
background: url(button_connexion.gif) left center no-repeat;
border: 1px solid #e9e9e9;
line-height: 20px;
height: 22px;
}
#toplinks a {
color: #888;
border: 1px solid transparent;
}
#toplinks a.logout {
padding-left: 30px;
}
#toplinks a:hover {
text-decoration: none;
color: #222;
}
#toplinks a.restricted {
color: white;
float: right;
padding: 0 1ex;
border: 1px outset #888;
background: #37a7da;
}
div#username {
float: right;
padding: 5px 5px 5px 5px;
background: white;
line-height: 20px;
height: 22px;
border: 1px solid white;
}
ul.newsList {
list-style: none;
}
ul.newsList li.abonne {
margin: 0;
padding: 0;
}
.abonne {
padding-left: 20px;
background: transparent url(Validation.png) center left no-repeat;
}
.nonAbonne {
padding-left: 20px;
background: transparent url(Annulation.png) center left no-repeat;
}
/* page de profil */
#my-informations {
margin-bottom: 15px;
padding: 0px;
}
#my-informations p {
padding: 0 5px;
}
#my-informations select,
#my-informations input {
margin-left: 10px;
display: block;
}
/* forms error reporting */
.errorlist {
list-style: none;
padding-left: 0;
margin-left: 0;
}
ul.errorlist li {
display: block;
color: #f44;
}
.form-field-required label:after {
content: '*';
color: #D90024;
}
ul.errorlist + p {
margin-top: 0px;
}
.passerelle-register-plugin input + label {
background: transparent url(Annulation.png) center left no-repeat;
}
.passerelle-register-plugin input:checked + label {
background: transparent url(Validation.png) center left no-repeat;
}
.passerelle-register-plugin td input {
display: none
}
.passerelle-register-plugin td label {
padding-left: 2em;
}
div.block form {
padding: 0 1ex;
}
table.announces {
width: 100%;
margin-bottom: 1em;
}
table.announces thead td {
font-weight: bold;
}
table.announces thead th {
width: 30%;
}
table.announces tbody td {
text-align: center;
}
table.announces tbody th {
width: 35%;
text-align: left;
font-weight: normal;
}
.chapeau {
font-style: italic;
font-size: 110%;
}
/* mon compte */
#my-informations-form {
width: 90%;
padding-bottom: 1em;
}
#my-informations-form input[type~=text] {
width: 100%;
}
#id_edit-profile-email_wrap, #id_edit-profile-address_wrap {
clear: both;
}
#id_edit-profile-first_name_wrap, #id_edit-profile-phone_wrap, #id_edit-profile-postal_code_wrap {
width: 45%;
float: left;
}
#id_edit-profile-last_name_wrap, #id_edit-profile-mobile_wrap, #id_edit-profile-city_wrap {
width: 45%;
float: right;
}
/* pied de page */
#footer-menu {
position: absolute;
display: block;
top: 20px;
left: 20px;
width: 435px;
list-style: none;
margin: 0;
padding: 0;
text-align: left;
}
.footer-menu-leaf {
display: inline;
margin: 0;
padding: 0;
padding-right: 20px;
padding-bottom: 20px;
float: left;
}
.footer-menu-leaf-link, .footer-menu-leaf-link:hover {
display: block;
width: 125px;
height: 26px;
line-height: 26px;
background: #ffffff;
text-align: center;
text-transform: uppercase;
color: #515151;
text-decoration: none;
font-size: 14px;
}
/* pages d'aide */
#help-content {
background: white;
position: relative;
padding: 10px 20px;
}
#help-title {
background: #e6e6d6 url(toptitle.png) no-repeat left top;
font-weight: bold;
color: #37a7da;
text-transform: uppercase;
padding: 6px 10px 6px 50px;
font-size: 200%;
cursor: default; /* someday, perhaps, cursor: move */
}
#help-page-title {
color: #37a7da;
padding-bottom: 20px;
}
#help-page-title.aide {
display: none;
}
#help-text {
width: 580px;
margin-left: 380px;
}
.clear {
clear: both;
}
#help-menu {
width: 360px;
float: left;
}
#help-summary-caption {
background: #37a7da;
color: white;
font-size: 150%;
font-weith: bold;
text-align: center;
padding: 15px 0px;
}
#help-menu #help-summary-caption-link, #help-menu #help-summary-caption-link:hover {
background: #37a7da;
color: white;
text-decoration: none;
}
#help-menu-content {
padding: 0;
margin: 0;
}
#help-menu-content > li {
background: #e6e6d6;
margin-bottom: 5px;
list-style: none;
font-size: 150%;
font-weight: bold;
line-height: 1.5em;
}
#help-menu-content > li > ul {
background: white;
margin-bottom: 5px;
list-style: none;
font-size: 100%;
font-weight: bold;
line-height: 1.5em;
padding: 10px 10px;
}
#help-menu-content li.ancestor {
background: rgb(58, 58, 58);
}
#help-menu-content li.ancestor > a, #help-menu-content li.ancestor > a.hover {
color: white;
}
#help-menu-content > li > ul > li {
padding: 0px 10px;
font-size: 80%;
}
#help-menu-content > li > ul > li.selected {
border-left: solid 4px #37a7da;
}
#help-menu-content li a, #help-menu-content li a:hover {
color: rgb(58, 58, 58);
text-decoration: none;
}
#my-password {
padding-bottom: 1ex;
}
#my-password p {
font-weight: bold;
}
#my-password p a {
color: inherit;
padding: 1ex;
}
ul.show-user-feeds li {
list-style: none;
background: url(mediathk.png) left center no-repeat;
min-height: 30px;
padding-left: 30px;
padding-bottom: 4px;
}
ul.show-user-feeds li.aquarium { background-image: url(aquarium.png); }
ul.show-user-feeds li.conservatoire { background-image: url(conservatoire.png); }
ul.show-user-feeds li.ecolothk { background-image: url(ecolothk.png); }
ul.show-user-feeds li.facebook { background-image: url(facebook.png); }
ul.show-user-feeds li.lattara { background-image: url(lattara.png); }
ul.show-user-feeds li.mediathk { background-image: url(mediathk.png); }
ul.show-user-feeds li.opendata { background-image: url(opendata.png); }
ul.show-user-feeds li.planet { background-image: url(planet.png); }
#id_new_password1_help_text, #id_password1_help_text {
font-style: italic;
font-size: 90%;
color: red;
}
/* saml post page */
.post-redirect {
background: white;
}
#messages li {
list-style-type: none;
padding: 10px;
color: white;
}
#messages {
position: absolute;
top: 120px;
left: 1200px;
}
#messages.messages-login {
position: static;
}
#messages.messages-login li {
margin: 0px;
margin-left: 100px;
margin-right: 100px;
}
#messages li.warning {
border: 1px solid #DB771F;
background: #37a7da;
}
#messages li.error {
border: 1px solid #DB771F;
background: #DB1F28;
}
#messages li.info {
border: 1px solid #301F91;
background: #1F8091;
}
/* registration form */
img.captcha {
float: left;
}
#id_captcha_1 {
width: 13em;
}
/* pimping up */
h1#logo img {
-webkit-transition: all .2s ease-in-out;
-moz-transition: all .2s ease-in-out;
}
h1#logo img:hover {
/*
-webkit-transform: scale(1.05);
-moz-transform: scale(1.05);
*/
}
#nav h3 {
display: none;
}
#nav {
list-style: none;
margin: 0 auto;
text-align: center;
width: 100%;
margin: auto;
padding-top: 7px;
margin-top: 10px;
margin-bottom: 12px;
font-size: 110%;
}
#nav ul {
margin: 0;
padding: 1ex;
border: 1px solid #a5a7aa;
border-width: 1px 0px;
}
#nav li {
margin: 1ex 0;
padding: 1.5ex 1ex;
display: inline;
}
#nav a {
color: #404041;
text-decoration: none;
}
#nav li:after {
content: " / ";
color: #404041;
}
#nav li.selected:after,
#nav li.ancestor:after,
#nav li a:hover,
#nav li.selected a,
#nav li.ancestor a {
color: #e0007a;
}
div.block {
text-align: left;
background: white;
margin: 10px 10px;
padding: 10px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: 1px solid #ccc;
box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
}
h2#welcome-title {
margin-top: 2em;
margin-bottom: 1em;
}
input[type="text"],
input[type="password"] {
border: 1px solid #aaa;
background: white url(field-shade.png) top left repeat-x;
padding: 1px;
border-radius: 2px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
color: black;
-webkit-transition: background 200ms ease-out;
display: block;
}
input[type="text"]:focus,
input[type="password"]:focus {
border: 1px solid #888;
background: white;
}
div#registration {
width: 40em;
text-align: justify;
margin: 2em auto;
}
div#registration form {
margin: 2em 0;
}
div#registration label {
display: block;
width: 15em;
float: left;
text-align: right;
padding-right: 1em;
color: #777;
}
div#registration ul.errorlist {
margin: 0;
padding-left: 16em;
}
div#registration input[type="submit"] {
margin-left: 17em;
}
#toplinks {
background: #ffffff;
position: absolute;
top: 3em;
right: 0;
width: 40%;
padding: 5px 5px 5px 5px;
}
#toplinks span {
width: 100%;
display: block;
margin: 0;
padding: 0;
color: #888;
background: url(button_connexion.gif) left center no-repeat;
border: 1px solid #e9e9e9;
line-height: 20px;
height: 22px;
}
#toplinks span.logged-in {
background: none;
border: none;
text-align: right;
}
#toplinks a {
color: #888;
border: 1px solid transparent;
}
#toplinks a:hover {
text-decoration: none;
color: #222;
}
#toplinks a.restricted {
color: white;
float: right;
padding: 0.5ex 1ex;
border: 1px outset #888;
background: #672290;
position: absolute;
top: -3em;
right: 3px;
}
#toplinks a.logout {
background: url(button_connexion.gif) left center no-repeat;
display: inline-block;
padding: 1px;
padding-left: 30px;
border: 1px solid #e9e9e9;
padding-right: 1em;
margin-right: -2px;
}
#contact-us {
z-index: 500;
position: absolute;
top: 100px;
left: 300px;
background: #37a7da;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
color: white;
text-decoration: none;
-webkit-transition: all .2s ease-in-out;
-moz-transition: all .2s ease-in-out;
}
#contact-us:hover {
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, .9);
-moz-box-shadow: 0 0 2px rgba(0, 0, 0, .9);
border: none;
}
#contact-us a {
padding: 8px 12px;
display: block;
color: white;
}
#contact-us a:hover {
text-decoration: none;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,83 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>[page_title]</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="/themes/auquotidien/favicon.png" />
<script type="text/javascript" src="/qo/js/jquery.js"></script>
[script]
<link rel="stylesheet" type="text/css" href="[css]"/>
["<!--[if lt IE 10]>"]<style>
div#services > ul > li { width: 48%; float: left; height: 18em; }
div#centre { padding-top: 45px; margin-top: 0px; }
</style>["<![endif]-->"]
<script type="text/javascript" src="[theme_url]/dataview.js"></script>
</head>
<body[if-any onload] onload="[onload]"[end]>
<div id="page">
<div id="header">
<div id="top">
<h1 id="logo"><a href="/"><img src="[theme_url]/logo.png" alt="Entr'ouvert"/></a>Démarches en ligne</h1>
<div class="region-header">
<div id="toplinks">
[if-any user]
<span class="logged-in">
<!--<a class="myspace" href="/myspace/">Mes démarches</a>-->
<a class="logout" href="[root_url]logout">D&eacute;connexion</a>
</span>
[else]
<span class="login"><a href="[root_url]login/">Connexion</a> / <a href="[root_url]register/">Inscription</a></span>
[end]
[if-any user]
[is session_user_admin_access "True"]
<a class="restricted" href="[root_url]admin/">Administration</a>
[else]
[is session_user_backoffice_access "True"]
<a class="restricted" href="[root_url]backoffice/">Back office</a>
[end]
[end]
[end]
</div>
</div>
<div id="contact-us"><a href="mailto:info@entrouvert.com">Contactez-nous</a></div>
</div>
</div> <!-- header -->
<div id="main-content-wrapper">
<div id="nav">[links]</div>
<div id="main-content">
<div id="content" [if-any is_index]class="large"[end] [if-any form_number]class="large"[end]>
[if-any gauche]
<div id="gauche">
[gauche]
</div>
[end]
[if-any bigdiv]<div id="[bigdiv]" [if-any breadcrumb]class="has-breadcrumb"[end]>[end]
[if-any title]<h2>[title]</h2>[end]
[body]
[if-any bigdiv]</div>[end]
</div> <!-- #content -->
<hr class="clear"/>
</div> <!-- #main-content -->
</div> <!-- #main-content-wrapper -->
<div id="footer-wrapper">
<div id="footer">
<p id="legal">Copyright © 2006-2014 Entr'ouvert</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,878 +0,0 @@
@import url(/static/xstatic/themes/smoothness/jquery-ui.min.css);
@import url(/qo/css/qommon.css);
@import url(style.css);
div#content {
margin:0;
}
div#sidebox h3 {
margin: 0 0 1em 0;
}
div#gauche {
clear: both;
width: 18.5%;
float: left;
margin-top: -29px;
}
div#member,
div#new_member,
div#accessibility,
div#contact,
div#info,
div#help,
div#rub_agenda,
div#rub_annonce,
div#rub_consultation,
div#rub_service,
div#centre,
div#profile {
width: 79.5%;
float: right;
background: white;
margin-top: 15px;
}
div#breadcrumb,
div#profile,
div.large div#rub_service,
div.large div#centre {
width: 100%;
float: none;
clear: both;
}
div#droite {
width: 275px;
float: left;
display: none;
}
div#breadcrumb {
background: white;
padding: 3px 0px;
z-index: 10;
color: #888;
margin-top: 22px;
}
div#centre {
margin-top: 15px;
}
#content div#breadcrumb a {
color: #666;
font-size: 12px;
font-weight: normal;
padding: 0 5px;
}
div#rub_service div.dataview,
div#rub_service dl#evolutions,
div#rub_service form {
padding: 1ex;
}
hr.clear {
clear: both;
padding-bottom: 0em;
border: none;
}
#toplinks span.logged-in a.myspace,
#toplinks span.logged-in a.myaccount {
padding-right: 20px;
}
#toplinks span.login {
text-align: center;
}
/* content styling */
div#rub_consultation h2,
div#rub_service h2,
div#rub_annonce h2,
div#rub_agenda h2,
div#profile h2,
div#services-2nd h3,
div#member h2,
div#help h2, div#info h2, div#accessibility h2, div#contact h2,
div#gauche h3,
div.large div#rub_service h3,
div#centre h3 {
border: 1px solid #a5a7aa;
border-width: 1px 0px;
list-style: none;
margin: 0 auto;
text-align: center;
padding: 10px 0;
margin: auto;
margin-bottom: 12px;
font-size: 110%;
}
div#services-2nd ul,
div#centre ul {
padding: 0;
list-style: none;
}
div#services-2nd ul strong,
div#centre ul strong {
margin-left: 18px;
padding: 1px 0 1px 0;
}
div#services-2nd ul strong a,
div#centre ul strong a {
color: black;
}
div#services-2nd ul strong a:hover,
div#centre ul strong a:hover {
text-decoration: none;
border-color: #265aa2;
}
div#services-2nd ul ul,
div#centre ul ul {
padding-left: 26px;
margin-bottom: 20px;
}
div#services-2nd ul p,
div#centre ul p {
margin-left: 18px;
}
div#myspace h3 {
background: #265aa2;
border-left: 10px solid #265aa2;
padding: 1px 0 1px 6px;
}
div#consultations h3 {
background: #265aa2;
border-left: 10px solid #265aa2;
padding: 1px 0 1px 6px;
}
div#consultations ul {
margin: 0;
padding: 0 0 0 10px;
}
ul.catforms li,
div#consultations li {
list-style: none;
padding-left: 12px;
background: url(puce.gif) left center no-repeat;
}
div#announces h3 {
background: #265aa2;
border-left: 10px solid #265aa2;
padding: 1px 0 1px 6px;
}
div#announces h4 {
border-bottom: 1px solid #a2ff00;
}
div#announces h4, p {
margin-left: 7px;
margin-right: 7px;
}
div#announces p {
text-align: justify;
}
ul#announces-links {
background: #a2ff00;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding: 2px 5px;
list-style: none;
font-weight: bold;
}
ul#announces-links li {
background: url(puce.gif) 10px center no-repeat;
padding-left: 22px;
margin: 0.5ex 0;
}
div#content ul#announces-links a:hover {
color: black;
}
/* Form Elements */
div.buttons {
margin-top: 1em;
}
div.buttons div {
display: inline;
}
div.buttons br {
display: none;
}
p.command,
a.edit-custom-text,
div.buttons input {
background: #37a7da;
color: white;
font-size: 120%;
font-weight: normal;
border: none;
padding: 5px 15px;
cursor: pointer;
display: inline;
border: 1px solid transparent;
}
p.command {
line-height: 300%;
}
p.command a:focus,
div.buttons input:focus {
border: 1px solid black;
}
#content p.command a {
color: white;
cursor: pointer;
}
#content p.command a:hover {
color: white;
text-decoration: none;
}
form.quixote h3 {
padding-top: 1em;
border-bottom: 1px solid #265aa2;
}
form.quixote h4 {
color: #616161;
}
div.widget div.title {
color: #2f2f2f;
font-weight: bold;
}
div.widget div.content {
margin-left: 1em;
}
div.widget div.content ul {
padding-left: 0;
}
div.DateWidget input,
div.EmailWidget input,
div.StringWidget input,
div.PasswordWidget input,
div.WcsExtraStringWidget input,
div.TextWidget textarea,
div.SingleSelectHintWidget select {
border: 1px solid #aaa;
background: white url(field-shade.png) top left repeat-x;
padding: 1px;
border-radius: 2px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
color: black;
-webkit-transition: background 200ms ease-out;
}
div.DateWidget input:focus,
div.EmailWidget input:focus,
div.StringWidget input:focus,
div.PasswordWidget input:focus,
div.WcsExtraStringWidget input:focus,
div.TextWidget textarea:focus,
div.SingleSelectHintWidget select:focus {
border: 1px solid #888;
background: white;
}
div.widget {
margin-bottom: 1ex;
}
div.hint {
font-size: 80%;
}
span.required {
background: transparent url(/qo/css/required.png) 0px 0.5ex no-repeat;
padding: 0 0 0 24px;
margin-left: 1ex;
overflow: hidden;
color: white;
}
div.errornotice {
background: #fd6;
border: 1px solid #ffae15;
margin: 1em 1em 1em 1em;
padding: 5px;
}
div.infonotice {
background: #7b95a6;
border: 1px solid #153eaf;
margin: 0em 1em 1em 1em;
padding: 5px;
}
div.error {
color: black;
font-weight: bold;
background: transparent url(dialog-warning.png) top left no-repeat;
padding-left: 22px;
margin-left: 5px;
}
/* steps */
div#steps h2 {
display: none;
}
div#steps ol {
font-family: Museo500, sans-serif;
font-weight: normal;
list-style: none;
margin: 0;
margin-top: 44px;
padding: 0;
text-align: center;
color: #868686;
}
div#steps span.marker {
float:left;
font-size: 250%;
font-weight: normal;
margin: -5px 0 0 ;
position: relative;
top: -6px;
}
div#steps ol > li {
border: 1px solid #a5a7aa;
border-width: 1px 0px;
}
div#steps ol li {
margin: 1ex 0;
letter-spacing:1px;
padding: 1ex;
}
div#steps ol li.current {
color: #444;
}
div#steps ol li.current span.label {
font-weight: bold;
}
div#steps ol li.current .marker {
}
div#steps ol ul {
background: white;
margin: 0 -1ex;
padding: 0px;
}
div#steps ol li.current ul li.current {
}
div#steps li ul li:first-child {
margin-top: 1em;
}
div#steps li ul li {
margin: 0;
font-weight: normal;
font-size: 90%;
display:block;
color: #666;
text-align: left;
padding-left: 30px;
}
div#steps li ul li.current {
border-radius: 0;
-moz-border-radius: 0;
-webkit-border-radius: 0;
}
div#steps li.current ul li {
color: #535353;
}
div#steps li.current ul li.current {
color: white;
background: #b1b1b1;
}
/* other stuff */
div#gauche ul,
div#myspace ul {
padding: 0 0 0 1ex;
margin: 2ex 0;
}
div#gauche li,
div#myspace li {
list-style: none;
padding: 0;
margin: 1ex 0;
}
div#centre li li {
list-style: circle;
}
div#centre li li a,
div#gauche li a {
}
div#gauche li a:hover {
}
div#services-2nd ul ul,
div#centre ul ul {
margin-top: 0.5ex;
}
div#content a {
color: #265aa2;
}
div#content a:hover {
color: #265aa2;
}
div#content form a {
border-bottom: 1px dotted #265aa2;
}
div#content form a:hover {
border-bottom: 1px solid #265aa2;
text-decoration: none;
}
li.all-forms {
margin-top: 1ex;
}
div#new_member div.buttons,
div#member div.buttons {
text-align: left;
}
ul#announce-modes {
list-style:none;
margin:1em 0 0 2em;
}
ul#announce-modes li {
margin:0 0 0.5em 0;
}
li #par_mail{
background: url(mail.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
li #par_sms {
background: url(tel.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
li a#par_rss {
background: url(rss.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
li a#par_ical {
background: url(ical.gif) left center no-repeat;
padding: 5px 0 5px 20px;
}
div.address {
margin-left: 2em;
}
ul#month-links {
float: right;
padding: 1em;
text-align: right;
list-style: none;
}
ul#month-links li a {
color: #379cdb;
}
ul#month-links li a:hover {
text-decoration: underline;
}
div#page a.edit-custom-text {
float: right;
font-size: 50%;
margin: 0 0 1ex 1ex;
}
div#page a.edit-custom-text:hover {
color: black;
}
p#receiver {
margin-left: 2em;
}
#page div.back-home-button {
margin: 2em auto 1em auto;
}
h2.foldable {
display: none;
}
div#profile h3 {
margin-top: 2em;
}
div.dataview span.value {
display: block;
margin-left: 1em;
margin-bottom: 1ex;
}
form div.page,
div.dataview div.page {
border: 1px solid #aaa;
padding: 1ex;
margin-bottom: 1em;
}
form div.page p,
div.dataview div.page p {
margin-top: 0;
}
form div.page h3,
div.dataview div.page h3 {
margin: 0;
margin-bottom: 1ex;
}
#profile form ul li {line-height: 20px; padding-bottom: 5px;border-bottom: 1px solid #CCCCCC;}
#rub_service h2 {clear: both;}
div.dataview {clear: both; padding-bottom: 40px;}
div.dataview p span.label {font-weight: bold; text-decoration: underline;}
div.dataview p span.value {}
table#strongbox-items tr.expired td.expiration {
color: #800;
}
table#strongbox-items td {
padding: 2px 1ex;
}
table#strongbox-items tr.even {
background: #ddd;
}
table#strongbox-items tr.odd {
background: #eee;
}
p.infopratique ul {
list-style-type: circle;
padding-bottom: 3px;
}
p.infopratique table, p.infopratique table tr, p.infopratique table tr th, p.infopratique table tr td {
border: 1px solid #333333;
}
p.infopratique table tr th {
}
div.content table thead {}
div.content table thead th {background-color: #265aa2; color: white;}
div.content table thead tr {}
div.content table thead td {background-color: #265aa2;}
div.content table tbody {}
div.content table tbody th {background-color: #cccccc; color: black; width: 200px; text-align: left; padding-left: 5px;}
div.content table tbody tr {background-color: #eeeeee; border-bottom: 1px solid #CCCCCC;}
div.content table tbody tr td {}
div.content table tbody tr td input {
border: 1px solid #aaa;
background: white url(field-shade.png) top left repeat-x;
padding: 1px;
border-radius: 2px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
color: black;
-webkit-transition: background 200ms ease-out;
}
div.content table tbody tr td input:focus {
border: 1px solid #888;
background: white;
}
.fileprogress {
border: 1px solid #888;
}
.fileprogress .bar {
background: #09f;
line-height: 1.5em;
padding-left: 1ex;
font-weight: bold;
white-space: nowrap;
}
.fileinfo {
line-height: 1.5em;
}
.fileinfo .remove {
height: 16px;
width: 16px;
background: url(/qo/images/stock_remove_16.png) top left no-repeat;
display: inline-block;
margin-left: 1em;
text-indent: 100%;
overflow: hidden;
}
.passStrengthify {
padding-left: 1em;
}
div.dataview {
display: none;
}
div#content #disclose-dataview {
display: block;
margin: 1em 0;
}
h3#agenda-link,
form#follow-form {
display: none;
}
div#sidebox div#links {
display: none;
}
div.TableWidget input {
width: 7em;
}
.chapeau {
font-style: italic;
font-size: 110%;
}
div#centre {
background: none;
}
div#services > ul {
column-count: 2;
-webkit-column-count: 2;
-moz-column-count: 2;
}
div#services > ul > li {
margin: 0px 1ex;
background: white;
column-break-inside: avoid;
-moz-column-break-inside: avoid;
-webkit-column-break-inside: avoid;
display: inline-block;
margin-bottom: 10px;
width: 90%;
width: calc(95% - 20px); /* - padding */
text-align: left;
background: white;
margin: 10px 10px;
padding: 10px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: 1px solid #ccc;
box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
}
div#services > ul > li strong {
display: block;
background: transparent;
font-weight: normal;
text-transform: uppercase;
padding: 6px 10px 6px 10px;
color: #333;
font-size: 130%;
cursor: default; /* someday, perhaps, cursor: move */
font-family: MuseoSlab, sans-serif;
font-weight: normal;
}
div#services > ul > li strong a {
color: #333;
}
div#services > ul > li strong a:hover {
font-weight: bold;
}
div#home-page-intro {
background: white;
padding: 1ex;
}
div#agglo-little-links {
width: 475px;
padding-top: 5px;
}
div#agglo-little-links ul {
margin: 15px 20px;
padding: 0;
}
div#agglo-little-links li {
margin: 0;
display: inline;
list-style: none;
padding-right: 20px;
padding-bottom: 20px;
float: left;
}
div#agglo-little-links li a {
display: block;
width: 125px;
height: 26px;
line-height: 26px;
background: white;
text-align: center;
text-transform: uppercase;
color: #515151;
text-decoration: none;
font-size: 14px;
}
#profile-links,
h3#my-forms {
display: none;
}
p#welcome {
}
div.buttons input:hover {
box-shadow: 0px 0px 5px #777;
}
div.buttons input[name="submit"] {
font-weight: bold;
}
@media screen and (max-width: 760px) {
div#services > ul {
column-count: 1;
-webkit-column-count: 1;
-moz-column-count: 1;
}
#toplinks {
top: 0;
left: 0;
width: 98%;
}
div#gauche {
float: none;
width: 100%;
}
div#steps {
position: absolute;
top: -130px;
right: 1%;
width: 50%;
}
div#steps ol {
margin-top: 0;
}
div#steps ol li ul {
display: none;
}
div#member, div#new_member, div#accessibility, div#contact, div#info,
div#help, div#rub_agenda, div#rub_annonce, div#rub_consultation,
div#rub_service, div#centre, div#profile {
float: none;
width: 100%;
}
}
@media screen and (max-width: 400px) {
div#top h1 {
padding-left: 1ex;
margin-left: 0;
}
}
div#services > h3 { display: none; }
div.qommon-map {
height: 280px;
}
div#side {
margin-top: 43px;
}
div#rub_service div#tracking-code {
float: right;
}

View File

@ -115,9 +115,7 @@ setup(
'sdist': eo_sdist,
},
include_package_data=True,
data_files=data_tree('share/wcs/themes/auquotidien', 'theme')
+ data_tree('share/wcs/themes/', 'data/themes/')
+ data_tree('share/auquotidien/apache-errors', 'apache-errors')
data_files=data_tree('share/auquotidien/apache-errors', 'apache-errors')
+ [
(
'share/wcs/',

View File

@ -81,4 +81,4 @@ def test_with_superuser():
create_superuser()
app = login(get_app(pub))
# this makes sure the extension loaded properly
resp = app.get('/backoffice/settings/texts/aq-home-page', status=200)
assert 'auquotidien' in pub.translation_domains

View File

@ -69,61 +69,6 @@ def test_with_user():
user = create_user()
app = login(get_app(pub), username='user', password='user')
resp = app.get('/', status=200)
resp = app.get('/myspace/', status=200)
def test_myspace_with_user_forms():
user = create_user()
formdef = create_formdef()
cat = Category(name='cat')
cat.store()
formdef.category_id = cat.id
formdef.enable_tracking_codes = True
wf = Workflow(name='status')
st1 = wf.add_status('Status1', 'st1')
wf.store()
formdef.workflow_id = wf.id
formdef.store()
formdef.data_class().wipe()
formdata = formdef.data_class()()
formdata.user_id = user.id
formdata.status = 'wf-st1'
formdata.receipt_time = time.localtime()
formdata.data = {}
formdata.store()
draft = formdef.data_class()()
draft.user_id = user.id
draft.status = 'draft'
draft.receipt_time = time.localtime()
draft.data = {}
draft.store()
app = login(get_app(pub), username='user', password='user')
resp = app.get('/myspace/')
assert formdata.id != draft.id
assert '<a href="/test/%s/"' % formdata.id in resp
assert '<a href="/test/%s/"' % draft.id in resp
resp = app.get('/test/%s/' % formdata.id, status=302)
assert resp.location == 'http://example.net/cat/test/%s/' % formdata.id
resp = app.get('/test/%s/' % draft.id, status=302)
resp = resp.follow(status=302)
assert resp.location.startswith('http://example.net/cat/test/?mt=')
resp = resp.follow(status=200)
# disable formdef: formdatas are still visible and accessible, drafts are not
formdef.disabled = True
formdef.store()
resp = app.get('/myspace/')
assert formdata.id != draft.id
assert '<a href="/test/%s/"' % formdata.id in resp
assert not '<a href="/test/%s"' % draft.id in resp
resp = app.get('/cat/test/%s' % formdata.id)
resp.status_int = 200
resp = app.get('/cat/test/%s/' % draft.id, status=302)
resp = resp.follow(status=403)
def test_form_category_redirection():

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

View File

@ -1,27 +0,0 @@
/* Regie invoice listing */
#invoice-listing tbody {
font-size: smaller
}
#invoice-listing input {
margin: 0px;
}
#invoice-listing thead tr {
margin-bottom: 5px;
}
#invoice-listing {
border-spacing: 0px;
width: 100%;
}
#invoice-listing tbody td {
padding: 3px;
}
#invoice-listing thead td {
border-bottom: 1px solid black;
}
#invoice-listing tbody:nth-child(even) {
background: #777;
color: white;
}
#invoice-listing tbody td.amount {
text-align: right;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 B

View File

@ -1,6 +0,0 @@
<?xml version="1.0"?>
<theme name="auquotidien" version="1.0">
<label>Au Quotidien</label>
<desc>Theme for au-quotidien.fr</desc>
<author>Frederic Peters</author>
</theme>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 B

Some files were not shown because too many files have changed in this diff Show More