--- a/.hgignore Tue Sep 14 13:15:28 2010 +0200
+++ b/.hgignore Tue Sep 14 13:38:47 2010 +0200
@@ -6,4 +6,7 @@
^web/franceculture/\.htaccess$
^web/franceculture/config\.py$
^web/static/media/
+^sbin/virtualenv/distribute.*\.tar\.gz$
+syntax: regexp
+^web/franceculture/modwsgi\.wsgi$
\ No newline at end of file
--- a/.hgtags Tue Sep 14 13:15:28 2010 +0200
+++ b/.hgtags Tue Sep 14 13:38:47 2010 +0200
@@ -10,3 +10,7 @@
98798bbf6194b373d5582035439bc26b7c66daf9 V00.08
1296cc9b23d51f8090e2b593ca519ec7b877b8a2 V00.09
5442e8569ff0a98c066a759982a70bb31ce3fa07 V00.10
+433d84e3bca68f90e1c9cb3c15ae4cedaffc5425 V00.11
+cec4b9fc89972f9104b71d03c3db101eae171184 V00.12
+699be5c7b4acc7d514f4db3a7d7737f0de8d22aa V00.13
+55f91a1f9df88c0d2d18834e22168c8b753695eb V00.14
--- a/.pydevproject Tue Sep 14 13:15:28 2010 +0200
+++ b/.pydevproject Tue Sep 14 13:38:47 2010 +0200
@@ -2,6 +2,6 @@
<?eclipse-pydev version="1.0"?>
<pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python_franceculture</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.6</pydev_property>
</pydev_project>
--- a/sbin/sync/sync_ldt_platform Tue Sep 14 13:15:28 2010 +0200
+++ b/sbin/sync/sync_ldt_platform Tue Sep 14 13:38:47 2010 +0200
@@ -9,12 +9,13 @@
#text2unix ~/tmp/franceculture_V$1
if [ -d ~/tmp/franceculture_V$1 ]; then
- cat <<EOT | rsync -Cvrlz --delete --filter=". -" ~/tmp/franceculture_V$1/web/ iri@web.iri.centrepompidou.fr:/iridata/www/web/franceculture/
+ cat <<EOT | rsync -Cvrlz --delete --filter=". -" ~/tmp/franceculture_V$1/web/ iri@web.iri.centrepompidou.fr:/iridata/www/exp/franceculture/
+ core
P .htpasswd
P .htaccess
P franceculture/.htaccess
P franceculture/config.py
+P franceculture/modwsgi.wsgi
P robots.txt
P env/***
P log/***
--- a/sbin/virtualenv/create_python_env.py Tue Sep 14 13:15:28 2010 +0200
+++ b/sbin/virtualenv/create_python_env.py Tue Sep 14 13:38:47 2010 +0200
@@ -49,6 +49,7 @@
EXTRA_TEXT += " 'DJANGO' : { 'setup': 'django', 'url': 'http://www.djangoproject.com/download/1.2.1/tarball/', 'local': '"+ os.path.abspath(os.path.join(src_base,"Django-1.2.1.tar.gz"))+"'},\n"
EXTRA_TEXT += " 'DJANGO-EXTENSIONS' : { 'setup': 'django-extensions', 'url':'http://django-command-extensions.googlecode.com/files/django-extensions-0.4.1.tar.gz', 'local':'"+ os.path.abspath(os.path.join(src_base,"django-extensions-0.4.1.tar.gz"))+"' },\n"
EXTRA_TEXT += " 'DJANGO-REGISTRATION' : { 'setup': 'django-registration', 'url':'http://bitbucket.org/ubernostrum/django-registration/get/tip.tar.gz', 'local':'"+ os.path.abspath(os.path.join(src_base,"django-registration.tar.gz"))+"' },\n"
+EXTRA_TEXT += " 'LXML' : { 'setup': 'lxml', 'url': '"+ os.path.abspath(os.path.join(src_base,"lxml_2.2.7.tar.gz"))+"', 'local': '"+ os.path.abspath(os.path.join(src_base,"lxml-2.2.7.tar.gz"))+"'},\n"
EXTRA_TEXT += "}\n"
EXTRA_TEXT += "import sys\n"
@@ -197,7 +198,7 @@
show_stdout=True)
if system_str == 'Linux' and 'DISTRIBUTE' not in ignore_packages:
- normal_install('DISTRIBUTE', 'pip', None, res_source_key, home_dir, tmp_dir)
+ normal_install('DISTRIBUTE', 'pip', None, None, res_source_key, home_dir, tmp_dir)
if 'PYXML' not in ignore_packages:
logger.notify("PyXML install : %s " % URLS['PYXML'][res_source_key])
@@ -232,20 +233,26 @@
show_stdout=True)
- NORMAL_INSTALL = [ #(key,method)
- ('PSYCOPG2', 'pip', None),
- ('MYSQL', 'pip', None),
- ('PIL', 'pip', None),
- ('FOURSUITE_XML','easy_install', None),
- ('DJANGO','pip', None),
- ('DJANGO-EXTENSIONS', 'pip', None),
- ('DJANGO-REGISTRATION', 'easy_install', '-Z')
+ NORMAL_INSTALL = [ #(key,method, option_str, extra_env)
+ #('LXML', 'easy_install', None, {'STATIC_DEPS': 'true'}),
+ ('PSYCOPG2', 'pip', None, None),
+ ('MYSQL', 'pip', None, None),
+ ('PIL', 'pip', None, None),
+ ('FOURSUITE_XML','easy_install', None, None),
+ ('DJANGO','pip', None, None),
+ ('DJANGO-EXTENSIONS', 'pip', None, None),
+ ('DJANGO-REGISTRATION', 'easy_install', '-Z', None),
]
+
+ if system_str == "Darwin":
+ NORMAL_INSTALL.append(('LXML', 'easy_install', None, {'STATIC_DEPS': 'true'}))
+ else:
+ NORMAL_INSTALL.append(('LXML', 'easy_install', None, None))
- for key, method, option_str in NORMAL_INSTALL:
+ for key, method, option_str, extra_env in NORMAL_INSTALL:
if key not in ignore_packages:
- normal_install(key, method, option_str, res_source_key, home_dir, tmp_dir)
+ normal_install(key, method, option_str, extra_env, res_source_key, home_dir, tmp_dir)
logger.notify("Clear source dir")
shutil.rmtree(src_dir)
@@ -257,7 +264,7 @@
% join(script_dir, 'easy_install'))
-def normal_install(key, method, option_str, res_source_key, home_dir, tmp_dir):
+def normal_install(key, method, option_str, extra_env, res_source_key, home_dir, tmp_dir):
logger.notify("Install %s from %s with %s" % (key,URLS[key][res_source_key],method))
if method == 'pip':
args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', '-E', os.path.abspath(home_dir), URLS[key][res_source_key]]
@@ -266,7 +273,8 @@
call_subprocess(args,
cwd=os.path.abspath(tmp_dir),
filter_stdout=filter_python_develop,
- show_stdout=True)
+ show_stdout=True,
+ extra_env=extra_env)
else:
args = [os.path.abspath(os.path.join(home_dir, 'bin', 'easy_install')), URLS[key][res_source_key]]
if option_str :
@@ -274,7 +282,8 @@
call_subprocess(args,
cwd=os.path.abspath(tmp_dir),
filter_stdout=filter_python_develop,
- show_stdout=True)
+ show_stdout=True,
+ extra_env=extra_env)
def ensure_dir(dir):
Binary file sbin/virtualenv/res/src/lxml-2.2.7.tar.gz has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/update_db_0_10_to_0_13.sql Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,2 @@
+ALTER TABLE ldt_utils_content ALTER COLUMN src DROP NOT NULL;
+ALTER TABLE ldt_utils_content ADD COLUMN content_creation_date timestamp with time zone;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/.htaccess.mod_python.tmpl Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,12 @@
+SetHandler python-program
+PythonHandler ldt.core.handlers.modpython
+SetEnv DJANGO_SETTINGS_MODULE franceculture.settings
+SetEnv PY_USE_XMLPLUS true
+PythonInterpreter franceculture
+PythonOption django.root /~ymh/franceculture/franceculture
+PythonOption virtualenv.activate_path /Users/ymh/dev/workspace/franceculture/sbin/virtualenv/env/venv/bin/activate_this.py
+PythonDebug on
+PythonPath "['/Users/ymh/Sites/franceculture'] + sys.path"
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/.htaccess.mod_wsgi.tmpl Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,20 @@
+
+SetEnv DJANGO_SETTINGS_MODULE franceculture.settings
+SetEnv PY_USE_XMLPLUS true
+SetEnv PROJECT_PATH /iridata/users/wakimd/hg/franceculture/web
+SetEnv PYTHON_PATH /iridata/users/wakimd/Env/Efculture/lib/python2.6/site-packages
+
+Options ExecCGI FollowSymLinks
+SetHandler wsgi-script
+
+#if defined in global definition
+#defined with WSGIDaemonProcess
+#WSGIProcessGroup franceculture
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ /dev/~wakimd/franceculture/franceculture/modwsgi.wsgi/$1 [QSA,PT,L]
+
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- a/web/franceculture/.htaccess.tmpl Tue Sep 14 13:15:28 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-SetHandler python-program
-PythonHandler ldt.core.handlers.modpython
-SetEnv DJANGO_SETTINGS_MODULE franceculture.settings
-SetEnv PY_USE_XMLPLUS true
-PythonInterpreter franceculture
-PythonOption django.root /~ymh/franceculture/franceculture
-PythonOption virtualenv.activate_path /Users/ymh/dev/workspace/franceculture/sbin/virtualenv/env/venv/bin/activate_this.py
-PythonDebug on
-PythonPath "['/Users/ymh/Sites/franceculture'] + sys.path"
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/franceculture/__init__.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/__init__.py Tue Sep 14 13:38:47 2010 +0200
@@ -1,4 +1,4 @@
-VERSION = (0,10)
+VERSION = (0,14)
VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
--- a/web/franceculture/locale/fr/LC_MESSAGES/django.po Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/locale/fr/LC_MESSAGES/django.po Tue Sep 14 13:38:47 2010 +0200
@@ -7,10 +7,11 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-12 01:49+0200\n"
+"POT-Creation-Date: 2010-09-12 22:52+0200\n"
"PO-Revision-Date: 2010-02-17 02:57+0100\n"
"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,84 +20,145 @@
msgid "French"
msgstr "Français"
+#: templates/base.html:44
+msgid "home"
+msgstr ""
+
+#: templates/base.html:45
+#, fuzzy
+msgid "contents"
+msgstr "Liste des contenus"
+
+#: templates/base.html:46
+#, fuzzy
+msgid "indexation projects"
+msgstr "Créer un projet"
+
+#: templates/base.html:47
+#, fuzzy
+msgid "accounts"
+msgstr "Créer un compte"
+
+#: templates/base.html:48
+msgid "Profiles"
+msgstr "Profile"
+
#: templates/base.html:54
+msgid "Log out"
+msgstr "déconnexion"
+
+#: templates/base.html:62
msgid "Langue"
msgstr "Langue"
-#: templates/franceculture/embed_popup.html:54
+#: templates/franceculture/embed_popup.html:56
msgid "clik here to see the project content"
msgstr "cliquer ici pour voir le contenu du projet"
-#: templates/franceculture/workspace.html:76
+#: templates/franceculture/workspace.html:49
+#: templates/ldt/ldt_utils/content_list.html:50
msgid "content list"
msgstr "Liste des contenus"
-#: templates/franceculture/workspace.html:81 templates/franceculture/workspace.html:97
+#: templates/franceculture/workspace.html:51
+#: templates/franceculture/workspace.html:62
+#: templates/ldt/ldt_utils/content_list.html:52
+#: templates/ldt/ldt_utils/ldt_list.html:79
+msgid "search"
+msgstr ""
+
+#: templates/franceculture/workspace.html:60
+#: templates/ldt/ldt_utils/ldt_list.html:77
+msgid "project list"
+msgstr "Liste des projets"
+
+#: templates/franceculture/partial/contentslist.html:3
+#: templates/franceculture/partial/projectslist.html:3
+#: templates/ldt/ldt_utils/create_ldt.html:30
+msgid "name"
+msgstr ""
+
+#: templates/franceculture/partial/contentslist.html:11
+msgid "create project"
+msgstr "Créer un projet"
+
+#: templates/franceculture/partial/contentslist.html:12
+msgid "preview media"
+msgstr ""
+
+#: templates/franceculture/partial/contentslist.html:21
+#: templates/ldt/ldt_utils/create_content.html:31
+#, fuzzy
+msgid "Create content"
+msgstr "Créer un compte"
+
+#: templates/franceculture/partial/projectslist.html:14
+msgid "Project published, click to unpublish"
+msgstr ""
+
+#: templates/franceculture/partial/projectslist.html:16
+msgid "Project not published, click to publish"
+msgstr ""
+
+#: templates/franceculture/partial/projectslist.html:20
msgid "open ldt"
msgstr "Ouvrir sous Lignes de Temps"
-#: templates/franceculture/workspace.html:82
-msgid "create project"
-msgstr "Créer un projet"
-
-#: templates/franceculture/workspace.html:84
-msgid "link json by externalid"
-msgstr "ouvrir le lecteur augmenté"
-
-#: templates/franceculture/workspace.html:92
-msgid "project list"
-msgstr "Liste des projets"
-
-#: templates/franceculture/workspace.html:98
+#: templates/franceculture/partial/projectslist.html:21
msgid "copy project"
msgstr "Copier projet"
-#: templates/franceculture/workspace.html:100
+#: templates/franceculture/partial/projectslist.html:22
msgid "link json by id"
msgstr "Ouvrir le lecteur augmenté"
-#: templates/ldt/user/login_form.html:32
-msgid "Profiles"
-msgstr "Profile"
+#: templates/franceculture/partial/projectslist.html:31
+#, fuzzy
+msgid "Create project"
+msgstr "Créer un projet"
-#: templates/ldt/user/login_form.html:33
-msgid "Space"
-msgstr "Esp. perso."
+#: templates/ldt/ldt_utils/create_ldt.html:23
+#, fuzzy
+msgid "Create your project"
+msgstr "Créer un projet"
-#: templates/ldt/user/login_form.html:35
-msgid "Create an account"
-msgstr "Créer un compte"
+#: templates/ldt/ldt_utils/create_ldt.html:26
+msgid "Title"
+msgstr ""
-#: templates/ldt/user/login_form.html:37
-msgid "Log out"
-msgstr "déconnexion"
+#: templates/ldt/ldt_utils/create_ldt.html:28
+msgid "List of contents"
+msgstr ""
-#: templates/ldt/user/login_form.html:40 templates/ldt/user/login_form.html:48
-#: templates/registration/login.html:14
+#: templates/ldt/ldt_utils/create_ldt.html:47
+msgid "Create"
+msgstr ""
+
+#: templates/ldt/user/login_form.html:33 templates/registration/login.html:14
msgid "Log in"
msgstr "Connexion"
-#: templates/ldt/user/login_form.html:53
+#: templates/ldt/user/login_form.html:38
msgid "create account"
msgstr "Créer un compte"
-#: templates/ldt/user/login_form.html:57
+#: templates/ldt/user/login_form.html:42
msgid "Pseudo"
msgstr "Pseudo"
-#: templates/ldt/user/login_form.html:60 templates/ldt/user/login_form.html:67
+#: templates/ldt/user/login_form.html:45 templates/ldt/user/login_form.html:52
msgid "this field is compulsory"
msgstr "Ce champs et obligatoire"
-#: templates/ldt/user/login_form.html:64
+#: templates/ldt/user/login_form.html:49
msgid "Password"
msgstr "Mot de passe"
-#: templates/ldt/user/login_form.html:71
+#: templates/ldt/user/login_form.html:56
msgid "reset password"
msgstr "Réinitialiser le mot de passe"
-#: templates/ldt/user/login_form.html:74
+#: templates/ldt/user/login_form.html:59
msgid "Connection"
msgstr "Connexion"
@@ -111,3 +173,12 @@
#: templates/registration/login.html:29
msgid "Forget password?"
msgstr "Mot de passe oublié ?"
+
+#~ msgid "link json by externalid"
+#~ msgstr "ouvrir le lecteur augmenté"
+
+#~ msgid "Space"
+#~ msgstr "Esp. perso."
+
+#~ msgid "Create an account"
+#~ msgstr "Créer un compte"
--- a/web/franceculture/settings.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/settings.py Tue Sep 14 13:38:47 2010 +0200
@@ -82,6 +82,7 @@
)
TEMPLATE_CONTEXT_PROCESSORS = (
+ "django.core.context_processors.request",
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
@@ -137,5 +138,6 @@
LOGIN_URL = BASE_URL + 'franceculture/accounts/login/'
LOGOUT_URL = BASE_URL + 'franceculture'
+LOGIN_REDIRECT_URL = BASE_URL + 'franceculture'
--- a/web/franceculture/templates/base.html Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/templates/base.html Tue Sep 14 13:38:47 2010 +0200
@@ -1,39 +1,29 @@
+{% extends "raw_base.html" %}
{% load i18n %}
{% load logintag %}
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
-<head>
- <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
- <title>{% block title %}France Culture{% endblock %}</title>
- {% block js_import %}
- <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.min.js"></script>
- <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
- <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.validate.js" ></script>
- {% endblock %}
- {% block css_import %}
- <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/screen.css" type="text/css" media="screen, projection" />
- <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/print.css" type="text/css" media="print" />
- <!--[if lt IE 8]>
- <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/ie.css" type="text/css" media="screen, projection" />
- <![endif]-->
- <link rel="stylesheet" href="{{BASE_URL}}static/css/style.css" type="text/css"/>
- <link rel="stylesheet" href="{{BASE_URL}}static/css/nyroModal.css" type="text/css"/>
- <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/css/style.css" type="text/css"/>
- <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/js/login_ajax/login_ajax.css" type="text/css"/>
- {% endblock %}
+{% load navigation %}
+
+{% block js_import %}
+ {{ block.super }}
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.qtip.min.js"></script>
+ <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.validate.js" ></script>
+{% endblock %}
+
+{% block css_import %}
+ {{ block.super }}
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/tabs.css" type="text/css" media="screen, projection" />
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/nyroModal.css" type="text/css"/>
+ <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/js/login_ajax/login_ajax.css" type="text/css"/>
+{% endblock %}
- {% block js_declaration %}
- {% endblock %}
-
-</head>
-<body>
+{% block body %}
+ {{ block.super }}
<div class="container">
<div id="header" class="span-24 last">
{% block header %}
- <div id="header_left">
- <a href="{% url franceculture.views.workspace %}">France Culture</a>
+ <div id="header_left" class="span-24 last">
+ <a href="{% url franceculture.views.workspace %}">France Culture</a>
</div>
{% endblock %}
</div>
@@ -43,10 +33,28 @@
<div id="toolbar" class="span-24 last">
{% block toolbar %}
- <table>
- <tr>
- <td>{% block login %}{% loginAjax user%}{% endblock %}</td>
- <td>
+ <div class="block span-24 last">
+ <div id="tabsdiv" class="block span-20">
+ {% if user.is_authenticated %}
+ {% url franceculture.views.workspace as workspace_url %}
+ {% url ldt.ldt_utils.views.list_ldt as space_url %}
+ {% url ldt.ldt_utils.views.list_content as content_url %}
+ {% url ldt.user.views.profile as profile_url %}
+ <ul class="tabs">
+ <li class='{% active request "active" workspace_url %}'><a href="{{ workspace_url }}" >{% trans "home" %}</a></li>
+ <li class='{% active request "active" content_url %}'><a href="{{ content_url }}">{% trans "contents" %}</a></li>
+ <li class='{% active request "active" space_url %}'><a href="{{ space_url }}">{% trans "indexation projects" %}</a></li>
+ <li class='{% active request "active" "" %}'><a href="#">{% trans "accounts" %}</a></li>
+ <li class='{% active request "active" profile_url %}'><a href="{{ profile_url }}" >{% trans "Profiles" %}</a> </li>
+ </ul>
+ {% endif %}
+ </div>
+ <div id="loginstate" class="block span-4 last">
+ {% if user.is_authenticated %}
+ {{user.username}} | <a href="{% url ldt.user.views.logout_view %}" >{% trans "Log out" %}</a>
+ {% endif %}
+ </div>
+ </div>
{% if LANGUAGES.1 %}
<div id="language_chooser">
<form action="{{BASE_URL}}enmi/i18n/setlang/" method="post">
@@ -59,11 +67,8 @@
</select>
</form>
</div>
- {% endif %}
- </td>
- </tr>
- </table>
- {% endblock %}
+ {% endif %}
+ {% endblock %}
</div>
<div id="inner_content" class="span-24 last">
{% block content %}{% endblock %}
@@ -79,5 +84,4 @@
{% endblock %}
</div>
</div>
-</body>
-</html>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/franceculture/partial/contentslist.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,23 @@
+{% load i18n %}
+<div class="projectscontentsheader span-12 last" id="contentsheader">
+{% trans "name" %}
+</div>
+<div class="span-12 last projectscontentstablewrapperdiv">
+<div class="span-12 last projectscontentstablediv" id="contentstablediv">
+ <table class="projectscontentstable">
+ <tbody class="projectscontentsbody">
+ {% for content in contents %}
+ <tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
+ <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/document_add.gif" title="{% trans 'create project' %}" alt="{% trans 'create project' %}" href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create"/></div></td>
+ <td class="cellimg"><div class="cellimgdiv"><img alt="{% trans 'preview media'%}" title="{% trans 'preview media'%}" src="{{MEDIA_URL}}/img/control_play.gif" href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link"/></div></td>
+ <td class="contenttitle">{{ content.title }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+</div>
+</div>
+<div class="projectscontentsfooter span-12 last">
++ <a class='content_link_create' href="{% url ldt.ldt_utils.views.write_content %}">{% trans "Create content" %}</a>
+</div>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/franceculture/partial/projectslist.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,32 @@
+{% load i18n %}
+<div class="projectscontentsheader span-12 last" id="projectsheader">
+{% trans "name" %}
+</div>
+<div class="span-12 last projectscontentstablewrapperdiv">
+<div class="span-12 last projectscontentstablediv" id="projectstablediv">
+<table class="projectscontentstable">
+ <tbody class="projectscontentsbody">
+{% for project in projects %}
+ <tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}" >
+ {% url ldt.ldt_utils.views.project_json_id project.ldt_id as json_url_id %}
+ <td class="cellimg"><div class="cellimgdiv">
+ {% ifequal project.state 2 %}
+ <img src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" alt="{% trans 'Project published, click to unpublish' %}" title="{% trans 'Project published, click to unpublish' %}" class="publishedproject" id="project_{{project.ldt_id}}" />
+ {% else %}
+ <img src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" alt="{% trans 'Project not published, click to publish' %}" title="{% trans 'Project not published, click to publish' %}" class="unpublishedproject" id="project_{{project.ldt_id}}" />
+ {% endifequal %}
+ </div>
+ </td>
+ <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/document_edit.gif" href="{% url ldt.ldt_utils.views.indexProject project.ldt_id %}" class="ldt_link" alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></div></td>
+ <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/documents_duplicate.gif" href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" class="ldt_link_create" alt="{% trans 'copy project' %}" title="{% trans 'copy project' %}"/></div></td>
+ <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/plugin.gif" href="{{WEB_URL}}{{json_url_id}}" id="player_project_{{project.ldt_id}}" class="ldt_link_embed" alt="{% trans 'link json by id' %}" title="{% trans 'link json by id' %}"/></div></td>
+ <td class="projecttitle">{{ project.title }}</td>
+ </tr>
+{% endfor %}
+ </tbody>
+</table>
+</div>
+</div>
+<div class="projectscontentsfooter span-12 last">
++ <a class='ldt_link_create' href="{% url ldt.ldt_utils.views.create_ldt_view %}" >{% trans "Create project" %}</a>
+</div>
--- a/web/franceculture/templates/franceculture/workspace.html Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/templates/franceculture/workspace.html Tue Sep 14 13:38:47 2010 +0200
@@ -1,65 +1,37 @@
{% extends "base.html" %}
{% load i18n %}
+{% block js_import %}
+{{block.super}}
+ <script type="text/javascript" src="{{MEDIA_URL}}js/projectscontents.js" ></script>
+{% endblock %}
+
+
{% block js_declaration %}
{{block.super}}
<script type="text/javascript">
-$(document).ready(function(){
+
+var content_filter_url = "{% url franceculture.views.contentsfilter filter='__FILTER__' %}";
+var project_filter_url = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='false' %}";
+
+function init_events(base_node) {
+
+ init_events_contents(base_node, "{% url franceculture.views.popup_embed %}");
+
+}
- $('.ldt_link').nyroModal({
- type: 'iframe',
- forceType: 'iframe',
- height:662,
- width:1022,
- bgColor: 'rgb(239, 239, 239)',
- padding: 5,
- titleFromIframe: false
- });
-
- $('.ldt_link_create').nyroModal({
- type: 'iframe',
- forceType: 'iframe',
- height:662,
- width:1022,
- bgColor: 'rgb(239, 239, 239)',
- padding: 5,
- titleFromIframe: false,
- beforeHideContent: function(elts, settings, callback){
- try {
- var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
- if(res.length > 0)
- {
- res.get(0).forceSave();
- }
- }
- catch(err)
- {
- // do nothing
- }
- callback();
- }
- });
+$(document).ready(function(){
- $('.ldt_link_embed').click(function(e) {
- e.preventDefault();
- link = $(e.target);
- json_url = link.attr("href");
- player_id = link.attr("id");
- /*$.nyroModalSettings({
- ajax: { data: ({ json_url:json_url, player_id:player_id }) }
- });*/
- $.nyroModalManual({
- type: 'iframe',
- forceType: 'iframe',
- titleFromIframe: false,
- height:662,
- width:650,
- bgColor: 'rgb(239, 239, 239)',
- padding: 5,
- url: '{% url franceculture.views.popup_embed %}?json_url='+escape(json_url)+'&player_id='+escape(player_id),
- });
- return false;
- });
+ input_list_init = [
+ {'input_selector':"#searchcontentsinput", 'container_selector':"#contentslistcontainer", 'url':content_filter_url},
+ {'input_selector':"#searchprojectsinput", 'container_selector':"#projectslistcontainer", 'url':project_filter_url}
+ ];
+
+ searchFieldInit(input_list_init);
+
+ init_events(document);
+
+
});
</script>
@@ -71,36 +43,28 @@
{% endblock %}
{% block content %}
-
-<div class="span-24 last" id="contentsdiv">
-<h1>{% trans "content list" %}</h1>
-<table>
-{% for content in contents %}
- <tr>
- <td>{{ content.title }}</td>
- <td><a href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link">{% trans "open ldt" %}</a></td>
- <td><a href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create">{% trans "create project" %}</a></td>
- {% url ldt.ldt_utils.views.project_json_externalid content.external_id as json_url_externalid %}
- <td><a href="{{WEB_URL}}{{json_url_externalid}}" class="ldt_link_embed" id="player_project_{{content.iri_id}}">{% trans "link json by externalid" %}</a>
- </td>
- </tr>
-{% endfor %}
-</table>
+<div class="span-24 last" id="allcontentsdiv">
+ <div class="span-12" id="contentsdiv">
+ <div class="span-12 last titlediv" >
+ <div class="span-8 projectscontentstitle">{% trans "content list" %}</div>
+ <div class="span-4 last searchfielddiv" >
+ <div class="searchfield rounded"><input id="searchcontentsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="contentsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif" alt="loader"/></div>
+ </div>
+ </div>
+ <div class="span-12 last projectscontentsdiv" id="contentslistcontainer">
+ {% include "franceculture/partial/contentslist.html" %}
+ </div>
+ </div>
+ <div class="span-12 last" id="projectsdiv">
+ <div class="span-12 last titlediv" >
+ <div class="span-8 projectscontentstitle" >{% trans "project list" %}</div>
+ <div class="span-4 last searchfielddiv" >
+ <div class="searchfield rounded"><input id="searchprojectsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="projectsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif" alt="loader"/></div>
+ </div>
+ </div>
+ <div class="span-12 last projectscontentsdiv" id="projectslistcontainer">
+ {% include "franceculture/partial/projectslist.html" %}
+ </div>
+ </div>
</div>
-
-<div class="span-24 last" id="projectsdiv">
-<h1>{% trans "project list" %}</h1>
-<table>
-{% for project in projects %}
- <tr>
- <td>{{ project.title }}</td>
- <td><a href="{% url ldt.ldt_utils.views.indexProject project.ldt_id %}" class="ldt_link">{% trans "open ldt" %}</a></td>
- <td><a href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" class="ldt_link_create">{% trans "copy project" %}</a></td>
- {% url ldt.ldt_utils.views.project_json_id project.ldt_id as json_url_id %}
- <td><a href="{{WEB_URL}}{{json_url_id}}" class="ldt_link_embed" id="player_project_{{project.ldt_id}}">{% trans "link json by id" %}</a>
- </tr>
-{% endfor %}
-</table>
-</div>
-
{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/content_list.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,62 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block js_import %}
+{{block.super}}
+ <script type="text/javascript" src="{{MEDIA_URL}}js/projectscontents.js" ></script>
+{% endblock %}
+
+{% block js_declaration %}
+{{block.super}}
+<script type="text/javascript">
+
+content_filter_url = "{% url franceculture.views.contentsfilter filter='__FILTER__' %}";
+
+function init_events(base_node) {
+
+ init_events_contents(base_node, "{% url franceculture.views.popup_embed %}");
+}
+
+$(document).ready(function(){
+
+ input_list_init = [
+ {'input_selector':"#searchcontentsinput", 'container_selector':"#contentslistcontainer", 'url':content_filter_url},
+ ];
+
+
+ searchFieldInit(input_list_init);
+
+ $("#searchcontentsinput").keyup(function (e) {
+ var container_selector="#contentslistcontainer";
+ searchCallback(e.target, container_selector, searchcontentfilterurl);
+ });
+
+ init_events(document);
+
+});
+</script>
+
+{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/workspace.css" type="text/css"/>
+{% endblock %}
+
+{% block content %}
+<div class="span-24" id="allcontentsdiv">
+ <div class="span-12" id="contentsdiv">
+ <div class="span-12 last titlediv" >
+ <div class="span-8 projectscontentstitle">{% trans "content list" %}</div>
+ <div class="span-4 last searchfielddiv" >
+ <div class="searchfield rounded"><input id="searchcontentsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="contentsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif" alt="loader"/></div>
+ </div>
+ </div>
+ <div class="span-12 last projectscontentsdiv" id="contentslistcontainer">
+ {% include "franceculture/partial/contentslist.html" %}
+ </div>
+ </div>
+ <div class="span-12 last" id="createcontentsdiv">
+ </div>
+</div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/create_content.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,59 @@
+{% extends "raw_base.html" %}
+
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+
+{% block js_import %}
+ {{ block.super }}
+ <script type="text/javascript" src="{{MEDIA_URL}}admin/js/core.js" ></script>
+ <script type="text/javascript" src="{% url jsi18n %}" } ></script>
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
+ {{ content_form.media.js }}
+{% endblock %}
+
+{% block css_import %}
+ {{ block.super }}
+ {{ content_form.media.css }}
+ <link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+ <link rel="stylesheet" href="{{MEDIA_URL}}css/ldtform.css" />
+{% endblock %}
+
+
+{% block js_declaration %}
+ <script type="text/javascript">
+ window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
+
+ </script>
+{% endblock %}
+
+{% block body %}
+ <div id="add_content" class="span-18 last">
+ <div class="projectscontentstitle">{% trans "Create content" %}</div>
+ <form action="{{create_content_action}}" method="POST">
+ <div id="contentformhidden">
+ {% csrf_token %}
+ <input type="hidden" name="form_status" value="{{form_status}}" id="content_form_status" />
+ {% for hidden in form.hidden_fields %}
+ {{ hidden }}
+ {% endfor %}
+ {{content_form.iri_id}}
+ </div>
+ <div id="contentformfields" class="span-18 last">
+ <div id="contentleft" class="span-9">
+ <div>{{ content_form.src.errors }}{{ content_form.src.label_tag }}{{content_form.src}}</div>
+ <div>{{ content_form.videopath.errors }}{{ content_form.videopath.label_tag }}{{content_form.videopath}}</div>
+ <div>{{ content_form.title.errors }}{{ content_form.title.label_tag }}{{content_form.title}}</div>
+ <div>{{ content_form.description.errors }}{{ content_form.description.label_tag }}{{content_form.description}}</div>
+ </div>
+ <div id="contentright" class="span-9 last" >
+ <div>{{ content_form.external_id.errors }}{{ content_form.external_id.label_tag }}{{content_form.external_id}}</div>
+ <div>{{ content_form.duration.errors }}{{ content_form.duration.label_tag }}{{content_form.duration}}</div>
+ <div>{{ content_form.content_creation_date.errors }}{{ content_form.content_creation_date.label_tag }}{{content_form.content_creation_date}}</div>
+ </div>
+ </div>
+ <div id="submitcontent" class="span-18 last">
+ <input type="submit"/>
+ </div>
+ </form>
+ </div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/create_ldt.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,53 @@
+{% extends "raw_base.html" %}
+
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+
+{% block js_import %}
+ {{ block.super }}
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
+ {{ content_form.media.js }}
+{% endblock %}
+
+{% block css_import %}
+ {{ block.super }}
+ {{ content_form.media.css }}
+ <link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+ <link rel="stylesheet" href="{{MEDIA_URL}}css/ldtform.css" />
+ <link rel="stylesheet" href="{{MEDIA_URL}}css/workspace.css" />
+{% endblock %}
+
+
+{% block body %}
+ <div id="add_contribution" class="span-12 last">
+ <div class="projectscontentstitle span-12 last">{% trans "Create your project" %}</div>
+ <form action="{{create_project_action}}" method="POST">
+ {% csrf_token %}
+ <label for="title">{% trans "Title" %}:</label>
+ <input class="inputbox required" type="text" name="title" size="80" ; value="" id="title" />
+ <label>{% trans "List of contents" %}</label>
+ <div class="span-12 last projectscontentsdiv" id="ldtcreatecontentslistcontainer">
+ <div class="projectscontentsheader span-12 last" id="contentslistheader">{% trans "name" %}</div>
+ <div class="span-12 last projectscontentstablewrapperdiv" id="ldtcreatetablewrapperdiv">
+ <div class="span-12 last projectscontentstablediv" id="ldtcreatecontentstablediv">
+ <table class="projectscontentstable">
+ <tbody class="projectscontentsbody">
+ {% for content in contents %}
+ <tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
+ <td class="cellcheckbox"><input type="checkbox" name="contents" value="{{ content.id }}" checked="true" /></td>
+ <td class="contenttitle">{{ content.title }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ <div id="submitcontent" class="span-12 last">
+ <input class="button" id="ldt_submit" type="submit" value="{% trans 'Create' %}" />
+ </div>
+ </form>
+ </div>
+
+{% endblock %}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/ldt_list.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,89 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block js_import %}
+{{block.super}}
+ <script type="text/javascript" src="{{MEDIA_URL}}js/projectscontents.js" ></script>
+{% endblock %}
+
+
+{% block js_declaration %}
+{{block.super}}
+<script type="text/javascript">
+
+searchprojectfilterurl = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='true' %}";
+publishprojecturl = "{% url ldt.ldt_utils.views.publish '__PROJECT_ID__' 'false' %}";
+unpublishprojecturl = "{% url ldt.ldt_utils.views.unpublish '__PROJECT_ID__' 'false' %}";
+
+function init_events(base_node) {
+
+ init_events_base(base_node, "{% url franceculture.views.popup_embed %}");
+
+ $('.publishedproject', base_node).click(function(e) {
+ e.preventDefault();
+ var target = $(e.target);
+ var project_id = target.attr('id').replace('project_','');
+ var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id);
+
+ $.getJSON(url, function(json){
+ if(json.res) {
+ searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
+ }
+ });
+
+ });
+
+ $('.unpublishedproject', base_node).click(function(e) {
+ e.preventDefault();
+ var target = $(e.target);
+ var project_id = target.attr('id').replace('project_','');
+ var url = publishprojecturl.replace('__PROJECT_ID__', project_id);
+
+ $.getJSON(url, {}, function(json){
+ if(json.res) {
+ searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
+ }
+ });
+
+ });
+
+
+}
+
+$(document).ready(function(){
+
+ input_list_init = [
+ {'input_selector':"#searchprojectsinput", 'container_selector':"#projectslistcontainer", 'url':searchprojectfilterurl}
+ ];
+
+ searchFieldInit(input_list_init);
+
+ init_events(document);
+
+});
+</script>
+
+{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/workspace.css" type="text/css"/>
+{% endblock %}
+
+{% block content %}
+<div class="span-24" id="allcontentsdiv">
+ <div class="span-12 last" id="projectsdiv">
+ <div class="span-12 last titlediv" >
+ <div class="span-8 projectscontentstitle" >{% trans "project list" %}</div>
+ <div class="span-4 last searchfielddiv" >
+ <div class="searchfield rounded"><input id="searchprojectsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="projectsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif"/></div>
+ </div>
+ </div>
+ <div class="span-12 last projectscontentsdiv" id="projectslistcontainer">
+ {% include "franceculture/partial/projectslist.html" %}
+ </div>
+ </div>
+ <div class="span-12 last" id="createprojectdiv">
+ </div>
+</div>
+{% endblock %}
--- a/web/franceculture/templates/ldt/user/login_form.html Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/templates/ldt/user/login_form.html Tue Sep 14 13:38:47 2010 +0200
@@ -25,22 +25,7 @@
{% block css_import %}
{{block.super}}
{% endblock %}
-<div id="loginstate" class="block span-24 last">
- <ul class="usertool">
- {% if user.is_authenticated %}
- <li id="user">{{user.username}}</li>
- <li><a href="{% url ldt.user.views.profile %}" >{% trans "Profiles" %}</a> </li>
- <li><a href="{% url ldt.user.views.space %}">{% trans "Space" %}</a></li>
- {% if user.is_superuser %}
- <li><a href="{% url registration.views.register %}" >{% trans "Create an account" %}</a></li>
- {% endif %}
- <li><a href="{% url ldt.user.views.logout_view %}" >{% trans "Log out" %}</a></li>
-
- {% else %}
- <li><a href="#inlineContent" class="login_link">{% trans "Log in" %}</li>
- {% endif %}
- </ul>
-</div>
+
<div id="inlineContent" style="display: none;">
<div id="loginform">
<div class="title">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/raw_base.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,45 @@
+{% load i18n %}
+{% load logintag %}
+{% load navigation %}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
+<head>
+{% block head %}
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
+ <link rel="SHORTCUT ICON" href="{{MEDIA_URL}}/img/favicon.ico" />
+ <title>{% block title %}France Culture{% endblock %}</title>
+ {% block js_import %}
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.min.js"></script>
+ {% endblock %}
+
+ {% block css_declaration %}
+ <style type="text/css">
+ .rounded {
+ behavior:url("{{MEDIA_URL}}css/border-radius.htc");
+ }
+ </style>
+ {% endblock %}
+
+ {% block css_import %}
+
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/screen.css" type="text/css" media="screen, projection" />
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/print.css" type="text/css" media="print" />
+ <!--[if lt IE 8]>
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/ie.css" type="text/css" media="screen, projection" />
+ <![endif]-->
+ <link rel="stylesheet" href="{{BASE_URL}}static/css/style.css" type="text/css"/>
+ <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/css/style.css" type="text/css"/>
+ {% endblock %}
+
+ {% block js_declaration %}
+ {% endblock %}
+{% endblock %}
+</head>
+<body>
+{% block body %}
+{% endblock %}
+</body>
+</html>
--- a/web/franceculture/templates/registration/login.html Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/templates/registration/login.html Tue Sep 14 13:38:47 2010 +0200
@@ -19,7 +19,7 @@
<form action="" method='post' id="login-form">
{% csrf_token %}
- <input type="hidden" name="next" value="{% url ldt.user.views.profile%}" />
+ <input type="hidden" name="next" value="{{ next }}" />
<ul id="login_fields_list">
{{form.as_ul}}
<li><input class="button"type="submit" value="{% trans "login" %}" /></li>
--- a/web/franceculture/urls.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/urls.py Tue Sep 14 13:38:47 2010 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns ,include
+from django.conf.urls.defaults import patterns ,include, url
from django.contrib import admin
@@ -20,8 +20,10 @@
(r'^ldt/', include('ldt.ldt_utils.urls')),
(r'^user/', include('ldt.user.urls')),
- (r'^accounts/', include('registration.backends.default.urls')),
+ (r'^accounts/', include('registration.backends.simple.urls')),
- (r'^/?$', "franceculture.views.workspace"),
+ url(r'^/?$', "franceculture.views.workspace", name="root-view"),
+ url(r'^filterprojects/(?P<filter>\w*)/(?P<is_owner>true|false)/$', "franceculture.views.projectsfilter", ),
+ url(r'^filtercontents/(?P<filter>\w*)/$', "franceculture.views.contentsfilter", ),
(r'^embedpopup/?$', "franceculture.views.popup_embed"),
)
--- a/web/franceculture/views.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/franceculture/views.py Tue Sep 14 13:38:47 2010 +0200
@@ -3,7 +3,9 @@
from django.template import RequestContext
from django.utils.html import escape
from django.template.loader import render_to_string
-from ldt.ldt_utils.models import Content, Project
+from ldt.ldt_utils.models import Content, Project, Owner
+from ldt.ldt_utils.utils import boolean_convert
+from django.http import HttpResponseServerError
@login_required
@@ -19,6 +21,44 @@
return render_to_response("franceculture/workspace.html",
{'contents': content_list, 'projects': project_list},
context_instance=RequestContext(request))
+
+@login_required
+def projectsfilter(request, filter, is_owner=False):
+
+ project_list = None
+ is_owner = boolean_convert(is_owner)
+
+ if is_owner:
+ owner = None
+ try:
+ owner = Owner.objects.get(user=request.user)
+ except:
+ return HttpResponseServerError("<h1>User not found</h1>")
+
+ project_list = Project.objects.filter(owner=owner)
+ else:
+ project_list = Project.objects.filter(state=2)
+
+ if filter:
+ project_list = project_list.filter(title__icontains=filter)
+
+ return render_to_response("franceculture/partial/projectslist.html",
+ {'projects': project_list},
+ context_instance=RequestContext(request))
+
+
+@login_required
+def contentsfilter(request, filter):
+ if filter:
+ content_list = Content.objects.filter(title__icontains=filter)
+ else:
+ content_list = Content.objects.all()
+
+ return render_to_response("franceculture/partial/contentslist.html",
+ {'contents': content_list},
+ context_instance=RequestContext(request))
+
+
def popup_embed(request):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/core/handlers/modwsgi.py Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,24 @@
+import os, sys, site
+
+def application(environ, start_response):
+ os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
+ os.environ['PY_USE_XMLPLUS'] = environ['PY_USE_XMLPLUS']
+
+ prev_sys_path = list(sys.path)
+
+ sys.path.append(environ['PROJECT_PATH'])
+ site.addsitedir(environ['PYTHON_PATH'])
+
+ new_sys_path = []
+ for item in list(sys.path):
+ if item not in prev_sys_path:
+ new_sys_path.append(item)
+ sys.path.remove(item)
+ sys.path[:0] = new_sys_path
+
+ import django.core.handlers.wsgi
+
+ _application = django.core.handlers.wsgi.WSGIHandler()
+
+ return _application(environ, start_response)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/forms/widgets.py Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,17 @@
+"""
+Some useful form widgets
+"""
+
+from django.contrib.admin.widgets import AdminSplitDateTime
+from django.utils.safestring import mark_safe
+from django.utils.translation import ugettext as _
+
+
+class LdtSplitDateTime(AdminSplitDateTime):
+ """
+ A widget that extend the AdminSplitDateTime to improve the html outputted
+ """
+
+ def format_output(self, rendered_widgets):
+ return mark_safe(u'<div class="ldtdatetime"><div class="ldtdate"><div class="ldtdatetitle">%s</div> <div class="ldtdatefield">%s</div></div><div class="ldttime"><div class="ldttimetitle">%s</div> <div class="ldttimefield">%s</div></div></div>' % \
+ (_('Date'), rendered_widgets[0], _('Time'), rendered_widgets[1]))
--- a/web/ldt/ldt_utils/fileimport.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/fileimport.py Tue Sep 14 13:38:47 2010 +0200
@@ -1,16 +1,15 @@
-import tempfile
-import os.path
-import shutil
+from copy import deepcopy
+from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from ldt.utils import zipfileext
-from django.conf import settings
from models import Content
-import xml.dom.minidom
-import xml.dom.ext #@UnresolvedImport
-import xml.xpath #@UnresolvedImport
import fnmatch
+import lxml.etree
+import os.path
+import shutil
+import tempfile
+import urllib
import uuid
-import urllib
class FileImportError(Exception):
def __init__(self, value):
@@ -48,68 +47,84 @@
def processIri(self):
# for just import a file ldt and get the title for every media
if 'http' in self.src:
- url = urllib.urlopen(self.src)
- doc = xml.dom.minidom.parse(url)
+ #url = urllib.urlopen(self.src)
+ path = url
+ #doc = xml.dom.minidom.parse(url)
#for import a zip, get title and copy file .iri in the media directory
else:
path = os.path.join(self.basepath, self.src)
- doc = xml.dom.minidom.parse(path)
+ #doc = xml.dom.minidom.parse(path)
+
+ doc = lxml.etree.parse(path)
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
+ #doc = Ft.Xml.Domlette.ConvertDocument(doc)
+ #con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/head/meta[@name='title']/@content", context=con)
- self.title = res[0].value
+ res = doc.xpath("/iri/head/meta[@name='title']/@content")
+ #res = xml.xpath.Evaluate("/iri/head/meta[@name='title']/@content", context=con)
+ #self.title = res[0].value
+ self.title = res[0]
- res = xml.xpath.Evaluate("/iri/body/ensembles",context=con)
+ #res = xml.xpath.Evaluate("/iri/body/ensembles",context=con)
+ res = doc.xpath("/iri/body/ensembles")
ensemblesnode = res[0]
ensembleids = []
- for node in ensemblesnode.childNodes:
- if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
- id = node.getAttributeNS(None,u"id")
+ for node in ensemblesnode: #ensemblesnode.childNodes:
+ #if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
+ if node.tag == "ensemble":
+ #id = node.getAttributeNS(None,u"id")
+ id = node.attrib["id"]
if id not in ensembleids:
ensembleids.append(id)
if self.annotations is not None:
newEnsemble = None
- for cnode in self.annotations.childNodes:
- if cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "decoupage":
+ #for cnode in self.annotations.childNodes:
+ for cnode in self.annotations:
+ #if cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "decoupage":
+ if cnode.tag == "decoupage":
if newEnsemble is None:
- newensemble = doc.createElement('ensemble')
+ #newensemble = doc.createElementNS(None,'ensemble')
ensembleid = self.id+"_"+str(uuid.uuid1())
- newensemble.setAttributeNS(None,'id',ensembleid)
-
- newensemble.setAttributeNS(None,'title', self.annotations.getAttribute('title'))
- newensemble.setAttributeNS(None,'author', self.annotations.getAttribute('author'))
- newensemble.setAttributeNS(None,'date', self.annotations.getAttribute('date'))
- newensemble.setAttributeNS(None,'abstract', self.annotations.getAttribute('abstract'))
- ensemblesnode.appendChild(newensemble)
+ newensemble = lxml.etree.SubElement(ensemblesnode,
+ 'ensemble',
+ {'id' : ensembleid,
+ 'title' : self.annotations.get('title') or "",
+ 'author' : self.annotations.get('author') or "",
+ 'date' : self.annotations.get('date') or "",
+ 'abstract' : self.annotations.get('abstract') or ""
+ }
+ )
ensembleids.append(ensembleid)
- newDecoupageNode = cnode.cloneNode(True)
- newensemble.appendChild(newDecoupageNode)
- elif cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "ensemble":
- ensembleid = cnode.getAttribute(u"id")
- cloneNode = cnode.cloneNode(True)
+ newDecoupageNode = deepcopy(cnode)
+ newensemble.append(newDecoupageNode)
+ #elif cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "ensemble":
+ elif cnode.tag == "ensemble":
+ #ensembleid = cnode.getAttribute(u"id")
+ ensembleid = cnode.attrib['id']
+ cloneNode = deepcopy(cnode)
if ensembleid in ensembleids:
ensembleid = self.id+"_"+str(uuid.uuid1())
- cloneNode.setAttribute(u"id", ensembleid)
+ cloneNode.set(u"id", ensembleid)
ensembleids.append(ensembleid)
- ensemblesnode.appendChild(cloneNode)
+ ensemblesnode.append(cloneNode)
- res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
+ res = doc.xpath("/iri/body/medias/media[@id='video']/video")
if self.flatten:
- src_video = res[0].getAttributeNS(None,'src')
+ src_video = res[0].get('src')
self.videourl = os.path.basename(src_video)
- res[0].setAttributeNS(None,'src', self.videourl)
- self.duration = res[0].getAttributeNS(None, u'dur')
+ res[0].set('src', self.videourl)
+ self.duration = res[0].get(u'dur')
f = open(path, "w")
try:
- xml.dom.ext.Print(doc, stream=f)
+ #etree = lxml.etree.ElementTree(doc)
+ doc.write(f, encoding="UTF-8", pretty_print=True, xml_declaration=True)
+# xml.dom.ext.Print(doc, stream=f)
finally:
f.close()
@@ -127,19 +142,19 @@
# url = self.src
#else:
# url = self.id + u"/" + os.path.basename(self.src)
- content, self.created = Content.objects.get_or_create(iri_id=self.id, defaults = {'src':self.videourl, 'iriurl': self.src, 'title':self.title, 'description':self.desc, 'videopath': self.videopath})
+ content, self.created = Content.objects.get_or_create(iri_id=self.id, defaults = {'src':unicode(self.videourl), 'iriurl': unicode(self.src), 'title':unicode(self.title), 'description':unicode(self.desc), 'videopath': unicode(self.videopath)})
if not self.created:
- content.iriurl = self.src
- content.title = self.title
- content.description = self.desc
+ content.iriurl = unicode(self.src)
+ content.title = unicode(self.title)
+ content.description = unicode(self.desc)
content.save()
- content.iriurl = self.src
- content.videopath = self.videopath.rstrip("/") + "/"
+ content.iriurl = unicode(self.src)
+ content.videopath = unicode(self.videopath.rstrip("/") + "/")
- content.iri = self.id + u"/" + os.path.basename(self.src)
- content.title = self.title
- content.description = self.desc
+ content.iri = unicode(self.id + u"/" + os.path.basename(self.src))
+ content.title = unicode(self.title)
+ content.description = unicode(self.desc)
content.duration = int(self.duration)
content.save()
@@ -253,26 +268,32 @@
# copy iri in folder
# create or update content
contents = {}
- if ldtpath:
- doc = xml.dom.minidom.parse(ldtpath)
- else:
- doc = xml.dom.minidom.parse(self.filepath)
+ filepath = ldtpath if ldtpath else self.filepath
+ doc = lxml.etree.parse(filepath)
+ #if ldtpath:
+ #doc = xml.dom.minidom.parse(ldtpath)
+ # doc = lxml.etree.parse(ldtpath)
+ #else:
+ #doc = xml.dom.minidom.parse(self.filepath)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
+ #con = xml.xpath.Context.Context(doc, 1, 1, None)
#get author from file ldt
- result = xml.xpath.Evaluate("/iri/project", context=con)
+ #result = xml.xpath.Evaluate("/iri/project", context=con)
+ result = doc.xpath("/iri/project")
for pnode in result:
- author = pnode.getAttributeNS(None,u"user")
+ #author = pnode.getAttributeNS(None,u"user")
+ author = pnode.attrib[u"user"]
if author:
self.author = unicode(author)
break
- result = xml.xpath.Evaluate("/iri/medias/media", context=con)
+ result = doc.xpath("/iri/medias/media")
for i, medianode in enumerate(result):
# get iri file's id from file ldt
- id = medianode.attributes['id'].value
+ #id = medianode.attributes['id'].value
+ id = medianode.attrib['id']
if self.checkExistingMedia:
try:
Content.objects.get(iri_id=id)
@@ -289,9 +310,10 @@
else:
contents[id] = IriInfo(id, i, "", flatten=self.flatten)
# Get iri file's url from ldt. This url can be relative path or absolute path.
- contents[id].src = medianode.attributes['src'].value
- if medianode.attributes['video'].value !="":
- contents[id].videopath = medianode.attributes['video'].value
+ #contents[id].src = medianode.attributes['src'].value
+ contents[id].src = medianode.attrib['src']
+ if medianode.attrib['video'] !="":
+ contents[id].videopath = medianode.attrib['video']
elif self.videopath !="" or self.videopath:
contents[id].videopath = self.videopath
else:
@@ -299,14 +321,15 @@
#get annotation of file ldt
- result = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+ #result = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+ result = doc.xpath("/iri/annotations/content")
for contentnode in result:
- id = contentnode.attributes['id'].value
+ id = contentnode.attrib['id']
# pocketfilms.utils.log.debug("ID : " + str(id))
if contents.has_key(id):
if self.author:
- contentnode.setAttributeNS(None,"author", unicode(self.author))
+ contentnode.set("author", unicode(self.author))
contents[id].annotations = contentnode
#go throught values
--- a/web/ldt/ldt_utils/forms.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/forms.py Tue Sep 14 13:38:47 2010 +0200
@@ -1,6 +1,12 @@
from django import forms
from models import Project, Content
import uuid
+from utils import generate_uuid
+from django.forms.widgets import Widget
+from django.contrib.admin import widgets as admin_widgets
+from django.core.urlresolvers import reverse
+from ldt.settings import BASE_URL
+from ldt.forms import widgets as ldt_widgets
class LdtImportForm(forms.Form):
importFile = forms.FileField()
@@ -27,3 +33,37 @@
class CopyProjectForm (forms.Form):
title = forms.CharField()
+
+
+class ContentForm(forms.ModelForm):
+
+ #iri_id = forms.CharField(max_length=1024, widget=forms.HiddenInput, initial=generate_uuid)
+ iriurl = forms.CharField(max_length=1024, widget=forms.HiddenInput, required=False)
+ content_creation_date = forms.SplitDateTimeField(widget=ldt_widgets.LdtSplitDateTime, required=False)
+
+ def clean_iri_id(self):
+ data = self.cleaned_data.get('iri_id')
+ if not data:
+ data = generate_uuid()
+ return data
+
+ def clean(self):
+ cleaned_data = self.cleaned_data
+ iriurl_data = cleaned_data.get('iriurl')
+ iri_id_data = cleaned_data['iri_id']
+ if not iriurl_data:
+ iriurl_data = "%s/%s.iri" % (iri_id_data, iri_id_data)
+ cleaned_data['iriurl'] = iriurl_data
+ return cleaned_data
+
+ class Meta:
+ model = Content
+ exclude = ("creation_date", "update_date", "authors")
+ widgets = {
+ 'iri_id': forms.HiddenInput,
+ }
+
+ class Media:
+ css = {
+ 'all' : ('admin/css/forms.css','admin/css/base.css', 'admin/css/base.css', 'admin/css/widgets.css')
+ }
--- a/web/ldt/ldt_utils/models.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/models.py Tue Sep 14 13:38:47 2010 +0200
@@ -1,11 +1,11 @@
+from django.conf import settings
from django.db import models
-from django.conf import settings
+from django.utils.translation import ugettext_lazy as _
from ldt.core.models import Document, Owner
-from django.utils.translation import ugettext_lazy as _
-from utils import create_ldt, copy_ldt, create_empty_iri, update_iri
+from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, generate_uuid
+import lxml.etree
import os.path
import uuid
-import xml
class Author(models.Model):
@@ -19,25 +19,24 @@
class Content(models.Model):
- iri_id = models.CharField(max_length=1024, unique=True)
- iriurl = models.CharField(max_length=1024)
- src = models.CharField(max_length=1024)
- videopath = models.CharField(max_length=1024, null=True, blank=True)
- creation_date = models.DateTimeField(auto_now_add=True)
- update_date = models.DateTimeField(auto_now=True)
- title = models.CharField(max_length=1024, null=True, blank=True)
- description = models.TextField(null=True, blank=True)
- external_id = models.CharField(max_length=1024, null=True, blank=True)
- authors = models.ManyToManyField(Author, blank=True)
- duration = models.IntegerField(null=True, blank=True)
+ iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
+ iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
+ src = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.src'))
+ videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.videopath'))
+ creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date'))
+ update_date = models.DateTimeField(auto_now=True, verbose_name=_('content.update_date'))
+ title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.title'))
+ description = models.TextField(null=True, blank=True, verbose_name=_('content.description'))
+ external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_id'))
+ authors = models.ManyToManyField(Author, blank=True, verbose_name=_('content.authors'))
+ duration = models.IntegerField(null=True, blank=True, verbose_name=_('content.duration'))
+ content_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('content.content_creation_date'))
def get_duration(self):
if self.duration is None:
- doc = xml.dom.minidom.parse(self.iri_file_path())
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
- self.duration = int(res[0].getAttributeNS(None, u'dur'))
+ doc = lxml.etree.parse(self.iri_file_path())
+ res = doc.xpath("/iri/body/medias/media[@id='video']/video")
+ self.duration = int(res[0].get(u'dur') or 0)
self.save()
return self.duration
@@ -48,7 +47,8 @@
writer.commit()
#TODO: better manage the change in .iri name and error scenario (save in temp file + rename
- def save(self):
+ def save(self, *args, **kwargs):
+
# create iri file if needed
created = False
try:
@@ -69,8 +69,9 @@
if os.path.exists(iri_file_path):
os.remove(iri_file_path)
raise e
+
# update it
- super(Content, self).save()
+ super(Content, self).save(*args, **kwargs)
def __unicode__(self):
return str(self.id) + ": " + self.iri_id
@@ -112,13 +113,11 @@
def get_description(self, doc=None):
if doc is None:
- doc = xml.dom.minidom.parseString(self.ldt)
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
+ doc = lxml.etree.fromstring(self.ldt)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/project", context=con)
+ res = doc.xpath("/iri/project")
if len(res) > 0:
- return res[0].getAttributeNS(None, u'abstract')
+ return res[0].get(u'abstract')
else:
return None
--- a/web/ldt/ldt_utils/projectserializer.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/projectserializer.py Tue Sep 14 13:38:47 2010 +0200
@@ -1,6 +1,4 @@
-import xml.dom
-import Ft.Xml.Domlette
-import xml.xpath
+import lxml.etree
import uuid
from datetime import datetime
from ldt.ldt_utils.models import Content, Project
@@ -25,10 +23,10 @@
def __parse_ensemble(self, ensemble_node, content):
- ensemble_id = ensemble_node.getAttributeNS(None,u"id")
- ensemble_author = ensemble_node.getAttributeNS(None,u"author")
- ensemble_title = ensemble_node.getAttributeNS(None,u"title")
- ensemble_description = ensemble_node.getAttributeNS(None,u"abstract")
+ ensemble_id = ensemble_node.attrib[u"id"]
+ ensemble_author = ensemble_node.attrib[u"author"]
+ ensemble_title = ensemble_node.attrib[u"title"]
+ ensemble_description = ensemble_node.attrib[u"abstract"]
ensemble_created = datetime.utcnow().isoformat()
ensemble_modified = ensemble_created
@@ -49,16 +47,16 @@
}
- for decoupage_node in ensemble_node.childNodes:
- if decoupage_node.nodeType != xml.dom.Node.ELEMENT_NODE or decoupage_node.tagName != "decoupage" :
+ for decoupage_node in ensemble_node:
+ if decoupage_node.tag != "decoupage" :
continue
- decoupage_id = decoupage_node.getAttributeNS(None, u"id")
- decoupage_creator = decoupage_node.getAttributeNS(None,u"author")
+ decoupage_id = decoupage_node.attrib[ u"id"]
+ decoupage_creator = decoupage_node.attrib[u"author"]
if not decoupage_creator:
decoupage_creator = "IRI"
decoupage_contributor = decoupage_creator
- date_str = decoupage_node.getAttributeNS(None,u"date")
+ date_str = decoupage_node.get(u"date")
decoupage_created = None
if date_str :
for date_format in DATE_FORMATS:
@@ -72,12 +70,12 @@
decoupage_modified = decoupage_created
decoupage_title = ""
- for txtRes in xml.xpath.Evaluate("title/text()", decoupage_node):
- decoupage_title += txtRes.data
+ for txtRes in decoupage_node.xpath("title/text()", smart_strings=False):
+ decoupage_title += txtRes
decoupage_description = ""
- for txtRes in xml.xpath.Evaluate("abstract/text()", decoupage_node):
- decoupage_description += txtRes.data
+ for txtRes in decoupage_node.xpath("abstract/text()", smart_strings=False):
+ decoupage_description += txtRes
@@ -95,53 +93,48 @@
self.annotation_types.append(new_annotation_types)
- res = xml.xpath.Evaluate("elements/element", decoupage_node)
+ res = decoupage_node.xpath("elements/element")
for element_node in res:
- element_id = element_node.getAttributeNS(None,u"id")
- element_begin = element_node.getAttributeNS(None,u"begin")
- element_duration = element_node.getAttributeNS(None,u"dur")
+ element_id = element_node.attrib[u"id"]
+ element_begin = element_node.attrib[u"begin"]
+ element_duration = element_node.attrib[u"dur"]
element_media = content.iri_id
- element_color = element_node.getAttributeNS(None,u"color")
+ element_color = element_node.attrib[u"color"]
element_title = ""
- for txtRes in xml.xpath.Evaluate("title/text()", element_node):
- element_title += txtRes.data
+ for txtRes in element_node.xpath("title/text()", smart_strings=False):
+ element_title += txtRes
element_description = ""
- for txtRes in xml.xpath.Evaluate("abstract/text()", element_node):
- element_description += txtRes.data
+ for txtRes in element_node.xpath("abstract/text()", smart_strings=False):
+ element_description += txtRes
element_audio_src = ""
element_audio_href = ""
- res = xml.xpath.Evaluate("audio", element_node)
+ res = element_node.xpath("audio")
if len(res) > 0:
- element_audio_src = res[0].getAttributeNS(None, u"source")
- ltext = []
- for n in res[0].childNodes:
- if n.nodeType in (dom.Node.TEXT_NODE, dom.Node.CDATA_SECTION_NODE):
- ltext.append(n.data)
- element_audio_href = ''.join(ltext)
-
+ element_audio_src = res[0].get(u"source",u"")
+ element_audio_href = res[0].text
element_tags = []
- tags = element_node.getAttributeNS(None,u"tags")
+ tags = element_node.get(u"tags",u"")
tags_list = map(lambda s:s.strip(),tags.split(","))
#tags
if tags is None or len(tags) == 0:
tags_list = []
- restagnode = xml.xpath.Evaluate("tag/text()", element_node)
+ restagnode = element_node.xpath("tag/text()", smart_strings=False)
for tagnode in restagnode:
- tags_list.append(tagnode.data)
+ tags_list.append(tagnode)
if tags_list is None or len(tags_list) == 0:
tags_list = []
- restagnode = xml.xpath.Evaluate("tags/tag/text()", element_node)
+ restagnode = element_node.xpath("tags/tag/text()", smart_strings=False)
for tagnode in restagnode:
- tags_list.append(tagnode.data)
+ tags_list.append(tagnode)
tag_date = datetime.utcnow().isoformat()
for tag_title in tags_list:
@@ -198,36 +191,28 @@
def __parse_ldt(self):
- doc = xml.dom.minidom.parseString(self.project.ldt.encode("utf-8"))
- self.ldt_doc = Ft.Xml.Domlette.ConvertDocument(doc)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
+ self.ldt_doc = lxml.etree.fromstring(self.project.ldt.encode("utf-8"))
- res = xml.xpath.Evaluate("/iri/medias/media", context=con)
+ res = self.ldt_doc.xpath("/iri/medias/media")
for mediaNode in res:
- iri_id = mediaNode.getAttributeNS(None,u"id")
+ iri_id = mediaNode.attrib[u"id"]
content = Content.objects.get(iri_id=iri_id)
self.__parse_content(content)
- res = xml.xpath.Evaluate("/iri/annotations/content",context=con)
+ res = self.ldt_doc.xpath("/iri/annotations/content")
for content_node in res:
- content_id = content_node.getAttributeNS(None, u"id")
+ content_id = content_node.attrib[u"id"]
content = Content.objects.get(iri_id=content_id)
- for ensemble_node in content_node.childNodes:
- if ensemble_node.nodeType != xml.dom.Node.ELEMENT_NODE or ensemble_node.tagName != "ensemble" :
+ for ensemble_node in content_node:
+ if ensemble_node.tag != "ensemble" :
continue
- self.__parse_ensemble(ensemble_node, content)
-
- #res = xml.xpath.Evaluate("/iri/displays/display",context=con)
-
- #for display_node in res:
-
+ self.__parse_ensemble(ensemble_node, content)
def __parse_content(self, content):
- doc = Ft.Xml.Domlette.ConvertDocument(xml.dom.minidom.parse(content.iri_file_path()))
- con = xml.xpath.Context.Context(doc, 1, 1, None)
+ doc = lxml.etree.parse(content.iri_file_path())
authors = content.authors.all()
@@ -243,16 +228,16 @@
content_author = ""
- res = xml.xpath.Evaluate("/iri/head/meta[@name='author']/@content", context=con)
+ res = doc.xpath("/iri/head/meta[@name='author']/@content")
if len(res) > 0:
- content_author = res[0].value
+ content_author = res[0]
content_date = ""
- res = xml.xpath.Evaluate("/iri/head/meta[@name='date']/@content", context=con)
+ res = doc.xpath("/iri/head/meta[@name='date']/@content")
if len(res) > 0:
- content_date = res[0].value
+ content_date = res[0]
new_media = {
@@ -281,7 +266,7 @@
self.medias.append(new_media)
- res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble",context=con)
+ res = doc.xpath("/iri/body/ensembles/ensemble")
for ensemble_node in res:
self.__parse_ensemble(ensemble_node, content)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/content_list.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,84 @@
+{% extends "ldt/user/user_base.html" %}
+{% load i18n %}
+
+{% block js_declaration %}
+{{block.super}}
+<script type="text/javascript">
+$(document).ready(function(){
+
+ $('.ldt_link').nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ height:662,
+ width:1022,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ titleFromIframe: false
+ });
+
+ $('.ldt_link_create').nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ height:662,
+ width:1022,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ titleFromIframe: false,
+ beforeHideContent: function(elts, settings, callback){
+ try {
+ var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
+ if(res.length > 0)
+ {
+ res.get(0).forceSave();
+ }
+ }
+ catch(err)
+ {
+ // do nothing
+ }
+ callback();
+ }
+ });
+
+});
+</script>
+
+{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" type="text/css" href="{{ BASE_URL }}static/ldt/css/ldt.css" />
+{% endblock %}
+
+{% block breadcrumb %}
+<li></li>
+<li><a href="{% url ldt.userpanel.views.space %}">{% trans "Space" %}</a></li>
+<li>{% trans "Ldt Project" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans "Contents" %}{%endblock %}
+
+{% block iricontent %}
+<div id='contentlist'><a
+ href="#" class="create_content_link">{% trans 'Create new content'%}</a>
+
+<table>
+<caption>{% trans "Content" %}</caption>
+ <thead>
+ <tr>
+ <th width="170">{% trans "title" %}</th>
+ <th width="20">{% trans "create project" %}</th>
+ </tr>
+ </thead>
+ <tbody>
+{% for content in contents %}
+ <tr>
+ <td><a href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link">{{ content.title }}</a></td>
+ <td><a href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create">{% trans "create project" %}</a></td>
+ </tr>
+{% endfor %}
+ </tbody>
+</table>
+</div>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,31 @@
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <script type="text/javascript" src="{{MEDIA_URL}}admin/js/core.js" ></script>
+ <script type="text/javascript" src="{% url jsi18n %}" } ></script>
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.min.js"></script>
+ <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
+ <link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+ <link rel="stylesheet" href="{{MEDIA_URL}}css/ldtform.css" />
+ {{content_form.media }}
+ <script type="text/javascript">
+ window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
+
+ </script>
+</head>
+<body>
+<div id="add_content">
+<div class="title">{% trans "Create content" %}</div>
+<form action="{{create_content_action}}" method="POST">
+{% csrf_token %}
+{{ content_form.as_ul }}
+<input type="hidden" name="form_status" value="{{form_status}}" id="content_form_status" />
+<input type="submit"/>
+</form>
+</div>
+</body>
+</html>
--- a/web/ldt/ldt_utils/templates/ldt/ldt_utils/ldt_list.html Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/ldt_list.html Tue Sep 14 13:38:47 2010 +0200
@@ -66,16 +66,16 @@
</tr>
</thead>
<tbody>
- {% for ldt in ldtProjects %}
+ {% for ldt in projects %}
<tr>
<th><a href="{% url ldt.ldt_utils.views.indexProject ldt.ldt_id %}"
class="ldt_link">{{ ldt.title }}</a></th>
{% ifequal ldt.state 2%}
<td><a href="{% url ldt.ldt_utils.views.unpublish ldt.ldt_id%}"><img
- alt="True" src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" /></td>
+ alt="True" src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" /></a></td>
{% else %}
<td><a href="{% url ldt.ldt_utils.views.publish ldt.ldt_id %}"><img
- alt="False" src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" /></td>
+ alt="False" src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" /></a></td>
{% endifequal %}
</tr>
{% endfor %}
--- a/web/ldt/ldt_utils/urls.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/urls.py Tue Sep 14 13:38:47 2010 +0200
@@ -22,8 +22,15 @@
url(r'^cljson/externalid/(?P<id>.*)$', 'views.project_json_externalid'),
)
+urlpatterns += patterns('',
+ url('^jsi18n','django.views.i18n.javascript_catalog', name='jsi18n'),
+)
+
+
if test_ldt():
urlpatterns += patterns('ldt.ldt_utils',
+ url(r'^space/content/$', 'views.list_content'),
+ url(r'^space/content/create/$', 'views.write_content'),
url(r'^space/ldt/$', 'views.list_ldt'),
url(r'^space/ldt/indexproject/(?P<id>.*)$', 'views.indexProject'),
url(r'^space/ldt/init/(?P<method>.*)/(?P<url>.+)$', 'views.init', name='space_ldt_init'),
@@ -31,7 +38,7 @@
url(r'^space/ldt/create/$', 'views.create_ldt_view'),
url(r'^space/ldt/created_done/$', 'views.created_ldt'),
url(r'^space/ldt/save/$', 'views.save_ldtProject'),
- url(r'^space/ldt/publish/(?P<id>.*)$', 'views.publish'),
- url(r'^space/ldt/unpublish/(?P<id>.*)$', 'views.unpublish'),
+ url(r'^space/ldt/publish/(?P<id>[\w-]*)(?:/(?P<redirect>true|false))?$', 'views.publish'),
+ url(r'^space/ldt/unpublish/(?P<id>[\w-]*)(?:/(?P<redirect>true|false))?$', 'views.unpublish'),
)
--- a/web/ldt/ldt_utils/utils.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/utils.py Tue Sep 14 13:38:47 2010 +0200
@@ -12,6 +12,27 @@
import xml.xpath
import datetime
import Ft
+import lxml.etree
+
+__BOOLEAN_DICT = {
+ 'false':False,
+ 'true':True,
+ '0':False,
+ '1':True,
+ 't': True,
+ 'f':False
+}
+
+def boolean_convert(bool):
+ if bool is None:
+ return False
+ if bool is True or bool is False:
+ return bool
+ key = str(bool).lower()
+ return __BOOLEAN_DICT.get(key, False)
+
+def generate_uuid():
+ return unicode(uuid.uuid1())
class LdtSearch(object):
@@ -315,15 +336,13 @@
def update_iri(filepath, content, username):
# open xml
- doc = xml.dom.minidom.parse(filepath)
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
+ doc = lxml.etree.parse(filepath)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/heqd/meta", context=con)
+ res = doc.xpath("/iri/heqd/meta")
# update meta
for meta_node in res:
- meta_name = meta_node.getAttributeNS(None,"name")
+ meta_name = meta_node.get("name")
content_attr = None
if meta_name == u'id':
content_attr = unicode(content.iri_id)
@@ -336,19 +355,19 @@
elif meta_name == u"date":
content_attr = unicode(datetime.date.today().isoformat())
if content_attr is not None:
- meta_node.setAttributeNS(None, u"content", content_attr)
+ meta_node.set(u"content", content_attr)
- res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
+ res = doc.xpath("/iri/body/medias/media[@id='video']/video")
if len(res) > 0:
video_node = res[0]
- video_node.setAttributeNS(None, u'src', unicode(content.src))
- video_node.setAttributeNS(None, u'dur', unicode(content.duration))
- video_node.setAttributeNS(None, u'id', unicode(content.iri_id))
+ video_node.set(u'src', unicode(content.src))
+ video_node.set(u'dur', unicode(content.duration))
+ video_node.set(u'id', unicode(content.iri_id))
# update video
f = open(filepath, "w")
try:
- xml.dom.ext.Print(doc, stream=f)
+ doc.write(f, encoding="UTF-8", pretty_print=True, xml_declaration=True)
finally:
f.close()
--- a/web/ldt/ldt_utils/views.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/ldt_utils/views.py Tue Sep 14 13:38:47 2010 +0200
@@ -9,7 +9,7 @@
from django.utils import simplejson
from django.utils.html import escape
from fileimport import *
-from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm
+from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm
from ldt.core.models import Owner
from models import *
from utils import *
@@ -133,10 +133,19 @@
ldtProjects = Project.objects.filter(owner=owner)
context={
'contents': contents,
- 'ldtProjects': ldtProjects.reverse(),
+ 'projects': ldtProjects.reverse(),
}
return render_to_response('ldt/ldt_utils/ldt_list.html', context, context_instance=RequestContext(request))
+@login_required
+def list_content(request):
+ contents = Content.objects.all()
+ context={
+ 'contents': contents,
+ }
+ return render_to_response('ldt/ldt_utils/content_list.html', context, context_instance=RequestContext(request))
+
+@login_required
def create_ldt_view(request):
if request.method == "POST" :
form = LdtAddForm(request.POST)
@@ -276,18 +285,26 @@
return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
@login_required
-def publish(request, id):
+def publish(request, id, redirect=True):
ldt = get_object_or_404(Project, ldt_id=id)
ldt.state = 2 #published
ldt.save()
- return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+ redirect = boolean_convert(redirect)
+ if redirect:
+ return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+ else:
+ return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state,'ldt_id': ldt.ldt_id}}, ensure_ascii=False),mimetype='application/json')
@login_required
-def unpublish(request, id):
+def unpublish(request, id, redirect=True):
ldt = get_object_or_404(Project, ldt_id=id)
ldt.state = 1 #edition
ldt.save()
- return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+ redirect = boolean_convert(redirect)
+ if redirect:
+ return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+ else:
+ return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state,'ldt_id': ldt.ldt_id}}, ensure_ascii=False),mimetype='application/json')
def index(request, url):
@@ -347,3 +364,35 @@
form = CopyProjectForm
return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
+
+def write_content_base(request):
+
+ form_status= 'none'
+ if request.method =="POST":
+ form = ContentForm(request.POST)
+ if form.is_valid():
+ content, created = Content.objects.get_or_create(iri_id = form.cleaned_data['iri_id'], defaults = form.cleaned_data)
+ if not created:
+ form = ContentForm(request.POST, instance=content)
+ form.save()
+ else:
+ content.save()
+ form_status = 'saved'
+ form = ContentForm(instance=content)
+ else:
+ form_status = 'error'
+ else:
+ form_status = 'empty'
+ form = ContentForm()
+
+ return form, form_status
+
+
+def write_content(request):
+
+ content_form, form_status = write_content_base(request)
+
+ return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'form_status': form_status,'create_content_action': reverse(write_content)}, context_instance=RequestContext(request))
+
+
+
\ No newline at end of file
--- a/web/ldt/locale/en/LC_MESSAGES/django.po Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/locale/en/LC_MESSAGES/django.po Tue Sep 14 13:38:47 2010 +0200
@@ -7,23 +7,82 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-09 08:48-0600\n"
+"POT-Creation-Date: 2010-09-12 23:04+0200\n"
"PO-Revision-Date: 2010-02-17 03:53+0100\n"
"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ldt/models.py:43
+#: forms/widgets.py:17
+msgid "Date"
+msgstr ""
+
+#: forms/widgets.py:17
+msgid "Time"
+msgstr ""
+
+#: ldt_utils/models.py:22
+msgid "content.iri_id"
+msgstr ""
+
+#: ldt_utils/models.py:23
+msgid "content.iriurl"
+msgstr ""
+
+#: ldt_utils/models.py:24
+msgid "content.src"
+msgstr ""
+
+#: ldt_utils/models.py:25
+msgid "content.videopath"
+msgstr ""
+
+#: ldt_utils/models.py:26
+msgid "content.creation_date"
+msgstr ""
+
+#: ldt_utils/models.py:27
+msgid "content.update_date"
+msgstr ""
+
+#: ldt_utils/models.py:28
+msgid "content.title"
+msgstr ""
+
+#: ldt_utils/models.py:29
+#, fuzzy
+msgid "content.description"
+msgstr "Login"
+
+#: ldt_utils/models.py:30
+msgid "content.external_id"
+msgstr ""
+
+#: ldt_utils/models.py:31
+msgid "content.authors"
+msgstr ""
+
+#: ldt_utils/models.py:32
+#, fuzzy
+msgid "content.duration"
+msgstr "Documentation"
+
+#: ldt_utils/models.py:33
+msgid "content.content_creation_date"
+msgstr ""
+
+#: ldt_utils/models.py:106
msgid "created by"
msgstr "created by"
-#: ldt/models.py:44
+#: ldt_utils/models.py:107
msgid "changed by"
msgstr "changed by"
-#: ldt/templates/admin/ldt/app_action.html:6
+#: ldt_utils/templates/admin/ldt_utils/app_action.html:4
#: templates/admin/cms_change_list.html:7
#: templates/admin/page_app_index.html:8
#: templates/admin/page_change_form.html:17
@@ -32,57 +91,83 @@
msgid "Home"
msgstr "Home"
-#: ldt/templates/iriuser/ldt/copy_ldt.html:12
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:55
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:51
+#: templates/admin/page_base.html:19
+#: user/templates/ldt/user/login_form.html:33
+#: user/templates/ldt/user/space.html:6 user/templates/ldt/user/space.html:9
+msgid "Space"
+msgstr "Space"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:56
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:52
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:55
+msgid "Ldt Project"
+msgstr "Ldt Project"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:59
+msgid "Contents"
+msgstr ""
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:63
+#, fuzzy
+msgid "Create new content"
+msgstr "Create new project"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:66
+msgid "Content"
+msgstr ""
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:69
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:64
+msgid "title"
+msgstr "Title"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:70
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:77
+#, fuzzy
+msgid "create project"
+msgstr "Create new project"
+
+#: ldt_utils/templates/ldt/ldt_utils/copy_ldt.html:11
msgid "Copy your project"
msgstr "Copy your project"
-#: ldt/templates/iriuser/ldt/copy_ldt.html:15
-#: ldt/templates/iriuser/ldt/create_ldt.html:15
+#: ldt_utils/templates/ldt/ldt_utils/copy_ldt.html:14
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:14
msgid "Title"
msgstr "Title"
-#: ldt/templates/iriuser/ldt/copy_ldt.html:18
+#: ldt_utils/templates/ldt/ldt_utils/copy_ldt.html:16
msgid "Copy"
msgstr "Copy"
-#: ldt/templates/iriuser/ldt/create_ldt.html:12
+#: ldt_utils/templates/ldt/ldt_utils/create_content.html:22
+#, fuzzy
+msgid "Create content"
+msgstr "create account"
+
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:11
msgid "Create your project"
msgstr "Create your project"
-#: ldt/templates/iriuser/ldt/create_ldt.html:18
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:16
msgid "List of contents"
msgstr "List of contents"
-#: ldt/templates/iriuser/ldt/create_ldt.html:25
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:23
msgid "Create"
msgstr "Create"
-#: ldt/templates/iriuser/ldt/ldt_list.html:50
-#: templates/admin/page_base.html:19
-#: user/templates/iriuser/user/login_form.html:33
-#: user/templates/iriuser/user/space.html:6
-#: user/templates/iriuser/user/space.html:9
-msgid "Space"
-msgstr "Space"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:51
-#: ldt/templates/iriuser/ldt/ldt_list.html:53
-msgid "Ldt Project"
-msgstr "Ldt Project"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:57
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:59
msgid "Create new project"
msgstr "Create new project"
-#: ldt/templates/iriuser/ldt/ldt_list.html:59
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:61
msgid "Project"
msgstr "Project"
-#: ldt/templates/iriuser/ldt/ldt_list.html:62
-msgid "title"
-msgstr "Title"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:63
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:65
msgid " published"
msgstr " published"
@@ -277,8 +362,8 @@
msgstr "Forget password?"
#: templates/admin/page_login.html:32
-#: user/templates/iriuser/user/login_form.html:37
-#: user/templates/iriuser/user/login_form.html:45
+#: user/templates/ldt/user/login_form.html:37
+#: user/templates/ldt/user/login_form.html:45
#: user/templates/registration/login.html:14
#: user/templates/registration/password_reset_complete.html:14
msgid "Log in"
@@ -293,7 +378,7 @@
msgstr "Change password"
#: templates/cms/admin/cms/page/change_form.html:11
-#: user/templates/iriuser/user/login_form.html:34
+#: user/templates/ldt/user/login_form.html:34
msgid "Log out"
msgstr "Log out"
@@ -317,7 +402,7 @@
msgid "Permissions"
msgstr "Permissions"
-#: user/admin.py:27 user/templates/iriuser/user/login_form.html:61
+#: user/admin.py:27 user/templates/ldt/user/login_form.html:61
msgid "Password"
msgstr "Password"
@@ -341,20 +426,20 @@
msgid "Sorry, that's not a valid username or password."
msgstr "Sorry, that's not a valid username or password."
-#: user/templates/iriuser/user/change_email.html:6
-#: user/templates/iriuser/user/change_email_done.html:6
-#: user/templates/iriuser/user/login_form.html:32
+#: user/templates/ldt/user/change_email.html:6
+#: user/templates/ldt/user/change_email_done.html:6
+#: user/templates/ldt/user/login_form.html:32
#: user/templates/registration/password_change_done.html:7
#: user/templates/registration/password_change_form.html:13
msgid "Profiles"
msgstr "Profiles"
-#: user/templates/iriuser/user/change_email.html:7
-#: user/templates/iriuser/user/change_email.html:10
+#: user/templates/ldt/user/change_email.html:7
+#: user/templates/ldt/user/change_email.html:10
msgid "Modification de l'adresse émail"
msgstr "E-mail change"
-#: user/templates/iriuser/user/change_email.html:26
+#: user/templates/ldt/user/change_email.html:26
msgid ""
"Please enter your new e-mail twice so we can verify you typed it in "
"correctly."
@@ -362,79 +447,79 @@
"Please enter your new e-mail twice so we can verify you typed it in "
"correctly."
-#: user/templates/iriuser/user/change_email.html:32
+#: user/templates/ldt/user/change_email.html:32
msgid "email"
msgstr "email"
-#: user/templates/iriuser/user/change_email.html:41
+#: user/templates/ldt/user/change_email.html:41
msgid "Confirmation de l'adresse émail"
msgstr "E-mail confirmation"
-#: user/templates/iriuser/user/change_email.html:48
+#: user/templates/ldt/user/change_email.html:48
msgid "change my e-mail"
msgstr "Change my e-mail"
-#: user/templates/iriuser/user/change_email_done.html:7
-#: user/templates/iriuser/user/change_email_done.html:10
+#: user/templates/ldt/user/change_email_done.html:7
+#: user/templates/ldt/user/change_email_done.html:10
msgid "email change"
msgstr "email change"
-#: user/templates/iriuser/user/change_email_done.html:12
+#: user/templates/ldt/user/change_email_done.html:12
msgid "email changed"
msgstr "changed by"
-#: user/templates/iriuser/user/change_email_done.html:13
+#: user/templates/ldt/user/change_email_done.html:13
msgid "back to profile"
msgstr "back to profile"
-#: user/templates/iriuser/user/home.html:9
+#: user/templates/ldt/user/home.html:9
msgid "Se connecter"
msgstr "Login"
-#: user/templates/iriuser/user/home.html:10
+#: user/templates/ldt/user/home.html:10
msgid "Créer un compte"
msgstr "Create an account"
-#: user/templates/iriuser/user/home.html:11
+#: user/templates/ldt/user/home.html:11
msgid "récupérer mot de passe"
msgstr "Forget password?"
-#: user/templates/iriuser/user/login_form.html:50
+#: user/templates/ldt/user/login_form.html:50
msgid "create account"
msgstr "create account"
-#: user/templates/iriuser/user/login_form.html:54
+#: user/templates/ldt/user/login_form.html:54
msgid "Pseudo"
msgstr "Username"
-#: user/templates/iriuser/user/login_form.html:57
-#: user/templates/iriuser/user/login_form.html:64
+#: user/templates/ldt/user/login_form.html:57
+#: user/templates/ldt/user/login_form.html:64
msgid "this field is compulsory"
msgstr "this field is compulsory"
-#: user/templates/iriuser/user/login_form.html:68
+#: user/templates/ldt/user/login_form.html:68
msgid "reset password"
msgstr "reset password"
-#: user/templates/iriuser/user/login_form.html:71
+#: user/templates/ldt/user/login_form.html:71
msgid "Connection"
msgstr "Login"
-#: user/templates/iriuser/user/profile.html:6
+#: user/templates/ldt/user/profile.html:6
#: user/templates/registration/password_change_form.html:14
#: user/templates/registration/password_change_form.html:17
msgid "Password change"
msgstr "Password change"
-#: user/templates/iriuser/user/profile.html:7
+#: user/templates/ldt/user/profile.html:7
msgid "Mail change"
msgstr "Mail change"
-#: user/templates/iriuser/user/space.html:13
+#: user/templates/ldt/user/space.html:13
msgid "Page"
msgstr "Pages"
-#: user/templates/iriuser/user/space.html:16
+#: user/templates/ldt/user/space.html:16
msgid "Projets Lignes de temps"
msgstr "Lignes de temps projects"
--- a/web/ldt/locale/fr/LC_MESSAGES/django.po Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/locale/fr/LC_MESSAGES/django.po Tue Sep 14 13:38:47 2010 +0200
@@ -7,23 +7,82 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-09 08:48-0600\n"
+"POT-Creation-Date: 2010-09-12 23:04+0200\n"
"PO-Revision-Date: 2010-03-09 15:52+0100\n"
"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ldt/models.py:43
+#: forms/widgets.py:17
+msgid "Date"
+msgstr ""
+
+#: forms/widgets.py:17
+msgid "Time"
+msgstr ""
+
+#: ldt_utils/models.py:22
+msgid "content.iri_id"
+msgstr ""
+
+#: ldt_utils/models.py:23
+msgid "content.iriurl"
+msgstr ""
+
+#: ldt_utils/models.py:24
+msgid "content.src"
+msgstr ""
+
+#: ldt_utils/models.py:25
+msgid "content.videopath"
+msgstr ""
+
+#: ldt_utils/models.py:26
+msgid "content.creation_date"
+msgstr ""
+
+#: ldt_utils/models.py:27
+msgid "content.update_date"
+msgstr ""
+
+#: ldt_utils/models.py:28
+msgid "content.title"
+msgstr ""
+
+#: ldt_utils/models.py:29
+#, fuzzy
+msgid "content.description"
+msgstr "Connexion"
+
+#: ldt_utils/models.py:30
+msgid "content.external_id"
+msgstr ""
+
+#: ldt_utils/models.py:31
+msgid "content.authors"
+msgstr ""
+
+#: ldt_utils/models.py:32
+#, fuzzy
+msgid "content.duration"
+msgstr "Documentation"
+
+#: ldt_utils/models.py:33
+msgid "content.content_creation_date"
+msgstr ""
+
+#: ldt_utils/models.py:106
msgid "created by"
msgstr "créé par"
-#: ldt/models.py:44
+#: ldt_utils/models.py:107
msgid "changed by"
msgstr "modifié par"
-#: ldt/templates/admin/ldt/app_action.html:6
+#: ldt_utils/templates/admin/ldt_utils/app_action.html:4
#: templates/admin/cms_change_list.html:7
#: templates/admin/page_app_index.html:8
#: templates/admin/page_change_form.html:17
@@ -32,57 +91,83 @@
msgid "Home"
msgstr "Accueil"
-#: ldt/templates/iriuser/ldt/copy_ldt.html:12
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:55
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:51
+#: templates/admin/page_base.html:19
+#: user/templates/ldt/user/login_form.html:33
+#: user/templates/ldt/user/space.html:6 user/templates/ldt/user/space.html:9
+msgid "Space"
+msgstr "Esp. perso"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:56
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:52
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:55
+msgid "Ldt Project"
+msgstr "Projet lignes de temps"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:59
+msgid "Contents"
+msgstr ""
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:63
+#, fuzzy
+msgid "Create new content"
+msgstr "Créer un nouveau projet Ligne de Temps"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:66
+msgid "Content"
+msgstr ""
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:69
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:64
+msgid "title"
+msgstr "Titre"
+
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:70
+#: ldt_utils/templates/ldt/ldt_utils/content_list.html:77
+#, fuzzy
+msgid "create project"
+msgstr "Créer un nouveau projet Ligne de Temps"
+
+#: ldt_utils/templates/ldt/ldt_utils/copy_ldt.html:11
msgid "Copy your project"
msgstr "Copier votre projet"
-#: ldt/templates/iriuser/ldt/copy_ldt.html:15
-#: ldt/templates/iriuser/ldt/create_ldt.html:15
+#: ldt_utils/templates/ldt/ldt_utils/copy_ldt.html:14
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:14
msgid "Title"
msgstr "Titre"
-#: ldt/templates/iriuser/ldt/copy_ldt.html:18
+#: ldt_utils/templates/ldt/ldt_utils/copy_ldt.html:16
msgid "Copy"
msgstr "Copier"
-#: ldt/templates/iriuser/ldt/create_ldt.html:12
+#: ldt_utils/templates/ldt/ldt_utils/create_content.html:22
+#, fuzzy
+msgid "Create content"
+msgstr "Créer un compte"
+
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:11
msgid "Create your project"
msgstr "Créer votre projet Lignes de Temps"
-#: ldt/templates/iriuser/ldt/create_ldt.html:18
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:16
msgid "List of contents"
msgstr "Liste de contenus"
-#: ldt/templates/iriuser/ldt/create_ldt.html:25
+#: ldt_utils/templates/ldt/ldt_utils/create_ldt.html:23
msgid "Create"
msgstr "Créer"
-#: ldt/templates/iriuser/ldt/ldt_list.html:50
-#: templates/admin/page_base.html:19
-#: user/templates/iriuser/user/login_form.html:33
-#: user/templates/iriuser/user/space.html:6
-#: user/templates/iriuser/user/space.html:9
-msgid "Space"
-msgstr "Esp. perso"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:51
-#: ldt/templates/iriuser/ldt/ldt_list.html:53
-msgid "Ldt Project"
-msgstr "Projet lignes de temps"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:57
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:59
msgid "Create new project"
msgstr "Créer un nouveau projet Ligne de Temps"
-#: ldt/templates/iriuser/ldt/ldt_list.html:59
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:61
msgid "Project"
msgstr "Projet"
-#: ldt/templates/iriuser/ldt/ldt_list.html:62
-msgid "title"
-msgstr "Titre"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:63
+#: ldt_utils/templates/ldt/ldt_utils/ldt_list.html:65
msgid " published"
msgstr "Publié"
@@ -154,8 +239,12 @@
#: templates/admin/cms_change_form.html:142
#, python-format
-msgid "This page must be moderated at level %(moderation_level)s, post a message for moderator."
-msgstr "Le niveau nécessaire pour modérer cette page est le niveau %(moderation_level)s, laisser un message pour le modérateur"
+msgid ""
+"This page must be moderated at level %(moderation_level)s, post a message "
+"for moderator."
+msgstr ""
+"Le niveau nécessaire pour modérer cette page est le niveau "
+"%(moderation_level)s, laisser un message pour le modérateur"
#: templates/admin/cms_change_form.html:144
msgid "Request approvemet"
@@ -202,57 +291,47 @@
msgid "Filter"
msgstr "Filtre"
-#: templates/admin/index.html:18
-#: templates/admin/page_index.html:18
+#: templates/admin/index.html:18 templates/admin/page_index.html:18
#, python-format
msgid "Models available in the %(name)s application."
msgstr "Le modèle disponible dans l'application %(name)s."
-#: templates/admin/index.html:19
-#: templates/admin/page_app_index.html:10
+#: templates/admin/index.html:19 templates/admin/page_app_index.html:10
#: templates/admin/page_index.html:19
#, python-format
msgid "%(name)s"
msgstr "%(name)s"
-#: templates/admin/index.html:29
-#: templates/admin/page_change_form.html:20
+#: templates/admin/index.html:29 templates/admin/page_change_form.html:20
#: templates/admin/page_index.html:29
msgid "Add"
msgstr "Ajouter"
-#: templates/admin/index.html:35
-#: templates/admin/page_index.html:35
+#: templates/admin/index.html:35 templates/admin/page_index.html:35
msgid "Change"
msgstr "modifié par"
-#: templates/admin/index.html:64
-#: templates/admin/page_index.html:45
+#: templates/admin/index.html:64 templates/admin/page_index.html:45
msgid "You don't have permission to edit anything."
msgstr "Vous n'aver pas l'autorisation d'éditer quoi que ce soit."
-#: templates/admin/index.html:72
-#: templates/admin/page_index.html:53
+#: templates/admin/index.html:72 templates/admin/page_index.html:53
msgid "Recent Actions"
msgstr "Actions récentes"
-#: templates/admin/index.html:73
-#: templates/admin/page_index.html:54
+#: templates/admin/index.html:73 templates/admin/page_index.html:54
msgid "My Actions"
msgstr "Mes actions"
-#: templates/admin/index.html:77
-#: templates/admin/page_index.html:58
+#: templates/admin/index.html:77 templates/admin/page_index.html:58
msgid "None available"
msgstr "Aucune disponible"
-#: templates/admin/index.html:91
-#: templates/admin/page_index.html:72
+#: templates/admin/index.html:91 templates/admin/page_index.html:72
msgid "Unknown content"
msgstr "Contenu inconnu"
-#: templates/admin/page_base.html:20
-#: templates/admin/page_index.html:11
+#: templates/admin/page_base.html:20 templates/admin/page_index.html:11
msgid "Pages"
msgstr "Pages"
@@ -283,8 +362,8 @@
msgstr "Oubliez le mot de passe?"
#: templates/admin/page_login.html:32
-#: user/templates/iriuser/user/login_form.html:37
-#: user/templates/iriuser/user/login_form.html:45
+#: user/templates/ldt/user/login_form.html:37
+#: user/templates/ldt/user/login_form.html:45
#: user/templates/registration/login.html:14
#: user/templates/registration/password_reset_complete.html:14
msgid "Log in"
@@ -299,7 +378,7 @@
msgstr "Modifier le mot de passe"
#: templates/cms/admin/cms/page/change_form.html:11
-#: user/templates/iriuser/user/login_form.html:34
+#: user/templates/ldt/user/login_form.html:34
msgid "Log out"
msgstr "Déconnexion"
@@ -323,8 +402,7 @@
msgid "Permissions"
msgstr "Permissions"
-#: user/admin.py:27
-#: user/templates/iriuser/user/login_form.html:61
+#: user/admin.py:27 user/templates/ldt/user/login_form.html:61
msgid "Password"
msgstr "Mot de passe"
@@ -336,8 +414,7 @@
msgid "New password confirmation"
msgstr "Confirmation du nouveau mot de passe"
-#: user/forms.py:78
-#: user/forms.py:79
+#: user/forms.py:78 user/forms.py:79
msgid "E-mail"
msgstr "E-mail"
@@ -345,101 +422,104 @@
msgid "The two emails didn't match."
msgstr "les deux emails ne correspondent pas"
-#: user/views.py:45
-#: user/templates/registration/login.html:17
+#: user/views.py:45 user/templates/registration/login.html:17
msgid "Sorry, that's not a valid username or password."
msgstr "Saisissez un nom d'utilisateur et un mot de passe valide."
-#: user/templates/iriuser/user/change_email.html:6
-#: user/templates/iriuser/user/change_email_done.html:6
-#: user/templates/iriuser/user/login_form.html:32
+#: user/templates/ldt/user/change_email.html:6
+#: user/templates/ldt/user/change_email_done.html:6
+#: user/templates/ldt/user/login_form.html:32
#: user/templates/registration/password_change_done.html:7
#: user/templates/registration/password_change_form.html:13
msgid "Profiles"
msgstr "Mon profil"
-#: user/templates/iriuser/user/change_email.html:7
-#: user/templates/iriuser/user/change_email.html:10
+#: user/templates/ldt/user/change_email.html:7
+#: user/templates/ldt/user/change_email.html:10
msgid "Modification de l'adresse émail"
msgstr "Modification de l'adresse email"
-#: user/templates/iriuser/user/change_email.html:26
-msgid "Please enter your new e-mail twice so we can verify you typed it in correctly."
-msgstr "Saisissez deux fois votre nouvelle adresse émail afin de vérifier qu'il est correctment"
+#: user/templates/ldt/user/change_email.html:26
+msgid ""
+"Please enter your new e-mail twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Saisissez deux fois votre nouvelle adresse émail afin de vérifier qu'il est "
+"correctment"
-#: user/templates/iriuser/user/change_email.html:32
+#: user/templates/ldt/user/change_email.html:32
msgid "email"
msgstr "adresse émail"
-#: user/templates/iriuser/user/change_email.html:41
+#: user/templates/ldt/user/change_email.html:41
msgid "Confirmation de l'adresse émail"
msgstr "Confirmation de l'adresse email"
-#: user/templates/iriuser/user/change_email.html:48
+#: user/templates/ldt/user/change_email.html:48
msgid "change my e-mail"
msgstr "Changer l'adresse émail"
-#: user/templates/iriuser/user/change_email_done.html:7
-#: user/templates/iriuser/user/change_email_done.html:10
+#: user/templates/ldt/user/change_email_done.html:7
+#: user/templates/ldt/user/change_email_done.html:10
msgid "email change"
msgstr "Modification de l'adresse émail"
-#: user/templates/iriuser/user/change_email_done.html:12
+#: user/templates/ldt/user/change_email_done.html:12
msgid "email changed"
msgstr "email modifié"
-#: user/templates/iriuser/user/change_email_done.html:13
+#: user/templates/ldt/user/change_email_done.html:13
msgid "back to profile"
msgstr "Retourner à mon profil"
-#: user/templates/iriuser/user/home.html:9
+#: user/templates/ldt/user/home.html:9
msgid "Se connecter"
msgstr "Se connecter"
-#: user/templates/iriuser/user/home.html:10
+#: user/templates/ldt/user/home.html:10
msgid "Créer un compte"
msgstr "Créere un compte"
-#: user/templates/iriuser/user/home.html:11
+#: user/templates/ldt/user/home.html:11
msgid "récupérer mot de passe"
msgstr "Récupérer le mot de passe"
-#: user/templates/iriuser/user/login_form.html:50
+#: user/templates/ldt/user/login_form.html:50
msgid "create account"
msgstr "Créer un compte"
-#: user/templates/iriuser/user/login_form.html:54
+#: user/templates/ldt/user/login_form.html:54
msgid "Pseudo"
msgstr "Pseudo"
-#: user/templates/iriuser/user/login_form.html:57
-#: user/templates/iriuser/user/login_form.html:64
+#: user/templates/ldt/user/login_form.html:57
+#: user/templates/ldt/user/login_form.html:64
msgid "this field is compulsory"
msgstr "Ce champs est obligatoire"
-#: user/templates/iriuser/user/login_form.html:68
+#: user/templates/ldt/user/login_form.html:68
msgid "reset password"
msgstr "Réinitialiser le mot de passe"
-#: user/templates/iriuser/user/login_form.html:71
+#: user/templates/ldt/user/login_form.html:71
msgid "Connection"
msgstr "Connexion"
-#: user/templates/iriuser/user/profile.html:6
+#: user/templates/ldt/user/profile.html:6
#: user/templates/registration/password_change_form.html:14
#: user/templates/registration/password_change_form.html:17
msgid "Password change"
msgstr "Modification du mot de passe"
-#: user/templates/iriuser/user/profile.html:7
+#: user/templates/ldt/user/profile.html:7
msgid "Mail change"
msgstr "Modification de l'adresse émail"
-#: user/templates/iriuser/user/space.html:13
+#: user/templates/ldt/user/space.html:13
msgid "Page"
msgstr "Pages"
-#: user/templates/iriuser/user/space.html:16
+#: user/templates/ldt/user/space.html:16
msgid "Projets Lignes de temps"
msgstr "Projets Lignes de temps"
@@ -495,8 +575,12 @@
msgstr "Retourner à la page de mon profil"
#: user/templates/registration/password_change_form.html:20
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Par sécurité, veuillez enter votre ancien mot de passe puis le nouveau a deux reprise afin de savoir si vous l'avez taper correctement "
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Par sécurité, veuillez enter votre ancien mot de passe puis le nouveau a "
+"deux reprise afin de savoir si vous l'avez taper correctement "
#: user/templates/registration/password_change_form.html:26
msgid "Old password:"
@@ -536,28 +620,42 @@
msgstr "Votre mot de passe a été fixé. vous pouvez vous connecter maintenant."
#: user/templates/registration/password_reset_confirm.html:15
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "veuillez enter votre nouveau mot de pass deux fois afin de le vérifier."
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"veuillez enter votre nouveau mot de pass deux fois afin de le vérifier."
#: user/templates/registration/password_reset_confirm.html:27
msgid "Password reset unsuccessful"
msgstr "Reinitialisation du mot de pass a échoué"
#: user/templates/registration/password_reset_confirm.html:29
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "Le lien de réinitialisation du mot de passe n'est pas valide, certainement car il a déjà été utilisé. veuiller demander une nouvelle réinitialisation."
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used. Please request a new password reset."
+msgstr ""
+"Le lien de réinitialisation du mot de passe n'est pas valide, certainement "
+"car il a déjà été utilisé. veuiller demander une nouvelle réinitialisation."
#: user/templates/registration/password_reset_done.html:8
msgid "Password reset successful"
msgstr "Réinitialisation du mot de passe réussie"
#: user/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Nous vous avons envoyer les instructions de reinitialisation de votre mot de passe à l'adresse email que vous nous avez fournie. vous devriez les recevoir bientôt."
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Nous vous avons envoyer les instructions de reinitialisation de votre mot de "
+"passe à l'adresse email que vous nous avez fournie. vous devriez les "
+"recevoir bientôt."
#: user/templates/registration/password_reset_email.html:2
msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Vous recevez ce mail car vous avez damender la réinitialisation du mot de passe"
+msgstr ""
+"Vous recevez ce mail car vous avez damender la réinitialisation du mot de "
+"passe"
#: user/templates/registration/password_reset_email.html:3
#, python-format
@@ -566,7 +664,8 @@
#: user/templates/registration/password_reset_email.html:5
msgid "Please go to the following page and choose a new password:"
-msgstr "veuillez aller à la page suivante et choisissez un nouveau mot de passe :"
+msgstr ""
+"veuillez aller à la page suivante et choisissez un nouveau mot de passe :"
#: user/templates/registration/password_reset_email.html:9
msgid "Your username, in case you've forgotten:"
@@ -582,8 +681,12 @@
msgstr "L'équipe du site %(site_name)s"
#: user/templates/registration/password_reset_form.html:22
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Mot de passe oublié ? Entrez votre adresse email ci-dessous pour recevoir les instructions pour en entrer un nouveau."
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Mot de passe oublié ? Entrez votre adresse email ci-dessous pour recevoir "
+"les instructions pour en entrer un nouveau."
#: user/templates/registration/password_reset_form.html:27
msgid "Adresse émail"
@@ -599,8 +702,12 @@
msgstr "Activer le compte"
#: user/templates/registration/registration_active.html:9
-msgid "Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel."
-msgstr "Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel."
+msgid ""
+"Vous avez bien activé votre compte, vous pouvez accedez à votre espace "
+"personnel."
+msgstr ""
+"Vous avez bien activé votre compte, vous pouvez accedez à votre espace "
+"personnel."
#: user/templates/registration/registration_active.html:10
msgid "retourner à la page de connexion"
@@ -612,8 +719,12 @@
msgstr "Création d'un compte"
#: user/templates/registration/registration_complete.html:10
-msgid "We've e-mailed you instructions for activate your account to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Nous vous avons envoyé par courriel les instructions pour activer le compte à l'adresse que vous avez indiquée. Vous devriez le recevoir rapidement."
+msgid ""
+"We've e-mailed you instructions for activate your account to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Nous vous avons envoyé par courriel les instructions pour activer le compte "
+"à l'adresse que vous avez indiquée. Vous devriez le recevoir rapidement."
#~ msgid "Password (Verification)"
#~ msgstr "Mot de passe (Vérification)"
--- a/web/ldt/media/css/dashboard.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/media/css/dashboard.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,4 @@
+@charset "UTF-8";
#content-main-app-ldt-utils {
float: left;
--- a/web/ldt/media/css/ldt.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/media/css/ldt.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#addldtform
{
font-size: 16px;
--- a/web/ldt/media/css/style.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/media/css/style.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
color:#0063DC;
margin-right:4px;
--- a/web/ldt/media/css/style_base.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/media/css/style_base.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
body
{ font-family: Arial, Helvetica, sans serif;
padding: 0px;
--- a/web/ldt/settings.py Tue Sep 14 13:15:28 2010 +0200
+++ b/web/ldt/settings.py Tue Sep 14 13:38:47 2010 +0200
@@ -13,6 +13,7 @@
#SERVER_EMAIL = "admin@domain.com"
WEB_URL = getattr(settings, 'WEB_URL', '')
+BASE_URL = getattr(settings, 'BASE_URL', '')
MEDIA_URL = getattr(settings, 'MEDIA_URL', '')
MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', '')
SITE_ID = getattr(settings, 'SITE_ID', 1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templatetags/navigation.py Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,19 @@
+from django.template import Library
+import re
+
+register = Library()
+
+
+@register.simple_tag
+def active(request, css_class, pattern, exact=True):
+ """
+ a simple tag to test the current path and return a given css class.
+ Useful for navigation tabs
+ """
+ if pattern:
+ if exact:
+ pattern = "^%s$" % pattern.lstrip("^").rstrip("$")
+
+ if re.search(pattern, request.path):
+ return css_class
+ return ''
\ No newline at end of file
--- a/web/static/css/LdtPlayer.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/static/css/LdtPlayer.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,105 +1,105 @@
- #demo-frame > div.demo { padding: 5px !important; };
-
- button.ui-button-icon-only {
- height:1.5em;
- width:1.5em;
- }
-
- #Ldt-controler {
- font-size: 62.5%;
- font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
- }
+@charset "UTF-8";
- .Ldt-iri-chapter{
- padding-top:10px;
- padding-bottom:5px;
- border-left:solid 1px #000;
- border-right:solid 1px #000;
- }
-
- .tooltip {
- display:none;
- background:transparent url(../css/jq-css/imgs/white_arrow_mini.png);
- font-size:12px;
- height:55px;
- width:180px;
- padding:10px;
- padding-left:15px;
- padding-top:15px;
- padding-right:15px;
- color:#000;
- font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
- }
+#demo-frame > div.demo { padding: 5px !important; };
- #Ldt-Annotations{
- padding-left:5px;
- width:470px;
- float:left;
- font-size: 62.5%;
- }
- #Ldt-SaTitle{
- padding-top:2px;
- padding-bottom:5px;
- font-size:18px;
- color:#FFF;
- height:22p;
- }
- #Ldt-SaDescription{
- font-size:12px;
- color:#FFF;
- }
- #Ldt-ShowAnnotation{
- position:absolute;
- z-index: 999;
- padding:5px;
- background:url(../css/jq-css/imgs/transBlack.png);
- font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
- }
-
- #Ldt-PlaceHolder{
- position:absolue;
- float:none;
- }
- .Ldt-Control1{
- width:70px;
- float:left;
- }
- .Ldt-Control2{
- padding-left:10px;
- width:70px;
- float:left;
- }
- .Ldt-cleaner {
- clear:both;
- }
- .share {
- background:url('../css/jq-css/imgs/widget20.png') no-repeat scroll 0 0 transparent ;
- display:block;
- height:16px;
- line-height:16px !important;
- overflow:hidden;
- width:16px;
- float:left;
- cursor:pointer;
- margin:2px;
- }
- .shareFacebook{
- background-position:0 -704px;
- }
- .shareMySpace{
- background-position:0 -736px;
- }
- .shareTwitter{
- background-position:0 -1072px;
- }
- .shareGoogle{
- background-position:0 -752px;
- }
- .shareDelicious{
- background-position:0 -672px;
- }
- .shareJamesPot{
- background-position:0 -1808px;
- }
-
-
\ No newline at end of file
+button.ui-button-icon-only {
+ height:1.5em;
+ width:1.5em;
+}
+
+#Ldt-controler {
+ font-size: 62.5%;
+ font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
+}
+
+.Ldt-iri-chapter{
+ padding-top:10px;
+ padding-bottom:5px;
+ border-left:solid 1px #000;
+ border-right:solid 1px #000;
+}
+
+.tooltip {
+ display:none;
+ background:transparent url(../css/jq-css/imgs/white_arrow_mini.png);
+ font-size:12px;
+ height:55px;
+ width:180px;
+ padding:10px;
+ padding-left:15px;
+ padding-top:15px;
+ padding-right:15px;
+ color:#000;
+ font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
+}
+
+#Ldt-Annotations{
+ padding-left:5px;
+ width:470px;
+ float:left;
+ font-size: 62.5%;
+}
+#Ldt-SaTitle{
+ padding-top:2px;
+ padding-bottom:5px;
+ font-size:18px;
+ color:#FFF;
+ height:22p;
+}
+#Ldt-SaDescription{
+ font-size:12px;
+ color:#FFF;
+}
+#Ldt-ShowAnnotation{
+ position:absolute;
+ z-index: 999;
+ padding:5px;
+ background:url(../css/jq-css/imgs/transBlack.png);
+ font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
+}
+
+#Ldt-PlaceHolder{
+ position:absolue;
+ float:none;
+}
+.Ldt-Control1{
+ width:70px;
+ float:left;
+}
+.Ldt-Control2{
+ padding-left:10px;
+ width:70px;
+ float:left;
+}
+.Ldt-cleaner {
+ clear:both;
+}
+.share {
+ background:url('../css/jq-css/imgs/widget20.png') no-repeat scroll 0 0 transparent ;
+ display:block;
+ height:16px;
+ line-height:16px !important;
+ overflow:hidden;
+ width:16px;
+ float:left;
+ cursor:pointer;
+ margin:2px;
+}
+.shareFacebook{
+ background-position:0 -704px;
+}
+.shareMySpace{
+ background-position:0 -736px;
+}
+.shareTwitter{
+ background-position:0 -1072px;
+}
+.shareGoogle{
+ background-position:0 -752px;
+}
+.shareDelicious{
+ background-position:0 -672px;
+}
+.shareJamesPot{
+ background-position:0 -1808px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/css/border-radius.htc Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,143 @@
+--Do not remove this if you are using--
+Original Author: Remiz Rahnas
+Original Author URL: http://www.htmlremix.com
+Published date: 2008/09/24
+
+Changes by Nick Fetchak:
+- IE8 standards mode compatibility
+- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
+Published date : 2009/11/18
+
+
+<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
+<script type="text/javascript">
+
+// findPos() borrowed from http://www.quirksmode.org/js/findpos.html
+function findPos(obj) {
+ var curleft = curtop = 0;
+
+ if (obj.offsetParent) {
+ do {
+ curleft += obj.offsetLeft;
+ curtop += obj.offsetTop;
+ } while (obj = obj.offsetParent);
+ }
+
+ return({
+ 'x': curleft,
+ 'y': curtop
+ });
+}
+
+function oncontentready(classID) {
+ if (this.className.match(classID)) { return(false); }
+
+ if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
+
+ this.className = this.className.concat(' ', classID);
+ var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
+ this.currentStyle['-webkit-border-radius'] ||
+ this.currentStyle['border-radius'] ||
+ this.currentStyle['-khtml-border-radius']) /
+ Math.min(this.offsetWidth, this.offsetHeight), 1);
+ var fillColor = this.currentStyle.backgroundColor;
+ var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
+ var strokeColor = this.currentStyle.borderColor;
+ var strokeWeight = parseInt(this.currentStyle.borderWidth);
+ var stroked = 'true';
+ if (isNaN(strokeWeight)) {
+ strokeWeight = 0;
+ strokeColor = fillColor;
+ stroked = 'false';
+ }
+
+ this.style.background = 'transparent';
+ this.style.borderColor = 'transparent';
+
+ // Find which element provides position:relative for the target element (default to BODY)
+ var el = this;
+ var limit = 100, i = 0;
+ while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
+ el = el.parentElement;
+ i++;
+ if (i >= limit) { return(false); }
+ }
+ var el_zindex = parseInt(el.currentStyle.zIndex);
+ if (isNaN(el_zindex)) { el_zindex = 0; }
+ //alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
+
+ var rect_size = {
+ 'width': this.offsetWidth - strokeWeight,
+ 'height': this.offsetHeight - strokeWeight
+ };
+ var el_pos = findPos(el);
+ var this_pos = findPos(this);
+ this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
+ this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
+
+ var rect = document.createElement('v:roundrect');
+ rect.arcsize = arcSize +'px';
+ rect.strokecolor = strokeColor;
+ rect.strokeWeight = strokeWeight +'px';
+ rect.stroked = stroked;
+ rect.style.display = 'block';
+ rect.style.position = 'absolute';
+ rect.style.top = this_pos.y +'px';
+ rect.style.left = this_pos.x +'px';
+ rect.style.width = rect_size.width +'px';
+ rect.style.height = rect_size.height +'px';
+ rect.style.antialias = true;
+ rect.style.zIndex = el_zindex - 1;
+
+ var fill = document.createElement('v:fill');
+ fill.color = fillColor;
+ fill.src = fillSrc;
+ fill.type = 'tile';
+
+ rect.appendChild(fill);
+ el.appendChild(rect);
+
+ var css = el.document.createStyleSheet();
+ css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
+ css.addRule("v\\:fill", "behavior: url(#default#VML)");
+
+ isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
+ // IE6 doesn't support transparent borders, use padding to offset original element
+ if (isIE6 && (strokeWeight > 0)) {
+ this.style.borderStyle = 'none';
+ this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
+ this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
+ }
+
+ if (typeof(window.rounded_elements) == 'undefined') {
+ window.rounded_elements = new Array();
+
+ if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
+ window.onresize = window_resize;
+ }
+ this.element.vml = rect;
+ window.rounded_elements.push(this.element);
+}
+
+function window_resize() {
+ if (typeof(window.rounded_elements) == 'undefined') { return(false); }
+
+ for (var i in window.rounded_elements) {
+ var el = window.rounded_elements[i];
+
+ var strokeWeight = parseInt(el.currentStyle.borderWidth);
+ if (isNaN(strokeWeight)) { strokeWeight = 0; }
+
+ var parent_pos = findPos(el.vml.parentNode);
+ var pos = findPos(el);
+ pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
+ pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
+
+ el.vml.style.top = pos.y +'px';
+ el.vml.style.left = pos.x +'px';
+ }
+
+ if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
+}
+</script>
+
--- a/web/static/css/custom_player.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/static/css/custom_player.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#demo-frame > div.demo { padding: 5px !important; };
.iri-chapter{
padding-top:10px;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/css/ldtform.css Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,107 @@
+@charset "UTF-8";
+
+body {
+ min-width: 0;
+}
+
+#add_content, #add_contribution {
+ padding: 10px;
+}
+
+
+#add_content input, #add_content textarea, #add_content select,
+#add_contribution input, #add_contribution textarea, #add_contribution select
+{
+ background: #ededed;
+ width: 250px;
+}
+
+#add_contribution input[type="checkbox"] {
+ width: auto;
+}
+
+
+#add_content textarea {
+ height : 125px;
+}
+
+#add_content li {
+ list-style: none;
+}
+
+
+label {
+ display: block;
+ margin-top: 0.5em;
+}
+
+#add_content .vDateField,#add_content .vTimeField {
+ width: 90px;
+ float: left;
+}
+
+.projectscontentstitle {
+ border-bottom: 1px solid black;
+}
+
+#submitcontent {
+ border-top: 1px solid black;
+ padding-top : 10px;
+ text-align: right;
+}
+
+#add_content input[type="submit"], #add_contribution input[type="submit"] {
+ background-color: #656565;
+ color: white;
+ width:auto;
+ font-weight: bold;
+ padding: 5px 10px;
+}
+
+.datetimeshortcuts {
+ float: left;
+}
+
+.ldtdatetime {
+ float: left;
+ width: 350px;
+}
+
+.ldtdate,.ldttime {
+ float: left;
+ width: 150px;
+}
+
+.ldtdatetitle,.ldttimetitle {
+ color: #666;
+}
+
+#contentformhidden {
+ display: none;
+}
+
+#contentformfields {
+ margin: 10px 0px;
+}
+
+.cellcheckbox {
+ text-align: center;
+ width: 70 px;
+}
+
+#contentslistheader {
+ padding: 1px 10px 1px 36px;
+}
+
+#ldtcreatetablewrapperdiv {
+ height: 282px;
+}
+
+#ldtcreatecontentstablediv {
+ max-height: 280px;
+}
+
+#ldtcreatecontentslistcontainer {
+ padding: 5px 0px 20px 0px;
+ height: 300px;
+}
--- a/web/static/css/nyroModal.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/static/css/nyroModal.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
div#nyroModalFull {
font-size: 12px;
color: #777;
@@ -7,7 +9,7 @@
width: 150px;
height: 150px;
text-indent: -9999em;
- background: #fff url(../img/ajaxLoader.gif) no-repeat;
+ background: #fff url(../img/ajax-loader-43x43.gif) no-repeat;
background-position: center;
}
div#nyroModalLoading.error {
--- a/web/static/css/style.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/static/css/style.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
body {
font-family: Arial, Helvetica, sans serif;
@@ -213,4 +215,24 @@
display: inline;
}
+#toolbar {
+ margin-top: 10px;
+ border-bottom: 3px solid #707070;
+}
+#inner_content {
+ padding: 40px 0px 50px 0px;
+}
+
+#loginstate {
+ text-align: right;
+}
+
+.projectscontentstitle {
+ color: #949494;
+ font-family: Verdana;
+ font-weight: lighter;
+ font-size: 2.0em;
+ font-style: normal;
+ text-align: left;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/css/tabs.css Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,72 @@
+/* -----------------------------------------------------------------------
+ Taken from:
+
+ Tabs Plugin 0.2 for the Blueprint CSS Framework
+ http://blueprintcss.org
+
+ * Copyright (c) 2008-Present. Refer to the main Blueprint license.
+ * See README for instructions on how to use this plugin.
+ * For credits and origins, see AUTHORS.
+
+----------------------------------------------------------------------- */
+@charset "UTF-8";
+
+.tabs {
+ height:auto;
+ margin:0;
+ overflow:hidden;
+ padding-left:0;
+}
+* html .tabs { height:1%; /* fixing IE 6 */ }
+.tabs li {
+ background: #707070 url("../img/tabsright_normal.png") no-repeat right center;
+ border-bottom:none;
+ float:left;
+ line-height:1.5;
+ list-style-type:none;
+ margin:0 ;
+ padding: 0 9px 0 0;
+ height: 29px;
+
+}
+.tabs li a {
+ border-bottom:none;
+ color: #ffffff;
+ cursor:pointer;
+ display:block;
+ float:left;
+ margin: .5em 2em .5em 2em;
+ text-transform: capitalize;
+ font-weight: lighter;
+}
+
+.tabs li.active {
+ background:#29aae3 url("../img/tabsright_active.png") no-repeat right center;
+}
+
+
+.tabs li a.selected {
+ background:#666;
+ border:1px solid #666;
+ border-bottom:none;
+ color:#fff;
+ cursor:default;
+}
+.tabs li a, .tabs li a:focus, .tabs li a:hover {
+ text-decoration:none;
+}
+.tabs li a:focus, .tabs li a:hover {
+ color:#555;
+ outline:none;
+}
+.tabs li a.selected:focus, .tabs li a.selected:hover {
+ color:#fafafa;
+}
+.tabs li.label {
+ border:none;
+ font-weight:bold;
+ line-height:1.5;
+ margin-right:.5em;
+ padding:.25em .33em .25em .33em;
+}
+
--- a/web/static/css/workspace.css Tue Sep 14 13:15:28 2010 +0200
+++ b/web/static/css/workspace.css Tue Sep 14 13:38:47 2010 +0200
@@ -1,18 +1,9 @@
-#contentsdiv h1 {
- text-decoration : underline;
-}
+@charset "UTF-8";
-#contentsdiv table {
- border: 1px solid black;
+.titlediv {
+ margin: 0px 0px 25px 0px;
}
-#projectsdiv h1 {
- text-decoration : underline;
-}
-
-#projectsdiv table {
- border: 1px solid black;
-}
.ldt_player_code {
width: 580px;
@@ -23,3 +14,144 @@
padding: 2px;
}
+.searchfielddiv {
+ top: 50%;
+ margin-top: 12px;
+}
+
+.searchfield {
+ background: white;
+ border: 1px solid #b8b8b8;
+ -moz-border-radius: 15px;
+ -webkit-border-radius:15px;
+ -khtml-border-radius:15px;
+ border-radius: 15px;
+ padding: 2px 5px;
+}
+
+.searchfield img {
+ vertical-align: top;
+}
+
+.searchfieldinput {
+ color: graytext;
+ font-style: italic;
+}
+
+
+input[type="text"].searchfieldinputbase {
+ border: none;
+}
+
+.searchfieldinputbase {
+ background: #ffffff url("../img/search.gif") no-repeat left center;
+ width: 99px;
+ height: 14px;
+ margin: 0px 2px 0px 0px;
+ vertical-align: top;
+ padding-left: 20px;
+}
+
+
+.projectscontentsdiv {
+ overflow: hidden;
+ height: 570px;
+
+}
+div.projectscontentsdiv table {
+ width: 470px;
+ height: 100%;
+ margin-bottom: 0;
+}
+
+tr.projectscontentsoddline {
+ background: #ededed;
+}
+
+tr.projectscontentsevenline {
+ background: white;
+}
+
+
+/* make the TH elements pretty */
+.projectscontentsheader {
+ background: #b5b5b5;
+ font-weight: bold;
+ text-transform:capitalize;
+ color: white;
+ padding: 1px 2px;
+ text-align: left;
+}
+
+
+#contentsheader {
+ padding: 1px 10px 1px 49px;
+}
+
+
+#projectsheader {
+ padding: 1px 10px 1px 93px;
+}
+
+tbody .contenttitle {
+ width: 411px;
+ padding: 4px 10px 4px 5px;
+}
+
+tbody .projecttitle {
+ width: 367px;
+ padding: 4px 10px 4px 5px;
+}
+
+.projectscontentsfooter {
+ background: #8c8c8c;
+ color: #ffffff;
+ margin-top: 18px;
+ font-size: 1.25em;
+ font-style: normal;
+ padding : 5px 5px;
+}
+
+.projectscontentstablediv {
+ max-height: 500px;
+ overflow: auto; overflow-x: hidden;
+ border-bottom: 2px solid #b5b5b5 ;
+ float: left;
+}
+.projectscontentstablewrapperdiv {
+ height: 502px;
+}
+
+.projectscontentsbody tr {
+ padding-right: 16px;
+}
+
+.titlediv {
+ vertical-align: middle;
+}
+
+.cellimg {
+ width: 18px;
+ text-align: center;
+ padding: 4px 2px 4px 2px;
+ cursor: pointer; cursor: hand;
+}
+
+.cellimgdiv {
+ visibility: hidden;
+}
+
+.searchajaxloader {
+ display: none;
+}
+
+a.content_link_create:link, a.content_link_create:visited,
+a.ldt_link_create:link, a.ldt_link_create:visited {
+ color: white;
+ text-decoration: none;
+}
+
+a.project_link_create:link, a.project_link_create:visited {
+ color: white;
+}
+
Binary file web/static/img/ajax-loader-16x16.gif has changed
Binary file web/static/img/ajax-loader-43x43.gif has changed
Binary file web/static/img/ajaxLoader.gif has changed
Binary file web/static/img/control_play.gif has changed
Binary file web/static/img/document_add.gif has changed
Binary file web/static/img/document_edit.gif has changed
Binary file web/static/img/documents_duplicate.gif has changed
Binary file web/static/img/favicon.ico has changed
Binary file web/static/img/plugin.gif has changed
Binary file web/static/img/search.gif has changed
Binary file web/static/img/tabsright_active.png has changed
Binary file web/static/img/tabsright_normal.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/js/jquery.qtip.css Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,337 @@
+/*
+* qTip - The jQuery tooltip plugin
+* http://craigsworks.com/projects/qtip/
+*
+* Version: 2.0.0pre
+* Copyright 2009 Craig Michael Thompson - http://craigsworks.com
+*
+* Dual licensed under MIT or GPL Version 2 licenses
+* http://en.wikipedia.org/wiki/MIT_License
+* http://en.wikipedia.org/wiki/GNU_General_Public_License
+*
+* Date: Mon Sep 6 15:10:26 2010 +0100
+*/
+
+.ui-tooltip-accessible{
+ left: -10000em !important;
+ top: -10000em !important;
+ display: block !important;
+ visibility: hidden !important;
+}
+
+ /* IE6 ONLY - Width detection fix */
+ * html .ui-tooltip-accessible{
+ position: static !important;
+ float: left !important;
+ }
+
+.ui-tooltip, .qtip{
+ position: absolute;
+ display: none;
+
+ max-width: 280px;
+ min-width: 50px;
+}
+
+ .ui-tooltip .ui-tooltip-wrapper{
+ position: relative;
+ overflow: hidden;
+
+ border-width: 3px;
+ border-style: solid;
+ }
+
+ .ui-tooltip .ui-tooltip-content{
+ position: relative;
+ padding: 5px 9px;
+
+ text-align: left;
+ word-wrap: break-word;
+ overflow: hidden;
+ }
+
+ .ui-tooltip .ui-tooltip-titlebar{
+ position: relative;
+ padding: 6px 35px 6px 10px;
+
+ font-weight: bold;
+ }
+
+ /*! Default close button class */
+ .ui-tooltip .ui-tooltip-close{
+ position: absolute;
+ height: 16px;
+ width: 16px;
+ padding: 1px;
+ right: 5px;
+ top: 5px;
+
+ cursor: pointer;
+ line-height: 0px;
+ font-size: 0px;
+ }
+
+ .ui-tooltip .ui-tooltip-close .ui-icon{
+ height: 16px;
+ width: 16px;
+ display: block;
+
+ opacity: 0.8;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+ filter: alpha(opacity=80);
+ }
+ .ui-tooltip .ui-tooltip-close:hover .ui-icon{
+ opacity: 1;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
+ }
+
+ /*! Custom button class */
+ .ui-tooltip .ui-tooltip-button{
+ float: right;
+ }
+
+ /* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
+ .ui-tooltip-focus{
+
+ }
+
+
+/*! Default tooltip style */
+.ui-tooltip-wrapper{
+ border-color: #F9E98E;
+ background-color: #FBF7AA;
+ color: #A27D35;
+}
+
+ .ui-tooltip .ui-tooltip-titlebar{
+ background-color: #F0DE7D;
+ }
+
+ .ui-tooltip .ui-tooltip-close .ui-icon{
+ background: #A27D35 url('images/close.png') no-repeat 50% 50%;
+ }
+
+/*! Plain tooltip style */
+.ui-tooltip-plain .ui-tooltip-wrapper{
+ border-color: black;
+ border-width: 1px;
+
+ background-color: white;
+ color: black;
+}
+
+ .ui-tooltip-plain .ui-tooltip-titlebar{
+ background-color: white;
+ }
+
+ .ui-tooltip-plain .ui-tooltip-close .ui-icon{
+ background: black;
+ }
+
+/*! Light tooltip style */
+.ui-tooltip-light .ui-tooltip-wrapper{
+ border-color: #E2E2E2;
+ background-color: white;
+ color: #454545;
+}
+
+ .ui-tooltip-light .ui-tooltip-titlebar{
+ background-color: #f1f1f1;
+ }
+
+ .ui-tooltip-light .ui-tooltip-close .ui-icon{
+ background: #454545 url('images/close-light.png') no-repeat 50% 50%;
+ }
+
+
+/*! Dark tooltip style */
+.ui-tooltip-dark .ui-tooltip-wrapper{
+ border-color: #303030;
+ background-color: #505050;
+ color: #f3f3f3;
+}
+
+ .ui-tooltip-dark .ui-tooltip-titlebar{
+ background-color: #404040;
+ }
+
+ .ui-tooltip-dark .ui-tooltip-close .ui-icon{
+ background: #f3f3f3 url('images/close-dark.png') no-repeat 50% 50%;
+ }
+
+
+/*! Red tooltip style */
+.ui-tooltip-red .ui-tooltip-wrapper{
+ border-color: #D95252;
+ background-color: #F78B83;
+ color: #912323;
+}
+
+ .ui-tooltip-red .ui-tooltip-titlebar{
+ background-color: #F06D65;
+ }
+
+ .ui-tooltip-red .ui-tooltip-close .ui-icon{
+ background: #9C2F2F url('images/close-red.png') no-repeat 50% 50%;
+ }
+
+
+/*! Green tooltip style */
+.ui-tooltip-green .ui-tooltip-wrapper{
+ border-color: #90D93F;
+ background-color: #CAED9E;
+ color: #3F6219;
+}
+
+ .ui-tooltip-green .ui-tooltip-titlebar{
+ background-color: #B0DE78;
+ }
+
+ .ui-tooltip-green .ui-tooltip-close .ui-icon{
+ background: #58792E url('images/close-green.png') no-repeat 50% 50%;
+ }
+
+
+/*! Blue tooltip style */
+.ui-tooltip-blue .ui-tooltip-wrapper{
+ border-color: #ADD9ED;
+ background-color: #E5F6FE;
+ color: #5E99BD;
+}
+
+ .ui-tooltip-blue .ui-tooltip-titlebar{
+ background-color: #D0E9F5;
+ }
+
+ .ui-tooltip-blue .ui-tooltip-close .ui-icon{
+ background: #4D9FBF url('images/close-blue.png') no-repeat 50% 50%;
+ }
+
+
+/*! Add shadows to your tooltips in all supported browsers */
+.ui-tooltip-shadow{
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
+
+ filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=5, OffY=5, Color='gray');
+ -ms-filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=5, OffY=5, Color='gray')";
+}
+
+div.ui-tooltip-tip{
+ position: absolute;
+ margin: 0 auto;
+ overflow: hidden;
+
+ line-height: 0.1px;
+ font-size: 1px;
+
+ background: transparent !important;
+ border: 0px !important;
+ z-index: 10;
+}
+
+ div.ui-tooltip-tip *{
+ line-height: 0.1px;
+ font-size: 0.1px;
+ }
+
+ div.ui-tooltip-tip div{
+ background: transparent !important;
+ border: 0px dashed transparent;
+ }
+
+#qtip-overlay{
+ position: absolute;
+ left: -10000em;
+ top: -10000em;
+
+ background-color: black;
+ cursor: pointer;
+
+ /* Set this to any below 15000 (default starting z-index for qTips) */
+ z-index: 14999;
+}
+
+/*! Youtube tooltip style */
+div.ui-tooltip-youtube .ui-tooltip-wrapper{
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+
+ -webkit-box-shadow: 0 0 3px #333;
+ -moz-box-shadow: 0 0 3px #333;
+ box-shadow: 0 0 3px #333;
+
+ border-color: #CCCCCC;
+ border-width: 1px;
+
+ color: white;
+}
+
+ div.ui-tooltip-youtube .ui-tooltip-close .ui-icon{
+ background: #4D9FBF url('images/close-dark.png') no-repeat 50% 50%;
+ }
+
+ div.ui-tooltip-youtube .ui-tooltip-titlebar,
+ div.ui-tooltip-youtube .ui-tooltip-content{
+ background-color: rgba(0, 0, 0, 0.85);
+ }
+
+ /* IE6 Fallback */
+ * html div.ui-tooltip-youtube-wrapper{
+ background-color: black;
+ }
+
+
+/* jQuery TOOLS Tooltip style */
+div.ui-tooltip-jtools .ui-tooltip-wrapper{
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+
+ border-color: white;
+ border-width: 2px;
+
+ -webkit-box-shadow: 0 0 12px #333;
+ -moz-box-shadow: 0 0 12px #333;
+ box-shadow: 0 0 12px #333;
+
+ background-color: rgba(0, 0, 0, 0.7);
+ background-image: -moz-linear-gradient(top, #717171, #232323);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#232323);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#232323)";
+
+ color: white;
+}
+
+ div.ui-tooltip-jtools .ui-tooltip-titlebar,
+ div.ui-tooltip-jtools .ui-tooltip-content{
+ background: none;
+ }
+
+ div.ui-tooltip-jtools .ui-tooltip-close .ui-icon{
+ background: black url('images/close-dark.png') no-repeat 50% 50%;
+ }
+
+
+/* Cluetip style */
+div.ui-tooltip-cluetip .ui-tooltip-wrapper{
+ border-width: 0;
+
+ -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+ box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+}
+
+ div.ui-tooltip-cluetip .ui-tooltip-titlebar{
+ background-color: #87876A;
+ color: white;
+ }
+ div.ui-tooltip-cluetip .ui-tooltip-content{
+ background-color: #D9D9C2;
+ color: #111;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/js/jquery.qtip.min.js Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('"6t 6u";(j($){$(31).3x(j(){R i;$(2e).1J(\'3L 3E\',j(r){1V(i=0;i<$.18.g.O.Q;i++){R T=$.18.g.O[i];c(T&&T.V&&T.V.1b&&T.8.k.17!==\'29\'&&T.d.h.2r(\':28\')&&(T.8.k.1e.3E&&r.17===\'3E\'||T.8.k.1e.3L&&r.17===\'3L\')){T.2h(r,H)}}});$(31).1J(\'5j.g\',j(r){c($(r.s).5g(\'12.g\').Q===0){R h=$(\'.6w\'),T=h.g(\'T\');c(h.2r(\':28\')&&T&&T.V&&!T.V.23&&$(r.s).2m(T.d.s).Q>1){T.D(r)}}})});j 2D(w){c(!w){B p}A.x=5a(w).3l(/5x/i,\'1j\').5y(/M|25|1j/i)[0].2F();A.y=5a(w).3l(/5x/i,\'1j\').5y(/K|26|1j/i)[0].2F();A.1k={M:0,K:0};A.2y=(w.2H(0).6L(/^(t|b)/)>-1)?\'y\':\'x\';A.1w=j(){B(A.2y===\'y\')?A.y+A.x:A.x+A.y}}j 4t(w,o,G){R 1N={5B:[[0,0],[o,G],[o,0]],6a:[[0,0],[o,0],[0,G]],5K:[[0,G],[o,0],[o,G]],5N:[[0,0],[0,G],[o,G]],6y:[[0,G],[o/2,0],[o,G]],6v:[[0,0],[o,0],[o/2,G]],6i:[[0,0],[o,G/2],[0,G]],6J:[[o,0],[o,G],[0,G/2]]};1N.6M=1N.5B;1N.6z=1N.6a;1N.6x=1N.5K;1N.6C=1N.5N;B 1N[w]}j 4e(E){R 2j;c($(\'<1f />\').1q(0).1E){2j={3K:[E,E],40:[0,E],4I:[E,0],3P:[0,0]}}C c($.16.1d){2j={3K:[-2z,2z,0],40:[-2z,2z,-E],4I:[2z,5D,0],3P:[2z,5D,-E]}}B 2j}j 2G(e,4b){R 2U,i;2U=$.2p(H,{},e);1V(i 5R 2U){c(4b===H&&(/(f|1g)/i).1Y(i)){3z 2U[i]}C c(!4b&&(/(o|I|f|U|1g|4v)/i).1Y(i)){3z 2U[i]}}B 2U}j 4i(e){c(P e.f!==\'19\'){e.f={w:e.f}}c(P e.f.N!==\'19\'){e.f.N={o:e.f.N,G:e.f.N}}c(P e.I!==\'19\'){e.I={o:e.I}}c(P e.o!==\'19\'){e.o={2Z:e.o}}c(P e.o.1H===\'1w\'){e.o.1H=1A(e.o.1H.3l(/([0-9]+)/i,"$1"),10)}c(P e.o.2b===\'1w\'){e.o.2b=1A(e.o.2b.3l(/([0-9]+)/i,"$1"),10)}c(P e.f.N.x===\'2s\'){e.f.N.o=e.f.N.x;3z e.f.N.x}c(P e.f.N.y===\'2s\'){e.f.N.G=e.f.N.y;3z e.f.N.y}B e}j 4l(){R 7,i,3A,2v,1D,1P;7=A;3A=[H,{}];1V(i=0;i<3b.Q;i++){3A.5h(3b[i])}2v=[$.2p.4s($,3A)];6F(P 2v[0].21===\'1w\'){2v.5O(4i($.18.g.3c[2v[0].21]))}2v.5O(H,{1g:{h:\'g-\'+(3b[0].21||\'39\')}},$.18.g.3c.39);1D=$.2p.4s($,2v);1P=($.16.1d)?1:0;1D.f.N.o+=1P;1D.f.N.G+=1P;c(1D.f.N.o%2>0){1D.f.N.o+=1}c(1D.f.N.G%2>0){1D.f.N.G+=1}c(1D.f.w===H){c(7.8.k.w.h===\'1j\'&&7.8.k.w.s===\'1j\'){1D.f.w=p}C{1D.f.w=7.8.k.w.h}}B 1D}j 46(1f,X,E,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.3p(X[0],X[1],E,0,1u.6N*2,p);1n.5Y()}j 59(){R 7,i,o,E,J,X,1Q,N,4O,2k,3e,3i,4g,4q,4G;7=A;7.d.1t.1M(\'.g-3i, .g-3e\').3W();o=7.8.e.I.o;E=7.8.e.I.E;J=7.8.e.I.J||7.8.e.f.J;X=4e(E);1Q={};1V(i 5R X){1Q[i]=\'<12 1S="\'+i+\'" e="\'+((/6n/).1Y(i)?\'M\':\'25\')+\':0; \'+\'k:34; G:\'+E+\'1a; o:\'+E+\'1a; 2u:1F; 2S-G:0.1B; 2Y-N:1B">\';c($(\'<1f />\').1q(0).1E){1Q[i]+=\'<1f G="\'+E+\'" o="\'+E+\'" e="4Q-3o: K"></1f>\'}C c($.16.1d){N=E*2+3;1Q[i]+=\'<v:3p 6f="p" 3t="\'+J+\'" 6s="\'+X[i][0]+\'" 6r="\'+X[i][1]+\'" \'+\'e="o:\'+N+\'1a; G:\'+N+\'1a; 2q-K:\'+((/26/).1Y(i)?-2:-1)+\'1a; \'+\'2q-M:\'+((/6m/).1Y(i)?X[i][2]-3.5:-1)+\'1a; \'+\'4Q-3o:K; 2a:53-4E; 3I:1x(#2L#3R)"></v:3p>\'}1Q[i]+=\'</12>\'}4O=7.3d().o-(1u.1H(o,E)*2);2k=\'<12 1I="g-2k" e="G:\'+E+\'1a; o:\'+4O+\'1a; \'+\'2u:1F; 1s-J:\'+J+\'; 2S-G:0.1B; 2Y-N:1B;">\';3e=\'<12 1I="g-3e" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.3K+1Q.40+2k;7.d.1t.3B(3e);3i=\'<12 1I="g-3i" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.4I+1Q.3P+2k;7.d.1t.5s(3i);c($(\'<1f />\').1q(0).1E){7.d.1t.1M(\'1f\').1L(j(){4g=X[$(A).3O(\'[1S]:1R\').W(\'1S\')];46.S(7,$(A),4g,E,J)})}C c($.16.1d){7.d.h.5s(\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\')}4q=1u.1H(E,(E+(o-E)));4G=1u.1H(o-E,0);7.d.1y.F({I:\'6D 3q \'+J,6H:4G+\'1a \'+4q+\'1a\'})}j 4u(1f,X,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.6o(X[0][0],X[0][1]);1n.5Q(X[1][0],X[1][1]);1n.5Q(X[2][0],X[2][1]);1n.5Y()}j 42(w){R 7,1P,24,4n,4h,3Q;7=A;c(7.8.e.f.w===p||!7.d.f){B}c(!w){w=2T 2D(7.d.f.W(\'1S\'))}1P=24=($.16.1d)?1:0;7.d.f.F(w[w.2y],0);c(w.2y===\'y\'){c($.16.1d){c(1A($.16.2X.2H(0),10)===6){24=w.y===\'K\'?-3:1}C{24=w.y===\'K\'?1:2}}c(w.x===\'1j\'){7.d.f.F({M:\'50%\',6K:-(7.8.e.f.N.o/2)})}C c(w.x===\'M\'){7.d.f.F({M:7.8.e.I.E-1P})}C{7.d.f.F({25:7.8.e.I.E+1P})}c(w.y===\'K\'){7.d.f.F({K:-24})}C{7.d.f.F({26:24})}}C{c($.16.1d){24=(1A($.16.2X.2H(0),10)===6)?1:(w.x===\'M\'?1:2)}c(w.y===\'1j\'){7.d.f.F({K:\'50%\',49:-(7.8.e.f.N.G/2)})}C c(w.y===\'K\'){7.d.f.F({K:7.8.e.I.E-1P})}C{7.d.f.F({26:7.8.e.I.E+1P})}c(w.x===\'M\'){7.d.f.F({M:-24})}C{7.d.f.F({25:24})}}4n=\'2x-\'+w[w.2y];4h=7.8.e.f.N[w.2y===\'x\'?\'o\':\'G\'];7.d.h.F(\'2x\',0).F(4n,4h);c($.16.1d&&1A($.16.2X.2H(0),6)===6){3Q=1A(7.d.f.F(\'2q-K\'),10)||0;3Q+=1A(7.d.u.F(\'2q-K\'),10)||0;7.d.f.F({49:3Q})}}j 44(w){R 7,J,X,3J,2o,f;7=A;c(7.d.f!==1z){7.d.f.3W()}J=7.8.e.f.J||7.8.e.I.J;c(7.8.e.f.w===p){B}C c(!w){w=2T 2D(7.8.e.f.w)}X=4t(w.1w(),7.8.e.f.N.o,7.8.e.f.N.G);7.d.f=\'<12 1I="\'+7.8.e.1g.f+\'" 4k="4f" 1S="\'+w.1w()+\'" e="k:34; \'+\'G:\'+7.8.e.f.N.G+\'1a; o:\'+7.8.e.f.N.o+\'1a; \'+\'2q:0 6e; 2S-G:0.1B; 2Y-N:1B;"></12>\';7.d.h.3B(7.d.f);c($(\'<1f />\').1q(0).1E){f=\'<1f G="\'+7.8.e.f.N.G+\'" o="\'+7.8.e.f.N.o+\'"></1f>\'}C c($.16.1d){3J=7.8.e.f.N.o+\',\'+7.8.e.f.N.G;2o=\'m\'+X[0][0]+\',\'+X[0][1];2o+=\' l\'+X[1][0]+\',\'+X[1][1];2o+=\' \'+X[2][0]+\',\'+X[2][1];2o+=\' 6I\';f=\'<v:3M 3t="\'+J+\'" 6f="p" 6p="H" 2o="\'+2o+\'" 3J="\'+3J+\'" \'+\'e="o:\'+7.8.e.f.N.o+\'1a; G:\'+7.8.e.f.N.G+\'1a; \'+\'2S-G:0.1B; 2a:53-4E; 3I:1x(#2L#3R); \'+\'4Q-3o:\'+(w.y===\'K\'?\'26\':\'K\')+\'"></v:3M>\';f+=\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\';7.d.1y.F(\'k\',\'4y\')}7.d.f=7.d.h.1M(\'.\'+7.8.e.1g.f).6B(0);7.d.f.2l(f);c($(\'<1f />\').1q(0).1E){4u.S(7,7.d.f.1M(\'1f:1R\'),X,J)}c(w.y===\'K\'&&$.16.1d&&1A($.16.2X.2H(0),10)===6){7.d.f.F({49:-4})}42.S(7,w)}j 5b(){R 7=A;c(7.d.U!==1z){7.d.U.3W()}7.d.h.W(\'3r-6E\',\'g-\'+7.11+\'-U\');7.d.U=$(\'<12 11="g-\'+7.11+\'-U" 1I="\'+7.8.e.1g.U+\'"></12>\').F(2G(7.8.e.U,H)).F({2f:($.16.1d)?1:0}).58(7.d.1y);c(7.8.u.U.1m){7.5W.S(7,7.8.u.U.1m)}c(7.8.u.U.1i!==p&&P 7.8.u.U.1i===\'1w\'){7.d.1i=$(\'<a 1I="\'+7.8.e.1g.1i+\'" 5e="1i" e="6G:25; k: 4y"></a>\').F(2G(7.8.e.1i,H)).2l(7.8.u.U.1i).58(7.d.U).5d(j(r){c(!7.V.23){7.D(r)}})}}j 5l(){R 7,3h,2i,3u;7=A;3h=7.8.q.L.s;2i=7.8.D.L.s;c(7.8.D.3g){2i=2i.2m(7.d.h)}3u=[\'5d\',\'6h\',\'6k\',\'6j\',\'4C\',\'4x\',\'5j\',\'6l\',\'35\'];j 3v(r){c(7.V.23===H){B}2g(7.1G.1W);7.1G.1W=4M(j(){$(3u).1L(j(){2i.1O(A+\'.g-1W\');7.d.u.1O(A+\'.g-1W\')});7.D(r)},7.8.D.2V)}c(7.8.D.3g===H){7.d.h.1J(\'35.g\',j(){c(7.V.23===H){B}2g(7.1G.D)})}j 4S(r){c(7.V.23===H){B}c(7.8.D.L.r===\'1W\'){$(3u).1L(j(){2i.1J(A+\'.g-1W\',3v);7.d.u.1J(A+\'.g-1W\',3v)});3v()}2g(7.1G.q);2g(7.1G.D);c(7.8.q.2V>0){7.1G.q=4M(j(){7.q(r)},7.8.q.2V)}C{7.q(r)}}j 4P(r){c(7.V.23===H){B}c(7.8.D.3g===H&&(/1K(6q|6A)/i).1Y(7.8.D.L.r)&&$(r.70).5g(\'12.g[11^="g"]\').Q>0){r.7L();r.7K();2g(7.1G.D);B p}2g(7.1G.q);2g(7.1G.D);7.d.h.3S(H,H);7.1G.D=4M(j(){7.D(r)},7.8.D.2V)}c(7.8.k.s===\'1K\'&&7.8.k.17!==\'29\'){3h.1J(\'4C.g\',j(r){7.1v.1K={M:r.3Y,K:r.4c};c(7.V.23===p&&7.8.k.1e.1K===H&&7.8.k.17!==\'29\'&&7.d.h.F(\'2a\')!==\'3a\'){7.2h(r)}})}c((7.8.q.L.s.2m(7.8.D.L.s).Q===1&&7.8.q.L.r===7.8.D.L.r&&7.8.D.L.r!==\'1W\')||7.8.D.L.r===\'4R\'){7.1v.2I=0;3h.1J(7.8.q.L.r+\'.g\',j(r){c(7.1v.2I===0){4S(r)}C{4P(r)}})}C{3h.1J(7.8.q.L.r+\'.g\',4S);c(7.8.D.L.r!==\'1W\'){2i.1J(7.8.D.L.r+\'.g\',4P)}}c((/(3g|34)/).1Y(7.8.k.17)){7.d.h.1J(\'35.g\',7.2E)}}j 22(){R 7,2l,2t;7=A;2t=7.3d();2l=\'<7J 1I="g-22" 7I="0" 7M="-1" 4T="7N:p" \'+\'e="2a:4E; k:34; z-3s:-1; 5m:7R(2B=\\\'0\\\'); I: 1B 3q 4H; \'+\'G:\'+2t.G+\'1a; o:\'+2t.o+\'1a" />\';7.d.22=7.d.1t.3B(2l).2w(\'.g-22:1R\')}j 4w(){R 7,u,1x,Y,2A;7=A;7.5J.S(7);7.V.1b=2;7.d.h=\'<12 g="\'+7.11+\'" 11="g-\'+7.11+\'" 5e="h" \'+\'3r-7Q="g-\'+7.11+\'-u" 1I="g \'+(7.8.e.1g.h||7.8.e)+\'" \'+\'e="2a:3a; -7P-I-E:0; -7O-I-E:0; I-E:0; k:\'+7.8.k.17+\';"> \'+\' <12 1I="g-1t" e="k:4y; 2u:1F; 1m-3o:M;"> \'+\' <12 1I="g-1y" e="2u:1F;"> \'+\' <12 11="g-\'+7.11+\'-u" 1I="g-u \'+7.8.e.1g.u+\'"></12> \'+\'</12></12></12>\';7.d.h=$(7.d.h);7.d.h.5P(7.8.k.3U);7.d.h.Y(\'g\',{3k:0,O:[7]});7.d.1t=7.d.h.2w(\'12:1R\');7.d.1y=7.d.1t.2w(\'12:1R\');7.d.u=7.d.1y.2w(\'12:1R\').F(2G(7.8.e));c($.16.1d){7.d.1t.2m(7.d.u).F({2f:1})}c(7.8.D.L.r===\'4R\'){7.d.h.W(\'4R\',H)}c(P 7.8.e.o.2Z===\'2s\'){7.4d()}c($(\'<1f />\').1q(0).1E||$.16.1d){c(7.8.e.I.E>0){59.S(7)}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J})}c(7.8.e.f.w!==p){44.S(7)}}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J});7.8.e.I.E=0;7.8.e.f.w=p}c((P 7.8.u.1m===\'1w\'&&7.8.u.1m.Q>0)||(7.8.u.1m.4r&&7.8.u.1m.Q>0)){u=7.8.u.1m}C{u=\' \'}c(7.8.u.U.1m!==p){5b.S(7)}7.4A(u,p);5l.S(7);c(7.8.q.3x===H){7.q()}c(7.8.u.1x!==p){1x=7.8.u.1x;Y=7.8.u.Y;2A=7.8.u.2A||\'1q\';7.5Z(1x,Y,2A)}7.V.1b=H;7.5f.S(7)}j 56(s,8,11){R 7=A;7.11=11;7.8=8;7.V={4j:p,1b:p,23:p,3Z:p};7.d={s:s.5v(7.8.e.1g.s),h:1z,1t:1z,u:1z,1y:1z,U:1z,1i:1z,f:1z,22:1z};7.1v={W:p,1K:{},2I:0,2u:{M:p,K:p}};7.1G={};$.2p(7,7.8.T,{q:j(r){R 1c,1X;c(!7.V.1b){B p}c(7.d.h.F(\'2a\')!==\'3a\'){B 7}7.d.h.3S(H,p);1c=7.5n.S(7,r);c(1c===p){B 7}j 2M(){7.d.h.W(\'3r-1F\',H);c(7.8.k.17!==\'29\'){7.2E()}7.5q.S(7,r);c($.16.1d){R 4a=7.d.h.1q(0).e;4a.43(\'5m\');4a.43(\'2B\')}C{7.d.h.F({2B:\'\'})}}7.1v.2I=1;c(7.8.k.17!==\'29\'){7.2h(r,(7.8.q.Z.Q>0&&7.1b!==2))}c(P 7.8.q.1X===\'19\'){1X=$(7.8.q.1X)}C c(7.8.q.1X===H){1X=$(\'12.g\').5S(7.d.h)}c(1X){1X.1L(j(){c($(A).g(\'T\').V.1b===H){$(A).g(\'T\').D()}})}c(P 7.8.q.Z.17===\'j\'){7.8.q.Z.17.S(7.d.h,7.8.q.Z.Q);7.d.h.5u(j(){2M();$(A).5t()})}C{4N(7.8.q.Z.17.2F()){1Z\'3w\':7.d.h.7H(7.8.q.Z.Q,2M);1C;1Z\'5o\':7.d.h.7G(7.8.q.Z.Q,j(){2M();c(7.8.k.17!==\'29\'){7.2h(r,H)}});1C;1Z\'5p\':7.d.h.q(7.8.q.Z.Q,2M);1C;2L:7.d.h.q(1z,2M);1C}7.d.h.5v(7.8.e.1g.3T)}B 7},D:j(r){R 1c;c(!7.V.1b){B p}C c(7.d.h.F(\'2a\')===\'3a\'){B 7}2g(7.1G.q);7.d.h.3S(H,p);1c=7.5A.S(7,r);c(1c===p){B 7}j 2K(){7.d.h.W(\'3r-1F\',H);c($.16.1d){7.d.h.1q(0).e.43(\'2B\')}C{7.d.h.F({2B:\'\'})}7.4Z.S(7,r)}7.1v.2I=0;c(P 7.8.D.Z.17===\'j\'){7.8.D.Z.17.S(7.d.h,7.8.D.Z.Q);7.d.h.5u(j(){2K();$(A).5t()})}C{4N(7.8.D.Z.17.2F()){1Z\'3w\':7.d.h.7z(7.8.D.Z.Q,2K);1C;1Z\'5o\':7.d.h.7y(7.8.D.Z.Q,2K);1C;1Z\'5p\':7.d.h.D(7.8.D.Z.Q,2K);1C;2L:7.d.h.D(1z,2K);1C}7.d.h.7x(7.8.e.1g.3T)}B 7},2I:j(r,38){R 5r=/7w|2s/.1Y(P 38)?38:!7.d.h.2r(\':28\');7[5r?\'q\':\'D\'](r);B 7},2h:j(r,4o){c(!7.V.1b){B p}R 1U=8.k,s=$(1U.s),2Q=7.d.h.47(),2P=7.d.h.48(),1p,1l,k,1o=1U.w.h,2R=1U.w.s,1c,14,i,4L,27,45={M:j(){R 3j=$(2e).3D(),3n=$(2e).o()+$(2e).3D(),2J=1o.x===\'1j\'?2Q/2:2Q,2N=1o.x===\'1j\'?1p/2:1p,2O=(1o.x===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.x,3m=k.M+2Q,1h;c(3m>3n){1h=1k-2J-2N+2O;c(k.M+1h>3j||3j-(k.M+1h)<3m-3n){B{1e:1h,f:\'25\'}}}c(k.M<3j){1h=1k+2J+2N-2O;c(3m+1h<3n||3m+1h-3n<3j-k.M){B{1e:1h,f:\'M\'}}}B{1e:0,f:1o.x}},K:j(){R 30=$(2e).3G(),33=$(2e).G()+$(2e).3G(),2J=1o.y===\'1j\'?2P/2:2P,2N=1o.y===\'1j\'?1l/2:1l,2O=(1o.y===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.y,32=k.K+2P,1h;c(32>33){1h=1k-2J-2N+2O;c(k.K+1h>30||30-(k.K+1h)<32-33){B{1e:1h,f:\'26\'}}}c(k.K<30){1h=1k+2J+2N-2O;c(32+1h<33||32+1h-33<30-k.K){B{1e:1h,f:\'K\'}}}B{1e:0,f:1o.y}}};c(r&&8.k.s===\'1K\'){2R={x:\'M\',y:\'K\'};1p=1l=0;c(!r.3Y){k=7.1v.1K}C{k={K:r.4c,M:r.3Y}}}C{c(s[0]===31){1p=s.o();1l=s.G();k={K:0,M:0}}C c(s[0]===2e){1p=s.o();1l=s.G();k={K:s.3G(),M:s.3D()}}C c(s.2r(\'7A\')){14=7.8.k.s.W(\'14\').7B(\',\');1V(i=0;i<14.Q;i++){14[i]=1A(14[i],10)}4L=7.8.k.s.3O(\'7F\').W(\'21\');27=$(\'4U[7E="#\'+4L+\'"]:1R\').1k();k={M:1u.3H(27.M+14[0]),K:1u.3H(27.K+14[1])};4N(7.8.k.s.W(\'3M\').2F()){1Z\'7T\':1p=1u.4V(1u.5z(14[2]-14[0]));1l=1u.4V(1u.5z(14[3]-14[1]));1C;1Z\'7C\':1p=14[2]+1;1l=14[2]+1;1C;1Z\'7S\':1p=14[0];1l=14[1];1V(i=0;i<14.Q;i++){c(i%2===0){c(14[i]>1p){1p=14[i]}c(14[i]<14[0]){k.M=1u.3H(27.M+14[i])}}C{c(14[i]>1l){1l=14[i]}c(14[i]<14[1]){k.K=1u.3H(27.K+14[i])}}}1p=1p-(k.M-27.M);1l=1l-(k.K-27.K);1C}1p-=2;1l-=2}C{1p=s.47();1l=s.48();c(!7.d.h.2r(\':28\')){7.d.h.F({M:\'-81\'}).q()}c(!1U.1e.1k||7.d.h.4F()[0]===31.4X){k=s.1k()}C{k=s.k();k.K+=s.4F().3G();k.M+=s.4F().3D()}}k.M+=2R.x===\'25\'?1p:2R.x===\'1j\'?1p/2:0;k.K+=2R.y===\'26\'?1l:2R.y===\'1j\'?1l/2:0}k.M+=1U.1e.x+(1o.x===\'25\'?-2Q:1o.x===\'1j\'?-2Q/2:0);k.K+=1U.1e.y+(1o.y===\'26\'?-2P:1o.y===\'1j\'?-2P/2:0);c(7.8.e.I.E>0){c(1o.x===\'M\'){k.M-=7.8.e.I.E}C c(1o.x===\'25\'){k.M+=7.8.e.I.E}c(1o.y===\'K\'){k.K-=7.8.e.I.E}C c(1o.y===\'26\'){k.K+=7.8.e.I.E}}c(1U.1e.55){(j(){R 2W={x:0,y:0},2n={x:45.M(),y:45.K()},f=2T 2D(8.e.f.w);c(7.d.f&&f){c(2n.y.1e!==0){k.K+=2n.y.1e;f.y=2W.y=2n.y.f}c(2n.x.1e!==0){k.M+=2n.x.1e;f.x=2W.x=2n.x.f}7.1v.2u={M:2W.x===p,K:2W.y===p};c(7.d.f.W(\'1S\')!==f.1w()){44.S(7,f)}}}())}c(!7.d.22&&$.16.1d&&1A($.16.2X.2H(0),10)===6){22.S(7)}1c=7.57.S(7,r);c(1c===p){B 7}c(8.k.s!==\'1K\'&&4o===H){7.V.4j=H;7.d.h.3S().4o(k,7V,\'80\',j(){7.V.4j=p})}C{7.d.h.F(k)}7.5c.S(7,r);B 7},4d:j(1r){c(!7.V.1b||(1r&&P 1r!==\'2s\')){B p}R 1F=7.d.1y.7W().2m(7.d.f).2m(7.d.1i),2f=7.d.1t.2m(7.d.1y.2w()),h=7.d.h,1H=7.8.e.o.1H,2b=7.8.e.o.2b;c(!1r){c(P 7.8.e.o.2Z===\'2s\'){1r=7.8.e.o.2Z}C{7.d.h.F({o:\'6e\'});1F.D();h.o(1r);c($.16.1d){2f.F({2f:\'\'})}1r=7.3d().o;c(!7.8.e.o.2Z){1r=1u.2b(1u.1H(1r,2b),1H)}}}c(1r%2){1r+=1}7.d.h.o(1r);1F.q();c(7.8.e.I.E){7.d.h.1M(\'.g-2k\').1L(j(i){$(A).o(1r-(7.8.e.I.E*2))})}c($.16.1d){2f.F({2f:1});7.d.1t.o(1r);c(7.d.22){7.d.22.o(1r).G(7.3d.G)}}B 7},7Y:j(21){R f,2j,1n,w,X;c(!7.V.1b||P 21!==\'1w\'||!$.18.g.3c[21]){B p}7.8.e=4l.S(7,$.18.g.3c[21],7.8.4v.e);7.d.u.F(2G(7.8.e));c(7.8.u.U.1m!==p){7.d.U.F(2G(7.8.e.U,H))}7.d.1y.F({7U:7.8.e.I.J});c(7.8.e.f.w!==p){c($(\'<1f />\').1q(0).1E){f=7.d.h.1M(\'.g-f 1f:1R\');1n=f.1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=f.3O(\'12[1S]:1R\').W(\'1S\');X=4t(w,7.8.e.f.N.o,7.8.e.f.N.G);4u.S(7,f,X,7.8.e.f.J||7.8.e.I.J)}C c($.16.1d){f=7.d.h.1M(\'.g-f [5E="3M"]\');f.W(\'3t\',7.8.e.f.J||7.8.e.I.J)}}c(7.8.e.I.E>0){7.d.h.1M(\'.g-2k\').F({7X:7.8.e.I.J});c($(\'<1f />\').1q(0).1E){2j=4e(7.8.e.I.E);7.d.h.1M(\'.g-1t 1f\').1L(j(){1n=$(A).1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=$(A).3O(\'12[1S]:1R\').W(\'1S\');46.S(7,$(A),2j[w],7.8.e.I.E,7.8.e.I.J)})}C c($.16.1d){7.d.h.1M(\'.g-1t [5E="3p"]\').1L(j(){$(A).W(\'3t\',7.8.e.I.J)})}}B 7},4A:j(u,5F){R 36,37,4K;j 4J(){7.4d();c(5F!==p){c(7.8.k.17!==\'29\'){7.2h(7.d.h.2r(\':28\'),H)}c(7.8.e.f.w!==p){42.S(7)}}}c(!u){B p}36=7.54.S(7,u);c(P 36===\'1w\'){u=36}C c(36===p){B}c(7.V.1b){c($.16.1d){7.d.1y.2w().F({2f:\'7Z\'})}c(u.4r&&u.Q>0){u.5V(H).5P(7.d.u).q()}C{7.d.u.2l(u)}37=7.d.u.1M(\'4U[6O=p]\');c(37.Q>0){4K=0;37.1L(j(i){$(\'<4U 4T="\'+$(A).W(\'4T\')+\'" />\').7D(j(){c(++4K===37.Q){4J()}})})}C{4J()}}C{7.8.u.1m=u}7.4Y.S(7);B 7},5Z:j(1x,Y,2A){R 1c;j 4D(u){7.63.S(7);7.4A(u)}c(!7.V.1b){B p}1c=7.51.S(7);c(1c===p){B 7}c(2A===\'60\'){$.60(1x,Y,4D)}C{$.1q(1x,Y,4D)}B 7},5W:j(u){R 1c;c(!7.V.1b||!u){B p}1c=7.64.S(7);c(1c===p){B 7}c(7.d.1i){7.d.1i=7.d.1i.5V(H)}7.d.U.2l(u);c(7.d.1i){7.d.U.3B(7.d.1i)}7.65.S(7);B 7},2E:j(r){R 4B,3F,3y,1c;c(!7.V.1b||7.8.k.17===\'29\'){B p}4B=1A(7.d.h.F(\'z-3s\'),10);3F=7u+$(\'12.g[11^="g"]\').Q-1;c(!7.V.3Z&&4B!==3F){1c=7.5H.S(7,r);c(1c===p){B 7}$(\'12.g[11^="g"]\').5S(7.d.h).1L(j(){c($(A).g(\'T\').V.1b===H){3y=1A($(A).F(\'z-3s\'),10);c(P 3y===\'2s\'&&3y>-1){$(A).F({68:1A($(A).F(\'z-3s\'),10)-1})}$(A).g(\'T\').V.3Z=p}});7.d.h.F({68:3F});7.V.3Z=H;7.5C.S(7,r)}B 7},3X:j(38){7.V.23=38?H:p;B 7},3f:j(){R i,1c,O,4z=7.d.s.Y(\'4p\'+7.1v.W[0]);1c=7.61.S(7);c(1c===p){B 7}c(7.V.1b){7.8.q.L.s.1O(\'4C.g\',7.2h);7.8.q.L.s.1O(\'4x.g\',7.D);7.8.q.L.s.1O(7.8.q.L.r+\'.g\');7.8.D.L.s.1O(7.8.D.L.r+\'.g\');7.d.h.1O(7.8.D.L.r+\'.g\');7.d.h.1O(\'35.g\',7.2E);7.d.h.3W()}C{7.8.q.L.s.1O(7.8.q.L.r+\'.g-\'+7.11+\'-4m\')}c(P 7.d.s.Y(\'g\')===\'19\'){O=7.d.s.Y(\'g\').O;c(P O===\'19\'&&O.Q>0){1V(i=0;i<O.Q-1;i++){c(O[i].11===7.11){O.5X(i,1)}}}}$.18.g.O.5X(7.11,1);c(P O===\'19\'&&O.Q>0){7.d.s.Y(\'g\').3k=O.Q-1}C{7.d.s.73(\'g\')}c(4z){7.d.s.W(7.1v.W[0],4z)}7.62.S(7);B 7.d.s},72:j(){R q,1k;c(!7.V.1b){B p}q=(7.d.h.F(\'2a\')!==\'3a\')?p:H;c(q){7.d.h.F({3V:\'1F\'}).q()}1k=7.d.h.1k();c(q){7.d.h.F({3V:\'28\'}).D()}B 1k},3d:j(){R q,2t;c(!7.V.1b){B p}q=(!7.d.h.2r(\':28\'))?H:p;c(q){7.d.h.F({3V:\'1F\'}).q()}2t={G:7.d.h.48(),o:7.d.h.47()};c(q){7.d.h.F({3V:\'28\'}).D()}B 2t}})}$.18.g=j(8,41){R i,11,O,20,2c,1T,15,T;c(P 8===\'1w\'){c($(A).Y(\'g\')){c(8===\'T\'){B $(A).Y(\'g\').O[$(A).Y(\'g\').3k]}C c(8===\'O\'){B $(A).Y(\'g\').O}}C{B $(A)}}C{c(!8){8={}}c(P 8.u!==\'19\'||(8.u.4r&&8.u.Q>0)){8.u={1m:8.u}}c(P 8.u.U!==\'19\'){8.u.U={1m:8.u.U}}c(P 8.k!==\'19\'){8.k={w:8.k}}c(P 8.k.w!==\'19\'){8.k.w={s:8.k.w,h:8.k.w}}c(P 8.q!==\'19\'){8.q={L:8.q}}c(P 8.q.L!==\'19\'){8.q.L={r:8.q.L}}c(P 8.q.Z!==\'19\'){8.q.Z={17:8.q.Z}}c(P 8.D!==\'19\'){8.D={L:8.D}}c(P 8.D.L!==\'19\'){8.D.L={r:8.D.L}}c(P 8.D.Z!==\'19\'){8.D.Z={17:8.D.Z}}c(P 8.e!==\'19\'){8.e={21:8.e}}8.e=4i(8.e);20=$.2p(H,{},$.18.g.39,8);20.e=4l.S({8:20},20.e);20.4v=$.2p(H,{},8)}B $(A).1L(j(){R 7=$(A),u=p;c(P 8===\'1w\'){1T=8.2F();O=$(A).g(\'O\');c(P O===\'19\'){c(41===H&&1T===\'3f\'){1V(i=O.Q-1;i>-1;i--){c(\'19\'===P O[i]){O[i].3f()}}}C{c(41!==H){O=[$(A).g(\'T\')]}1V(i=0;i<O.Q;i++){c(1T===\'3f\'){O[i].3f()}C c(O[i].V.1b===H){c(1T===\'q\'){O[i].q()}C c(1T===\'D\'){O[i].D()}C c(1T===\'2E\'){O[i].2E()}C c(1T===\'3X\'){O[i].3X(H)}C c(1T===\'71\'){O[i].3X(p)}C c(1T===\'7v\'){O[i].2h()}}}}}}C{15=$.2p(H,{},20);15.D.Z.Q=20.D.Z.Q;15.q.Z.Q=20.q.Z.Q;c(15.k.3U===p){15.k.3U=$(31.4X)}c(15.k.s===p){15.k.s=$(A)}c(15.q.L.s===p){15.q.L.s=$(A)}c(15.D.L.s===p){15.D.L.s=$(A)}15.k.w.h=2T 2D(15.k.w.h);15.k.w.s=2T 2D(15.k.w.s);c(!15.u.1m.Q){$([\'U\',\'6b\']).1L(j(i,W){R 2C=7.W(W);c(2C&&2C.Q){u=[W,2C];7.Y(\'4p\'+W,2C).74(W);15.u.1m=2C.3l(/\\n/75,\'<78 />\');B p}})}11=$.18.g.O.Q;1V(i=0;i<11;i++){c(P $.18.g.O[i]===\'5i\'){11=i;1C}}2c=2T 56($(A),15,11);$.18.g.O[11]=2c;2c.1v.W=u;c(P $(A).Y(\'g\')===\'19\'&&$(A).Y(\'g\')){c(P $(A).W(\'g\')===\'5i\'){$(A).Y(\'g\').3k=$(A).Y(\'g\').O.Q}$(A).Y(\'g\').O.5h(2c)}C{$(A).Y(\'g\',{3k:0,O:[2c]})}c(15.u.5w===p&&15.q.L.r!==p&&15.q.3x!==H){15.q.L.s.1J(15.q.L.r+\'.g-\'+11+\'-4m\',{g:11},j(r){T=$.18.g.O[r.Y.g];T.8.q.L.s.1O(T.8.q.L.r+\'.g-\'+r.Y.g+\'-4m\');T.1v.1K={M:r.3Y,K:r.4c};4w.S(T);T.8.q.L.s.77(T.8.q.L.r)})}C{2c.1v.1K={M:15.q.L.s.1k().M,K:15.q.L.s.1k().K};4w.S(2c)}}})};$.18.g.O=[];$.18.g.18={W:$.18.W};$.18.W=j(W){R T=$(A).g(\'T\');B(3b.Q===1&&(/U|6b/i).1Y(W)&&T.V&&T.V.1b===H)?$(A).Y(\'4p\'+T.1v.W[0]):$.18.g.18.W.4s(A,3b)};$.18.g.39={u:{5w:p,1m:p,1x:p,Y:1z,U:{1m:p,1i:p}},k:{s:p,w:{s:\'3P\',h:\'3K\'},1e:{x:0,y:0,1K:H,55:p,3E:H,3L:H,1k:p},17:\'34\',3U:p},q:{L:{s:p,r:\'35\'},Z:{17:\'3w\',Q:5T},2V:76,1X:p,3x:p},D:{L:{s:p,r:\'4x\'},Z:{17:\'3w\',Q:5T},2V:0,3g:p},T:{5J:j(){},5f:j(){},57:j(){},5c:j(){},5n:j(){},5q:j(){},5A:j(){},4Z:j(){},54:j(){},4Y:j(){},51:j(){},63:j(){},64:j(){},65:j(){},61:j(){},62:j(){},5H:j(){},5C:j(){}}};$.18.g.3c={39:{1s:\'66\',J:\'#6Z\',2u:\'1F\',6Y:\'M\',o:{2b:0,1H:6S},2x:\'6R 6Q\',I:{o:1,E:0,J:\'#6P\'},f:{w:p,J:p,N:{o:13,G:13},2B:1},U:{1s:\'#6T\',6U:\'6X\',2x:\'6W 6V\'},1i:{79:\'7a\'},1g:{s:\'\',f:\'g-f\',U:\'g-U\',1i:\'g-1i\',u:\'g-u\',3T:\'g-3T\'}},5L:{I:{o:3,E:0,J:\'#7o\'},U:{1s:\'#7n\',J:\'#5M\'},1s:\'#7m\',J:\'#5M\',1g:{h:\'g-5L\'}},6d:{I:{o:3,E:0,J:\'#7p\'},U:{1s:\'#7q\',J:\'#6c\'},1s:\'66\',J:\'#6c\',1g:{h:\'g-6d\'}},69:{I:{o:3,E:0,J:\'#7t\'},U:{1s:\'#7s\',J:\'#67\'},1s:\'#7r\',J:\'#67\',1g:{h:\'g-69\'}},4H:{I:{o:3,E:0,J:\'#7l\'},U:{1s:\'#7k\',J:\'#6g\'},1s:\'#7e\',J:\'#6g\',1g:{h:\'g-4H\'}},52:{I:{o:3,E:0,J:\'#7d\'},U:{1s:\'#7c\',J:\'#4W\'},1s:\'#7b\',J:\'#4W\',1g:{h:\'g-52\'}},5k:{I:{o:3,E:0,J:\'#7f\'},U:{1s:\'#7g\',J:\'#7j\'},1s:\'#7i\',J:\'#7h\',1g:{h:\'g-5k\'}}}}(82));',62,499,'|||||||self|options||||if|elements|style|tip|qtip|tooltip||function|position||||width|false|show|event|target||content||corner||||this|return|else|hide|radius|css|height|true|border|color|top|when|left|size|interfaces|typeof|length|var|call|api|title|status|attr|coordinates|data|effect||id|div||coords|config|browser|type|fn|object|px|rendered|returned|msie|adjust|canvas|classes|adj|button|center|offset|targetHeight|text|context|my|targetWidth|get|newWidth|background|wrapper|Math|cache|string|url|contentWrapper|null|parseInt|1px|break|finalStyle|getContext|hidden|timers|max|class|bind|mouse|each|find|tips|unbind|ieAdjust|containers|first|rel|command|posOptions|for|inactive|solo|test|case|opts|name|bgiframe|disabled|positionAdjust|right|bottom|imagePos|visible|static|display|min|obj||window|zoom|clearTimeout|updatePosition|hideTarget|borders|betweenCorners|html|add|adapted|path|extend|margin|is|number|dimensions|overflow|styleExtend|children|padding|precedance|90|method|opacity|val|Corner|focus|toLowerCase|jQueryStyle|charAt|toggle|myOffset|afterHide|default|afterShow|atOffset|borderAdjust|elemHeight|elemWidth|at|line|new|styleObj|delay|adjusted|version|font|value|topEdge|document|pBottom|bottomEdge|absolute|mouseover|parsedContent|images|state|defaults|none|arguments|styles|getDimensions|borderTop|destroy|fixed|showTarget|borderBottom|leftEdge|current|replace|pRight|rightEdge|align|arc|solid|aria|index|fillcolor|inactiveEvents|inactiveMethod|fade|ready|elemIndex|delete|styleArray|prepend|image|scrollLeft|scroll|newIndex|scrollTop|floor|behavior|coordsize|topLeft|resize|shape|300|parent|bottomRight|newMargin|VML|stop|active|container|visiblity|remove|disable|pageX|focused|topRight|blanket|positionTip|removeAttribute|createTip|adapt|drawBorder|outerWidth|outerHeight|marginTop|ieStyle|sub|pageY|updateWidth|calculateBorders|ltr|borderCoord|paddingSize|sanitizeStyle|animated|dir|buildStyle|create|paddingCorner|animate|old|sideWidth|jquery|apply|calculateTip|drawTip|user|construct|mouseout|relative|oldattr|updateContent|curIndex|mousemove|setupContent|block|offsetParent|vertWidth|red|bottomLeft|afterLoad|loadedImages|mapName|setTimeout|switch|betweenWidth|hideMethod|vertical|unfocus|showMethod|src|img|ceil|58792E|body|onContentUpdate|onHide||beforeContentLoad|green|inline|beforeContentUpdate|screen|QTip|beforePositionUpdate|prependTo|createBorder|String|createTitle|onPositionUpdate|click|role|onRender|parents|push|undefined|mouseenter|blue|assignEvents|filter|beforeShow|slide|grow|onShow|condition|append|dequeue|queue|addClass|prerender|middle|match|abs|beforeHide|bottomright|onFocus|270|nodeName|reposition|fillStyle|beforeFocus|clearRect|beforeRender|topright|cream|A27D35|topleft|unshift|appendTo|lineTo|in|not|100|beginPath|clone|updateTitle|splice|fill|loadContent|post|beforeDestroy|onDestroy|onContentLoad|beforeTitleUpdate|onTitleUpdate|white|f3f3f3|zIndex|dark|bottomleft|alt|454545|light|auto|stroked|9C2F2F|dblclick|rightcenter|mouseup|mousedown|mouseleave|Right|Left|moveTo|filled|out|endangle|startangle|use|strict|bottomcenter|qtipSelector|leftbottom|topcenter|righttop|leave|eq|rightbottom|0px|labelledby|while|float|borderWidth|xe|leftcenter|marginLeft|search|lefttop|PI|complete|d3d3d3|9px|5px|250|e1e1e1|fontWeight|12px|7px|bold|textAlign|111|relatedTarget|enable|getPosition|removeData|removeAttr|gi|140|trigger|br|cursor|pointer|CDE6AC|b9db8c|A9DB66|F79992|ADD9ED|D0E9F5|4D9FBF|E5F6FE|5E99BD|f28279|CE6F6F|FBF7AA|F0DE7D|F9E98E|E2E2E2|f1f1f1|505050|404040|303030|15000|update|boolean|removeClass|slideUp|fadeOut|area|split|circle|load|usemap|map|slideDown|fadeIn|frameborder|iframe|preventDefault|stopPropagation|tabindex|javascript|webkit|moz|describedby|alpha|poly|rect|borderColor|200|siblings|backgroundColor|updateStyle|normal|swing|10000000em|jQuery'.split('|'),0,{}))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/js/projectscontents.js Tue Sep 14 13:38:47 2010 +0200
@@ -0,0 +1,208 @@
+$.fn.realVal = function() {
+ var obj = $(this[0]);
+ if(obj.val) {
+ if(obj.val() == obj.attr('defaultText')) {
+ return '';
+ }
+ else {
+ return obj.val();
+ }
+ }
+ else {
+ return null;
+ }
+};
+
+function init_events_base(base_node, embed_url) {
+
+ $('.ldt_link',base_node).nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ windowResize: false,
+ height:662,
+ width:1022,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ titleFromIframe: false
+ });
+
+ $('.ldt_link_create',base_node).nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ windowResize: false,
+ height:680,
+ width:500,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ titleFromIframe: false,
+ beforeHideContent: function(elts, settings, callback){
+ try {
+ var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
+ if(res.length > 0)
+ {
+ res.get(0).forceSave();
+ }
+ }
+ catch(err)
+ {
+ // do nothing
+ }
+ callback();
+ },
+ endShowContent: function(elts, settings){
+ var iframe = $('#nyroModalIframe', elts.content);
+ iframe.load(function(){
+ var swfobject = $(this).contents().find("#ldtInitSwf");
+ if (swfobject.length) {
+ $.nyroModalSettings({
+ height: swfobject.height() + 31,
+ width: swfobject.width() + 21
+ });
+ }
+ });
+ }
+ });
+
+ $('.ldt_link_embed',base_node).click(function(e) {
+ e.preventDefault();
+ var link = $(e.target);
+ var json_url = link.attr("href");
+ var player_id = link.attr("id");
+ /*$.nyroModalSettings({
+ ajax: { data: ({ json_url:json_url, player_id:player_id }) }
+ });*/
+ $.nyroModalManual({
+ type: 'iframe',
+ forceType: 'iframe',
+ titleFromIframe: false,
+ height:662,
+ width:650,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ url: embed_url+'?json_url='+escape(json_url)+'&player_id='+escape(player_id),
+ });
+ return false;
+ });
+
+
+ $('.imageline',base_node).each(function(i) {
+ var tr = $(this);
+ tr.mouseover(function() {
+ $('.cellimgdiv',this).css('visibility', 'visible');
+ });
+ tr.mouseout(function() {
+ $('.cellimgdiv',this).css('visibility', 'hidden');
+ });
+ });
+
+ $('.cellimgdiv img').qtip({
+ style: {
+ 'name': 'dark',
+ 'filter':'alpha(opacity=70)',
+ '-moz-opacity':'0.7',
+ '-khtml-opacity': '0.7',
+ 'opacity': '0.7',
+ 'border': {
+ 'width' : '0',
+ 'color': '#505050',
+ },
+ 'tip': true
+ }
+ });
+
+
+};
+
+
+function searchCallback(target, container_selector, url, timeout) {
+
+ timeout = typeof(timeout) != 'undefined' ? timeout : 0;
+ var target = $(target);
+
+ if(target.attr('timer')) {
+ clearTimeout(target.attr('timer'));
+ }
+
+ target.attr('timer',setTimeout(function() {
+ target.next(".searchajaxloader").show();
+ url = url.replace('__FILTER__',escape($(target).realVal()));
+ $(container_selector).load(url, null, function() {
+ target.next(".searchajaxloader").hide();
+ init_events($(container_selector));
+ target.removeAttr('timer');
+ });
+ },
+ 300));
+};
+
+
+function init_events_contents(base_node, embed_url) {
+
+ init_events_base(base_node, embed_url);
+
+ $('.content_link_create').nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ height:500,
+ width:765,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ titleFromIframe: false,
+ endRemove: function(elts, settings) {
+ searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url)
+ },
+ endShowContent: function(elts, settings) {
+ $('#nyroModalIframe', elts.content).load(function() {
+ var form_status = $(this).contents().find("#content_form_status").val();
+ if(form_status == 'saved') {
+ $.nyroModalRemove();
+ }
+ });
+ }
+ });
+
+}
+
+
+
+function searchFieldInit(input_list_init) {
+
+ $(".searchfieldinputbase").keydown(function (e) {
+ if(e.which == 27) {
+ $(e.target).blur();
+ $(e.target).next(".searchajaxloader").hide();
+ }
+ });
+
+
+ $('.searchfieldinput').each(function(i) {
+ var sbox = $(this);
+ if(sbox.val() != '') {
+ sbox.attr('defaultText', sbox.val());
+ }
+
+ sbox.focus(function() {
+ box = $(this);
+ if(box.val() == box.attr('defaultText')) {
+ box.val('');
+ box.toggleClass("searchfieldinput");
+ }
+ });
+
+ sbox.blur(function() {
+ var box = $(this);
+ if(box.val() == '' && box.attr('defaultText')) {
+ box.val(box.attr('defaultText'));
+ box.toggleClass("searchfieldinput");
+ }
+ });
+
+ });
+
+ $.each(input_list_init, function(index, value) {
+ $(value['input_selector']).keyup(function (e) {
+ searchCallback(e.target, value['container_selector'], value['url']);
+ });
+ });
+
+}