--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/update_db_0_10_to_0_11.sql Sat Sep 11 01:18:28 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;
--- a/web/franceculture/settings.py Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/settings.py Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/templates/base.html Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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="{% url ldt.ldt_utils.views.copy_project project.ldt_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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/templates/franceculture/workspace.html Sat Sep 11 01:18:28 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);
+
+}
- $('.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 Sat Sep 11 01:18:28 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);
+}
+
+$(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 Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,58 @@
+{% 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 %}
+ </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 Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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);
+
+ $('.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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/templates/ldt/user/login_form.html Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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/urls.py Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/urls.py Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/views.py Sat Sep 11 01:18:28 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/forms/widgets.py Sat Sep 11 01:18:28 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/forms.py Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/forms.py Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/models.py Sat Sep 11 01:18:28 2010 +0200
@@ -2,7 +2,7 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from ldt.core.models import Document, Owner
-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
@@ -19,17 +19,18 @@
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:
@@ -47,6 +48,7 @@
#TODO: better manage the change in .iri name and error scenario (save in temp file + rename
def save(self, *args, **kwargs):
+
# create iri file if needed
created = False
try:
@@ -67,6 +69,7 @@
if os.path.exists(iri_file_path):
os.remove(iri_file_path)
raise e
+
# update it
super(Content, self).save(*args, **kwargs)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/content_list.html Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/ldt_list.html Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/urls.py Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/utils.py Sat Sep 11 01:18:28 2010 +0200
@@ -14,6 +14,26 @@
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):
def query(self, field, query):
--- a/web/ldt/ldt_utils/views.py Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/views.py Sat Sep 11 01:18:28 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/media/css/dashboard.css Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/dashboard.css Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,4 @@
+@charset "UTF-8";
#content-main-app-ldt-utils {
float: left;
--- a/web/ldt/media/css/ldt.css Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/ldt.css Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#addldtform
{
font-size: 16px;
--- a/web/ldt/media/css/style.css Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/style.css Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/style_base.css Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
body
{ font-family: Arial, Helvetica, sans serif;
padding: 0px;
--- a/web/ldt/settings.py Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/settings.py Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/LdtPlayer.css Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/custom_player.css Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,103 @@
+@charset "UTF-8";
+
+#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 : 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/nyroModal.css Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/style.css Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/workspace.css Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 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 Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,194 @@
+$.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) {
+
+ $('.ldt_link',base_node).nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ height:662,
+ width:1022,
+ bgColor: 'rgb(239, 239, 239)',
+ padding: 5,
+ titleFromIframe: false
+ });
+
+ $('.ldt_link_create',base_node).nyroModal({
+ type: 'iframe',
+ forceType: 'iframe',
+ 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();
+ }
+ });
+
+ $('.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: '{% url franceculture.views.popup_embed %}?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) {
+
+ init_events_base(base_node);
+
+ $('.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']);
+ });
+ });
+
+}