--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/.htaccess.tmpl Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,11 @@
+SetHandler python-program
+PythonPath "['D:/wuj/dev/ldt', 'D:/wuj/dev/ldt/lib'] + sys.path"
+PythonHandler django.core.handlers.modpython
+SetEnv DJANGO_SETTINGS_MODULE ldt.settings
+SetEnv PY_USE_XMLPLUS true
+PythonInterpreter ldt
+PythonOption django.root /dev/ldt/ldt
+PythonDebug on
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/__init__.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,3 @@
+VERSION = (0,1)
+
+VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/admin.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,30 @@
+from django.contrib import admin
+from ldt.management import test_cms
+
+"""
+site admin pour cms page
+"""
+if test_cms():
+ class AdminSite(admin.AdminSite):
+ index_template = 'admin/page_index.html'
+ login_template = 'admin/page_login.html'
+ app_index_template = 'admin/page_app_index.html'
+
+ admin_site = AdminSite()
+
+ from cms.models import Page
+ from cms.admin import pageadmin
+
+ class CmsPageAdmin(pageadmin.PageAdmin):
+ change_list_template = "admin/cms_change_list.html"
+ change_form_template = "admin/cms_change_form.html"
+
+ admin_site.register(Page, CmsPageAdmin)
+
+ from cms.plugins.snippet.models import Snippet
+ from cms.plugins.snippet.admin import SnippetAdmin
+
+ class CmsSnippetAdmin(SnippetAdmin):
+ change_form_template = "admin/page_change_form.html"
+ change_list_template = "admin/page_change_list.html"
+ admin_site.register(Snippet, CmsSnippetAdmin)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/core/handlers/modpython.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,8 @@
+
+def handler(req):
+ activate_this = req.get_options().get("virtualenv.activate_path")
+ execfile(activate_this, dict(__file__=activate_this))
+
+ import django.core.handlers.modpython
+
+ return django.core.handlers.modpython.handler(req)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/core/models.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,22 @@
+from django.db import models
+from django.contrib.auth.models import *
+
+
+class Owner(models.Model):
+ user = models.ForeignKey(User, blank=True, null=True)
+ group = models.ForeignKey(Group, blank=True, null=True)
+
+ def __unicode__(self):
+ if self.user:
+ return self.user.username
+ else:
+ return self.group.name
+
+
+class Document(models.Model):
+ owner= models.ForeignKey(Owner, blank = True, null=True)
+
+ class Meta:
+ abstract = True
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/core/tests.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,23 @@
+"""
+This file demonstrates two different styles of tests (one doctest and one
+unittest). These will both pass when you run "manage.py test".
+
+Replace these with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+class SimpleTest(TestCase):
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.failUnlessEqual(1 + 1, 2)
+
+__test__ = {"doctest": """
+Another way to test that 1 + 1 is equal to 2.
+
+>>> 1 + 1 == 2
+True
+"""}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/core/views.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,1 @@
+# Create your views here.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/__init__.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,15 @@
+import lucene
+from django.conf import settings
+
+lucene.initVM(lucene.CLASSPATH)
+
+STORE = lucene.SimpleFSDirectory(lucene.File(settings.INDEX_PATH))
+ANALYZER = lucene.PerFieldAnalyzerWrapper(lucene.StandardAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("tags",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("title",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("abstract",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("all",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+
+
+VERSION = (0,1)
+VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/admin.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,80 @@
+from django.contrib import admin
+from django.conf.urls.defaults import *
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.conf import settings
+from models import *
+from forms import *
+from fileimport import *
+from ldt.ldt_utils import STORE
+from ldt.ldt_utils import ANALYZER
+
+import lucene
+
+admin.site.register(Project)
+
+class ContentAdmin(admin.ModelAdmin):
+
+ def import_file(self, request):
+ if request.method =='POST':
+ form = LdtImportForm(request.POST, request.FILES)
+ if form.is_valid():
+ filetoprocess =form.cleaned_data['importFile']
+ flatten = form.cleaned_data['flatten']
+ videoPath = form.cleaned_data['videoPath']
+ # fi = None
+ fi = FileImport(filetoprocess, videoPath, flatten)
+ try:
+ fi.processFile()
+ args = {'message': "File imported"}
+ except FileImportError:
+ non_field_errors = form.non_field_errors()
+ non_field_errors.append("Error when importing : unknown file type")
+ form._errors["__all__"] = non_field_errors
+ args = {'message': "Can not import file, unknown file type", 'form': form}
+
+ else:
+ non_field_errors = form.non_field_errors()
+ non_field_errors.append("Error when importing : invalid form")
+ form._errors["__all__"] = non_field_errors
+ args = {'message': "Error when importing : invalid form", 'form': form}
+ else:
+ form = LdtImportForm()
+ args = {'form': form, 'current_app': self.admin_site.name, 'current_action' : 'import_file'}
+ return render_to_response('admin/ldt/content/upload_form.html', args, context_instance=RequestContext(request))
+
+ def reindex(self, request):
+ message = None
+ if request.method == "POST":
+ form = ReindexForm(request.POST)
+ if form.is_valid():
+ # try:
+ writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
+ contentList = form.cleaned_data["contents"]
+ indexer = ContentIndexer(contentList,writer)
+ indexer.index_all()
+
+ writer.close()
+ message = "Indexation ok : " + repr(form.cleaned_data["contents"])
+ form = ReindexForm()
+ # except Exception, inst:
+ # non_field_errors = form.non_field_errors()
+ # non_field_errors.append("Error when reindexing : " + cgi.escape(repr(inst)))
+ # form._errors["__all__"] = non_field_errors
+ #message = "ERROR : " + repr(non_field_errors)
+ else:
+ form = ReindexForm()
+
+ return render_to_response('admin/ldt/content/reindex_form.html', {'form': form, 'message':message, 'current_app': self.admin_site.name, 'current_action' : 'reindex' }, context_instance=RequestContext(request))
+
+ def get_urls(self):
+ urls = super(ContentAdmin, self).get_urls()
+ content_urls = patterns('',
+ url(r'^reindex/$', self.admin_site.admin_view(self.reindex), name="ldt_content_reindex"),
+ # (r'^admin/ldt/content/import/upload/$', 'ldt.ldt_utils.views.uploadFile'),
+ url(r'^import/$', self.admin_site.admin_view(self.import_file), name="ldt_content_import_file")
+ )
+ return content_urls + urls
+
+
+admin.site.register(Content, ContentAdmin)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/contentindexer.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,238 @@
+import tempfile
+import os
+import os.path
+import shutil
+from ldt.utils import zipfileext
+import urllib
+# import ldt.utils.log
+import ldt.utils.xml
+from django.conf import settings
+from models import Content
+import xml
+import xml.dom
+import xml.dom.minidom
+import xml.dom.ext
+import xml.xpath
+import fnmatch
+import Ft
+import uuid
+import shutil
+import lucene
+from ldt.ldt_utils import STORE
+from ldt.ldt_utils import ANALYZER
+
+def Property(func):
+ return property(**func())
+
+
+class ContentIndexer(object):
+
+ def __init__(self, contentList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
+ self.__contentList = contentList
+ self.__decoupage_blacklist = decoupage_blackList
+ self.__writer = writer
+
+ @Property
+ def decoupage_blacklist(): #@NoSelf
+ doc = """get blacklist""" #@UnusedVariable
+
+ def fget(self):
+ if self.__decoupage_blacklist is None:
+ self.__decoupage_blacklist = ()
+ return self.__decoupage_blacklist
+
+ def fset(self, value):
+ self.__decoupage_blacklist = value
+
+ def fdel(self):
+ del self.__decoupage_blacklist
+
+ return locals()
+
+ def index_all(self):
+ for content in self.__contentList:
+ self.index_content(content)
+
+ def index_content(self, content):
+ url =content.iri_url()
+ filepath = urllib.urlopen(url)
+ doc = xml.dom.minidom.parse(filepath)
+ doc = Ft.Xml.Domlette.ConvertDocument(doc)
+
+ self.__writer.deleteDocuments(lucene.Term("iri_id", content.iri_id))
+
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble", context=con)
+
+ for ensemble in res:
+ ensembleId = ensemble.getAttributeNS("id",None)
+
+ for decoupageNode in ensemble.childNodes:
+ if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage" or decoupageNode.getAttributeNS("id",None) in self.decoupage_blacklist:
+ continue
+
+ decoupId = decoupageNode.getAttributeNS("id",None)
+ res = xml.xpath.Evaluate("elements/element", decoupageNode)
+ for elementNode in res:
+ doc = lucene.Document()
+ elementId = elementNode.getAttributeNS("id",None)
+ tags = elementNode.getAttributeNS("tags",None)
+
+ if tags is not None:
+ tags.replace(",", ";")
+
+ if tags is None or len(tags) == 0:
+ tags = ""
+ restagnode = xml.xpath.Evaluate("tag/text()", elementNode)
+ for tagnode in restagnode:
+ tags = tags + " ; " + tagnode.data
+
+ if tags is None or len(tags) == 0:
+ tags = ""
+ restagnode = xml.xpath.Evaluate("tags/tag/text()", elementNode)
+ for tagnode in restagnode:
+ tags = tags + " ; " + tagnode.data
+
+ title = ""
+ for txtRes in xml.xpath.Evaluate("title/text()", elementNode):
+ title = title + txtRes.data
+
+ abstract = ""
+ for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode):
+ abstract = abstract + txtRes.data
+
+ doc.add(lucene.Field("iri_id", content.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
+ doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+
+ seg = Segment(content=content,
+ iri_id=content.iri_id,
+ ensemble_id=ensembleId,
+ cutting_id=decoupId,
+ element_id=elementId,
+ tags=tags,
+ title=title,
+ abstract=abstract,
+ duration=duration,
+ author=author,
+ start_ts=start_ts,
+ date=date_str)
+ seg.save()
+
+
+ self.__writer.addDocument(doc)
+
+ self.__writer.commit()
+
+
+class ProjectIndexer(object):
+
+ def __init__(self, projectList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
+ self.__projectList = projectList
+ self.__decoupage_blacklist = decoupage_blackList
+ self.__writer = writer
+
+ @Property
+ def decoupage_blacklist(): #@NoSelf
+ doc = """get blacklist""" #@UnusedVariable
+
+ def fget(self):
+ if self.__decoupage_blacklist is None:
+ self.__decoupage_blacklist = ()
+ return self.__decoupage_blacklist
+
+ def fset(self, value):
+ self.__decoupage_blacklist = value
+
+ def fdel(self):
+ del self.__decoupage_blacklist
+
+ return locals()
+
+ def index_all(self):
+ for project in self.__projectList:
+ self.index_project(project)
+
+ def index_project(self, project):
+
+ # pocketfilms.utils.log.debug("Indexing project : "+str(project.iri_id))
+ doc = xml.dom.minidom.parseString(project.ldt)
+ doc = Ft.Xml.Domlette.ConvertDocument(doc)
+
+ self.__writer.deleteDocuments(lucene.Term("iri_id", project.iri_id))
+
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+
+ for content in res:
+ contentId = content.getAttributeNS("id",None)
+
+ ensembleId = "ens_perso"
+
+ for decoupageNode in content.childNodes:
+ # pocketfilms.utils.log.debug("Indexing content decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
+ if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage" or decoupageNode.getAttributeNS("id",None) in self.decoupage_blacklist:
+ continue
+
+ decoupId = decoupageNode.getAttributeNS("id",None)
+ res = xml.xpath.Evaluate("elements/element", decoupageNode)
+ for elementNode in res:
+ doc = lucene.Document()
+ elementId = elementNode.getAttributeNS("id",None)
+ tags = elementNode.getAttributeNS("tags",None)
+
+ if tags is not None:
+ tags.replace(",", ";")
+
+ if tags is None or len(tags) == 0:
+ tags = ""
+ restagnode = xml.xpath.Evaluate("tag/text()", elementNode)
+ for tagnode in restagnode:
+ tags = tags + " ; " + tagnode.data
+
+ if tags is None or len(tags) == 0:
+ tags = ""
+ restagnode = xml.xpath.Evaluate("tags/tag/text()", elementNode)
+ for tagnode in restagnode:
+ tags = tags + " ; " + tagnode.data
+
+ title = ""
+ for txtRes in xml.xpath.Evaluate("title/text()", elementNode):
+ title = title + txtRes.data
+
+ abstract = ""
+ for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode):
+ abstract = abstract + txtRes.data
+
+ doc.add(lucene.Field("project_id", project.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
+ doc.add(lucene.Field("iri_id", contentId, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
+ doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+
+ seg = Segment(content=content,
+ iri_id=content.iri_id,
+ ensemble_id=ensembleId,
+ cutting_id=decoupId,
+ element_id=elementId,
+ tags=tags,
+ title=title,
+ abstract=abstract,
+ duration=duration,
+ author=author,
+ start_ts=start_ts,
+ date=date_str)
+ seg.save()
+
+ self.__writer.addDocument(doc)
+
+ self.__writer.commit()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/fileimport.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,379 @@
+import tempfile
+import os.path
+import shutil
+from django.core.exceptions import ObjectDoesNotExist
+from ldt.utils import zipfileext
+from django.conf import settings
+from models import Content
+import xml.dom.minidom
+import xml.dom.ext #@UnresolvedImport
+import xml.xpath #@UnresolvedImport
+import fnmatch
+import uuid
+import urllib
+
+class FileImportError(Exception):
+ def __init__(self, value):
+ self.value = value
+ def __str__(self):
+ return repr(self.value)
+
+
+def Property(func):
+ return property(**func())
+
+class IriInfo(object):
+
+
+ def __init__(self, id, order, titledesc, basepath="", videopath=settings.STREAM_URL, decoupage_blacklist = settings.DECOUPAGE_BLACKLIST, flatten = True):
+ self.id = id
+ self.basepath = basepath
+ self.order = order
+ self.src = ""
+ self.annotations = None
+ self.videopath = videopath
+ self.videourl = ""
+ self.title = None
+ self.desc = None
+ self.duration = None
+ self.created = False
+ self.content = None
+ self.decoupage_blacklist = decoupage_blacklist
+ if self.decoupage_blacklist is None:
+ self.decoupage_blacklist = ()
+ self.flatten = flatten
+
+
+
+ def processIri(self):
+ # for just import a file ldt and get the title for every media
+ if 'http' in self.src:
+ url = urllib.urlopen(self.src)
+ doc = xml.dom.minidom.parse(url)
+ doc = Ft.Xml.Domlette.ConvertDocument(doc)
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ #open .iri and get the title
+ res = xml.xpath.Evaluate("/iri/head/meta[@name='title']/@content", context=con)
+ self.title = res[0].value
+
+ #for import a zip, get title and copy file .iri in the media directory
+ else:
+ path = os.path.join(self.basepath, self.src)
+ doc = xml.dom.minidom.parse(path)
+
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+
+ res = xml.xpath.Evaluate("/iri/head/meta[@name='title']/@content", context=con)
+ self.title = res[0].value
+
+ res = xml.xpath.Evaluate("/iri/body/ensembles",context=con)
+ ensemblesnode = res[0]
+
+ ensembleids = []
+
+ for node in ensemblesnode.childNodes:
+ if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
+ id = node.getAttributeNS("id",None)
+ if id not in ensembleids:
+ ensembleids.append(id)
+
+ if self.annotations is not None:
+ newEnsemble = None
+ for cnode in self.annotations.childNodes:
+ if cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "decoupage":
+ if newEnsemble is None:
+ newensemble = doc.createElement('ensemble')
+ ensembleid = self.id+"_"+str(uuid.uuid1())
+ newensemble.setAttributeNS(None,'id',ensembleid)
+
+ newensemble.setAttributeNS(None,'title', self.annotations.getAttribute('title'))
+ newensemble.setAttributeNS(None,'author', self.annotations.getAttribute('author'))
+ newensemble.setAttributeNS(None,'date', self.annotations.getAttribute('date'))
+ newensemble.setAttributeNS(None,'abstract', self.annotations.getAttribute('abstract'))
+ ensemblesnode.appendChild(newensemble)
+ ensembleids.append(ensembleid)
+ newDecoupageNode = cnode.cloneNode(True)
+ newensemble.appendChild(newDecoupageNode)
+ elif cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "ensemble":
+ ensembleid = cnode.getAttribute(u"id")
+ cloneNode = cnode.cloneNode(True)
+ if ensembleid in ensembleids:
+ ensembleid = self.id+"_"+str(uuid.uuid1())
+ cloneNode.setAttribute(u"id", ensembleid)
+ ensembleids.append(ensembleid)
+ ensemblesnode.appendChild(cloneNode)
+
+ res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
+ if self.flatten:
+ src_video = res[0].getAttribute('src')
+ self.videourl = os.path.basename(src_video)
+ res[0].setAttributeNS(None,'src', self.videourl)
+ self.duration = res[0].getAttributeNS(None, 'dur')
+
+ f = open(path, "w")
+ try:
+ xml.dom.ext.Print(doc, stream=f)
+ finally:
+ f.close()
+
+
+ destPath = os.path.join(os.path.join(os.path.join(settings.MEDIA_ROOT, "media"), "ldt"), self.id);
+ if not os.path.exists(destPath):
+ os.makedirs(destPath)
+ shutil.move(os.path.join(self.basepath, self.src), os.path.join(destPath, os.path.basename(self.src)))
+ self.src = self.id + u"/" + os.path.basename(self.src)
+
+
+
+ def saveContent(self):
+ #if 'http' in self.src:
+ # url = self.src
+ #else:
+ # url = self.id + u"/" + os.path.basename(self.src)
+ content, self.created = Content.objects.get_or_create(iri_id=self.id, defaults = {'iriurl': self.src, 'title':self.title, 'description':self.desc, 'videopath': self.videopath})
+ if not self.created:
+ content.iriurl = self.src
+ content.title = self.title
+ content.description = self.desc
+ content.save()
+
+ content.iriurl = self.src
+ content.videopath = self.videopath.rstrip("/") + "/"
+
+ content.iri = self.id + u"/" + os.path.basename(self.src)
+ content.title = self.title
+ content.description = self.desc
+ content.duration = int(self.duration)
+ content.save()
+
+ self.content = content
+
+ def process(self):
+ self.processIri()
+ self.saveContent()
+
+class BaseFileImport(object):
+
+ def __init__(self, filepath, videopath):
+ self.__filepath = filepath
+ self.__tempdir = ""
+ self.__videopath = videopath
+ self.__author = None
+
+
+ def filepath(): #@NoSelf
+ doc = """Docstring""" #@UnusedVariable
+
+ def fget(self):
+ return self.__filepath
+
+ def fset(self, value):
+ self.__filepath = value
+
+ def fdel(self):
+ del self.__filepath
+
+ return locals()
+
+ filepath = property(**filepath())
+
+ def videopath(): #@NoSelf
+ doc = """Docstring""" #@UnusedVariable
+
+ def fget(self):
+ return self.__videopath
+
+ def fset(self, value):
+ self.__videopath = value
+
+ def fdel(self):
+ del self.__videopath
+
+ return locals()
+
+ videopath = property(**videopath())
+
+ def author(): #@NoSelf
+ doc = """Docstring""" #@UnusedVariable
+
+ def fget(self):
+ return self.__author
+
+ def fset(self, value):
+ self.__author = value
+
+ def fdel(self):
+ del self.__author
+
+ return locals()
+
+ author = property(**author())
+
+
+class FileImport(BaseFileImport):
+
+ def __init__(self, filepath, videopath, flatten):
+ BaseFileImport.__init__(self, filepath, videopath)
+ self.__checkExistingMedia = False
+ self.__flatten = flatten
+
+ def checkExistingMedia(): #@NoSelf
+ doc = """Docstring""" #@UnusedVariable
+
+ def fget(self):
+ return self.__checkExistingMedia
+
+ def fset(self, value):
+ self.__checkExistingMedia = value
+
+ def fdel(self):
+ del self.__checkExistingMedia
+
+ return locals()
+
+ checkExistingMedia = property(**checkExistingMedia())
+
+ def flatten(): #@NoSelf
+ doc = """Docstring""" #@UnusedVariable
+
+ def fget(self):
+ return self.__flatten
+
+ def fset(self, value):
+ self.__flatten = value
+
+ def fdel(self):
+ del self.__flatten
+
+ return locals()
+ flatten = property(**flatten())
+
+ def processLdt(self, ldtpath=None):
+
+ # list iri
+ # see if there is some comments
+ # inject comment in iri
+ # copy iri in folder
+ # create or update content
+ contents = {}
+ if ldtpath:
+ doc = xml.dom.minidom.parse(ldtpath)
+ else:
+ doc = xml.dom.minidom.parse(self.filepath)
+
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+
+ #get author from file ldt
+ result = xml.xpath.Evaluate("/iri/project", context=con)
+ for pnode in result:
+ author = pnode.getAttributeNS("user",None)
+ if author:
+ self.author = unicode(author)
+ break
+
+ result = xml.xpath.Evaluate("/iri/medias/media", context=con)
+
+ for i, medianode in enumerate(result):
+ # get iri file's id from file ldt
+ id = medianode.attributes['id'].value
+ if self.checkExistingMedia:
+ try:
+ Content.objects.get(iri_id=id)
+ do_pass = True
+ except ObjectDoesNotExist: #Content.DoesNotExist
+ do_pass = False
+ else:
+ do_pass = False
+ if not do_pass:
+ if not (contents.has_key(id)):
+ # Create instance iriInfo(id, order, titledesc, basepath="", videopath=settings.STREAM_URL)
+ if ldtpath:
+ contents[id] = IriInfo(id, i, "", os.path.dirname(ldtpath), flatten=self.flatten)
+ else:
+ contents[id] = IriInfo(id, i, "", flatten=self.flatten)
+ # Get iri file's url from ldt. This url can be relative path or absolute path.
+ contents[id].src = medianode.attributes['src'].value
+ if medianode.attributes['video'].value !="":
+ contents[id].videopath = medianode.attributes['video'].value
+ elif self.videopath !="" or self.videopath:
+ contents[id].videopath = self.videopath
+ else:
+ contents[id].videopath =settings.STREAM_URL
+
+
+ #get annotation of file ldt
+ result = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+
+ for contentnode in result:
+ id = contentnode.attributes['id'].value
+ # pocketfilms.utils.log.debug("ID : " + str(id))
+ if contents.has_key(id):
+ if self.author:
+ contentnode.setAttributeNS(None,"author", unicode(self.author))
+ contents[id].annotations = contentnode
+
+ #go throught values
+ for iriinfo in contents.values():
+
+ iriinfo.process()
+
+ # if yes update
+ # if no create
+ # move iri file to the proper place
+ #return list of iriInfo
+
+ def processFile(self):
+ if self.filepath.name.endswith(".ldt"):
+ self.processLdt()
+ elif self.filepath.name.endswith(".zip"):
+ self.processZip()
+ else:
+ raise FileImportError("Bad file type")
+
+
+ def processZip(self):
+ # """ extraire .zip, pass to method processLdt"""
+ # create temp directory
+ self.__tempdir = tempfile.mkdtemp()
+ openfiles = []
+ flvfiles = []
+ processedids = []
+
+ try:
+ zipfile = zipfileext.ZipFileExt(self.filepath)
+ zipfile.unzip_into_dir(self.__tempdir)
+ #load ldt
+ foldersToProcess = [self.__tempdir]
+ while len(foldersToProcess):
+ # pocketfilms.utils.log.debug("folder stack length : "+ str(len(foldersToProcess)))
+ currentFolder = foldersToProcess.pop()
+ for entry in os.listdir(currentFolder):
+ if entry in settings.ZIP_BLACKLIST:
+ continue
+ entryPath = os.path.join(currentFolder, entry)
+ if(os.path.isdir(entryPath)):
+ # pocketfilms.utils.log.debug("Push folder : " + entryPath)
+ foldersToProcess.append(entryPath)
+ elif fnmatch.fnmatch(entry, "*.ldt"):
+ # pocketfilms.utils.log.debug("Process file : " + entryPath)
+ ldtid = self.processLdt(entryPath)
+ processedids.append(ldtid)
+ elif fnmatch.fnmatch(entry, "*.flv"):
+ flvfiles.append(entryPath)
+
+ if settings.CONTENT_ROOT and os.path.exists(settings.CONTENT_ROOT):
+ for entry in flvfiles:
+ shutil.copy(entry, settings.CONTENT_ROOT)
+
+ finally:
+ for f in openfiles:
+ f.close()
+ shutil.rmtree(self.__tempdir)
+ # delete directory
+ return processedids
+
+ # def processFileLdt(self):
+ # processedids = []
+ # ldtid = self.processLdt(self.filepath)
+ # processedids.append(ldtid)
+ # return processedids
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/forms.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,29 @@
+from django import forms
+from models import Project, Content
+import uuid
+
+class LdtImportForm(forms.Form):
+ importFile = forms.FileField()
+ videoPath = forms.CharField(required=False)
+ flatten = forms.BooleanField(required=False, initial=True)
+
+class LdtAddForm(forms.ModelForm):
+ title = forms.CharField()
+ # contents = forms.ModelMultipleChoiceField(Content.objects.all())
+ # owner = forms.ModelChoiceField(Author.objects.all())
+ class Meta:
+ model = Project
+ exclude = ("ldt_id", "ldt", "created_by", "changed_by", "creation_date", "modification_date", "state", "owner")
+
+class ReindexForm(forms.Form):
+ contents = forms.ModelMultipleChoiceField(Content.objects.all())
+
+class SearchForm(forms.Form):
+ search = forms.CharField()
+ field = forms.ChoiceField([(u"all", u"all"), (u"title", u"title"), (u"abstract", u"resume"), (u"tags", u"tags")])
+
+class AddProjectForm (forms.Form):
+ title = forms.CharField()
+
+class CopyProjectForm (forms.Form):
+ title = forms.CharField()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/models.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,124 @@
+from django.db import models
+from django.conf import settings
+from ldt.core.models import Document, Owner
+from django.utils.translation import ugettext_lazy as _
+from utils import create_ldt, copy_ldt
+import uuid
+
+class Author(models.Model):
+
+ handle = models.CharField(max_length=512, unique=True, blank=True, null=True)
+ email = models.EmailField(unique=False, blank=True, null=True)
+ firstname = models.CharField(max_length=512, blank=True, null=True)
+ lastname = models.CharField(max_length=512, blank=True, null=True)
+
+ def __unicode__(self):
+ return unicode(self.id) + " - " + self.handle + ", " + self.email + ", " + self.firstname + " " + self.lastname
+
+
+class Content(models.Model):
+ iri_id = models.CharField(max_length=1024, unique=True)
+ iriurl = models.URLField()
+ videopath = models.URLField(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)
+ duration = models.IntegerField(null=True, blank=True)
+
+ def get_duration(self):
+ if self.duration is None:
+ doc = xml.dom.minidom.parse(self.iri_file_path())
+ doc = Ft.Xml.Domlette.ConvertDocument(doc)
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
+ self.duration = int(res[0].getAttributeNS(None, 'dur'))
+ self.save()
+ return self.duration
+
+ def delete(self):
+ super(Content, self).delete()
+ writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
+ writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
+ writer.commit()
+
+ def __unicode__(self):
+ return str(self.id) + ": " + self.iri_id
+
+ def iri_url(self, web_url=settings.WEB_URL):
+ if 'http' in self.iriurl or 'https' in self.iriurl:
+ return self.iriurl
+ else:
+ return unicode(web_url) + unicode(settings.MEDIA_URL)+u"media/ldt/"+unicode(self.iriurl)
+
+
+class Project(Document):
+ STATE_CHOICES=(
+ (1, 'edition'),
+ (2, 'published'),
+ (3, 'moderated'),
+ (4, 'rejected'),
+ (5, 'deleted')
+ )
+ ldt_id = models.CharField(max_length=1024, unique=True)
+ ldt = models.TextField(null=True)
+ title = models.CharField(max_length=1024)
+ contents = models.ManyToManyField(Content)
+ creation_date = models.DateTimeField(auto_now_add=True)
+ modification_date = models.DateTimeField(auto_now=True)
+ created_by = models.CharField(_("created by"), max_length=70)
+ changed_by = models.CharField(_("changed by"), max_length=70)
+ state = models.IntegerField(choices=STATE_CHOICES, default=1)
+
+ def __unicode__(self):
+ return unicode(self.id) + u": " + unicode(self.ldt_id)
+
+ @staticmethod
+ def create_project(user, title, contents):
+ owner = Owner.objects.get(user=user)
+ project = Project(title=title, owner=owner)
+ project.ldt_id = str(uuid.uuid1())
+ project.created_by=user.username
+ project.changed_by=user.username
+ project.state = 1
+ project.save()
+ for content in contents:
+ project.contents.add(content)
+ project.save()
+ return create_ldt(project, user)
+
+ def copy_project(self, user, title):
+ owner = Owner.objects.get(user=user)
+ project = Project(title=title, owner=owner)
+ project = copy_ldt(self, project, user)
+ project.save()
+ for content in self.contents.all():
+ project.contents.add(content)
+ project.save()
+ return project
+
+class Segment(models.Model):
+
+ project_obj = models.ForeignKey(Project, null=True)
+ content = models.ForeignKey(Content)
+ project_id = models.CharField(max_length=1024, unique=False, blank=True, null=True)
+ iri_id = models.CharField(max_length=1024, unique=False)
+ ensemble_id = models.CharField(max_length=1024, unique=False)
+ cutting_id = models.CharField(max_length=1024, unique=False)
+ element_id = models.CharField(max_length=1024, unique=False)
+ tags = models.CharField(max_length=2048, unique=False, null=True, blank=True)
+ title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
+ duration = models.IntegerField(null=True)
+ start_ts = models.IntegerField(null=True)
+ author = models.CharField(max_length=1024, unique=False, null=True, blank=True)
+ date = models.CharField(max_length=128, unique=False, null=True, blank=True)
+ abstract = models.TextField(null=True, blank=True)
+
+ def __unicode__(self):
+ return "/".join((unicode(self.project_id), unicode(self.iri_id), unicode(self.ensemble_id), unicode(self.cutting_id), unicode(self.element_id)))
+
+ class Meta:
+ unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/projectindexer.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,110 @@
+import tempfile
+import os
+import os.path
+import shutil
+import ldt.utils.xml
+from ldt import settings
+import xml
+import xml.dom
+import xml.dom.minidom
+import xml.dom.ext
+import xml.xpath
+import lucene
+from ldt.ldt_utils import STORE
+from ldt.ldt_utils import ANALYZER
+
+def Property(func):
+ return property(**func())
+
+class ProjectIndexer(object):
+ def __init__(self, projectList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
+ self.__projectList = projectList
+ self.__decoupage_blacklist = decoupage_blackList
+ self.__writer = writer
+
+ @Property
+ def decoupage_blacklist(): #@NoSelf
+ doc = """get blacklist""" #@UnusedVariable
+
+ def fget(self):
+ if self.__decoupage_blacklist is None:
+ self.__decoupage_blacklist = ()
+ return self.__decoupage_blacklist
+
+ def fset(self, value):
+ self.__decoupage_blacklist = value
+
+ def fdel(self):
+ del self.__decoupage_blacklist
+
+ return locals()
+
+ def index_all(self):
+ for project in self.__projectList:
+ self.index_project(project)
+
+ def index_project(self, project):
+ # ldt.utils.log.debug("Indexing project : "+str(project.ldt_id))
+ ldt=project.ldt
+ doc = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
+
+ self.__writer.deleteDocuments(lucene.Term("ldt_id", project.ldt_id))
+
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+
+ for content in res:
+ contentId = content.getAttribute("id")
+
+ res =xml.xpath.Evaluate("ensemble", content)
+ for ensemble in res:
+ ensembleId = ensemble.getAttribute("id")
+
+ for decoupageNode in ensemble.childNodes:
+ # ldt.utils.log.debug("Indexing project decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
+ if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage" or decoupageNode.getAttribute("id") in self.decoupage_blacklist:
+ continue
+
+ decoupId = decoupageNode.getAttribute("id")
+ res = xml.xpath.Evaluate("elements/element", decoupageNode)
+ for elementNode in res:
+ doc = lucene.Document()
+ elementId = elementNode.getAttribute("id")
+ tags = elementNode.getAttribute("tags")
+
+ if tags is not None:
+ tags.replace(",", ";")
+
+ if tags is None or len(tags) == 0:
+ tags = ""
+ restagnode = xml.xpath.Evaluate("tag/text()", elementNode)
+ for tagnode in restagnode:
+ tags = tags + " ; " + tagnode.data
+
+ if tags is None or len(tags) == 0:
+ tags = ""
+ restagnode = xml.xpath.Evaluate("tags/tag/text()", elementNode)
+ for tagnode in restagnode:
+ tags = tags + " ; " + tagnode.data
+
+ title = ""
+ for txtRes in xml.xpath.Evaluate("title/text()", elementNode):
+ title = title + txtRes.data
+
+ abstract = ""
+ for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode):
+ abstract = abstract + txtRes.data
+
+ doc.add(lucene.Field("ldt_id", project.ldt_id, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))
+ doc.add(lucene.Field("iri_id", contentId, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))
+ doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
+ doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
+ doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
+ doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
+
+ self.__writer.addDocument(doc)
+
+ self.__writer.flush()
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/admin/ldt/app_action.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,7 @@
+{% extends "admin/base_site.html" %} {% load i18n %} {% block
+breadcrumbs %}
+<div class="breadcrumbs"><a href="{% url admin:index %}"> {%
+trans "Home" %}</a> › <a href="{% url admin:app_list 'ldt' %}">
+ldt</a> › {{ current_action }}</div>
+{% endblock %}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/admin/ldt/app_index.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,25 @@
+{% extends "admin/app_index.html" %} {% load i18n %} {% block content %}
+{{ block.super }}
+
+<div class="module">
+<table summary="Import">
+ <caption>Import</caption>
+ <tr>
+ <th><a href="{{WEB_URL}}{% url admin:ldt_content_import_file %}">Import
+ an ldt</a></th>
+ <td> </td>
+ <!--tr>
+ <th>
+ <a href="content/export/form">Generate ldt</a>
+ </th>
+ <td> </td>
+ </tr-->
+ <tr>
+ <th><a href="{{WEB_URL}}{% url admin:ldt_content_reindex %}">Reindex</a>
+ </th>
+ <td> </td>
+ </tr>
+</table>
+</div>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/admin/ldt/content/reindex_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,22 @@
+{% extends "admin/ldt/app_action.html" %} {% load i18n %} {# reindex
+contents #} {% block content %} {% if message %}
+<div>
+<p>{{ message }}</p>
+</div>
+{% endif %} {% if form. %}
+<div></div>
+{% endif %}
+<div>
+<form method="post"
+ action="{{WEB_URL}}{% url admin:ldt_content_reindex %}">{%
+csrf_token %}
+<table>
+ {{ form.as_table }}
+</table>
+<input type="submit" /></form>
+</div>
+
+<a href="{{WEB_URL}}{% url admin:app_list 'ldt' %}">Back to
+administration page</a>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/admin/ldt/content/search_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,13 @@
+{% extends "base.html" %} {% block content %}
+
+<form method="post"
+ action="{{WEB_URL}}{% url ldt.ldt.views.searchIndex %}"
+ accept-charset="utf-8">
+
+<table>
+ {{ form.as_table }}
+</table>
+<input type="submit" /></form>
+
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/admin/ldt/content/upload_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,26 @@
+{% extends "admin/ldt/app_action.html" %} {# import an ldt #} {% block
+content %}
+<p>Vous pouvez importer un fichier ldt ou un zip qui compresse un
+fichier .ldt et plusieurs fichiers .iri.</p>
+<p>Bien verifiez vous que le chemin de source est absolute pour un
+fichier ldt lors qu'il est tout seul, alors qu'il est relatif s'il est
+dans le zip</p>
+<p>Vous pouvez indiquer le chemin de video si vous avez besoin</p>
+{% if message %}
+<div>
+<p>{{ message }}</p>
+</div>
+{% endif %} {% if form %}
+
+<form method="post" enctype="multipart/form-data" action="">{%
+csrf_token %}
+<table>
+ {{ form.as_table }}
+</table>
+<input type="submit" /></form>
+{% endif %}
+
+<a href="{% url admin:app_list 'ldt' %}">Back to administration
+page</a>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/iriuser/ldt/copy_ldt.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,18 @@
+{% load i18n %} {# form of copy of project ldt #}
+<!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>
+<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+</head>
+<body>
+<div id="add_contribution">
+<div class="title">{% trans "Copy your project" %}</div>
+<form action="" method="POST">{% csrf_token %} <label for="title">{%
+trans "Title" %}:</label> <input class="inputbox required" type="text"
+ name="title" size="80" ; value="" id="title" /> <input class="button"
+ id="ldt_submit" type="submit" value="{% trans 'Copy' %}" /></form>
+</div>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/iriuser/ldt/create_ldt.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,29 @@
+{% load i18n %} {# form of creation of project ldt #}
+<!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>
+<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+</head>
+<body>
+<div id="add_contribution">
+<div class="title">{% 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" />
+
+<div class="title">{% trans "List of contents" %}</div>
+<ul class='contentlist'>
+ {% for content in contents %}
+ <li><input type="checkbox" name="contents" value="{{ content.id}}"
+ checked="true" />{{content.iri_id}}</li>
+ {% endfor %}
+</ul>
+
+<input class="button" id="ldt_submit" type="submit"
+ value="{% trans 'Create' %}" /></form>
+</div>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/iriuser/ldt/init_ldt.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
+<meta http-equiv="Pragma" content="no-cache" />
+<meta http-equiv="Cache" content="no store" />
+<meta http-equiv="Expires" content="-1" />
+<title>Ligne de Temps - IRI</title>
+<script type="text/javascript" src="{{MEDIA_URL}}js/swfobject.js"></script>
+<script type="text/javascript">
+
+ </script>
+</head>
+
+<body id="init_ldt_view">
+
+<div id="ldtInit" style="width: 1001px; height: 631px;"> </div>
+<script language="JavaScript" type="text/javascript">
+
+ var params = {
+ quality:"high",
+ allowFullScreen:"true",
+ wmode:"transparent",
+ allowScriptAccess:"always"
+ };
+
+ var flashvars = {
+ colorUrl:'{{colorurl}}',
+ i18nUrl: '{{i18nurl}}',
+ language: '{{language}}',
+ {% if url %}
+ urlBase:'{{baseurl}}',
+ initUrl:'{{url}}',
+ {% endif %}
+ {% ifequal readonly 'false' %}
+ readOnly: '{{readonly}}',
+ postUrl:'{{posturl}}',
+ postVars: encodeURIComponent('id={{id}}&csrfmiddlewaretoken={{csrf_token}}'),
+ {% else %}
+ readOnly:'true',
+ {% endifequal %}
+ startTime:'100'
+ };
+
+ var attributes = { id: "ldtInitSwf", name: "ldtInitSwf"};
+
+ swfobject.embedSWF("{{ MEDIA_URL }}swf/ldt/LignesDeTempsFlex.swf", "ldtInit", "1001", "631", "9.0.0", "{{ MEDIA_URL }}swf/expressInstall.swf", flashvars, params, attributes);
+
+ </script>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/iriuser/ldt/ldt_list.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,80 @@
+{% extends "ldt/user/user_base.html" %} {# list of projects ldt #} {%
+load i18n %} {% block js_import %}{{ block.super }}
+<script type="text/javascript"
+ src="{{ BASE_URL }}static/js/jquery.DOMwindow.js"></script>
+<script type="text/javascript">
+ $(document).ready(function(){
+ $('.ldt_link').nyroModal({
+ height:662,
+ width:1022,
+ type:'iframe',
+ forceType:'iframe',
+ padding:5,
+ bgColor: 'rgb(239, 239, 239)',
+ titleFromIframe: false,
+ beforeHideContent: function(elts, settings, callback){
+ try {
+ var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
+ if(res.length > 0)
+ {
+ var swfobj = res.get(0);
+ if(swfobj && swfobj.forceSave != undefined)
+ swfobj.forceSave();
+ }
+ }
+ catch(err)
+ {
+ // do nothing
+ }
+ callback();
+ }
+ });
+ $('.create_ldt_link').nyroModal({
+ height:662,
+ width:1022,
+ type:'ajax',
+ padding:5,
+ bgColor: 'rgb(239, 239, 239)',
+ });
+ });
+</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 "Ldt Project" %}{%
+endblock %} {% block iricontent %}
+<div id='ldtlist'><a
+ href="{% url ldt.ldt.views.create_ldt_view %}" class="create_ldt_link">{%
+trans 'Create new project'%}</a>
+<table>
+ <caption>{% trans "Project" %}</caption>
+ <thead>
+ <tr>
+ <th width="170">{% trans "title" %}</th>
+ <th width="20">{% trans " published" %}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for ldt in ldtProjects %}
+ <tr>
+ <th><a href="{% url ldt.ldt.views.indexProject ldt.ldt_id %}"
+ class="ldt_link">{{ ldt.title }}</a></th>
+ {% ifequal ldt.state 2%}
+ <td><a href="{% url ldt.ldt.views.unpublish ldt.ldt_id%}"><img
+ alt="True" src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" /></td>
+ {% else %}
+ <td><a href="{% url ldt.ldt.views.publish ldt.ldt_id %}"><img
+ alt="False" src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" /></td>
+ {% endifequal %}
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+</div>
+{% endblock %}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/iriuser/ldt/loading.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,26 @@
+<!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>
+<style type="text/css">
+.center {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+}
+
+.center div {
+ position: relative;
+ top: -7px;
+ left: -104px;
+}
+</style>
+</head>
+<body>
+<div class="center">
+<div><img alt="loading"
+ src="{{MEDIA_URL}}img/loadingAnimation.gif" /></div>
+</div>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/iriuser/ldt/save_done.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,5 @@
+<p>done</p>
+<p>{{ldt}}
+<p>
+<p>{{id}}</p>
+<p>title:{{title}}</p>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/tests.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,23 @@
+"""
+This file demonstrates two different styles of tests (one doctest and one
+unittest). These will both pass when you run "manage.py test".
+
+Replace these with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+class SimpleTest(TestCase):
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.failUnlessEqual(1 + 1, 2)
+
+__test__ = {"doctest": """
+Another way to test that 1 + 1 is equal to 2.
+
+>>> 1 + 1 == 2
+True
+"""}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/urls.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,35 @@
+from django.conf.urls.defaults import *
+from ldt.management import test_ldt
+
+# Uncomment the next two lines to enable the admin:
+# from django.contrib import admin
+# admin.autodiscover()
+
+urlpatterns = patterns('ldt.ldt_utils',
+ url(r'^searchInit/(?P<field>.*)/(?P<query>.*)$', 'views.searchInit'),
+ url(r'^searchForm/$', 'views.searchForm'),
+ url(r'^search/$', 'views.searchIndex'),
+ url(r'^search/(?P<field>.*)/(?P<query>.*)$', 'views.searchIndexGet'),
+ url(r'^searchLdt/(?P<field>.*)/(?P<query>.*)$', 'views.searchLdt'),
+ url(r'^searchSeg/(?P<field>.*)/(?P<query>.*)$', 'views.searchSegments'),
+ url(r'^index/(?P<url>.*)$', 'views.index'),
+ url(r'^init/(?P<method>.*)/(?P<url>.*)$', 'views.init'),
+ url(r'^ldt/(?P<url>.*)$', 'views.ldt'),
+ url(r'^search/loading/$', 'views.loading'),
+ url(r'^create/(?P<iri_id>.*)$', 'views.create_project'),
+ url(r'^copy/(?P<ldt_id>.*)$', 'views.copy_project'),
+)
+
+if test_ldt():
+ urlpatterns += patterns('ldt.ldt_utils',
+ 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'),
+ url(r'^space/ldt/project/(?P<id>.*)$', 'views.ldtProject'),
+ 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'),
+
+)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/utils.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,267 @@
+import lucene
+from ldt.ldt_utils import STORE
+from ldt.ldt_utils import ANALYZER
+from Ft.Xml import MarkupWriter
+import uuid
+import django.core.urlresolvers
+from django.conf import settings
+import urllib
+import xml.dom
+import xml.dom.minidom
+import xml.dom.ext
+import xml.xpath
+import os
+import os.path
+
+class LdtSearch(object):
+
+ def query(self, field, query):
+ indexSearcher = lucene.IndexSearcher(STORE)
+ queryParser = lucene.QueryParser(lucene.Version.LUCENE_30, field, lucene.FrenchAnalyzer(lucene.Version.LUCENE_30))
+ queryParser.setDefaultOperator(lucene.QueryParser.Operator.AND)
+ queryObj = queryParser.parse(query)
+ hits = indexSearcher.search(queryObj, settings.LDT_MAX_SEARCH_NUMBER)
+
+ res = []
+ for hit in hits.scoreDocs:
+ doc = indexSearcher.doc(hit.doc)
+ res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
+ indexSearcher.close()
+ return res
+
+ def queryAll(self, query):
+ return self.query("all", query)
+
+class LdtUtils(object):
+
+ def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None):
+
+ writer = MarkupWriter(file, indent = u"yes")
+ writer.startDocument()
+ writer.startElement(u"iri")
+ writer.simpleElement(u"project", attributes={u"id":unicode(str(uuid.uuid1())), u"title":unicode(title) , u"user":author, u"abstract":u""})
+ writer.startElement(u"medias")
+ for content in contentList:
+ videopath = unicode(settings.STREAM_URL)
+ if content.videopath :
+ videopath = unicode(content.videopath)
+ writer.simpleElement(u"media", attributes={u"id":content.iri_id,u"src":content.iri_url(web_url),u"video":videopath,u"pict":u"",u"extra":u""})
+ writer.endElement(u"medias")
+
+ if contributions is None:
+ contributions = []
+ annotations_nodes = {}
+ for contrib in contributions:
+ doc = xml.dom.minidom.parseString(contrib.ldtproject.ldt.encode("utf-8"))
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
+ for content in res:
+ contentid = content.getAttribute("id")
+ if annotations_nodes.has_key(contentid):
+ contentnode = annotations_nodes[contentid]
+ else:
+ contentnode = {"id":contentid, "ensembles":[]}
+ annotations_nodes[contentid]=contentnode
+ for ens in content.childNodes:
+ if ens.nodeType == xml.dom.Node.ELEMENT_NODE and ens.tagName.endswith("ensemble"):
+ contentnode["ensembles"].append(ens.toprettyxml())
+
+ if len(annotations_nodes) > 0:
+ writer.startElement(u"annotations")
+ for content in contentList:
+ if content.content_base.iri_id in annotations_nodes:
+ contentnode = annotations_nodes[content.content_base.iri_id]
+ if contentnode is not None:
+ if len(contentnode["ensembles"])>0:
+ writer.startElement(u"content", attributes={"id":contentnode["id"]})
+ writer.text(u"")
+ for ens in contentnode["ensembles"]:
+ writer.xmlFragment(ens.encode("utf-8"))
+ writer.endElement(u"content")
+ else:
+ writer.simpleElement(u"content", attributes={"id":contentnode["id"]})
+ writer.endElement(u"annotations")
+ else:
+ writer.simpleElement(u"annotations")
+
+
+ writer.startElement(u"displays")
+ if len(contentList) > 0:
+ writer.startElement(u"display", attributes={u"id":u"0",u"title":u"generated",u"idsel":contentList[0].iri_id,u"tc":u"0"})
+ for content in contentList:
+ writer.startElement(u"content", attributes={u"id":content.iri_id})
+ filepath = urllib.urlopen(content.iri_url())
+ doc = xml.dom.minidom.parse(filepath)
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
+ for decoupagenode in res:
+ decoupage_id = decoupagenode.getAttribute(u"id")
+ ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
+ writer.simpleElement(u"decoupage", attributes={u"id":decoupage_id,u"idens":ensemble_id})
+ writer.endElement(u"content")
+ if startSegment is not None:
+ writer.startElement(u"activeSegment")
+ writer.simpleElement(u"id",attributes={u"idctt" : startSegment["idcontent"],u"idens" : startSegment["idgroup"], u"idcut" : startSegment["idcutting"], u"idseg" : startSegment["idsegment"]})
+ writer.endElement(u"activeSegment")
+
+ writer.endElement(u"display")
+ writer.endElement(u"displays")
+ writer.simpleElement(u"edits")
+ writer.endElement(u"iri")
+
+ def generateInit(self, url, method, search=None):
+
+ import xml.dom
+ import xml.dom.ext
+
+ impl = xml.dom.getDOMImplementation()
+ doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
+
+ elementFiles = doc.createElement('files')
+ doc.documentElement.appendChild(elementFiles)
+
+ elementInit = doc.createElement('init')
+ elementFiles.appendChild(elementInit)
+
+ elementfile = doc.createElement('file')
+
+ elementfile.setAttribute('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
+ elementfile.setAttribute('display', '1')
+ if(search):
+ elementfile.setAttribute("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))
+
+
+ # /*chemin video : tant que le serveur de media n'est pas up, */
+ elementfile.setAttribute('video', settings.STREAM_URL)
+ elementfile.setAttribute('pict', "")
+ elementfile.setAttribute('extra', "")
+
+ elementInit.appendChild(elementfile);
+
+ elementRecent = doc.createElement('recent');
+ elementFiles.appendChild(elementRecent);
+
+
+ elementLibrary = doc.createElement('library');
+ elementFiles.appendChild(elementLibrary);
+
+ username = ''
+ id = ''
+ elementUser = doc.createElement('user')
+ elementUser.setAttribute('name', username)
+ elementUser.setAttribute('id', id)
+ doc.documentElement.appendChild(elementUser)
+
+ return doc
+
+def create_ldt(project, user):
+
+ contentList=project.contents.all()
+
+ """create xml"""
+
+ # create a dom
+ impl = xml.dom.getDOMImplementation()
+ dom = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
+ #node project
+ elementProject = dom.createElement('project')
+ dom.documentElement.appendChild(elementProject)
+
+
+ elementProject.setAttribute('abstract', "")
+ elementProject.setAttribute('title', project.title)
+ elementProject.setAttribute('user', user.username)
+ elementProject.setAttribute('id', project.ldt_id)
+ #node medias
+ elementMedias = dom.createElement('medias')
+ dom.documentElement.appendChild(elementMedias)
+
+ idsel = None
+ for content in contentList:
+ if not idsel:
+ idsel = content.iri_id
+ elementMedia = dom.createElement('media')
+ elementMedia.setAttribute('id', content.iri_id)
+ elementMedia.setAttribute('src', content.iri_url())
+ if content.videopath and content.videopath !="":
+ elementMedia.setAttribute('video', content.videopath)
+ else:
+ elementMedia.setAttribute('video', settings.STREAM_URL)
+ elementMedia.setAttribute('pict', "")
+ elementMedia.setAttribute('extra', "")
+ elementMedias.appendChild(elementMedia)
+ if not idsel:
+ idsel = ""
+
+ #node annotations
+ elementAnnotations = dom.createElement('annotations')
+ dom.documentElement.appendChild(elementAnnotations)
+ #node displays
+ elementDisplays = dom.createElement('displays')
+ elementDisplay = dom.createElement('display')
+ elementDisplay.setAttribute('id', '0')
+ elementDisplay.setAttribute('title', 'Init view')
+ elementDisplay.setAttribute('idsel', idsel)
+ elementDisplay.setAttribute('tc', '0')
+ elementDisplay.setAttribute('zoom', '0')
+ elementDisplay.setAttribute('scroll', '0')
+ elementDisplay.setAttribute('infoBAB', '')
+ #node content
+ for content in contentList:
+ elementContent = dom.createElement('content')
+ elementContent.setAttribute('id', content.iri_id)
+ if not 'http' in content.iriurl:
+ #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
+ url = content.iri_url()
+ else:
+ url =content.iriurl
+ file = urllib.urlopen(url)
+ doc = xml.dom.minidom.parse(file)
+ con = xml.xpath.Context.Context(doc, 1, 1, None)
+ res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
+ #node decoupage
+ for decoupagenode in res:
+ decoupage_id = decoupagenode.getAttribute(u"id")
+ ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
+ elementDecoupage = dom.createElement('decoupage')
+ elementDecoupage.setAttribute('idens', ensemble_id)
+ elementDecoupage.setAttribute('id', decoupage_id)
+ elementContent.appendChild(elementDecoupage)
+ elementDisplay.appendChild(elementContent)
+
+ elementDisplays.appendChild(elementDisplay)
+ dom.documentElement.appendChild(elementDisplays)
+
+ elementEdits = dom.createElement('edits')
+ dom.documentElement.appendChild(elementEdits)
+ # write dom in Project.ldt
+ project.ldt = dom.documentElement.toprettyxml()
+ #save Project
+ project.save()
+ return project
+
+
+def copy_ldt(project, new_project, user):
+ new_project.ldt_id = str(uuid.uuid1())
+ new_project.created_by=user.username
+ new_project.changed_by=user.username
+ new_project.state = 1
+
+ contentList=project.contents.all()
+
+ """create xml"""
+
+ # create a dom
+ dom = xml.dom.minidom.parseString(project.ldt.encode("utf-8"))
+ con = xml.xpath.Context.Context(dom, 1, 1, None)
+ res = xml.xpath.Evaluate("iri/project", context=con)
+ for elementProject in res:
+ elementProject.setAttribute('abstract', "")
+ elementProject.setAttribute('title', new_project.title)
+ elementProject.setAttribute('user', user.username)
+ elementProject.setAttribute('id', new_project.ldt_id)
+
+ new_project.ldt = dom.documentElement.toprettyxml()
+ #save Project
+ new_project.save()
+ return new_project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/views.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,287 @@
+import django.core.urlresolvers
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response, get_object_or_404
+from django.template import RequestContext
+from django.core.urlresolvers import reverse
+from django.contrib.auth.decorators import login_required
+from django.conf import settings
+from fileimport import *
+from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm
+from ldt.core.models import Owner
+from models import *
+from utils import *
+from contentindexer import *
+from string import Template
+from Ft.Xml import MarkupWriter
+import cgi
+import uuid
+import base64
+import lucene
+import xml.dom
+import xml.dom.ext
+import xml.dom.minidom
+
+
+
+def searchForm(request):
+ form = SearchForm()
+ return render_to_response('ldt/ldt/search_form.html',{'form': form} , context_instance=RequestContext(request))
+
+def searchIndex(request):
+
+ sform = SearchForm(request.POST)
+ if sform.is_valid():
+ search = sform.cleaned_data["search"]
+
+
+ queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
+ field = request.POST["field"]
+ language_code = request.LANGUAGE_CODE[:2]
+
+ url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
+ return render_to_response('ldt/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
+ else:
+ resp = HttpResponse()
+ resp.write("<html><head></head><body>Error : No result</body></html>");
+
+def searchIndexGet(request, field, query):
+
+ language_code = request.LANGUAGE_CODE[:2]
+ url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
+ return render_to_response('irisuser/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
+
+def searchInit(request, field, query):
+
+ ldtgen = LdtUtils()
+
+ doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
+
+ resp = HttpResponse(mimetype="text/xml;charset=utf-8")
+ xml.dom.ext.PrettyPrint(doc, resp)
+ return resp
+
+def searchLdt(request, field, query, edition=None):
+
+ contentList = []
+ resp = HttpResponse(mimetype="text/xml")
+ queryStr = ""
+
+ if query and len(query)>0:
+ queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
+ searcher = LdtSearch()
+ ids = {}
+
+ for result in searcher.query(field, queryStr):
+ ids[result["iri_id"]] = ""
+
+ id_list = ids.keys()
+
+ if edition is not None:
+ ids_editions = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))
+ id_list = filter(lambda id: id in id_list, ids_editions)
+
+ contentList = Content.objects.filter(iri_id__in=id_list)
+
+
+ ldtgen = LdtUtils()
+ ldtgen.generateLdt(contentList, file=resp, title = u"Recherche : " + queryStr)
+
+ return resp
+
+
+def searchSegments(request, field, query, edition=None):
+
+ if query and len(query)>0:
+ searcher = LdtSearch()
+
+ queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
+ res = searcher.query(field, queryStr)
+ else:
+ res = []
+
+ iri_ids = None
+
+ if edition is not None:
+ iri_ids = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))
+
+ doc = xml.dom.getDOMImplementation().createDocument(None, "iri", None)
+
+ for resultMap in res:
+ if iri_ids is None or resultMap['iri_id'] in iri_ids:
+ elem = doc.createElement('seg')
+ elem.setAttribute('idctt', resultMap['iri_id'])
+ elem.setAttribute('idens', resultMap['ensemble_id'])
+ elem.setAttribute('iddec', resultMap['decoupage_id'])
+ elem.setAttribute('idseg', resultMap['element_id'])
+ elem.setAttribute('idvue', "")
+ elem.setAttribute('crit', "")
+ doc.documentElement.appendChild(elem)
+
+ return HttpResponse(doc.toprettyxml(encoding='utf-8'), mimetype="text/xml;charset=utf-8")
+
+@login_required
+def list_ldt(request):
+ contents = Content.objects.all()
+ try:
+ owner = Owner.objects.get(user=request.user)
+ except:
+ return HttpResponseRedirect(settings.LOGIN_URL)
+ ldtProjects = Project.objects.filter(owner=owner)
+ context={
+ 'contents': contents,
+ 'ldtProjects': ldtProjects.reverse(),
+ }
+ return render_to_response('ldt/ldt/ldt_list.html', context, context_instance=RequestContext(request))
+
+def create_ldt_view(request):
+ if request.method == "POST" :
+ form = LdtAddForm(request.POST)
+ if form.is_valid():
+ user = request.user
+ Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'])
+ return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+ else:
+ form = LdtAddForm()
+ contents = Content.objects.all()
+ return render_to_response('ldt/ldt/create_ldt.html', {'contents': contents, 'form': form,'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
+
+def created_ldt(request):
+ return render_to_response('ldt/ldt/done.html', context_instance=RequestContext(request))
+
+def indexProject(request, id):
+
+ urlStr = settings.WEB_URL + reverse("ldt.ldt_utils.views.init", args=['ldtProject', id])
+ posturl= settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
+ language_code = request.LANGUAGE_CODE[:2]
+
+ ldt = get_object_or_404(Project, ldt_id=id)
+ if ldt.state ==2: #published
+ readonly = 'true'
+ else:
+ readonly = 'false'
+
+ return render_to_response('ldt/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
+
+def init(request, method, url):
+ ldtgen = LdtUtils()
+
+ doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
+
+ resp = HttpResponse(mimetype="text/xml")
+ resp['Cache-Control']='no-cache, must-revalidate'
+ resp['Pragma']='no-cache'
+ xml.dom.ext.PrettyPrint(doc, resp)
+ return resp
+
+def ldtProject(request, id):
+ resp = HttpResponse(mimetype="text/xml")
+ resp['Cache-Control']='no-cache, must-revalidate'
+ resp['Pragma']='no-cache'
+
+ project = Project.objects.get(ldt_id=id)
+ resp.write(project.ldt)
+ return resp
+
+def save_ldtProject(request):
+ if request.method=="POST":
+ ldt = request.POST['ldt']
+ id = request.POST['id']
+ ldtproject=Project.objects.get(ldt_id=id)
+ #save xml ldt
+ ldtproject.ldt=ldt
+ #get new title
+ dom = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
+ con = xml.xpath.Context.Context(dom, 1, 1, None)
+ result = xml.xpath.Evaluate("/iri/project",context=con)
+ for pnode in result:
+ title=pnode.getAttribute("title")
+ break
+ #set new title
+ ldtproject.title=title
+ #get new content list
+ new_contents=[]
+ result = xml.xpath.Evaluate("/iri/medias/media", context=con)
+ for medianode in result:
+ id = medianode.attributes['id'].value
+ new_contents.append(id)
+ # set new content list
+ for c in ldtproject.contents.all():
+ if not c.iri_id in new_contents:
+ ldtproject.contents.remove(c)
+ ldtproject.save()
+ else:
+ ldt = ''
+ return render_to_response('ldt/ldt/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
+
+@login_required
+def publish(request, id):
+ ldt = get_object_or_404(Project, ldt_id=id)
+ ldt.state = 2 #published
+ ldt.save()
+ return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+
+@login_required
+def unpublish(request, id):
+ ldt = get_object_or_404(Project, ldt_id=id)
+ ldt.state = 1 #edition
+ ldt.save()
+ return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+
+
+def index(request, url):
+
+ urlStr = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.init", args=['ldt',url])
+ language_code = request.LANGUAGE_CODE[:2]
+
+ return render_to_response('ldt/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL+settings.BASE_URL}, context_instance=RequestContext(request))
+
+
+def ldt(request, url, startSegment = None):
+
+ import Ft
+ from Ft.Xml import MarkupWriter
+
+ resp = HttpResponse(mimetype="text/xml; charset=utf-8")
+ resp['Cache-Control'] = 'no-cache'
+
+ contentList = Content.objects.filter(iri_id=url)
+
+ ldtgen = LdtUtils()
+ ldtgen.generateLdt(contentList, file=resp, title = contentList[0].title, startSegment=startSegment)
+
+ return resp
+
+
+def loading(request):
+ return render_to_response('ldt/ldt/loading.html', context_instance=RequestContext(request))
+
+
+@login_required
+def create_project(request, iri_id):
+
+ content = get_object_or_404(Content, iri_id=iri_id)
+ contents = [ content, ]
+ if request.method == "POST" :
+ form = AddProjectForm(request.POST)
+ if form.is_valid():
+ user=request.user
+ project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents)
+ return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
+ else:
+ form = AddProjectForm()
+ return render_to_response('ldt/ldt/create_ldt.html', {'form':form, 'contents':contents, 'iri_id':iri_id, 'create_project_action':reverse("ldt.ldt_utils.views.create_project",args=[iri_id])}, context_instance=RequestContext(request))
+
+@login_required
+def copy_project(request, ldt_id):
+
+ project = get_object_or_404(Project, ldt_id=ldt_id)
+ if request.method == "POST" :
+ form = CopyProjectForm(request.POST)
+ if form.is_valid():
+ user=request.user
+ project = project.copy_project(title=request.POST['title'], user=user)
+ return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
+ else:
+ form = CopyProjectForm
+ return render_to_response('ldt/ldt/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
+
Binary file web/ldt/locale/en/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/locale/en/LC_MESSAGES/django.po Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,648 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-09 08:48-0600\n"
+"PO-Revision-Date: 2010-02-17 03:53+0100\n"
+"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ldt/models.py:43
+msgid "created by"
+msgstr "created by"
+
+#: ldt/models.py:44
+msgid "changed by"
+msgstr "changed by"
+
+#: ldt/templates/admin/ldt/app_action.html:6
+#: templates/admin/cms_change_list.html:7
+#: templates/admin/page_app_index.html:8
+#: templates/admin/page_change_form.html:17
+#: templates/admin/page_change_list.html:25
+#: user/templates/registration/logged_out.html:4
+msgid "Home"
+msgstr "Home"
+
+#: ldt/templates/iriuser/ldt/copy_ldt.html:12
+msgid "Copy your project"
+msgstr "Copy your project"
+
+#: ldt/templates/iriuser/ldt/copy_ldt.html:15
+#: ldt/templates/iriuser/ldt/create_ldt.html:15
+msgid "Title"
+msgstr "Title"
+
+#: ldt/templates/iriuser/ldt/copy_ldt.html:18
+msgid "Copy"
+msgstr "Copy"
+
+#: ldt/templates/iriuser/ldt/create_ldt.html:12
+msgid "Create your project"
+msgstr "Create your project"
+
+#: ldt/templates/iriuser/ldt/create_ldt.html:18
+msgid "List of contents"
+msgstr "List of contents"
+
+#: ldt/templates/iriuser/ldt/create_ldt.html:25
+msgid "Create"
+msgstr "Create"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:50
+#: templates/admin/page_base.html:19
+#: user/templates/iriuser/user/login_form.html:33
+#: user/templates/iriuser/user/space.html:6
+#: user/templates/iriuser/user/space.html:9
+msgid "Space"
+msgstr "Space"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:51
+#: ldt/templates/iriuser/ldt/ldt_list.html:53
+msgid "Ldt Project"
+msgstr "Ldt Project"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:57
+msgid "Create new project"
+msgstr "Create new project"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:59
+msgid "Project"
+msgstr "Project"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:62
+msgid "title"
+msgstr "Title"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:63
+msgid " published"
+msgstr " published"
+
+#: templates/admin/cms_change_form.html:30
+msgid "Approve page deletion"
+msgstr "Approve page deletion"
+
+#: templates/admin/cms_change_form.html:36
+#, python-format
+msgid "(requires approvement at %(moderation_level)s level)"
+msgstr "(requires approvement at %(moderation_level)s level)"
+
+#: templates/admin/cms_change_form.html:37
+msgid "(you can perform actions on this page directly)"
+msgstr "(you can perform actions on this page directly)"
+
+#: templates/admin/cms_change_form.html:50
+msgid "Remove delete request"
+msgstr "Remove delete request"
+
+#: templates/admin/cms_change_form.html:52
+msgid "Approve delete"
+msgstr "Approve delete"
+
+#: templates/admin/cms_change_form.html:52
+msgid "Approve"
+msgstr "Approve"
+
+#: templates/admin/cms_change_form.html:52
+#: templates/admin/cms_change_form.html:53
+msgid "draft"
+msgstr "draft"
+
+#: templates/admin/cms_change_form.html:53
+msgid "Preview"
+msgstr "Preview"
+
+#: templates/admin/cms_change_form.html:56
+#: templates/admin/page_change_form.html:27
+msgid "History"
+msgstr "History"
+
+#: templates/admin/cms_change_form.html:57
+#: templates/admin/page_change_form.html:28
+msgid "View on site"
+msgstr "View on site"
+
+#: templates/admin/cms_change_form.html:87
+#: templates/admin/page_change_form.html:38
+#: templates/admin/page_change_list.html:54
+#: templates/cms/admin/cms/page/change_form.html:24
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Please correct the error below."
+msgstr[1] "Please correct the errors below."
+
+#: templates/admin/cms_change_form.html:107
+msgid "All permissions"
+msgstr "All permissions"
+
+#: templates/admin/cms_change_form.html:108
+#: templates/admin/cms_change_form.html:120
+msgid "Loading..."
+msgstr "Loading..."
+
+#: templates/admin/cms_change_form.html:119
+msgid "Page states"
+msgstr "Page states"
+
+#: templates/admin/cms_change_form.html:142
+#, python-format
+msgid ""
+"This page must be moderated at level %(moderation_level)s, post a message "
+"for moderator."
+msgstr ""
+"This page must be moderated at level %(moderation_level)s, post a message "
+"for moderator."
+
+#: templates/admin/cms_change_form.html:144
+msgid "Request approvemet"
+msgstr "Request approvemet"
+
+#: templates/admin/cms_change_form.html:234
+#: user/templates/registration/registration_form.html:16
+msgid "Save"
+msgstr "Save"
+
+#: templates/admin/cms_change_form.html:235
+msgid "Save and continue editing"
+msgstr "Save and continue editing"
+
+#: templates/admin/cms_change_list.html:51
+msgid "Successfully moved"
+msgstr "Successfully moved"
+
+#: templates/admin/cms_change_list.html:76
+#, python-format
+msgid "Recover deleted %(name)s"
+msgstr "Recover deleted %(name)s"
+
+#: templates/admin/cms_change_list.html:79
+#: templates/admin/page_change_list.html:46
+#, python-format
+msgid "Add %(name)s"
+msgstr "Add %(name)s"
+
+#: templates/admin/cms_change_list.html:91
+msgid "Pages on:"
+msgstr "Pages on:"
+
+#: templates/admin/cms_change_list.html:108
+msgid "on"
+msgstr "on"
+
+#: templates/admin/cms_change_list.html:108
+msgid "off"
+msgstr "off"
+
+#: templates/admin/cms_change_list.html:110
+#: templates/admin/page_change_list.html:65
+msgid "Filter"
+msgstr "Filter"
+
+#: templates/admin/index.html:18 templates/admin/page_index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Models available in the %(name)s application."
+
+#: templates/admin/index.html:19 templates/admin/page_app_index.html:10
+#: templates/admin/page_index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: templates/admin/index.html:29 templates/admin/page_change_form.html:20
+#: templates/admin/page_index.html:29
+msgid "Add"
+msgstr "Add"
+
+#: templates/admin/index.html:35 templates/admin/page_index.html:35
+msgid "Change"
+msgstr "changed by"
+
+#: templates/admin/index.html:64 templates/admin/page_index.html:45
+msgid "You don't have permission to edit anything."
+msgstr "You don't have permission to edit anything."
+
+#: templates/admin/index.html:72 templates/admin/page_index.html:53
+msgid "Recent Actions"
+msgstr "Recent Actions"
+
+#: templates/admin/index.html:73 templates/admin/page_index.html:54
+msgid "My Actions"
+msgstr "My Actions"
+
+#: templates/admin/index.html:77 templates/admin/page_index.html:58
+msgid "None available"
+msgstr "None available"
+
+#: templates/admin/index.html:91 templates/admin/page_index.html:72
+msgid "Unknown content"
+msgstr "Unknown content"
+
+#: templates/admin/page_base.html:20 templates/admin/page_index.html:11
+msgid "Pages"
+msgstr "Pages"
+
+#: templates/admin/page_base_site.html:7
+msgid "Django administration"
+msgstr "Django administration"
+
+#: templates/admin/page_login.html:8
+msgid "Connexion"
+msgstr "Login"
+
+#: templates/admin/page_login.html:20
+msgid "Username:"
+msgstr "Username:"
+
+#: templates/admin/page_login.html:24
+msgid "Password:"
+msgstr "Password:"
+
+#: templates/admin/page_login.html:29
+#: user/templates/registration/login.html:29
+msgid "Create an account"
+msgstr "Create an account"
+
+#: templates/admin/page_login.html:30
+#: user/templates/registration/login.html:30
+msgid "Forget password?"
+msgstr "Forget password?"
+
+#: templates/admin/page_login.html:32
+#: user/templates/iriuser/user/login_form.html:37
+#: user/templates/iriuser/user/login_form.html:45
+#: user/templates/registration/login.html:14
+#: user/templates/registration/password_reset_complete.html:14
+msgid "Log in"
+msgstr "Log in"
+
+#: templates/cms/admin/cms/page/change_form.html:11
+msgid "Documentation"
+msgstr "Documentation"
+
+#: templates/cms/admin/cms/page/change_form.html:11
+msgid "Change password"
+msgstr "Change password"
+
+#: templates/cms/admin/cms/page/change_form.html:11
+#: user/templates/iriuser/user/login_form.html:34
+msgid "Log out"
+msgstr "Log out"
+
+#: templates/cms/admin/cms/page/change_form.html:42
+msgid "Ordering"
+msgstr "Ordering"
+
+#: templates/cms/admin/cms/page/change_form.html:45
+msgid "Order:"
+msgstr "Order:"
+
+#: user/admin.py:15
+msgid "User details"
+msgstr "User details"
+
+#: user/admin.py:16
+msgid "Groups"
+msgstr "Groups"
+
+#: user/admin.py:17
+msgid "Permissions"
+msgstr "Permissions"
+
+#: user/admin.py:27 user/templates/iriuser/user/login_form.html:61
+msgid "Password"
+msgstr "Password"
+
+#: user/forms.py:31
+msgid "New password"
+msgstr "New password"
+
+#: user/forms.py:33
+msgid "New password confirmation"
+msgstr "New password confirmation"
+
+#: user/forms.py:78 user/forms.py:79
+msgid "E-mail"
+msgstr "E-mail"
+
+#: user/forms.py:90
+msgid "The two emails didn't match."
+msgstr "The two emails didn't match."
+
+#: user/views.py:45 user/templates/registration/login.html:17
+msgid "Sorry, that's not a valid username or password."
+msgstr "Sorry, that's not a valid username or password."
+
+#: user/templates/iriuser/user/change_email.html:6
+#: user/templates/iriuser/user/change_email_done.html:6
+#: user/templates/iriuser/user/login_form.html:32
+#: user/templates/registration/password_change_done.html:7
+#: user/templates/registration/password_change_form.html:13
+msgid "Profiles"
+msgstr "Profiles"
+
+#: user/templates/iriuser/user/change_email.html:7
+#: user/templates/iriuser/user/change_email.html:10
+msgid "Modification de l'adresse émail"
+msgstr "E-mail change"
+
+#: user/templates/iriuser/user/change_email.html:26
+msgid ""
+"Please enter your new e-mail twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Please enter your new e-mail twice so we can verify you typed it in "
+"correctly."
+
+#: user/templates/iriuser/user/change_email.html:32
+msgid "email"
+msgstr "email"
+
+#: user/templates/iriuser/user/change_email.html:41
+msgid "Confirmation de l'adresse émail"
+msgstr "E-mail confirmation"
+
+#: user/templates/iriuser/user/change_email.html:48
+msgid "change my e-mail"
+msgstr "Change my e-mail"
+
+#: user/templates/iriuser/user/change_email_done.html:7
+#: user/templates/iriuser/user/change_email_done.html:10
+msgid "email change"
+msgstr "email change"
+
+#: user/templates/iriuser/user/change_email_done.html:12
+msgid "email changed"
+msgstr "changed by"
+
+#: user/templates/iriuser/user/change_email_done.html:13
+msgid "back to profile"
+msgstr "back to profile"
+
+#: user/templates/iriuser/user/home.html:9
+msgid "Se connecter"
+msgstr "Login"
+
+#: user/templates/iriuser/user/home.html:10
+msgid "Créer un compte"
+msgstr "Create an account"
+
+#: user/templates/iriuser/user/home.html:11
+msgid "récupérer mot de passe"
+msgstr "Forget password?"
+
+#: user/templates/iriuser/user/login_form.html:50
+msgid "create account"
+msgstr "create account"
+
+#: user/templates/iriuser/user/login_form.html:54
+msgid "Pseudo"
+msgstr "Username"
+
+#: user/templates/iriuser/user/login_form.html:57
+#: user/templates/iriuser/user/login_form.html:64
+msgid "this field is compulsory"
+msgstr "this field is compulsory"
+
+#: user/templates/iriuser/user/login_form.html:68
+msgid "reset password"
+msgstr "reset password"
+
+#: user/templates/iriuser/user/login_form.html:71
+msgid "Connection"
+msgstr "Login"
+
+#: user/templates/iriuser/user/profile.html:6
+#: user/templates/registration/password_change_form.html:14
+#: user/templates/registration/password_change_form.html:17
+msgid "Password change"
+msgstr "Password change"
+
+#: user/templates/iriuser/user/profile.html:7
+msgid "Mail change"
+msgstr "Mail change"
+
+#: user/templates/iriuser/user/space.html:13
+msgid "Page"
+msgstr "Pages"
+
+#: user/templates/iriuser/user/space.html:16
+msgid "Projets Lignes de temps"
+msgstr "Lignes de temps projects"
+
+#: user/templates/registration/activate.html:6
+#: user/templates/registration/activate.html:9
+msgid "Activate account"
+msgstr "Activate account"
+
+#: user/templates/registration/activate.html:12
+msgid "You have activated your account"
+msgstr "You have activated your account"
+
+#: user/templates/registration/activate.html:13
+msgid "Go back to login page"
+msgstr "Go back to login page"
+
+#: user/templates/registration/activation_complete.html:4
+#: user/templates/registration/registration_complete.html:8
+msgid "Sign up successfully"
+msgstr "Sign up successfully"
+
+#: user/templates/registration/activation_complete.html:6
+msgid "activation completed"
+msgstr "activation completed"
+
+#: user/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Thanks for spending some quality time with the Web site today."
+
+#: user/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Log in again"
+
+#: user/templates/registration/login.html:25
+msgid "login"
+msgstr "login"
+
+#: user/templates/registration/password_change_done.html:3
+#: user/templates/registration/password_change_done.html:11
+msgid "password change successful"
+msgstr "password change successful"
+
+#: user/templates/registration/password_change_done.html:8
+msgid "password change"
+msgstr "password change"
+
+#: user/templates/registration/password_change_done.html:14
+msgid "Your password has been changed."
+msgstr "Your password has been changed."
+
+#: user/templates/registration/password_change_done.html:15
+msgid "Go back to profiles"
+msgstr "Go back to profiles"
+
+#: user/templates/registration/password_change_form.html:20
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+
+#: user/templates/registration/password_change_form.html:26
+msgid "Old password:"
+msgstr "Old password:"
+
+#: user/templates/registration/password_change_form.html:32
+#: user/templates/registration/password_reset_confirm.html:19
+msgid "New password:"
+msgstr "New password:"
+
+#: user/templates/registration/password_change_form.html:38
+#: user/templates/registration/password_reset_confirm.html:21
+msgid "Confirm password:"
+msgstr "Confirm password:"
+
+#: user/templates/registration/password_change_form.html:44
+#: user/templates/registration/password_reset_confirm.html:22
+msgid "Change my password"
+msgstr "Change my password"
+
+#: user/templates/registration/password_reset_complete.html:6
+#: user/templates/registration/password_reset_confirm.html:6
+#: user/templates/registration/password_reset_confirm.html:9
+#: user/templates/registration/password_reset_done.html:6
+#: user/templates/registration/password_reset_form.html:13
+#: user/templates/registration/password_reset_form.html:15
+#: user/templates/registration/password_reset_form.html:18
+msgid "Password reset"
+msgstr "Password reset"
+
+#: user/templates/registration/password_reset_complete.html:9
+msgid "Password reset complete"
+msgstr "Password reset complete"
+
+#: user/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set. You may go ahead and log in now."
+msgstr "Your password has been set. You may go ahead and log in now."
+
+#: user/templates/registration/password_reset_confirm.html:15
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+
+#: user/templates/registration/password_reset_confirm.html:27
+msgid "Password reset unsuccessful"
+msgstr "Password reset unsuccessful"
+
+#: user/templates/registration/password_reset_confirm.html:29
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used. Please request a new password reset."
+msgstr ""
+"The password reset link was invalid, possibly because it has already been "
+"used. Please request a new password reset."
+
+#: user/templates/registration/password_reset_done.html:8
+msgid "Password reset successful"
+msgstr "Password reset successful"
+
+#: user/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+
+#: user/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "You're receiving this e-mail because you requested a password reset"
+
+#: user/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "for your user account at %(site_name)s"
+
+#: user/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "Please go to the following page and choose a new password:"
+
+#: user/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Your username, in case you've forgotten:"
+
+#: user/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr "Thanks for using our site!"
+
+#: user/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "The %(site_name)s team"
+
+#: user/templates/registration/password_reset_form.html:22
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+
+#: user/templates/registration/password_reset_form.html:27
+msgid "Adresse émail"
+msgstr "E-mail"
+
+#: user/templates/registration/password_reset_form.html:32
+msgid "Reset my password"
+msgstr "Reset my password"
+
+#: user/templates/registration/registration_active.html:5
+#: user/templates/registration/registration_active.html:7
+msgid "Activate the account"
+msgstr "Activate the account"
+
+#: user/templates/registration/registration_active.html:9
+msgid ""
+"Vous avez bien activé votre compte, vous pouvez accedez à votre espace "
+"personnel."
+msgstr ""
+"Vous avez bien activé votre compte, vous pouvez accedez à votre espace "
+"personnel."
+
+#: user/templates/registration/registration_active.html:10
+msgid "retourner à la page de connexion"
+msgstr "go back to login page"
+
+#: user/templates/registration/registration_complete.html:6
+#: user/templates/registration/registration_form.html:11
+msgid "Sign up"
+msgstr "Sign up"
+
+#: user/templates/registration/registration_complete.html:10
+msgid ""
+"We've e-mailed you instructions for activate your account to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"We've e-mailed you instructions for activate your account to the e-mail "
+"address you submitted. You should be receiving it shortly."
+
+#~ msgid "Changement de l'adresse émail"
+#~ msgstr "E-mail change"
+
+#~ msgid "Mot de passe"
+#~ msgstr "Password"
+
+#~ msgid "Déconnexion"
+#~ msgstr "Logout"
Binary file web/ldt/locale/fr/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/locale/fr/LC_MESSAGES/django.po Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,619 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-09 08:48-0600\n"
+"PO-Revision-Date: 2010-03-09 15:52+0100\n"
+"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ldt/models.py:43
+msgid "created by"
+msgstr "créé par"
+
+#: ldt/models.py:44
+msgid "changed by"
+msgstr "modifié par"
+
+#: ldt/templates/admin/ldt/app_action.html:6
+#: templates/admin/cms_change_list.html:7
+#: templates/admin/page_app_index.html:8
+#: templates/admin/page_change_form.html:17
+#: templates/admin/page_change_list.html:25
+#: user/templates/registration/logged_out.html:4
+msgid "Home"
+msgstr "Accueil"
+
+#: ldt/templates/iriuser/ldt/copy_ldt.html:12
+msgid "Copy your project"
+msgstr "Copier votre projet"
+
+#: ldt/templates/iriuser/ldt/copy_ldt.html:15
+#: ldt/templates/iriuser/ldt/create_ldt.html:15
+msgid "Title"
+msgstr "Titre"
+
+#: ldt/templates/iriuser/ldt/copy_ldt.html:18
+msgid "Copy"
+msgstr "Copier"
+
+#: ldt/templates/iriuser/ldt/create_ldt.html:12
+msgid "Create your project"
+msgstr "Créer votre projet Lignes de Temps"
+
+#: ldt/templates/iriuser/ldt/create_ldt.html:18
+msgid "List of contents"
+msgstr "Liste de contenus"
+
+#: ldt/templates/iriuser/ldt/create_ldt.html:25
+msgid "Create"
+msgstr "Créer"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:50
+#: templates/admin/page_base.html:19
+#: user/templates/iriuser/user/login_form.html:33
+#: user/templates/iriuser/user/space.html:6
+#: user/templates/iriuser/user/space.html:9
+msgid "Space"
+msgstr "Esp. perso"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:51
+#: ldt/templates/iriuser/ldt/ldt_list.html:53
+msgid "Ldt Project"
+msgstr "Projet lignes de temps"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:57
+msgid "Create new project"
+msgstr "Créer un nouveau projet Ligne de Temps"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:59
+msgid "Project"
+msgstr "Projet"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:62
+msgid "title"
+msgstr "Titre"
+
+#: ldt/templates/iriuser/ldt/ldt_list.html:63
+msgid " published"
+msgstr "Publié"
+
+#: templates/admin/cms_change_form.html:30
+msgid "Approve page deletion"
+msgstr "Accepter l'effacement de la page"
+
+#: templates/admin/cms_change_form.html:36
+#, python-format
+msgid "(requires approvement at %(moderation_level)s level)"
+msgstr "(Demande l'approbation au niveau %(moderation_level)s)"
+
+#: templates/admin/cms_change_form.html:37
+msgid "(you can perform actions on this page directly)"
+msgstr "(Vous pouvez agir sur cette page directement)"
+
+#: templates/admin/cms_change_form.html:50
+msgid "Remove delete request"
+msgstr "Effacer la requête d'affacement"
+
+#: templates/admin/cms_change_form.html:52
+msgid "Approve delete"
+msgstr "Accepter l'effacement"
+
+#: templates/admin/cms_change_form.html:52
+msgid "Approve"
+msgstr "Accepter"
+
+#: templates/admin/cms_change_form.html:52
+#: templates/admin/cms_change_form.html:53
+msgid "draft"
+msgstr "brouillon"
+
+#: templates/admin/cms_change_form.html:53
+msgid "Preview"
+msgstr "Aperçu"
+
+#: templates/admin/cms_change_form.html:56
+#: templates/admin/page_change_form.html:27
+msgid "History"
+msgstr "Histoire"
+
+#: templates/admin/cms_change_form.html:57
+#: templates/admin/page_change_form.html:28
+msgid "View on site"
+msgstr "Voir sur le site"
+
+#: templates/admin/cms_change_form.html:87
+#: templates/admin/page_change_form.html:38
+#: templates/admin/page_change_list.html:54
+#: templates/cms/admin/cms/page/change_form.html:24
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Veuillez corriger l'erreur ci-dessous"
+msgstr[1] "Veuillez corriger les erreurs ci-dessous"
+
+#: templates/admin/cms_change_form.html:107
+msgid "All permissions"
+msgstr "Toutes le parmissions"
+
+#: templates/admin/cms_change_form.html:108
+#: templates/admin/cms_change_form.html:120
+msgid "Loading..."
+msgstr "Chargement..."
+
+#: templates/admin/cms_change_form.html:119
+msgid "Page states"
+msgstr "Etat de la page"
+
+#: templates/admin/cms_change_form.html:142
+#, python-format
+msgid "This page must be moderated at level %(moderation_level)s, post a message for moderator."
+msgstr "Le niveau nécessaire pour modérer cette page est le niveau %(moderation_level)s, laisser un message pour le modérateur"
+
+#: templates/admin/cms_change_form.html:144
+msgid "Request approvemet"
+msgstr "Demander l'approbation"
+
+#: templates/admin/cms_change_form.html:234
+#: user/templates/registration/registration_form.html:16
+msgid "Save"
+msgstr "Enregistrer"
+
+#: templates/admin/cms_change_form.html:235
+msgid "Save and continue editing"
+msgstr "Sauver et continuer l'édition"
+
+#: templates/admin/cms_change_list.html:51
+msgid "Successfully moved"
+msgstr "Déplacement réussi"
+
+#: templates/admin/cms_change_list.html:76
+#, python-format
+msgid "Recover deleted %(name)s"
+msgstr "Récupérer %(name)s effacé"
+
+#: templates/admin/cms_change_list.html:79
+#: templates/admin/page_change_list.html:46
+#, python-format
+msgid "Add %(name)s"
+msgstr "Ajouter %(name)s"
+
+#: templates/admin/cms_change_list.html:91
+msgid "Pages on:"
+msgstr "Pages sur:"
+
+#: templates/admin/cms_change_list.html:108
+msgid "on"
+msgstr "on"
+
+#: templates/admin/cms_change_list.html:108
+msgid "off"
+msgstr "off"
+
+#: templates/admin/cms_change_list.html:110
+#: templates/admin/page_change_list.html:65
+msgid "Filter"
+msgstr "Filtre"
+
+#: templates/admin/index.html:18
+#: templates/admin/page_index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Le modèle disponible dans l'application %(name)s."
+
+#: templates/admin/index.html:19
+#: templates/admin/page_app_index.html:10
+#: templates/admin/page_index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: templates/admin/index.html:29
+#: templates/admin/page_change_form.html:20
+#: templates/admin/page_index.html:29
+msgid "Add"
+msgstr "Ajouter"
+
+#: templates/admin/index.html:35
+#: templates/admin/page_index.html:35
+msgid "Change"
+msgstr "modifié par"
+
+#: templates/admin/index.html:64
+#: templates/admin/page_index.html:45
+msgid "You don't have permission to edit anything."
+msgstr "Vous n'aver pas l'autorisation d'éditer quoi que ce soit."
+
+#: templates/admin/index.html:72
+#: templates/admin/page_index.html:53
+msgid "Recent Actions"
+msgstr "Actions récentes"
+
+#: templates/admin/index.html:73
+#: templates/admin/page_index.html:54
+msgid "My Actions"
+msgstr "Mes actions"
+
+#: templates/admin/index.html:77
+#: templates/admin/page_index.html:58
+msgid "None available"
+msgstr "Aucune disponible"
+
+#: templates/admin/index.html:91
+#: templates/admin/page_index.html:72
+msgid "Unknown content"
+msgstr "Contenu inconnu"
+
+#: templates/admin/page_base.html:20
+#: templates/admin/page_index.html:11
+msgid "Pages"
+msgstr "Pages"
+
+#: templates/admin/page_base_site.html:7
+msgid "Django administration"
+msgstr "Administration de Django"
+
+#: templates/admin/page_login.html:8
+msgid "Connexion"
+msgstr "Connexion"
+
+#: templates/admin/page_login.html:20
+msgid "Username:"
+msgstr "Nom de utilisateur :"
+
+#: templates/admin/page_login.html:24
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: templates/admin/page_login.html:29
+#: user/templates/registration/login.html:29
+msgid "Create an account"
+msgstr "Créer un compte"
+
+#: templates/admin/page_login.html:30
+#: user/templates/registration/login.html:30
+msgid "Forget password?"
+msgstr "Oubliez le mot de passe?"
+
+#: templates/admin/page_login.html:32
+#: user/templates/iriuser/user/login_form.html:37
+#: user/templates/iriuser/user/login_form.html:45
+#: user/templates/registration/login.html:14
+#: user/templates/registration/password_reset_complete.html:14
+msgid "Log in"
+msgstr "Connexion"
+
+#: templates/cms/admin/cms/page/change_form.html:11
+msgid "Documentation"
+msgstr "Documentation"
+
+#: templates/cms/admin/cms/page/change_form.html:11
+msgid "Change password"
+msgstr "Modifier le mot de passe"
+
+#: templates/cms/admin/cms/page/change_form.html:11
+#: user/templates/iriuser/user/login_form.html:34
+msgid "Log out"
+msgstr "Déconnexion"
+
+#: templates/cms/admin/cms/page/change_form.html:42
+msgid "Ordering"
+msgstr "Ordre"
+
+#: templates/cms/admin/cms/page/change_form.html:45
+msgid "Order:"
+msgstr "Ordre :"
+
+#: user/admin.py:15
+msgid "User details"
+msgstr "Détail utilisateur"
+
+#: user/admin.py:16
+msgid "Groups"
+msgstr "Groupes"
+
+#: user/admin.py:17
+msgid "Permissions"
+msgstr "Permissions"
+
+#: user/admin.py:27
+#: user/templates/iriuser/user/login_form.html:61
+msgid "Password"
+msgstr "Mot de passe"
+
+#: user/forms.py:31
+msgid "New password"
+msgstr "Nouveau mot de passe"
+
+#: user/forms.py:33
+msgid "New password confirmation"
+msgstr "Confirmation du nouveau mot de passe"
+
+#: user/forms.py:78
+#: user/forms.py:79
+msgid "E-mail"
+msgstr "E-mail"
+
+#: user/forms.py:90
+msgid "The two emails didn't match."
+msgstr "les deux emails ne correspondent pas"
+
+#: user/views.py:45
+#: user/templates/registration/login.html:17
+msgid "Sorry, that's not a valid username or password."
+msgstr "Saisissez un nom d'utilisateur et un mot de passe valide."
+
+#: user/templates/iriuser/user/change_email.html:6
+#: user/templates/iriuser/user/change_email_done.html:6
+#: user/templates/iriuser/user/login_form.html:32
+#: user/templates/registration/password_change_done.html:7
+#: user/templates/registration/password_change_form.html:13
+msgid "Profiles"
+msgstr "Mon profil"
+
+#: user/templates/iriuser/user/change_email.html:7
+#: user/templates/iriuser/user/change_email.html:10
+msgid "Modification de l'adresse émail"
+msgstr "Modification de l'adresse email"
+
+#: user/templates/iriuser/user/change_email.html:26
+msgid "Please enter your new e-mail twice so we can verify you typed it in correctly."
+msgstr "Saisissez deux fois votre nouvelle adresse émail afin de vérifier qu'il est correctment"
+
+#: user/templates/iriuser/user/change_email.html:32
+msgid "email"
+msgstr "adresse émail"
+
+#: user/templates/iriuser/user/change_email.html:41
+msgid "Confirmation de l'adresse émail"
+msgstr "Confirmation de l'adresse email"
+
+#: user/templates/iriuser/user/change_email.html:48
+msgid "change my e-mail"
+msgstr "Changer l'adresse émail"
+
+#: user/templates/iriuser/user/change_email_done.html:7
+#: user/templates/iriuser/user/change_email_done.html:10
+msgid "email change"
+msgstr "Modification de l'adresse émail"
+
+#: user/templates/iriuser/user/change_email_done.html:12
+msgid "email changed"
+msgstr "email modifié"
+
+#: user/templates/iriuser/user/change_email_done.html:13
+msgid "back to profile"
+msgstr "Retourner à mon profil"
+
+#: user/templates/iriuser/user/home.html:9
+msgid "Se connecter"
+msgstr "Se connecter"
+
+#: user/templates/iriuser/user/home.html:10
+msgid "Créer un compte"
+msgstr "Créere un compte"
+
+#: user/templates/iriuser/user/home.html:11
+msgid "récupérer mot de passe"
+msgstr "Récupérer le mot de passe"
+
+#: user/templates/iriuser/user/login_form.html:50
+msgid "create account"
+msgstr "Créer un compte"
+
+#: user/templates/iriuser/user/login_form.html:54
+msgid "Pseudo"
+msgstr "Pseudo"
+
+#: user/templates/iriuser/user/login_form.html:57
+#: user/templates/iriuser/user/login_form.html:64
+msgid "this field is compulsory"
+msgstr "Ce champs est obligatoire"
+
+#: user/templates/iriuser/user/login_form.html:68
+msgid "reset password"
+msgstr "Réinitialiser le mot de passe"
+
+#: user/templates/iriuser/user/login_form.html:71
+msgid "Connection"
+msgstr "Connexion"
+
+#: user/templates/iriuser/user/profile.html:6
+#: user/templates/registration/password_change_form.html:14
+#: user/templates/registration/password_change_form.html:17
+msgid "Password change"
+msgstr "Modification du mot de passe"
+
+#: user/templates/iriuser/user/profile.html:7
+msgid "Mail change"
+msgstr "Modification de l'adresse émail"
+
+#: user/templates/iriuser/user/space.html:13
+msgid "Page"
+msgstr "Pages"
+
+#: user/templates/iriuser/user/space.html:16
+msgid "Projets Lignes de temps"
+msgstr "Projets Lignes de temps"
+
+#: user/templates/registration/activate.html:6
+#: user/templates/registration/activate.html:9
+msgid "Activate account"
+msgstr "Activer le compte"
+
+#: user/templates/registration/activate.html:12
+msgid "You have activated your account"
+msgstr "Vous avez bien activé votre compte."
+
+#: user/templates/registration/activate.html:13
+msgid "Go back to login page"
+msgstr "Retourner à la page de connexion"
+
+#: user/templates/registration/activation_complete.html:4
+#: user/templates/registration/registration_complete.html:8
+msgid "Sign up successfully"
+msgstr "Création de compte avec succès"
+
+#: user/templates/registration/activation_complete.html:6
+msgid "activation completed"
+msgstr "Activation terminée"
+
+#: user/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Merci de votre visite."
+
+#: user/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Se reconnecter"
+
+#: user/templates/registration/login.html:25
+msgid "login"
+msgstr "Connexion"
+
+#: user/templates/registration/password_change_done.html:3
+#: user/templates/registration/password_change_done.html:11
+msgid "password change successful"
+msgstr "Changement de mot de passe réussi"
+
+#: user/templates/registration/password_change_done.html:8
+msgid "password change"
+msgstr "Changement de mot de passe"
+
+#: user/templates/registration/password_change_done.html:14
+msgid "Your password has been changed."
+msgstr "Votre mot de passe a été changeé."
+
+#: user/templates/registration/password_change_done.html:15
+msgid "Go back to profiles"
+msgstr "Retourner à la page de mon profil"
+
+#: user/templates/registration/password_change_form.html:20
+msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
+msgstr "Par sécurité, veuillez enter votre ancien mot de passe puis le nouveau a deux reprise afin de savoir si vous l'avez taper correctement "
+
+#: user/templates/registration/password_change_form.html:26
+msgid "Old password:"
+msgstr "Ancien mot de passe :"
+
+#: user/templates/registration/password_change_form.html:32
+#: user/templates/registration/password_reset_confirm.html:19
+msgid "New password:"
+msgstr "Nouveau mot de passe :"
+
+#: user/templates/registration/password_change_form.html:38
+#: user/templates/registration/password_reset_confirm.html:21
+msgid "Confirm password:"
+msgstr "Confirmer le mot de passe :"
+
+#: user/templates/registration/password_change_form.html:44
+#: user/templates/registration/password_reset_confirm.html:22
+msgid "Change my password"
+msgstr "Modifier mon mot de passe"
+
+#: user/templates/registration/password_reset_complete.html:6
+#: user/templates/registration/password_reset_confirm.html:6
+#: user/templates/registration/password_reset_confirm.html:9
+#: user/templates/registration/password_reset_done.html:6
+#: user/templates/registration/password_reset_form.html:13
+#: user/templates/registration/password_reset_form.html:15
+#: user/templates/registration/password_reset_form.html:18
+msgid "Password reset"
+msgstr "réinitialiser e mot de passe"
+
+#: user/templates/registration/password_reset_complete.html:9
+msgid "Password reset complete"
+msgstr "Réinitialisation du mot de passe terminée"
+
+#: user/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set. You may go ahead and log in now."
+msgstr "Votre mot de passe a été fixé. vous pouvez vous connecter maintenant."
+
+#: user/templates/registration/password_reset_confirm.html:15
+msgid "Please enter your new password twice so we can verify you typed it in correctly."
+msgstr "veuillez enter votre nouveau mot de pass deux fois afin de le vérifier."
+
+#: user/templates/registration/password_reset_confirm.html:27
+msgid "Password reset unsuccessful"
+msgstr "Reinitialisation du mot de pass a échoué"
+
+#: user/templates/registration/password_reset_confirm.html:29
+msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
+msgstr "Le lien de réinitialisation du mot de passe n'est pas valide, certainement car il a déjà été utilisé. veuiller demander une nouvelle réinitialisation."
+
+#: user/templates/registration/password_reset_done.html:8
+msgid "Password reset successful"
+msgstr "Réinitialisation du mot de passe réussie"
+
+#: user/templates/registration/password_reset_done.html:12
+msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Nous vous avons envoyer les instructions de reinitialisation de votre mot de passe à l'adresse email que vous nous avez fournie. vous devriez les recevoir bientôt."
+
+#: user/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Vous recevez ce mail car vous avez damender la réinitialisation du mot de passe"
+
+#: user/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "Pour votre compte sur le site %(site_name)s"
+
+#: user/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "veuillez aller à la page suivante et choisissez un nouveau mot de passe :"
+
+#: user/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Pour rappel votre nom d'autilisateur :"
+
+#: user/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr "Merci de votre visite."
+
+#: user/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "L'équipe du site %(site_name)s"
+
+#: user/templates/registration/password_reset_form.html:22
+msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
+msgstr "Mot de passe oublié ? Entrez votre adresse email ci-dessous pour recevoir les instructions pour en entrer un nouveau."
+
+#: user/templates/registration/password_reset_form.html:27
+msgid "Adresse émail"
+msgstr "Adresse email"
+
+#: user/templates/registration/password_reset_form.html:32
+msgid "Reset my password"
+msgstr "Reinitialiser mon mot de passe"
+
+#: user/templates/registration/registration_active.html:5
+#: user/templates/registration/registration_active.html:7
+msgid "Activate the account"
+msgstr "Activer le compte"
+
+#: user/templates/registration/registration_active.html:9
+msgid "Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel."
+msgstr "Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel."
+
+#: user/templates/registration/registration_active.html:10
+msgid "retourner à la page de connexion"
+msgstr "retourner à la page de connexion"
+
+#: user/templates/registration/registration_complete.html:6
+#: user/templates/registration/registration_form.html:11
+msgid "Sign up"
+msgstr "Création d'un compte"
+
+#: user/templates/registration/registration_complete.html:10
+msgid "We've e-mailed you instructions for activate your account to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Nous vous avons envoyé par courriel les instructions pour activer le compte à l'adresse que vous avez indiquée. Vous devriez le recevoir rapidement."
+
+#~ msgid "Password (Verification)"
+#~ msgstr "Mot de passe (Vérification)"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/management/__init__.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,66 @@
+from django.db.models import signals
+from django.conf import settings
+from django.contrib.auth.models import User, Group
+from ldt.core.models import Owner
+from ldt.user.models import ldt, IriGroup
+from django.contrib.contenttypes.models import ContentType
+# import logging
+from django.core.exceptions import ObjectDoesNotExist
+
+
+def post_save_ldt(instance, raw, created, **kwargs):
+ signals.post_save.send(sender=User, instance=instance, raw=raw, created=created)
+
+signals.post_save.connect(post_save_ldt, ldt)
+
+def post_save_irigroup(instance, raw, created, **kwargs):
+ signals.post_save.send(sender=Group, instance=instance, raw=raw, created=created)
+
+signals.post_save.connect(post_save_irigroup, IriGroup)
+
+def post_save_user(instance, raw, created, **kwargs):
+ if created:
+ try:
+ owner = Owner.objects.get(user=instance)
+ except ObjectDoesNotExist:
+ owner=Owner(user=instance)
+ owner.save()
+
+signals.post_save.connect(post_save_user, User)
+
+def post_save_group(instance, raw, created, **kwargs):
+ if created:
+ try:
+ owner = Owner.objects.get(group=instance)
+ except ObjectDoesNotExist:
+ owner=Owner(group=instance)
+ owner.save()
+
+signals.post_save.connect(post_save_group, Group)
+
+
+def test_cms():
+ if 'cms' in settings.INSTALLED_APPS:
+ return True
+ else:
+ return False
+
+def test_ldt():
+ if 'ldt.ldt_utils' in settings.INSTALLED_APPS:
+ return True
+ else:
+ return False
+
+def get_content_type_list() :
+ content_type_list = []
+ if test_cms():
+ content_type = ContentType.objects.get(app_label='cms', model='page')
+ content_type_list.append(content_type)
+ content_type = ContentType.objects.get(app_label='snippet', model='snippet')
+ content_type_list.append(content_type)
+ # if test_ldt():
+ # content_type = ContentType.objects.get(app_label='ldt', model='content')
+ # content_type_list.append(content_type)
+ return content_type_list
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/css/ldt.css Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,122 @@
+#addldtform
+{
+ font-size: 16px;
+ background: #ffffff scroll repeat 0 0;
+ border: 1px solid #666666;
+ text-align: left;
+ width: 700px;
+}
+
+#addldtform .title
+{
+ color: #666666;
+ font-weight:bold !important;
+ font-size:16px;
+ position: relative;
+ padding:8px 12px;
+}
+
+#addldtform .title .closebutton
+{
+ float: right;
+ text-decoration: none;
+ color:#666666;
+}
+
+
+#addldtform .form-row
+{
+ border-bottom: 1px solid #eeeeee;
+ font-size: 15px;
+ padding: 8px 12px;
+}
+
+#addldtform label
+{
+ float: left;
+ padding: 3px 8px 0 0;
+ width:8em;
+ color: #333333 !important;
+ font-weight: bold !important;
+}
+#addldtform input
+{
+ font-size: 15px;
+ font-weight: normal;
+ padding:2px 3px;
+ vertical-align: middle;
+ margin : 2px 0;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+}
+
+#addldtform .checkbox
+{
+ padding: 6px 3px 3px 30px;
+}
+
+#addldtform .submit-row input
+{
+ color:black;
+ border-color:#DDDDDD #AAAAAA #AAAAAA #DDDDDD;
+ background:#dddddd;
+ padding: 3px;
+ margin:0 10px 10px 10px;
+}
+/*
+#ldtlist{
+ width:60%;
+ overflow:auto;
+ padding:1em;
+}
+*/
+#ldtlist table {
+ border-collapse: collapse;
+ border-color: #ccc;
+ width:100%;
+}
+#ldtlist table caption{
+ color:black;
+ font-size:15px;
+ font-weight:bold;
+ padding:5px;
+ text-align:left;
+ text-transform:uppercase;
+}
+#ldtlist td, th {
+ font-size: 11px;
+ line-height: 13px;
+ border-bottom: 1px solid #eee;
+ vertical-align: top;
+ padding: 5px;
+ font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+}
+
+
+#ldtlist table thead {
+ color: #666;
+ padding: 2px 5px;
+ font-size: 13px;
+ background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+ border-left: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ white-space: nowrap;
+ vertical-align: middle;
+ font-weight: bold;
+ text-align: center;
+}
+
+#ldtlist table tbody td {
+ border-left: 1px solid #ddd;
+ text-align: center;
+}
+
+#ldtlist table tbody td:first-child {
+ border-left: 0;
+ border-right: 1px solid #ddd;
+ text-align: left;
+}
+
+#ldtlist table tfoot {
+ color: #666;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/css/style.css Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,47 @@
+#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
+ color:#0063DC;
+ margin-right:4px;
+ text-decoration:none;
+}
+
+#loginstate a:hover{
+ text-decoration: underline;
+}
+
+#loginstate ul {
+ margin:0;
+ padding:0;
+ float: left;
+}
+#loginstate li{
+ display: inline;
+ padding:0;
+ margin:0;
+}
+#loginstate #user{
+ color: #000000;
+ font-weight: bold;
+ margin-right:4px;
+}
+#loginstate ul .usertool a,
+#loginstate ul .usertool a:link,
+#loginstate ul .usertool a:visited {
+ color:#0063DC;
+ text-decoration:none;
+}
+
+#loginstate ul .usertool a:hover {
+ color:#0063DC;
+ text-decoration:underline;
+}
+
+.errorlist
+{
+ color: red;
+ font-size:12px
+}
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/css/style_base.css Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,202 @@
+body
+{ font-family: Arial, Helvetica, sans serif;
+ padding: 0px;
+ margin: 0px;
+ background-color: #f9f9f9;
+ font-size: 12px;
+}
+
+a
+{
+ color: #0045A3;
+ text-decoration:none;
+}
+
+a:hover
+{
+ color: #990000;
+ text-decoration: underline;
+}
+
+p
+{
+ font-size:12px;
+ font-weight:normal;
+ margin:0;
+ padding:0;
+}
+
+th
+{
+ text-align: left;
+}
+.button
+{
+ margin: 3px 0;
+ margin-left: 25px;
+ background: #3366CC;
+ padding: 0 6px;
+ border-color: #6699CC #3366CC #3366CC #6699CC;
+ border-style: solid;
+ border-width: 1px 2px 2px 1px;
+ font-size: 13px;
+ font-style: normal;
+ font-weight: bold;
+ color: #ffffff;
+}
+
+.errorlist
+{
+ color: red;
+ font-size:12px
+}
+#header
+{
+ background-color: #ffffcc;
+ height: 50px;
+}
+
+#logo
+{
+}
+
+#usertool
+{
+}
+
+#loginstate
+{
+ color:#0045A3;
+}
+
+#menu
+{
+ width: 200px;
+ vertical-align: top;
+}
+
+#container
+{
+ width: 90%;
+ margin: 10px auto;
+ background-color: #fff;
+ color: #000;
+}
+}
+#content
+{
+}
+
+#footer
+{
+}
+
+/* page login *//*
+#loginarea
+{
+ margin: 0 auto;
+ margin-top: 100px;
+ overflow: hidden;
+ width: 362px;
+ border: 2px solid #CCCCCC;
+}
+
+#loginarea .title
+{
+ font-size: 15px;
+ color: #FFFFFF;
+ background: #990000 scroll repeat left top;
+ font-weight:bold;
+ height:34px;
+ position: relative;
+ line-height: 34px;
+ overflow: hidden;
+ text-transform: uppercase;
+}
+
+#loginarea .title div
+{
+ margin-left: 12px;
+}
+
+#loginarea .login-form
+{
+ margin-top:20px;
+ margin-left:25px;
+}
+
+#loginarea .login-form .inputbox
+{
+ font-size: 13px;
+ line-height:20px;
+ text-align: left;
+}
+
+#loginarea .login-form label
+{
+ font-size: 14px;
+ font-weight: bold;
+}
+/*
+#loginarea .login-form .button
+{
+ margin: 3px 0;
+ margin-left: 25px;
+ background: #3366CC;
+ padding: 0 6px;
+ border-color: #6699CC #3366CC #3366CC #6699CC;
+ border-style: solid;
+ border-width: 1px 2px 2px 1px;
+ font-size: 13px;
+ font-style: normal;
+ font-weight: bold;
+ color: #ffffff;
+}
+
+#loginarea a
+{
+ font-size: 12px;
+ background:url("norm_left.gif") no-repeat left top;
+ padding:5px 15px;
+ margin: 5px;
+}
+
+#nav {
+ float:left;
+ width:100%;
+ font-size:93%;
+ line-height:normal;
+ background:#828282 repeat-x scroll 0 0;
+ margin:0;
+ padding:0;
+ list-style:none;
+}
+
+#nav a:link,
+#nav a:visited {
+ color:#fff;
+ background:#828282 repeat-x scroll 0 0;
+ padding:20px 40px 4px 10px;
+ float:left;
+ width:auto;
+ border-right:1px solid #999999;
+}
+
+#nav li a:hover {
+ color:#fff;
+ background:#999999 none repeat scroll 0 0;
+}
+
+#space #nav-space a, #profile #nav-profile a
+{
+ background:#666666 none repeat scroll 0 0;
+}
+
+#space #nav-space, #profile #nav-profile
+{
+ background:#666666 none repeat scroll 0 0;
+ color:#FFFFFF;
+}
+*/
+
+
Binary file web/ldt/media/img/loadingAnimation.gif has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/js/jquery.DOMWindow.js Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,372 @@
+(function($){
+
+ //closeDOMWindow
+ $.fn.closeDOMWindow = function(settings){
+
+ if(!settings){settings={};}
+
+ var run = function(passingThis){
+
+ if(settings.anchoredClassName){
+ var $anchorClassName = $('.'+settings.anchoredClassName);
+ $anchorClassName.fadeOut('fast',function(){
+ if($.fn.draggable){
+ $anchorClassName.draggable('destory').trigger("unload").remove();
+ }else{
+ $anchorClassName.trigger("unload").remove();
+ }
+ });
+ if(settings.functionCallOnClose){settings.functionCallAfterClose();}
+ }else{
+ var $DOMWindowOverlay = $('#DOMWindowOverlay');
+ var $DOMWindow = $('#DOMWindow');
+ $DOMWindowOverlay.fadeOut('fast',function(){
+ $DOMWindowOverlay.trigger('unload').unbind().remove();
+ });
+ $DOMWindow.fadeOut('fast',function(){
+ if($.fn.draggable){
+ $DOMWindow.draggable("destroy").trigger("unload").remove();
+ }else{
+ $DOMWindow.trigger("unload").remove();
+ }
+ });
+
+ $(window).unbind('scroll.DOMWindow');
+ $(window).unbind('resize.DOMWindow');
+
+ if($.fn.openDOMWindow.isIE6){$('#DOMWindowIE6FixIframe').remove();}
+ if(settings.functionCallOnClose){settings.functionCallAfterClose();}
+ }
+ };
+
+ if(settings.eventType){//if used with $().
+ return this.each(function(index){
+ $(this).bind(settings.eventType, function(){
+ run(this);
+ return false;
+ });
+ });
+ }else{//else called as $.function
+ run();
+ }
+
+ };
+
+ //allow for public call, pass settings
+ $.closeDOMWindow = function(s){$.fn.closeDOMWindow(s);};
+
+ //openDOMWindow
+ $.fn.openDOMWindow = function(instanceSettings){
+
+ var shortcut = $.fn.openDOMWindow;
+
+ //default settings combined with callerSettings////////////////////////////////////////////////////////////////////////
+
+ shortcut.defaultsSettings = {
+ anchoredClassName:'',
+ anchoredSelector:'',
+ borderColor:'#ccc',
+ borderSize:'4',
+ draggable:0,
+ eventType:null, //click, blur, change, dblclick, error, focus, load, mousedown, mouseout, mouseup etc...
+ fixedWindowY:100,
+ functionCallOnOpen:null,
+ functionCallOnClose:null,
+ height:500,
+ loader:0,
+ loaderHeight:0,
+ loaderImagePath:'',
+ loaderWidth:0,
+ modal:0,
+ overlay:1,
+ overlayColor:'#000',
+ overlayOpacity:'85',
+ positionLeft:0,
+ positionTop:0,
+ positionType:'centered', // centered, anchored, absolute, fixed
+ width:500,
+ windowBGColor:'#fff',
+ windowBGImage:null, // http path
+ windowHTTPType:'get',
+ windowPadding:10,
+ windowSource:'inline', //inline, ajax, iframe
+ windowSourceID:'',
+ windowSourceURL:'',
+ windowSourceAttrURL:'href',
+ windowOverflow : 'auto',
+ ajaxParameters : {}
+ };
+
+ var settings = $.extend({}, $.fn.openDOMWindow.defaultsSettings , instanceSettings || {});
+
+ //Public functions
+
+ shortcut.viewPortHeight = function(){ return self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;};
+ shortcut.viewPortWidth = function(){ return self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;};
+ shortcut.scrollOffsetHeight = function(){ return self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;};
+ shortcut.scrollOffsetWidth = function(){ return self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;};
+ shortcut.isIE6 = typeof document.body.style.maxHeight === "undefined";
+
+ //Private Functions/////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ var sizeOverlay = function(){
+ var $DOMWindowOverlay = $('#DOMWindowOverlay');
+ if(shortcut.isIE6){//if IE 6
+ var overlayViewportHeight = document.documentElement.offsetHeight + document.documentElement.scrollTop - 4;
+ var overlayViewportWidth = document.documentElement.offsetWidth - 21;
+ $DOMWindowOverlay.css({'height':overlayViewportHeight +'px','width':overlayViewportWidth+'px'});
+ }else{//else Firefox, safari, opera, IE 7+
+ $DOMWindowOverlay.css({'height':'100%','width':'100%','position':'fixed'});
+ }
+ };
+
+ var sizeIE6Iframe = function(){
+ var overlayViewportHeight = document.documentElement.offsetHeight + document.documentElement.scrollTop - 4;
+ var overlayViewportWidth = document.documentElement.offsetWidth - 21;
+ $('#DOMWindowIE6FixIframe').css({'height':overlayViewportHeight +'px','width':overlayViewportWidth+'px'});
+ };
+
+ var centerDOMWindow = function() {
+ var $DOMWindow = $('#DOMWindow');
+ if(settings.height + 50 > shortcut.viewPortHeight()){//added 50 to be safe
+ $DOMWindow.css('left',Math.round(shortcut.viewPortWidth()/2) + shortcut.scrollOffsetWidth() - Math.round(($DOMWindow.outerWidth())/2));
+ }else{
+ $DOMWindow.css('left',Math.round(shortcut.viewPortWidth()/2) + shortcut.scrollOffsetWidth() - Math.round(($DOMWindow.outerWidth())/2));
+ $DOMWindow.css('top',Math.round(shortcut.viewPortHeight()/2) + shortcut.scrollOffsetHeight() - Math.round(($DOMWindow.outerHeight())/2));
+ }
+ };
+
+ var centerLoader = function() {
+ var $DOMWindowLoader = $('#DOMWindowLoader');
+ if(shortcut.isIE6){//if IE 6
+ $DOMWindowLoader.css({'left':Math.round(shortcut.viewPortWidth()/2) + shortcut.scrollOffsetWidth() - Math.round(($DOMWindowLoader.innerWidth())/2),'position':'absolute'});
+ $DOMWindowLoader.css({'top':Math.round(shortcut.viewPortHeight()/2) + shortcut.scrollOffsetHeight() - Math.round(($DOMWindowLoader.innerHeight())/2),'position':'absolute'});
+ }else{
+ $DOMWindowLoader.css({'left':'50%','top':'50%','position':'fixed'});
+ }
+
+ };
+
+ var fixedDOMWindow = function(){
+ var $DOMWindow = $('#DOMWindow');
+ $DOMWindow.css('left', settings.positionLeft + shortcut.scrollOffsetWidth());
+ $DOMWindow.css('top', + settings.positionTop + shortcut.scrollOffsetHeight());
+ };
+
+ var showDOMWindow = function(instance){
+ if(arguments[0]){
+ $('.'+instance+' #DOMWindowLoader').remove();
+ $('.'+instance+' #DOMWindowContent').fadeIn('fast',function(){if(settings.functionCallOnOpen){settings.functionCallOnOpen();}});
+ $('.'+instance+ '.closeDOMWindow').click(function(){
+ $.closeDOMWindow();
+ return false;
+ });
+ }else{
+ $('#DOMWindowLoader').remove();
+ $('#DOMWindow').fadeIn('fast',function(){if(settings.functionCallOnOpen){settings.functionCallOnOpen();}});
+ $('#DOMWindow .closeDOMWindow').click(function(){
+ $.closeDOMWindow();
+ return false;
+ });
+ }
+
+ };
+
+ var urlQueryToObject = function(s, q){
+ var query = typeof(q) != 'undefined' ? q : {};
+ s.replace(/b([^&=]*)=([^&=]*)b/g, function (m, a, d) {
+ if (typeof query[a] != 'undefined') {
+ query[a] += ',' + d;
+ } else {
+ query[a] = d;
+ }
+ });
+ return query;
+ };
+
+ //Run Routine ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ var run = function(passingThis){
+
+ //get values from element clicked, or assume its passed as an option
+ settings.windowSourceID = $(passingThis).attr('href') || settings.windowSourceID;
+ settings.windowSourceURL = $(passingThis).attr(settings.windowSourceAttrURL) || settings.windowSourceURL;
+ settings.windowBGImage = settings.windowBGImage ? 'background-image:url('+settings.windowBGImage+')' : '';
+ var urlOnly, urlQueryObject;
+
+ if(settings.positionType == 'anchored'){//anchored DOM window
+
+ var anchoredPositions = $(settings.anchoredSelector).position();
+ var anchoredPositionX = anchoredPositions.left + settings.positionLeft;
+ var anchoredPositionY = anchoredPositions.top + settings.positionTop;
+
+ $('body').append('<div class="'+settings.anchoredClassName+'" style="'+settings.windowBGImage+';background-repeat:no-repeat;padding:'+settings.windowPadding+'px;overflow:'+settings.windowOverflow+';position:absolute;top:'+anchoredPositionY+'px;left:'+anchoredPositionX+'px;height:'+settings.height+'px;width:'+settings.width+'px;background-color:'+settings.windowBGColor+';border:'+settings.borderSize+'px solid '+settings.borderColor+';z-index:10001"><div id="DOMWindowContent" style="display:none"></div></div>');
+ //loader
+ if(settings.loader && settings.loaderImagePath !== ''){
+ $('.'+settings.anchoredClassName).append('<div id="DOMWindowLoader" style="width:'+settings.loaderWidth+'px;height:'+settings.loaderHeight+'px;"><img src="'+settings.loaderImagePath+'" /></div>');
+
+ }
+
+ if($.fn.draggable){
+ if(settings.draggable){$('.' + settings.anchoredClassName).draggable({cursor:'move'});}
+ }
+
+ switch(settings.windowSource){
+ case 'inline'://////////////////////////////// inline //////////////////////////////////////////
+ $('.' + settings.anchoredClassName+" #DOMWindowContent").append($(settings.windowSourceID).children());
+ $('.' + settings.anchoredClassName).unload(function(){// move elements back when you're finished
+ $('.' + settings.windowSourceID).append( $('.' + settings.anchoredClassName+" #DOMWindowContent").children());
+ });
+ showDOMWindow(settings.anchoredClassName);
+ break;
+ case 'iframe'://////////////////////////////// iframe //////////////////////////////////////////
+ $('.' + settings.anchoredClassName+" #DOMWindowContent").append('<iframe frameborder="0" hspace="0" wspace="0" src="'+settings.windowSourceURL+'" name="DOMWindowIframe'+Math.round(Math.random()*1000)+'" style="width:100%;height:100%;border:none;background-color:#fff;overflow:'+settings.windowOverflow+';" class="'+settings.anchoredClassName+'Iframe" ></iframe>');
+ $('.'+settings.anchoredClassName+'Iframe').load(showDOMWindow(settings.anchoredClassName));
+ break;
+ case 'ajax'://////////////////////////////// ajax //////////////////////////////////////////
+ if(settings.windowHTTPType == 'post'){
+
+ if(settings.windowSourceURL.indexOf("?") !== -1){//has a query string
+ urlOnly = settings.windowSourceURL.substr(0, settings.windowSourceURL.indexOf("?"));
+ urlQueryObject = urlQueryToObject(settings.windowSourceURL, settings.ajaxParameters);
+ }else{
+ urlOnly = settings.windowSourceURL;
+ urlQueryObject = settings.ajaxParameters;
+ }
+ $('.' + settings.anchoredClassName+" #DOMWindowContent").load(urlOnly,urlQueryObject,function(){
+ showDOMWindow(settings.anchoredClassName);
+ });
+ }else{
+ if(settings.windowSourceURL.indexOf("?") == -1){ //no query string, so add one
+ settings.windowSourceURL += '?';
+ }
+ $('.' + settings.anchoredClassName+" #DOMWindowContent").load(
+ settings.windowSourceURL + '&random=' + (new Date().getTime()),function(){
+ showDOMWindow(settings.anchoredClassName);
+ });
+ }
+ break;
+ }
+
+ }else{//centered, fixed, absolute DOM window
+
+ //overlay & modal
+ if(settings.overlay){
+ $('body').append('<div id="DOMWindowOverlay" style="z-index:10000;display:none;position:absolute;top:0;left:0;background-color:'+settings.overlayColor+';filter:alpha(opacity='+settings.overlayOpacity+');-moz-opacity: 0.'+settings.overlayOpacity+';opacity: 0.'+settings.overlayOpacity+';"></div>');
+ if(shortcut.isIE6){//if IE 6
+ $('body').append('<iframe id="DOMWindowIE6FixIframe" src="blank.html" style="width:100%;height:100%;z-index:9999;position:absolute;top:0;left:0;filter:alpha(opacity=0);"></iframe>');
+ sizeIE6Iframe();
+ }
+ sizeOverlay();
+ var $DOMWindowOverlay = $('#DOMWindowOverlay');
+ $DOMWindowOverlay.fadeIn('fast');
+ if(!settings.modal){$DOMWindowOverlay.click(function(){$.closeDOMWindow();});}
+ }
+
+ //loader
+ if(settings.loader && settings.loaderImagePath !== ''){
+ $('body').append('<div id="DOMWindowLoader" style="z-index:10002;width:'+settings.loaderWidth+'px;height:'+settings.loaderHeight+'px;"><img src="'+settings.loaderImagePath+'" /></div>');
+ centerLoader();
+ }
+
+ //add DOMwindow
+ $('body').append('<div id="DOMWindow" style="background-repeat:no-repeat;'+settings.windowBGImage+';overflow:'+settings.windowOverflow+';padding:'+settings.windowPadding+'px;display:none;height:'+settings.height+'px;width:'+settings.width+'px;background-color:'+settings.windowBGColor+';border:'+settings.borderSize+'px solid '+settings.borderColor+'; position:absolute;z-index:10001"></div>');
+
+ var $DOMWindow = $('#DOMWindow');
+ //centered, absolute, or fixed
+ switch(settings.positionType){
+ case 'centered':
+ centerDOMWindow();
+ if(settings.height + 50 > shortcut.viewPortHeight()){//added 50 to be safe
+ $DOMWindow.css('top', (settings.fixedWindowY + shortcut.scrollOffsetHeight()) + 'px');
+ }
+ break;
+ case 'absolute':
+ $DOMWindow.css({'top':(settings.positionTop+shortcut.scrollOffsetHeight())+'px','left':(settings.positionLeft+shortcut.scrollOffsetWidth())+'px'});
+ if($.fn.draggable){
+ if(settings.draggable){$DOMWindow.draggable({cursor:'move'});}
+ }
+ break;
+ case 'fixed':
+ fixedDOMWindow();
+ break;
+ case 'anchoredSingleWindow':
+ var anchoredPositions = $(settings.anchoredSelector).position();
+ var anchoredPositionX = anchoredPositions.left + settings.positionLeft;
+ var anchoredPositionY = anchoredPositions.top + settings.positionTop;
+ $DOMWindow.css({'top':anchoredPositionY + 'px','left':anchoredPositionX+'px'});
+
+ break;
+ }
+
+ $(window).bind('scroll.DOMWindow',function(){
+ if(settings.overlay){sizeOverlay();}
+ if(shortcut.isIE6){sizeIE6Iframe();}
+ if(settings.positionType == 'centered'){centerDOMWindow();}
+ if(settings.positionType == 'fixed'){fixedDOMWindow();}
+ });
+
+ $(window).bind('resize.DOMWindow',function(){
+ if(shortcut.isIE6){sizeIE6Iframe();}
+ if(settings.overlay){sizeOverlay();}
+ if(settings.positionType == 'centered'){centerDOMWindow();}
+ });
+
+ switch(settings.windowSource){
+ case 'inline'://////////////////////////////// inline //////////////////////////////////////////
+ $DOMWindow.append($(settings.windowSourceID).children());
+ $DOMWindow.unload(function(){// move elements back when you're finished
+ $(settings.windowSourceID).append($DOMWindow.children());
+ });
+ showDOMWindow();
+ break;
+ case 'iframe'://////////////////////////////// iframe //////////////////////////////////////////
+ var name = 'DOMWindowIframe'+Math.round(Math.random()*1000);
+ $DOMWindow.append('<iframe frameborder="0" hspace="0" wspace="0" src="'+settings.windowSourceURL+'" name="'+name+'" style="width:100%;height:100%;border:none;background-color:#fff;overflow:'+settings.windowOverflow+';" id="DOMWindowIframe" ></iframe>');
+ $('#DOMWindowIframe').load(showDOMWindow());
+ break;
+ case 'ajax'://////////////////////////////// ajax //////////////////////////////////////////
+ if(settings.windowHTTPType == 'post'){
+
+ if(settings.windowSourceURL.indexOf("?") !== -1){//has a query string
+ urlOnly = settings.windowSourceURL.substr(0, settings.windowSourceURL.indexOf("?"));
+ urlQueryObject = urlQueryToObject(settings.windowSourceURL, settings.ajaxParameters);
+ }else{
+ urlOnly = settings.windowSourceURL;
+ urlQueryObject = settings.ajaxParameters;
+ }
+ $DOMWindow.load(urlOnly,urlQueryObject,function(){
+ showDOMWindow();
+ });
+ }else{
+ if(settings.windowSourceURL.indexOf("?") == -1){ //no query string, so add one
+ settings.windowSourceURL += '?';
+ }
+ $DOMWindow.load(
+ settings.windowSourceURL + '&random=' + (new Date().getTime()),function(){
+ showDOMWindow();
+ });
+ }
+ break;
+ }
+
+ }//end if anchored, or absolute, fixed, centered
+
+ };//end run()
+
+ if(settings.eventType){//if used with $().
+ return this.each(function(index){
+ $(this).bind(settings.eventType,function(){
+ run(this);
+ return false;
+ });
+ });
+ }else{//else called as $.function
+ run();
+ }
+
+ };//end function openDOMWindow
+
+ //allow for public call, pass settings
+ $.openDOMWindow = function(s){$.fn.openDOMWindow(s);};
+
+})(jQuery);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/js/jquery.js Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/js/jquery.validate.js Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,1131 @@
+/*
+ * jQuery validation plug-in 1.5.5
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
+ * http://docs.jquery.com/Plugins/Validation
+ *
+ * Copyright (c) 2006 - 2008 Jörn Zaefferer
+ *
+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+(function($) {
+
+$.extend($.fn, {
+ // http://docs.jquery.com/Plugins/Validation/validate
+ validate: function( options ) {
+
+ // if nothing is selected, return nothing; can't chain anyway
+ if (!this.length) {
+ options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
+ return;
+ }
+
+ // check if a validator for this form was already created
+ var validator = $.data(this[0], 'validator');
+ if ( validator ) {
+ return validator;
+ }
+
+ validator = new $.validator( options, this[0] );
+ $.data(this[0], 'validator', validator);
+
+ if ( validator.settings.onsubmit ) {
+
+ // allow suppresing validation by adding a cancel class to the submit button
+ this.find("input, button").filter(".cancel").click(function() {
+ validator.cancelSubmit = true;
+ });
+
+ // when a submitHandler is used, capture the submitting button
+ if (validator.settings.submitHandler) {
+ this.find("input, button").filter(":submit").click(function() {
+ validator.submitButton = this;
+ });
+ }
+
+ // validate the form on submit
+ this.submit( function( event ) {
+ if ( validator.settings.debug )
+ // prevent form submit to be able to see console output
+ event.preventDefault();
+
+ function handle() {
+ if ( validator.settings.submitHandler ) {
+ if (validator.submitButton) {
+ // insert a hidden input as a replacement for the missing submit button
+ var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
+ }
+ validator.settings.submitHandler.call( validator, validator.currentForm );
+ if (validator.submitButton) {
+ // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
+ hidden.remove();
+ }
+ return false;
+ }
+ return true;
+ }
+
+ // prevent submit for invalid forms or custom submit handlers
+ if ( validator.cancelSubmit ) {
+ validator.cancelSubmit = false;
+ return handle();
+ }
+ if ( validator.form() ) {
+ if ( validator.pendingRequest ) {
+ validator.formSubmitted = true;
+ return false;
+ }
+ return handle();
+ } else {
+ validator.focusInvalid();
+ return false;
+ }
+ });
+ }
+
+ return validator;
+ },
+ // http://docs.jquery.com/Plugins/Validation/valid
+ valid: function() {
+ if ( $(this[0]).is('form')) {
+ return this.validate().form();
+ } else {
+ var valid = true;
+ var validator = $(this[0].form).validate();
+ this.each(function() {
+ valid &= validator.element(this);
+ });
+ return valid;
+ }
+ },
+ // attributes: space seperated list of attributes to retrieve and remove
+ removeAttrs: function(attributes) {
+ var result = {},
+ $element = this;
+ $.each(attributes.split(/\s/), function(index, value) {
+ result[value] = $element.attr(value);
+ $element.removeAttr(value);
+ });
+ return result;
+ },
+ // http://docs.jquery.com/Plugins/Validation/rules
+ rules: function(command, argument) {
+ var element = this[0];
+
+ if (command) {
+ var settings = $.data(element.form, 'validator').settings;
+ var staticRules = settings.rules;
+ var existingRules = $.validator.staticRules(element);
+ switch(command) {
+ case "add":
+ $.extend(existingRules, $.validator.normalizeRule(argument));
+ staticRules[element.name] = existingRules;
+ if (argument.messages)
+ settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
+ break;
+ case "remove":
+ if (!argument) {
+ delete staticRules[element.name];
+ return existingRules;
+ }
+ var filtered = {};
+ $.each(argument.split(/\s/), function(index, method) {
+ filtered[method] = existingRules[method];
+ delete existingRules[method];
+ });
+ return filtered;
+ }
+ }
+
+ var data = $.validator.normalizeRules(
+ $.extend(
+ {},
+ $.validator.metadataRules(element),
+ $.validator.classRules(element),
+ $.validator.attributeRules(element),
+ $.validator.staticRules(element)
+ ), element);
+
+ // make sure required is at front
+ if (data.required) {
+ var param = data.required;
+ delete data.required;
+ data = $.extend({required: param}, data);
+ }
+
+ return data;
+ }
+});
+
+// Custom selectors
+$.extend($.expr[":"], {
+ // http://docs.jquery.com/Plugins/Validation/blank
+ blank: function(a) {return !$.trim(a.value);},
+ // http://docs.jquery.com/Plugins/Validation/filled
+ filled: function(a) {return !!$.trim(a.value);},
+ // http://docs.jquery.com/Plugins/Validation/unchecked
+ unchecked: function(a) {return !a.checked;}
+});
+
+// constructor for validator
+$.validator = function( options, form ) {
+ this.settings = $.extend( {}, $.validator.defaults, options );
+ this.currentForm = form;
+ this.init();
+};
+
+$.validator.format = function(source, params) {
+ if ( arguments.length == 1 )
+ return function() {
+ var args = $.makeArray(arguments);
+ args.unshift(source);
+ return $.validator.format.apply( this, args );
+ };
+ if ( arguments.length > 2 && params.constructor != Array ) {
+ params = $.makeArray(arguments).slice(1);
+ }
+ if ( params.constructor != Array ) {
+ params = [ params ];
+ }
+ $.each(params, function(i, n) {
+ source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
+ });
+ return source;
+};
+
+$.extend($.validator, {
+
+ defaults: {
+ messages: {},
+ groups: {},
+ rules: {},
+ errorClass: "error",
+ validClass: "valid",
+ errorElement: "label",
+ focusInvalid: true,
+ errorContainer: $( [] ),
+ errorLabelContainer: $( [] ),
+ onsubmit: true,
+ ignore: [],
+ ignoreTitle: false,
+ onfocusin: function(element) {
+ this.lastActive = element;
+
+ // hide error label and remove error class on focus if enabled
+ if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
+ this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
+ this.errorsFor(element).hide();
+ }
+ },
+ onfocusout: function(element) {
+ if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
+ this.element(element);
+ }
+ },
+ onkeyup: function(element) {
+ if ( element.name in this.submitted || element == this.lastElement ) {
+ this.element(element);
+ }
+ },
+ onclick: function(element) {
+ if ( element.name in this.submitted )
+ this.element(element);
+ },
+ highlight: function( element, errorClass, validClass ) {
+ $(element).addClass(errorClass).removeClass(validClass);
+ },
+ unhighlight: function( element, errorClass, validClass ) {
+ $(element).removeClass(errorClass).addClass(validClass);
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
+ setDefaults: function(settings) {
+ $.extend( $.validator.defaults, settings );
+ },
+
+ messages: {
+ required: "This field is required.",
+ remote: "Please fix this field.",
+ email: "Please enter a valid email address.",
+ url: "Please enter a valid URL.",
+ date: "Please enter a valid date.",
+ dateISO: "Please enter a valid date (ISO).",
+ dateDE: "Bitte geben Sie ein gültiges Datum ein.",
+ number: "Please enter a valid number.",
+ numberDE: "Bitte geben Sie eine Nummer ein.",
+ digits: "Please enter only digits",
+ creditcard: "Please enter a valid credit card number.",
+ equalTo: "Please enter the same value again.",
+ accept: "Please enter a value with a valid extension.",
+ maxlength: $.validator.format("Please enter no more than {0} characters."),
+ minlength: $.validator.format("Please enter at least {0} characters."),
+ rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
+ range: $.validator.format("Please enter a value between {0} and {1}."),
+ max: $.validator.format("Please enter a value less than or equal to {0}."),
+ min: $.validator.format("Please enter a value greater than or equal to {0}.")
+ },
+
+ autoCreateRanges: false,
+
+ prototype: {
+
+ init: function() {
+ this.labelContainer = $(this.settings.errorLabelContainer);
+ this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
+ this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
+ this.submitted = {};
+ this.valueCache = {};
+ this.pendingRequest = 0;
+ this.pending = {};
+ this.invalid = {};
+ this.reset();
+
+ var groups = (this.groups = {});
+ $.each(this.settings.groups, function(key, value) {
+ $.each(value.split(/\s/), function(index, name) {
+ groups[name] = key;
+ });
+ });
+ var rules = this.settings.rules;
+ $.each(rules, function(key, value) {
+ rules[key] = $.validator.normalizeRule(value);
+ });
+
+ function delegate(event) {
+ var validator = $.data(this[0].form, "validator");
+ validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
+ }
+ $(this.currentForm)
+ .delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
+ .delegate("click", ":radio, :checkbox", delegate);
+
+ if (this.settings.invalidHandler)
+ $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/form
+ form: function() {
+ this.checkForm();
+ $.extend(this.submitted, this.errorMap);
+ this.invalid = $.extend({}, this.errorMap);
+ if (!this.valid())
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
+ this.showErrors();
+ return this.valid();
+ },
+
+ checkForm: function() {
+ this.prepareForm();
+ for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
+ this.check( elements[i] );
+ }
+ return this.valid();
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/element
+ element: function( element ) {
+ element = this.clean( element );
+ this.lastElement = element;
+ this.prepareElement( element );
+ this.currentElements = $(element);
+ var result = this.check( element );
+ if ( result ) {
+ delete this.invalid[element.name];
+ } else {
+ this.invalid[element.name] = true;
+ }
+ if ( !this.numberOfInvalids() ) {
+ // Hide error containers on last error
+ this.toHide = this.toHide.add( this.containers );
+ }
+ this.showErrors();
+ return result;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
+ showErrors: function(errors) {
+ if(errors) {
+ // add items to error list and map
+ $.extend( this.errorMap, errors );
+ this.errorList = [];
+ for ( var name in errors ) {
+ this.errorList.push({
+ message: errors[name],
+ element: this.findByName(name)[0]
+ });
+ }
+ // remove items from success list
+ this.successList = $.grep( this.successList, function(element) {
+ return !(element.name in errors);
+ });
+ }
+ this.settings.showErrors
+ ? this.settings.showErrors.call( this, this.errorMap, this.errorList )
+ : this.defaultShowErrors();
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
+ resetForm: function() {
+ if ( $.fn.resetForm )
+ $( this.currentForm ).resetForm();
+ this.submitted = {};
+ this.prepareForm();
+ this.hideErrors();
+ this.elements().removeClass( this.settings.errorClass );
+ },
+
+ numberOfInvalids: function() {
+ return this.objectLength(this.invalid);
+ },
+
+ objectLength: function( obj ) {
+ var count = 0;
+ for ( var i in obj )
+ count++;
+ return count;
+ },
+
+ hideErrors: function() {
+ this.addWrapper( this.toHide ).hide();
+ },
+
+ valid: function() {
+ return this.size() == 0;
+ },
+
+ size: function() {
+ return this.errorList.length;
+ },
+
+ focusInvalid: function() {
+ if( this.settings.focusInvalid ) {
+ try {
+ $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
+ } catch(e) {
+ // ignore IE throwing errors when focusing hidden elements
+ }
+ }
+ },
+
+ findLastActive: function() {
+ var lastActive = this.lastActive;
+ return lastActive && $.grep(this.errorList, function(n) {
+ return n.element.name == lastActive.name;
+ }).length == 1 && lastActive;
+ },
+
+ elements: function() {
+ var validator = this,
+ rulesCache = {};
+
+ // select all valid inputs inside the form (no submit or reset buttons)
+ // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
+ return $([]).add(this.currentForm.elements)
+ .filter(":input")
+ .not(":submit, :reset, :image, [disabled]")
+ .not( this.settings.ignore )
+ .filter(function() {
+ !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
+
+ // select only the first element for each name, and only those with rules specified
+ if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
+ return false;
+
+ rulesCache[this.name] = true;
+ return true;
+ });
+ },
+
+ clean: function( selector ) {
+ return $( selector )[0];
+ },
+
+ errors: function() {
+ return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
+ },
+
+ reset: function() {
+ this.successList = [];
+ this.errorList = [];
+ this.errorMap = {};
+ this.toShow = $([]);
+ this.toHide = $([]);
+ this.formSubmitted = false;
+ this.currentElements = $([]);
+ },
+
+ prepareForm: function() {
+ this.reset();
+ this.toHide = this.errors().add( this.containers );
+ },
+
+ prepareElement: function( element ) {
+ this.reset();
+ this.toHide = this.errorsFor(element);
+ },
+
+ check: function( element ) {
+ element = this.clean( element );
+
+ // if radio/checkbox, validate first element in group instead
+ if (this.checkable(element)) {
+ element = this.findByName( element.name )[0];
+ }
+
+ var rules = $(element).rules();
+ var dependencyMismatch = false;
+ for( method in rules ) {
+ var rule = { method: method, parameters: rules[method] };
+ try {
+ var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
+
+ // if a method indicates that the field is optional and therefore valid,
+ // don't mark it as valid when there are no other rules
+ if ( result == "dependency-mismatch" ) {
+ dependencyMismatch = true;
+ continue;
+ }
+ dependencyMismatch = false;
+
+ if ( result == "pending" ) {
+ this.toHide = this.toHide.not( this.errorsFor(element) );
+ return;
+ }
+
+ if( !result ) {
+ this.formatAndAdd( element, rule );
+ return false;
+ }
+ } catch(e) {
+ this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
+ + ", check the '" + rule.method + "' method");
+ throw e;
+ }
+ }
+ if (dependencyMismatch)
+ return;
+ if ( this.objectLength(rules) )
+ this.successList.push(element);
+ return true;
+ },
+
+ // return the custom message for the given element and validation method
+ // specified in the element's "messages" metadata
+ customMetaMessage: function(element, method) {
+ if (!$.metadata)
+ return;
+
+ var meta = this.settings.meta
+ ? $(element).metadata()[this.settings.meta]
+ : $(element).metadata();
+
+ return meta && meta.messages && meta.messages[method];
+ },
+
+ // return the custom message for the given element name and validation method
+ customMessage: function( name, method ) {
+ var m = this.settings.messages[name];
+ return m && (m.constructor == String
+ ? m
+ : m[method]);
+ },
+
+ // return the first defined argument, allowing empty strings
+ findDefined: function() {
+ for(var i = 0; i < arguments.length; i++) {
+ if (arguments[i] !== undefined)
+ return arguments[i];
+ }
+ return undefined;
+ },
+
+ defaultMessage: function( element, method) {
+ return this.findDefined(
+ this.customMessage( element.name, method ),
+ this.customMetaMessage( element, method ),
+ // title is never undefined, so handle empty string as undefined
+ !this.settings.ignoreTitle && element.title || undefined,
+ $.validator.messages[method],
+ "<strong>Warning: No message defined for " + element.name + "</strong>"
+ );
+ },
+
+ formatAndAdd: function( element, rule ) {
+ var message = this.defaultMessage( element, rule.method );
+ if ( typeof message == "function" )
+ message = message.call(this, rule.parameters, element);
+ this.errorList.push({
+ message: message,
+ element: element
+ });
+ this.errorMap[element.name] = message;
+ this.submitted[element.name] = message;
+ },
+
+ addWrapper: function(toToggle) {
+ if ( this.settings.wrapper )
+ toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
+ return toToggle;
+ },
+
+ defaultShowErrors: function() {
+ for ( var i = 0; this.errorList[i]; i++ ) {
+ var error = this.errorList[i];
+ this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
+ this.showLabel( error.element, error.message );
+ }
+ if( this.errorList.length ) {
+ this.toShow = this.toShow.add( this.containers );
+ }
+ if (this.settings.success) {
+ for ( var i = 0; this.successList[i]; i++ ) {
+ this.showLabel( this.successList[i] );
+ }
+ }
+ if (this.settings.unhighlight) {
+ for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
+ this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
+ }
+ }
+ this.toHide = this.toHide.not( this.toShow );
+ this.hideErrors();
+ this.addWrapper( this.toShow ).show();
+ },
+
+ validElements: function() {
+ return this.currentElements.not(this.invalidElements());
+ },
+
+ invalidElements: function() {
+ return $(this.errorList).map(function() {
+ return this.element;
+ });
+ },
+
+ showLabel: function(element, message) {
+ var label = this.errorsFor( element );
+ if ( label.length ) {
+ // refresh error/success class
+ label.removeClass().addClass( this.settings.errorClass );
+
+ // check if we have a generated label, replace the message then
+ label.attr("generated") && label.html(message);
+ } else {
+ // create label
+ label = $("<" + this.settings.errorElement + "/>")
+ .attr({"for": this.idOrName(element), generated: true})
+ .addClass(this.settings.errorClass)
+ .html(message || "");
+ if ( this.settings.wrapper ) {
+ // make sure the element is visible, even in IE
+ // actually showing the wrapped element is handled elsewhere
+ label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
+ }
+ if ( !this.labelContainer.append(label).length )
+ this.settings.errorPlacement
+ ? this.settings.errorPlacement(label, $(element) )
+ : label.insertAfter(element);
+ }
+ if ( !message && this.settings.success ) {
+ label.text("");
+ typeof this.settings.success == "string"
+ ? label.addClass( this.settings.success )
+ : this.settings.success( label );
+ }
+ this.toShow = this.toShow.add(label);
+ },
+
+ errorsFor: function(element) {
+ return this.errors().filter("[for='" + this.idOrName(element) + "']");
+ },
+
+ idOrName: function(element) {
+ return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
+ },
+
+ checkable: function( element ) {
+ return /radio|checkbox/i.test(element.type);
+ },
+
+ findByName: function( name ) {
+ // select by name and filter by form for performance over form.find("[name=...]")
+ var form = this.currentForm;
+ return $(document.getElementsByName(name)).map(function(index, element) {
+ return element.form == form && element.name == name && element || null;
+ });
+ },
+
+ getLength: function(value, element) {
+ switch( element.nodeName.toLowerCase() ) {
+ case 'select':
+ return $("option:selected", element).length;
+ case 'input':
+ if( this.checkable( element) )
+ return this.findByName(element.name).filter(':checked').length;
+ }
+ return value.length;
+ },
+
+ depend: function(param, element) {
+ return this.dependTypes[typeof param]
+ ? this.dependTypes[typeof param](param, element)
+ : true;
+ },
+
+ dependTypes: {
+ "boolean": function(param, element) {
+ return param;
+ },
+ "string": function(param, element) {
+ return !!$(param, element.form).length;
+ },
+ "function": function(param, element) {
+ return param(element);
+ }
+ },
+
+ optional: function(element) {
+ return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
+ },
+
+ startRequest: function(element) {
+ if (!this.pending[element.name]) {
+ this.pendingRequest++;
+ this.pending[element.name] = true;
+ }
+ },
+
+ stopRequest: function(element, valid) {
+ this.pendingRequest--;
+ // sometimes synchronization fails, make sure pendingRequest is never < 0
+ if (this.pendingRequest < 0)
+ this.pendingRequest = 0;
+ delete this.pending[element.name];
+ if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
+ $(this.currentForm).submit();
+ } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
+ }
+ },
+
+ previousValue: function(element) {
+ return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
+ old: null,
+ valid: true,
+ message: this.defaultMessage( element, "remote" )
+ });
+ }
+
+ },
+
+ classRuleSettings: {
+ required: {required: true},
+ email: {email: true},
+ url: {url: true},
+ date: {date: true},
+ dateISO: {dateISO: true},
+ dateDE: {dateDE: true},
+ number: {number: true},
+ numberDE: {numberDE: true},
+ digits: {digits: true},
+ creditcard: {creditcard: true}
+ },
+
+ addClassRules: function(className, rules) {
+ className.constructor == String ?
+ this.classRuleSettings[className] = rules :
+ $.extend(this.classRuleSettings, className);
+ },
+
+ classRules: function(element) {
+ var rules = {};
+ var classes = $(element).attr('class');
+ classes && $.each(classes.split(' '), function() {
+ if (this in $.validator.classRuleSettings) {
+ $.extend(rules, $.validator.classRuleSettings[this]);
+ }
+ });
+ return rules;
+ },
+
+ attributeRules: function(element) {
+ var rules = {};
+ var $element = $(element);
+
+ for (method in $.validator.methods) {
+ var value = $element.attr(method);
+ if (value) {
+ rules[method] = value;
+ }
+ }
+
+ // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
+ if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
+ delete rules.maxlength;
+ }
+
+ return rules;
+ },
+
+ metadataRules: function(element) {
+ if (!$.metadata) return {};
+
+ var meta = $.data(element.form, 'validator').settings.meta;
+ return meta ?
+ $(element).metadata()[meta] :
+ $(element).metadata();
+ },
+
+ staticRules: function(element) {
+ var rules = {};
+ var validator = $.data(element.form, 'validator');
+ if (validator.settings.rules) {
+ rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
+ }
+ return rules;
+ },
+
+ normalizeRules: function(rules, element) {
+ // handle dependency check
+ $.each(rules, function(prop, val) {
+ // ignore rule when param is explicitly false, eg. required:false
+ if (val === false) {
+ delete rules[prop];
+ return;
+ }
+ if (val.param || val.depends) {
+ var keepRule = true;
+ switch (typeof val.depends) {
+ case "string":
+ keepRule = !!$(val.depends, element.form).length;
+ break;
+ case "function":
+ keepRule = val.depends.call(element, element);
+ break;
+ }
+ if (keepRule) {
+ rules[prop] = val.param !== undefined ? val.param : true;
+ } else {
+ delete rules[prop];
+ }
+ }
+ });
+
+ // evaluate parameters
+ $.each(rules, function(rule, parameter) {
+ rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
+ });
+
+ // clean number parameters
+ $.each(['minlength', 'maxlength', 'min', 'max'], function() {
+ if (rules[this]) {
+ rules[this] = Number(rules[this]);
+ }
+ });
+ $.each(['rangelength', 'range'], function() {
+ if (rules[this]) {
+ rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
+ }
+ });
+
+ if ($.validator.autoCreateRanges) {
+ // auto-create ranges
+ if (rules.min && rules.max) {
+ rules.range = [rules.min, rules.max];
+ delete rules.min;
+ delete rules.max;
+ }
+ if (rules.minlength && rules.maxlength) {
+ rules.rangelength = [rules.minlength, rules.maxlength];
+ delete rules.minlength;
+ delete rules.maxlength;
+ }
+ }
+
+ // To support custom messages in metadata ignore rule methods titled "messages"
+ if (rules.messages) {
+ delete rules.messages
+ }
+
+ return rules;
+ },
+
+ // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
+ normalizeRule: function(data) {
+ if( typeof data == "string" ) {
+ var transformed = {};
+ $.each(data.split(/\s/), function() {
+ transformed[this] = true;
+ });
+ data = transformed;
+ }
+ return data;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
+ addMethod: function(name, method, message) {
+ $.validator.methods[name] = method;
+ $.validator.messages[name] = message || $.validator.messages[name];
+ if (method.length < 3) {
+ $.validator.addClassRules(name, $.validator.normalizeRule(name));
+ }
+ },
+
+ methods: {
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/required
+ required: function(value, element, param) {
+ // check if dependency is met
+ if ( !this.depend(param, element) )
+ return "dependency-mismatch";
+ switch( element.nodeName.toLowerCase() ) {
+ case 'select':
+ var options = $("option:selected", element);
+ return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
+ case 'input':
+ if ( this.checkable(element) )
+ return this.getLength(value, element) > 0;
+ default:
+ return $.trim(value).length > 0;
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/remote
+ remote: function(value, element, param) {
+ if ( this.optional(element) )
+ return "dependency-mismatch";
+
+ var previous = this.previousValue(element);
+
+ if (!this.settings.messages[element.name] )
+ this.settings.messages[element.name] = {};
+ this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
+
+ param = typeof param == "string" && {url:param} || param;
+
+ if ( previous.old !== value ) {
+ previous.old = value;
+ var validator = this;
+ this.startRequest(element);
+ var data = {};
+ data[element.name] = value;
+ $.ajax($.extend(true, {
+ url: param,
+ mode: "abort",
+ port: "validate" + element.name,
+ dataType: "json",
+ data: data,
+ success: function(response) {
+ var valid = response === true;
+ if ( valid ) {
+ var submitted = validator.formSubmitted;
+ validator.prepareElement(element);
+ validator.formSubmitted = submitted;
+ validator.successList.push(element);
+ validator.showErrors();
+ } else {
+ var errors = {};
+ errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
+ validator.showErrors(errors);
+ }
+ previous.valid = valid;
+ validator.stopRequest(element, valid);
+ }
+ }, param));
+ return "pending";
+ } else if( this.pending[element.name] ) {
+ return "pending";
+ }
+ return previous.valid;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/minlength
+ minlength: function(value, element, param) {
+ return this.optional(element) || this.getLength($.trim(value), element) >= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
+ maxlength: function(value, element, param) {
+ return this.optional(element) || this.getLength($.trim(value), element) <= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
+ rangelength: function(value, element, param) {
+ var length = this.getLength($.trim(value), element);
+ return this.optional(element) || ( length >= param[0] && length <= param[1] );
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/min
+ min: function( value, element, param ) {
+ return this.optional(element) || value >= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/max
+ max: function( value, element, param ) {
+ return this.optional(element) || value <= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/range
+ range: function( value, element, param ) {
+ return this.optional(element) || ( value >= param[0] && value <= param[1] );
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/email
+ email: function(value, element) {
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/url
+ url: function(value, element) {
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
+ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/date
+ date: function(value, element) {
+ return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
+ dateISO: function(value, element) {
+ return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/dateDE
+ dateDE: function(value, element) {
+ return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/number
+ number: function(value, element) {
+ return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/numberDE
+ numberDE: function(value, element) {
+ return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/digits
+ digits: function(value, element) {
+ return this.optional(element) || /^\d+$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
+ // based on http://en.wikipedia.org/wiki/Luhn
+ creditcard: function(value, element) {
+ if ( this.optional(element) )
+ return "dependency-mismatch";
+ // accept only digits and dashes
+ if (/[^0-9-]+/.test(value))
+ return false;
+ var nCheck = 0,
+ nDigit = 0,
+ bEven = false;
+
+ value = value.replace(/\D/g, "");
+
+ for (n = value.length - 1; n >= 0; n--) {
+ var cDigit = value.charAt(n);
+ var nDigit = parseInt(cDigit, 10);
+ if (bEven) {
+ if ((nDigit *= 2) > 9)
+ nDigit -= 9;
+ }
+ nCheck += nDigit;
+ bEven = !bEven;
+ }
+
+ return (nCheck % 10) == 0;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/accept
+ accept: function(value, element, param) {
+ param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
+ return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
+ equalTo: function(value, element, param) {
+ return value == $(param).val();
+ }
+
+ }
+
+});
+
+// deprecated, use $.validator.format instead
+$.format = $.validator.format;
+
+})(jQuery);
+
+// ajax mode: abort
+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
+;(function($) {
+ var ajax = $.ajax;
+ var pendingRequests = {};
+ $.ajax = function(settings) {
+ // create settings for compatibility with ajaxSetup
+ settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
+ var port = settings.port;
+ if (settings.mode == "abort") {
+ if ( pendingRequests[port] ) {
+ pendingRequests[port].abort();
+ }
+ return (pendingRequests[port] = ajax.apply(this, arguments));
+ }
+ return ajax.apply(this, arguments);
+ };
+})(jQuery);
+
+// provides cross-browser focusin and focusout events
+// IE has native support, in other browsers, use event caputuring (neither bubbles)
+
+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
+
+// provides triggerEvent(type: String, target: Element) to trigger delegated events
+;(function($) {
+ $.each({
+ focus: 'focusin',
+ blur: 'focusout'
+ }, function( original, fix ){
+ $.event.special[fix] = {
+ setup:function() {
+ if ( $.browser.msie ) return false;
+ this.addEventListener( original, $.event.special[fix].handler, true );
+ },
+ teardown:function() {
+ if ( $.browser.msie ) return false;
+ this.removeEventListener( original,
+ $.event.special[fix].handler, true );
+ },
+ handler: function(e) {
+ arguments[0] = $.event.fix(e);
+ arguments[0].type = fix;
+ return $.event.handle.apply(this, arguments);
+ }
+ };
+ });
+ $.extend($.fn, {
+ delegate: function(type, delegate, handler) {
+ return this.bind(type, function(event) {
+ var target = $(event.target);
+ if (target.is(delegate)) {
+ return handler.apply(target, arguments);
+ }
+ });
+ },
+ triggerEvent: function(type, target) {
+ return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
+ }
+ })
+})(jQuery);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/js/login_ajax/jquery.login.js Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,77 @@
+$(document).ready(function() {
+ $('#password').keypress(function(e) {
+ if(e.which == 13) {
+ jQuery('#submit').focus().click();
+ }
+ });
+
+
+ $("#submit").click(function() {
+ var username=$("#username").val();
+ var password=$("#password").val();
+ var data = {'username': username, 'password': password, 'reload': reload};
+ if(username=="" && password=="")
+ {
+ $("#login_form_username_error").show();
+ $("#login_form_password_error").show();
+ $("#username").addClass("ajaxform_invalid");
+ $("#password").addClass("ajaxform_invalid");
+ }
+ else if(username=="" && password!="")
+ {
+ $("#login_form_username_error").show();
+ $("#username").addClass("ajaxform_invalid");
+ }
+ else if(password=="" && username!="")
+ {
+ $("#login_form_password_error").show();
+ $("#password").addClass("ajaxform_invalid");
+ }
+ else{
+
+ $.ajax({
+ type: "POST",
+ url : url_login_ajax,
+ dataType:'json',
+ data: data,
+ error: function (){
+ $("#msg").html("fail to connect");
+ },
+ success: function(data, reload){ //if success, refrash un bout de page pour afficher le nom de utilisateur et déconnecter.
+ if (data.message!="successful")
+ {
+ $("#msg").html(data.message).show();
+ }
+ else{
+ // $("#floatdialog_mask_loginform").hide();
+ //window.location.reload();
+ if (data.reload=='true'){
+ window.location.reload();
+ }
+ else{
+ //$("#loginstate").html('<a href ="'+url_userspace+'">'+data.username+'</a> | <a href="'+url_logout+'">déconnection</a>');
+ //$("#loginstate").html('<ul class="usertool"><li id="user">'+data.username+'</li><li><a href ="'+url_userprofile+'">Profiles</a></li><li><a href ="'+url_userspace+'">Space</a></li><li><a href="'+url_logout+'">déconnection</a></li></ul>');
+ var $DOMWindowOverlay = $('#DOMWindowOverlay');
+ var $DOMWindow = $('#DOMWindow');
+ $DOMWindowOverlay.fadeOut('fast',function(){
+ $DOMWindowOverlay.trigger('unload').unbind().remove();
+ });
+ $DOMWindow.fadeOut('fast',function(){
+ if($.fn.draggable){
+ $DOMWindow.draggable("destroy").trigger("unload").remove();
+ }else{
+ $DOMWindow.trigger("unload").remove();
+ }
+ });
+ $("#loginstate").html(data.html);
+ }
+ }
+
+
+ }
+ });
+ }
+ });
+})
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/js/login_ajax/login_ajax.css Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,75 @@
+#loginform
+{
+ font-size: 16px;
+ background: #ffffff scroll repeat 0 0;
+ /*border: 2px solid #666666;*/
+ text-align: left;
+ /*width: 400px;*/
+}
+
+#loginform .title
+{
+ color: #FFFFFF;
+ background: #990000 scroll repeat left top;
+ font-weight:bold;
+ height:34px;
+ position: relative;
+ line-height: 34px;
+ overflow: hidden;
+ text-transform: uppercase;
+}
+
+#loginform .title div
+{
+ font-size: 16px;
+ margin-left:12px;
+}
+
+#loginform .title .closeDOMWindow
+{
+ float: right;
+ text-decoration: none;
+ color:#ffffff;
+ padding-right:2px;
+}
+
+#loginform .ajaxform_invalid{
+ background: #ffdddd none repeat scroll 0 0;
+}
+
+#loginform .ajaxform_error{
+ display: none;
+ color:red;
+ font-size: 11px;
+ line-height: 13px;
+}
+
+#loginform #msg{
+ display:none;
+ background:#FBE3E4 none repeat scroll 0 0;
+ color: red;
+ padding:0.5em;
+ border-color:#FBC2C4;
+ font-size: 13px;
+ font-weight:bold;
+}
+
+#loginform dl {
+ font-size:13px;
+ line-height:22px;
+}
+
+#loginform dl dt{
+ clear:left;
+ color:#666666;
+ float:left;
+ font-weight:bold;
+ width:100px
+}
+
+#loginform dl dd {
+ margin-left: 110px;
+ padding-bottom: 8px;
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/media/js/swfobject.js Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,5 @@
+/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
+ Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
+ This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
+*/
+var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/settings.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,32 @@
+import os
+import os.path
+import logging
+from django.conf import settings
+
+
+# EMAIL_HOST='smtp.gmail.com'
+# EMAIL_HOST_USER = 'wujingwen1112@gmail.com'
+# EMAIL_HOST_PASSWORD='jingwen1112'
+# EMAIL_PORT='587'
+# EMAIL_USE_TLS = True
+#DEFAULT_FROM_EMAIL = "admin@domain.com"
+#SERVER_EMAIL = "admin@domain.com"
+
+WEB_URL = getattr(settings, 'WEB_URL', '')
+MEDIA_URL = getattr(settings, 'MEDIA_URL', '')
+MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', '')
+SITE_ID = getattr(settings, 'SITE_ID', 1)
+DEBUG = getattr(settings, 'DEBUG', False)
+MANAGERS = settings.MANAGERS
+INSTALLED_APPS = settings.INSTALLED_APPS
+LANGUAGES = settings.LANGUAGES
+DECOUPAGE_BLACKLIST =getattr(settings, 'DECOUPAGE_BLACKLIST', 'de_PPP')
+STREAM_URL = getattr(settings, 'STREAM_URL', '')
+
+
+ACCOUNT_ACTIVATION_DAYS = getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 7)
+LDT_MEDIA_PREFIX = getattr(settings, 'LDT_MEDIA_PREFIX', MEDIA_URL + 'ldt/')
+LDT_MAX_SEARCH_NUMBER = 50
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/cms_change_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,250 @@
+{% extends "admin/page_change_form.html" %}
+{% load i18n admin_modify adminmedia cms_tags cms_admin %}
+{% block js_import %}
+{% endblock %}
+{% block extrahead %}
+{{ block.super }}
+{% if not add %}
+ <script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/change_form.js"></script>
+{% endif %}
+<script type="text/javascript" src="{% admin_media_prefix %}js/urlify.js"></script>
+
+{% if add %}
+ <script type="text/javascript">
+ $(document).ready(function(){
+ $("#id_title").keyup(function() {
+ var e = $("#id_slug")[0];
+ if (!e._changed) {
+ e.value = URLify(this.value, 64);
+ }
+ });
+ });
+ </script>
+{% endif %}
+
+
+{% endblock %}
+
+{% block content_title %}
+ {% if moderation_delete_request %}
+ <h1 class="moderation-approve-deletion">{% trans "Approve page deletion" %}</h1>
+
+ {% else %}
+
+ <h1>{{ title }}
+ {% if CMS_MODERATOR %}
+ {% if moderation_required %}<span class="moderation-requires-approvement">{% blocktrans %}(requires approvement at {{ moderation_level }} level){% endblocktrans %}</span>
+ {% else %}<span>{% trans '(you can perform actions on this page directly)' %}</span>
+ {% endif %}
+ {% endif %}
+ </h1>
+ {% endif %}
+
+{% endblock %}
+
+{% block content %}<div id="content-main">
+
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% if moderation_delete_request %}<li><a href="remove-delete-state/" class="approvelink">{% trans "Remove delete request" %}</a></li>{% endif %}
+ {% if moderator_should_approve %}
+ <li><a href="approve/" class="approvelink">{% if moderation_delete_request %}{% trans "Approve delete" %}{% else %}{% trans "Approve" %} {% trans "draft" %}{% endif %}</a></li>
+ <li><a href="{% if cl.current_site %}{% ifnotequal cl.current_site site %}http://{{ cl.current_site.domain }}{% endifnotequal %}{% endif %}{{ page.get_absolute_url }}?preview&draft=1" class="previewdraftlink">{% trans "Preview" %} {% trans "draft" %}</a></li>
+ {% endif %}
+
+ <li><a href="history/" class="historylink">{% trans "History" %}</a></li>
+ {% if has_absolute_url %}<li><a href="{% if cl.current_site %}{% ifnotequal cl.current_site site %}http://{{ cl.current_site.domain }}{% endifnotequal %}{% endif %}{{ page|preview_link:language }}?preview" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+
+
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="?language={{ language }}{%if request.GET.target %}&target={{ request.GET.target }}{% endif %}&{%if request.GET.target %}position={{ request.GET.position }}{% endif %}" method="post" id="page_form">{% block form_top %}{% endblock %}
+{{ adminForm.fields.parent }}
+
+<input type="hidden" name="language" value="{{ language }}" />
+
+{% if show_language_tabs %}
+<div id="page_form_lang_tabs">
+ {% for lang_code, lang_name in traduction_language %}
+ <input type="button" onclick="trigger_lang_button(this,'./?language={{lang_code}}');"
+ class="language_button {% ifequal lang_code language %}selected{% endifequal %}"
+ id="debutton" name="{{lang_code}}" value="{{lang_name}}" />
+ {% endfor %}
+</div>
+{% endif %}
+
+
+<div id="lang_tab_content">
+{% if show_language_tabs %}
+<h2 class="header"></h2>
+{% endif %}
+{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
+{% if save_on_top %}{% submit_row %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+ </p>
+ <ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
+{% endif %}
+
+{% for fieldset in adminform %}
+ {% include "admin/cms/page/includes/fieldset.html" %}
+{% endfor %}
+
+
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+
+
+{% if not add %}
+ {% if CMS_PERMISSION and has_change_permissions_permission %}
+ <div class="inline-group">
+ <div class="tabular inline-related">
+ <fieldset id="inherited_permissions" class="module aligned collapse">
+ <h2>{% trans 'All permissions' %}</h2>
+ <div class="loading">{% trans 'Loading...' %}</div>
+ <div class="load">./permissions/</div>
+ </fieldset>
+ </div>
+ </div>
+ {% endif %}
+
+ {% if CMS_MODERATOR and has_moderate_permission %}
+ <div class="inline-group">
+ <div class="tabular inline-related">
+ <fieldset id="inherited_permissions" class="module aligned collapse">
+ <h2 class="load_remote">{% trans 'Page states' %}</h2>
+ <div class="loading">{% trans 'Loading...' %}</div>
+ <div class="load">./moderation-states/</div>
+ </fieldset>
+ </div>
+ </div>
+ {% endif %}
+
+ {% if moderation_delete_request %}<script type="text/javascript">
+ $(function(){
+ // disable all fields
+ function lockControls(){
+ $('input,select,textarea').attr("disabled", "disabled");
+ $('a[id^=add_],span[class^=add-plugin],a[class^=selector-],p[class^=selector-]').remove();
+ }
+ $('fieldset[class=collapsed]').remove();
+ lockControls();
+ setTimeout(lockControls,200);
+ });
+ </script>{% endif %}
+
+ {% if CMS_MODERATOR and moderation_required %}
+ <div id="dialog" title="Approve dialog">
+ <p>{% blocktrans %}This page must be moderated at level {{ moderation_level }}, post a message for moderator.{% endblocktrans %}</p>
+ <div class="row"><input type="text" name="df_moderator_message" id="id_df_moderator_message" class="wide" value=""/></div>
+ <div class="row"><input type="checkbox" name="df_moderator_state" id="id_df_moderator_state" value="1"/><label for="id_df_moderator_reguest">{% trans 'Request approvemet' %}</label></div>
+ </div>
+
+ <script type="text/javascript">
+ $(function(){
+ // override standard uncolapse_all javascript function, we need to call it
+ // only if there is submit, but submit might be cancelled over dialog.
+ var old_uncollapse_all = CollapsedFieldsets.uncollapse_all;
+ CollapsedFieldsets.uncollapse_all = function() {}
+
+ var submitActor;
+ var forceSubmit = false;
+ var seen = false;
+
+ // change submit states, open dialog
+ $('#page_form').submit(function(event){
+ return showDialog(event);
+ });
+
+ $('#page_form input[name=_continue]').click(function(event){
+ return showDialog(event, this);
+ });
+
+ function showDialog(event, actor) {
+ if (forceSubmit) return true; // escape sequence
+
+ if (!seen) {
+ // show previously posted message if there were an error
+ $('#id_df_moderator_message').val($('#id_moderator_message').val());
+ }
+ seen = true
+ event.preventDefault();
+ submitActor = actor;
+ $('#dialog').dialog('open');
+ return false;
+ }
+
+ function dialogSave(){
+ // assign values from dialog form to real form
+ $('#id_moderator_message').val($('#id_df_moderator_message').val());
+ $('#id_moderator_state').val(
+ $('#id_df_moderator_state').is(':checked') ? $('#id_df_moderator_state').val() : 0
+ );
+
+ old_uncollapse_all(); // uncolapse all fields django way
+ $('#dialog').dialog('close');
+ forceSubmit = true;
+ $(submitActor || '#page_form input[name=_save]').click();
+ return false;
+ }
+
+ $('#dialog').dialog({
+ bgiframe: true,
+ autoOpen: false,
+ height: 200,
+ width: 400,
+ modal: true,
+ buttons: {
+ Cancel: function() {
+ $(this).dialog('close');
+ },
+ Save: function() {
+ dialogSave();
+ }
+
+ },
+ open: function(){
+ var val = $('#id_moderator_state').val();
+ $('#id_df_moderator_state').attr('checked', val >= 1 ? 'checked': '');
+ $('#id_df_moderator_message')
+ .focus()
+ .keydown(function(event) { if (event.keyCode == 13) dialogSave()});
+
+ // add default button class to last rendered button (Save)
+ $(this.uiDialogButtonPane).find('div.ui-dialog-buttonpane button:last').addClass('default');
+ },
+ close: function(){
+ forceSubmit = false;
+ }
+ });
+ });
+ </script>
+ {% endif %}
+
+{% endif %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% if add %}
+ <div class="submit-row"{% if is_popup %} style="overflow: auto;"{% endif %}>
+ <input type="submit" name="_save" class="default" value="{% trans 'Save' %}" {{ onclick_attrib }}/>
+ <input type="submit" name="_continue" value="{% trans 'Save and continue editing' %}" {{ onclick_attrib }}/>
+ </div>
+{% else %}
+ {% if not moderation_delete_request %}{% submit_row %}{% endif %}
+{% endif %}
+
+{% if add %}
+ <script type="text/javascript">document.getElementById("{{ adminform.first_field.auto_id }}").focus();</script>
+{% endif %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/cms_change_list.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,125 @@
+{% extends "admin/page_change_list.html" %}
+{% load adminmedia admin_list i18n cms_admin js %}
+{% block bodyclass %}change-list{% endblock %}
+
+{% if not is_popup %}{% block breadcrumbs %}
+ <div class="breadcrumbs">
+ <a href="../../">{% trans "Home" %}</a> ›
+ <a href="../">{{ app_label|capfirst|escape }}</a> › {{ opts.verbose_name_plural|capfirst|escape }}
+ </div>
+{% endblock %}{% endif %}
+
+{% block coltype %}flex{% endblock %}
+{% block extrahead %}{{ block.super }}
+
+<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}css/pages.css"/>
+<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}jstree/tree_component.css" />
+<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}css/jquery.dialog.css" />
+
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/jquery.livequery.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/ui.core.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/jquery.bind.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/ui.checkbox.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/effects.core.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/effects.highlight.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/jquery.form.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}jstree/_lib/_all.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}jstree/tree_component.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/ui.dialog.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/functional.js"></script>
+<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/change_list.js"></script>
+
+{% if cl.is_filtered %}
+<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}jstree/themes/default/style.css" />
+{% endif %}
+{% endblock %}
+
+{% block content %}
+<script type="text/javascript">
+ //<![CDATA[
+
+ $(document).ready(function() {
+ {% if not cl.is_filtered %}
+ initTree();
+ {% endif %}
+ });
+
+ function showchangelistfilter(){
+ $("#changelist-filter").toggle();
+ }
+ function moveSuccess(node){
+ var msg = $('<span class="success">{% trans "Successfully moved" %}</span>');
+ node.append(msg);
+ msg.fadeOut(3000);
+ }
+ function moveError(node){
+ var msg = $('<span class="success">An error occured. Please reload the page</span>');
+ node.append(msg);
+ }
+ // some settings used by javascript functions
+
+ cmsSettings = {
+ cmsPermission: {{ CMS_PERMISSION|js }},
+ cmsModerator: {{ CMS_MODERATOR|js }},
+ debug: {{ DEBUG|js }}
+ };
+ //]]>
+</script>
+
+
+<div id="content-main"{% if cl.is_filtered %} class="activ-filter"{% endif %}>
+
+{% block object-tools %}
+
+ <ul class="object-tools">
+ {% if has_recover_permission %}
+ <li><a href="recover/" class="recoverlink">{% blocktrans with cl.opts.verbose_name_plural|escape as name %}Recover deleted {{name}}{% endblocktrans %}</a></li>
+ {% endif %}
+ {% if has_add_permission %}
+ <li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a></li>
+ {% endif %}
+ </ul>
+
+ {% include "admin/cms/page/loading.html" %}
+
+{% endblock %}
+<div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
+{% block search %}
+
+
+{% if cl.has_access_to_multiple_sites %}
+ <div id="site-selector">{% trans "Pages on:" %}
+ <select id="site-select">{% for site in cl.sites %}
+ <option {% ifequal site.pk cl.current_site.pk %}selected {% endifequal %}value="{{ site.pk }}">{{ site.name }}</option>{% endfor %}
+ </select>
+ </div>
+{% else %}
+ <input type="hidden" id="site-select" value="{{ cl.sites.0.pk }}">
+{% endif %}
+
+{% search_form cl %}
+{% endblock %}
+{% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
+
+{% block filters %}
+{% if cl.has_filters %}
+
+
+<a href="javascript:showchangelistfilter();" id="changelist-filter-button">Filter: {% if cl.is_filtered %}{% trans "on" %}{% else %}{% trans "off" %}{% endif %}</a>
+<div id="changelist-filter" style="display:none;">
+<h2>{% trans 'Filter' %}</h2>
+{% for spec in cl.filter_specs %}
+ {% clean_admin_list_filter cl spec %}
+{% endfor %}
+</div>
+{% endif %}
+{% endblock %}
+
+{% include "admin/cms/page/change_list_tree.html" %}
+
+</div>
+</div>
+
+<div id="dialogs"></div>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/index.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,99 @@
+{% extends "admin/base_site.html" %}
+{% load i18n %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
+
+{% block coltype %}colMS{% endblock %}
+
+{% block bodyclass %}dashboard{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block content %}
+<div id="content-main">
+
+{% if app_list %}
+ {% for app in app_list %}
+ <div class="module">
+ <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
+ <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
+ {% for model in app.models %}
+ <tr>
+ {% if model.perms.change %}
+ <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
+ {% else %}
+ <th scope="row">{{ model.name }}</th>
+ {% endif %}
+
+ {% if model.perms.add %}
+ <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
+ {% else %}
+ <td> </td>
+ {% endif %}
+
+ {% if model.perms.change %}
+ <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
+ {% else %}
+ <td> </td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </table>
+ </div>
+ {% endfor %}
+ <div class="module">
+ <table summary="Import">
+ <caption>Import</caption>
+ <tr>
+ <th>
+ <a href="{% url ldt.ldt.views.importFile %}">Import an ldt</a>
+ </th>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <a href="{% url ldt.ldt.views.reindex %}">Reindex</a>
+ </th>
+ <td>
+ </td>
+ </tr>
+ </table>
+ </div>
+{% else %}
+ <p>{% trans "You don't have permission to edit anything." %}</p>
+{% endif %}
+</div>
+{% endblock %}
+
+{% block sidebar %}
+<div id="content-related">
+ <div class="module" id="recent-actions-module">
+ <h2>{% trans 'Recent Actions' %}</h2>
+ <h3>{% trans 'My Actions' %}</h3>
+ {% load log %}
+ {% get_admin_log 10 as admin_log for_user user %}
+ {% if not admin_log %}
+ <p>{% trans 'None available' %}</p>
+ {% else %}
+ <ul class="actionlist">
+ {% for entry in admin_log %}
+ <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
+ {% if entry.is_deletion %}
+ {{ entry.object_repr }}
+ {% else %}
+ <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
+ {% endif %}
+ <br/>
+ {% if entry.content_type %}
+ <span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
+ {% else %}
+ <span class="mini quiet">{% trans 'Unknown content' %}</span>
+ {% endif %}
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ </div>
+</div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_app_index.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,15 @@
+{% extends "admin/page_index.html" %}
+{% load i18n %}
+
+{% if not is_popup %}
+
+{% block breadcrumbs %}
+<div class="breadcrumbs"><a href="../">
+{% trans "Home" %}</a> ›
+{% for app in app_list %}
+{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}
+{% endfor %}</div>{% endblock %}
+
+{% endif %}
+
+{% block sidebar %}{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_base.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,45 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block css_import %}
+{{ block.super }}
+ <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/page_base.css{% endblock %}" />
+ {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
+{% endblock %}
+
+
+<!-- Container -->
+ <!-- Header -->
+ {% block header %}{{block.super}}
+ {% block nav-global %}{% endblock %}
+ {% endblock %}
+ <!-- END Header -->
+ {% block breadcrumb %}
+ <li></li>
+ <li><a href="{% url ldt.userpanel.views.space %}">{% trans "Space" %}</a></li>
+ <li>{% trans "Pages" %}</li>
+ {% endblock %}
+
+
+ {% if messages %}
+ <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>
+ {% endif %}
+
+ {% block content_title %}{% if title %}{{ title }}{% endif %}{% endblock %}
+
+ <!-- Content -->
+ {% block content_admin %}
+ <div id="content" class="{% block coltype %}colM{% endblock %}" style="padding: 20px 20px;">
+ {% block pretitle %}{% endblock %}
+ {% block content %}
+ {% block object-tools %}{% endblock %}
+ {{ content }}
+ {% endblock %}
+ {% block sidebar %}{% endblock %}
+ <br class="clear" />
+ </div>
+ {% endblock %}
+ <!-- END Content -->
+
+<!-- END Container -->
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_base_site.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,10 @@
+{% extends "admin/page_base.html" %}
+{% load i18n %}
+
+{% block title %}Django Administration{% endblock %}
+
+{% block branding %}
+<h1 id="site-name">{% trans 'Django administration' %}</h1>
+{% endblock %}
+
+{% block nav-global %}{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_change_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,66 @@
+{% extends "admin/page_base_site.html" %}
+{% load i18n admin_modify adminmedia %}
+
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="../../../jsi18n/"></script>
+{{ media }}
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
+
+{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
+
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+
+{% block breadcrumbs %}{% if not is_popup %}
+<div class="breadcrumbs">
+ <a href="../../../">{% trans "Home" %}</a> ›
+ <a href="../../">{{ app_label|capfirst|escape }}</a> ›
+ {% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} ›
+ {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endif %}{% endblock %}
+
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li>
+ {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
+{% if save_on_top %}{% submit_row %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+ </p>
+ <ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
+{% endif %}
+
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% submit_row %}
+
+{% if adminform and add %}
+ <script type="text/javascript">document.getElementById("{{ adminform.first_field.auto_id }}").focus();</script>
+{% endif %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_change_list.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,85 @@
+{% extends "admin/page_base_site.html" %}
+{% load adminmedia admin_list i18n %}
+
+{% block extrastyle %}
+ {{ block.super }}
+ <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/changelists.css" />
+ {% if cl.formset %}
+ <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />
+ <script type="text/javascript" src="../../jsi18n/"></script>
+ {% endif %}
+ {{ media }}
+ {% if not actions_on_top and not actions_on_bottom %}
+ <style>
+ #changelist table thead th:first-child {width: inherit}
+ </style>
+ {% endif %}
+{% endblock %}
+
+{% block bodyclass %}change-list{% endblock %}
+
+{% if not is_popup %}
+ {% block breadcrumbs %}
+ <div class="breadcrumbs">
+ <a href="../../">
+ {% trans "Home" %}
+ </a>
+ ›
+ <a href="../">
+ {{ app_label|capfirst }}
+ </a>
+ ›
+ {{ cl.opts.verbose_name_plural|capfirst }}
+ </div>
+ {% endblock %}
+{% endif %}
+
+{% block coltype %}flex{% endblock %}
+
+{% block content %}
+ <div id="content-main">
+ {% block object-tools %}
+ {% if has_add_permission %}
+ <ul class="object-tools">
+ <li>
+ <a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
+ {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
+ </a>
+ </li>
+ </ul>
+ {% endif %}
+ {% endblock %}
+ {% if cl.formset.errors %}
+ <p class="errornote">
+ {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+ </p>
+ <ul class="errorlist">{% for error in cl.formset.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
+ {% endif %}
+ <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
+ {% block search %}{% search_form cl %}{% endblock %}
+ {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
+
+ {% block filters %}
+ {% if cl.has_filters %}
+ <div id="changelist-filter">
+ <h2>{% trans 'Filter' %}</h2>
+ {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
+ </div>
+ {% endif %}
+ {% endblock %}
+
+ <form action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>
+ {% if cl.formset %}
+ {{ cl.formset.management_form }}
+ {% endif %}
+
+ {% block result_list %}
+ {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
+ {% result_list cl %}
+ {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
+ {% endblock %}
+ {% block pagination %}{% pagination cl %}{% endblock %}
+ </form>
+ </div>
+ </div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_index.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,80 @@
+{% extends "admin/page_base_site.html" %}
+{% load i18n %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
+
+{% block coltype %}colMS{% endblock %}
+
+{% block bodyclass %}dashboard{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+{% block content_title %}{% trans "Pages" %}{% endblock %}
+{% block content %}
+<div id="content-main">
+
+{% if app_list %}
+ {% for app in app_list %}
+ <div class="module">
+ <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
+ <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
+ {% for model in app.models %}
+ <tr>
+ {% if model.perms.change %}
+ <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
+ {% else %}
+ <th scope="row">{{ model.name }}</th>
+ {% endif %}
+
+ {% if model.perms.add %}
+ <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
+ {% else %}
+ <td> </td>
+ {% endif %}
+
+ {% if model.perms.change %}
+ <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
+ {% else %}
+ <td> </td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </table>
+ </div>
+ {% endfor %}
+{% else %}
+ <p>{% trans "You don't have permission to edit anything." %}</p>
+{% endif %}
+</div>
+{% endblock %}
+
+{% block sidebar %}
+<div id="content-related">
+ <div class="module" id="recent-actions-module">
+ <h2>{% trans 'Recent Actions' %}</h2>
+ <h3>{% trans 'My Actions' %}</h3>
+ {% load log %}
+ {% get_admin_log 10 as admin_log for_user user %}
+ {% if not admin_log %}
+ <p>{% trans 'None available' %}</p>
+ {% else %}
+ <ul class="actionlist">
+ {% for entry in admin_log %}
+ <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
+ {% if entry.is_deletion %}
+ {{ entry.object_repr }}
+ {% else %}
+ <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
+ {% endif %}
+ <br/>
+ {% if entry.content_type %}
+ <span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
+ {% else %}
+ <span class="mini quiet">{% trans 'Unknown content' %}</span>
+ {% endif %}
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ </div>
+</div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/page_login.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,41 @@
+{% extends "admin/page_base_site.html" %}
+{% load i18n %}
+
+{% block extrastyle %}{% load adminmedia %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/login.css" />{% endblock %}
+
+{% block bodyclass %}{% endblock %}
+
+{% block content_title %}{% trans "Connexion" %}{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block content %}
+{% if error_message %}
+<p class="errornote">{{ error_message }}</p>
+{% endif %}
+<div id="content-main">
+<form action="{{ app_path }}" method="post" id="login-form">
+ <table>
+ <tr>
+ <th><label for="id_username">{% trans 'Username:' %}</label></th>
+ <td><input type="text" name="username" id="id_username" /></td>
+ </tr>
+ <tr>
+ <th><label for="id_password">{% trans 'Password:' %}</label></th>
+ <td><input type="password" name="password" id="id_password" /></td>
+ <td><input type="hidden" name="this_is_the_login_form" value="1" /></td>
+ </tr>
+ <tr>
+ <td><a href="{% url registration.views.register %}" >{% trans "Create an account" %}</a>
+ <a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "Forget password?" %}</a>
+ </td>
+ <td><label> </label><input type="submit" value="{% trans 'Log in' %}" /></td>
+ </tr>
+ </table>
+</form>
+
+<script type="text/javascript">
+document.getElementById('id_username').focus()
+</script>
+</div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/admin/show_menu.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,4 @@
+{% load cms_tags %}
+{% load i18n %}
+
+{% show_menu 0 100 100 100 %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templates/cms/admin/cms/page/change_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,62 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_modify adminmedia cms_admin %}
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="../../../../jsi18n/"></script>
+{% for js in javascript_imports %}{% include_admin_script js %}{% endfor %}
+{% endblock %}
+{% block stylesheet %}{% admin_media_prefix %}css/forms.css" />
+<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}cms/admin.css{% endblock %}
+{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+{% block userlinks %}<a href="../../../doc/">{% trans 'Documentation' %}</a> / <a href="../../../password_change/">{% trans 'Change password' %}</a> / <a href="../../../logout/">{% trans 'Log out' %}</a>{% endblock %}
+{% block breadcrumbs %}{% endblock %}
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
+<input type="hidden" name="_continue" value="1" />
+{% if opts.admin.save_on_top %}{% submit_row %}{% endif %}
+{% if form.error_dict %}
+ <p class="errornote">
+ {% blocktrans count form.error_dict.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+ </p>
+{% endif %}
+{% for bound_field_set in bound_field_sets %}
+ <fieldset class="module aligned {{ bound_field_set.classes }} hideme">
+ {% if bound_field_set.name %}<h2>{{ bound_field_set.name }}</h2>{% endif %}
+ {% if bound_field_set.description %}<div class="description">{{ bound_field_set.description }}</div>{% endif %}
+ {% for bound_field_line in bound_field_set %}
+ {% admin_field_line bound_field_line %}
+ {% for bound_field in bound_field_line %}
+ {% filter_interface_script_maybe bound_field %}
+ {% endfor %}
+ {% endfor %}
+ </fieldset>
+{% endfor %}
+{% block after_field_sets %}{% endblock %}
+{% if change %}
+ {% if ordered_objects %}
+ <fieldset class="module"><h2>{% trans "Ordering" %}</h2>
+ <div class="form-row{% if form.order_.errors %} error{% endif %} ">
+ {% if form.order_.errors %}{{ form.order_.html_error_list }}{% endif %}
+ <p><label for="id_order_">{% trans "Order:" %}</label> {{ form.order_ }}</p>
+ </div></fieldset>
+ {% endif %}
+{% endif %}
+{% for related_object in inline_related_objects %}{% cms_edit_inline related_object %}{% endfor %}
+{% block after_related_objects %}{% endblock %}
+{% submit_row %}
+{% if add %}
+ <script type="text/javascript">document.getElementById("{{ first_form_field_id }}").focus();</script>
+{% endif %}
+{% if auto_populated_fields %}
+ <script type="text/javascript">
+ {% auto_populated_field_script auto_populated_fields change %}
+ </script>
+{% endif %}
+</div>
+</form></div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templatetags/iriusermedia.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,14 @@
+from django.template import Library
+
+register = Library()
+
+def ldt_media_prefix():
+ """
+ Returns the string contained in the setting LDT_MEDIA_PREFIX.
+ """
+ try:
+ from django.conf import settings
+ except ImportError:
+ return ''
+ return settings.LDT_MEDIA_PREFIX
+ldt_media_prefix = register.simple_tag(ldt_media_prefix)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/admin.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,42 @@
+from django.contrib import admin
+from django.contrib.auth.admin import UserAdmin, GroupAdmin
+from django.utils.translation import ugettext as _
+from ldt import settings
+from copy import deepcopy
+from forms import ldtForm, IriGroupForm
+from models import ldt, IriGroup
+
+
+class ldtAdmin(UserAdmin):
+ list_display = ('username', 'email', 'first_name', 'last_name')
+
+ fieldsets = [
+ (None, {'fields': ('username', ('password1', 'password2'))}),
+ (_('User details'), {'fields': (('first_name', 'last_name'), 'email')}),
+ (_('Groups'), {'fields': ('groups',)}),
+ (_('Permissions'), {'fields': ('is_staff', 'user_permissions')}),
+ ]
+ form = ldtForm
+ model = ldt
+ filter_horizontal = ('user_permissions',)
+
+ def get_fieldsets(self, request, obj=None):
+ fieldsets = deepcopy(self.fieldsets)
+ if not '/add' in request.path:
+ fieldsets[0] = (None, {'fields': ('username',)})
+ fieldsets.append((_('Password'), {'fields': ('password1', 'password2'), 'classes': ('collapse',)}))
+ return fieldsets
+
+ def add_view(self, request):
+ return super(UserAdmin, self).add_view(request)
+
+admin.site.unregister(ldt)
+admin.site.register(ldt, ldtAdmin)
+
+class IriGroupAdmin(admin.ModelAdmin):
+ form = IriGroupForm
+ model = IriGroup
+ filter_horizontal = ('permissions',)
+
+admin.site.unregister(IriGroup)
+admin.site.register(IriGroup, IriGroupAdmin)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/forms.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,98 @@
+from django import forms
+from django.contrib.auth.models import User, Permission, Group
+from django.forms.util import ErrorList
+from django.contrib.auth.forms import UserCreationForm
+from django.utils.translation import gettext as _
+from models import ldt, IriGroup
+from ldt.management import get_content_type_list
+
+
+class ldtForm(UserCreationForm):
+
+ class Meta:
+ model = ldt
+
+ def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
+ initial=None, error_class=ErrorList, label_suffix=':',
+ empty_permitted=False, instance=None):
+
+ if instance:
+ initial = initial or {}
+
+ super(ldtForm, self).__init__(data, files, auto_id, prefix,
+ initial, error_class, label_suffix, empty_permitted, instance)
+
+ # filtre les permissions necessaires
+ content_type_list = get_content_type_list()
+ self.fields['user_permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
+
+ if instance:
+ self.fields['password1'].required = False
+ self.fields['password1'].label = _('New password')
+ self.fields['password2'].required = False
+ self.fields['password2'].label = _('New password confirmation')
+
+ self._password_change = True
+
+ def clean_username(self):
+ if self.instance:
+ return self.cleaned_data['username']
+ return super(ldtForm, self).clean_username()
+
+ def clean_password2(self):
+ if self.instance and self.cleaned_data['password1'] == '' and self.cleaned_data['password2'] == '':
+ self._password_change = False
+ return u''
+ return super(ldtForm, self).clean_password2()
+
+
+ def save(self, commit=True):
+ Super = self._password_change and ldtForm or UserCreationForm
+ user = super(Super, self).save(commit=False)
+ # if user.pk != None:
+ # self.save_m2m()
+
+ if commit:
+ user.save()
+
+ return user
+
+class IriGroupForm(forms.ModelForm):
+ class meta:
+ model = IriGroup
+
+ def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
+ initial=None, error_class=ErrorList, label_suffix=':',
+ empty_permitted=False, instance=None):
+ if instance:
+ initial = initial or {}
+
+ super(IriGroupForm, self).__init__(data, files, auto_id, prefix,
+ initial, error_class, label_suffix, empty_permitted, instance)
+
+ # filtre les permissions necessaires
+ content_type_list = get_content_type_list()
+ self.fields['permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
+
+class EmailChangeForm(forms.Form):
+ email1 = forms.EmailField(label=_("E-mail"), max_length=75)
+ email2 = forms.EmailField(label=_("E-mail"), max_length=75)
+
+ def __init__(self, user=None, *args, **kwargs):
+ self.user = user
+ super(EmailChangeForm, self).__init__(*args, **kwargs)
+
+ def clean_email2(self):
+ email1 = self.cleaned_data.get('email1')
+ email2 = self.cleaned_data.get('email2')
+ if email1 and email2:
+ if email1 != email2:
+ raise forms.ValidationError(_("The two emails didn't match."))
+ return email2
+
+
+ def save(self):
+ self.user.email=self.cleaned_data['email1']
+ self.user.save()
+ return self.user
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/models.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,42 @@
+from django.db import models
+from django.contrib.auth.models import User, Group, UserManager
+from django.utils.translation import gettext as _
+from django.contrib import admin
+import datetime
+
+
+class IriGroup(Group):
+ description = models.TextField(null=True, blank=True)
+
+ def __unicode__(self):
+ return self.name
+
+
+class ldt(User):
+ irigroups = models.ManyToManyField(IriGroup, blank=True)
+
+ class Meta:
+ verbose_name = 'iri user'
+ verbose_name_plural = 'iri users'
+
+ def __unicode__(self):
+ return self.username
+
+
+class ldtManager(UserManager):
+ def create_user(self, username, email, password=None):
+ "Creates and saves a User with the given username, e-mail and password."
+ now = datetime.datetime.now()
+ user = ldt(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now)
+ if password:
+ user.set_password(password)
+ else:
+ user.set_unusable_password()
+ user.save()
+ return user
+
+User.objects = ldtManager()
+User.objects.contribute_to_class(User, "objects")
+
+admin.site.register(ldt)
+admin.site.register(IriGroup)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/change_email.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,51 @@
+{% extends "ldt/user/user_base.html" %}
+{# form of email address's change #}
+{% load i18n %}
+{% block breadcrumb %}
+ <li></li>
+ <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
+ <li>{% trans "Modification de l'adresse émail" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans "Modification de l'adresse émail" %}{% endblock %}
+{% block js_declaration %}{{ block.super }}
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $("#change_email").validate();
+ });
+ </script>
+{% endblock %}
+{% block css_import %}
+{{ block.super }}
+ <style type="text/css">
+ label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
+ </style>
+{% endblock %}
+
+{% block iricontent %}
+<p>{% trans "Please enter your new e-mail twice so we can verify you typed it in correctly." %}</p>
+<form action="" method="POST" id="change_email">
+{% csrf_token %}
+ <table>
+ <tr>
+ <td>
+ <label for="id_email1">{% trans "email" %}:</label>
+ </td>
+ <td>
+ <input id="id_email1" type="text" maxlength="75" name="email1" class="required email"/>
+ </td>
+ <td>{{form.email1.errors}}</td>
+ <tr>
+ </tr>
+ <td>
+ <label for="id_email2">{% trans "Confirmation de l'adresse émail" %}:</label>
+ </td>
+ <td>
+ <input id="id_email2" type="text" maxlength="75" name="email2" class="required email"/>
+ </td>
+ <td>{{form.email1.errors}}</td>
+ </tr>
+ <tr><th></th><td><input type="submit" class="button" name="submit" value="{% trans 'change my e-mail' %}" /></td></tr>
+ </table>
+</form>
+{% endblock%}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/change_email_done.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,14 @@
+{% extends "ldt/user/user_base.html" %}
+{# if email is changed successfully, retrun this page #}
+{% load i18n %}
+{% block breadcrumb %}
+ <li></li>
+ <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
+ <li>{% trans "email change" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans "email change" %}{% endblock %}
+{% block iricontent %}
+<p> {% trans "email changed" %}</p>
+<a href="{% url ldt.user.views.profile %}">{% trans "back to profile" %}</a>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/home.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block title %}Home{% endblock %}
+
+{% block content_base %}
+
+<p>Welcome</p>
+<li><a href="{% url django.contrib.auth.views.login %}" >{% trans "Se connecter" %}</a></li>
+<li><a href="{% url registration.views.register %}" >{% trans "Créer un compte" %}</a></li>
+<li><a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "récupérer mot de passe" %}</a></li>
+
+{% endblock %}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/login_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,75 @@
+{% load i18n %}
+{# print user's state and form of login #}
+{% block js_import %}
+{{block.super}}
+
+ <script language="javascript">
+ var url_login_ajax='{{WEB_URL}}{% url ldt.user.views.loginAjax %}';
+ {% if reload %}
+ var reload=true;
+ {% else %}
+ var reload=false;
+ {% endif %}
+
+ $(document).ready(function(){
+ $('.login_link').nyroModal({
+ height:235,
+ width:430,
+ padding:0,
+ bgColor: 'rgb(239, 239, 239)',
+ });
+ })
+
+ </script>
+{% endblock %}
+{% 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>
+ <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">
+ <a href="#" class="nyroModalClose">X</a>
+ <div>{% trans "Log in" %}</div>
+ </div>
+ <div id="msg"></div>
+ <div id="login_form" style="padding: 8px;" method="POST" action="">
+ <div style="float: right; padding-bottom: 8px;">
+ <a href="{% url registration.views.register %}" >{% trans "create account" %}</a>
+ </div>
+ <dl style="clear: both;">
+
+ <dt><label for="username">{% trans "Pseudo" %}:</label></dt>
+ <dd>
+ <input class= "inputbox" type="text" style="width:148px" name="username" value="" id="username">
+ <div id="login_form_username_error" class="ajaxform_error">{% trans "this field is compulsory" %}</div>
+ </dd>
+
+
+ <dt><label for="password">{% trans "Password" %}: </label></dt>
+ <dd>
+ <input class= "inputbox" type="password" style="width:148px" name="password" value="" id="password" >
+ <div id="login_form_password_error" class="ajaxform_error">{% trans "this field is compulsory" %}</div>
+ </dd>
+ <dt/>
+ <dd>
+ <a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "reset password" %}</a>
+ </dd>
+ </dl>
+ <input class="button" id="submit" type="submit" value="{% trans 'Connection' %}"/>
+ </div>
+
+ </div>
+</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/profile.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,9 @@
+{% extends "ldt/user/user_base.html" %}
+{# user's profiles(change password, change email) #}
+{% load i18n %}
+{% block iricontent %}
+<ul>
+ <li><a href="{% url django.contrib.auth.views.password_change %}" >{% trans "Password change" %}</a></li>
+ <li><a href="{% url ldt.user.views.change_email%}">{% trans "Mail change" %}</a></li>
+</ul>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/space.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,19 @@
+{% extends "ldt/user/user_base.html" %}
+{# user's space (edit page or project lignes de temps) #}
+{% load i18n %}
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans "Space" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans "Space" %}{% endblock %}
+{% block iricontent%}
+<ul>
+{% if cms %}
+ <li><a href="{% url admin:page %}">{% trans "Page" %}</a></li>
+{% endif %}
+{% if ldt %}
+ <li><a href="{% url ldt.ldt.views.list_ldt %}">{% trans "Projets Lignes de temps" %}</a></li>
+{% endif %}
+</ul>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/iriuser/user/user_base.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{# this page inherit base html, all pages of ldt inherit this page. #}
+{# all contents are writed in the "iricontent" block #}
+{% load i18n %}
+{% block js_import %}{{ block.super }}
+{% endblock %}
+{% block css_import %}{{ block.super }}
+{% endblock%}
+
+
+{% block content %}
+ <div id="iri-user-content">
+ {% block iricontent %}{% endblock %}
+ </div>
+{% endblock%}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/activate.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,14 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans "Activate account" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans 'Activate account' %}{% endblock %}
+
+{% block iricontent %}
+<p>{% trans "You have activated your account" %}</p>
+<a href="{% url django.contrib.auth.views.login%}">{% trans "Go back to login page" %}</a>
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/activation_complete.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,8 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+{% block content_title %}{% trans 'Sign up successfully' %}{% endblock %}
+{% block iricontent %}
+<p> {% trans "activation completed" %}</p>
+
+{% endblock%}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/activation_email.txt Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,4 @@
+Pour confirmer que ce compte vous appartient vraiment et afin
+d’activer les fonctions,
+veuillez suivre ce lien dans votre navigateur dans {{expiration_days}} jours:
+http://{{site }}{% url registration.views.activate activation_key %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/activation_email_subject.txt Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,1 @@
+Confirmation d’adresse de email pour ldt
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/base.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,10 @@
+{% extends "ldt/user/user_base.html" %}
+{% block js_import %}{{ block.super }}
+{% endblock %}
+{% block css_import %}
+{{ block.super }}
+ <style type="text/css">
+ label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
+ </style>
+{% endblock %}
+{% block pageclass %}profile{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/logged_out.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,12 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+<a href="../">{% trans 'Home' %}</a>
+
+{% block iricontent %}
+
+<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
+
+<p><a href="../">{% trans 'Log in again' %}</a></p>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/login.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,35 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+{% block js_declaration %}{{ block.super }}
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $("#login-form").validate();
+ });
+ </script>
+{% endblock %}
+
+{% block login %}
+{% endblock %}
+
+{% block content_title %}{% trans 'Log in' %}{% endblock %}
+{% block iricontent %}
+ {% if form.errors %}
+ <p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
+ {% endif %}
+
+ <form action="" method='post' id="login-form">
+ {% csrf_token %}
+ <input type="hidden" name="next" value="{% url ldt.user.views.profile%}" />
+ <ul id="login_fields_list">
+ {{form.as_ul}}
+ <li><input class="button"type="submit" value="{% trans "login" %}" /></li>
+ </ul>
+ </form>
+ <ul id="login_links_list">
+ <li><a href="{% url registration.views.register %}" >{% trans "Create an account" %}</a></li>
+ <li><a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "Forget password?" %}</a></li>
+ </ul>
+{% endblock %}
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_change_done.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,17 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+{% block title %}{% trans 'password change successful' %}{% endblock %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
+ <li>{% trans "password change" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans "password change successful" %}{% endblock %}
+{% block iricontent %}
+
+<p>{% trans 'Your password has been changed.' %}</p>
+<a href="{% url ldt.user.views.profile %}">{% trans 'Go back to profiles' %}</a>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_change_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,47 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+{% block js_import %}{{ block.super }}
+
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $("#pwd_change_form").validate();
+ });
+ </script>
+{% endblock %}
+{% block breadcrumb %}
+ <li></li>
+ <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
+ <li>{% trans 'Password change' %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans 'Password change' %}{% endblock %}
+{% block iricontent %}
+
+<p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
+
+<form action="" method="post" id="pwd_change_form">
+ <table cellspacing="10px">
+
+ <tr>
+ <td><label for="id_old_password">{% trans 'Old password:' %}</label></td>
+ <td><input id="id_old_password" name="old_password" type="password" class="required"/></td>
+ <td>{{ form.old_password.errors }}</td>
+ </tr>
+
+ <tr>
+ <td><label for="id_new_password1">{% trans 'New password:' %}</label></td>
+ <td><input id="id_new_password1" type="password" name="new_password1" class="required"/></td>
+ <td>{{ form.new_password1.errors }}</td>
+ </tr>
+
+ <tr>
+ <td><label for="id_new_password2">{% trans 'Confirm password:' %}</label></td>
+ <td><input id="id_new_password2" type="password" name="new_password2" class="required"/></td>
+ <td>{{ form.new_password2.errors }}</td>
+ </tr>
+ </table>
+
+ <input type="submit" class="button" value="{% trans 'Change my password' %}"/>
+</form>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_reset_complete.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,16 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans 'Password reset' %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans 'Password reset complete' %}{% endblock %}
+{% block iricontent %}
+
+<p>{% trans "Your password has been set. You may go ahead and log in now." %}</p>
+
+<p><a href="{{ login_url }}">{% trans 'Log in' %}</a></p>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_reset_confirm.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,33 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans 'Password reset' %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans 'Password reset' %}{% endblock %}
+
+{% block iricontent %}
+
+{% if validlink %}
+
+<p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
+
+<form action="" method="post">
+{{ form.new_password1.errors }}
+<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
+{{ form.new_password2.errors }}
+<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
+<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
+</form>
+
+{% else %}
+
+<h1>{% trans 'Password reset unsuccessful' %}</h1>
+
+<p>{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
+
+{% endif %}
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_reset_done.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,14 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans 'Password reset' %}</li>
+{% endblock %}
+{% block content_title %}{% trans 'Password reset successful' %}{% endblock %}
+
+{% block iricontent %}
+
+<p>{% trans "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly." %}</p>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_reset_email.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,15 @@
+{% load i18n %}{% autoescape off %}
+{% trans "You're receiving this e-mail because you requested a password reset" %}
+{% blocktrans %}for your user account at {{ site_name }}{% endblocktrans %}.
+
+{% trans "Please go to the following page and choose a new password:" %}
+{% block reset_link %}
+{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %}
+{% endblock %}
+{% trans "Your username, in case you've forgotten:" %} {{ user.username }}
+
+{% trans "Thanks for using our site!" %}
+
+{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
+
+{% endautoescape %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/password_reset_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,36 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+{% block js_import %}{{ block.super }}
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $("#pwd_reset_form").validate();
+ });
+ </script>
+{% endblock %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans 'Password reset' %}</li>
+{% endblock %}
+{% block content_title %}{% trans 'Password reset' %}{% endblock %}
+
+
+{% block title %}{% trans "Password reset" %}{% endblock %}
+
+{% block iricontent%}
+
+<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>
+
+<form action="" method="post" id="pwd_reset_form">
+<table>
+ <tr>
+ <th><label for="id_email">{% trans 'Adresse émail' %}:</label></th>
+ <td><input id="id_email" type="text" maxlength="75" class="required" name="email"/></td>
+
+ </tr>
+ <tr><td></td><td>{{ form.email.errors }}</td></tr>
+ <tr><td></td><td><input type="submit" class="button" value="{% trans 'Reset my password' %}" /></td></tr>
+</table>
+</form>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/registration_active.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,11 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans 'Activate the account' %}</li>
+{% endblock %}
+{% block content_title %}{% trans 'Activate the account' %}{% endblock %}
+{% block iricontent%}
+<p> {% trans 'Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel.' %}</p>
+<a href="{ url django.contrib.auth.views.login }">{% trans 'retourner à la page de connexion' %}</a>
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/registration_complete.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,12 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+
+{% block breadcrumb %}
+ <li></li>
+ <li>{% trans 'Sign up' %}</li>
+{% endblock %}
+{% block content_title %}{% trans 'Sign up successfully' %}{% endblock %}
+{% block iricontent %}
+<p> {% trans "We've e-mailed you instructions for activate your account to the e-mail address you submitted. You should be receiving it shortly." %}</p>
+
+{% endblock%}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templates/registration/registration_form.html Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,20 @@
+{% extends "registration/base.html" %}
+{% load i18n %}
+{% block js_import %}{{ block.super }}
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $("#signup_form").validate();
+ });
+ </script>
+{% endblock %}
+
+{% block content_title %}{% trans 'Sign up' %}{% endblock %}
+{% block iricontent%}
+<form class="signupform" id="signup_form" method="post" action=""> {% csrf_token %}
+ <ul>
+{{form.as_ul}}
+ <li><input class="button" type="submit" value="{% trans 'Save' %} "/></li>
+ </ul>
+</form>
+
+{% endblock%}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/templatetags/logintag.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,9 @@
+from django import template
+from django.template.loader import get_template
+
+register = template.Library()
+
+def loginAjax(user, reload=None):
+ return {'user': user, 'reload': reload}
+
+register.inclusion_tag('ldt/user/login_form.html')(loginAjax)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/tests.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,23 @@
+"""
+This file demonstrates two different styles of tests (one doctest and one
+unittest). These will both pass when you run "manage.py test".
+
+Replace these with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+class SimpleTest(TestCase):
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.failUnlessEqual(1 + 1, 2)
+
+__test__ = {"doctest": """
+Another way to test that 1 + 1 is equal to 2.
+
+>>> 1 + 1 == 2
+True
+"""}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/urls.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,19 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+ url(r'^loginAjax/$', 'ldt.user.views.loginAjax'),
+ url(r'^profile/', 'ldt.user.views.profile'),
+ url(r'^logout/', 'ldt.user.views.logout_view'),
+ url(r'^space/$', 'ldt.user.views.space'),
+ url(r'^emailchange/$', 'ldt.user.views.change_email'),
+ url(r'^emailchange/done/$', 'ldt.user.views.change_email_done'),
+# url(r'^space/ldt/$', 'ldt.ldt_utils.views.list_ldt'),
+# url(r'^space/ldt/indexproject/(?P<id>.*)$', 'ldt.ldt_utils.views.indexProject'),
+# url(r'^space/ldt/init/(?P<method>.*)/(?P<url>.*)$', 'ldt.ldt_utils.views.init'),
+# url(r'^space/ldt/project/(?P<id>.*)$', 'ldt.ldt_utils.views.ldtProject'),
+# url(r'^space/ldt/create/$', 'ldt.ldt_utils.views.create_ldt_view'),
+# url(r'^space/ldt/created_done/$', 'ldt.ldt_utils.views.created_ldt'),
+# url(r'^space/ldt/save/$', 'ldt.ldt_utils.views.save_ldtProject'),
+# url(r'^space/ldt/publish/(?P<id>.*)$', 'ldt.ldt_utils.views.publish'),
+# url(r'^space/ldt/unpublish/(?P<id>.*)$', 'ldt.ldt_utils.views.unpublish'),
+)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/user/views.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,75 @@
+from django.conf import settings
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.contrib.auth import authenticate, login, logout
+from django.contrib.auth.decorators import login_required
+# from django.contrib.sites.models import Site, RequestSite
+from django.template import RequestContext, Context, loader
+from django.utils.translation import ugettext as _
+from django.core.urlresolvers import reverse
+from forms import EmailChangeForm
+from django.utils import simplejson
+from ldt.management import test_cms, test_ldt
+
+
+def home(request):
+ return render_to_response('ldt/user/home.html',context_instance=RequestContext(request))
+
+@login_required
+def profile(request):
+ return render_to_response('ldt/user/profile.html', context_instance=RequestContext(request))
+
+@login_required
+def space(request, page_id=None, slug=None):
+ cms = test_cms()
+ ldt = test_ldt()
+ context={
+ 'cms': cms,
+ 'ldt': ldt
+ }
+ return render_to_response('ldt/user/space.html', context, context_instance=RequestContext(request))
+
+
+
+def logout_view(request):
+ logout(request)
+ # return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+ return HttpResponseRedirect(settings.LOGOUT_URL)
+
+
+def loginAjax(request, loginstate_template_name='ldt/user/login_form.html'):
+ if request.method == "POST":
+ username=request.POST["username"]
+ password=request.POST["password"]
+ user = authenticate(username=username, password=password)
+ error_message = _(u"Sorry, that's not a valid username or password.")
+ if user is not None:
+ if user.is_active:
+ login(request, user)
+ context = RequestContext(request, { 'username': user.username,})
+ template = loader.get_template(loginstate_template_name)
+ html = template.render(context)
+ return HttpResponse(simplejson.dumps({'message': u'successful', 'username': user.username, 'html': html, 'reload': request.POST["reload"],}))
+ else:
+ return HttpResponse(simplejson.dumps({'message': error_message,}))
+ else:
+ return HttpResponse(simplejson.dumps({'message': error_message,}))
+ return render_to_response('ldt/user/login_ajax.html', context_instance=RequestContext(request))
+
+@login_required
+def change_email(request, post_change_redirect=None):
+ if post_change_redirect is None:
+ post_change_redirect = reverse('ldt.user.views.change_email_done')
+ if request.method == "POST":
+ form = EmailChangeForm(request.user, request.POST)
+ if form.is_valid():
+ form.save()
+ return HttpResponseRedirect(post_change_redirect)
+ else:
+ form = EmailChangeForm(request.user)
+ return render_to_response('ldt/user/change_email.html', {'form': form,}, context_instance=RequestContext(request))
+
+@login_required
+def change_email_done(request, template_name='ldt/user/change_email_done.html'):
+ return render_to_response(template_name, context_instance=RequestContext(request))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/utils/__init__.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/utils/context_processors.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,4 @@
+from django.conf import settings
+
+def ldt(request):
+ return {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/utils/xml.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,7 @@
+def getText(anode):
+ nodelist = anode.childNodes
+ rc = ""
+ for node in nodelist:
+ if node.nodeType == node.TEXT_NODE:
+ rc = rc + node.data
+ return rc
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/utils/zipfileext.py Tue Jun 08 15:44:35 2010 +0200
@@ -0,0 +1,14 @@
+import zipfile, os, os.path
+
+class ZipFileExt(zipfile.ZipFile):
+ def unzip_into_dir(self, dir):
+ if not os.path.exists(dir):
+ os.mkdir(dir, 0777)
+ for name in self.namelist():
+ if name.endswith('/'):
+ os.mkdir(os.path.join(dir,name))
+ else:
+ outfile = open(os.path.join(dir,name), 'wb')
+ outfile.write(self.read(name))
+ outfile.close()
+
--- a/web/ldt_utils/.htaccess.tmpl Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-SetHandler python-program
-PythonPath "['D:/wuj/dev/ldt', 'D:/wuj/dev/ldt/lib'] + sys.path"
-PythonHandler django.core.handlers.modpython
-SetEnv DJANGO_SETTINGS_MODULE ldt.settings
-SetEnv PY_USE_XMLPLUS true
-PythonInterpreter ldt
-PythonOption django.root /dev/ldt/ldt
-PythonDebug on
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
\ No newline at end of file
--- a/web/ldt_utils/__init__.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-VERSION = (0,1)
-
-VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
--- a/web/ldt_utils/admin.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-from django.contrib import admin
-from ldt.management import test_cms
-
-"""
-site admin pour cms page
-"""
-if test_cms():
- class AdminSite(admin.AdminSite):
- index_template = 'admin/page_index.html'
- login_template = 'admin/page_login.html'
- app_index_template = 'admin/page_app_index.html'
-
- admin_site = AdminSite()
-
- from cms.models import Page
- from cms.admin import pageadmin
-
- class CmsPageAdmin(pageadmin.PageAdmin):
- change_list_template = "admin/cms_change_list.html"
- change_form_template = "admin/cms_change_form.html"
-
- admin_site.register(Page, CmsPageAdmin)
-
- from cms.plugins.snippet.models import Snippet
- from cms.plugins.snippet.admin import SnippetAdmin
-
- class CmsSnippetAdmin(SnippetAdmin):
- change_form_template = "admin/page_change_form.html"
- change_list_template = "admin/page_change_list.html"
- admin_site.register(Snippet, CmsSnippetAdmin)
\ No newline at end of file
--- a/web/ldt_utils/core/handlers/modpython.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-
-def handler(req):
- activate_this = req.get_options().get("virtualenv.activate_path")
- execfile(activate_this, dict(__file__=activate_this))
-
- import django.core.handlers.modpython
-
- return django.core.handlers.modpython.handler(req)
\ No newline at end of file
--- a/web/ldt_utils/core/models.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-from django.db import models
-from django.contrib.auth.models import *
-
-
-class Owner(models.Model):
- user = models.ForeignKey(User, blank=True, null=True)
- group = models.ForeignKey(Group, blank=True, null=True)
-
- def __unicode__(self):
- if self.user:
- return self.user.username
- else:
- return self.group.name
-
-
-class Document(models.Model):
- owner= models.ForeignKey(Owner, blank = True, null=True)
-
- class Meta:
- abstract = True
-
-
--- a/web/ldt_utils/core/tests.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-"""
-This file demonstrates two different styles of tests (one doctest and one
-unittest). These will both pass when you run "manage.py test".
-
-Replace these with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.failUnlessEqual(1 + 1, 2)
-
-__test__ = {"doctest": """
-Another way to test that 1 + 1 is equal to 2.
-
->>> 1 + 1 == 2
-True
-"""}
-
--- a/web/ldt_utils/core/views.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-# Create your views here.
--- a/web/ldt_utils/ldt/__init__.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-import lucene
-from django.conf import settings
-
-lucene.initVM(lucene.CLASSPATH)
-
-STORE = lucene.SimpleFSDirectory(lucene.File(settings.INDEX_PATH))
-ANALYZER = lucene.PerFieldAnalyzerWrapper(lucene.StandardAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("tags",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("title",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("abstract",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("all",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-
-
-VERSION = (0,1)
-VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
--- a/web/ldt_utils/ldt/admin.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-from django.contrib import admin
-from django.conf.urls.defaults import *
-from django.shortcuts import render_to_response
-from django.template import RequestContext
-from django.conf import settings
-from models import *
-from forms import *
-from fileimport import *
-from ldt.ldt_utils import STORE
-from ldt.ldt_utils import ANALYZER
-
-import lucene
-
-admin.site.register(Project)
-
-class ContentAdmin(admin.ModelAdmin):
-
- def import_file(self, request):
- if request.method =='POST':
- form = LdtImportForm(request.POST, request.FILES)
- if form.is_valid():
- filetoprocess =form.cleaned_data['importFile']
- flatten = form.cleaned_data['flatten']
- videoPath = form.cleaned_data['videoPath']
- # fi = None
- fi = FileImport(filetoprocess, videoPath, flatten)
- try:
- fi.processFile()
- args = {'message': "File imported"}
- except FileImportError:
- non_field_errors = form.non_field_errors()
- non_field_errors.append("Error when importing : unknown file type")
- form._errors["__all__"] = non_field_errors
- args = {'message': "Can not import file, unknown file type", 'form': form}
-
- else:
- non_field_errors = form.non_field_errors()
- non_field_errors.append("Error when importing : invalid form")
- form._errors["__all__"] = non_field_errors
- args = {'message': "Error when importing : invalid form", 'form': form}
- else:
- form = LdtImportForm()
- args = {'form': form, 'current_app': self.admin_site.name, 'current_action' : 'import_file'}
- return render_to_response('admin/ldt/content/upload_form.html', args, context_instance=RequestContext(request))
-
- def reindex(self, request):
- message = None
- if request.method == "POST":
- form = ReindexForm(request.POST)
- if form.is_valid():
- # try:
- writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
- contentList = form.cleaned_data["contents"]
- indexer = ContentIndexer(contentList,writer)
- indexer.index_all()
-
- writer.close()
- message = "Indexation ok : " + repr(form.cleaned_data["contents"])
- form = ReindexForm()
- # except Exception, inst:
- # non_field_errors = form.non_field_errors()
- # non_field_errors.append("Error when reindexing : " + cgi.escape(repr(inst)))
- # form._errors["__all__"] = non_field_errors
- #message = "ERROR : " + repr(non_field_errors)
- else:
- form = ReindexForm()
-
- return render_to_response('admin/ldt/content/reindex_form.html', {'form': form, 'message':message, 'current_app': self.admin_site.name, 'current_action' : 'reindex' }, context_instance=RequestContext(request))
-
- def get_urls(self):
- urls = super(ContentAdmin, self).get_urls()
- content_urls = patterns('',
- url(r'^reindex/$', self.admin_site.admin_view(self.reindex), name="ldt_content_reindex"),
- # (r'^admin/ldt/content/import/upload/$', 'ldt.ldt_utils.views.uploadFile'),
- url(r'^import/$', self.admin_site.admin_view(self.import_file), name="ldt_content_import_file")
- )
- return content_urls + urls
-
-
-admin.site.register(Content, ContentAdmin)
--- a/web/ldt_utils/ldt/contentindexer.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-import tempfile
-import os
-import os.path
-import shutil
-from ldt.utils import zipfileext
-import urllib
-# import ldt.utils.log
-import ldt.utils.xml
-from django.conf import settings
-from models import Content
-import xml
-import xml.dom
-import xml.dom.minidom
-import xml.dom.ext
-import xml.xpath
-import fnmatch
-import Ft
-import uuid
-import shutil
-import lucene
-from ldt.ldt_utils import STORE
-from ldt.ldt_utils import ANALYZER
-
-def Property(func):
- return property(**func())
-
-
-class ContentIndexer(object):
-
- def __init__(self, contentList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
- self.__contentList = contentList
- self.__decoupage_blacklist = decoupage_blackList
- self.__writer = writer
-
- @Property
- def decoupage_blacklist(): #@NoSelf
- doc = """get blacklist""" #@UnusedVariable
-
- def fget(self):
- if self.__decoupage_blacklist is None:
- self.__decoupage_blacklist = ()
- return self.__decoupage_blacklist
-
- def fset(self, value):
- self.__decoupage_blacklist = value
-
- def fdel(self):
- del self.__decoupage_blacklist
-
- return locals()
-
- def index_all(self):
- for content in self.__contentList:
- self.index_content(content)
-
- def index_content(self, content):
- url =content.iri_url()
- filepath = urllib.urlopen(url)
- doc = xml.dom.minidom.parse(filepath)
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
-
- self.__writer.deleteDocuments(lucene.Term("iri_id", content.iri_id))
-
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble", context=con)
-
- for ensemble in res:
- ensembleId = ensemble.getAttributeNS("id",None)
-
- for decoupageNode in ensemble.childNodes:
- if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage" or decoupageNode.getAttributeNS("id",None) in self.decoupage_blacklist:
- continue
-
- decoupId = decoupageNode.getAttributeNS("id",None)
- res = xml.xpath.Evaluate("elements/element", decoupageNode)
- for elementNode in res:
- doc = lucene.Document()
- elementId = elementNode.getAttributeNS("id",None)
- tags = elementNode.getAttributeNS("tags",None)
-
- if tags is not None:
- tags.replace(",", ";")
-
- if tags is None or len(tags) == 0:
- tags = ""
- restagnode = xml.xpath.Evaluate("tag/text()", elementNode)
- for tagnode in restagnode:
- tags = tags + " ; " + tagnode.data
-
- if tags is None or len(tags) == 0:
- tags = ""
- restagnode = xml.xpath.Evaluate("tags/tag/text()", elementNode)
- for tagnode in restagnode:
- tags = tags + " ; " + tagnode.data
-
- title = ""
- for txtRes in xml.xpath.Evaluate("title/text()", elementNode):
- title = title + txtRes.data
-
- abstract = ""
- for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode):
- abstract = abstract + txtRes.data
-
- doc.add(lucene.Field("iri_id", content.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
- doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
-
- seg = Segment(content=content,
- iri_id=content.iri_id,
- ensemble_id=ensembleId,
- cutting_id=decoupId,
- element_id=elementId,
- tags=tags,
- title=title,
- abstract=abstract,
- duration=duration,
- author=author,
- start_ts=start_ts,
- date=date_str)
- seg.save()
-
-
- self.__writer.addDocument(doc)
-
- self.__writer.commit()
-
-
-class ProjectIndexer(object):
-
- def __init__(self, projectList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
- self.__projectList = projectList
- self.__decoupage_blacklist = decoupage_blackList
- self.__writer = writer
-
- @Property
- def decoupage_blacklist(): #@NoSelf
- doc = """get blacklist""" #@UnusedVariable
-
- def fget(self):
- if self.__decoupage_blacklist is None:
- self.__decoupage_blacklist = ()
- return self.__decoupage_blacklist
-
- def fset(self, value):
- self.__decoupage_blacklist = value
-
- def fdel(self):
- del self.__decoupage_blacklist
-
- return locals()
-
- def index_all(self):
- for project in self.__projectList:
- self.index_project(project)
-
- def index_project(self, project):
-
- # pocketfilms.utils.log.debug("Indexing project : "+str(project.iri_id))
- doc = xml.dom.minidom.parseString(project.ldt)
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
-
- self.__writer.deleteDocuments(lucene.Term("iri_id", project.iri_id))
-
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
-
- for content in res:
- contentId = content.getAttributeNS("id",None)
-
- ensembleId = "ens_perso"
-
- for decoupageNode in content.childNodes:
- # pocketfilms.utils.log.debug("Indexing content decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
- if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage" or decoupageNode.getAttributeNS("id",None) in self.decoupage_blacklist:
- continue
-
- decoupId = decoupageNode.getAttributeNS("id",None)
- res = xml.xpath.Evaluate("elements/element", decoupageNode)
- for elementNode in res:
- doc = lucene.Document()
- elementId = elementNode.getAttributeNS("id",None)
- tags = elementNode.getAttributeNS("tags",None)
-
- if tags is not None:
- tags.replace(",", ";")
-
- if tags is None or len(tags) == 0:
- tags = ""
- restagnode = xml.xpath.Evaluate("tag/text()", elementNode)
- for tagnode in restagnode:
- tags = tags + " ; " + tagnode.data
-
- if tags is None or len(tags) == 0:
- tags = ""
- restagnode = xml.xpath.Evaluate("tags/tag/text()", elementNode)
- for tagnode in restagnode:
- tags = tags + " ; " + tagnode.data
-
- title = ""
- for txtRes in xml.xpath.Evaluate("title/text()", elementNode):
- title = title + txtRes.data
-
- abstract = ""
- for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode):
- abstract = abstract + txtRes.data
-
- doc.add(lucene.Field("project_id", project.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
- doc.add(lucene.Field("iri_id", contentId, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
- doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
-
- seg = Segment(content=content,
- iri_id=content.iri_id,
- ensemble_id=ensembleId,
- cutting_id=decoupId,
- element_id=elementId,
- tags=tags,
- title=title,
- abstract=abstract,
- duration=duration,
- author=author,
- start_ts=start_ts,
- date=date_str)
- seg.save()
-
- self.__writer.addDocument(doc)
-
- self.__writer.commit()
--- a/web/ldt_utils/ldt/fileimport.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,379 +0,0 @@
-import tempfile
-import os.path
-import shutil
-from django.core.exceptions import ObjectDoesNotExist
-from ldt.utils import zipfileext
-from django.conf import settings
-from models import Content
-import xml.dom.minidom
-import xml.dom.ext #@UnresolvedImport
-import xml.xpath #@UnresolvedImport
-import fnmatch
-import uuid
-import urllib
-
-class FileImportError(Exception):
- def __init__(self, value):
- self.value = value
- def __str__(self):
- return repr(self.value)
-
-
-def Property(func):
- return property(**func())
-
-class IriInfo(object):
-
-
- def __init__(self, id, order, titledesc, basepath="", videopath=settings.STREAM_URL, decoupage_blacklist = settings.DECOUPAGE_BLACKLIST, flatten = True):
- self.id = id
- self.basepath = basepath
- self.order = order
- self.src = ""
- self.annotations = None
- self.videopath = videopath
- self.videourl = ""
- self.title = None
- self.desc = None
- self.duration = None
- self.created = False
- self.content = None
- self.decoupage_blacklist = decoupage_blacklist
- if self.decoupage_blacklist is None:
- self.decoupage_blacklist = ()
- self.flatten = flatten
-
-
-
- def processIri(self):
- # for just import a file ldt and get the title for every media
- if 'http' in self.src:
- url = urllib.urlopen(self.src)
- doc = xml.dom.minidom.parse(url)
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- #open .iri and get the title
- res = xml.xpath.Evaluate("/iri/head/meta[@name='title']/@content", context=con)
- self.title = res[0].value
-
- #for import a zip, get title and copy file .iri in the media directory
- else:
- path = os.path.join(self.basepath, self.src)
- doc = xml.dom.minidom.parse(path)
-
- con = xml.xpath.Context.Context(doc, 1, 1, None)
-
- res = xml.xpath.Evaluate("/iri/head/meta[@name='title']/@content", context=con)
- self.title = res[0].value
-
- res = xml.xpath.Evaluate("/iri/body/ensembles",context=con)
- ensemblesnode = res[0]
-
- ensembleids = []
-
- for node in ensemblesnode.childNodes:
- if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
- id = node.getAttributeNS("id",None)
- if id not in ensembleids:
- ensembleids.append(id)
-
- if self.annotations is not None:
- newEnsemble = None
- for cnode in self.annotations.childNodes:
- if cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "decoupage":
- if newEnsemble is None:
- newensemble = doc.createElement('ensemble')
- ensembleid = self.id+"_"+str(uuid.uuid1())
- newensemble.setAttributeNS(None,'id',ensembleid)
-
- newensemble.setAttributeNS(None,'title', self.annotations.getAttribute('title'))
- newensemble.setAttributeNS(None,'author', self.annotations.getAttribute('author'))
- newensemble.setAttributeNS(None,'date', self.annotations.getAttribute('date'))
- newensemble.setAttributeNS(None,'abstract', self.annotations.getAttribute('abstract'))
- ensemblesnode.appendChild(newensemble)
- ensembleids.append(ensembleid)
- newDecoupageNode = cnode.cloneNode(True)
- newensemble.appendChild(newDecoupageNode)
- elif cnode.nodeType == xml.dom.Node.ELEMENT_NODE and cnode.tagName == "ensemble":
- ensembleid = cnode.getAttribute(u"id")
- cloneNode = cnode.cloneNode(True)
- if ensembleid in ensembleids:
- ensembleid = self.id+"_"+str(uuid.uuid1())
- cloneNode.setAttribute(u"id", ensembleid)
- ensembleids.append(ensembleid)
- ensemblesnode.appendChild(cloneNode)
-
- res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
- if self.flatten:
- src_video = res[0].getAttribute('src')
- self.videourl = os.path.basename(src_video)
- res[0].setAttributeNS(None,'src', self.videourl)
- self.duration = res[0].getAttributeNS(None, 'dur')
-
- f = open(path, "w")
- try:
- xml.dom.ext.Print(doc, stream=f)
- finally:
- f.close()
-
-
- destPath = os.path.join(os.path.join(os.path.join(settings.MEDIA_ROOT, "media"), "ldt"), self.id);
- if not os.path.exists(destPath):
- os.makedirs(destPath)
- shutil.move(os.path.join(self.basepath, self.src), os.path.join(destPath, os.path.basename(self.src)))
- self.src = self.id + u"/" + os.path.basename(self.src)
-
-
-
- def saveContent(self):
- #if 'http' in self.src:
- # url = self.src
- #else:
- # url = self.id + u"/" + os.path.basename(self.src)
- content, self.created = Content.objects.get_or_create(iri_id=self.id, defaults = {'iriurl': self.src, 'title':self.title, 'description':self.desc, 'videopath': self.videopath})
- if not self.created:
- content.iriurl = self.src
- content.title = self.title
- content.description = self.desc
- content.save()
-
- content.iriurl = self.src
- content.videopath = self.videopath.rstrip("/") + "/"
-
- content.iri = self.id + u"/" + os.path.basename(self.src)
- content.title = self.title
- content.description = self.desc
- content.duration = int(self.duration)
- content.save()
-
- self.content = content
-
- def process(self):
- self.processIri()
- self.saveContent()
-
-class BaseFileImport(object):
-
- def __init__(self, filepath, videopath):
- self.__filepath = filepath
- self.__tempdir = ""
- self.__videopath = videopath
- self.__author = None
-
-
- def filepath(): #@NoSelf
- doc = """Docstring""" #@UnusedVariable
-
- def fget(self):
- return self.__filepath
-
- def fset(self, value):
- self.__filepath = value
-
- def fdel(self):
- del self.__filepath
-
- return locals()
-
- filepath = property(**filepath())
-
- def videopath(): #@NoSelf
- doc = """Docstring""" #@UnusedVariable
-
- def fget(self):
- return self.__videopath
-
- def fset(self, value):
- self.__videopath = value
-
- def fdel(self):
- del self.__videopath
-
- return locals()
-
- videopath = property(**videopath())
-
- def author(): #@NoSelf
- doc = """Docstring""" #@UnusedVariable
-
- def fget(self):
- return self.__author
-
- def fset(self, value):
- self.__author = value
-
- def fdel(self):
- del self.__author
-
- return locals()
-
- author = property(**author())
-
-
-class FileImport(BaseFileImport):
-
- def __init__(self, filepath, videopath, flatten):
- BaseFileImport.__init__(self, filepath, videopath)
- self.__checkExistingMedia = False
- self.__flatten = flatten
-
- def checkExistingMedia(): #@NoSelf
- doc = """Docstring""" #@UnusedVariable
-
- def fget(self):
- return self.__checkExistingMedia
-
- def fset(self, value):
- self.__checkExistingMedia = value
-
- def fdel(self):
- del self.__checkExistingMedia
-
- return locals()
-
- checkExistingMedia = property(**checkExistingMedia())
-
- def flatten(): #@NoSelf
- doc = """Docstring""" #@UnusedVariable
-
- def fget(self):
- return self.__flatten
-
- def fset(self, value):
- self.__flatten = value
-
- def fdel(self):
- del self.__flatten
-
- return locals()
- flatten = property(**flatten())
-
- def processLdt(self, ldtpath=None):
-
- # list iri
- # see if there is some comments
- # inject comment in iri
- # copy iri in folder
- # create or update content
- contents = {}
- if ldtpath:
- doc = xml.dom.minidom.parse(ldtpath)
- else:
- doc = xml.dom.minidom.parse(self.filepath)
-
- con = xml.xpath.Context.Context(doc, 1, 1, None)
-
- #get author from file ldt
- result = xml.xpath.Evaluate("/iri/project", context=con)
- for pnode in result:
- author = pnode.getAttributeNS("user",None)
- if author:
- self.author = unicode(author)
- break
-
- result = xml.xpath.Evaluate("/iri/medias/media", context=con)
-
- for i, medianode in enumerate(result):
- # get iri file's id from file ldt
- id = medianode.attributes['id'].value
- if self.checkExistingMedia:
- try:
- Content.objects.get(iri_id=id)
- do_pass = True
- except ObjectDoesNotExist: #Content.DoesNotExist
- do_pass = False
- else:
- do_pass = False
- if not do_pass:
- if not (contents.has_key(id)):
- # Create instance iriInfo(id, order, titledesc, basepath="", videopath=settings.STREAM_URL)
- if ldtpath:
- contents[id] = IriInfo(id, i, "", os.path.dirname(ldtpath), flatten=self.flatten)
- else:
- contents[id] = IriInfo(id, i, "", flatten=self.flatten)
- # Get iri file's url from ldt. This url can be relative path or absolute path.
- contents[id].src = medianode.attributes['src'].value
- if medianode.attributes['video'].value !="":
- contents[id].videopath = medianode.attributes['video'].value
- elif self.videopath !="" or self.videopath:
- contents[id].videopath = self.videopath
- else:
- contents[id].videopath =settings.STREAM_URL
-
-
- #get annotation of file ldt
- result = xml.xpath.Evaluate("/iri/annotations/content", context=con)
-
- for contentnode in result:
- id = contentnode.attributes['id'].value
- # pocketfilms.utils.log.debug("ID : " + str(id))
- if contents.has_key(id):
- if self.author:
- contentnode.setAttributeNS(None,"author", unicode(self.author))
- contents[id].annotations = contentnode
-
- #go throught values
- for iriinfo in contents.values():
-
- iriinfo.process()
-
- # if yes update
- # if no create
- # move iri file to the proper place
- #return list of iriInfo
-
- def processFile(self):
- if self.filepath.name.endswith(".ldt"):
- self.processLdt()
- elif self.filepath.name.endswith(".zip"):
- self.processZip()
- else:
- raise FileImportError("Bad file type")
-
-
- def processZip(self):
- # """ extraire .zip, pass to method processLdt"""
- # create temp directory
- self.__tempdir = tempfile.mkdtemp()
- openfiles = []
- flvfiles = []
- processedids = []
-
- try:
- zipfile = zipfileext.ZipFileExt(self.filepath)
- zipfile.unzip_into_dir(self.__tempdir)
- #load ldt
- foldersToProcess = [self.__tempdir]
- while len(foldersToProcess):
- # pocketfilms.utils.log.debug("folder stack length : "+ str(len(foldersToProcess)))
- currentFolder = foldersToProcess.pop()
- for entry in os.listdir(currentFolder):
- if entry in settings.ZIP_BLACKLIST:
- continue
- entryPath = os.path.join(currentFolder, entry)
- if(os.path.isdir(entryPath)):
- # pocketfilms.utils.log.debug("Push folder : " + entryPath)
- foldersToProcess.append(entryPath)
- elif fnmatch.fnmatch(entry, "*.ldt"):
- # pocketfilms.utils.log.debug("Process file : " + entryPath)
- ldtid = self.processLdt(entryPath)
- processedids.append(ldtid)
- elif fnmatch.fnmatch(entry, "*.flv"):
- flvfiles.append(entryPath)
-
- if settings.CONTENT_ROOT and os.path.exists(settings.CONTENT_ROOT):
- for entry in flvfiles:
- shutil.copy(entry, settings.CONTENT_ROOT)
-
- finally:
- for f in openfiles:
- f.close()
- shutil.rmtree(self.__tempdir)
- # delete directory
- return processedids
-
- # def processFileLdt(self):
- # processedids = []
- # ldtid = self.processLdt(self.filepath)
- # processedids.append(ldtid)
- # return processedids
--- a/web/ldt_utils/ldt/forms.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-from django import forms
-from models import Project, Content
-import uuid
-
-class LdtImportForm(forms.Form):
- importFile = forms.FileField()
- videoPath = forms.CharField(required=False)
- flatten = forms.BooleanField(required=False, initial=True)
-
-class LdtAddForm(forms.ModelForm):
- title = forms.CharField()
- # contents = forms.ModelMultipleChoiceField(Content.objects.all())
- # owner = forms.ModelChoiceField(Author.objects.all())
- class Meta:
- model = Project
- exclude = ("ldt_id", "ldt", "created_by", "changed_by", "creation_date", "modification_date", "state", "owner")
-
-class ReindexForm(forms.Form):
- contents = forms.ModelMultipleChoiceField(Content.objects.all())
-
-class SearchForm(forms.Form):
- search = forms.CharField()
- field = forms.ChoiceField([(u"all", u"all"), (u"title", u"title"), (u"abstract", u"resume"), (u"tags", u"tags")])
-
-class AddProjectForm (forms.Form):
- title = forms.CharField()
-
-class CopyProjectForm (forms.Form):
- title = forms.CharField()
--- a/web/ldt_utils/ldt/models.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-from django.db import models
-from django.conf import settings
-from ldt.core.models import Document, Owner
-from django.utils.translation import ugettext_lazy as _
-from utils import create_ldt, copy_ldt
-import uuid
-
-class Author(models.Model):
-
- handle = models.CharField(max_length=512, unique=True, blank=True, null=True)
- email = models.EmailField(unique=False, blank=True, null=True)
- firstname = models.CharField(max_length=512, blank=True, null=True)
- lastname = models.CharField(max_length=512, blank=True, null=True)
-
- def __unicode__(self):
- return unicode(self.id) + " - " + self.handle + ", " + self.email + ", " + self.firstname + " " + self.lastname
-
-
-class Content(models.Model):
- iri_id = models.CharField(max_length=1024, unique=True)
- iriurl = models.URLField()
- videopath = models.URLField(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)
- duration = models.IntegerField(null=True, blank=True)
-
- def get_duration(self):
- if self.duration is None:
- doc = xml.dom.minidom.parse(self.iri_file_path())
- doc = Ft.Xml.Domlette.ConvertDocument(doc)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
- self.duration = int(res[0].getAttributeNS(None, 'dur'))
- self.save()
- return self.duration
-
- def delete(self):
- super(Content, self).delete()
- writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
- writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
- writer.commit()
-
- def __unicode__(self):
- return str(self.id) + ": " + self.iri_id
-
- def iri_url(self, web_url=settings.WEB_URL):
- if 'http' in self.iriurl or 'https' in self.iriurl:
- return self.iriurl
- else:
- return unicode(web_url) + unicode(settings.MEDIA_URL)+u"media/ldt/"+unicode(self.iriurl)
-
-
-class Project(Document):
- STATE_CHOICES=(
- (1, 'edition'),
- (2, 'published'),
- (3, 'moderated'),
- (4, 'rejected'),
- (5, 'deleted')
- )
- ldt_id = models.CharField(max_length=1024, unique=True)
- ldt = models.TextField(null=True)
- title = models.CharField(max_length=1024)
- contents = models.ManyToManyField(Content)
- creation_date = models.DateTimeField(auto_now_add=True)
- modification_date = models.DateTimeField(auto_now=True)
- created_by = models.CharField(_("created by"), max_length=70)
- changed_by = models.CharField(_("changed by"), max_length=70)
- state = models.IntegerField(choices=STATE_CHOICES, default=1)
-
- def __unicode__(self):
- return unicode(self.id) + u": " + unicode(self.ldt_id)
-
- @staticmethod
- def create_project(user, title, contents):
- owner = Owner.objects.get(user=user)
- project = Project(title=title, owner=owner)
- project.ldt_id = str(uuid.uuid1())
- project.created_by=user.username
- project.changed_by=user.username
- project.state = 1
- project.save()
- for content in contents:
- project.contents.add(content)
- project.save()
- return create_ldt(project, user)
-
- def copy_project(self, user, title):
- owner = Owner.objects.get(user=user)
- project = Project(title=title, owner=owner)
- project = copy_ldt(self, project, user)
- project.save()
- for content in self.contents.all():
- project.contents.add(content)
- project.save()
- return project
-
-class Segment(models.Model):
-
- project_obj = models.ForeignKey(Project, null=True)
- content = models.ForeignKey(Content)
- project_id = models.CharField(max_length=1024, unique=False, blank=True, null=True)
- iri_id = models.CharField(max_length=1024, unique=False)
- ensemble_id = models.CharField(max_length=1024, unique=False)
- cutting_id = models.CharField(max_length=1024, unique=False)
- element_id = models.CharField(max_length=1024, unique=False)
- tags = models.CharField(max_length=2048, unique=False, null=True, blank=True)
- title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
- duration = models.IntegerField(null=True)
- start_ts = models.IntegerField(null=True)
- author = models.CharField(max_length=1024, unique=False, null=True, blank=True)
- date = models.CharField(max_length=128, unique=False, null=True, blank=True)
- abstract = models.TextField(null=True, blank=True)
-
- def __unicode__(self):
- return "/".join((unicode(self.project_id), unicode(self.iri_id), unicode(self.ensemble_id), unicode(self.cutting_id), unicode(self.element_id)))
-
- class Meta:
- unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
-
--- a/web/ldt_utils/ldt/projectindexer.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-import tempfile
-import os
-import os.path
-import shutil
-import ldt.utils.xml
-from ldt import settings
-import xml
-import xml.dom
-import xml.dom.minidom
-import xml.dom.ext
-import xml.xpath
-import lucene
-from ldt.ldt_utils import STORE
-from ldt.ldt_utils import ANALYZER
-
-def Property(func):
- return property(**func())
-
-class ProjectIndexer(object):
- def __init__(self, projectList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
- self.__projectList = projectList
- self.__decoupage_blacklist = decoupage_blackList
- self.__writer = writer
-
- @Property
- def decoupage_blacklist(): #@NoSelf
- doc = """get blacklist""" #@UnusedVariable
-
- def fget(self):
- if self.__decoupage_blacklist is None:
- self.__decoupage_blacklist = ()
- return self.__decoupage_blacklist
-
- def fset(self, value):
- self.__decoupage_blacklist = value
-
- def fdel(self):
- del self.__decoupage_blacklist
-
- return locals()
-
- def index_all(self):
- for project in self.__projectList:
- self.index_project(project)
-
- def index_project(self, project):
- # ldt.utils.log.debug("Indexing project : "+str(project.ldt_id))
- ldt=project.ldt
- doc = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
-
- self.__writer.deleteDocuments(lucene.Term("ldt_id", project.ldt_id))
-
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
-
- for content in res:
- contentId = content.getAttribute("id")
-
- res =xml.xpath.Evaluate("ensemble", content)
- for ensemble in res:
- ensembleId = ensemble.getAttribute("id")
-
- for decoupageNode in ensemble.childNodes:
- # ldt.utils.log.debug("Indexing project decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
- if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage" or decoupageNode.getAttribute("id") in self.decoupage_blacklist:
- continue
-
- decoupId = decoupageNode.getAttribute("id")
- res = xml.xpath.Evaluate("elements/element", decoupageNode)
- for elementNode in res:
- doc = lucene.Document()
- elementId = elementNode.getAttribute("id")
- tags = elementNode.getAttribute("tags")
-
- if tags is not None:
- tags.replace(",", ";")
-
- if tags is None or len(tags) == 0:
- tags = ""
- restagnode = xml.xpath.Evaluate("tag/text()", elementNode)
- for tagnode in restagnode:
- tags = tags + " ; " + tagnode.data
-
- if tags is None or len(tags) == 0:
- tags = ""
- restagnode = xml.xpath.Evaluate("tags/tag/text()", elementNode)
- for tagnode in restagnode:
- tags = tags + " ; " + tagnode.data
-
- title = ""
- for txtRes in xml.xpath.Evaluate("title/text()", elementNode):
- title = title + txtRes.data
-
- abstract = ""
- for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode):
- abstract = abstract + txtRes.data
-
- doc.add(lucene.Field("ldt_id", project.ldt_id, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))
- doc.add(lucene.Field("iri_id", contentId, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))
- doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
- doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
- doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
- doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-
- self.__writer.addDocument(doc)
-
- self.__writer.flush()
\ No newline at end of file
--- a/web/ldt_utils/ldt/templates/admin/ldt/app_action.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-{% extends "admin/base_site.html" %} {% load i18n %} {% block
-breadcrumbs %}
-<div class="breadcrumbs"><a href="{% url admin:index %}"> {%
-trans "Home" %}</a> › <a href="{% url admin:app_list 'ldt' %}">
-ldt</a> › {{ current_action }}</div>
-{% endblock %}
-
--- a/web/ldt_utils/ldt/templates/admin/ldt/app_index.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-{% extends "admin/app_index.html" %} {% load i18n %} {% block content %}
-{{ block.super }}
-
-<div class="module">
-<table summary="Import">
- <caption>Import</caption>
- <tr>
- <th><a href="{{WEB_URL}}{% url admin:ldt_content_import_file %}">Import
- an ldt</a></th>
- <td> </td>
- <!--tr>
- <th>
- <a href="content/export/form">Generate ldt</a>
- </th>
- <td> </td>
- </tr-->
- <tr>
- <th><a href="{{WEB_URL}}{% url admin:ldt_content_reindex %}">Reindex</a>
- </th>
- <td> </td>
- </tr>
-</table>
-</div>
-
-{% endblock %}
--- a/web/ldt_utils/ldt/templates/admin/ldt/content/reindex_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-{% extends "admin/ldt/app_action.html" %} {% load i18n %} {# reindex
-contents #} {% block content %} {% if message %}
-<div>
-<p>{{ message }}</p>
-</div>
-{% endif %} {% if form. %}
-<div></div>
-{% endif %}
-<div>
-<form method="post"
- action="{{WEB_URL}}{% url admin:ldt_content_reindex %}">{%
-csrf_token %}
-<table>
- {{ form.as_table }}
-</table>
-<input type="submit" /></form>
-</div>
-
-<a href="{{WEB_URL}}{% url admin:app_list 'ldt' %}">Back to
-administration page</a>
-
-{% endblock %}
--- a/web/ldt_utils/ldt/templates/admin/ldt/content/search_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-{% extends "base.html" %} {% block content %}
-
-<form method="post"
- action="{{WEB_URL}}{% url ldt.ldt.views.searchIndex %}"
- accept-charset="utf-8">
-
-<table>
- {{ form.as_table }}
-</table>
-<input type="submit" /></form>
-
-
-{% endblock %}
--- a/web/ldt_utils/ldt/templates/admin/ldt/content/upload_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-{% extends "admin/ldt/app_action.html" %} {# import an ldt #} {% block
-content %}
-<p>Vous pouvez importer un fichier ldt ou un zip qui compresse un
-fichier .ldt et plusieurs fichiers .iri.</p>
-<p>Bien verifiez vous que le chemin de source est absolute pour un
-fichier ldt lors qu'il est tout seul, alors qu'il est relatif s'il est
-dans le zip</p>
-<p>Vous pouvez indiquer le chemin de video si vous avez besoin</p>
-{% if message %}
-<div>
-<p>{{ message }}</p>
-</div>
-{% endif %} {% if form %}
-
-<form method="post" enctype="multipart/form-data" action="">{%
-csrf_token %}
-<table>
- {{ form.as_table }}
-</table>
-<input type="submit" /></form>
-{% endif %}
-
-<a href="{% url admin:app_list 'ldt' %}">Back to administration
-page</a>
-
-{% endblock %}
--- a/web/ldt_utils/ldt/templates/iriuser/ldt/copy_ldt.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-{% load i18n %} {# form of copy of project ldt #}
-<!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>
-<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
-</head>
-<body>
-<div id="add_contribution">
-<div class="title">{% trans "Copy your project" %}</div>
-<form action="" method="POST">{% csrf_token %} <label for="title">{%
-trans "Title" %}:</label> <input class="inputbox required" type="text"
- name="title" size="80" ; value="" id="title" /> <input class="button"
- id="ldt_submit" type="submit" value="{% trans 'Copy' %}" /></form>
-</div>
-</body>
-</html>
--- a/web/ldt_utils/ldt/templates/iriuser/ldt/create_ldt.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-{% load i18n %} {# form of creation of project ldt #}
-<!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>
-<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
-</head>
-<body>
-<div id="add_contribution">
-<div class="title">{% 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" />
-
-<div class="title">{% trans "List of contents" %}</div>
-<ul class='contentlist'>
- {% for content in contents %}
- <li><input type="checkbox" name="contents" value="{{ content.id}}"
- checked="true" />{{content.iri_id}}</li>
- {% endfor %}
-</ul>
-
-<input class="button" id="ldt_submit" type="submit"
- value="{% trans 'Create' %}" /></form>
-</div>
-</body>
-</html>
--- a/web/ldt_utils/ldt/templates/iriuser/ldt/init_ldt.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
-<meta http-equiv="Pragma" content="no-cache" />
-<meta http-equiv="Cache" content="no store" />
-<meta http-equiv="Expires" content="-1" />
-<title>Ligne de Temps - IRI</title>
-<script type="text/javascript" src="{{MEDIA_URL}}js/swfobject.js"></script>
-<script type="text/javascript">
-
- </script>
-</head>
-
-<body id="init_ldt_view">
-
-<div id="ldtInit" style="width: 1001px; height: 631px;"> </div>
-<script language="JavaScript" type="text/javascript">
-
- var params = {
- quality:"high",
- allowFullScreen:"true",
- wmode:"transparent",
- allowScriptAccess:"always"
- };
-
- var flashvars = {
- colorUrl:'{{colorurl}}',
- i18nUrl: '{{i18nurl}}',
- language: '{{language}}',
- {% if url %}
- urlBase:'{{baseurl}}',
- initUrl:'{{url}}',
- {% endif %}
- {% ifequal readonly 'false' %}
- readOnly: '{{readonly}}',
- postUrl:'{{posturl}}',
- postVars: encodeURIComponent('id={{id}}&csrfmiddlewaretoken={{csrf_token}}'),
- {% else %}
- readOnly:'true',
- {% endifequal %}
- startTime:'100'
- };
-
- var attributes = { id: "ldtInitSwf", name: "ldtInitSwf"};
-
- swfobject.embedSWF("{{ MEDIA_URL }}swf/ldt/LignesDeTempsFlex.swf", "ldtInit", "1001", "631", "9.0.0", "{{ MEDIA_URL }}swf/expressInstall.swf", flashvars, params, attributes);
-
- </script>
-</body>
-</html>
--- a/web/ldt_utils/ldt/templates/iriuser/ldt/ldt_list.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-{% extends "ldt/user/user_base.html" %} {# list of projects ldt #} {%
-load i18n %} {% block js_import %}{{ block.super }}
-<script type="text/javascript"
- src="{{ BASE_URL }}static/js/jquery.DOMwindow.js"></script>
-<script type="text/javascript">
- $(document).ready(function(){
- $('.ldt_link').nyroModal({
- height:662,
- width:1022,
- type:'iframe',
- forceType:'iframe',
- padding:5,
- bgColor: 'rgb(239, 239, 239)',
- titleFromIframe: false,
- beforeHideContent: function(elts, settings, callback){
- try {
- var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
- if(res.length > 0)
- {
- var swfobj = res.get(0);
- if(swfobj && swfobj.forceSave != undefined)
- swfobj.forceSave();
- }
- }
- catch(err)
- {
- // do nothing
- }
- callback();
- }
- });
- $('.create_ldt_link').nyroModal({
- height:662,
- width:1022,
- type:'ajax',
- padding:5,
- bgColor: 'rgb(239, 239, 239)',
- });
- });
-</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 "Ldt Project" %}{%
-endblock %} {% block iricontent %}
-<div id='ldtlist'><a
- href="{% url ldt.ldt.views.create_ldt_view %}" class="create_ldt_link">{%
-trans 'Create new project'%}</a>
-<table>
- <caption>{% trans "Project" %}</caption>
- <thead>
- <tr>
- <th width="170">{% trans "title" %}</th>
- <th width="20">{% trans " published" %}</th>
- </tr>
- </thead>
- <tbody>
- {% for ldt in ldtProjects %}
- <tr>
- <th><a href="{% url ldt.ldt.views.indexProject ldt.ldt_id %}"
- class="ldt_link">{{ ldt.title }}</a></th>
- {% ifequal ldt.state 2%}
- <td><a href="{% url ldt.ldt.views.unpublish ldt.ldt_id%}"><img
- alt="True" src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" /></td>
- {% else %}
- <td><a href="{% url ldt.ldt.views.publish ldt.ldt_id %}"><img
- alt="False" src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" /></td>
- {% endifequal %}
- </tr>
- {% endfor %}
- </tbody>
-</table>
-</div>
-{% endblock %}
-
--- a/web/ldt_utils/ldt/templates/iriuser/ldt/loading.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<!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>
-<style type="text/css">
-.center {
- position: absolute;
- top: 50%;
- left: 50%;
-}
-
-.center div {
- position: relative;
- top: -7px;
- left: -104px;
-}
-</style>
-</head>
-<body>
-<div class="center">
-<div><img alt="loading"
- src="{{MEDIA_URL}}img/loadingAnimation.gif" /></div>
-</div>
-</body>
-</html>
--- a/web/ldt_utils/ldt/templates/iriuser/ldt/save_done.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<p>done</p>
-<p>{{ldt}}
-<p>
-<p>{{id}}</p>
-<p>title:{{title}}</p>
\ No newline at end of file
--- a/web/ldt_utils/ldt/tests.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-"""
-This file demonstrates two different styles of tests (one doctest and one
-unittest). These will both pass when you run "manage.py test".
-
-Replace these with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.failUnlessEqual(1 + 1, 2)
-
-__test__ = {"doctest": """
-Another way to test that 1 + 1 is equal to 2.
-
->>> 1 + 1 == 2
-True
-"""}
-
--- a/web/ldt_utils/ldt/urls.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-from django.conf.urls.defaults import *
-from ldt.management import test_ldt
-
-# Uncomment the next two lines to enable the admin:
-# from django.contrib import admin
-# admin.autodiscover()
-
-urlpatterns = patterns('ldt.ldt_utils',
- url(r'^searchInit/(?P<field>.*)/(?P<query>.*)$', 'views.searchInit'),
- url(r'^searchForm/$', 'views.searchForm'),
- url(r'^search/$', 'views.searchIndex'),
- url(r'^search/(?P<field>.*)/(?P<query>.*)$', 'views.searchIndexGet'),
- url(r'^searchLdt/(?P<field>.*)/(?P<query>.*)$', 'views.searchLdt'),
- url(r'^searchSeg/(?P<field>.*)/(?P<query>.*)$', 'views.searchSegments'),
- url(r'^index/(?P<url>.*)$', 'views.index'),
- url(r'^init/(?P<method>.*)/(?P<url>.*)$', 'views.init'),
- url(r'^ldt/(?P<url>.*)$', 'views.ldt'),
- url(r'^search/loading/$', 'views.loading'),
- url(r'^create/(?P<iri_id>.*)$', 'views.create_project'),
- url(r'^copy/(?P<ldt_id>.*)$', 'views.copy_project'),
-)
-
-if test_ldt():
- urlpatterns += patterns('ldt.ldt_utils',
- 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'),
- url(r'^space/ldt/project/(?P<id>.*)$', 'views.ldtProject'),
- 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'),
-
-)
--- a/web/ldt_utils/ldt/utils.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-import lucene
-from ldt.ldt_utils import STORE
-from ldt.ldt_utils import ANALYZER
-from Ft.Xml import MarkupWriter
-import uuid
-import django.core.urlresolvers
-from django.conf import settings
-import urllib
-import xml.dom
-import xml.dom.minidom
-import xml.dom.ext
-import xml.xpath
-import os
-import os.path
-
-class LdtSearch(object):
-
- def query(self, field, query):
- indexSearcher = lucene.IndexSearcher(STORE)
- queryParser = lucene.QueryParser(lucene.Version.LUCENE_30, field, lucene.FrenchAnalyzer(lucene.Version.LUCENE_30))
- queryParser.setDefaultOperator(lucene.QueryParser.Operator.AND)
- queryObj = queryParser.parse(query)
- hits = indexSearcher.search(queryObj, settings.LDT_MAX_SEARCH_NUMBER)
-
- res = []
- for hit in hits.scoreDocs:
- doc = indexSearcher.doc(hit.doc)
- res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
- indexSearcher.close()
- return res
-
- def queryAll(self, query):
- return self.query("all", query)
-
-class LdtUtils(object):
-
- def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None):
-
- writer = MarkupWriter(file, indent = u"yes")
- writer.startDocument()
- writer.startElement(u"iri")
- writer.simpleElement(u"project", attributes={u"id":unicode(str(uuid.uuid1())), u"title":unicode(title) , u"user":author, u"abstract":u""})
- writer.startElement(u"medias")
- for content in contentList:
- videopath = unicode(settings.STREAM_URL)
- if content.videopath :
- videopath = unicode(content.videopath)
- writer.simpleElement(u"media", attributes={u"id":content.iri_id,u"src":content.iri_url(web_url),u"video":videopath,u"pict":u"",u"extra":u""})
- writer.endElement(u"medias")
-
- if contributions is None:
- contributions = []
- annotations_nodes = {}
- for contrib in contributions:
- doc = xml.dom.minidom.parseString(contrib.ldtproject.ldt.encode("utf-8"))
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
- for content in res:
- contentid = content.getAttribute("id")
- if annotations_nodes.has_key(contentid):
- contentnode = annotations_nodes[contentid]
- else:
- contentnode = {"id":contentid, "ensembles":[]}
- annotations_nodes[contentid]=contentnode
- for ens in content.childNodes:
- if ens.nodeType == xml.dom.Node.ELEMENT_NODE and ens.tagName.endswith("ensemble"):
- contentnode["ensembles"].append(ens.toprettyxml())
-
- if len(annotations_nodes) > 0:
- writer.startElement(u"annotations")
- for content in contentList:
- if content.content_base.iri_id in annotations_nodes:
- contentnode = annotations_nodes[content.content_base.iri_id]
- if contentnode is not None:
- if len(contentnode["ensembles"])>0:
- writer.startElement(u"content", attributes={"id":contentnode["id"]})
- writer.text(u"")
- for ens in contentnode["ensembles"]:
- writer.xmlFragment(ens.encode("utf-8"))
- writer.endElement(u"content")
- else:
- writer.simpleElement(u"content", attributes={"id":contentnode["id"]})
- writer.endElement(u"annotations")
- else:
- writer.simpleElement(u"annotations")
-
-
- writer.startElement(u"displays")
- if len(contentList) > 0:
- writer.startElement(u"display", attributes={u"id":u"0",u"title":u"generated",u"idsel":contentList[0].iri_id,u"tc":u"0"})
- for content in contentList:
- writer.startElement(u"content", attributes={u"id":content.iri_id})
- filepath = urllib.urlopen(content.iri_url())
- doc = xml.dom.minidom.parse(filepath)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
- for decoupagenode in res:
- decoupage_id = decoupagenode.getAttribute(u"id")
- ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
- writer.simpleElement(u"decoupage", attributes={u"id":decoupage_id,u"idens":ensemble_id})
- writer.endElement(u"content")
- if startSegment is not None:
- writer.startElement(u"activeSegment")
- writer.simpleElement(u"id",attributes={u"idctt" : startSegment["idcontent"],u"idens" : startSegment["idgroup"], u"idcut" : startSegment["idcutting"], u"idseg" : startSegment["idsegment"]})
- writer.endElement(u"activeSegment")
-
- writer.endElement(u"display")
- writer.endElement(u"displays")
- writer.simpleElement(u"edits")
- writer.endElement(u"iri")
-
- def generateInit(self, url, method, search=None):
-
- import xml.dom
- import xml.dom.ext
-
- impl = xml.dom.getDOMImplementation()
- doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
-
- elementFiles = doc.createElement('files')
- doc.documentElement.appendChild(elementFiles)
-
- elementInit = doc.createElement('init')
- elementFiles.appendChild(elementInit)
-
- elementfile = doc.createElement('file')
-
- elementfile.setAttribute('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
- elementfile.setAttribute('display', '1')
- if(search):
- elementfile.setAttribute("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))
-
-
- # /*chemin video : tant que le serveur de media n'est pas up, */
- elementfile.setAttribute('video', settings.STREAM_URL)
- elementfile.setAttribute('pict', "")
- elementfile.setAttribute('extra', "")
-
- elementInit.appendChild(elementfile);
-
- elementRecent = doc.createElement('recent');
- elementFiles.appendChild(elementRecent);
-
-
- elementLibrary = doc.createElement('library');
- elementFiles.appendChild(elementLibrary);
-
- username = ''
- id = ''
- elementUser = doc.createElement('user')
- elementUser.setAttribute('name', username)
- elementUser.setAttribute('id', id)
- doc.documentElement.appendChild(elementUser)
-
- return doc
-
-def create_ldt(project, user):
-
- contentList=project.contents.all()
-
- """create xml"""
-
- # create a dom
- impl = xml.dom.getDOMImplementation()
- dom = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
- #node project
- elementProject = dom.createElement('project')
- dom.documentElement.appendChild(elementProject)
-
-
- elementProject.setAttribute('abstract', "")
- elementProject.setAttribute('title', project.title)
- elementProject.setAttribute('user', user.username)
- elementProject.setAttribute('id', project.ldt_id)
- #node medias
- elementMedias = dom.createElement('medias')
- dom.documentElement.appendChild(elementMedias)
-
- idsel = None
- for content in contentList:
- if not idsel:
- idsel = content.iri_id
- elementMedia = dom.createElement('media')
- elementMedia.setAttribute('id', content.iri_id)
- elementMedia.setAttribute('src', content.iri_url())
- if content.videopath and content.videopath !="":
- elementMedia.setAttribute('video', content.videopath)
- else:
- elementMedia.setAttribute('video', settings.STREAM_URL)
- elementMedia.setAttribute('pict', "")
- elementMedia.setAttribute('extra', "")
- elementMedias.appendChild(elementMedia)
- if not idsel:
- idsel = ""
-
- #node annotations
- elementAnnotations = dom.createElement('annotations')
- dom.documentElement.appendChild(elementAnnotations)
- #node displays
- elementDisplays = dom.createElement('displays')
- elementDisplay = dom.createElement('display')
- elementDisplay.setAttribute('id', '0')
- elementDisplay.setAttribute('title', 'Init view')
- elementDisplay.setAttribute('idsel', idsel)
- elementDisplay.setAttribute('tc', '0')
- elementDisplay.setAttribute('zoom', '0')
- elementDisplay.setAttribute('scroll', '0')
- elementDisplay.setAttribute('infoBAB', '')
- #node content
- for content in contentList:
- elementContent = dom.createElement('content')
- elementContent.setAttribute('id', content.iri_id)
- if not 'http' in content.iriurl:
- #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
- url = content.iri_url()
- else:
- url =content.iriurl
- file = urllib.urlopen(url)
- doc = xml.dom.minidom.parse(file)
- con = xml.xpath.Context.Context(doc, 1, 1, None)
- res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble/decoupage", context=con)
- #node decoupage
- for decoupagenode in res:
- decoupage_id = decoupagenode.getAttribute(u"id")
- ensemble_id = decoupagenode.parentNode.getAttribute(u"id")
- elementDecoupage = dom.createElement('decoupage')
- elementDecoupage.setAttribute('idens', ensemble_id)
- elementDecoupage.setAttribute('id', decoupage_id)
- elementContent.appendChild(elementDecoupage)
- elementDisplay.appendChild(elementContent)
-
- elementDisplays.appendChild(elementDisplay)
- dom.documentElement.appendChild(elementDisplays)
-
- elementEdits = dom.createElement('edits')
- dom.documentElement.appendChild(elementEdits)
- # write dom in Project.ldt
- project.ldt = dom.documentElement.toprettyxml()
- #save Project
- project.save()
- return project
-
-
-def copy_ldt(project, new_project, user):
- new_project.ldt_id = str(uuid.uuid1())
- new_project.created_by=user.username
- new_project.changed_by=user.username
- new_project.state = 1
-
- contentList=project.contents.all()
-
- """create xml"""
-
- # create a dom
- dom = xml.dom.minidom.parseString(project.ldt.encode("utf-8"))
- con = xml.xpath.Context.Context(dom, 1, 1, None)
- res = xml.xpath.Evaluate("iri/project", context=con)
- for elementProject in res:
- elementProject.setAttribute('abstract', "")
- elementProject.setAttribute('title', new_project.title)
- elementProject.setAttribute('user', user.username)
- elementProject.setAttribute('id', new_project.ldt_id)
-
- new_project.ldt = dom.documentElement.toprettyxml()
- #save Project
- new_project.save()
- return new_project
--- a/web/ldt_utils/ldt/views.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,287 +0,0 @@
-import django.core.urlresolvers
-from django.http import HttpResponse, HttpResponseRedirect
-from django.shortcuts import render_to_response, get_object_or_404
-from django.template import RequestContext
-from django.core.urlresolvers import reverse
-from django.contrib.auth.decorators import login_required
-from django.conf import settings
-from fileimport import *
-from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm
-from ldt.core.models import Owner
-from models import *
-from utils import *
-from contentindexer import *
-from string import Template
-from Ft.Xml import MarkupWriter
-import cgi
-import uuid
-import base64
-import lucene
-import xml.dom
-import xml.dom.ext
-import xml.dom.minidom
-
-
-
-def searchForm(request):
- form = SearchForm()
- return render_to_response('ldt/ldt/search_form.html',{'form': form} , context_instance=RequestContext(request))
-
-def searchIndex(request):
-
- sform = SearchForm(request.POST)
- if sform.is_valid():
- search = sform.cleaned_data["search"]
-
-
- queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
- field = request.POST["field"]
- language_code = request.LANGUAGE_CODE[:2]
-
- url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
- return render_to_response('ldt/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
- else:
- resp = HttpResponse()
- resp.write("<html><head></head><body>Error : No result</body></html>");
-
-def searchIndexGet(request, field, query):
-
- language_code = request.LANGUAGE_CODE[:2]
- url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
- return render_to_response('irisuser/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
-
-def searchInit(request, field, query):
-
- ldtgen = LdtUtils()
-
- doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
-
- resp = HttpResponse(mimetype="text/xml;charset=utf-8")
- xml.dom.ext.PrettyPrint(doc, resp)
- return resp
-
-def searchLdt(request, field, query, edition=None):
-
- contentList = []
- resp = HttpResponse(mimetype="text/xml")
- queryStr = ""
-
- if query and len(query)>0:
- queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
- searcher = LdtSearch()
- ids = {}
-
- for result in searcher.query(field, queryStr):
- ids[result["iri_id"]] = ""
-
- id_list = ids.keys()
-
- if edition is not None:
- ids_editions = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))
- id_list = filter(lambda id: id in id_list, ids_editions)
-
- contentList = Content.objects.filter(iri_id__in=id_list)
-
-
- ldtgen = LdtUtils()
- ldtgen.generateLdt(contentList, file=resp, title = u"Recherche : " + queryStr)
-
- return resp
-
-
-def searchSegments(request, field, query, edition=None):
-
- if query and len(query)>0:
- searcher = LdtSearch()
-
- queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
- res = searcher.query(field, queryStr)
- else:
- res = []
-
- iri_ids = None
-
- if edition is not None:
- iri_ids = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))
-
- doc = xml.dom.getDOMImplementation().createDocument(None, "iri", None)
-
- for resultMap in res:
- if iri_ids is None or resultMap['iri_id'] in iri_ids:
- elem = doc.createElement('seg')
- elem.setAttribute('idctt', resultMap['iri_id'])
- elem.setAttribute('idens', resultMap['ensemble_id'])
- elem.setAttribute('iddec', resultMap['decoupage_id'])
- elem.setAttribute('idseg', resultMap['element_id'])
- elem.setAttribute('idvue', "")
- elem.setAttribute('crit', "")
- doc.documentElement.appendChild(elem)
-
- return HttpResponse(doc.toprettyxml(encoding='utf-8'), mimetype="text/xml;charset=utf-8")
-
-@login_required
-def list_ldt(request):
- contents = Content.objects.all()
- try:
- owner = Owner.objects.get(user=request.user)
- except:
- return HttpResponseRedirect(settings.LOGIN_URL)
- ldtProjects = Project.objects.filter(owner=owner)
- context={
- 'contents': contents,
- 'ldtProjects': ldtProjects.reverse(),
- }
- return render_to_response('ldt/ldt/ldt_list.html', context, context_instance=RequestContext(request))
-
-def create_ldt_view(request):
- if request.method == "POST" :
- form = LdtAddForm(request.POST)
- if form.is_valid():
- user = request.user
- Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'])
- return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
- else:
- form = LdtAddForm()
- contents = Content.objects.all()
- return render_to_response('ldt/ldt/create_ldt.html', {'contents': contents, 'form': form,'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
-
-def created_ldt(request):
- return render_to_response('ldt/ldt/done.html', context_instance=RequestContext(request))
-
-def indexProject(request, id):
-
- urlStr = settings.WEB_URL + reverse("ldt.ldt_utils.views.init", args=['ldtProject', id])
- posturl= settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
- language_code = request.LANGUAGE_CODE[:2]
-
- ldt = get_object_or_404(Project, ldt_id=id)
- if ldt.state ==2: #published
- readonly = 'true'
- else:
- readonly = 'false'
-
- return render_to_response('ldt/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
-
-def init(request, method, url):
- ldtgen = LdtUtils()
-
- doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
-
- resp = HttpResponse(mimetype="text/xml")
- resp['Cache-Control']='no-cache, must-revalidate'
- resp['Pragma']='no-cache'
- xml.dom.ext.PrettyPrint(doc, resp)
- return resp
-
-def ldtProject(request, id):
- resp = HttpResponse(mimetype="text/xml")
- resp['Cache-Control']='no-cache, must-revalidate'
- resp['Pragma']='no-cache'
-
- project = Project.objects.get(ldt_id=id)
- resp.write(project.ldt)
- return resp
-
-def save_ldtProject(request):
- if request.method=="POST":
- ldt = request.POST['ldt']
- id = request.POST['id']
- ldtproject=Project.objects.get(ldt_id=id)
- #save xml ldt
- ldtproject.ldt=ldt
- #get new title
- dom = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
- con = xml.xpath.Context.Context(dom, 1, 1, None)
- result = xml.xpath.Evaluate("/iri/project",context=con)
- for pnode in result:
- title=pnode.getAttribute("title")
- break
- #set new title
- ldtproject.title=title
- #get new content list
- new_contents=[]
- result = xml.xpath.Evaluate("/iri/medias/media", context=con)
- for medianode in result:
- id = medianode.attributes['id'].value
- new_contents.append(id)
- # set new content list
- for c in ldtproject.contents.all():
- if not c.iri_id in new_contents:
- ldtproject.contents.remove(c)
- ldtproject.save()
- else:
- ldt = ''
- return render_to_response('ldt/ldt/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
-
-@login_required
-def publish(request, id):
- ldt = get_object_or_404(Project, ldt_id=id)
- ldt.state = 2 #published
- ldt.save()
- return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
-
-@login_required
-def unpublish(request, id):
- ldt = get_object_or_404(Project, ldt_id=id)
- ldt.state = 1 #edition
- ldt.save()
- return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
-
-
-def index(request, url):
-
- urlStr = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.init", args=['ldt',url])
- language_code = request.LANGUAGE_CODE[:2]
-
- return render_to_response('ldt/ldt/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL+settings.BASE_URL}, context_instance=RequestContext(request))
-
-
-def ldt(request, url, startSegment = None):
-
- import Ft
- from Ft.Xml import MarkupWriter
-
- resp = HttpResponse(mimetype="text/xml; charset=utf-8")
- resp['Cache-Control'] = 'no-cache'
-
- contentList = Content.objects.filter(iri_id=url)
-
- ldtgen = LdtUtils()
- ldtgen.generateLdt(contentList, file=resp, title = contentList[0].title, startSegment=startSegment)
-
- return resp
-
-
-def loading(request):
- return render_to_response('ldt/ldt/loading.html', context_instance=RequestContext(request))
-
-
-@login_required
-def create_project(request, iri_id):
-
- content = get_object_or_404(Content, iri_id=iri_id)
- contents = [ content, ]
- if request.method == "POST" :
- form = AddProjectForm(request.POST)
- if form.is_valid():
- user=request.user
- project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents)
- return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
- else:
- form = AddProjectForm()
- return render_to_response('ldt/ldt/create_ldt.html', {'form':form, 'contents':contents, 'iri_id':iri_id, 'create_project_action':reverse("ldt.ldt_utils.views.create_project",args=[iri_id])}, context_instance=RequestContext(request))
-
-@login_required
-def copy_project(request, ldt_id):
-
- project = get_object_or_404(Project, ldt_id=ldt_id)
- if request.method == "POST" :
- form = CopyProjectForm(request.POST)
- if form.is_valid():
- user=request.user
- project = project.copy_project(title=request.POST['title'], user=user)
- return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
- else:
- form = CopyProjectForm
- return render_to_response('ldt/ldt/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
-
Binary file web/ldt_utils/locale/en/LC_MESSAGES/django.mo has changed
--- a/web/ldt_utils/locale/en/LC_MESSAGES/django.po Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,648 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-09 08:48-0600\n"
-"PO-Revision-Date: 2010-02-17 03:53+0100\n"
-"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ldt/models.py:43
-msgid "created by"
-msgstr "created by"
-
-#: ldt/models.py:44
-msgid "changed by"
-msgstr "changed by"
-
-#: ldt/templates/admin/ldt/app_action.html:6
-#: templates/admin/cms_change_list.html:7
-#: templates/admin/page_app_index.html:8
-#: templates/admin/page_change_form.html:17
-#: templates/admin/page_change_list.html:25
-#: user/templates/registration/logged_out.html:4
-msgid "Home"
-msgstr "Home"
-
-#: ldt/templates/iriuser/ldt/copy_ldt.html:12
-msgid "Copy your project"
-msgstr "Copy your project"
-
-#: ldt/templates/iriuser/ldt/copy_ldt.html:15
-#: ldt/templates/iriuser/ldt/create_ldt.html:15
-msgid "Title"
-msgstr "Title"
-
-#: ldt/templates/iriuser/ldt/copy_ldt.html:18
-msgid "Copy"
-msgstr "Copy"
-
-#: ldt/templates/iriuser/ldt/create_ldt.html:12
-msgid "Create your project"
-msgstr "Create your project"
-
-#: ldt/templates/iriuser/ldt/create_ldt.html:18
-msgid "List of contents"
-msgstr "List of contents"
-
-#: ldt/templates/iriuser/ldt/create_ldt.html:25
-msgid "Create"
-msgstr "Create"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:50
-#: templates/admin/page_base.html:19
-#: user/templates/iriuser/user/login_form.html:33
-#: user/templates/iriuser/user/space.html:6
-#: user/templates/iriuser/user/space.html:9
-msgid "Space"
-msgstr "Space"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:51
-#: ldt/templates/iriuser/ldt/ldt_list.html:53
-msgid "Ldt Project"
-msgstr "Ldt Project"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:57
-msgid "Create new project"
-msgstr "Create new project"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:59
-msgid "Project"
-msgstr "Project"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:62
-msgid "title"
-msgstr "Title"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:63
-msgid " published"
-msgstr " published"
-
-#: templates/admin/cms_change_form.html:30
-msgid "Approve page deletion"
-msgstr "Approve page deletion"
-
-#: templates/admin/cms_change_form.html:36
-#, python-format
-msgid "(requires approvement at %(moderation_level)s level)"
-msgstr "(requires approvement at %(moderation_level)s level)"
-
-#: templates/admin/cms_change_form.html:37
-msgid "(you can perform actions on this page directly)"
-msgstr "(you can perform actions on this page directly)"
-
-#: templates/admin/cms_change_form.html:50
-msgid "Remove delete request"
-msgstr "Remove delete request"
-
-#: templates/admin/cms_change_form.html:52
-msgid "Approve delete"
-msgstr "Approve delete"
-
-#: templates/admin/cms_change_form.html:52
-msgid "Approve"
-msgstr "Approve"
-
-#: templates/admin/cms_change_form.html:52
-#: templates/admin/cms_change_form.html:53
-msgid "draft"
-msgstr "draft"
-
-#: templates/admin/cms_change_form.html:53
-msgid "Preview"
-msgstr "Preview"
-
-#: templates/admin/cms_change_form.html:56
-#: templates/admin/page_change_form.html:27
-msgid "History"
-msgstr "History"
-
-#: templates/admin/cms_change_form.html:57
-#: templates/admin/page_change_form.html:28
-msgid "View on site"
-msgstr "View on site"
-
-#: templates/admin/cms_change_form.html:87
-#: templates/admin/page_change_form.html:38
-#: templates/admin/page_change_list.html:54
-#: templates/cms/admin/cms/page/change_form.html:24
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Please correct the error below."
-msgstr[1] "Please correct the errors below."
-
-#: templates/admin/cms_change_form.html:107
-msgid "All permissions"
-msgstr "All permissions"
-
-#: templates/admin/cms_change_form.html:108
-#: templates/admin/cms_change_form.html:120
-msgid "Loading..."
-msgstr "Loading..."
-
-#: templates/admin/cms_change_form.html:119
-msgid "Page states"
-msgstr "Page states"
-
-#: templates/admin/cms_change_form.html:142
-#, python-format
-msgid ""
-"This page must be moderated at level %(moderation_level)s, post a message "
-"for moderator."
-msgstr ""
-"This page must be moderated at level %(moderation_level)s, post a message "
-"for moderator."
-
-#: templates/admin/cms_change_form.html:144
-msgid "Request approvemet"
-msgstr "Request approvemet"
-
-#: templates/admin/cms_change_form.html:234
-#: user/templates/registration/registration_form.html:16
-msgid "Save"
-msgstr "Save"
-
-#: templates/admin/cms_change_form.html:235
-msgid "Save and continue editing"
-msgstr "Save and continue editing"
-
-#: templates/admin/cms_change_list.html:51
-msgid "Successfully moved"
-msgstr "Successfully moved"
-
-#: templates/admin/cms_change_list.html:76
-#, python-format
-msgid "Recover deleted %(name)s"
-msgstr "Recover deleted %(name)s"
-
-#: templates/admin/cms_change_list.html:79
-#: templates/admin/page_change_list.html:46
-#, python-format
-msgid "Add %(name)s"
-msgstr "Add %(name)s"
-
-#: templates/admin/cms_change_list.html:91
-msgid "Pages on:"
-msgstr "Pages on:"
-
-#: templates/admin/cms_change_list.html:108
-msgid "on"
-msgstr "on"
-
-#: templates/admin/cms_change_list.html:108
-msgid "off"
-msgstr "off"
-
-#: templates/admin/cms_change_list.html:110
-#: templates/admin/page_change_list.html:65
-msgid "Filter"
-msgstr "Filter"
-
-#: templates/admin/index.html:18 templates/admin/page_index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Models available in the %(name)s application."
-
-#: templates/admin/index.html:19 templates/admin/page_app_index.html:10
-#: templates/admin/page_index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: templates/admin/index.html:29 templates/admin/page_change_form.html:20
-#: templates/admin/page_index.html:29
-msgid "Add"
-msgstr "Add"
-
-#: templates/admin/index.html:35 templates/admin/page_index.html:35
-msgid "Change"
-msgstr "changed by"
-
-#: templates/admin/index.html:64 templates/admin/page_index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "You don't have permission to edit anything."
-
-#: templates/admin/index.html:72 templates/admin/page_index.html:53
-msgid "Recent Actions"
-msgstr "Recent Actions"
-
-#: templates/admin/index.html:73 templates/admin/page_index.html:54
-msgid "My Actions"
-msgstr "My Actions"
-
-#: templates/admin/index.html:77 templates/admin/page_index.html:58
-msgid "None available"
-msgstr "None available"
-
-#: templates/admin/index.html:91 templates/admin/page_index.html:72
-msgid "Unknown content"
-msgstr "Unknown content"
-
-#: templates/admin/page_base.html:20 templates/admin/page_index.html:11
-msgid "Pages"
-msgstr "Pages"
-
-#: templates/admin/page_base_site.html:7
-msgid "Django administration"
-msgstr "Django administration"
-
-#: templates/admin/page_login.html:8
-msgid "Connexion"
-msgstr "Login"
-
-#: templates/admin/page_login.html:20
-msgid "Username:"
-msgstr "Username:"
-
-#: templates/admin/page_login.html:24
-msgid "Password:"
-msgstr "Password:"
-
-#: templates/admin/page_login.html:29
-#: user/templates/registration/login.html:29
-msgid "Create an account"
-msgstr "Create an account"
-
-#: templates/admin/page_login.html:30
-#: user/templates/registration/login.html:30
-msgid "Forget password?"
-msgstr "Forget password?"
-
-#: templates/admin/page_login.html:32
-#: user/templates/iriuser/user/login_form.html:37
-#: user/templates/iriuser/user/login_form.html:45
-#: user/templates/registration/login.html:14
-#: user/templates/registration/password_reset_complete.html:14
-msgid "Log in"
-msgstr "Log in"
-
-#: templates/cms/admin/cms/page/change_form.html:11
-msgid "Documentation"
-msgstr "Documentation"
-
-#: templates/cms/admin/cms/page/change_form.html:11
-msgid "Change password"
-msgstr "Change password"
-
-#: templates/cms/admin/cms/page/change_form.html:11
-#: user/templates/iriuser/user/login_form.html:34
-msgid "Log out"
-msgstr "Log out"
-
-#: templates/cms/admin/cms/page/change_form.html:42
-msgid "Ordering"
-msgstr "Ordering"
-
-#: templates/cms/admin/cms/page/change_form.html:45
-msgid "Order:"
-msgstr "Order:"
-
-#: user/admin.py:15
-msgid "User details"
-msgstr "User details"
-
-#: user/admin.py:16
-msgid "Groups"
-msgstr "Groups"
-
-#: user/admin.py:17
-msgid "Permissions"
-msgstr "Permissions"
-
-#: user/admin.py:27 user/templates/iriuser/user/login_form.html:61
-msgid "Password"
-msgstr "Password"
-
-#: user/forms.py:31
-msgid "New password"
-msgstr "New password"
-
-#: user/forms.py:33
-msgid "New password confirmation"
-msgstr "New password confirmation"
-
-#: user/forms.py:78 user/forms.py:79
-msgid "E-mail"
-msgstr "E-mail"
-
-#: user/forms.py:90
-msgid "The two emails didn't match."
-msgstr "The two emails didn't match."
-
-#: user/views.py:45 user/templates/registration/login.html:17
-msgid "Sorry, that's not a valid username or password."
-msgstr "Sorry, that's not a valid username or password."
-
-#: user/templates/iriuser/user/change_email.html:6
-#: user/templates/iriuser/user/change_email_done.html:6
-#: user/templates/iriuser/user/login_form.html:32
-#: user/templates/registration/password_change_done.html:7
-#: user/templates/registration/password_change_form.html:13
-msgid "Profiles"
-msgstr "Profiles"
-
-#: user/templates/iriuser/user/change_email.html:7
-#: user/templates/iriuser/user/change_email.html:10
-msgid "Modification de l'adresse émail"
-msgstr "E-mail change"
-
-#: user/templates/iriuser/user/change_email.html:26
-msgid ""
-"Please enter your new e-mail twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Please enter your new e-mail twice so we can verify you typed it in "
-"correctly."
-
-#: user/templates/iriuser/user/change_email.html:32
-msgid "email"
-msgstr "email"
-
-#: user/templates/iriuser/user/change_email.html:41
-msgid "Confirmation de l'adresse émail"
-msgstr "E-mail confirmation"
-
-#: user/templates/iriuser/user/change_email.html:48
-msgid "change my e-mail"
-msgstr "Change my e-mail"
-
-#: user/templates/iriuser/user/change_email_done.html:7
-#: user/templates/iriuser/user/change_email_done.html:10
-msgid "email change"
-msgstr "email change"
-
-#: user/templates/iriuser/user/change_email_done.html:12
-msgid "email changed"
-msgstr "changed by"
-
-#: user/templates/iriuser/user/change_email_done.html:13
-msgid "back to profile"
-msgstr "back to profile"
-
-#: user/templates/iriuser/user/home.html:9
-msgid "Se connecter"
-msgstr "Login"
-
-#: user/templates/iriuser/user/home.html:10
-msgid "Créer un compte"
-msgstr "Create an account"
-
-#: user/templates/iriuser/user/home.html:11
-msgid "récupérer mot de passe"
-msgstr "Forget password?"
-
-#: user/templates/iriuser/user/login_form.html:50
-msgid "create account"
-msgstr "create account"
-
-#: user/templates/iriuser/user/login_form.html:54
-msgid "Pseudo"
-msgstr "Username"
-
-#: user/templates/iriuser/user/login_form.html:57
-#: user/templates/iriuser/user/login_form.html:64
-msgid "this field is compulsory"
-msgstr "this field is compulsory"
-
-#: user/templates/iriuser/user/login_form.html:68
-msgid "reset password"
-msgstr "reset password"
-
-#: user/templates/iriuser/user/login_form.html:71
-msgid "Connection"
-msgstr "Login"
-
-#: user/templates/iriuser/user/profile.html:6
-#: user/templates/registration/password_change_form.html:14
-#: user/templates/registration/password_change_form.html:17
-msgid "Password change"
-msgstr "Password change"
-
-#: user/templates/iriuser/user/profile.html:7
-msgid "Mail change"
-msgstr "Mail change"
-
-#: user/templates/iriuser/user/space.html:13
-msgid "Page"
-msgstr "Pages"
-
-#: user/templates/iriuser/user/space.html:16
-msgid "Projets Lignes de temps"
-msgstr "Lignes de temps projects"
-
-#: user/templates/registration/activate.html:6
-#: user/templates/registration/activate.html:9
-msgid "Activate account"
-msgstr "Activate account"
-
-#: user/templates/registration/activate.html:12
-msgid "You have activated your account"
-msgstr "You have activated your account"
-
-#: user/templates/registration/activate.html:13
-msgid "Go back to login page"
-msgstr "Go back to login page"
-
-#: user/templates/registration/activation_complete.html:4
-#: user/templates/registration/registration_complete.html:8
-msgid "Sign up successfully"
-msgstr "Sign up successfully"
-
-#: user/templates/registration/activation_complete.html:6
-msgid "activation completed"
-msgstr "activation completed"
-
-#: user/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Thanks for spending some quality time with the Web site today."
-
-#: user/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Log in again"
-
-#: user/templates/registration/login.html:25
-msgid "login"
-msgstr "login"
-
-#: user/templates/registration/password_change_done.html:3
-#: user/templates/registration/password_change_done.html:11
-msgid "password change successful"
-msgstr "password change successful"
-
-#: user/templates/registration/password_change_done.html:8
-msgid "password change"
-msgstr "password change"
-
-#: user/templates/registration/password_change_done.html:14
-msgid "Your password has been changed."
-msgstr "Your password has been changed."
-
-#: user/templates/registration/password_change_done.html:15
-msgid "Go back to profiles"
-msgstr "Go back to profiles"
-
-#: user/templates/registration/password_change_form.html:20
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-
-#: user/templates/registration/password_change_form.html:26
-msgid "Old password:"
-msgstr "Old password:"
-
-#: user/templates/registration/password_change_form.html:32
-#: user/templates/registration/password_reset_confirm.html:19
-msgid "New password:"
-msgstr "New password:"
-
-#: user/templates/registration/password_change_form.html:38
-#: user/templates/registration/password_reset_confirm.html:21
-msgid "Confirm password:"
-msgstr "Confirm password:"
-
-#: user/templates/registration/password_change_form.html:44
-#: user/templates/registration/password_reset_confirm.html:22
-msgid "Change my password"
-msgstr "Change my password"
-
-#: user/templates/registration/password_reset_complete.html:6
-#: user/templates/registration/password_reset_confirm.html:6
-#: user/templates/registration/password_reset_confirm.html:9
-#: user/templates/registration/password_reset_done.html:6
-#: user/templates/registration/password_reset_form.html:13
-#: user/templates/registration/password_reset_form.html:15
-#: user/templates/registration/password_reset_form.html:18
-msgid "Password reset"
-msgstr "Password reset"
-
-#: user/templates/registration/password_reset_complete.html:9
-msgid "Password reset complete"
-msgstr "Password reset complete"
-
-#: user/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Your password has been set. You may go ahead and log in now."
-
-#: user/templates/registration/password_reset_confirm.html:15
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-
-#: user/templates/registration/password_reset_confirm.html:27
-msgid "Password reset unsuccessful"
-msgstr "Password reset unsuccessful"
-
-#: user/templates/registration/password_reset_confirm.html:29
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-
-#: user/templates/registration/password_reset_done.html:8
-msgid "Password reset successful"
-msgstr "Password reset successful"
-
-#: user/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-
-#: user/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "You're receiving this e-mail because you requested a password reset"
-
-#: user/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "for your user account at %(site_name)s"
-
-#: user/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Please go to the following page and choose a new password:"
-
-#: user/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Your username, in case you've forgotten:"
-
-#: user/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Thanks for using our site!"
-
-#: user/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "The %(site_name)s team"
-
-#: user/templates/registration/password_reset_form.html:22
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-
-#: user/templates/registration/password_reset_form.html:27
-msgid "Adresse émail"
-msgstr "E-mail"
-
-#: user/templates/registration/password_reset_form.html:32
-msgid "Reset my password"
-msgstr "Reset my password"
-
-#: user/templates/registration/registration_active.html:5
-#: user/templates/registration/registration_active.html:7
-msgid "Activate the account"
-msgstr "Activate the account"
-
-#: user/templates/registration/registration_active.html:9
-msgid ""
-"Vous avez bien activé votre compte, vous pouvez accedez à votre espace "
-"personnel."
-msgstr ""
-"Vous avez bien activé votre compte, vous pouvez accedez à votre espace "
-"personnel."
-
-#: user/templates/registration/registration_active.html:10
-msgid "retourner à la page de connexion"
-msgstr "go back to login page"
-
-#: user/templates/registration/registration_complete.html:6
-#: user/templates/registration/registration_form.html:11
-msgid "Sign up"
-msgstr "Sign up"
-
-#: user/templates/registration/registration_complete.html:10
-msgid ""
-"We've e-mailed you instructions for activate your account to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"We've e-mailed you instructions for activate your account to the e-mail "
-"address you submitted. You should be receiving it shortly."
-
-#~ msgid "Changement de l'adresse émail"
-#~ msgstr "E-mail change"
-
-#~ msgid "Mot de passe"
-#~ msgstr "Password"
-
-#~ msgid "Déconnexion"
-#~ msgstr "Logout"
Binary file web/ldt_utils/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/ldt_utils/locale/fr/LC_MESSAGES/django.po Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,619 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-09 08:48-0600\n"
-"PO-Revision-Date: 2010-03-09 15:52+0100\n"
-"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ldt/models.py:43
-msgid "created by"
-msgstr "créé par"
-
-#: ldt/models.py:44
-msgid "changed by"
-msgstr "modifié par"
-
-#: ldt/templates/admin/ldt/app_action.html:6
-#: templates/admin/cms_change_list.html:7
-#: templates/admin/page_app_index.html:8
-#: templates/admin/page_change_form.html:17
-#: templates/admin/page_change_list.html:25
-#: user/templates/registration/logged_out.html:4
-msgid "Home"
-msgstr "Accueil"
-
-#: ldt/templates/iriuser/ldt/copy_ldt.html:12
-msgid "Copy your project"
-msgstr "Copier votre projet"
-
-#: ldt/templates/iriuser/ldt/copy_ldt.html:15
-#: ldt/templates/iriuser/ldt/create_ldt.html:15
-msgid "Title"
-msgstr "Titre"
-
-#: ldt/templates/iriuser/ldt/copy_ldt.html:18
-msgid "Copy"
-msgstr "Copier"
-
-#: ldt/templates/iriuser/ldt/create_ldt.html:12
-msgid "Create your project"
-msgstr "Créer votre projet Lignes de Temps"
-
-#: ldt/templates/iriuser/ldt/create_ldt.html:18
-msgid "List of contents"
-msgstr "Liste de contenus"
-
-#: ldt/templates/iriuser/ldt/create_ldt.html:25
-msgid "Create"
-msgstr "Créer"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:50
-#: templates/admin/page_base.html:19
-#: user/templates/iriuser/user/login_form.html:33
-#: user/templates/iriuser/user/space.html:6
-#: user/templates/iriuser/user/space.html:9
-msgid "Space"
-msgstr "Esp. perso"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:51
-#: ldt/templates/iriuser/ldt/ldt_list.html:53
-msgid "Ldt Project"
-msgstr "Projet lignes de temps"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:57
-msgid "Create new project"
-msgstr "Créer un nouveau projet Ligne de Temps"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:59
-msgid "Project"
-msgstr "Projet"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:62
-msgid "title"
-msgstr "Titre"
-
-#: ldt/templates/iriuser/ldt/ldt_list.html:63
-msgid " published"
-msgstr "Publié"
-
-#: templates/admin/cms_change_form.html:30
-msgid "Approve page deletion"
-msgstr "Accepter l'effacement de la page"
-
-#: templates/admin/cms_change_form.html:36
-#, python-format
-msgid "(requires approvement at %(moderation_level)s level)"
-msgstr "(Demande l'approbation au niveau %(moderation_level)s)"
-
-#: templates/admin/cms_change_form.html:37
-msgid "(you can perform actions on this page directly)"
-msgstr "(Vous pouvez agir sur cette page directement)"
-
-#: templates/admin/cms_change_form.html:50
-msgid "Remove delete request"
-msgstr "Effacer la requête d'affacement"
-
-#: templates/admin/cms_change_form.html:52
-msgid "Approve delete"
-msgstr "Accepter l'effacement"
-
-#: templates/admin/cms_change_form.html:52
-msgid "Approve"
-msgstr "Accepter"
-
-#: templates/admin/cms_change_form.html:52
-#: templates/admin/cms_change_form.html:53
-msgid "draft"
-msgstr "brouillon"
-
-#: templates/admin/cms_change_form.html:53
-msgid "Preview"
-msgstr "Aperçu"
-
-#: templates/admin/cms_change_form.html:56
-#: templates/admin/page_change_form.html:27
-msgid "History"
-msgstr "Histoire"
-
-#: templates/admin/cms_change_form.html:57
-#: templates/admin/page_change_form.html:28
-msgid "View on site"
-msgstr "Voir sur le site"
-
-#: templates/admin/cms_change_form.html:87
-#: templates/admin/page_change_form.html:38
-#: templates/admin/page_change_list.html:54
-#: templates/cms/admin/cms/page/change_form.html:24
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Veuillez corriger l'erreur ci-dessous"
-msgstr[1] "Veuillez corriger les erreurs ci-dessous"
-
-#: templates/admin/cms_change_form.html:107
-msgid "All permissions"
-msgstr "Toutes le parmissions"
-
-#: templates/admin/cms_change_form.html:108
-#: templates/admin/cms_change_form.html:120
-msgid "Loading..."
-msgstr "Chargement..."
-
-#: templates/admin/cms_change_form.html:119
-msgid "Page states"
-msgstr "Etat de la page"
-
-#: templates/admin/cms_change_form.html:142
-#, python-format
-msgid "This page must be moderated at level %(moderation_level)s, post a message for moderator."
-msgstr "Le niveau nécessaire pour modérer cette page est le niveau %(moderation_level)s, laisser un message pour le modérateur"
-
-#: templates/admin/cms_change_form.html:144
-msgid "Request approvemet"
-msgstr "Demander l'approbation"
-
-#: templates/admin/cms_change_form.html:234
-#: user/templates/registration/registration_form.html:16
-msgid "Save"
-msgstr "Enregistrer"
-
-#: templates/admin/cms_change_form.html:235
-msgid "Save and continue editing"
-msgstr "Sauver et continuer l'édition"
-
-#: templates/admin/cms_change_list.html:51
-msgid "Successfully moved"
-msgstr "Déplacement réussi"
-
-#: templates/admin/cms_change_list.html:76
-#, python-format
-msgid "Recover deleted %(name)s"
-msgstr "Récupérer %(name)s effacé"
-
-#: templates/admin/cms_change_list.html:79
-#: templates/admin/page_change_list.html:46
-#, python-format
-msgid "Add %(name)s"
-msgstr "Ajouter %(name)s"
-
-#: templates/admin/cms_change_list.html:91
-msgid "Pages on:"
-msgstr "Pages sur:"
-
-#: templates/admin/cms_change_list.html:108
-msgid "on"
-msgstr "on"
-
-#: templates/admin/cms_change_list.html:108
-msgid "off"
-msgstr "off"
-
-#: templates/admin/cms_change_list.html:110
-#: templates/admin/page_change_list.html:65
-msgid "Filter"
-msgstr "Filtre"
-
-#: templates/admin/index.html:18
-#: templates/admin/page_index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Le modèle disponible dans l'application %(name)s."
-
-#: templates/admin/index.html:19
-#: templates/admin/page_app_index.html:10
-#: templates/admin/page_index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: templates/admin/index.html:29
-#: templates/admin/page_change_form.html:20
-#: templates/admin/page_index.html:29
-msgid "Add"
-msgstr "Ajouter"
-
-#: templates/admin/index.html:35
-#: templates/admin/page_index.html:35
-msgid "Change"
-msgstr "modifié par"
-
-#: templates/admin/index.html:64
-#: templates/admin/page_index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Vous n'aver pas l'autorisation d'éditer quoi que ce soit."
-
-#: templates/admin/index.html:72
-#: templates/admin/page_index.html:53
-msgid "Recent Actions"
-msgstr "Actions récentes"
-
-#: templates/admin/index.html:73
-#: templates/admin/page_index.html:54
-msgid "My Actions"
-msgstr "Mes actions"
-
-#: templates/admin/index.html:77
-#: templates/admin/page_index.html:58
-msgid "None available"
-msgstr "Aucune disponible"
-
-#: templates/admin/index.html:91
-#: templates/admin/page_index.html:72
-msgid "Unknown content"
-msgstr "Contenu inconnu"
-
-#: templates/admin/page_base.html:20
-#: templates/admin/page_index.html:11
-msgid "Pages"
-msgstr "Pages"
-
-#: templates/admin/page_base_site.html:7
-msgid "Django administration"
-msgstr "Administration de Django"
-
-#: templates/admin/page_login.html:8
-msgid "Connexion"
-msgstr "Connexion"
-
-#: templates/admin/page_login.html:20
-msgid "Username:"
-msgstr "Nom de utilisateur :"
-
-#: templates/admin/page_login.html:24
-msgid "Password:"
-msgstr "Mot de passe :"
-
-#: templates/admin/page_login.html:29
-#: user/templates/registration/login.html:29
-msgid "Create an account"
-msgstr "Créer un compte"
-
-#: templates/admin/page_login.html:30
-#: user/templates/registration/login.html:30
-msgid "Forget password?"
-msgstr "Oubliez le mot de passe?"
-
-#: templates/admin/page_login.html:32
-#: user/templates/iriuser/user/login_form.html:37
-#: user/templates/iriuser/user/login_form.html:45
-#: user/templates/registration/login.html:14
-#: user/templates/registration/password_reset_complete.html:14
-msgid "Log in"
-msgstr "Connexion"
-
-#: templates/cms/admin/cms/page/change_form.html:11
-msgid "Documentation"
-msgstr "Documentation"
-
-#: templates/cms/admin/cms/page/change_form.html:11
-msgid "Change password"
-msgstr "Modifier le mot de passe"
-
-#: templates/cms/admin/cms/page/change_form.html:11
-#: user/templates/iriuser/user/login_form.html:34
-msgid "Log out"
-msgstr "Déconnexion"
-
-#: templates/cms/admin/cms/page/change_form.html:42
-msgid "Ordering"
-msgstr "Ordre"
-
-#: templates/cms/admin/cms/page/change_form.html:45
-msgid "Order:"
-msgstr "Ordre :"
-
-#: user/admin.py:15
-msgid "User details"
-msgstr "Détail utilisateur"
-
-#: user/admin.py:16
-msgid "Groups"
-msgstr "Groupes"
-
-#: user/admin.py:17
-msgid "Permissions"
-msgstr "Permissions"
-
-#: user/admin.py:27
-#: user/templates/iriuser/user/login_form.html:61
-msgid "Password"
-msgstr "Mot de passe"
-
-#: user/forms.py:31
-msgid "New password"
-msgstr "Nouveau mot de passe"
-
-#: user/forms.py:33
-msgid "New password confirmation"
-msgstr "Confirmation du nouveau mot de passe"
-
-#: user/forms.py:78
-#: user/forms.py:79
-msgid "E-mail"
-msgstr "E-mail"
-
-#: user/forms.py:90
-msgid "The two emails didn't match."
-msgstr "les deux emails ne correspondent pas"
-
-#: user/views.py:45
-#: user/templates/registration/login.html:17
-msgid "Sorry, that's not a valid username or password."
-msgstr "Saisissez un nom d'utilisateur et un mot de passe valide."
-
-#: user/templates/iriuser/user/change_email.html:6
-#: user/templates/iriuser/user/change_email_done.html:6
-#: user/templates/iriuser/user/login_form.html:32
-#: user/templates/registration/password_change_done.html:7
-#: user/templates/registration/password_change_form.html:13
-msgid "Profiles"
-msgstr "Mon profil"
-
-#: user/templates/iriuser/user/change_email.html:7
-#: user/templates/iriuser/user/change_email.html:10
-msgid "Modification de l'adresse émail"
-msgstr "Modification de l'adresse email"
-
-#: user/templates/iriuser/user/change_email.html:26
-msgid "Please enter your new e-mail twice so we can verify you typed it in correctly."
-msgstr "Saisissez deux fois votre nouvelle adresse émail afin de vérifier qu'il est correctment"
-
-#: user/templates/iriuser/user/change_email.html:32
-msgid "email"
-msgstr "adresse émail"
-
-#: user/templates/iriuser/user/change_email.html:41
-msgid "Confirmation de l'adresse émail"
-msgstr "Confirmation de l'adresse email"
-
-#: user/templates/iriuser/user/change_email.html:48
-msgid "change my e-mail"
-msgstr "Changer l'adresse émail"
-
-#: user/templates/iriuser/user/change_email_done.html:7
-#: user/templates/iriuser/user/change_email_done.html:10
-msgid "email change"
-msgstr "Modification de l'adresse émail"
-
-#: user/templates/iriuser/user/change_email_done.html:12
-msgid "email changed"
-msgstr "email modifié"
-
-#: user/templates/iriuser/user/change_email_done.html:13
-msgid "back to profile"
-msgstr "Retourner à mon profil"
-
-#: user/templates/iriuser/user/home.html:9
-msgid "Se connecter"
-msgstr "Se connecter"
-
-#: user/templates/iriuser/user/home.html:10
-msgid "Créer un compte"
-msgstr "Créere un compte"
-
-#: user/templates/iriuser/user/home.html:11
-msgid "récupérer mot de passe"
-msgstr "Récupérer le mot de passe"
-
-#: user/templates/iriuser/user/login_form.html:50
-msgid "create account"
-msgstr "Créer un compte"
-
-#: user/templates/iriuser/user/login_form.html:54
-msgid "Pseudo"
-msgstr "Pseudo"
-
-#: user/templates/iriuser/user/login_form.html:57
-#: user/templates/iriuser/user/login_form.html:64
-msgid "this field is compulsory"
-msgstr "Ce champs est obligatoire"
-
-#: user/templates/iriuser/user/login_form.html:68
-msgid "reset password"
-msgstr "Réinitialiser le mot de passe"
-
-#: user/templates/iriuser/user/login_form.html:71
-msgid "Connection"
-msgstr "Connexion"
-
-#: user/templates/iriuser/user/profile.html:6
-#: user/templates/registration/password_change_form.html:14
-#: user/templates/registration/password_change_form.html:17
-msgid "Password change"
-msgstr "Modification du mot de passe"
-
-#: user/templates/iriuser/user/profile.html:7
-msgid "Mail change"
-msgstr "Modification de l'adresse émail"
-
-#: user/templates/iriuser/user/space.html:13
-msgid "Page"
-msgstr "Pages"
-
-#: user/templates/iriuser/user/space.html:16
-msgid "Projets Lignes de temps"
-msgstr "Projets Lignes de temps"
-
-#: user/templates/registration/activate.html:6
-#: user/templates/registration/activate.html:9
-msgid "Activate account"
-msgstr "Activer le compte"
-
-#: user/templates/registration/activate.html:12
-msgid "You have activated your account"
-msgstr "Vous avez bien activé votre compte."
-
-#: user/templates/registration/activate.html:13
-msgid "Go back to login page"
-msgstr "Retourner à la page de connexion"
-
-#: user/templates/registration/activation_complete.html:4
-#: user/templates/registration/registration_complete.html:8
-msgid "Sign up successfully"
-msgstr "Création de compte avec succès"
-
-#: user/templates/registration/activation_complete.html:6
-msgid "activation completed"
-msgstr "Activation terminée"
-
-#: user/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Merci de votre visite."
-
-#: user/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Se reconnecter"
-
-#: user/templates/registration/login.html:25
-msgid "login"
-msgstr "Connexion"
-
-#: user/templates/registration/password_change_done.html:3
-#: user/templates/registration/password_change_done.html:11
-msgid "password change successful"
-msgstr "Changement de mot de passe réussi"
-
-#: user/templates/registration/password_change_done.html:8
-msgid "password change"
-msgstr "Changement de mot de passe"
-
-#: user/templates/registration/password_change_done.html:14
-msgid "Your password has been changed."
-msgstr "Votre mot de passe a été changeé."
-
-#: user/templates/registration/password_change_done.html:15
-msgid "Go back to profiles"
-msgstr "Retourner à la page de mon profil"
-
-#: user/templates/registration/password_change_form.html:20
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Par sécurité, veuillez enter votre ancien mot de passe puis le nouveau a deux reprise afin de savoir si vous l'avez taper correctement "
-
-#: user/templates/registration/password_change_form.html:26
-msgid "Old password:"
-msgstr "Ancien mot de passe :"
-
-#: user/templates/registration/password_change_form.html:32
-#: user/templates/registration/password_reset_confirm.html:19
-msgid "New password:"
-msgstr "Nouveau mot de passe :"
-
-#: user/templates/registration/password_change_form.html:38
-#: user/templates/registration/password_reset_confirm.html:21
-msgid "Confirm password:"
-msgstr "Confirmer le mot de passe :"
-
-#: user/templates/registration/password_change_form.html:44
-#: user/templates/registration/password_reset_confirm.html:22
-msgid "Change my password"
-msgstr "Modifier mon mot de passe"
-
-#: user/templates/registration/password_reset_complete.html:6
-#: user/templates/registration/password_reset_confirm.html:6
-#: user/templates/registration/password_reset_confirm.html:9
-#: user/templates/registration/password_reset_done.html:6
-#: user/templates/registration/password_reset_form.html:13
-#: user/templates/registration/password_reset_form.html:15
-#: user/templates/registration/password_reset_form.html:18
-msgid "Password reset"
-msgstr "réinitialiser e mot de passe"
-
-#: user/templates/registration/password_reset_complete.html:9
-msgid "Password reset complete"
-msgstr "Réinitialisation du mot de passe terminée"
-
-#: user/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Votre mot de passe a été fixé. vous pouvez vous connecter maintenant."
-
-#: user/templates/registration/password_reset_confirm.html:15
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "veuillez enter votre nouveau mot de pass deux fois afin de le vérifier."
-
-#: user/templates/registration/password_reset_confirm.html:27
-msgid "Password reset unsuccessful"
-msgstr "Reinitialisation du mot de pass a échoué"
-
-#: user/templates/registration/password_reset_confirm.html:29
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "Le lien de réinitialisation du mot de passe n'est pas valide, certainement car il a déjà été utilisé. veuiller demander une nouvelle réinitialisation."
-
-#: user/templates/registration/password_reset_done.html:8
-msgid "Password reset successful"
-msgstr "Réinitialisation du mot de passe réussie"
-
-#: user/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Nous vous avons envoyer les instructions de reinitialisation de votre mot de passe à l'adresse email que vous nous avez fournie. vous devriez les recevoir bientôt."
-
-#: user/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Vous recevez ce mail car vous avez damender la réinitialisation du mot de passe"
-
-#: user/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "Pour votre compte sur le site %(site_name)s"
-
-#: user/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "veuillez aller à la page suivante et choisissez un nouveau mot de passe :"
-
-#: user/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Pour rappel votre nom d'autilisateur :"
-
-#: user/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Merci de votre visite."
-
-#: user/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "L'équipe du site %(site_name)s"
-
-#: user/templates/registration/password_reset_form.html:22
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Mot de passe oublié ? Entrez votre adresse email ci-dessous pour recevoir les instructions pour en entrer un nouveau."
-
-#: user/templates/registration/password_reset_form.html:27
-msgid "Adresse émail"
-msgstr "Adresse email"
-
-#: user/templates/registration/password_reset_form.html:32
-msgid "Reset my password"
-msgstr "Reinitialiser mon mot de passe"
-
-#: user/templates/registration/registration_active.html:5
-#: user/templates/registration/registration_active.html:7
-msgid "Activate the account"
-msgstr "Activer le compte"
-
-#: user/templates/registration/registration_active.html:9
-msgid "Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel."
-msgstr "Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel."
-
-#: user/templates/registration/registration_active.html:10
-msgid "retourner à la page de connexion"
-msgstr "retourner à la page de connexion"
-
-#: user/templates/registration/registration_complete.html:6
-#: user/templates/registration/registration_form.html:11
-msgid "Sign up"
-msgstr "Création d'un compte"
-
-#: user/templates/registration/registration_complete.html:10
-msgid "We've e-mailed you instructions for activate your account to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Nous vous avons envoyé par courriel les instructions pour activer le compte à l'adresse que vous avez indiquée. Vous devriez le recevoir rapidement."
-
-#~ msgid "Password (Verification)"
-#~ msgstr "Mot de passe (Vérification)"
--- a/web/ldt_utils/management/__init__.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-from django.db.models import signals
-from django.conf import settings
-from django.contrib.auth.models import User, Group
-from ldt.core.models import Owner
-from ldt.user.models import ldt, IriGroup
-from django.contrib.contenttypes.models import ContentType
-# import logging
-from django.core.exceptions import ObjectDoesNotExist
-
-
-def post_save_ldt(instance, raw, created, **kwargs):
- signals.post_save.send(sender=User, instance=instance, raw=raw, created=created)
-
-signals.post_save.connect(post_save_ldt, ldt)
-
-def post_save_irigroup(instance, raw, created, **kwargs):
- signals.post_save.send(sender=Group, instance=instance, raw=raw, created=created)
-
-signals.post_save.connect(post_save_irigroup, IriGroup)
-
-def post_save_user(instance, raw, created, **kwargs):
- if created:
- try:
- owner = Owner.objects.get(user=instance)
- except ObjectDoesNotExist:
- owner=Owner(user=instance)
- owner.save()
-
-signals.post_save.connect(post_save_user, User)
-
-def post_save_group(instance, raw, created, **kwargs):
- if created:
- try:
- owner = Owner.objects.get(group=instance)
- except ObjectDoesNotExist:
- owner=Owner(group=instance)
- owner.save()
-
-signals.post_save.connect(post_save_group, Group)
-
-
-def test_cms():
- if 'cms' in settings.INSTALLED_APPS:
- return True
- else:
- return False
-
-def test_ldt():
- if 'ldt.ldt_utils' in settings.INSTALLED_APPS:
- return True
- else:
- return False
-
-def get_content_type_list() :
- content_type_list = []
- if test_cms():
- content_type = ContentType.objects.get(app_label='cms', model='page')
- content_type_list.append(content_type)
- content_type = ContentType.objects.get(app_label='snippet', model='snippet')
- content_type_list.append(content_type)
- # if test_ldt():
- # content_type = ContentType.objects.get(app_label='ldt', model='content')
- # content_type_list.append(content_type)
- return content_type_list
-
-
--- a/web/ldt_utils/media/css/ldt.css Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-#addldtform
-{
- font-size: 16px;
- background: #ffffff scroll repeat 0 0;
- border: 1px solid #666666;
- text-align: left;
- width: 700px;
-}
-
-#addldtform .title
-{
- color: #666666;
- font-weight:bold !important;
- font-size:16px;
- position: relative;
- padding:8px 12px;
-}
-
-#addldtform .title .closebutton
-{
- float: right;
- text-decoration: none;
- color:#666666;
-}
-
-
-#addldtform .form-row
-{
- border-bottom: 1px solid #eeeeee;
- font-size: 15px;
- padding: 8px 12px;
-}
-
-#addldtform label
-{
- float: left;
- padding: 3px 8px 0 0;
- width:8em;
- color: #333333 !important;
- font-weight: bold !important;
-}
-#addldtform input
-{
- font-size: 15px;
- font-weight: normal;
- padding:2px 3px;
- vertical-align: middle;
- margin : 2px 0;
- background-color: #ffffff;
- border: 1px solid #cccccc;
-}
-
-#addldtform .checkbox
-{
- padding: 6px 3px 3px 30px;
-}
-
-#addldtform .submit-row input
-{
- color:black;
- border-color:#DDDDDD #AAAAAA #AAAAAA #DDDDDD;
- background:#dddddd;
- padding: 3px;
- margin:0 10px 10px 10px;
-}
-/*
-#ldtlist{
- width:60%;
- overflow:auto;
- padding:1em;
-}
-*/
-#ldtlist table {
- border-collapse: collapse;
- border-color: #ccc;
- width:100%;
-}
-#ldtlist table caption{
- color:black;
- font-size:15px;
- font-weight:bold;
- padding:5px;
- text-align:left;
- text-transform:uppercase;
-}
-#ldtlist td, th {
- font-size: 11px;
- line-height: 13px;
- border-bottom: 1px solid #eee;
- vertical-align: top;
- padding: 5px;
- font-family: "Lucida Grande", Verdana, Arial, sans-serif;
-}
-
-
-#ldtlist table thead {
- color: #666;
- padding: 2px 5px;
- font-size: 13px;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
- border-left: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- white-space: nowrap;
- vertical-align: middle;
- font-weight: bold;
- text-align: center;
-}
-
-#ldtlist table tbody td {
- border-left: 1px solid #ddd;
- text-align: center;
-}
-
-#ldtlist table tbody td:first-child {
- border-left: 0;
- border-right: 1px solid #ddd;
- text-align: left;
-}
-
-#ldtlist table tfoot {
- color: #666;
-}
--- a/web/ldt_utils/media/css/style.css Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
- color:#0063DC;
- margin-right:4px;
- text-decoration:none;
-}
-
-#loginstate a:hover{
- text-decoration: underline;
-}
-
-#loginstate ul {
- margin:0;
- padding:0;
- float: left;
-}
-#loginstate li{
- display: inline;
- padding:0;
- margin:0;
-}
-#loginstate #user{
- color: #000000;
- font-weight: bold;
- margin-right:4px;
-}
-#loginstate ul .usertool a,
-#loginstate ul .usertool a:link,
-#loginstate ul .usertool a:visited {
- color:#0063DC;
- text-decoration:none;
-}
-
-#loginstate ul .usertool a:hover {
- color:#0063DC;
- text-decoration:underline;
-}
-
-.errorlist
-{
- color: red;
- font-size:12px
-}
-
-
-
-
-
--- a/web/ldt_utils/media/css/style_base.css Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-body
-{ font-family: Arial, Helvetica, sans serif;
- padding: 0px;
- margin: 0px;
- background-color: #f9f9f9;
- font-size: 12px;
-}
-
-a
-{
- color: #0045A3;
- text-decoration:none;
-}
-
-a:hover
-{
- color: #990000;
- text-decoration: underline;
-}
-
-p
-{
- font-size:12px;
- font-weight:normal;
- margin:0;
- padding:0;
-}
-
-th
-{
- text-align: left;
-}
-.button
-{
- margin: 3px 0;
- margin-left: 25px;
- background: #3366CC;
- padding: 0 6px;
- border-color: #6699CC #3366CC #3366CC #6699CC;
- border-style: solid;
- border-width: 1px 2px 2px 1px;
- font-size: 13px;
- font-style: normal;
- font-weight: bold;
- color: #ffffff;
-}
-
-.errorlist
-{
- color: red;
- font-size:12px
-}
-#header
-{
- background-color: #ffffcc;
- height: 50px;
-}
-
-#logo
-{
-}
-
-#usertool
-{
-}
-
-#loginstate
-{
- color:#0045A3;
-}
-
-#menu
-{
- width: 200px;
- vertical-align: top;
-}
-
-#container
-{
- width: 90%;
- margin: 10px auto;
- background-color: #fff;
- color: #000;
-}
-}
-#content
-{
-}
-
-#footer
-{
-}
-
-/* page login *//*
-#loginarea
-{
- margin: 0 auto;
- margin-top: 100px;
- overflow: hidden;
- width: 362px;
- border: 2px solid #CCCCCC;
-}
-
-#loginarea .title
-{
- font-size: 15px;
- color: #FFFFFF;
- background: #990000 scroll repeat left top;
- font-weight:bold;
- height:34px;
- position: relative;
- line-height: 34px;
- overflow: hidden;
- text-transform: uppercase;
-}
-
-#loginarea .title div
-{
- margin-left: 12px;
-}
-
-#loginarea .login-form
-{
- margin-top:20px;
- margin-left:25px;
-}
-
-#loginarea .login-form .inputbox
-{
- font-size: 13px;
- line-height:20px;
- text-align: left;
-}
-
-#loginarea .login-form label
-{
- font-size: 14px;
- font-weight: bold;
-}
-/*
-#loginarea .login-form .button
-{
- margin: 3px 0;
- margin-left: 25px;
- background: #3366CC;
- padding: 0 6px;
- border-color: #6699CC #3366CC #3366CC #6699CC;
- border-style: solid;
- border-width: 1px 2px 2px 1px;
- font-size: 13px;
- font-style: normal;
- font-weight: bold;
- color: #ffffff;
-}
-
-#loginarea a
-{
- font-size: 12px;
- background:url("norm_left.gif") no-repeat left top;
- padding:5px 15px;
- margin: 5px;
-}
-
-#nav {
- float:left;
- width:100%;
- font-size:93%;
- line-height:normal;
- background:#828282 repeat-x scroll 0 0;
- margin:0;
- padding:0;
- list-style:none;
-}
-
-#nav a:link,
-#nav a:visited {
- color:#fff;
- background:#828282 repeat-x scroll 0 0;
- padding:20px 40px 4px 10px;
- float:left;
- width:auto;
- border-right:1px solid #999999;
-}
-
-#nav li a:hover {
- color:#fff;
- background:#999999 none repeat scroll 0 0;
-}
-
-#space #nav-space a, #profile #nav-profile a
-{
- background:#666666 none repeat scroll 0 0;
-}
-
-#space #nav-space, #profile #nav-profile
-{
- background:#666666 none repeat scroll 0 0;
- color:#FFFFFF;
-}
-*/
-
-
Binary file web/ldt_utils/media/img/loadingAnimation.gif has changed
--- a/web/ldt_utils/media/js/jquery.DOMWindow.js Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,372 +0,0 @@
-(function($){
-
- //closeDOMWindow
- $.fn.closeDOMWindow = function(settings){
-
- if(!settings){settings={};}
-
- var run = function(passingThis){
-
- if(settings.anchoredClassName){
- var $anchorClassName = $('.'+settings.anchoredClassName);
- $anchorClassName.fadeOut('fast',function(){
- if($.fn.draggable){
- $anchorClassName.draggable('destory').trigger("unload").remove();
- }else{
- $anchorClassName.trigger("unload").remove();
- }
- });
- if(settings.functionCallOnClose){settings.functionCallAfterClose();}
- }else{
- var $DOMWindowOverlay = $('#DOMWindowOverlay');
- var $DOMWindow = $('#DOMWindow');
- $DOMWindowOverlay.fadeOut('fast',function(){
- $DOMWindowOverlay.trigger('unload').unbind().remove();
- });
- $DOMWindow.fadeOut('fast',function(){
- if($.fn.draggable){
- $DOMWindow.draggable("destroy").trigger("unload").remove();
- }else{
- $DOMWindow.trigger("unload").remove();
- }
- });
-
- $(window).unbind('scroll.DOMWindow');
- $(window).unbind('resize.DOMWindow');
-
- if($.fn.openDOMWindow.isIE6){$('#DOMWindowIE6FixIframe').remove();}
- if(settings.functionCallOnClose){settings.functionCallAfterClose();}
- }
- };
-
- if(settings.eventType){//if used with $().
- return this.each(function(index){
- $(this).bind(settings.eventType, function(){
- run(this);
- return false;
- });
- });
- }else{//else called as $.function
- run();
- }
-
- };
-
- //allow for public call, pass settings
- $.closeDOMWindow = function(s){$.fn.closeDOMWindow(s);};
-
- //openDOMWindow
- $.fn.openDOMWindow = function(instanceSettings){
-
- var shortcut = $.fn.openDOMWindow;
-
- //default settings combined with callerSettings////////////////////////////////////////////////////////////////////////
-
- shortcut.defaultsSettings = {
- anchoredClassName:'',
- anchoredSelector:'',
- borderColor:'#ccc',
- borderSize:'4',
- draggable:0,
- eventType:null, //click, blur, change, dblclick, error, focus, load, mousedown, mouseout, mouseup etc...
- fixedWindowY:100,
- functionCallOnOpen:null,
- functionCallOnClose:null,
- height:500,
- loader:0,
- loaderHeight:0,
- loaderImagePath:'',
- loaderWidth:0,
- modal:0,
- overlay:1,
- overlayColor:'#000',
- overlayOpacity:'85',
- positionLeft:0,
- positionTop:0,
- positionType:'centered', // centered, anchored, absolute, fixed
- width:500,
- windowBGColor:'#fff',
- windowBGImage:null, // http path
- windowHTTPType:'get',
- windowPadding:10,
- windowSource:'inline', //inline, ajax, iframe
- windowSourceID:'',
- windowSourceURL:'',
- windowSourceAttrURL:'href',
- windowOverflow : 'auto',
- ajaxParameters : {}
- };
-
- var settings = $.extend({}, $.fn.openDOMWindow.defaultsSettings , instanceSettings || {});
-
- //Public functions
-
- shortcut.viewPortHeight = function(){ return self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;};
- shortcut.viewPortWidth = function(){ return self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;};
- shortcut.scrollOffsetHeight = function(){ return self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;};
- shortcut.scrollOffsetWidth = function(){ return self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;};
- shortcut.isIE6 = typeof document.body.style.maxHeight === "undefined";
-
- //Private Functions/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- var sizeOverlay = function(){
- var $DOMWindowOverlay = $('#DOMWindowOverlay');
- if(shortcut.isIE6){//if IE 6
- var overlayViewportHeight = document.documentElement.offsetHeight + document.documentElement.scrollTop - 4;
- var overlayViewportWidth = document.documentElement.offsetWidth - 21;
- $DOMWindowOverlay.css({'height':overlayViewportHeight +'px','width':overlayViewportWidth+'px'});
- }else{//else Firefox, safari, opera, IE 7+
- $DOMWindowOverlay.css({'height':'100%','width':'100%','position':'fixed'});
- }
- };
-
- var sizeIE6Iframe = function(){
- var overlayViewportHeight = document.documentElement.offsetHeight + document.documentElement.scrollTop - 4;
- var overlayViewportWidth = document.documentElement.offsetWidth - 21;
- $('#DOMWindowIE6FixIframe').css({'height':overlayViewportHeight +'px','width':overlayViewportWidth+'px'});
- };
-
- var centerDOMWindow = function() {
- var $DOMWindow = $('#DOMWindow');
- if(settings.height + 50 > shortcut.viewPortHeight()){//added 50 to be safe
- $DOMWindow.css('left',Math.round(shortcut.viewPortWidth()/2) + shortcut.scrollOffsetWidth() - Math.round(($DOMWindow.outerWidth())/2));
- }else{
- $DOMWindow.css('left',Math.round(shortcut.viewPortWidth()/2) + shortcut.scrollOffsetWidth() - Math.round(($DOMWindow.outerWidth())/2));
- $DOMWindow.css('top',Math.round(shortcut.viewPortHeight()/2) + shortcut.scrollOffsetHeight() - Math.round(($DOMWindow.outerHeight())/2));
- }
- };
-
- var centerLoader = function() {
- var $DOMWindowLoader = $('#DOMWindowLoader');
- if(shortcut.isIE6){//if IE 6
- $DOMWindowLoader.css({'left':Math.round(shortcut.viewPortWidth()/2) + shortcut.scrollOffsetWidth() - Math.round(($DOMWindowLoader.innerWidth())/2),'position':'absolute'});
- $DOMWindowLoader.css({'top':Math.round(shortcut.viewPortHeight()/2) + shortcut.scrollOffsetHeight() - Math.round(($DOMWindowLoader.innerHeight())/2),'position':'absolute'});
- }else{
- $DOMWindowLoader.css({'left':'50%','top':'50%','position':'fixed'});
- }
-
- };
-
- var fixedDOMWindow = function(){
- var $DOMWindow = $('#DOMWindow');
- $DOMWindow.css('left', settings.positionLeft + shortcut.scrollOffsetWidth());
- $DOMWindow.css('top', + settings.positionTop + shortcut.scrollOffsetHeight());
- };
-
- var showDOMWindow = function(instance){
- if(arguments[0]){
- $('.'+instance+' #DOMWindowLoader').remove();
- $('.'+instance+' #DOMWindowContent').fadeIn('fast',function(){if(settings.functionCallOnOpen){settings.functionCallOnOpen();}});
- $('.'+instance+ '.closeDOMWindow').click(function(){
- $.closeDOMWindow();
- return false;
- });
- }else{
- $('#DOMWindowLoader').remove();
- $('#DOMWindow').fadeIn('fast',function(){if(settings.functionCallOnOpen){settings.functionCallOnOpen();}});
- $('#DOMWindow .closeDOMWindow').click(function(){
- $.closeDOMWindow();
- return false;
- });
- }
-
- };
-
- var urlQueryToObject = function(s, q){
- var query = typeof(q) != 'undefined' ? q : {};
- s.replace(/b([^&=]*)=([^&=]*)b/g, function (m, a, d) {
- if (typeof query[a] != 'undefined') {
- query[a] += ',' + d;
- } else {
- query[a] = d;
- }
- });
- return query;
- };
-
- //Run Routine ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
- var run = function(passingThis){
-
- //get values from element clicked, or assume its passed as an option
- settings.windowSourceID = $(passingThis).attr('href') || settings.windowSourceID;
- settings.windowSourceURL = $(passingThis).attr(settings.windowSourceAttrURL) || settings.windowSourceURL;
- settings.windowBGImage = settings.windowBGImage ? 'background-image:url('+settings.windowBGImage+')' : '';
- var urlOnly, urlQueryObject;
-
- if(settings.positionType == 'anchored'){//anchored DOM window
-
- var anchoredPositions = $(settings.anchoredSelector).position();
- var anchoredPositionX = anchoredPositions.left + settings.positionLeft;
- var anchoredPositionY = anchoredPositions.top + settings.positionTop;
-
- $('body').append('<div class="'+settings.anchoredClassName+'" style="'+settings.windowBGImage+';background-repeat:no-repeat;padding:'+settings.windowPadding+'px;overflow:'+settings.windowOverflow+';position:absolute;top:'+anchoredPositionY+'px;left:'+anchoredPositionX+'px;height:'+settings.height+'px;width:'+settings.width+'px;background-color:'+settings.windowBGColor+';border:'+settings.borderSize+'px solid '+settings.borderColor+';z-index:10001"><div id="DOMWindowContent" style="display:none"></div></div>');
- //loader
- if(settings.loader && settings.loaderImagePath !== ''){
- $('.'+settings.anchoredClassName).append('<div id="DOMWindowLoader" style="width:'+settings.loaderWidth+'px;height:'+settings.loaderHeight+'px;"><img src="'+settings.loaderImagePath+'" /></div>');
-
- }
-
- if($.fn.draggable){
- if(settings.draggable){$('.' + settings.anchoredClassName).draggable({cursor:'move'});}
- }
-
- switch(settings.windowSource){
- case 'inline'://////////////////////////////// inline //////////////////////////////////////////
- $('.' + settings.anchoredClassName+" #DOMWindowContent").append($(settings.windowSourceID).children());
- $('.' + settings.anchoredClassName).unload(function(){// move elements back when you're finished
- $('.' + settings.windowSourceID).append( $('.' + settings.anchoredClassName+" #DOMWindowContent").children());
- });
- showDOMWindow(settings.anchoredClassName);
- break;
- case 'iframe'://////////////////////////////// iframe //////////////////////////////////////////
- $('.' + settings.anchoredClassName+" #DOMWindowContent").append('<iframe frameborder="0" hspace="0" wspace="0" src="'+settings.windowSourceURL+'" name="DOMWindowIframe'+Math.round(Math.random()*1000)+'" style="width:100%;height:100%;border:none;background-color:#fff;overflow:'+settings.windowOverflow+';" class="'+settings.anchoredClassName+'Iframe" ></iframe>');
- $('.'+settings.anchoredClassName+'Iframe').load(showDOMWindow(settings.anchoredClassName));
- break;
- case 'ajax'://////////////////////////////// ajax //////////////////////////////////////////
- if(settings.windowHTTPType == 'post'){
-
- if(settings.windowSourceURL.indexOf("?") !== -1){//has a query string
- urlOnly = settings.windowSourceURL.substr(0, settings.windowSourceURL.indexOf("?"));
- urlQueryObject = urlQueryToObject(settings.windowSourceURL, settings.ajaxParameters);
- }else{
- urlOnly = settings.windowSourceURL;
- urlQueryObject = settings.ajaxParameters;
- }
- $('.' + settings.anchoredClassName+" #DOMWindowContent").load(urlOnly,urlQueryObject,function(){
- showDOMWindow(settings.anchoredClassName);
- });
- }else{
- if(settings.windowSourceURL.indexOf("?") == -1){ //no query string, so add one
- settings.windowSourceURL += '?';
- }
- $('.' + settings.anchoredClassName+" #DOMWindowContent").load(
- settings.windowSourceURL + '&random=' + (new Date().getTime()),function(){
- showDOMWindow(settings.anchoredClassName);
- });
- }
- break;
- }
-
- }else{//centered, fixed, absolute DOM window
-
- //overlay & modal
- if(settings.overlay){
- $('body').append('<div id="DOMWindowOverlay" style="z-index:10000;display:none;position:absolute;top:0;left:0;background-color:'+settings.overlayColor+';filter:alpha(opacity='+settings.overlayOpacity+');-moz-opacity: 0.'+settings.overlayOpacity+';opacity: 0.'+settings.overlayOpacity+';"></div>');
- if(shortcut.isIE6){//if IE 6
- $('body').append('<iframe id="DOMWindowIE6FixIframe" src="blank.html" style="width:100%;height:100%;z-index:9999;position:absolute;top:0;left:0;filter:alpha(opacity=0);"></iframe>');
- sizeIE6Iframe();
- }
- sizeOverlay();
- var $DOMWindowOverlay = $('#DOMWindowOverlay');
- $DOMWindowOverlay.fadeIn('fast');
- if(!settings.modal){$DOMWindowOverlay.click(function(){$.closeDOMWindow();});}
- }
-
- //loader
- if(settings.loader && settings.loaderImagePath !== ''){
- $('body').append('<div id="DOMWindowLoader" style="z-index:10002;width:'+settings.loaderWidth+'px;height:'+settings.loaderHeight+'px;"><img src="'+settings.loaderImagePath+'" /></div>');
- centerLoader();
- }
-
- //add DOMwindow
- $('body').append('<div id="DOMWindow" style="background-repeat:no-repeat;'+settings.windowBGImage+';overflow:'+settings.windowOverflow+';padding:'+settings.windowPadding+'px;display:none;height:'+settings.height+'px;width:'+settings.width+'px;background-color:'+settings.windowBGColor+';border:'+settings.borderSize+'px solid '+settings.borderColor+'; position:absolute;z-index:10001"></div>');
-
- var $DOMWindow = $('#DOMWindow');
- //centered, absolute, or fixed
- switch(settings.positionType){
- case 'centered':
- centerDOMWindow();
- if(settings.height + 50 > shortcut.viewPortHeight()){//added 50 to be safe
- $DOMWindow.css('top', (settings.fixedWindowY + shortcut.scrollOffsetHeight()) + 'px');
- }
- break;
- case 'absolute':
- $DOMWindow.css({'top':(settings.positionTop+shortcut.scrollOffsetHeight())+'px','left':(settings.positionLeft+shortcut.scrollOffsetWidth())+'px'});
- if($.fn.draggable){
- if(settings.draggable){$DOMWindow.draggable({cursor:'move'});}
- }
- break;
- case 'fixed':
- fixedDOMWindow();
- break;
- case 'anchoredSingleWindow':
- var anchoredPositions = $(settings.anchoredSelector).position();
- var anchoredPositionX = anchoredPositions.left + settings.positionLeft;
- var anchoredPositionY = anchoredPositions.top + settings.positionTop;
- $DOMWindow.css({'top':anchoredPositionY + 'px','left':anchoredPositionX+'px'});
-
- break;
- }
-
- $(window).bind('scroll.DOMWindow',function(){
- if(settings.overlay){sizeOverlay();}
- if(shortcut.isIE6){sizeIE6Iframe();}
- if(settings.positionType == 'centered'){centerDOMWindow();}
- if(settings.positionType == 'fixed'){fixedDOMWindow();}
- });
-
- $(window).bind('resize.DOMWindow',function(){
- if(shortcut.isIE6){sizeIE6Iframe();}
- if(settings.overlay){sizeOverlay();}
- if(settings.positionType == 'centered'){centerDOMWindow();}
- });
-
- switch(settings.windowSource){
- case 'inline'://////////////////////////////// inline //////////////////////////////////////////
- $DOMWindow.append($(settings.windowSourceID).children());
- $DOMWindow.unload(function(){// move elements back when you're finished
- $(settings.windowSourceID).append($DOMWindow.children());
- });
- showDOMWindow();
- break;
- case 'iframe'://////////////////////////////// iframe //////////////////////////////////////////
- var name = 'DOMWindowIframe'+Math.round(Math.random()*1000);
- $DOMWindow.append('<iframe frameborder="0" hspace="0" wspace="0" src="'+settings.windowSourceURL+'" name="'+name+'" style="width:100%;height:100%;border:none;background-color:#fff;overflow:'+settings.windowOverflow+';" id="DOMWindowIframe" ></iframe>');
- $('#DOMWindowIframe').load(showDOMWindow());
- break;
- case 'ajax'://////////////////////////////// ajax //////////////////////////////////////////
- if(settings.windowHTTPType == 'post'){
-
- if(settings.windowSourceURL.indexOf("?") !== -1){//has a query string
- urlOnly = settings.windowSourceURL.substr(0, settings.windowSourceURL.indexOf("?"));
- urlQueryObject = urlQueryToObject(settings.windowSourceURL, settings.ajaxParameters);
- }else{
- urlOnly = settings.windowSourceURL;
- urlQueryObject = settings.ajaxParameters;
- }
- $DOMWindow.load(urlOnly,urlQueryObject,function(){
- showDOMWindow();
- });
- }else{
- if(settings.windowSourceURL.indexOf("?") == -1){ //no query string, so add one
- settings.windowSourceURL += '?';
- }
- $DOMWindow.load(
- settings.windowSourceURL + '&random=' + (new Date().getTime()),function(){
- showDOMWindow();
- });
- }
- break;
- }
-
- }//end if anchored, or absolute, fixed, centered
-
- };//end run()
-
- if(settings.eventType){//if used with $().
- return this.each(function(index){
- $(this).bind(settings.eventType,function(){
- run(this);
- return false;
- });
- });
- }else{//else called as $.function
- run();
- }
-
- };//end function openDOMWindow
-
- //allow for public call, pass settings
- $.openDOMWindow = function(s){$.fn.openDOMWindow(s);};
-
-})(jQuery);
--- a/web/ldt_utils/media/js/jquery.js Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/*
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
--- a/web/ldt_utils/media/js/jquery.validate.js Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1131 +0,0 @@
-/*
- * jQuery validation plug-in 1.5.5
- *
- * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
- * http://docs.jquery.com/Plugins/Validation
- *
- * Copyright (c) 2006 - 2008 Jörn Zaefferer
- *
- * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-(function($) {
-
-$.extend($.fn, {
- // http://docs.jquery.com/Plugins/Validation/validate
- validate: function( options ) {
-
- // if nothing is selected, return nothing; can't chain anyway
- if (!this.length) {
- options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
- return;
- }
-
- // check if a validator for this form was already created
- var validator = $.data(this[0], 'validator');
- if ( validator ) {
- return validator;
- }
-
- validator = new $.validator( options, this[0] );
- $.data(this[0], 'validator', validator);
-
- if ( validator.settings.onsubmit ) {
-
- // allow suppresing validation by adding a cancel class to the submit button
- this.find("input, button").filter(".cancel").click(function() {
- validator.cancelSubmit = true;
- });
-
- // when a submitHandler is used, capture the submitting button
- if (validator.settings.submitHandler) {
- this.find("input, button").filter(":submit").click(function() {
- validator.submitButton = this;
- });
- }
-
- // validate the form on submit
- this.submit( function( event ) {
- if ( validator.settings.debug )
- // prevent form submit to be able to see console output
- event.preventDefault();
-
- function handle() {
- if ( validator.settings.submitHandler ) {
- if (validator.submitButton) {
- // insert a hidden input as a replacement for the missing submit button
- var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
- }
- validator.settings.submitHandler.call( validator, validator.currentForm );
- if (validator.submitButton) {
- // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
- hidden.remove();
- }
- return false;
- }
- return true;
- }
-
- // prevent submit for invalid forms or custom submit handlers
- if ( validator.cancelSubmit ) {
- validator.cancelSubmit = false;
- return handle();
- }
- if ( validator.form() ) {
- if ( validator.pendingRequest ) {
- validator.formSubmitted = true;
- return false;
- }
- return handle();
- } else {
- validator.focusInvalid();
- return false;
- }
- });
- }
-
- return validator;
- },
- // http://docs.jquery.com/Plugins/Validation/valid
- valid: function() {
- if ( $(this[0]).is('form')) {
- return this.validate().form();
- } else {
- var valid = true;
- var validator = $(this[0].form).validate();
- this.each(function() {
- valid &= validator.element(this);
- });
- return valid;
- }
- },
- // attributes: space seperated list of attributes to retrieve and remove
- removeAttrs: function(attributes) {
- var result = {},
- $element = this;
- $.each(attributes.split(/\s/), function(index, value) {
- result[value] = $element.attr(value);
- $element.removeAttr(value);
- });
- return result;
- },
- // http://docs.jquery.com/Plugins/Validation/rules
- rules: function(command, argument) {
- var element = this[0];
-
- if (command) {
- var settings = $.data(element.form, 'validator').settings;
- var staticRules = settings.rules;
- var existingRules = $.validator.staticRules(element);
- switch(command) {
- case "add":
- $.extend(existingRules, $.validator.normalizeRule(argument));
- staticRules[element.name] = existingRules;
- if (argument.messages)
- settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
- break;
- case "remove":
- if (!argument) {
- delete staticRules[element.name];
- return existingRules;
- }
- var filtered = {};
- $.each(argument.split(/\s/), function(index, method) {
- filtered[method] = existingRules[method];
- delete existingRules[method];
- });
- return filtered;
- }
- }
-
- var data = $.validator.normalizeRules(
- $.extend(
- {},
- $.validator.metadataRules(element),
- $.validator.classRules(element),
- $.validator.attributeRules(element),
- $.validator.staticRules(element)
- ), element);
-
- // make sure required is at front
- if (data.required) {
- var param = data.required;
- delete data.required;
- data = $.extend({required: param}, data);
- }
-
- return data;
- }
-});
-
-// Custom selectors
-$.extend($.expr[":"], {
- // http://docs.jquery.com/Plugins/Validation/blank
- blank: function(a) {return !$.trim(a.value);},
- // http://docs.jquery.com/Plugins/Validation/filled
- filled: function(a) {return !!$.trim(a.value);},
- // http://docs.jquery.com/Plugins/Validation/unchecked
- unchecked: function(a) {return !a.checked;}
-});
-
-// constructor for validator
-$.validator = function( options, form ) {
- this.settings = $.extend( {}, $.validator.defaults, options );
- this.currentForm = form;
- this.init();
-};
-
-$.validator.format = function(source, params) {
- if ( arguments.length == 1 )
- return function() {
- var args = $.makeArray(arguments);
- args.unshift(source);
- return $.validator.format.apply( this, args );
- };
- if ( arguments.length > 2 && params.constructor != Array ) {
- params = $.makeArray(arguments).slice(1);
- }
- if ( params.constructor != Array ) {
- params = [ params ];
- }
- $.each(params, function(i, n) {
- source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
- });
- return source;
-};
-
-$.extend($.validator, {
-
- defaults: {
- messages: {},
- groups: {},
- rules: {},
- errorClass: "error",
- validClass: "valid",
- errorElement: "label",
- focusInvalid: true,
- errorContainer: $( [] ),
- errorLabelContainer: $( [] ),
- onsubmit: true,
- ignore: [],
- ignoreTitle: false,
- onfocusin: function(element) {
- this.lastActive = element;
-
- // hide error label and remove error class on focus if enabled
- if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
- this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
- this.errorsFor(element).hide();
- }
- },
- onfocusout: function(element) {
- if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
- this.element(element);
- }
- },
- onkeyup: function(element) {
- if ( element.name in this.submitted || element == this.lastElement ) {
- this.element(element);
- }
- },
- onclick: function(element) {
- if ( element.name in this.submitted )
- this.element(element);
- },
- highlight: function( element, errorClass, validClass ) {
- $(element).addClass(errorClass).removeClass(validClass);
- },
- unhighlight: function( element, errorClass, validClass ) {
- $(element).removeClass(errorClass).addClass(validClass);
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
- setDefaults: function(settings) {
- $.extend( $.validator.defaults, settings );
- },
-
- messages: {
- required: "This field is required.",
- remote: "Please fix this field.",
- email: "Please enter a valid email address.",
- url: "Please enter a valid URL.",
- date: "Please enter a valid date.",
- dateISO: "Please enter a valid date (ISO).",
- dateDE: "Bitte geben Sie ein gültiges Datum ein.",
- number: "Please enter a valid number.",
- numberDE: "Bitte geben Sie eine Nummer ein.",
- digits: "Please enter only digits",
- creditcard: "Please enter a valid credit card number.",
- equalTo: "Please enter the same value again.",
- accept: "Please enter a value with a valid extension.",
- maxlength: $.validator.format("Please enter no more than {0} characters."),
- minlength: $.validator.format("Please enter at least {0} characters."),
- rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
- range: $.validator.format("Please enter a value between {0} and {1}."),
- max: $.validator.format("Please enter a value less than or equal to {0}."),
- min: $.validator.format("Please enter a value greater than or equal to {0}.")
- },
-
- autoCreateRanges: false,
-
- prototype: {
-
- init: function() {
- this.labelContainer = $(this.settings.errorLabelContainer);
- this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
- this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
- this.submitted = {};
- this.valueCache = {};
- this.pendingRequest = 0;
- this.pending = {};
- this.invalid = {};
- this.reset();
-
- var groups = (this.groups = {});
- $.each(this.settings.groups, function(key, value) {
- $.each(value.split(/\s/), function(index, name) {
- groups[name] = key;
- });
- });
- var rules = this.settings.rules;
- $.each(rules, function(key, value) {
- rules[key] = $.validator.normalizeRule(value);
- });
-
- function delegate(event) {
- var validator = $.data(this[0].form, "validator");
- validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
- }
- $(this.currentForm)
- .delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
- .delegate("click", ":radio, :checkbox", delegate);
-
- if (this.settings.invalidHandler)
- $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/form
- form: function() {
- this.checkForm();
- $.extend(this.submitted, this.errorMap);
- this.invalid = $.extend({}, this.errorMap);
- if (!this.valid())
- $(this.currentForm).triggerHandler("invalid-form", [this]);
- this.showErrors();
- return this.valid();
- },
-
- checkForm: function() {
- this.prepareForm();
- for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
- this.check( elements[i] );
- }
- return this.valid();
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/element
- element: function( element ) {
- element = this.clean( element );
- this.lastElement = element;
- this.prepareElement( element );
- this.currentElements = $(element);
- var result = this.check( element );
- if ( result ) {
- delete this.invalid[element.name];
- } else {
- this.invalid[element.name] = true;
- }
- if ( !this.numberOfInvalids() ) {
- // Hide error containers on last error
- this.toHide = this.toHide.add( this.containers );
- }
- this.showErrors();
- return result;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
- showErrors: function(errors) {
- if(errors) {
- // add items to error list and map
- $.extend( this.errorMap, errors );
- this.errorList = [];
- for ( var name in errors ) {
- this.errorList.push({
- message: errors[name],
- element: this.findByName(name)[0]
- });
- }
- // remove items from success list
- this.successList = $.grep( this.successList, function(element) {
- return !(element.name in errors);
- });
- }
- this.settings.showErrors
- ? this.settings.showErrors.call( this, this.errorMap, this.errorList )
- : this.defaultShowErrors();
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
- resetForm: function() {
- if ( $.fn.resetForm )
- $( this.currentForm ).resetForm();
- this.submitted = {};
- this.prepareForm();
- this.hideErrors();
- this.elements().removeClass( this.settings.errorClass );
- },
-
- numberOfInvalids: function() {
- return this.objectLength(this.invalid);
- },
-
- objectLength: function( obj ) {
- var count = 0;
- for ( var i in obj )
- count++;
- return count;
- },
-
- hideErrors: function() {
- this.addWrapper( this.toHide ).hide();
- },
-
- valid: function() {
- return this.size() == 0;
- },
-
- size: function() {
- return this.errorList.length;
- },
-
- focusInvalid: function() {
- if( this.settings.focusInvalid ) {
- try {
- $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
- } catch(e) {
- // ignore IE throwing errors when focusing hidden elements
- }
- }
- },
-
- findLastActive: function() {
- var lastActive = this.lastActive;
- return lastActive && $.grep(this.errorList, function(n) {
- return n.element.name == lastActive.name;
- }).length == 1 && lastActive;
- },
-
- elements: function() {
- var validator = this,
- rulesCache = {};
-
- // select all valid inputs inside the form (no submit or reset buttons)
- // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
- return $([]).add(this.currentForm.elements)
- .filter(":input")
- .not(":submit, :reset, :image, [disabled]")
- .not( this.settings.ignore )
- .filter(function() {
- !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
-
- // select only the first element for each name, and only those with rules specified
- if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
- return false;
-
- rulesCache[this.name] = true;
- return true;
- });
- },
-
- clean: function( selector ) {
- return $( selector )[0];
- },
-
- errors: function() {
- return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
- },
-
- reset: function() {
- this.successList = [];
- this.errorList = [];
- this.errorMap = {};
- this.toShow = $([]);
- this.toHide = $([]);
- this.formSubmitted = false;
- this.currentElements = $([]);
- },
-
- prepareForm: function() {
- this.reset();
- this.toHide = this.errors().add( this.containers );
- },
-
- prepareElement: function( element ) {
- this.reset();
- this.toHide = this.errorsFor(element);
- },
-
- check: function( element ) {
- element = this.clean( element );
-
- // if radio/checkbox, validate first element in group instead
- if (this.checkable(element)) {
- element = this.findByName( element.name )[0];
- }
-
- var rules = $(element).rules();
- var dependencyMismatch = false;
- for( method in rules ) {
- var rule = { method: method, parameters: rules[method] };
- try {
- var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
-
- // if a method indicates that the field is optional and therefore valid,
- // don't mark it as valid when there are no other rules
- if ( result == "dependency-mismatch" ) {
- dependencyMismatch = true;
- continue;
- }
- dependencyMismatch = false;
-
- if ( result == "pending" ) {
- this.toHide = this.toHide.not( this.errorsFor(element) );
- return;
- }
-
- if( !result ) {
- this.formatAndAdd( element, rule );
- return false;
- }
- } catch(e) {
- this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
- + ", check the '" + rule.method + "' method");
- throw e;
- }
- }
- if (dependencyMismatch)
- return;
- if ( this.objectLength(rules) )
- this.successList.push(element);
- return true;
- },
-
- // return the custom message for the given element and validation method
- // specified in the element's "messages" metadata
- customMetaMessage: function(element, method) {
- if (!$.metadata)
- return;
-
- var meta = this.settings.meta
- ? $(element).metadata()[this.settings.meta]
- : $(element).metadata();
-
- return meta && meta.messages && meta.messages[method];
- },
-
- // return the custom message for the given element name and validation method
- customMessage: function( name, method ) {
- var m = this.settings.messages[name];
- return m && (m.constructor == String
- ? m
- : m[method]);
- },
-
- // return the first defined argument, allowing empty strings
- findDefined: function() {
- for(var i = 0; i < arguments.length; i++) {
- if (arguments[i] !== undefined)
- return arguments[i];
- }
- return undefined;
- },
-
- defaultMessage: function( element, method) {
- return this.findDefined(
- this.customMessage( element.name, method ),
- this.customMetaMessage( element, method ),
- // title is never undefined, so handle empty string as undefined
- !this.settings.ignoreTitle && element.title || undefined,
- $.validator.messages[method],
- "<strong>Warning: No message defined for " + element.name + "</strong>"
- );
- },
-
- formatAndAdd: function( element, rule ) {
- var message = this.defaultMessage( element, rule.method );
- if ( typeof message == "function" )
- message = message.call(this, rule.parameters, element);
- this.errorList.push({
- message: message,
- element: element
- });
- this.errorMap[element.name] = message;
- this.submitted[element.name] = message;
- },
-
- addWrapper: function(toToggle) {
- if ( this.settings.wrapper )
- toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
- return toToggle;
- },
-
- defaultShowErrors: function() {
- for ( var i = 0; this.errorList[i]; i++ ) {
- var error = this.errorList[i];
- this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
- this.showLabel( error.element, error.message );
- }
- if( this.errorList.length ) {
- this.toShow = this.toShow.add( this.containers );
- }
- if (this.settings.success) {
- for ( var i = 0; this.successList[i]; i++ ) {
- this.showLabel( this.successList[i] );
- }
- }
- if (this.settings.unhighlight) {
- for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
- this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
- }
- }
- this.toHide = this.toHide.not( this.toShow );
- this.hideErrors();
- this.addWrapper( this.toShow ).show();
- },
-
- validElements: function() {
- return this.currentElements.not(this.invalidElements());
- },
-
- invalidElements: function() {
- return $(this.errorList).map(function() {
- return this.element;
- });
- },
-
- showLabel: function(element, message) {
- var label = this.errorsFor( element );
- if ( label.length ) {
- // refresh error/success class
- label.removeClass().addClass( this.settings.errorClass );
-
- // check if we have a generated label, replace the message then
- label.attr("generated") && label.html(message);
- } else {
- // create label
- label = $("<" + this.settings.errorElement + "/>")
- .attr({"for": this.idOrName(element), generated: true})
- .addClass(this.settings.errorClass)
- .html(message || "");
- if ( this.settings.wrapper ) {
- // make sure the element is visible, even in IE
- // actually showing the wrapped element is handled elsewhere
- label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
- }
- if ( !this.labelContainer.append(label).length )
- this.settings.errorPlacement
- ? this.settings.errorPlacement(label, $(element) )
- : label.insertAfter(element);
- }
- if ( !message && this.settings.success ) {
- label.text("");
- typeof this.settings.success == "string"
- ? label.addClass( this.settings.success )
- : this.settings.success( label );
- }
- this.toShow = this.toShow.add(label);
- },
-
- errorsFor: function(element) {
- return this.errors().filter("[for='" + this.idOrName(element) + "']");
- },
-
- idOrName: function(element) {
- return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
- },
-
- checkable: function( element ) {
- return /radio|checkbox/i.test(element.type);
- },
-
- findByName: function( name ) {
- // select by name and filter by form for performance over form.find("[name=...]")
- var form = this.currentForm;
- return $(document.getElementsByName(name)).map(function(index, element) {
- return element.form == form && element.name == name && element || null;
- });
- },
-
- getLength: function(value, element) {
- switch( element.nodeName.toLowerCase() ) {
- case 'select':
- return $("option:selected", element).length;
- case 'input':
- if( this.checkable( element) )
- return this.findByName(element.name).filter(':checked').length;
- }
- return value.length;
- },
-
- depend: function(param, element) {
- return this.dependTypes[typeof param]
- ? this.dependTypes[typeof param](param, element)
- : true;
- },
-
- dependTypes: {
- "boolean": function(param, element) {
- return param;
- },
- "string": function(param, element) {
- return !!$(param, element.form).length;
- },
- "function": function(param, element) {
- return param(element);
- }
- },
-
- optional: function(element) {
- return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
- },
-
- startRequest: function(element) {
- if (!this.pending[element.name]) {
- this.pendingRequest++;
- this.pending[element.name] = true;
- }
- },
-
- stopRequest: function(element, valid) {
- this.pendingRequest--;
- // sometimes synchronization fails, make sure pendingRequest is never < 0
- if (this.pendingRequest < 0)
- this.pendingRequest = 0;
- delete this.pending[element.name];
- if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
- $(this.currentForm).submit();
- } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
- $(this.currentForm).triggerHandler("invalid-form", [this]);
- }
- },
-
- previousValue: function(element) {
- return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
- old: null,
- valid: true,
- message: this.defaultMessage( element, "remote" )
- });
- }
-
- },
-
- classRuleSettings: {
- required: {required: true},
- email: {email: true},
- url: {url: true},
- date: {date: true},
- dateISO: {dateISO: true},
- dateDE: {dateDE: true},
- number: {number: true},
- numberDE: {numberDE: true},
- digits: {digits: true},
- creditcard: {creditcard: true}
- },
-
- addClassRules: function(className, rules) {
- className.constructor == String ?
- this.classRuleSettings[className] = rules :
- $.extend(this.classRuleSettings, className);
- },
-
- classRules: function(element) {
- var rules = {};
- var classes = $(element).attr('class');
- classes && $.each(classes.split(' '), function() {
- if (this in $.validator.classRuleSettings) {
- $.extend(rules, $.validator.classRuleSettings[this]);
- }
- });
- return rules;
- },
-
- attributeRules: function(element) {
- var rules = {};
- var $element = $(element);
-
- for (method in $.validator.methods) {
- var value = $element.attr(method);
- if (value) {
- rules[method] = value;
- }
- }
-
- // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
- if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
- delete rules.maxlength;
- }
-
- return rules;
- },
-
- metadataRules: function(element) {
- if (!$.metadata) return {};
-
- var meta = $.data(element.form, 'validator').settings.meta;
- return meta ?
- $(element).metadata()[meta] :
- $(element).metadata();
- },
-
- staticRules: function(element) {
- var rules = {};
- var validator = $.data(element.form, 'validator');
- if (validator.settings.rules) {
- rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
- }
- return rules;
- },
-
- normalizeRules: function(rules, element) {
- // handle dependency check
- $.each(rules, function(prop, val) {
- // ignore rule when param is explicitly false, eg. required:false
- if (val === false) {
- delete rules[prop];
- return;
- }
- if (val.param || val.depends) {
- var keepRule = true;
- switch (typeof val.depends) {
- case "string":
- keepRule = !!$(val.depends, element.form).length;
- break;
- case "function":
- keepRule = val.depends.call(element, element);
- break;
- }
- if (keepRule) {
- rules[prop] = val.param !== undefined ? val.param : true;
- } else {
- delete rules[prop];
- }
- }
- });
-
- // evaluate parameters
- $.each(rules, function(rule, parameter) {
- rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
- });
-
- // clean number parameters
- $.each(['minlength', 'maxlength', 'min', 'max'], function() {
- if (rules[this]) {
- rules[this] = Number(rules[this]);
- }
- });
- $.each(['rangelength', 'range'], function() {
- if (rules[this]) {
- rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
- }
- });
-
- if ($.validator.autoCreateRanges) {
- // auto-create ranges
- if (rules.min && rules.max) {
- rules.range = [rules.min, rules.max];
- delete rules.min;
- delete rules.max;
- }
- if (rules.minlength && rules.maxlength) {
- rules.rangelength = [rules.minlength, rules.maxlength];
- delete rules.minlength;
- delete rules.maxlength;
- }
- }
-
- // To support custom messages in metadata ignore rule methods titled "messages"
- if (rules.messages) {
- delete rules.messages
- }
-
- return rules;
- },
-
- // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
- normalizeRule: function(data) {
- if( typeof data == "string" ) {
- var transformed = {};
- $.each(data.split(/\s/), function() {
- transformed[this] = true;
- });
- data = transformed;
- }
- return data;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
- addMethod: function(name, method, message) {
- $.validator.methods[name] = method;
- $.validator.messages[name] = message || $.validator.messages[name];
- if (method.length < 3) {
- $.validator.addClassRules(name, $.validator.normalizeRule(name));
- }
- },
-
- methods: {
-
- // http://docs.jquery.com/Plugins/Validation/Methods/required
- required: function(value, element, param) {
- // check if dependency is met
- if ( !this.depend(param, element) )
- return "dependency-mismatch";
- switch( element.nodeName.toLowerCase() ) {
- case 'select':
- var options = $("option:selected", element);
- return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
- case 'input':
- if ( this.checkable(element) )
- return this.getLength(value, element) > 0;
- default:
- return $.trim(value).length > 0;
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/remote
- remote: function(value, element, param) {
- if ( this.optional(element) )
- return "dependency-mismatch";
-
- var previous = this.previousValue(element);
-
- if (!this.settings.messages[element.name] )
- this.settings.messages[element.name] = {};
- this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
-
- param = typeof param == "string" && {url:param} || param;
-
- if ( previous.old !== value ) {
- previous.old = value;
- var validator = this;
- this.startRequest(element);
- var data = {};
- data[element.name] = value;
- $.ajax($.extend(true, {
- url: param,
- mode: "abort",
- port: "validate" + element.name,
- dataType: "json",
- data: data,
- success: function(response) {
- var valid = response === true;
- if ( valid ) {
- var submitted = validator.formSubmitted;
- validator.prepareElement(element);
- validator.formSubmitted = submitted;
- validator.successList.push(element);
- validator.showErrors();
- } else {
- var errors = {};
- errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
- validator.showErrors(errors);
- }
- previous.valid = valid;
- validator.stopRequest(element, valid);
- }
- }, param));
- return "pending";
- } else if( this.pending[element.name] ) {
- return "pending";
- }
- return previous.valid;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/minlength
- minlength: function(value, element, param) {
- return this.optional(element) || this.getLength($.trim(value), element) >= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
- maxlength: function(value, element, param) {
- return this.optional(element) || this.getLength($.trim(value), element) <= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
- rangelength: function(value, element, param) {
- var length = this.getLength($.trim(value), element);
- return this.optional(element) || ( length >= param[0] && length <= param[1] );
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/min
- min: function( value, element, param ) {
- return this.optional(element) || value >= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/max
- max: function( value, element, param ) {
- return this.optional(element) || value <= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/range
- range: function( value, element, param ) {
- return this.optional(element) || ( value >= param[0] && value <= param[1] );
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/email
- email: function(value, element) {
- // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
- return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/url
- url: function(value, element) {
- // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
- return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/date
- date: function(value, element) {
- return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
- dateISO: function(value, element) {
- return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/dateDE
- dateDE: function(value, element) {
- return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/number
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/numberDE
- numberDE: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/digits
- digits: function(value, element) {
- return this.optional(element) || /^\d+$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
- // based on http://en.wikipedia.org/wiki/Luhn
- creditcard: function(value, element) {
- if ( this.optional(element) )
- return "dependency-mismatch";
- // accept only digits and dashes
- if (/[^0-9-]+/.test(value))
- return false;
- var nCheck = 0,
- nDigit = 0,
- bEven = false;
-
- value = value.replace(/\D/g, "");
-
- for (n = value.length - 1; n >= 0; n--) {
- var cDigit = value.charAt(n);
- var nDigit = parseInt(cDigit, 10);
- if (bEven) {
- if ((nDigit *= 2) > 9)
- nDigit -= 9;
- }
- nCheck += nDigit;
- bEven = !bEven;
- }
-
- return (nCheck % 10) == 0;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/accept
- accept: function(value, element, param) {
- param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
- return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
- equalTo: function(value, element, param) {
- return value == $(param).val();
- }
-
- }
-
-});
-
-// deprecated, use $.validator.format instead
-$.format = $.validator.format;
-
-})(jQuery);
-
-// ajax mode: abort
-// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
-// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
-;(function($) {
- var ajax = $.ajax;
- var pendingRequests = {};
- $.ajax = function(settings) {
- // create settings for compatibility with ajaxSetup
- settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
- var port = settings.port;
- if (settings.mode == "abort") {
- if ( pendingRequests[port] ) {
- pendingRequests[port].abort();
- }
- return (pendingRequests[port] = ajax.apply(this, arguments));
- }
- return ajax.apply(this, arguments);
- };
-})(jQuery);
-
-// provides cross-browser focusin and focusout events
-// IE has native support, in other browsers, use event caputuring (neither bubbles)
-
-// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
-// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
-
-// provides triggerEvent(type: String, target: Element) to trigger delegated events
-;(function($) {
- $.each({
- focus: 'focusin',
- blur: 'focusout'
- }, function( original, fix ){
- $.event.special[fix] = {
- setup:function() {
- if ( $.browser.msie ) return false;
- this.addEventListener( original, $.event.special[fix].handler, true );
- },
- teardown:function() {
- if ( $.browser.msie ) return false;
- this.removeEventListener( original,
- $.event.special[fix].handler, true );
- },
- handler: function(e) {
- arguments[0] = $.event.fix(e);
- arguments[0].type = fix;
- return $.event.handle.apply(this, arguments);
- }
- };
- });
- $.extend($.fn, {
- delegate: function(type, delegate, handler) {
- return this.bind(type, function(event) {
- var target = $(event.target);
- if (target.is(delegate)) {
- return handler.apply(target, arguments);
- }
- });
- },
- triggerEvent: function(type, target) {
- return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
- }
- })
-})(jQuery);
--- a/web/ldt_utils/media/js/login_ajax/jquery.login.js Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-$(document).ready(function() {
- $('#password').keypress(function(e) {
- if(e.which == 13) {
- jQuery('#submit').focus().click();
- }
- });
-
-
- $("#submit").click(function() {
- var username=$("#username").val();
- var password=$("#password").val();
- var data = {'username': username, 'password': password, 'reload': reload};
- if(username=="" && password=="")
- {
- $("#login_form_username_error").show();
- $("#login_form_password_error").show();
- $("#username").addClass("ajaxform_invalid");
- $("#password").addClass("ajaxform_invalid");
- }
- else if(username=="" && password!="")
- {
- $("#login_form_username_error").show();
- $("#username").addClass("ajaxform_invalid");
- }
- else if(password=="" && username!="")
- {
- $("#login_form_password_error").show();
- $("#password").addClass("ajaxform_invalid");
- }
- else{
-
- $.ajax({
- type: "POST",
- url : url_login_ajax,
- dataType:'json',
- data: data,
- error: function (){
- $("#msg").html("fail to connect");
- },
- success: function(data, reload){ //if success, refrash un bout de page pour afficher le nom de utilisateur et déconnecter.
- if (data.message!="successful")
- {
- $("#msg").html(data.message).show();
- }
- else{
- // $("#floatdialog_mask_loginform").hide();
- //window.location.reload();
- if (data.reload=='true'){
- window.location.reload();
- }
- else{
- //$("#loginstate").html('<a href ="'+url_userspace+'">'+data.username+'</a> | <a href="'+url_logout+'">déconnection</a>');
- //$("#loginstate").html('<ul class="usertool"><li id="user">'+data.username+'</li><li><a href ="'+url_userprofile+'">Profiles</a></li><li><a href ="'+url_userspace+'">Space</a></li><li><a href="'+url_logout+'">déconnection</a></li></ul>');
- var $DOMWindowOverlay = $('#DOMWindowOverlay');
- var $DOMWindow = $('#DOMWindow');
- $DOMWindowOverlay.fadeOut('fast',function(){
- $DOMWindowOverlay.trigger('unload').unbind().remove();
- });
- $DOMWindow.fadeOut('fast',function(){
- if($.fn.draggable){
- $DOMWindow.draggable("destroy").trigger("unload").remove();
- }else{
- $DOMWindow.trigger("unload").remove();
- }
- });
- $("#loginstate").html(data.html);
- }
- }
-
-
- }
- });
- }
- });
-})
-
-
--- a/web/ldt_utils/media/js/login_ajax/login_ajax.css Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-#loginform
-{
- font-size: 16px;
- background: #ffffff scroll repeat 0 0;
- /*border: 2px solid #666666;*/
- text-align: left;
- /*width: 400px;*/
-}
-
-#loginform .title
-{
- color: #FFFFFF;
- background: #990000 scroll repeat left top;
- font-weight:bold;
- height:34px;
- position: relative;
- line-height: 34px;
- overflow: hidden;
- text-transform: uppercase;
-}
-
-#loginform .title div
-{
- font-size: 16px;
- margin-left:12px;
-}
-
-#loginform .title .closeDOMWindow
-{
- float: right;
- text-decoration: none;
- color:#ffffff;
- padding-right:2px;
-}
-
-#loginform .ajaxform_invalid{
- background: #ffdddd none repeat scroll 0 0;
-}
-
-#loginform .ajaxform_error{
- display: none;
- color:red;
- font-size: 11px;
- line-height: 13px;
-}
-
-#loginform #msg{
- display:none;
- background:#FBE3E4 none repeat scroll 0 0;
- color: red;
- padding:0.5em;
- border-color:#FBC2C4;
- font-size: 13px;
- font-weight:bold;
-}
-
-#loginform dl {
- font-size:13px;
- line-height:22px;
-}
-
-#loginform dl dt{
- clear:left;
- color:#666666;
- float:left;
- font-weight:bold;
- width:100px
-}
-
-#loginform dl dd {
- margin-left: 110px;
- padding-bottom: 8px;
-}
-
-
--- a/web/ldt_utils/media/js/swfobject.js Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
- Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
- This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
-*/
-var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();
\ No newline at end of file
--- a/web/ldt_utils/settings.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-import os
-import os.path
-import logging
-from django.conf import settings
-
-
-# EMAIL_HOST='smtp.gmail.com'
-# EMAIL_HOST_USER = 'wujingwen1112@gmail.com'
-# EMAIL_HOST_PASSWORD='jingwen1112'
-# EMAIL_PORT='587'
-# EMAIL_USE_TLS = True
-#DEFAULT_FROM_EMAIL = "admin@domain.com"
-#SERVER_EMAIL = "admin@domain.com"
-
-WEB_URL = getattr(settings, 'WEB_URL', '')
-MEDIA_URL = getattr(settings, 'MEDIA_URL', '')
-MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', '')
-SITE_ID = getattr(settings, 'SITE_ID', 1)
-DEBUG = getattr(settings, 'DEBUG', False)
-MANAGERS = settings.MANAGERS
-INSTALLED_APPS = settings.INSTALLED_APPS
-LANGUAGES = settings.LANGUAGES
-DECOUPAGE_BLACKLIST =getattr(settings, 'DECOUPAGE_BLACKLIST', 'de_PPP')
-STREAM_URL = getattr(settings, 'STREAM_URL', '')
-
-
-ACCOUNT_ACTIVATION_DAYS = getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 7)
-LDT_MEDIA_PREFIX = getattr(settings, 'LDT_MEDIA_PREFIX', MEDIA_URL + 'ldt/')
-LDT_MAX_SEARCH_NUMBER = 50
-
-
-
--- a/web/ldt_utils/templates/admin/cms_change_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,250 +0,0 @@
-{% extends "admin/page_change_form.html" %}
-{% load i18n admin_modify adminmedia cms_tags cms_admin %}
-{% block js_import %}
-{% endblock %}
-{% block extrahead %}
-{{ block.super }}
-{% if not add %}
- <script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/change_form.js"></script>
-{% endif %}
-<script type="text/javascript" src="{% admin_media_prefix %}js/urlify.js"></script>
-
-{% if add %}
- <script type="text/javascript">
- $(document).ready(function(){
- $("#id_title").keyup(function() {
- var e = $("#id_slug")[0];
- if (!e._changed) {
- e.value = URLify(this.value, 64);
- }
- });
- });
- </script>
-{% endif %}
-
-
-{% endblock %}
-
-{% block content_title %}
- {% if moderation_delete_request %}
- <h1 class="moderation-approve-deletion">{% trans "Approve page deletion" %}</h1>
-
- {% else %}
-
- <h1>{{ title }}
- {% if CMS_MODERATOR %}
- {% if moderation_required %}<span class="moderation-requires-approvement">{% blocktrans %}(requires approvement at {{ moderation_level }} level){% endblocktrans %}</span>
- {% else %}<span>{% trans '(you can perform actions on this page directly)' %}</span>
- {% endif %}
- {% endif %}
- </h1>
- {% endif %}
-
-{% endblock %}
-
-{% block content %}<div id="content-main">
-
-{% block object-tools %}
-{% if change %}{% if not is_popup %}
- <ul class="object-tools">
- {% if moderation_delete_request %}<li><a href="remove-delete-state/" class="approvelink">{% trans "Remove delete request" %}</a></li>{% endif %}
- {% if moderator_should_approve %}
- <li><a href="approve/" class="approvelink">{% if moderation_delete_request %}{% trans "Approve delete" %}{% else %}{% trans "Approve" %} {% trans "draft" %}{% endif %}</a></li>
- <li><a href="{% if cl.current_site %}{% ifnotequal cl.current_site site %}http://{{ cl.current_site.domain }}{% endifnotequal %}{% endif %}{{ page.get_absolute_url }}?preview&draft=1" class="previewdraftlink">{% trans "Preview" %} {% trans "draft" %}</a></li>
- {% endif %}
-
- <li><a href="history/" class="historylink">{% trans "History" %}</a></li>
- {% if has_absolute_url %}<li><a href="{% if cl.current_site %}{% ifnotequal cl.current_site site %}http://{{ cl.current_site.domain }}{% endifnotequal %}{% endif %}{{ page|preview_link:language }}?preview" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
- </ul>
-{% endif %}{% endif %}
-{% endblock %}
-
-
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="?language={{ language }}{%if request.GET.target %}&target={{ request.GET.target }}{% endif %}&{%if request.GET.target %}position={{ request.GET.position }}{% endif %}" method="post" id="page_form">{% block form_top %}{% endblock %}
-{{ adminForm.fields.parent }}
-
-<input type="hidden" name="language" value="{{ language }}" />
-
-{% if show_language_tabs %}
-<div id="page_form_lang_tabs">
- {% for lang_code, lang_name in traduction_language %}
- <input type="button" onclick="trigger_lang_button(this,'./?language={{lang_code}}');"
- class="language_button {% ifequal lang_code language %}selected{% endifequal %}"
- id="debutton" name="{{lang_code}}" value="{{lang_name}}" />
- {% endfor %}
-</div>
-{% endif %}
-
-
-<div id="lang_tab_content">
-{% if show_language_tabs %}
-<h2 class="header"></h2>
-{% endif %}
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if save_on_top %}{% submit_row %}{% endif %}
-{% if errors %}
- <p class="errornote">
- {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
- <ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
-{% endif %}
-
-{% for fieldset in adminform %}
- {% include "admin/cms/page/includes/fieldset.html" %}
-{% endfor %}
-
-
-{% for inline_admin_formset in inline_admin_formsets %}
- {% include inline_admin_formset.opts.template %}
-{% endfor %}
-
-
-{% if not add %}
- {% if CMS_PERMISSION and has_change_permissions_permission %}
- <div class="inline-group">
- <div class="tabular inline-related">
- <fieldset id="inherited_permissions" class="module aligned collapse">
- <h2>{% trans 'All permissions' %}</h2>
- <div class="loading">{% trans 'Loading...' %}</div>
- <div class="load">./permissions/</div>
- </fieldset>
- </div>
- </div>
- {% endif %}
-
- {% if CMS_MODERATOR and has_moderate_permission %}
- <div class="inline-group">
- <div class="tabular inline-related">
- <fieldset id="inherited_permissions" class="module aligned collapse">
- <h2 class="load_remote">{% trans 'Page states' %}</h2>
- <div class="loading">{% trans 'Loading...' %}</div>
- <div class="load">./moderation-states/</div>
- </fieldset>
- </div>
- </div>
- {% endif %}
-
- {% if moderation_delete_request %}<script type="text/javascript">
- $(function(){
- // disable all fields
- function lockControls(){
- $('input,select,textarea').attr("disabled", "disabled");
- $('a[id^=add_],span[class^=add-plugin],a[class^=selector-],p[class^=selector-]').remove();
- }
- $('fieldset[class=collapsed]').remove();
- lockControls();
- setTimeout(lockControls,200);
- });
- </script>{% endif %}
-
- {% if CMS_MODERATOR and moderation_required %}
- <div id="dialog" title="Approve dialog">
- <p>{% blocktrans %}This page must be moderated at level {{ moderation_level }}, post a message for moderator.{% endblocktrans %}</p>
- <div class="row"><input type="text" name="df_moderator_message" id="id_df_moderator_message" class="wide" value=""/></div>
- <div class="row"><input type="checkbox" name="df_moderator_state" id="id_df_moderator_state" value="1"/><label for="id_df_moderator_reguest">{% trans 'Request approvemet' %}</label></div>
- </div>
-
- <script type="text/javascript">
- $(function(){
- // override standard uncolapse_all javascript function, we need to call it
- // only if there is submit, but submit might be cancelled over dialog.
- var old_uncollapse_all = CollapsedFieldsets.uncollapse_all;
- CollapsedFieldsets.uncollapse_all = function() {}
-
- var submitActor;
- var forceSubmit = false;
- var seen = false;
-
- // change submit states, open dialog
- $('#page_form').submit(function(event){
- return showDialog(event);
- });
-
- $('#page_form input[name=_continue]').click(function(event){
- return showDialog(event, this);
- });
-
- function showDialog(event, actor) {
- if (forceSubmit) return true; // escape sequence
-
- if (!seen) {
- // show previously posted message if there were an error
- $('#id_df_moderator_message').val($('#id_moderator_message').val());
- }
- seen = true
- event.preventDefault();
- submitActor = actor;
- $('#dialog').dialog('open');
- return false;
- }
-
- function dialogSave(){
- // assign values from dialog form to real form
- $('#id_moderator_message').val($('#id_df_moderator_message').val());
- $('#id_moderator_state').val(
- $('#id_df_moderator_state').is(':checked') ? $('#id_df_moderator_state').val() : 0
- );
-
- old_uncollapse_all(); // uncolapse all fields django way
- $('#dialog').dialog('close');
- forceSubmit = true;
- $(submitActor || '#page_form input[name=_save]').click();
- return false;
- }
-
- $('#dialog').dialog({
- bgiframe: true,
- autoOpen: false,
- height: 200,
- width: 400,
- modal: true,
- buttons: {
- Cancel: function() {
- $(this).dialog('close');
- },
- Save: function() {
- dialogSave();
- }
-
- },
- open: function(){
- var val = $('#id_moderator_state').val();
- $('#id_df_moderator_state').attr('checked', val >= 1 ? 'checked': '');
- $('#id_df_moderator_message')
- .focus()
- .keydown(function(event) { if (event.keyCode == 13) dialogSave()});
-
- // add default button class to last rendered button (Save)
- $(this.uiDialogButtonPane).find('div.ui-dialog-buttonpane button:last').addClass('default');
- },
- close: function(){
- forceSubmit = false;
- }
- });
- });
- </script>
- {% endif %}
-
-{% endif %}
-
-{% block after_related_objects %}{% endblock %}
-
-{% if add %}
- <div class="submit-row"{% if is_popup %} style="overflow: auto;"{% endif %}>
- <input type="submit" name="_save" class="default" value="{% trans 'Save' %}" {{ onclick_attrib }}/>
- <input type="submit" name="_continue" value="{% trans 'Save and continue editing' %}" {{ onclick_attrib }}/>
- </div>
-{% else %}
- {% if not moderation_delete_request %}{% submit_row %}{% endif %}
-{% endif %}
-
-{% if add %}
- <script type="text/javascript">document.getElementById("{{ adminform.first_field.auto_id }}").focus();</script>
-{% endif %}
-
-{# JavaScript for prepopulated fields #}
-{% prepopulated_fields_js %}
-
-</div>
-</form></div>
-{% endblock %}
--- a/web/ldt_utils/templates/admin/cms_change_list.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-{% extends "admin/page_change_list.html" %}
-{% load adminmedia admin_list i18n cms_admin js %}
-{% block bodyclass %}change-list{% endblock %}
-
-{% if not is_popup %}{% block breadcrumbs %}
- <div class="breadcrumbs">
- <a href="../../">{% trans "Home" %}</a> ›
- <a href="../">{{ app_label|capfirst|escape }}</a> › {{ opts.verbose_name_plural|capfirst|escape }}
- </div>
-{% endblock %}{% endif %}
-
-{% block coltype %}flex{% endblock %}
-{% block extrahead %}{{ block.super }}
-
-<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}css/pages.css"/>
-<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}jstree/tree_component.css" />
-<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}css/jquery.dialog.css" />
-
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/jquery.livequery.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/ui.core.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/jquery.bind.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/ui.checkbox.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/effects.core.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/effects.highlight.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/jquery.form.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}jstree/_lib/_all.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}jstree/tree_component.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/ui.dialog.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/lib/functional.js"></script>
-<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/change_list.js"></script>
-
-{% if cl.is_filtered %}
-<link rel="stylesheet" type="text/css" href="{{ CMS_MEDIA_URL }}jstree/themes/default/style.css" />
-{% endif %}
-{% endblock %}
-
-{% block content %}
-<script type="text/javascript">
- //<![CDATA[
-
- $(document).ready(function() {
- {% if not cl.is_filtered %}
- initTree();
- {% endif %}
- });
-
- function showchangelistfilter(){
- $("#changelist-filter").toggle();
- }
- function moveSuccess(node){
- var msg = $('<span class="success">{% trans "Successfully moved" %}</span>');
- node.append(msg);
- msg.fadeOut(3000);
- }
- function moveError(node){
- var msg = $('<span class="success">An error occured. Please reload the page</span>');
- node.append(msg);
- }
- // some settings used by javascript functions
-
- cmsSettings = {
- cmsPermission: {{ CMS_PERMISSION|js }},
- cmsModerator: {{ CMS_MODERATOR|js }},
- debug: {{ DEBUG|js }}
- };
- //]]>
-</script>
-
-
-<div id="content-main"{% if cl.is_filtered %} class="activ-filter"{% endif %}>
-
-{% block object-tools %}
-
- <ul class="object-tools">
- {% if has_recover_permission %}
- <li><a href="recover/" class="recoverlink">{% blocktrans with cl.opts.verbose_name_plural|escape as name %}Recover deleted {{name}}{% endblocktrans %}</a></li>
- {% endif %}
- {% if has_add_permission %}
- <li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a></li>
- {% endif %}
- </ul>
-
- {% include "admin/cms/page/loading.html" %}
-
-{% endblock %}
-<div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
-{% block search %}
-
-
-{% if cl.has_access_to_multiple_sites %}
- <div id="site-selector">{% trans "Pages on:" %}
- <select id="site-select">{% for site in cl.sites %}
- <option {% ifequal site.pk cl.current_site.pk %}selected {% endifequal %}value="{{ site.pk }}">{{ site.name }}</option>{% endfor %}
- </select>
- </div>
-{% else %}
- <input type="hidden" id="site-select" value="{{ cl.sites.0.pk }}">
-{% endif %}
-
-{% search_form cl %}
-{% endblock %}
-{% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
-
-{% block filters %}
-{% if cl.has_filters %}
-
-
-<a href="javascript:showchangelistfilter();" id="changelist-filter-button">Filter: {% if cl.is_filtered %}{% trans "on" %}{% else %}{% trans "off" %}{% endif %}</a>
-<div id="changelist-filter" style="display:none;">
-<h2>{% trans 'Filter' %}</h2>
-{% for spec in cl.filter_specs %}
- {% clean_admin_list_filter cl spec %}
-{% endfor %}
-</div>
-{% endif %}
-{% endblock %}
-
-{% include "admin/cms/page/change_list_tree.html" %}
-
-</div>
-</div>
-
-<div id="dialogs"></div>
-
-{% endblock %}
--- a/web/ldt_utils/templates/admin/index.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
-
-{% block coltype %}colMS{% endblock %}
-
-{% block bodyclass %}dashboard{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-<div id="content-main">
-
-{% if app_list %}
- {% for app in app_list %}
- <div class="module">
- <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
- <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
- {% for model in app.models %}
- <tr>
- {% if model.perms.change %}
- <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
- {% else %}
- <th scope="row">{{ model.name }}</th>
- {% endif %}
-
- {% if model.perms.add %}
- <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
- {% else %}
- <td> </td>
- {% endif %}
-
- {% if model.perms.change %}
- <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
- {% else %}
- <td> </td>
- {% endif %}
- </tr>
- {% endfor %}
- </table>
- </div>
- {% endfor %}
- <div class="module">
- <table summary="Import">
- <caption>Import</caption>
- <tr>
- <th>
- <a href="{% url ldt.ldt.views.importFile %}">Import an ldt</a>
- </th>
- <td>
- </td>
- </tr>
- <tr>
- <th>
- <a href="{% url ldt.ldt.views.reindex %}">Reindex</a>
- </th>
- <td>
- </td>
- </tr>
- </table>
- </div>
-{% else %}
- <p>{% trans "You don't have permission to edit anything." %}</p>
-{% endif %}
-</div>
-{% endblock %}
-
-{% block sidebar %}
-<div id="content-related">
- <div class="module" id="recent-actions-module">
- <h2>{% trans 'Recent Actions' %}</h2>
- <h3>{% trans 'My Actions' %}</h3>
- {% load log %}
- {% get_admin_log 10 as admin_log for_user user %}
- {% if not admin_log %}
- <p>{% trans 'None available' %}</p>
- {% else %}
- <ul class="actionlist">
- {% for entry in admin_log %}
- <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
- {% if entry.is_deletion %}
- {{ entry.object_repr }}
- {% else %}
- <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
- {% endif %}
- <br/>
- {% if entry.content_type %}
- <span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
- {% else %}
- <span class="mini quiet">{% trans 'Unknown content' %}</span>
- {% endif %}
- </li>
- {% endfor %}
- </ul>
- {% endif %}
- </div>
-</div>
-{% endblock %}
--- a/web/ldt_utils/templates/admin/page_app_index.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-{% extends "admin/page_index.html" %}
-{% load i18n %}
-
-{% if not is_popup %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs"><a href="../">
-{% trans "Home" %}</a> ›
-{% for app in app_list %}
-{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}
-{% endfor %}</div>{% endblock %}
-
-{% endif %}
-
-{% block sidebar %}{% endblock %}
\ No newline at end of file
--- a/web/ldt_utils/templates/admin/page_base.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-
-{% block css_import %}
-{{ block.super }}
- <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/page_base.css{% endblock %}" />
- {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
-{% endblock %}
-
-
-<!-- Container -->
- <!-- Header -->
- {% block header %}{{block.super}}
- {% block nav-global %}{% endblock %}
- {% endblock %}
- <!-- END Header -->
- {% block breadcrumb %}
- <li></li>
- <li><a href="{% url ldt.userpanel.views.space %}">{% trans "Space" %}</a></li>
- <li>{% trans "Pages" %}</li>
- {% endblock %}
-
-
- {% if messages %}
- <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>
- {% endif %}
-
- {% block content_title %}{% if title %}{{ title }}{% endif %}{% endblock %}
-
- <!-- Content -->
- {% block content_admin %}
- <div id="content" class="{% block coltype %}colM{% endblock %}" style="padding: 20px 20px;">
- {% block pretitle %}{% endblock %}
- {% block content %}
- {% block object-tools %}{% endblock %}
- {{ content }}
- {% endblock %}
- {% block sidebar %}{% endblock %}
- <br class="clear" />
- </div>
- {% endblock %}
- <!-- END Content -->
-
-<!-- END Container -->
-
--- a/web/ldt_utils/templates/admin/page_base_site.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-{% extends "admin/page_base.html" %}
-{% load i18n %}
-
-{% block title %}Django Administration{% endblock %}
-
-{% block branding %}
-<h1 id="site-name">{% trans 'Django administration' %}</h1>
-{% endblock %}
-
-{% block nav-global %}{% endblock %}
--- a/web/ldt_utils/templates/admin/page_change_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-{% extends "admin/page_base_site.html" %}
-{% load i18n admin_modify adminmedia %}
-
-{% block extrahead %}{{ block.super }}
-<script type="text/javascript" src="../../../jsi18n/"></script>
-{{ media }}
-{% endblock %}
-
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
-
-{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
-
-{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
-
-{% block breadcrumbs %}{% if not is_popup %}
-<div class="breadcrumbs">
- <a href="../../../">{% trans "Home" %}</a> ›
- <a href="../../">{{ app_label|capfirst|escape }}</a> ›
- {% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} ›
- {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
-</div>
-{% endif %}{% endblock %}
-
-{% block content %}<div id="content-main">
-{% block object-tools %}
-{% if change %}{% if not is_popup %}
- <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li>
- {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
- </ul>
-{% endif %}{% endif %}
-{% endblock %}
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
-<div>
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if save_on_top %}{% submit_row %}{% endif %}
-{% if errors %}
- <p class="errornote">
- {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
- <ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
-{% endif %}
-
-{% for fieldset in adminform %}
- {% include "admin/includes/fieldset.html" %}
-{% endfor %}
-
-{% block after_field_sets %}{% endblock %}
-
-{% for inline_admin_formset in inline_admin_formsets %}
- {% include inline_admin_formset.opts.template %}
-{% endfor %}
-
-{% block after_related_objects %}{% endblock %}
-
-{% submit_row %}
-
-{% if adminform and add %}
- <script type="text/javascript">document.getElementById("{{ adminform.first_field.auto_id }}").focus();</script>
-{% endif %}
-
-{# JavaScript for prepopulated fields #}
-{% prepopulated_fields_js %}
-
-</div>
-</form></div>
-{% endblock %}
--- a/web/ldt_utils/templates/admin/page_change_list.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-{% extends "admin/page_base_site.html" %}
-{% load adminmedia admin_list i18n %}
-
-{% block extrastyle %}
- {{ block.super }}
- <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/changelists.css" />
- {% if cl.formset %}
- <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />
- <script type="text/javascript" src="../../jsi18n/"></script>
- {% endif %}
- {{ media }}
- {% if not actions_on_top and not actions_on_bottom %}
- <style>
- #changelist table thead th:first-child {width: inherit}
- </style>
- {% endif %}
-{% endblock %}
-
-{% block bodyclass %}change-list{% endblock %}
-
-{% if not is_popup %}
- {% block breadcrumbs %}
- <div class="breadcrumbs">
- <a href="../../">
- {% trans "Home" %}
- </a>
- ›
- <a href="../">
- {{ app_label|capfirst }}
- </a>
- ›
- {{ cl.opts.verbose_name_plural|capfirst }}
- </div>
- {% endblock %}
-{% endif %}
-
-{% block coltype %}flex{% endblock %}
-
-{% block content %}
- <div id="content-main">
- {% block object-tools %}
- {% if has_add_permission %}
- <ul class="object-tools">
- <li>
- <a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
- {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
- </a>
- </li>
- </ul>
- {% endif %}
- {% endblock %}
- {% if cl.formset.errors %}
- <p class="errornote">
- {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
- <ul class="errorlist">{% for error in cl.formset.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
- {% endif %}
- <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
- {% block search %}{% search_form cl %}{% endblock %}
- {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
-
- {% block filters %}
- {% if cl.has_filters %}
- <div id="changelist-filter">
- <h2>{% trans 'Filter' %}</h2>
- {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
- </div>
- {% endif %}
- {% endblock %}
-
- <form action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>
- {% if cl.formset %}
- {{ cl.formset.management_form }}
- {% endif %}
-
- {% block result_list %}
- {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
- {% result_list cl %}
- {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
- {% endblock %}
- {% block pagination %}{% pagination cl %}{% endblock %}
- </form>
- </div>
- </div>
-{% endblock %}
--- a/web/ldt_utils/templates/admin/page_index.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-{% extends "admin/page_base_site.html" %}
-{% load i18n %}
-
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
-
-{% block coltype %}colMS{% endblock %}
-
-{% block bodyclass %}dashboard{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-{% block content_title %}{% trans "Pages" %}{% endblock %}
-{% block content %}
-<div id="content-main">
-
-{% if app_list %}
- {% for app in app_list %}
- <div class="module">
- <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
- <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
- {% for model in app.models %}
- <tr>
- {% if model.perms.change %}
- <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
- {% else %}
- <th scope="row">{{ model.name }}</th>
- {% endif %}
-
- {% if model.perms.add %}
- <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
- {% else %}
- <td> </td>
- {% endif %}
-
- {% if model.perms.change %}
- <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
- {% else %}
- <td> </td>
- {% endif %}
- </tr>
- {% endfor %}
- </table>
- </div>
- {% endfor %}
-{% else %}
- <p>{% trans "You don't have permission to edit anything." %}</p>
-{% endif %}
-</div>
-{% endblock %}
-
-{% block sidebar %}
-<div id="content-related">
- <div class="module" id="recent-actions-module">
- <h2>{% trans 'Recent Actions' %}</h2>
- <h3>{% trans 'My Actions' %}</h3>
- {% load log %}
- {% get_admin_log 10 as admin_log for_user user %}
- {% if not admin_log %}
- <p>{% trans 'None available' %}</p>
- {% else %}
- <ul class="actionlist">
- {% for entry in admin_log %}
- <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
- {% if entry.is_deletion %}
- {{ entry.object_repr }}
- {% else %}
- <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
- {% endif %}
- <br/>
- {% if entry.content_type %}
- <span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
- {% else %}
- <span class="mini quiet">{% trans 'Unknown content' %}</span>
- {% endif %}
- </li>
- {% endfor %}
- </ul>
- {% endif %}
- </div>
-</div>
-{% endblock %}
--- a/web/ldt_utils/templates/admin/page_login.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-{% extends "admin/page_base_site.html" %}
-{% load i18n %}
-
-{% block extrastyle %}{% load adminmedia %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/login.css" />{% endblock %}
-
-{% block bodyclass %}{% endblock %}
-
-{% block content_title %}{% trans "Connexion" %}{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-{% if error_message %}
-<p class="errornote">{{ error_message }}</p>
-{% endif %}
-<div id="content-main">
-<form action="{{ app_path }}" method="post" id="login-form">
- <table>
- <tr>
- <th><label for="id_username">{% trans 'Username:' %}</label></th>
- <td><input type="text" name="username" id="id_username" /></td>
- </tr>
- <tr>
- <th><label for="id_password">{% trans 'Password:' %}</label></th>
- <td><input type="password" name="password" id="id_password" /></td>
- <td><input type="hidden" name="this_is_the_login_form" value="1" /></td>
- </tr>
- <tr>
- <td><a href="{% url registration.views.register %}" >{% trans "Create an account" %}</a>
- <a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "Forget password?" %}</a>
- </td>
- <td><label> </label><input type="submit" value="{% trans 'Log in' %}" /></td>
- </tr>
- </table>
-</form>
-
-<script type="text/javascript">
-document.getElementById('id_username').focus()
-</script>
-</div>
-{% endblock %}
--- a/web/ldt_utils/templates/admin/show_menu.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-{% load cms_tags %}
-{% load i18n %}
-
-{% show_menu 0 100 100 100 %}
\ No newline at end of file
--- a/web/ldt_utils/templates/cms/admin/cms/page/change_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n admin_modify adminmedia cms_admin %}
-{% block extrahead %}{{ block.super }}
-<script type="text/javascript" src="../../../../jsi18n/"></script>
-{% for js in javascript_imports %}{% include_admin_script js %}{% endfor %}
-{% endblock %}
-{% block stylesheet %}{% admin_media_prefix %}css/forms.css" />
-<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}cms/admin.css{% endblock %}
-{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
-{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
-{% block userlinks %}<a href="../../../doc/">{% trans 'Documentation' %}</a> / <a href="../../../password_change/">{% trans 'Change password' %}</a> / <a href="../../../logout/">{% trans 'Log out' %}</a>{% endblock %}
-{% block breadcrumbs %}{% endblock %}
-{% block content %}<div id="content-main">
-{% block object-tools %}
-{% if change %}{% endif %}
-{% endblock %}
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
-<div>
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-<input type="hidden" name="_continue" value="1" />
-{% if opts.admin.save_on_top %}{% submit_row %}{% endif %}
-{% if form.error_dict %}
- <p class="errornote">
- {% blocktrans count form.error_dict.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
-{% endif %}
-{% for bound_field_set in bound_field_sets %}
- <fieldset class="module aligned {{ bound_field_set.classes }} hideme">
- {% if bound_field_set.name %}<h2>{{ bound_field_set.name }}</h2>{% endif %}
- {% if bound_field_set.description %}<div class="description">{{ bound_field_set.description }}</div>{% endif %}
- {% for bound_field_line in bound_field_set %}
- {% admin_field_line bound_field_line %}
- {% for bound_field in bound_field_line %}
- {% filter_interface_script_maybe bound_field %}
- {% endfor %}
- {% endfor %}
- </fieldset>
-{% endfor %}
-{% block after_field_sets %}{% endblock %}
-{% if change %}
- {% if ordered_objects %}
- <fieldset class="module"><h2>{% trans "Ordering" %}</h2>
- <div class="form-row{% if form.order_.errors %} error{% endif %} ">
- {% if form.order_.errors %}{{ form.order_.html_error_list }}{% endif %}
- <p><label for="id_order_">{% trans "Order:" %}</label> {{ form.order_ }}</p>
- </div></fieldset>
- {% endif %}
-{% endif %}
-{% for related_object in inline_related_objects %}{% cms_edit_inline related_object %}{% endfor %}
-{% block after_related_objects %}{% endblock %}
-{% submit_row %}
-{% if add %}
- <script type="text/javascript">document.getElementById("{{ first_form_field_id }}").focus();</script>
-{% endif %}
-{% if auto_populated_fields %}
- <script type="text/javascript">
- {% auto_populated_field_script auto_populated_fields change %}
- </script>
-{% endif %}
-</div>
-</form></div>
-{% endblock %}
--- a/web/ldt_utils/templatetags/iriusermedia.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-from django.template import Library
-
-register = Library()
-
-def ldt_media_prefix():
- """
- Returns the string contained in the setting LDT_MEDIA_PREFIX.
- """
- try:
- from django.conf import settings
- except ImportError:
- return ''
- return settings.LDT_MEDIA_PREFIX
-ldt_media_prefix = register.simple_tag(ldt_media_prefix)
--- a/web/ldt_utils/user/admin.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-from django.contrib import admin
-from django.contrib.auth.admin import UserAdmin, GroupAdmin
-from django.utils.translation import ugettext as _
-from ldt import settings
-from copy import deepcopy
-from forms import ldtForm, IriGroupForm
-from models import ldt, IriGroup
-
-
-class ldtAdmin(UserAdmin):
- list_display = ('username', 'email', 'first_name', 'last_name')
-
- fieldsets = [
- (None, {'fields': ('username', ('password1', 'password2'))}),
- (_('User details'), {'fields': (('first_name', 'last_name'), 'email')}),
- (_('Groups'), {'fields': ('groups',)}),
- (_('Permissions'), {'fields': ('is_staff', 'user_permissions')}),
- ]
- form = ldtForm
- model = ldt
- filter_horizontal = ('user_permissions',)
-
- def get_fieldsets(self, request, obj=None):
- fieldsets = deepcopy(self.fieldsets)
- if not '/add' in request.path:
- fieldsets[0] = (None, {'fields': ('username',)})
- fieldsets.append((_('Password'), {'fields': ('password1', 'password2'), 'classes': ('collapse',)}))
- return fieldsets
-
- def add_view(self, request):
- return super(UserAdmin, self).add_view(request)
-
-admin.site.unregister(ldt)
-admin.site.register(ldt, ldtAdmin)
-
-class IriGroupAdmin(admin.ModelAdmin):
- form = IriGroupForm
- model = IriGroup
- filter_horizontal = ('permissions',)
-
-admin.site.unregister(IriGroup)
-admin.site.register(IriGroup, IriGroupAdmin)
--- a/web/ldt_utils/user/forms.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-from django import forms
-from django.contrib.auth.models import User, Permission, Group
-from django.forms.util import ErrorList
-from django.contrib.auth.forms import UserCreationForm
-from django.utils.translation import gettext as _
-from models import ldt, IriGroup
-from ldt.management import get_content_type_list
-
-
-class ldtForm(UserCreationForm):
-
- class Meta:
- model = ldt
-
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList, label_suffix=':',
- empty_permitted=False, instance=None):
-
- if instance:
- initial = initial or {}
-
- super(ldtForm, self).__init__(data, files, auto_id, prefix,
- initial, error_class, label_suffix, empty_permitted, instance)
-
- # filtre les permissions necessaires
- content_type_list = get_content_type_list()
- self.fields['user_permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
-
- if instance:
- self.fields['password1'].required = False
- self.fields['password1'].label = _('New password')
- self.fields['password2'].required = False
- self.fields['password2'].label = _('New password confirmation')
-
- self._password_change = True
-
- def clean_username(self):
- if self.instance:
- return self.cleaned_data['username']
- return super(ldtForm, self).clean_username()
-
- def clean_password2(self):
- if self.instance and self.cleaned_data['password1'] == '' and self.cleaned_data['password2'] == '':
- self._password_change = False
- return u''
- return super(ldtForm, self).clean_password2()
-
-
- def save(self, commit=True):
- Super = self._password_change and ldtForm or UserCreationForm
- user = super(Super, self).save(commit=False)
- # if user.pk != None:
- # self.save_m2m()
-
- if commit:
- user.save()
-
- return user
-
-class IriGroupForm(forms.ModelForm):
- class meta:
- model = IriGroup
-
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList, label_suffix=':',
- empty_permitted=False, instance=None):
- if instance:
- initial = initial or {}
-
- super(IriGroupForm, self).__init__(data, files, auto_id, prefix,
- initial, error_class, label_suffix, empty_permitted, instance)
-
- # filtre les permissions necessaires
- content_type_list = get_content_type_list()
- self.fields['permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
-
-class EmailChangeForm(forms.Form):
- email1 = forms.EmailField(label=_("E-mail"), max_length=75)
- email2 = forms.EmailField(label=_("E-mail"), max_length=75)
-
- def __init__(self, user=None, *args, **kwargs):
- self.user = user
- super(EmailChangeForm, self).__init__(*args, **kwargs)
-
- def clean_email2(self):
- email1 = self.cleaned_data.get('email1')
- email2 = self.cleaned_data.get('email2')
- if email1 and email2:
- if email1 != email2:
- raise forms.ValidationError(_("The two emails didn't match."))
- return email2
-
-
- def save(self):
- self.user.email=self.cleaned_data['email1']
- self.user.save()
- return self.user
-
--- a/web/ldt_utils/user/models.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-from django.db import models
-from django.contrib.auth.models import User, Group, UserManager
-from django.utils.translation import gettext as _
-from django.contrib import admin
-import datetime
-
-
-class IriGroup(Group):
- description = models.TextField(null=True, blank=True)
-
- def __unicode__(self):
- return self.name
-
-
-class ldt(User):
- irigroups = models.ManyToManyField(IriGroup, blank=True)
-
- class Meta:
- verbose_name = 'iri user'
- verbose_name_plural = 'iri users'
-
- def __unicode__(self):
- return self.username
-
-
-class ldtManager(UserManager):
- def create_user(self, username, email, password=None):
- "Creates and saves a User with the given username, e-mail and password."
- now = datetime.datetime.now()
- user = ldt(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now)
- if password:
- user.set_password(password)
- else:
- user.set_unusable_password()
- user.save()
- return user
-
-User.objects = ldtManager()
-User.objects.contribute_to_class(User, "objects")
-
-admin.site.register(ldt)
-admin.site.register(IriGroup)
--- a/web/ldt_utils/user/templates/iriuser/user/change_email.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# form of email address's change #}
-{% load i18n %}
-{% block breadcrumb %}
- <li></li>
- <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
- <li>{% trans "Modification de l'adresse émail" %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans "Modification de l'adresse émail" %}{% endblock %}
-{% block js_declaration %}{{ block.super }}
- <script type="text/javascript">
- $(document).ready(function() {
- $("#change_email").validate();
- });
- </script>
-{% endblock %}
-{% block css_import %}
-{{ block.super }}
- <style type="text/css">
- label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
- </style>
-{% endblock %}
-
-{% block iricontent %}
-<p>{% trans "Please enter your new e-mail twice so we can verify you typed it in correctly." %}</p>
-<form action="" method="POST" id="change_email">
-{% csrf_token %}
- <table>
- <tr>
- <td>
- <label for="id_email1">{% trans "email" %}:</label>
- </td>
- <td>
- <input id="id_email1" type="text" maxlength="75" name="email1" class="required email"/>
- </td>
- <td>{{form.email1.errors}}</td>
- <tr>
- </tr>
- <td>
- <label for="id_email2">{% trans "Confirmation de l'adresse émail" %}:</label>
- </td>
- <td>
- <input id="id_email2" type="text" maxlength="75" name="email2" class="required email"/>
- </td>
- <td>{{form.email1.errors}}</td>
- </tr>
- <tr><th></th><td><input type="submit" class="button" name="submit" value="{% trans 'change my e-mail' %}" /></td></tr>
- </table>
-</form>
-{% endblock%}
--- a/web/ldt_utils/user/templates/iriuser/user/change_email_done.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# if email is changed successfully, retrun this page #}
-{% load i18n %}
-{% block breadcrumb %}
- <li></li>
- <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
- <li>{% trans "email change" %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans "email change" %}{% endblock %}
-{% block iricontent %}
-<p> {% trans "email changed" %}</p>
-<a href="{% url ldt.user.views.profile %}">{% trans "back to profile" %}</a>
-{% endblock %}
--- a/web/ldt_utils/user/templates/iriuser/user/home.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-
-{% block title %}Home{% endblock %}
-
-{% block content_base %}
-
-<p>Welcome</p>
-<li><a href="{% url django.contrib.auth.views.login %}" >{% trans "Se connecter" %}</a></li>
-<li><a href="{% url registration.views.register %}" >{% trans "Créer un compte" %}</a></li>
-<li><a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "récupérer mot de passe" %}</a></li>
-
-{% endblock %}
-
--- a/web/ldt_utils/user/templates/iriuser/user/login_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-{% load i18n %}
-{# print user's state and form of login #}
-{% block js_import %}
-{{block.super}}
-
- <script language="javascript">
- var url_login_ajax='{{WEB_URL}}{% url ldt.user.views.loginAjax %}';
- {% if reload %}
- var reload=true;
- {% else %}
- var reload=false;
- {% endif %}
-
- $(document).ready(function(){
- $('.login_link').nyroModal({
- height:235,
- width:430,
- padding:0,
- bgColor: 'rgb(239, 239, 239)',
- });
- })
-
- </script>
-{% endblock %}
-{% 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>
- <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">
- <a href="#" class="nyroModalClose">X</a>
- <div>{% trans "Log in" %}</div>
- </div>
- <div id="msg"></div>
- <div id="login_form" style="padding: 8px;" method="POST" action="">
- <div style="float: right; padding-bottom: 8px;">
- <a href="{% url registration.views.register %}" >{% trans "create account" %}</a>
- </div>
- <dl style="clear: both;">
-
- <dt><label for="username">{% trans "Pseudo" %}:</label></dt>
- <dd>
- <input class= "inputbox" type="text" style="width:148px" name="username" value="" id="username">
- <div id="login_form_username_error" class="ajaxform_error">{% trans "this field is compulsory" %}</div>
- </dd>
-
-
- <dt><label for="password">{% trans "Password" %}: </label></dt>
- <dd>
- <input class= "inputbox" type="password" style="width:148px" name="password" value="" id="password" >
- <div id="login_form_password_error" class="ajaxform_error">{% trans "this field is compulsory" %}</div>
- </dd>
- <dt/>
- <dd>
- <a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "reset password" %}</a>
- </dd>
- </dl>
- <input class="button" id="submit" type="submit" value="{% trans 'Connection' %}"/>
- </div>
-
- </div>
-</div>
--- a/web/ldt_utils/user/templates/iriuser/user/profile.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# user's profiles(change password, change email) #}
-{% load i18n %}
-{% block iricontent %}
-<ul>
- <li><a href="{% url django.contrib.auth.views.password_change %}" >{% trans "Password change" %}</a></li>
- <li><a href="{% url ldt.user.views.change_email%}">{% trans "Mail change" %}</a></li>
-</ul>
-{% endblock %}
--- a/web/ldt_utils/user/templates/iriuser/user/space.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# user's space (edit page or project lignes de temps) #}
-{% load i18n %}
-{% block breadcrumb %}
- <li></li>
- <li>{% trans "Space" %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans "Space" %}{% endblock %}
-{% block iricontent%}
-<ul>
-{% if cms %}
- <li><a href="{% url admin:page %}">{% trans "Page" %}</a></li>
-{% endif %}
-{% if ldt %}
- <li><a href="{% url ldt.ldt.views.list_ldt %}">{% trans "Projets Lignes de temps" %}</a></li>
-{% endif %}
-</ul>
-{% endblock %}
--- a/web/ldt_utils/user/templates/iriuser/user/user_base.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-{% extends "base.html" %}
-{# this page inherit base html, all pages of ldt inherit this page. #}
-{# all contents are writed in the "iricontent" block #}
-{% load i18n %}
-{% block js_import %}{{ block.super }}
-{% endblock %}
-{% block css_import %}{{ block.super }}
-{% endblock%}
-
-
-{% block content %}
- <div id="iri-user-content">
- {% block iricontent %}{% endblock %}
- </div>
-{% endblock%}
--- a/web/ldt_utils/user/templates/registration/activate.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block breadcrumb %}
- <li></li>
- <li>{% trans "Activate account" %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans 'Activate account' %}{% endblock %}
-
-{% block iricontent %}
-<p>{% trans "You have activated your account" %}</p>
-<a href="{% url django.contrib.auth.views.login%}">{% trans "Go back to login page" %}</a>
-{% endblock %}
\ No newline at end of file
--- a/web/ldt_utils/user/templates/registration/activation_complete.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block content_title %}{% trans 'Sign up successfully' %}{% endblock %}
-{% block iricontent %}
-<p> {% trans "activation completed" %}</p>
-
-{% endblock%}
--- a/web/ldt_utils/user/templates/registration/activation_email.txt Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-Pour confirmer que ce compte vous appartient vraiment et afin
-d’activer les fonctions,
-veuillez suivre ce lien dans votre navigateur dans {{expiration_days}} jours:
-http://{{site }}{% url registration.views.activate activation_key %}
\ No newline at end of file
--- a/web/ldt_utils/user/templates/registration/activation_email_subject.txt Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Confirmation d’adresse de email pour ldt
\ No newline at end of file
--- a/web/ldt_utils/user/templates/registration/base.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{% block js_import %}{{ block.super }}
-{% endblock %}
-{% block css_import %}
-{{ block.super }}
- <style type="text/css">
- label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
- </style>
-{% endblock %}
-{% block pageclass %}profile{% endblock %}
--- a/web/ldt_utils/user/templates/registration/logged_out.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-<a href="../">{% trans 'Home' %}</a>
-
-{% block iricontent %}
-
-<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
-
-<p><a href="../">{% trans 'Log in again' %}</a></p>
-
-{% endblock %}
--- a/web/ldt_utils/user/templates/registration/login.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% block js_declaration %}{{ block.super }}
- <script type="text/javascript">
- $(document).ready(function() {
- $("#login-form").validate();
- });
- </script>
-{% endblock %}
-
-{% block login %}
-{% endblock %}
-
-{% block content_title %}{% trans 'Log in' %}{% endblock %}
-{% block iricontent %}
- {% if form.errors %}
- <p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
- {% endif %}
-
- <form action="" method='post' id="login-form">
- {% csrf_token %}
- <input type="hidden" name="next" value="{% url ldt.user.views.profile%}" />
- <ul id="login_fields_list">
- {{form.as_ul}}
- <li><input class="button"type="submit" value="{% trans "login" %}" /></li>
- </ul>
- </form>
- <ul id="login_links_list">
- <li><a href="{% url registration.views.register %}" >{% trans "Create an account" %}</a></li>
- <li><a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "Forget password?" %}</a></li>
- </ul>
-{% endblock %}
-
-
-
--- a/web/ldt_utils/user/templates/registration/password_change_done.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% block title %}{% trans 'password change successful' %}{% endblock %}
-
-{% block breadcrumb %}
- <li></li>
- <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
- <li>{% trans "password change" %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans "password change successful" %}{% endblock %}
-{% block iricontent %}
-
-<p>{% trans 'Your password has been changed.' %}</p>
-<a href="{% url ldt.user.views.profile %}">{% trans 'Go back to profiles' %}</a>
-
-{% endblock %}
--- a/web/ldt_utils/user/templates/registration/password_change_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% block js_import %}{{ block.super }}
-
- <script type="text/javascript">
- $(document).ready(function() {
- $("#pwd_change_form").validate();
- });
- </script>
-{% endblock %}
-{% block breadcrumb %}
- <li></li>
- <li><a href="{% url ldt.user.views.profile %}">{% trans "Profiles" %}</a></li>
- <li>{% trans 'Password change' %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans 'Password change' %}{% endblock %}
-{% block iricontent %}
-
-<p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
-
-<form action="" method="post" id="pwd_change_form">
- <table cellspacing="10px">
-
- <tr>
- <td><label for="id_old_password">{% trans 'Old password:' %}</label></td>
- <td><input id="id_old_password" name="old_password" type="password" class="required"/></td>
- <td>{{ form.old_password.errors }}</td>
- </tr>
-
- <tr>
- <td><label for="id_new_password1">{% trans 'New password:' %}</label></td>
- <td><input id="id_new_password1" type="password" name="new_password1" class="required"/></td>
- <td>{{ form.new_password1.errors }}</td>
- </tr>
-
- <tr>
- <td><label for="id_new_password2">{% trans 'Confirm password:' %}</label></td>
- <td><input id="id_new_password2" type="password" name="new_password2" class="required"/></td>
- <td>{{ form.new_password2.errors }}</td>
- </tr>
- </table>
-
- <input type="submit" class="button" value="{% trans 'Change my password' %}"/>
-</form>
-
-{% endblock %}
--- a/web/ldt_utils/user/templates/registration/password_reset_complete.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block breadcrumb %}
- <li></li>
- <li>{% trans 'Password reset' %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans 'Password reset complete' %}{% endblock %}
-{% block iricontent %}
-
-<p>{% trans "Your password has been set. You may go ahead and log in now." %}</p>
-
-<p><a href="{{ login_url }}">{% trans 'Log in' %}</a></p>
-
-{% endblock %}
\ No newline at end of file
--- a/web/ldt_utils/user/templates/registration/password_reset_confirm.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block breadcrumb %}
- <li></li>
- <li>{% trans 'Password reset' %}</li>
-{% endblock %}
-
-{% block content_title %}{% trans 'Password reset' %}{% endblock %}
-
-{% block iricontent %}
-
-{% if validlink %}
-
-<p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
-
-<form action="" method="post">
-{{ form.new_password1.errors }}
-<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
-{{ form.new_password2.errors }}
-<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
-<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
-</form>
-
-{% else %}
-
-<h1>{% trans 'Password reset unsuccessful' %}</h1>
-
-<p>{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
-
-{% endif %}
-
-{% endblock %}
--- a/web/ldt_utils/user/templates/registration/password_reset_done.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block breadcrumb %}
- <li></li>
- <li>{% trans 'Password reset' %}</li>
-{% endblock %}
-{% block content_title %}{% trans 'Password reset successful' %}{% endblock %}
-
-{% block iricontent %}
-
-<p>{% trans "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly." %}</p>
-
-{% endblock %}
--- a/web/ldt_utils/user/templates/registration/password_reset_email.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-{% load i18n %}{% autoescape off %}
-{% trans "You're receiving this e-mail because you requested a password reset" %}
-{% blocktrans %}for your user account at {{ site_name }}{% endblocktrans %}.
-
-{% trans "Please go to the following page and choose a new password:" %}
-{% block reset_link %}
-{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %}
-{% endblock %}
-{% trans "Your username, in case you've forgotten:" %} {{ user.username }}
-
-{% trans "Thanks for using our site!" %}
-
-{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
-
-{% endautoescape %}
--- a/web/ldt_utils/user/templates/registration/password_reset_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% block js_import %}{{ block.super }}
- <script type="text/javascript">
- $(document).ready(function() {
- $("#pwd_reset_form").validate();
- });
- </script>
-{% endblock %}
-
-{% block breadcrumb %}
- <li></li>
- <li>{% trans 'Password reset' %}</li>
-{% endblock %}
-{% block content_title %}{% trans 'Password reset' %}{% endblock %}
-
-
-{% block title %}{% trans "Password reset" %}{% endblock %}
-
-{% block iricontent%}
-
-<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>
-
-<form action="" method="post" id="pwd_reset_form">
-<table>
- <tr>
- <th><label for="id_email">{% trans 'Adresse émail' %}:</label></th>
- <td><input id="id_email" type="text" maxlength="75" class="required" name="email"/></td>
-
- </tr>
- <tr><td></td><td>{{ form.email.errors }}</td></tr>
- <tr><td></td><td><input type="submit" class="button" value="{% trans 'Reset my password' %}" /></td></tr>
-</table>
-</form>
-
-{% endblock %}
--- a/web/ldt_utils/user/templates/registration/registration_active.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% block breadcrumb %}
- <li></li>
- <li>{% trans 'Activate the account' %}</li>
-{% endblock %}
-{% block content_title %}{% trans 'Activate the account' %}{% endblock %}
-{% block iricontent%}
-<p> {% trans 'Vous avez bien activé votre compte, vous pouvez accedez à votre espace personnel.' %}</p>
-<a href="{ url django.contrib.auth.views.login }">{% trans 'retourner à la page de connexion' %}</a>
-{% endblock %}
\ No newline at end of file
--- a/web/ldt_utils/user/templates/registration/registration_complete.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block breadcrumb %}
- <li></li>
- <li>{% trans 'Sign up' %}</li>
-{% endblock %}
-{% block content_title %}{% trans 'Sign up successfully' %}{% endblock %}
-{% block iricontent %}
-<p> {% trans "We've e-mailed you instructions for activate your account to the e-mail address you submitted. You should be receiving it shortly." %}</p>
-
-{% endblock%}
\ No newline at end of file
--- a/web/ldt_utils/user/templates/registration/registration_form.html Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% block js_import %}{{ block.super }}
- <script type="text/javascript">
- $(document).ready(function() {
- $("#signup_form").validate();
- });
- </script>
-{% endblock %}
-
-{% block content_title %}{% trans 'Sign up' %}{% endblock %}
-{% block iricontent%}
-<form class="signupform" id="signup_form" method="post" action=""> {% csrf_token %}
- <ul>
-{{form.as_ul}}
- <li><input class="button" type="submit" value="{% trans 'Save' %} "/></li>
- </ul>
-</form>
-
-{% endblock%}
--- a/web/ldt_utils/user/templatetags/logintag.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-from django import template
-from django.template.loader import get_template
-
-register = template.Library()
-
-def loginAjax(user, reload=None):
- return {'user': user, 'reload': reload}
-
-register.inclusion_tag('ldt/user/login_form.html')(loginAjax)
--- a/web/ldt_utils/user/tests.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-"""
-This file demonstrates two different styles of tests (one doctest and one
-unittest). These will both pass when you run "manage.py test".
-
-Replace these with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.failUnlessEqual(1 + 1, 2)
-
-__test__ = {"doctest": """
-Another way to test that 1 + 1 is equal to 2.
-
->>> 1 + 1 == 2
-True
-"""}
-
--- a/web/ldt_utils/user/urls.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('',
- url(r'^loginAjax/$', 'ldt.user.views.loginAjax'),
- url(r'^profile/', 'ldt.user.views.profile'),
- url(r'^logout/', 'ldt.user.views.logout_view'),
- url(r'^space/$', 'ldt.user.views.space'),
- url(r'^emailchange/$', 'ldt.user.views.change_email'),
- url(r'^emailchange/done/$', 'ldt.user.views.change_email_done'),
-# url(r'^space/ldt/$', 'ldt.ldt_utils.views.list_ldt'),
-# url(r'^space/ldt/indexproject/(?P<id>.*)$', 'ldt.ldt_utils.views.indexProject'),
-# url(r'^space/ldt/init/(?P<method>.*)/(?P<url>.*)$', 'ldt.ldt_utils.views.init'),
-# url(r'^space/ldt/project/(?P<id>.*)$', 'ldt.ldt_utils.views.ldtProject'),
-# url(r'^space/ldt/create/$', 'ldt.ldt_utils.views.create_ldt_view'),
-# url(r'^space/ldt/created_done/$', 'ldt.ldt_utils.views.created_ldt'),
-# url(r'^space/ldt/save/$', 'ldt.ldt_utils.views.save_ldtProject'),
-# url(r'^space/ldt/publish/(?P<id>.*)$', 'ldt.ldt_utils.views.publish'),
-# url(r'^space/ldt/unpublish/(?P<id>.*)$', 'ldt.ldt_utils.views.unpublish'),
-)
--- a/web/ldt_utils/user/views.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-from django.conf import settings
-from django.http import HttpResponse, HttpResponseRedirect
-from django.shortcuts import render_to_response
-from django.contrib.auth import authenticate, login, logout
-from django.contrib.auth.decorators import login_required
-# from django.contrib.sites.models import Site, RequestSite
-from django.template import RequestContext, Context, loader
-from django.utils.translation import ugettext as _
-from django.core.urlresolvers import reverse
-from forms import EmailChangeForm
-from django.utils import simplejson
-from ldt.management import test_cms, test_ldt
-
-
-def home(request):
- return render_to_response('ldt/user/home.html',context_instance=RequestContext(request))
-
-@login_required
-def profile(request):
- return render_to_response('ldt/user/profile.html', context_instance=RequestContext(request))
-
-@login_required
-def space(request, page_id=None, slug=None):
- cms = test_cms()
- ldt = test_ldt()
- context={
- 'cms': cms,
- 'ldt': ldt
- }
- return render_to_response('ldt/user/space.html', context, context_instance=RequestContext(request))
-
-
-
-def logout_view(request):
- logout(request)
- # return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
- return HttpResponseRedirect(settings.LOGOUT_URL)
-
-
-def loginAjax(request, loginstate_template_name='ldt/user/login_form.html'):
- if request.method == "POST":
- username=request.POST["username"]
- password=request.POST["password"]
- user = authenticate(username=username, password=password)
- error_message = _(u"Sorry, that's not a valid username or password.")
- if user is not None:
- if user.is_active:
- login(request, user)
- context = RequestContext(request, { 'username': user.username,})
- template = loader.get_template(loginstate_template_name)
- html = template.render(context)
- return HttpResponse(simplejson.dumps({'message': u'successful', 'username': user.username, 'html': html, 'reload': request.POST["reload"],}))
- else:
- return HttpResponse(simplejson.dumps({'message': error_message,}))
- else:
- return HttpResponse(simplejson.dumps({'message': error_message,}))
- return render_to_response('ldt/user/login_ajax.html', context_instance=RequestContext(request))
-
-@login_required
-def change_email(request, post_change_redirect=None):
- if post_change_redirect is None:
- post_change_redirect = reverse('ldt.user.views.change_email_done')
- if request.method == "POST":
- form = EmailChangeForm(request.user, request.POST)
- if form.is_valid():
- form.save()
- return HttpResponseRedirect(post_change_redirect)
- else:
- form = EmailChangeForm(request.user)
- return render_to_response('ldt/user/change_email.html', {'form': form,}, context_instance=RequestContext(request))
-
-@login_required
-def change_email_done(request, template_name='ldt/user/change_email_done.html'):
- return render_to_response(template_name, context_instance=RequestContext(request))
-
--- a/web/ldt_utils/utils/__init__.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
--- a/web/ldt_utils/utils/context_processors.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-from django.conf import settings
-
-def ldt(request):
- return {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX }
--- a/web/ldt_utils/utils/xml.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-def getText(anode):
- nodelist = anode.childNodes
- rc = ""
- for node in nodelist:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc
\ No newline at end of file
--- a/web/ldt_utils/utils/zipfileext.py Tue Jun 08 15:31:42 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-import zipfile, os, os.path
-
-class ZipFileExt(zipfile.ZipFile):
- def unzip_into_dir(self, dir):
- if not os.path.exists(dir):
- os.mkdir(dir, 0777)
- for name in self.namelist():
- if name.endswith('/'):
- os.mkdir(os.path.join(dir,name))
- else:
- outfile = open(os.path.join(dir,name), 'wb')
- outfile.write(self.read(name))
- outfile.close()
-