-* {margin: 0; padding: 0;}\r
+body {margin: 0; padding: 0;}\r
a {text-decoration: none; color: #969696;}\r
a img {border: none;}\r
html, input, select, textarea, h1, h2, h3, h4, h5, h6 {\r
}\r
a img { border: none; }\r
\r
-h3 {\r
+.rst-content h1, h3 {\r
font-size: 1.2em;\r
font-weight: bold;\r
color: #353535;\r
border: solid 1px #888;\r
margin-top: 0.8em;\r
}\r
+\r
+img.home-image {\r
+ margin: 0 1.5em 1.5em 0;\r
+ float: left;\r
+}\r
class Meta(MetaCore):
db_table = 'locations'
+ verbose_name = _('location')
def __unicode__(self):
return self.name
--- /dev/null
+===================================================
+Archives du Centre de Recherche en Ethnomusicologie
+===================================================
+
+Le Centre de Recherche en Ethnomusicologie fait partie du Laboratoire d'Ethnologie et de Sociologie Comparative (UMR 7186). Il se consacre à l'étude des pratiques et des savoirs musicaux, conçus autant comme processus de différentiation socio-culturelle que comme forme d'expression commune à l'Homme.
+
+Cette approche, fondée sur un recueil raisonné des données musicales et un travail simultané d'enquête ethnographique, s'inscrit dans une anthropologie du fait musical envisagé dans ses dimensions socio-culturelles, esthétiques, formelles, acoustiques, kinésiques et finalement cognitives.
+
+.. image:: home_img.jpg
+ :class: home-image
+
+Le Centre investit par ailleurs de nouveaux objets encore peu explorés de la discipline comme le geste musical et chorégraphique, la construction culturelle et cognitive de l'émotion, ou encore les représentations du sonore. Les thématiques développées par les chercheurs, soit individuellement, soit dans le cadre de groupes de recherche, sont régulièrement exposées dans le cadre d'un séminaire interne.
+
+Le CREM gère un vaste fonds documentaire (archives musicales et livres) de la plus haute valeur patrimoniale et consulté par un public international. Il est éditeur d'une importante collection de disques.
+
+
--- /dev/null
+===================================================
+Archives du Centre de Recherche en Ethnomusicologie
+===================================================
+
+Le Centre de Recherche en Ethnomusicologie fait partie du Laboratoire d'Ethnologie et de Sociologie Comparative (UMR 7186). Il se consacre à l'étude des pratiques et des savoirs musicaux, conçus autant comme processus de différentiation socio-culturelle que comme forme d'expression commune à l'Homme.
+
+Cette approche, fondée sur un recueil raisonné des données musicales et un travail simultané d'enquête ethnographique, s'inscrit dans une anthropologie du fait musical envisagé dans ses dimensions socio-culturelles, esthétiques, formelles, acoustiques, kinésiques et finalement cognitives.
+
+.. image:: home_img.jpg
+ :class: home-image
+
+Le Centre investit par ailleurs de nouveaux objets encore peu explorés de la discipline comme le geste musical et chorégraphique, la construction culturelle et cognitive de l'émotion, ou encore les représentations du sonore. Les thématiques développées par les chercheurs, soit individuellement, soit dans le cadre de groupes de recherche, sont régulièrement exposées dans le cadre d'un séminaire interne.
+
+Le CREM gère un vaste fonds documentaire (archives musicales et livres) de la plus haute valeur patrimoniale et consulté par un public international. Il est éditeur d'une importante collection de disques.
+
+
--- /dev/null
+{% extends "telemeta_default/flatpage.html" %}
--- /dev/null
+{% extends "telemeta/base.html" %}
+{% load telemeta_utils %}
+{% block content %}
+{{ page_content|rst }}
+{% endblock %}
{% extends "telemeta/base.html" %}
+{% load telemeta_utils %}
{% block content %}
+{{ page_content|rst }}
+
+<!--
<div class="homelinks">
<p><a href="{% url telemeta-collections %}">All collections</a><br />
Browse all collections</p>
<p><a href="{% url telemeta-admin %}">Administration</a><br />
Configure Telemeta and manage users</p>
</div>
+-->
{% endblock %}
<fieldset>
<p>
- <label for="location">{% trans "Location" %}</label>
+ <label for="location">{% field_label "Location" %}</label>
<input type="text" name="location" id="location" />
</p>
from django.utils.text import capfirst
from telemeta import models
from django.utils.translation import ungettext
+from docutils.core import publish_parts
+from django.utils.encoding import smart_str, force_unicode
+from django.utils.safestring import mark_safe
+import re
register = template.Library()
return ''
@register.simple_tag
-def field_label(model, field):
+def field_label(model, field=None):
if isinstance(model, basestring):
model = getattr(models, model)
+ if not field:
+ return capfirst(unicode(model._meta.verbose_name))
+
return capfirst(unicode(model.field_label(field)))
@register.simple_tag
@register.filter
def equals(value1, value2):
return value1 == value2
+
+@register.filter
+def rst(content):
+ parsed = ""
+ path = getattr(content, 'path', '')
+ if isinstance(content, basestring):
+ content = content.split("\n")
+
+ for line in content:
+ match = re.match('^(\.\. *(?:_[^:]*:|image::) *)([^ ]+) *$', line)
+ if match:
+ directive, urlname = match.groups()
+ line = directive
+ try:
+ i = urlname.index('telemeta-')
+ except ValueError:
+ i = -1
+ if i == 0:
+ line += reverse(urlname)
+ elif urlname[:1] != '/':
+ print '|%s|' % urlname
+ line += reverse('telemeta-flatpage', args=[path + '/../' + urlname])
+ else:
+ line += urlname
+
+ parsed += line + "\n"
+
+ parts = publish_parts(source=smart_str(parsed), writer_name="html4css1", settings_overrides={})
+ return mark_safe('<div class="rst-content">\n' + force_unicode(parts["html_body"]) + '</div>')
+rst.is_safe = True
+
+
+
{'document_root': htdocs+'/timeside'},
name="telemeta-timeside"),
+ # Flat pages
+ url(r'^page/(?P<path>.*)$', web_view.render_flatpage, name="telemeta-flatpage"),
+
# OAI-PMH Data Provider
url(r'^oai/.*$', web_view.handle_oai_request, name="telemeta-oai")
)
from django import template
from django.http import HttpResponse
from django.http import Http404
-from django.shortcuts import render_to_response
+from django.shortcuts import render_to_response, redirect
from django.views.generic import list_detail
from django.conf import settings
from telemeta.interop.oaidatasource import TelemetaOAIDataSource
from django.core.exceptions import ObjectDoesNotExist
from telemeta.util.unaccent import unaccent
+from telemeta.web import pages
class WebView(Component):
"""Provide web UI methods"""
"""Render the homepage"""
template = loader.get_template('telemeta/index.html')
- context = Context({})
+ context = Context({'page_content': pages.get_page_content(request, 'parts/home', True)})
return HttpResponse(template.render(context))
def collection_detail(self, request, public_id, template=''):
args.update(request.POST)
return HttpResponse(provider.handle(args), mimetype='text/xml')
+ def render_flatpage(self, request, path):
+ try:
+ content = pages.get_page_content(request, path)
+ except pages.MalformedPagePath:
+ return redirect(request.path + '/')
+ if isinstance(content, pages.PageAttachment):
+ return HttpResponse(content, content.mimetype())
+ else:
+ return render_to_response('telemeta/flatpage.html', {'page_content': content })
+
--- /dev/null
+from django.conf import settings
+import re
+import telemeta
+from os import path
+import mimetypes
+
+PAGES_ROOT = path.join(path.dirname(telemeta.__file__), 'pages')
+
+class PageTextContent(object):
+ def __init__(self, filename, path):
+ self.filename = filename
+ self.path = path
+
+ def __iter__(self):
+ file = open(self.filename, 'r')
+ for line in file:
+ yield line.rstrip('\r\n')
+ file.close()
+
+ def __unicode__(self):
+ file = open(self.filename, 'r')
+ data = file.read()
+ file.close()
+ return data
+
+class PageAttachment(object):
+ def __init__(self, filename, path):
+ self.filename = filename
+ self.path = path
+
+ def mimetype(self):
+ type, encoding = mimetypes.guess_type(self.filename)
+ return type
+
+ def __iter__(self):
+ file = open(self.filename, 'rb')
+ buffer_size = 0x10000
+ while True:
+ chunk = file.read(buffer_size)
+ yield chunk
+ if len(chunk) < buffer_size:
+ break
+
+ file.close()
+
+def language_code(request=None):
+ code = (request and getattr(request, 'LANGUAGE_CODE')) or settings.LANGUAGE_CODE
+ cut = re.split('[_-]', code)
+ code = cut[0]
+ return code.lower()
+
+def resolve_page_file(language_code, relative_path, ignore_slash_issue=False):
+ root = path.realpath(path.join(PAGES_ROOT, language_code))
+ filename = None
+ current = root
+ is_attachment = False
+ for node in relative_path.split('/'):
+ if not node:
+ continue
+ current = path.join(current, node)
+ rst = current + '.rst'
+ if path.isfile(rst):
+ filename = rst
+ break
+ elif path.isfile(current):
+ filename = current
+ is_attachment = True
+ elif not path.isdir(current):
+ break
+
+ if not filename and path.isdir(current):
+ rst = path.join(current, 'index.rst')
+ if path.isfile(rst):
+ if not ignore_slash_issue and relative_path[-1:] != '/':
+ raise MalformedPagePath("The relative page path must end with a slash when "
+ "resolving an implicit directory index")
+ filename = rst
+
+ if filename:
+ filename = path.realpath(filename)
+ if filename.index(root) != 0:
+ filename = None
+
+ if filename:
+ if is_attachment:
+ return PageAttachment(filename, relative_path)
+ else:
+ return PageTextContent(filename, relative_path)
+
+ return None
+
+def get_page_content(request, relative_path, ignore_slash_issue=False):
+ lang = language_code(request)
+ return resolve_page_file(lang, relative_path) or resolve_page_file('default', relative_path)
+
+class MalformedPagePath(Exception):
+ pass
+