move
authorOlivier Larchevêque <olivier.larcheveque@gmail.com>
Tue, 20 Sep 2011 19:11:42 +0000 (15:11 -0400)
committerOlivier Larchevêque <olivier.larcheveque@gmail.com>
Tue, 20 Sep 2011 19:11:42 +0000 (15:11 -0400)
31 files changed:
.gitignore [new file with mode: 0644]
CHANGES [new file with mode: 0644]
MANIFEST.in [new file with mode: 0644]
README [new file with mode: 0644]
auf/__init__.py [new file with mode: 0644]
auf/django/__init__.py [new file with mode: 0644]
auf/django/skin/__init__.py [new file with mode: 0644]
auf/django/skin/context_processors.py [new file with mode: 0644]
auf/django/skin/media/skin/css/admin.css [new file with mode: 0644]
auf/django/skin/media/skin/css/auf.css [new file with mode: 0644]
auf/django/skin/media/skin/images/favicon.ico [new file with mode: 0644]
auf/django/skin/media/skin/images/logo_auf.gif [new file with mode: 0644]
auf/django/skin/media/skin/images/menu.png [new file with mode: 0644]
auf/django/skin/templates/404.html [new file with mode: 0644]
auf/django/skin/templates/500.html [new file with mode: 0644]
auf/django/skin/templates/actions.html [new file with mode: 0644]
auf/django/skin/templates/admin/base.html [new file with mode: 0644]
auf/django/skin/templates/admin/base_site.html [new file with mode: 0644]
auf/django/skin/templates/admin/form_utils/better_form.html [new file with mode: 0644]
auf/django/skin/templates/admin/form_utils/field.html [new file with mode: 0644]
auf/django/skin/templates/base.html [new file with mode: 0644]
auf/django/skin/templates/breadcrumb.html [new file with mode: 0644]
auf/django/skin/templates/footer.html [new file with mode: 0644]
auf/django/skin/templates/menu.html [new file with mode: 0644]
auf/django/skin/templates/registration/login.html [new file with mode: 0644]
auf/django/skin/templates/skin/demo.html [new file with mode: 0644]
auf/django/skin/templatetags/__init__.py [new file with mode: 0755]
auf/django/skin/templatetags/auf_menu.py [new file with mode: 0644]
auf/django/skin/views.py [new file with mode: 0644]
setup.cfg [new file with mode: 0644]
setup.py [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..499a075
--- /dev/null
@@ -0,0 +1,4 @@
+*.pyc
+*egg-info
+build
+dist
diff --git a/CHANGES b/CHANGES
new file mode 100644 (file)
index 0000000..754ecd7
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,16 @@
+0.17dev (2011-09-19)
+--------------------
+- #1834 : Ajout des pages 404 et 500
+
+0.16dev (2011-03-30)
+-------------------
+- Fix ajout des fichiers de templates form_utils
+
+0.15dev (2011-03-23)
+-------------------
+- Ajout de template de base pour que les formulaires de django-form-utils s'intègre à l'admin Django
+
+0.14dev (2011-03-23)
+-------------------
+- Modification de la template admin, pour que le menu de django-admintools soit pris en compte
+
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644 (file)
index 0000000..fccccf5
--- /dev/null
@@ -0,0 +1,2 @@
+recursive-include auf/django/skin/templates *
+recursive-include auf/django/skin/media *
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..52136e3
--- /dev/null
+++ b/README
@@ -0,0 +1,39 @@
+auf.django.skin
+===============
+
+Rôles
+-----
+
+* Ce module apporte une charte graphique AUF pour construire les interfaces publiques
+
+* Ce module apporte quelques modifications à l'administration Django :
+
+    + Nom du projet à la place du logo Django
+    
+    + Lien vers l'interface publique ajouté à côté de Bienvenue (en haut à droite)
+
+* Ce module apporte une vue de démontration des styles CSS disponibles. Le code
+ci-dessous est automatiquement ajouté lors du bootstrap d'un nouveau projet,
+pour rendre cette page accessible au démarrage.
+
+    code dans project/urls.py::   
+
+        ######## page d'accueil de demo ######
+        (r'^$', 'auf.django.skin.views.demo'),
+        ######################################
+
+
+Fonctionnement
+--------------
+
+Ce module est fortement lié au module de bootstrap de projet ; lorsqu'un projet est 
+démarré, la dernière version de *auf.django.skin* est installée, et les fichiers médias
+sont **COPIÉS** dans le répertoire média du projet.
+
+Outils
+------
+
+* Si vous voulez intégrer des formulaires crées avec django-form-utils dans l'admin Django,
+il existe un template prédéfini nommé : **admin/form_utils/better_form.html**.
+Il s'utilise dans une template de cette façon : {{ form|render:"admin/form_utils/better_form.html" }}
+Note : il faut charger le module **form_utils_tags** au début de la template
diff --git a/auf/__init__.py b/auf/__init__.py
new file mode 100644 (file)
index 0000000..35cf25b
--- /dev/null
@@ -0,0 +1,5 @@
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except:
+    # bootstrapping
+    pass
diff --git a/auf/django/__init__.py b/auf/django/__init__.py
new file mode 100644 (file)
index 0000000..35cf25b
--- /dev/null
@@ -0,0 +1,5 @@
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except:
+    # bootstrapping
+    pass
diff --git a/auf/django/skin/__init__.py b/auf/django/skin/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/auf/django/skin/context_processors.py b/auf/django/skin/context_processors.py
new file mode 100644 (file)
index 0000000..d91097f
--- /dev/null
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+
+import settings
+
+PROJET_TITRE_KEY = 'PROJET_TITRE'
+AUF_MEDIA_URL_KEY = "AUF_MEDIA_URL"
+AUF_MEDIA_URL_DEFAUT = "/media/skin/"
+
+def auf(request):
+    """
+    """
+    # Nom du projet
+    site = getattr(settings, PROJET_TITRE_KEY, None)
+    if not site:
+        site = "Créer une clef '%s' dans settings.py" % PROJET_TITRE_KEY
+
+    # AUF Media URL
+    auf_media_url = getattr(settings, AUF_MEDIA_URL_KEY, AUF_MEDIA_URL_DEFAUT)
+
+    return {
+        'AUF_SITE' : site,
+        'AUF_MEDIA_URL' : auf_media_url,
+    }
diff --git a/auf/django/skin/media/skin/css/admin.css b/auf/django/skin/media/skin/css/admin.css
new file mode 100644 (file)
index 0000000..39da283
--- /dev/null
@@ -0,0 +1,6 @@
+#header #branding h1 {
+    background: None !important;
+    line-height: 30px;
+    text-indent: 0 !important;
+    width: auto !important;
+}
diff --git a/auf/django/skin/media/skin/css/auf.css b/auf/django/skin/media/skin/css/auf.css
new file mode 100644 (file)
index 0000000..bca5b36
--- /dev/null
@@ -0,0 +1,85 @@
+/* elements */
+
+* {font:normal 100% "trebuchet ms", verdana, arial, helvetica, sans-serif; margin: 0px; padding: 0px;}
+
+p, ul { margin: 6px 0;}
+
+body { margin:0; padding:0; background:#fff; color:#454545; font:0.8em verdana, arial, helvetica, sans-serif; }
+
+h1 { margin:10px 0 0 0; padding:0; color:#d15517; font-size:200%;font-weight:bold; }
+h2 { margin:10px 0 0 0; padding:0; color:#5f5f5f; font-size:190%; }
+h3 { margin:10px 0 0 0; padding:0; color:#5f5f5f; font-size:170%; }
+h4 { margin:10px 0 0 0; padding:0; color:#5f5f5f; font-size:150%; }
+h5 { margin:10px 0 0 0; padding:0; background:inherit; color:#5f5f5f; font-size:130%; }
+
+li {margin-left: 1em; line-height:1.4em; }
+p {line-height:1.4em; text-align: justify; }
+
+a:link, a:visited { color:#0643bb; text-decoration:none; }
+a:active { color:#990000; text-decoration:none; }
+a:hover { color:#d15517; text-decoration:none; }
+a img { border:none; }
+
+strong {font-weight: bold;}
+
+form { margin:8px 17px 0 0; padding:0px; }
+fieldset {border: 1px solid #EEEEEE; margin: 1em;}
+label {font-weight: bold;}
+
+table { margin:10px 0px; border-collapse:collapse; padding:5px; }
+table th, table td{ font-size: 14px; border-top:1px solid #d0e8f8; border-left:1px solid #d0e8f8; padding: 5px; }
+table { border-bottom:1px solid #d0e8f8; border-right:1px solid #d0e8f8; }
+th { height:28px; border-top:2px solid #d0e8f8; padding:0 10px; background-color:#e7f1f8; font-size:14px; text-align:left; font-weight: bold;}
+td { vertical-align: top; }
+table h1, table h2, table h3, table h4, table h5 {font-size: 120%; }
+
+#header { float:left; width:96%; padding:2%; background:#f8fbfd; color:#5f5f5f; border-bottom: 1px dotted  #bbd8ec; }
+
+#logo { float:left; width:80%;}
+#logo img { float:left; margin-right:2%;}
+#logo h1 { margin:0; padding:0; font:normal 220% "trebuchet ms", verdana, arial, helvetica, sans-serif; color:#5f5f5f;}
+#logo h1 a, h1 a:visited {color:#5f5f5f; text-decoration:none;}
+#logo h1 a:hover {color:#d15517; text-decoration:none;}
+#logo h2 {margin:0;padding:0;}
+
+#user-actions { float: right;}
+#user-actions .username {color: #D15517;}
+#user-actions li {list-style-type: none; text-align: right; font-size: 1em; line-height: 1.6em;}
+#user-actions a {text-decoration: none;}
+
+#menu {float:left; width:100%; border-bottom:1px dotted  #bbd8ec; background:#e7f1f8 url(/media/skin/images/menu.png);  color:#000; text-align:left; }
+#menu ul {padding:0; margin: 0; list-style: none;}
+#menu ul li {display:block; position:relative; float:left; margin: 0px; background:#e7f1f8 url(/media/skin/images/menu.png);}
+#menu li ul { display: none; }
+#menu ul li:first-child a {border-left:1px dotted #bbd8ec;}
+#menu ul li a {font:bold 130% "trebuchet ms", verdana, arial, helvetica, sans-serif; display: block; text-decoration: none; white-space: nowrap; border-right:1px dotted #bbd8ec; padding:8px 20px 8px 20px; color:#5f5f5f; text-align:center; text-decoration:none;}
+#menu ul li.selected a, #menu ul li a:hover { color:#d15517;}
+#menu li:hover ul { display: block; position: absolute; border-bottom: 1px dotted #bbd8ec;}
+#menu li:hover li {float: none; font-size: 11px;}
+#menu li:hover li a {color:#5f5f5f;}
+#menu li:hover li a:hover {color:#d15517;}
+#menu li:hover li a {border-left: 1px dotted #bbd8ec; border-right: 1px dotted #bbd8ec; }
+
+#breadcrumb { float:left; width:98%; margin:20px 0 10px 16px; padding:0;font-size: 90%;}
+#breadcrumb a, #breadcrumb a:visited {text-decoration:none; color:#6E6E6E;}
+#breadcrumb a:hover {color:#d15517; text-decoration: none; }
+#breadcrumb .separator {font-size: 120%;}
+
+ul.messagelist {border: 1px solid #DDDDDD; padding-left:}
+ul.messagelist li {background: url("/admin_media/img/admin/icon_success.gif") no-repeat scroll 32px 0.3em #FFFFCC; color: #666666; display: block; font-size: 12px; margin:0; padding: 4px 5px 4px 55px;}
+
+
+#main {padding:0% 2%; min-height:300px; }
+
+#footer { clear:both; float:left; width:100%; margin:20px 0 0 0; border-top: 1px dotted #bbd8ec; border-bottom: 1px dotted #bbd8ec; padding: 10px 0 6px 0; background: #e7f1f8 url(/media/skin/images/menu.png); color:#404040; text-align:center; }
+#footer p { margin:0; padding:0 0 3px 0; font-size:100%; }
+
+.visualClear {clear: both; display: block;}
+
+.cell-nombre { padding-right:0px; text-align:right; }
+.row1, .even {}
+.row2, .odd { background-color:#EFEFEF; }
+
+.error {color: red; }
+ul.errorlist { color: red; list-style-type:none; margin: 0px; padding: 0px; font-size: 11px; }
+
diff --git a/auf/django/skin/media/skin/images/favicon.ico b/auf/django/skin/media/skin/images/favicon.ico
new file mode 100644 (file)
index 0000000..33ba99a
Binary files /dev/null and b/auf/django/skin/media/skin/images/favicon.ico differ
diff --git a/auf/django/skin/media/skin/images/logo_auf.gif b/auf/django/skin/media/skin/images/logo_auf.gif
new file mode 100644 (file)
index 0000000..86cfaf5
Binary files /dev/null and b/auf/django/skin/media/skin/images/logo_auf.gif differ
diff --git a/auf/django/skin/media/skin/images/menu.png b/auf/django/skin/media/skin/images/menu.png
new file mode 100644 (file)
index 0000000..94bddf1
Binary files /dev/null and b/auf/django/skin/media/skin/images/menu.png differ
diff --git a/auf/django/skin/templates/404.html b/auf/django/skin/templates/404.html
new file mode 100644 (file)
index 0000000..98782da
--- /dev/null
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block sous_titre %}Erreur 404{% endblock %}
+
+{% block main %}
+
+<h1>Erreur 404</h1>
+
+<h2>Cette page n'existe pas.<h2>
+
+{% endblock %}
diff --git a/auf/django/skin/templates/500.html b/auf/django/skin/templates/500.html
new file mode 100644 (file)
index 0000000..f271d6e
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-ca" xml:lang="fr-ca" >
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <title>Erreur 500</title>
+    <link rel="icon" type="image/png" href="/media/skin/images/favicon.ico" />
+    <link rel="stylesheet" type="text/css" href="/media/skin/css/auf.css" media="all"/>
+  </head>
+
+  <body class="">
+    <div id="header">
+      <div id="logo">
+        <img src="/media/skin/images/logo_auf.gif" alt="AUF"/>
+        <h1>Cette page est indisponible</h1>
+        <h2>Erreur 500</h2>
+      </div>
+    </div>
+
+    <div id="menu">
+    <ul class="menu">
+      <li class=""><a href="/">Accueil</a></li>
+    </ul>
+    </div>
+
+    <div class="visualClear"></div>
+    <div id="main">
+        <h1>Erreur 500</h1>
+        <h2>Une erreur s'est produite dans l'application.</h2>
+        <p>L'ARI a été averti par courriel de ce problème.</p>
+        <p>Merci.</p>
+
+
+    </div>
+
+    <div id="footer">
+
+        © AUF - Tous droits réservés
+
+    </div>
+
+</body>
+</html>
+
diff --git a/auf/django/skin/templates/actions.html b/auf/django/skin/templates/actions.html
new file mode 100644 (file)
index 0000000..135ed03
--- /dev/null
@@ -0,0 +1,9 @@
+<ul>
+    {% if user.is_authenticated %}
+    <li class="username">{{ user }}</li>
+      <li><a href="{% url admin:index %}">Administration</a></li>
+      <li><a href="{% url django.contrib.auth.views.logout %}?next=/">Déconnexion</a></li>
+    {% else %}
+      <li><a href="{% url django.contrib.auth.views.login %}?next={{request.path}}">Connexion</a></li>
+    {% endif %}
+</ul>
diff --git a/auf/django/skin/templates/admin/base.html b/auf/django/skin/templates/admin/base.html
new file mode 100644 (file)
index 0000000..c04af16
--- /dev/null
@@ -0,0 +1,87 @@
+{% load theming_tags %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
+<head>
+<title>{% block title %}{% endblock %}</title>
+<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />
+{% block extrastyle %}{% endblock %}
+<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% load adminmedia %}{% admin_media_prefix %}css/ie.css{% endblock %}" /><![endif]-->
+{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
+{% render_theming_css %}
+<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";</script>
+{% block extrahead %}{% endblock %}
+{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
+</head>
+{% load i18n %}
+
+<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
+
+<!-- Container -->
+<div id="container">
+    {% if not is_popup %}
+    <!-- Header -->
+    <div id="header">
+        <div id="branding">
+        {% block branding %}{% endblock %}
+        </div>
+
+        {% if user.is_active and user.is_staff %}
+        <div id="user-tools">
+            {% trans 'Welcome,' %}
+            <strong>{% filter force_escape %}{% firstof user.first_name user.username %}{% endfilter %}</strong>.
+            {% block userlinks %}
+                {% url django-admindocs-docroot as docsroot %}
+                {% if docsroot %}
+                    <a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
+                {% endif %}
+
+                <a href="/">Voir le site</a> / 
+
+                {% url admin:password_change as password_change_url %}
+                {% if password_change_url %}
+                    <a href="{{ password_change_url }}">
+                {% else %}
+                    <a href="{{ root_path }}password_change/">
+                {% endif %}
+                {% trans 'Change password' %}</a> /
+                {% url admin:logout as logout_url %}
+                {% if logout_url %}
+                    <a href="{{ logout_url }}">
+                {% else %}
+                    <a href="{{ root_path }}logout/">
+                {% endif %}
+                {% trans 'Log out' %}</a>
+            {% endblock %}
+        </div>
+        {% endif %}
+        {% block nav-global %}{% endblock %}
+    </div>
+    <!-- END Header -->
+    {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans 'Home' %}</a>{% if title %} &rsaquo; {{ title }}{% endif %}</div>{% endblock %}
+    {% endif %}
+
+        {% if messages %}
+        <ul class="messagelist">{% for message in messages %}
+          <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
+       {% endfor %}</ul>
+        {% endif %}
+
+    <!-- Content -->
+    <div id="content" class="{% block coltype %}colM{% endblock %}">
+        {% block pretitle %}{% endblock %}
+        {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
+        {% block content %}
+        {% block object-tools %}{% endblock %}
+        {{ content }}
+        {% endblock %}
+        {% block sidebar %}{% endblock %}
+        <br class="clear" />
+    </div>
+    <!-- END Content -->
+
+    {% block footer %}<div id="footer"></div>{% endblock %}
+</div>
+<!-- END Container -->
+
+</body>
+</html>
diff --git a/auf/django/skin/templates/admin/base_site.html b/auf/django/skin/templates/admin/base_site.html
new file mode 100644 (file)
index 0000000..e8a235e
--- /dev/null
@@ -0,0 +1,26 @@
+{% extends "admin/base.html" %}
+{% load i18n admin_tools_menu_tags %}
+
+{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
+
+{% block extrastyle %}
+{{ block.super }}
+{% if user.is_active and user.is_staff %}
+{% if not is_popup %}
+{% admin_tools_render_menu_css %}
+{% endif %}
+{% endif %}
+<link rel="stylesheet" type="text/css" href="{{ AUF_MEDIA_URL }}css/admin.css" media="all"/>
+{% endblock %}
+
+{% block branding %}
+<h1 id="site-name">{{ AUF_SITE }}</h1>
+{% endblock %}
+
+{% block nav-global %}
+{% if user.is_active and user.is_staff %}
+{% if not is_popup %}
+{% admin_tools_render_menu %}
+{% endif %}
+{% endif %}
+{% endblock %}
diff --git a/auf/django/skin/templates/admin/form_utils/better_form.html b/auf/django/skin/templates/admin/form_utils/better_form.html
new file mode 100644 (file)
index 0000000..398b185
--- /dev/null
@@ -0,0 +1,18 @@
+{% extends "form_utils/form.html" %}
+
+{% block fields %}
+{% for fieldset in form.fieldsets %}
+
+<fieldset class="module aligned{{ fieldset.classes }}">
+
+{% if fieldset.legend %}
+    <h2>{{ fieldset.legend }}</h2>
+{% endif %}
+
+{% with fieldset as fields %}
+    {% include "admin/form_utils/field.html" %}
+{% endwith %}
+
+</fieldset>
+{% endfor %}
+{% endblock %}
diff --git a/auf/django/skin/templates/admin/form_utils/field.html b/auf/django/skin/templates/admin/form_utils/field.html
new file mode 100644 (file)
index 0000000..6193afa
--- /dev/null
@@ -0,0 +1,13 @@
+{% for field in fields %}
+    {% if field.is_hidden %}
+        {{ field }}
+    {% else %}
+        <div class="form-row {{ field.name }}">
+        <div {{ field.row_attrs }}>
+          {{ field.errors }}
+          {{ field.label_tag }}
+          {{ field }}
+        </div>
+        </div>
+    {% endif %}
+{% endfor %}
diff --git a/auf/django/skin/templates/base.html b/auf/django/skin/templates/base.html
new file mode 100644 (file)
index 0000000..d71f16c
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <title>{% block title %}AUF - {{ AUF_SITE }}{% endblock %}</title>
+    <link rel="icon" type="image/png" href="{{ AUF_MEDIA_URL }}images/favicon.ico" />
+    <link rel="stylesheet" type="text/css" href="{{ AUF_MEDIA_URL }}css/auf.css" media="all"/>
+    {% block extrahead %}{% endblock %}
+  </head>
+
+  <body class="{% block bodyclass %}{% endblock %}">
+
+    <div id="header">
+
+      <div id="logo">
+        <img src="{{ AUF_MEDIA_URL }}images/logo_auf.gif" alt="AUF"/>
+        <h1>{% block titre %}{{ AUF_SITE }}{% endblock %}</h1>
+        <h2>{% block sous_titre %}{% endblock %}</h2>
+      </div>
+
+      <div id="user-actions">
+        {% include "actions.html" %}
+      </div>
+
+    </div>
+
+    <div id="menu">
+        {% include "menu.html" %}
+    </div>
+
+    {% if breadcrumb %}
+    <div id="breadcrumb">
+        {% include "breadcrumb.html" %}
+    </div>
+    {% endif %}
+
+    <div class="visualClear"></div>
+
+    {% if messages %}
+        <ul class="messagelist">
+        {% for message in messages %}
+          <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
+        {% endfor %}
+        </ul>
+    {% endif %}
+
+    <div class="visualClear"></div>
+
+
+    <div id="main">
+      {% block main %}
+      {% endblock %}
+    </div>
+
+    <div id="footer">
+        {% include "footer.html" %}
+    </div>
+
+</body>
+</html>
diff --git a/auf/django/skin/templates/breadcrumb.html b/auf/django/skin/templates/breadcrumb.html
new file mode 100644 (file)
index 0000000..9eae315
--- /dev/null
@@ -0,0 +1,8 @@
+{% block breadcrumb %}
+
+Vous êtes ici :
+{% for url, titre in breadcrumb %}
+<a href="{{ url }}">{{ titre }}</a>{% if not forloop.last %}<span class="separator">→</span>{% endif %}
+{% endfor %}
+
+{% endblock %}
diff --git a/auf/django/skin/templates/footer.html b/auf/django/skin/templates/footer.html
new file mode 100644 (file)
index 0000000..8baf166
--- /dev/null
@@ -0,0 +1 @@
+© AUF - Tous droits réservés
diff --git a/auf/django/skin/templates/menu.html b/auf/django/skin/templates/menu.html
new file mode 100644 (file)
index 0000000..9f8f3a0
--- /dev/null
@@ -0,0 +1,5 @@
+{% load auf_menu %}
+
+<ul class="menu">
+  <li class="{% menu_actif request '^$' %}"><a href="/">Accueil</a></li>
+</ul>
diff --git a/auf/django/skin/templates/registration/login.html b/auf/django/skin/templates/registration/login.html
new file mode 100644 (file)
index 0000000..1ac9429
--- /dev/null
@@ -0,0 +1,16 @@
+{% extends "base.html" %}
+
+{% block main %}
+
+<h1>Connexion</h1>
+
+<form method="post" action="{% url django.contrib.auth.views.login %}">{% csrf_token %}
+    <table>
+    {{ form.as_table }}
+    </table>
+    <input type="submit" value="Se connecter" />
+    <input type="hidden" name="next" value="{{ next }}" />
+</form>
+
+{% endblock %}
+
diff --git a/auf/django/skin/templates/skin/demo.html b/auf/django/skin/templates/skin/demo.html
new file mode 100644 (file)
index 0000000..0d9bb6f
--- /dev/null
@@ -0,0 +1,71 @@
+{% extends "base.html" %}
+
+{% block main %}
+
+<h1>Bienvenue sur la page de démonstration de la charte graphique de l'AUF<h1>
+
+<h2>Exemple<h2>
+
+<h3>L’AUF en bref</h3>
+<p>L’Agence universitaire de la Francophonie (AUF) est présente sur tous les continents, avec plus de 427 agents répartis dans 65 implantations rattachées à neuf bureaux.</p>
+
+<p>Depuis 1989, cette association d’universités est un opérateur de la Francophonie institutionnelle. Partenaire des établissements d’enseignement supérieur et de recherche qui ont choisi le français comme langue d’enseignement, elle propose plusieurs programmes de coopération visant notamment à soutenir la recherche et l’enseignement en français.</p>
+
+<p>Chaque année, elle distribue plus de 2 000 bourses dans le cadre de son <a href="#">programme de mobilités</a>. Elle dispose d’un budget annuel de plus de 40 millions d’euros grâce à l’intervention des gouvernements, en premier lieu la France, mais aussi le Canada, le Canada-Québec, la Communauté française de Belgique, la Suisse et le Cameroun, sans oublier beaucoup d’autres États du Sud qui soutiennent leurs universités et mettent à notre disposition des locaux et du personnel.</p>
+
+<p>Depuis 2000, l’Agence a connu une période de développement sans précédent, marquée par une consolidation de son budget et une progression de 50 % du nombre d’établissements membres. L’AUF fédère aujourd’hui un réseau de 774 établissements répartis sur tous les continents, dans 90 pays, dont 55 sont membres de l’Organisation internationale de la Francophonie.<p>
+<p>La France, le Vietnam, l’Algérie et le Canada sont respectivement les pays dans lesquels l’Agence compte le plus grand nombre de membres.</p>
+
+<p>Le développement de l’AUF témoigne de sa notoriété au sein des milieux universitaires, mais aussi de l’attrait du français, comme langue de formation et de culture, sur la scène internationale.<p>
+
+<p>L’Agence, dont le siège est établi sur le campus de l’Université de Montréal (Canada-Québec), a vocation à contribuer à la construction et à la consolidation d’un espace scientifique en français en :</p>
+
+<ul>
+    <li>favorisant la coopération scientifique ;</li>
+    <li>formant des futurs acteurs du développement ;</li>
+    <li>soutenant la recherche et l’excellence ;</li>
+    <li>partageant l’expertise.</li>
+</ul>
+
+<h2>Les titres</h2>
+
+<h1>Titre h1</h1>
+<h2>Titre h2</h2>
+<h3>Titre h3</h4>
+<h4>Titre h4</h4>
+
+
+<h2>Les listes</h2>
+
+<ul>
+    <li>Un</li>
+    <li>Deux</li>
+    <li>Trois</li>
+</ul>
+
+<ol>
+    <li>Un</li>
+    <li>Deux</li>
+    <li>Trois</li>
+</ol>
+
+<h2>Les tableaux</h2>
+
+<table>
+    <tbody>
+        <tr><th><label>Titre 1:</label></th><td><input type="text" ></td></tr>
+        <tr><th><label>Titre 2:</label></th><td><input type="text" ></td></tr>
+    </tbody>
+</table>
+
+<table>
+    <tbody>
+        <tr><th>Titre 1</th><th>Titre 2</th></tr>
+        <tr class="row1"><td>ligne 1</td><td>ligne 1</td></tr>
+        <tr class="row2"><td>ligne 2</td><td>ligne 2</td></tr>
+        <tr class="row1"><td>ligne 3</td><td>ligne 3</td></tr>
+        <tr class="row2"><td>ligne 4</td><td>ligne 4</td></tr>
+    </tbody>
+</table>
+
+{% endblock %}
diff --git a/auf/django/skin/templatetags/__init__.py b/auf/django/skin/templatetags/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/auf/django/skin/templatetags/auf_menu.py b/auf/django/skin/templatetags/auf_menu.py
new file mode 100644 (file)
index 0000000..a843c5c
--- /dev/null
@@ -0,0 +1,12 @@
+import re
+from django import template
+
+register = template.Library()
+
+@register.simple_tag
+def menu_actif(request, pattern, css_class="selected"):
+    if re.search(pattern, request.path.strip('/')):
+        return css_class
+    else:
+        return ''
+
diff --git a/auf/django/skin/views.py b/auf/django/skin/views.py
new file mode 100644 (file)
index 0000000..0e15b1b
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- encoding: utf-8 -*-
+
+from django.template import Context, RequestContext
+from django.shortcuts import render_to_response
+
+def demo(request,):
+    """
+    Page pour montrer la charte graphique de l'AUF
+    """
+    breadcrumb = (
+        ("/" , "Accueil"),
+        ("#" , "Demo charte graphique AUF"), 
+    )
+    c = {'breadcrumb' : breadcrumb}
+    return render_to_response("skin/demo.html",
+        Context(c),
+        context_instance = RequestContext(request)
+        )
+
+
diff --git a/setup.cfg b/setup.cfg
new file mode 100644 (file)
index 0000000..01bb954
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = dev
+tag_svn_revision = true
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..e74a5b1
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,30 @@
+# -*- encoding: utf-8 -*-
+
+from setuptools import setup, find_packages
+import sys, os
+
+name = 'auf.django.skin'
+version = '0.17'
+
+setup(name=name,
+      version=version,
+      description="Élements de la charte graphique AUF",
+      long_description="""\
+""",
+      classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      keywords='AUF skin charte graphique CSS HTML',
+      author='Olivier Larchev\xc3\xaaque',
+      author_email='olivier.larcheveque@auf.org',
+      url='http://pypi.auf.org/%s' % name,
+      license='GPL',
+      namespace_packages = ['auf'],
+      packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          # -*- Extra requirements: -*-
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )