added stuff to tree
2
itf/.bzrignore
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
settings.py
|
||||||
|
.bzrlog
|
64
itf/README.txt
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
db name = 'theatre' - change if different.
|
||||||
|
|
||||||
|
Install Solango:
|
||||||
|
svn checkout http://django-solr-search.googlecode.com/svn/trunk/ django-solr-search
|
||||||
|
cd django-solr-search
|
||||||
|
sudo python setup.py install
|
||||||
|
|
||||||
|
You will also need to install Solr, follow instructions here:
|
||||||
|
http://www.screeley.com/djangosolr/install.html#install
|
||||||
|
|
||||||
|
Install Django-Multilingual:
|
||||||
|
svn checkout http://django-multilingual.googlecode.com/svn/trunk/ django-multilingual
|
||||||
|
cd django-multilingual
|
||||||
|
sudo python setup.py install
|
||||||
|
|
||||||
|
Install Djangologging for debugging (svn checkout http://django-logging.googlecode.com/svn/trunk/ django-logging-read-only):
|
||||||
|
svn checkout http://django-logging.googlecode.com/svn/trunk/ django-logging-read-only djangologging
|
||||||
|
sudo mv djangologging/ /var/lib/python-support/python2.6/
|
||||||
|
|
||||||
|
For Django-Extensions and Graphing Tool:
|
||||||
|
sudo apt-get install graphviz graphviz-dev
|
||||||
|
sudo easy_install pygraphviz
|
||||||
|
Download and install django_extensions: http://code.google.com/p/django-command-extensions/downloads/list
|
||||||
|
Add django_extensions to your INSTALLED_APPS in settings.py
|
||||||
|
Command to generate PNG visualization of your models: ./manage.py graph_models -a -g -o my_project_visualized.png
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mysqld --verbose --help | grep character-set
|
||||||
|
|
||||||
|
You’ll probably see:
|
||||||
|
|
||||||
|
character-set-server latin1
|
||||||
|
|
||||||
|
You want this to be uft8. To modify it, edit your my.conf file ( /etc/mysql/my.conf on ubuntu ), adding the following lines to the appropriate sections:
|
||||||
|
|
||||||
|
[client]
|
||||||
|
…
|
||||||
|
default-character-set = utf8
|
||||||
|
|
||||||
|
[mysqld]
|
||||||
|
…
|
||||||
|
character-set-server=utf8
|
||||||
|
collation-server=utf8_unicode_ci
|
||||||
|
init_connect=’set collation_connection = utf8_unicode_ci;’
|
||||||
|
|
||||||
|
Now restart mysql:
|
||||||
|
|
||||||
|
|
||||||
|
sudo /etc/init.d/mysql restart
|
||||||
|
|
||||||
|
And alter your existing tables to use the utf8 encoding:
|
||||||
|
|
||||||
|
|
||||||
|
mysql your_db_name
|
||||||
|
|
||||||
|
alter table your_table_name convert to character set utf8;
|
||||||
|
|
||||||
|
And that should do it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
0
itf/__init__.py
Executable file
97
itf/aldensNotes.txt
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
new todos:
|
||||||
|
|
||||||
|
|
||||||
|
1. All headings/titles are centered right now. Would be nice if they could be left alligned to the paragraph.
|
||||||
|
|
||||||
|
Headings (h1 I guess?) should not be center-aligned by default.
|
||||||
|
|
||||||
|
|
||||||
|
2. All headings are bold. I thought they were looking better not bold. Only when they are selected they should get bold.
|
||||||
|
|
||||||
|
Maybe ignore this for now since I dont know wtf she means.
|
||||||
|
|
||||||
|
|
||||||
|
3. it would look noce if the space where the scrolling starts (in the central box) if we could have a larger margin above and below. Sanjay, I know i'm being unclear... I can explain this on the phone.
|
||||||
|
|
||||||
|
No. this is not possible.
|
||||||
|
|
||||||
|
|
||||||
|
4. The 2 titles - Welcome to.... and About us could start at the same level and that could also be the scroll margin.
|
||||||
|
|
||||||
|
I think I did this.
|
||||||
|
|
||||||
|
|
||||||
|
5. We could also have larger margins on the left and right of both the text boxes?
|
||||||
|
|
||||||
|
I think she refers to increasing the left and right padding on center and right boxes.
|
||||||
|
|
||||||
|
|
||||||
|
6. Inside MEETINGS all the text has become another font.
|
||||||
|
|
||||||
|
Inside tabs, all fonts have gone weird. Maybe look at the jquery-ui stylesheet to debug.
|
||||||
|
|
||||||
|
|
||||||
|
7. The tags could loose the orange outline if it's not a major problem.
|
||||||
|
|
||||||
|
Again - see if you can make this go away - but not sure if there's a solution.
|
||||||
|
|
||||||
|
|
||||||
|
8. In the pre-reading section all allignments are shifted
|
||||||
|
|
||||||
|
Fixed.
|
||||||
|
|
||||||
|
+ remove the jquery.mousewheel.js and jScrollPane js and css files as we are not using them .
|
||||||
|
|
||||||
|
+ Figure ordering meetings by date, and sending dateStart and dateEnd of meetings as context vars to meetings page .
|
||||||
|
|
||||||
|
That's all I can think of for now.
|
||||||
|
|
||||||
|
Cheers,
|
||||||
|
Sanj
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(09:25:50 IST) b@pad.ma: 1> Plugin text for about / intro / static pages.
|
||||||
|
(09:25:57 IST) b@pad.ma: 2> Change tabs design.
|
||||||
|
(09:26:34 IST) b@pad.ma: 3> Move / style email signup, for me, change the JS around to go with new design .
|
||||||
|
(09:27:20 IST) b@pad.ma: 4> Handle hover states for meetings, projects, and participants lists.
|
||||||
|
(09:28:13 IST) b@pad.ma: 5> Todo for me: Make video page.
|
||||||
|
(09:29:46 IST) b@pad.ma: 6> Replace current jquery-ui,js with a custom download of just the components we need.
|
||||||
|
(09:31:53 IST) b@pad.ma: 7> Update urls and all, push to server.
|
||||||
|
(09:31:58 IST) b@pad.ma: Nice to haves:
|
||||||
|
(09:32:13 IST) b@pad.ma: 1> Have the currently selected page button show up as selected on the left nav.
|
||||||
|
(09:32:21 IST) b@pad.ma: 2> Have the custom scrollbar images done .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DEADLINES:
|
||||||
|
|
||||||
|
10th - finalize site structure and functionality
|
||||||
|
15th - launch.
|
||||||
|
16th - meeting for eRang
|
||||||
|
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
|
||||||
|
tell sharvari for now, not to use inline fields for attaching images/docs/vids/audio to talks. use non-inline method instead.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
|
||||||
|
1) view for upcoming meetings, ordered by meeting day.
|
||||||
|
2) frontend js to receive upcoming meetings, populate accordion
|
||||||
|
3) recreate jquery-custom package
|
||||||
|
|
||||||
|
|
||||||
|
nm = MeetingDay.objects.filter(meeting_date__gte=date.today).order_by('meeting_date')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bzr push lp:~campmumbai/+junk/itf0-1
|
20
itf/dropandcreatedb.py
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from settings import DATABASE_NAME
|
||||||
|
|
||||||
|
try:
|
||||||
|
import settings # Assumed to be in the same directory.
|
||||||
|
except ImportError:
|
||||||
|
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
filename = "/tmp/tmp.txt"
|
||||||
|
tmpfile = open(filename, "w")
|
||||||
|
tmpfile.write("DROP DATABASE %s;\nCREATE DATABASE %s;\n" % (DATABASE_NAME, DATABASE_NAME) )
|
||||||
|
tmpfile.close()
|
||||||
|
|
||||||
|
os.system("mysql -u root < " + filename)
|
||||||
|
os.system("python manage.py syncdb --noinput")
|
||||||
|
os.system("python manage.py createsuperuser --username admin --email user@user.com")
|
||||||
|
|
||||||
|
|
0
itf/erang/__init__.py
Normal file
22
itf/erang/models.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
class Issue(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
date = models.DateField()
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Article(models.Model):
|
||||||
|
author = models.ForeignKey("Contributor", blank=True, null=True)
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
text = models.TextField()
|
||||||
|
issue = models.ForeignKey(Issue)
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title + " - " + self.author
|
||||||
|
|
||||||
|
class Contributor(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
email = models.EmailField(blank=True, null=True)
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name + ": " + self.email
|
||||||
|
|
23
itf/erang/tests.py
Normal file
|
@ -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
|
||||||
|
"""}
|
||||||
|
|
1
itf/erang/views.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Create your views here.
|
0
itf/festival/__init__.py
Normal file
83
itf/festival/admin.py
Executable file
|
@ -0,0 +1,83 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from models import *
|
||||||
|
|
||||||
|
class AudioInline(admin.StackedInline):
|
||||||
|
model = Audio
|
||||||
|
extra = 2
|
||||||
|
|
||||||
|
class ImageInline(admin.StackedInline):
|
||||||
|
model = Image
|
||||||
|
extra = 3
|
||||||
|
|
||||||
|
class DocumentInline(admin.StackedInline):
|
||||||
|
model = Document
|
||||||
|
extra = 2
|
||||||
|
|
||||||
|
class TalkAdmin(admin.ModelAdmin):
|
||||||
|
inlines = [AudioInline, ImageInline, DocumentInline]
|
||||||
|
save_on_top = True
|
||||||
|
list_display = ('__unicode__', 'presenter', 'session',)
|
||||||
|
list_filter = ['session']
|
||||||
|
search_fields = ('title', 'intro', 'presenter',)
|
||||||
|
#hide meeting field
|
||||||
|
|
||||||
|
class MeetingDayInline(admin.StackedInline):
|
||||||
|
model = MeetingDay
|
||||||
|
extra = 3
|
||||||
|
|
||||||
|
class ParticipantInline(admin.StackedInline):
|
||||||
|
model = Participant
|
||||||
|
extra = 3
|
||||||
|
|
||||||
|
class MeetingAdmin(admin.ModelAdmin):
|
||||||
|
inlines = [MeetingDayInline, ImageInline, DocumentInline, ParticipantInline]
|
||||||
|
prepopulated_fields = {"slug": ("title",)}
|
||||||
|
save_on_top = True
|
||||||
|
|
||||||
|
class ProjectAdmin(admin.ModelAdmin):
|
||||||
|
prepopulated_fields = {"slug": ("title",)}
|
||||||
|
save_on_top = True
|
||||||
|
|
||||||
|
class SessionAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('title', 'intro',)
|
||||||
|
list_filter = ['day']
|
||||||
|
list_display = ('__unicode__',)
|
||||||
|
|
||||||
|
class ParticipantAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('title', 'short_bio',)
|
||||||
|
list_display = ('name', 'title', 'meeting',)
|
||||||
|
list_filter = ['meeting']
|
||||||
|
|
||||||
|
class CommentAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('__unicode__', 'is_displayed',)
|
||||||
|
list_editable = ('is_displayed',)
|
||||||
|
list_filter = ['meeting']
|
||||||
|
|
||||||
|
class SignupAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('email',)
|
||||||
|
|
||||||
|
class ImageAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('title', 'intro',)
|
||||||
|
list_filter = ['meeting', 'talk']
|
||||||
|
|
||||||
|
class AudioAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('title', 'intro',)
|
||||||
|
list_filter = ['meeting', 'talk']
|
||||||
|
|
||||||
|
class VideoAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('title', 'intro',)
|
||||||
|
list_filter = ['meeting', 'talk']
|
||||||
|
|
||||||
|
admin.site.register(Comment, CommentAdmin)
|
||||||
|
admin.site.register(Meeting, MeetingAdmin)
|
||||||
|
admin.site.register(Audio, AudioAdmin)
|
||||||
|
admin.site.register(Video, VideoAdmin)
|
||||||
|
admin.site.register(Image, ImageAdmin)
|
||||||
|
admin.site.register(Document)
|
||||||
|
admin.site.register(Project, ProjectAdmin)
|
||||||
|
#admin.site.register(MeetingDay)
|
||||||
|
admin.site.register(Session, SessionAdmin)
|
||||||
|
admin.site.register(Talk, TalkAdmin)
|
||||||
|
admin.site.register(Participant, ParticipantAdmin)
|
||||||
|
admin.site.register(Signup, SignupAdmin)
|
||||||
|
admin.site.register(CommentCaptcha)
|
11
itf/festival/forms.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
from django import forms
|
||||||
|
from models import Comment
|
||||||
|
|
||||||
|
class MeetingCommentForm(forms.ModelForm):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Comment
|
||||||
|
exclude = ['is_displayed', 'meeting', 'parent', 'posted_date']
|
||||||
|
|
||||||
|
|
132
itf/festival/models.py
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
from django.db import models
|
||||||
|
import datetime
|
||||||
|
import time
|
||||||
|
|
||||||
|
class Comment(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
email = models.EmailField(max_length=255)
|
||||||
|
comment = models.TextField()
|
||||||
|
is_displayed = models.BooleanField(default=True)
|
||||||
|
meeting = models.ForeignKey('Meeting')
|
||||||
|
parent = models.ForeignKey('Comment', default=0, related_name='child')
|
||||||
|
posted_date = models.DateTimeField(default=datetime.datetime.now())
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s by %s on %s" % (self.comment, self.name, self.posted_date,)
|
||||||
|
|
||||||
|
def epoch_date(self):
|
||||||
|
return time.mktime(self.posted_date.timetuple())
|
||||||
|
|
||||||
|
|
||||||
|
class CommentCaptcha(models.Model):
|
||||||
|
question = models.CharField(max_length=500)
|
||||||
|
answer = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.question
|
||||||
|
|
||||||
|
#Not using this class right now - but use this as a constant reminder ...
|
||||||
|
# class CommentVote(models.Model):
|
||||||
|
|
||||||
|
|
||||||
|
class Meeting(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
slug = models.SlugField()
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Participant(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
title = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
short_bio = models.TextField(max_length=255, blank=True, null=True)
|
||||||
|
meeting = models.ForeignKey('Meeting')
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Talk(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
presenter = models.CharField(max_length=255)
|
||||||
|
session = models.ForeignKey('Session') # name of meeting - name of session
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s - %s" % (self.session.day.meeting.title, self.title) # name of meeting - name of session
|
||||||
|
|
||||||
|
class Session(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
day = models.ForeignKey('MeetingDay')
|
||||||
|
session_no = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s - %s" % (self.day.meeting.title, self.title) # name of meeting - name of session
|
||||||
|
|
||||||
|
class MeetingDay(models.Model):
|
||||||
|
meeting = models.ForeignKey('Meeting')
|
||||||
|
meeting_date = models.DateField()
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s - %s" % (self.meeting, self.meeting_date)
|
||||||
|
|
||||||
|
class Audio(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
file = models.FileField(upload_to='upload/audio')
|
||||||
|
meeting = models.ForeignKey('Meeting', blank=True, null=True)
|
||||||
|
talk = models.ForeignKey('Talk', blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name_plural = "Audio"
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Video(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
file = models.FileField(upload_to='upload/video')
|
||||||
|
meeting = models.ForeignKey('Meeting', blank=True, null=True)
|
||||||
|
talk = models.ForeignKey('Talk', blank=True, null=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Image(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
file = models.FileField(upload_to='upload/images')
|
||||||
|
meeting = models.ForeignKey('Meeting', blank=True, null=True)
|
||||||
|
talk = models.ForeignKey('Talk', blank=True, null=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Document(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
file = models.FileField(upload_to='upload/docs')
|
||||||
|
meeting = models.ForeignKey('Meeting', blank=True, null=True)
|
||||||
|
talk = models.ForeignKey('Talk', blank=True, null=True)
|
||||||
|
is_resource = models.BooleanField()
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Project(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
intro = models.TextField(blank=True, null=True)
|
||||||
|
start_date = models.DateField(blank=True, null=True)
|
||||||
|
end_date = models.DateField(blank=True, null=True)
|
||||||
|
slug = models.SlugField()
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Signup(models.Model):
|
||||||
|
email = models.EmailField()
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.email
|
23
itf/festival/tests.py
Normal file
|
@ -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
|
||||||
|
"""}
|
||||||
|
|
8
itf/festival/utils.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import re
|
||||||
|
|
||||||
|
def validateEmail(email):
|
||||||
|
|
||||||
|
if len(email) > 7:
|
||||||
|
if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None:
|
||||||
|
return 1
|
||||||
|
return 0
|
178
itf/festival/views.py
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
# Create your views here.
|
||||||
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from festival.models import *
|
||||||
|
from utils import validateEmail
|
||||||
|
from forms import MeetingCommentForm
|
||||||
|
import random
|
||||||
|
try:
|
||||||
|
import json
|
||||||
|
except:
|
||||||
|
import simplejson as json
|
||||||
|
from django.core.mail import send_mail
|
||||||
|
|
||||||
|
def index(request):
|
||||||
|
index_data = {}
|
||||||
|
new_meetings = MeetingDay.objects.all().order_by('-meeting_date')[:5] # get 5 latest meetings
|
||||||
|
projects = Project.objects.all().order_by('start_date')
|
||||||
|
|
||||||
|
index_data['latest_meetings'] = new_meetings
|
||||||
|
index_data['projects'] = projects
|
||||||
|
|
||||||
|
return render_to_response("festival_index.html", { 'data' : index_data })
|
||||||
|
|
||||||
|
|
||||||
|
def meeting_details(request, meeting_id):
|
||||||
|
meeting_data = {}
|
||||||
|
meeting_data['meeting'] = get_object_or_404(Meeting, id=meeting_id)
|
||||||
|
# meeting_data['sessions'] = Session.objects.filter(day__meeting__id=meeting_id) # get meetings session objs
|
||||||
|
meeting_data['talks'] = Talk.objects.filter(session__day__meeting__id=meeting_id)
|
||||||
|
meeting_data['images'] = Image.objects.filter(meeting__id=meeting_id)
|
||||||
|
meeting_data['sessions'] = Session.objects.filter(day__meeting__id=meeting_id).order_by("day").order_by("session_no")
|
||||||
|
meeting_data['documents'] = Document.objects.filter(meeting__id=meeting_id).exclude(talk__isnull=False)
|
||||||
|
meeting_data['comments'] = Comment.objects.filter(meeting__id=meeting_id).exclude(is_displayed=False)
|
||||||
|
captcha_length = CommentCaptcha.objects.all().count()
|
||||||
|
random_captcha = random.randint(1,captcha_length)
|
||||||
|
captcha = CommentCaptcha.objects.get(pk=random_captcha)
|
||||||
|
captcha_d = {
|
||||||
|
'question': captcha.question,
|
||||||
|
'id': captcha.id
|
||||||
|
}
|
||||||
|
|
||||||
|
for s in meeting_data['sessions']:
|
||||||
|
s.talks = Talk.objects.select_related('image', 'audio', 'document').filter(session__id=s.id)
|
||||||
|
for t in s.talks:
|
||||||
|
t.images = Image.objects.filter(talk__id=t.id)
|
||||||
|
t.documents = Document.objects.filter(talk__id=t.id)
|
||||||
|
t.audio = Audio.objects.filter(talk__id=t.id)
|
||||||
|
t.video = Video.objects.filter(talk__id=t.id)
|
||||||
|
|
||||||
|
meeting_data['imagegallery'] = Image.objects.filter(meeting__id=meeting_id)
|
||||||
|
meeting_data['participants'] = Participant.objects.filter(meeting__id=meeting_id).order_by('name')
|
||||||
|
comment_form = MeetingCommentForm()
|
||||||
|
return render_to_response("meeting.html", { 'data' : meeting_data, 'comment_form': comment_form, 'id': meeting_id, 'captcha': captcha_d })
|
||||||
|
|
||||||
|
def meetings(request):
|
||||||
|
meetings = list(Meeting.objects.all())
|
||||||
|
for m in meetings:
|
||||||
|
m.dates = MeetingDay.objects.filter(meeting__id=m.id).order_by('-meeting_date')
|
||||||
|
m.end_date = m.dates[0].meeting_date
|
||||||
|
m.start_date = m.dates[len(m.dates) - 1].meeting_date
|
||||||
|
|
||||||
|
meetings.sort(sort_meetings)
|
||||||
|
|
||||||
|
return render_to_response("meetings.html", {'meetings': meetings})
|
||||||
|
|
||||||
|
|
||||||
|
def meeting_comment(request):
|
||||||
|
if request.GET.has_key('captcha') and request.is_ajax():
|
||||||
|
captcha_answer = str(request.GET['captcha']).strip()
|
||||||
|
captcha_id = int(request.GET['captcha_id'])
|
||||||
|
captcha_obj = CommentCaptcha.objects.get(pk=captcha_id)
|
||||||
|
correct_answer = str(captcha_obj.answer).strip()
|
||||||
|
# print captcha_answer.lower + " " + correct_answer
|
||||||
|
if correct_answer.lower() != captcha_answer.lower():
|
||||||
|
r = {
|
||||||
|
'status': 0,
|
||||||
|
'msg': 'Please answer the question in the box correctly. Thanks.'
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
comment_form = MeetingCommentForm(request.GET)
|
||||||
|
if comment_form.is_valid():
|
||||||
|
c = comment_form.save(commit=False)
|
||||||
|
meeting_id = int(request.GET['meeting_id'])
|
||||||
|
meeting_obj = Meeting.objects.get(pk=meeting_id)
|
||||||
|
c.meeting = meeting_obj
|
||||||
|
c.save()
|
||||||
|
r = {
|
||||||
|
'status': 1,
|
||||||
|
'msg': 'Comment saved.'
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
#TODO: Pass validation errors properly accessing form.errors
|
||||||
|
r = {
|
||||||
|
'status': 0,
|
||||||
|
'msg': 'Please enter a valid email address. We will never display it publicly, sell it, or use it to send you unsolicited email. Thanks.'
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
r = {
|
||||||
|
'status': 0,
|
||||||
|
'msg': 'Please answer the question in the box correctly. Thanks.'
|
||||||
|
}
|
||||||
|
return HttpResponse(json.dumps(r), mimetype="application/json")
|
||||||
|
|
||||||
|
def sort_meetings(m1, m2):
|
||||||
|
if m1.start_date < m2.end_date:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def wireframe(request):
|
||||||
|
return render_to_response("festival_wireframe.html")
|
||||||
|
|
||||||
|
def erang(request):
|
||||||
|
return render_to_response("erang.html")
|
||||||
|
|
||||||
|
def publications(request):
|
||||||
|
return render_to_response("publications.html")
|
||||||
|
|
||||||
|
def surveys(request):
|
||||||
|
return render_to_response("surveys.html")
|
||||||
|
|
||||||
|
def home(request):
|
||||||
|
return render_to_response("home.html")
|
||||||
|
|
||||||
|
|
||||||
|
def projects(request):
|
||||||
|
projects = Project.objects.all();
|
||||||
|
return render_to_response("projects.html", {'projects': projects})
|
||||||
|
|
||||||
|
def resources(request):
|
||||||
|
resources = Document.objects.filter(is_resource=True)
|
||||||
|
return render_to_response("resources.html", {'resources': resources})
|
||||||
|
|
||||||
|
def people(request):
|
||||||
|
participants = Participant.objects.all().order_by('name')
|
||||||
|
|
||||||
|
l = []
|
||||||
|
l2 = []
|
||||||
|
for p in participants:
|
||||||
|
if p.name in l:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
l.append(p.name)
|
||||||
|
l2.append(p)
|
||||||
|
|
||||||
|
participants = l2
|
||||||
|
|
||||||
|
return render_to_response("people.html", {'participants': participants})
|
||||||
|
|
||||||
|
|
||||||
|
def project(request, project_id):
|
||||||
|
project = get_object_or_404(Project, id=project_id)
|
||||||
|
return render_to_response("project.html", {'project': project})
|
||||||
|
|
||||||
|
def save_email(request):
|
||||||
|
email = request.GET['email']
|
||||||
|
if validateEmail(email):
|
||||||
|
t = Signup(email=email)
|
||||||
|
t.save()
|
||||||
|
return HttpResponse("1")
|
||||||
|
else:
|
||||||
|
return HttpResponse("0")
|
||||||
|
|
||||||
|
def email_signups(request):
|
||||||
|
to_emails = ['sanjaybhangar@gmail.com']
|
||||||
|
arr = []
|
||||||
|
for s in Signup.objects.all():
|
||||||
|
arr.append(s.email)
|
||||||
|
eml_list = "\n".join(arr)
|
||||||
|
message_pre = "Someone pinged http://theatreforum.in/emailsharvarialltheemails/ , so here it is: \n\n"
|
||||||
|
message = message_pre + eml_list
|
||||||
|
send_mail("List of Signups on theatreforum.in", message, 'do_not_reply@theatreforum.in', to_emails, fail_silently=False)
|
||||||
|
return HttpResponse("ok")
|
||||||
|
|
||||||
|
def video(request, video_id):
|
||||||
|
video = get_object_or_404(Video, id=video_id)
|
||||||
|
return render_to_response("video.html", {'video': video})
|
||||||
|
|
0
itf/itfcore/__init__.py
Executable file
67
itf/itfcore/admin.py
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from models import *
|
||||||
|
|
||||||
|
#class NicknameInline(admin.StackedInline):
|
||||||
|
# model = Nickname
|
||||||
|
# extra = 3
|
||||||
|
|
||||||
|
#class LinkInlineModelAdmin(admin.InlineModelAdmin):
|
||||||
|
# pass
|
||||||
|
|
||||||
|
#class LinkInline(LinkInlineModelAdmin):
|
||||||
|
# model = Link
|
||||||
|
# extra = 3
|
||||||
|
|
||||||
|
class ProfileInline(admin.StackedInline):
|
||||||
|
model = Profile
|
||||||
|
extra = 1
|
||||||
|
|
||||||
|
class PerformanceAdmin(admin.ModelAdmin):
|
||||||
|
filter_horizontal = ('links', 'images')
|
||||||
|
|
||||||
|
class EventAdmin(admin.ModelAdmin):
|
||||||
|
filter_horizontal = ('links',)
|
||||||
|
|
||||||
|
class ProfileAdmin(admin.ModelAdmin):
|
||||||
|
filter_horizontal = ('links', 'files', 'images',)
|
||||||
|
# inlines = [NicknameInline]
|
||||||
|
# inlines = [LinkInline]
|
||||||
|
|
||||||
|
class VenueAdmin(admin.ModelAdmin):
|
||||||
|
ordering = ('name',)
|
||||||
|
prepopulated_fields = {'slug': ('name',)}
|
||||||
|
filter_horizontal = ('links', 'images')
|
||||||
|
|
||||||
|
class TheatreGroupAdmin(admin.ModelAdmin):
|
||||||
|
prepopulated_fields = {'slug': ('name',)}
|
||||||
|
filter_horizontal = ('links', 'files', 'images')
|
||||||
|
|
||||||
|
class ProductionAdmin(admin.ModelAdmin):
|
||||||
|
prepopulated_fields = {'slug': ('title',)}
|
||||||
|
filter_horizontal = ('links', 'files', 'images',)
|
||||||
|
inlines = [ProfileInline]
|
||||||
|
|
||||||
|
class ScriptAdmin(admin.ModelAdmin):
|
||||||
|
filter_horizontal = ('links', 'downloads')
|
||||||
|
|
||||||
|
|
||||||
|
#admin.site.register(Nickname3)
|
||||||
|
#admin.site.register(Nickname2)
|
||||||
|
admin.site.register(Performance, PerformanceAdmin)
|
||||||
|
admin.site.register(Event, EventAdmin)
|
||||||
|
admin.site.register(Location)
|
||||||
|
admin.site.register(ProfileProfile)
|
||||||
|
admin.site.register(ProfileGroup)
|
||||||
|
admin.site.register(Script, ScriptAdmin)
|
||||||
|
admin.site.register(Production, ProductionAdmin)
|
||||||
|
admin.site.register(Image)
|
||||||
|
admin.site.register(File)
|
||||||
|
admin.site.register(Link)
|
||||||
|
admin.site.register(RandomQuote)
|
||||||
|
admin.site.register(ProfileProduction)
|
||||||
|
admin.site.register(Nickname)
|
||||||
|
admin.site.register(TheatreGroup, TheatreGroupAdmin)
|
||||||
|
admin.site.register(Venue, VenueAdmin)
|
||||||
|
admin.site.register(Profile, ProfileAdmin)
|
||||||
|
|
58
itf/itfcore/fields.py
Executable file
|
@ -0,0 +1,58 @@
|
||||||
|
from django.db import models
|
||||||
|
from django import forms
|
||||||
|
from django.utils.text import capfirst
|
||||||
|
|
||||||
|
class MultiSelectFormField(forms.MultipleChoiceField):
|
||||||
|
widget = forms.CheckboxSelectMultiple
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.max_choices = kwargs.pop('max_choices', 0)
|
||||||
|
super(MultiSelectFormField, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def clean(self, value):
|
||||||
|
if not value and self.required:
|
||||||
|
raise forms.ValidationError(self.error_messages['required'])
|
||||||
|
if value and self.max_choices and len(value) > self.max_choices:
|
||||||
|
raise forms.ValidationError('You must select a maximum of %s choice%s.'
|
||||||
|
% (apnumber(self.max_choices), pluralize(self.max_choices)))
|
||||||
|
return value
|
||||||
|
|
||||||
|
class MultiSelectField(models.Field):
|
||||||
|
__metaclass__ = models.SubfieldBase
|
||||||
|
|
||||||
|
def get_internal_type(self):
|
||||||
|
return "CharField"
|
||||||
|
|
||||||
|
def get_choices_default(self):
|
||||||
|
return self.get_choices(include_blank=False)
|
||||||
|
|
||||||
|
def _get_FIELD_display(self, field):
|
||||||
|
value = getattr(self, field.attname)
|
||||||
|
choicedict = dict(field.choices)
|
||||||
|
|
||||||
|
def formfield(self, **kwargs):
|
||||||
|
# don't call super, as that overrides default widget if it has choices
|
||||||
|
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name),
|
||||||
|
'help_text': self.help_text, 'choices':self.choices}
|
||||||
|
if self.has_default():
|
||||||
|
defaults['initial'] = self.get_default()
|
||||||
|
defaults.update(kwargs)
|
||||||
|
return MultiSelectFormField(**defaults)
|
||||||
|
|
||||||
|
def get_db_prep_value(self, value):
|
||||||
|
if isinstance(value, basestring):
|
||||||
|
return value
|
||||||
|
elif isinstance(value, list):
|
||||||
|
return ",".join(value)
|
||||||
|
|
||||||
|
def to_python(self, value):
|
||||||
|
if isinstance(value, list):
|
||||||
|
return value
|
||||||
|
return value.split(",")
|
||||||
|
|
||||||
|
def contribute_to_class(self, cls, name):
|
||||||
|
super(MultiSelectField, self).contribute_to_class(cls, name)
|
||||||
|
if self.choices:
|
||||||
|
func = lambda self, fieldname = name, choicedict = dict(self.choices):",".join([choicedict.get(value,value) for value in getattr(self,fieldname)])
|
||||||
|
setattr(cls, 'get_%s_display' % self.name, func)
|
||||||
|
|
253
itf/itfcore/models.py
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
from django.db import models
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
import datetime
|
||||||
|
from fields import MultiSelectField, MultiSelectFormField
|
||||||
|
import multilingual
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
|
EVENT_TYPES = (
|
||||||
|
('workshop', 'Workshop'),
|
||||||
|
('seminar', 'Seminar'),
|
||||||
|
('exhibition', 'Exhibition'),
|
||||||
|
('course', 'Course / Training'),
|
||||||
|
('other', 'Other'),
|
||||||
|
)
|
||||||
|
|
||||||
|
OCCUPATION_TYPES = (
|
||||||
|
('make_up_artist', 'Make-up Artist'),
|
||||||
|
('director', 'Director'),
|
||||||
|
('actor', 'Actor'),
|
||||||
|
('other', 'Other'),
|
||||||
|
)
|
||||||
|
|
||||||
|
FILE_TYPES = (
|
||||||
|
('audio', 'Audio'),
|
||||||
|
('video', 'Video'),
|
||||||
|
('pdf', 'PDF'),
|
||||||
|
('text', 'Text Document'),
|
||||||
|
('other', 'Other'),
|
||||||
|
)
|
||||||
|
|
||||||
|
PP_RELATION_TYPES = (
|
||||||
|
('friend', 'Friend'),
|
||||||
|
('worked_under', 'Worked Under'),
|
||||||
|
('worked_with', 'Worked with'),
|
||||||
|
('directed', 'Directed'),
|
||||||
|
('fanof', 'Fan Of'),
|
||||||
|
('other', 'Other'),
|
||||||
|
)
|
||||||
|
|
||||||
|
PG_RELATION_TYPES = (
|
||||||
|
('member', 'Member'),
|
||||||
|
('admin', 'Admin'),
|
||||||
|
('fan', 'Fan'),
|
||||||
|
('other', 'Other'),
|
||||||
|
)
|
||||||
|
|
||||||
|
class Script(models.Model):
|
||||||
|
author = models.CharField(max_length=255)
|
||||||
|
downloads = models.ManyToManyField('File', blank=True)
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
language = models.CharField(max_length=50, blank=True)
|
||||||
|
|
||||||
|
class Translation(multilingual.Translation):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
synopsis = models.TextField(blank=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class ProfileProduction(models.Model):
|
||||||
|
profile = models.ForeignKey('Profile')
|
||||||
|
production = models.ForeignKey('Production')
|
||||||
|
role = models.CharField(max_length=255)
|
||||||
|
is_approved = models.BooleanField(default=False)
|
||||||
|
is_original = models.BooleanField(default=False)
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.role
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = 'Peoples Role in Production'
|
||||||
|
|
||||||
|
class Production(models.Model):
|
||||||
|
title = models.CharField(max_length=255)
|
||||||
|
description = models.TextField(blank=True)
|
||||||
|
author = models.ForeignKey('Profile', related_name="AuthoredProduction")
|
||||||
|
director = models.ForeignKey('Profile', related_name="DirectedProduction")
|
||||||
|
cast = models.ManyToManyField('Profile', through='ProfileProduction', blank=True, symmetrical=False)
|
||||||
|
theatregroup = models.ForeignKey('TheatreGroup', blank=True, null=True, verbose_name="Theatre Group")
|
||||||
|
script = models.ForeignKey('Script', blank=True, null=True)
|
||||||
|
images = models.ManyToManyField('Image', blank=True)
|
||||||
|
files = models.ManyToManyField('File', blank=True)
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
language = models.CharField(max_length=50, blank=True)
|
||||||
|
slug = models.SlugField()
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return "/production/" + str(self.id)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
#class Nickname2(models.Model):
|
||||||
|
# name = models.CharField('Nick2', max_length=255, blank=True)
|
||||||
|
## nick_profile = models.ForeignKey('Profile')
|
||||||
|
|
||||||
|
# def __unicode__(self):
|
||||||
|
# return self.name
|
||||||
|
|
||||||
|
#class Nickname3(models.Model):
|
||||||
|
# name = models.CharField('Nick3', max_length=255, blank=True)
|
||||||
|
## nick_profile = models.ForeignKey('Profile')
|
||||||
|
|
||||||
|
# def __unicode__(self):
|
||||||
|
# return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class Nickname(models.Model):
|
||||||
|
name = models.CharField('Nick', max_length=255, blank=True)
|
||||||
|
profile = models.ForeignKey('Profile')
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Profile(models.Model):
|
||||||
|
user = models.ForeignKey(User, blank=True, unique=True, null=True)
|
||||||
|
phone = models.CharField(max_length=255, blank=True)
|
||||||
|
email = models.CharField(max_length=255, blank=True)
|
||||||
|
groups = models.ManyToManyField('TheatreGroup', through='ProfileGroup', blank=True, symmetrical=False)
|
||||||
|
occupation = MultiSelectField(max_length=1000, choices=OCCUPATION_TYPES, verbose_name="Occupation Type", blank=True)
|
||||||
|
connections = models.ManyToManyField('Profile', through='ProfileProfile', blank=True, symmetrical=False)
|
||||||
|
profile_image = models.ForeignKey('Image', blank=True, null=True, related_name="profile_image")
|
||||||
|
dob = models.DateField(blank=True, verbose_name="DoB", null=True)
|
||||||
|
location = models.ForeignKey('Location', blank=True, null=True)
|
||||||
|
images = models.ManyToManyField('Image', blank=True)
|
||||||
|
files = models.ManyToManyField('File', blank=True)
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
related_productions = models.ManyToManyField('Production', blank=True, null=True)
|
||||||
|
# nickname = models.ForeignKey(Nickname, blank=True, null=True)
|
||||||
|
# nickname2 = models.ForeignKey('Nickname2', related_name="MyNick", blank=True)
|
||||||
|
# nickname3 = models.ManyToManyField('Nickname3', blank=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Translation(multilingual.Translation):
|
||||||
|
firstname = models.CharField(max_length=255, verbose_name=_("First Name"))
|
||||||
|
lastname = models.CharField(max_length=255, blank=True, verbose_name=_("Last Name"))
|
||||||
|
about = models.TextField(blank=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.firstname + " " + self.lastname
|
||||||
|
|
||||||
|
class Venue(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
location = models.ForeignKey('Location')
|
||||||
|
images = models.ManyToManyField('Image', blank=True)
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
slug = models.SlugField()
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Performance(models.Model):
|
||||||
|
production = models.ForeignKey('Production')
|
||||||
|
venue = models.ForeignKey('Venue', blank=True, null=True)
|
||||||
|
datetime = models.DateTimeField(verbose_name="Date & Time", blank=True, null=True)
|
||||||
|
ticketslink = models.URLField(max_length=255, blank=True, verbose_name="Tickets link")
|
||||||
|
images = models.ManyToManyField('Image', blank=True)
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.production
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
get_latest_by = "datetime"
|
||||||
|
|
||||||
|
class Event(models.Model):
|
||||||
|
title = models.CharField(max_length=255, blank=True)
|
||||||
|
synopsis = models.TextField(blank=True)
|
||||||
|
venue = models.ForeignKey('Venue')
|
||||||
|
theatregroup = models.ForeignKey('TheatreGroup', blank=True, null=True, verbose_name="Theatre Group")
|
||||||
|
time = models.DateTimeField(blank=True, null=True)
|
||||||
|
eventtype = models.CharField(max_length=255, choices=EVENT_TYPES, verbose_name="Event Type")
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
cost = models.CharField(max_length=255, blank=True)
|
||||||
|
language = models.ForeignKey("Language", blank=True, null=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Language(models.Model):
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
short_name = models.CharField(max_length=3)
|
||||||
|
|
||||||
|
class Location(models.Model):
|
||||||
|
address = models.TextField(blank=True)
|
||||||
|
lat = models.CharField(max_length=255, blank=True, verbose_name="Latitude", editable=False)
|
||||||
|
lon = models.CharField(max_length=255, blank=True, verbose_name="Longitude", editable=False)
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.address
|
||||||
|
|
||||||
|
class ProfileProfile(models.Model):
|
||||||
|
fromProfile = models.ForeignKey('Profile', related_name='relatedFrom', verbose_name="From Profile")
|
||||||
|
toProfile = models.ForeignKey('Profile', related_name='relatedTo', verbose_name="To Profile")
|
||||||
|
rel_type = MultiSelectField(max_length=1000, choices=PP_RELATION_TYPES, verbose_name="Relation Type")
|
||||||
|
is_approved = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = 'Person to Person Relation'
|
||||||
|
|
||||||
|
|
||||||
|
class TheatreGroup(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
about = models.TextField(blank=True)
|
||||||
|
location = models.ManyToManyField('Location', blank=True)
|
||||||
|
images = models.ManyToManyField('Image', blank=True)
|
||||||
|
files = models.ManyToManyField('File', blank=True)
|
||||||
|
links = models.ManyToManyField('Link', blank=True)
|
||||||
|
slug = models.SlugField()
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class ProfileGroup(models.Model):
|
||||||
|
profile = models.ForeignKey('Profile')
|
||||||
|
group = models.ForeignKey('TheatreGroup')
|
||||||
|
rel_type = MultiSelectField(max_length=1000, choices=PG_RELATION_TYPES, verbose_name="Relation Type")
|
||||||
|
is_approved = models.BooleanField(default=False)
|
||||||
|
is_admin = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = 'Person to Theatre Group Relation'
|
||||||
|
|
||||||
|
class Image(models.Model):
|
||||||
|
image = models.ImageField(upload_to='/profiles/', width_field='width', height_field='height', null=False)
|
||||||
|
width = models.IntegerField(editable=False)
|
||||||
|
height = models.IntegerField(editable=False)
|
||||||
|
caption = models.CharField(max_length=255, blank=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
if self.caption:
|
||||||
|
return self.caption
|
||||||
|
else:
|
||||||
|
return self.path
|
||||||
|
|
||||||
|
class File(models.Model):
|
||||||
|
file = models.FileField(upload_to='/uploads/')
|
||||||
|
file_type = models.CharField(max_length=255, choices=FILE_TYPES, verbose_name="File Type")
|
||||||
|
description = models.TextField(blank=True)
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.caption
|
||||||
|
|
||||||
|
class RandomQuote(models.Model):
|
||||||
|
quote = models.TextField()
|
||||||
|
author = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
class Link(models.Model):
|
||||||
|
url = models.URLField()
|
||||||
|
caption = models.CharField(max_length=255, blank=True)
|
||||||
|
# related_profile = models.ForeignKey(Profile)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
if self.caption:
|
||||||
|
return self.caption
|
||||||
|
else:
|
||||||
|
return self.url
|
||||||
|
|
49
itf/itfcore/views.py
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
from django.shortcuts import render_to_response
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.contrib import admin
|
||||||
|
from settings import LANGUAGES
|
||||||
|
import simplejson
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def index(request):
|
||||||
|
return HttpResponse("India Theatre Forum - Coming Soon")
|
||||||
|
|
||||||
|
def getLanguages(request):
|
||||||
|
languages = LANGUAGES
|
||||||
|
langArr = []
|
||||||
|
for l in languages:
|
||||||
|
langDict = {}
|
||||||
|
langDict['short'] = l[0]
|
||||||
|
langDict['long'] = l[1]
|
||||||
|
langArr.append(langDict)
|
||||||
|
|
||||||
|
print langArr
|
||||||
|
json = simplejson.dumps(langArr)
|
||||||
|
return HttpResponse(json, mimetype='application/javascript')
|
||||||
|
|
||||||
|
def mockup(request):
|
||||||
|
return render_to_response("mockup.html")
|
||||||
|
|
||||||
|
def allnews(request):
|
||||||
|
return render_to_response("x0news.html")
|
||||||
|
|
||||||
|
def disc(request):
|
||||||
|
return render_to_response("x0disc.html")
|
||||||
|
|
||||||
|
def multi(request):
|
||||||
|
return render_to_response("x0multi.html")
|
||||||
|
|
||||||
|
def resources(request):
|
||||||
|
return render_to_response("x0resources.html")
|
||||||
|
|
||||||
|
def erang(request):
|
||||||
|
return render_to_response("x0erang.html")
|
||||||
|
|
||||||
|
def profile(request):
|
||||||
|
return render_to_response("x0profile.html")
|
||||||
|
|
||||||
|
def googlehosted(request):
|
||||||
|
return HttpResponse('googlefffffffffc014cb4')
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
|
|
11
itf/manage.py
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
from django.core.management import execute_manager
|
||||||
|
try:
|
||||||
|
import settings # Assumed to be in the same directory.
|
||||||
|
except ImportError:
|
||||||
|
import sys
|
||||||
|
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
execute_manager(settings)
|
1
itf/meetingdata.json
Normal file
113
itf/monitor.py
Executable file
|
@ -0,0 +1,113 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import signal
|
||||||
|
import threading
|
||||||
|
import atexit
|
||||||
|
import Queue
|
||||||
|
|
||||||
|
_interval = 1.0
|
||||||
|
_times = {}
|
||||||
|
_files = []
|
||||||
|
|
||||||
|
_running = False
|
||||||
|
_queue = Queue.Queue()
|
||||||
|
_lock = threading.Lock()
|
||||||
|
|
||||||
|
def _restart(path):
|
||||||
|
_queue.put(True)
|
||||||
|
prefix = 'monitor (pid=%d):' % os.getpid()
|
||||||
|
print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
|
||||||
|
print >> sys.stderr, '%s Triggering process restart.' % prefix
|
||||||
|
os.kill(os.getpid(), signal.SIGINT)
|
||||||
|
|
||||||
|
def _modified(path):
|
||||||
|
try:
|
||||||
|
# If path doesn't denote a file and were previously
|
||||||
|
# tracking it, then it has been removed or the file type
|
||||||
|
# has changed so force a restart. If not previously
|
||||||
|
# tracking the file then we can ignore it as probably
|
||||||
|
# pseudo reference such as when file extracted from a
|
||||||
|
# collection of modules contained in a zip file.
|
||||||
|
|
||||||
|
if not os.path.isfile(path):
|
||||||
|
return path in _times
|
||||||
|
|
||||||
|
# Check for when file last modified.
|
||||||
|
|
||||||
|
mtime = os.stat(path).st_mtime
|
||||||
|
if path not in _times:
|
||||||
|
_times[path] = mtime
|
||||||
|
|
||||||
|
# Force restart when modification time has changed, even
|
||||||
|
# if time now older, as that could indicate older file
|
||||||
|
# has been restored.
|
||||||
|
|
||||||
|
if mtime != _times[path]:
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
# If any exception occured, likely that file has been
|
||||||
|
# been removed just before stat(), so force a restart.
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _monitor():
|
||||||
|
while 1:
|
||||||
|
# Check modification times on all files in sys.modules.
|
||||||
|
|
||||||
|
for module in sys.modules.values():
|
||||||
|
if not hasattr(module, '__file__'):
|
||||||
|
continue
|
||||||
|
path = getattr(module, '__file__')
|
||||||
|
if not path:
|
||||||
|
continue
|
||||||
|
if os.path.splitext(path)[1] in ['.pyc', '.pyo', '.pyd']:
|
||||||
|
path = path[:-1]
|
||||||
|
if _modified(path):
|
||||||
|
return _restart(path)
|
||||||
|
|
||||||
|
# Check modification times on files which have
|
||||||
|
# specifically been registered for monitoring.
|
||||||
|
|
||||||
|
for path in _files:
|
||||||
|
if _modified(path):
|
||||||
|
return _restart(path)
|
||||||
|
|
||||||
|
# Go to sleep for specified interval.
|
||||||
|
|
||||||
|
try:
|
||||||
|
return _queue.get(timeout=_interval)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
_thread = threading.Thread(target=_monitor)
|
||||||
|
_thread.setDaemon(True)
|
||||||
|
|
||||||
|
def _exiting():
|
||||||
|
try:
|
||||||
|
_queue.put(True)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
_thread.join()
|
||||||
|
|
||||||
|
atexit.register(_exiting)
|
||||||
|
|
||||||
|
def track(path):
|
||||||
|
if not path in _files:
|
||||||
|
_files.append(path)
|
||||||
|
|
||||||
|
def start(interval=1.0):
|
||||||
|
global _interval
|
||||||
|
if interval < _interval:
|
||||||
|
_interval = interval
|
||||||
|
|
||||||
|
global _running
|
||||||
|
_lock.acquire()
|
||||||
|
if not _running:
|
||||||
|
_running = True
|
||||||
|
_thread.start()
|
||||||
|
_lock.release()
|
125
itf/settings.py
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
# Django settings for theatre project.
|
||||||
|
|
||||||
|
import os
|
||||||
|
from os.path import join
|
||||||
|
|
||||||
|
DEBUG = True
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
LOCAL_DEVELOPMENT = True
|
||||||
|
LOGGING_INTERCEPT_REDIRECTS = True
|
||||||
|
LOGGING_LOG_SQL = True
|
||||||
|
LOGGING_SHOW_METRICS = True
|
||||||
|
LOGGING_OUTPUT_ENABLED = True
|
||||||
|
|
||||||
|
PROJECT_PATH = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
ADMINS = (
|
||||||
|
# ('Your Name', 'your_email@domain.com'),
|
||||||
|
)
|
||||||
|
|
||||||
|
INTERNAL_IPS = ('127.0.0.1',)
|
||||||
|
|
||||||
|
MANAGERS = ADMINS
|
||||||
|
|
||||||
|
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
|
||||||
|
DATABASE_NAME = 'theatre' # Or path to database file if using sqlite3.
|
||||||
|
DATABASE_USER = 'root' # Not used with sqlite3.
|
||||||
|
DATABASE_PASSWORD = '' # Not used with sqlite3.
|
||||||
|
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
|
||||||
|
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
|
||||||
|
|
||||||
|
# Local time zone for this installation. Choices can be found here:
|
||||||
|
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
||||||
|
# although not all choices may be available on all operating systems.
|
||||||
|
# If running in a Windows environment this must be set to the same as your
|
||||||
|
# system time zone.
|
||||||
|
TIME_ZONE = 'America/Chicago'
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
LANGUAGES = (
|
||||||
|
('en', 'English'),
|
||||||
|
('hi', 'Hindi'),
|
||||||
|
('kn', 'Kannada'),
|
||||||
|
)
|
||||||
|
|
||||||
|
DEFAULT_LANGUAGE = 1
|
||||||
|
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
|
# to load the internationalization machinery.
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
# Absolute path to the directory that holds media.
|
||||||
|
# Example: "/home/media/media.lawrence.com/"
|
||||||
|
MEDIA_ROOT = join(PROJECT_PATH, 'static')
|
||||||
|
|
||||||
|
TEMPLATE_CONTEXT_PROCESSORS = (
|
||||||
|
"django.core.context_processors.auth",
|
||||||
|
"django.core.context_processors.debug",
|
||||||
|
"django.core.context_processors.i18n",
|
||||||
|
"django.core.context_processors.media",
|
||||||
|
"multilingual.context_processors.multilingual",
|
||||||
|
)
|
||||||
|
|
||||||
|
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
||||||
|
# trailing slash if there is a path component (optional in other cases).
|
||||||
|
# Examples: "http://media.lawrence.com", "http://example.com/media/"
|
||||||
|
MEDIA_URL = '/static/'
|
||||||
|
|
||||||
|
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
|
||||||
|
# trailing slash.
|
||||||
|
# Examples: "http://foo.com/media/", "/media/".
|
||||||
|
ADMIN_MEDIA_PREFIX = '/admin/media/'
|
||||||
|
|
||||||
|
# Make this unique, and don't share it with anybody.
|
||||||
|
SECRET_KEY = 'fognneiw#s_o-#^tiny@^f-$x#1&29$3a37w5=kll57i!^uo@r'
|
||||||
|
|
||||||
|
# List of callables that know how to import templates from various sources.
|
||||||
|
TEMPLATE_LOADERS = (
|
||||||
|
'django.template.loaders.filesystem.load_template_source',
|
||||||
|
'django.template.loaders.app_directories.load_template_source',
|
||||||
|
'django.template.loaders.eggs.load_template_source',
|
||||||
|
)
|
||||||
|
|
||||||
|
MIDDLEWARE_CLASSES = (
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'multilingual.middleware.DefaultLanguageMiddleware',
|
||||||
|
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||||
|
# 'djangologging.middleware.LoggingMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
#SOLR_ROOT = '/home/sanj/satan/apache-solr-1.3.0/example/'
|
||||||
|
#SOLR_SCHEMA_PATH = SOLR_ROOT + 'solr/conf/schema.xml'
|
||||||
|
#SOLR_DATA_DIR = SOLR_ROOT + 'solr/data'
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'urls'
|
||||||
|
|
||||||
|
TEMPLATE_DIRS = (
|
||||||
|
join(PROJECT_PATH, 'templates'),
|
||||||
|
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
)
|
||||||
|
|
||||||
|
INSTALLED_APPS = (
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.sites',
|
||||||
|
'django.contrib.admin',
|
||||||
|
'itfcore',
|
||||||
|
'festival',
|
||||||
|
'erang',
|
||||||
|
# 'solango',
|
||||||
|
'multilingual',
|
||||||
|
# 'multilingual.flatpages',
|
||||||
|
'django_extensions',
|
||||||
|
'debug_toolbar',
|
||||||
|
'sorl.thumbnail',
|
||||||
|
)
|
63
itf/static/css/colorbox.css
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
ColorBox Core Style
|
||||||
|
The following rules are the styles that are consistant between themes.
|
||||||
|
Avoid changing this area to maintain compatability with future versions of ColorBox.
|
||||||
|
*/
|
||||||
|
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
|
||||||
|
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
||||||
|
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
||||||
|
#cboxContent{position:relative; overflow:hidden;}
|
||||||
|
#cboxLoadedContent{overflow:auto;}
|
||||||
|
#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;}
|
||||||
|
#cboxTitle{margin:0;}
|
||||||
|
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
|
||||||
|
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Example user style
|
||||||
|
The following rules are ordered and tabbed in a way that represents the
|
||||||
|
order/nesting of the generated HTML, so that the structure easier to understand.
|
||||||
|
*/
|
||||||
|
#cboxOverlay{background:url(/static/images/overlay.png) 0 0 repeat;}
|
||||||
|
#colorbox{}
|
||||||
|
#cboxTopLeft{width:21px; height:21px; background:url(/static/images/controls.png) -100px 0 no-repeat;}
|
||||||
|
#cboxTopRight{width:21px; height:21px; background:url(/static/images/controls.png) -129px 0 no-repeat;}
|
||||||
|
#cboxBottomLeft{width:21px; height:21px; background:url(/static/images/controls.png) -100px -29px no-repeat;}
|
||||||
|
#cboxBottomRight{width:21px; height:21px; background:url(/static/images/controls.png) -129px -29px no-repeat;}
|
||||||
|
#cboxMiddleLeft{width:21px; background:url(/static/images/controls.png) left top repeat-y;}
|
||||||
|
#cboxMiddleRight{width:21px; background:url(/static/images/controls.png) right top repeat-y;}
|
||||||
|
#cboxTopCenter{height:21px; background:url(/static/images/border.png) 0 0 repeat-x;}
|
||||||
|
#cboxBottomCenter{height:21px; background:url(/static/images/border.png) 0 -29px repeat-x;}
|
||||||
|
#cboxContent{background:#fff;}
|
||||||
|
#cboxLoadedContent{margin-bottom:28px;}
|
||||||
|
#cboxTitle{position:absolute; bottom:3px; left:0; text-align:center; width:100%; color:#949494; font-size: 13px;}
|
||||||
|
#cboxCurrent{position:absolute; bottom:3px; left:58px; color:#949494;}
|
||||||
|
#cboxSlideshow{position:absolute; bottom:3px; right:30px; color:#0092ef;}
|
||||||
|
#cboxPrevious{position:absolute; bottom:0; left:0px; background:url(/static/images/controls.png) -75px 0px no-repeat; width:25px; height:25px; text-indent:-9999px;}
|
||||||
|
#cboxPrevious.hover{background-position:-75px -25px;}
|
||||||
|
#cboxNext{position:absolute; bottom:0; left:27px; background:url(/static/images/controls.png) -50px 0px no-repeat; width:25px; height:25px; text-indent:-9999px;}
|
||||||
|
#cboxNext.hover{background-position:-50px -25px;}
|
||||||
|
#cboxLoadingOverlay{background:url(/static/images/loading_background.png) center center no-repeat;}
|
||||||
|
#cboxLoadingGraphic{background:url(/static/images/loading.gif) center center no-repeat;}
|
||||||
|
#cboxClose{position:absolute; bottom:0; right:0; background:url(/static/images/controls.png) -25px 0px no-repeat; width:25px; height:25px; text-indent:-9999px;}
|
||||||
|
#cboxClose.hover{background-position:-25px -25px;}
|
||||||
|
|
||||||
|
/*
|
||||||
|
The following fixes png-transparency for IE6.
|
||||||
|
It is also necessary for png-transparency in IE7 & IE8 to avoid 'black halos' with the fade transition
|
||||||
|
|
||||||
|
Since this method does not support CSS background-positioning, it is incompatible with CSS sprites.
|
||||||
|
Colorbox preloads navigation hover classes to account for this.
|
||||||
|
|
||||||
|
!! Important Note: AlphaImageLoader src paths are relative to the HTML document,
|
||||||
|
while regular CSS background images are relative to the CSS document.
|
||||||
|
*/
|
||||||
|
.cboxIE #cboxTopLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderTopLeft.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxTopCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderTopCenter.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxTopRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderTopRight.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxBottomLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderBottomLeft.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxBottomCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderBottomCenter.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxBottomRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderBottomRight.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxMiddleLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderMiddleLeft.png, sizingMethod='scale');}
|
||||||
|
.cboxIE #cboxMiddleRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/static/images/internet_explorer/borderMiddleRight.png, sizingMethod='scale');}
|
||||||
|
|
10
itf/static/css/error_pages.css
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.errorTxt {
|
||||||
|
text-align: center;
|
||||||
|
padding: 25px;
|
||||||
|
width: 70%;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
color: #333;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
113
itf/static/css/festival.css
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
body, html {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
font-family: Arial, Georgia, Helvetica, mono;
|
||||||
|
background: #ee9b11;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
background: url('/static/images/bg1.jpg') no-repeat;
|
||||||
|
border: 0px solid #000;
|
||||||
|
width: 1016px;
|
||||||
|
height: 175px;
|
||||||
|
z-index: 1000;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
width: 100%;
|
||||||
|
height: 100px;
|
||||||
|
position: relative;
|
||||||
|
/* background: #1f1a17; */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#body_wrapper {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftCol {
|
||||||
|
float: left;
|
||||||
|
width: 200px;
|
||||||
|
padding-top: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerCol {
|
||||||
|
margin-top: 25px;
|
||||||
|
width: 540px;
|
||||||
|
float: left;
|
||||||
|
overflow: auto;
|
||||||
|
padding-left: 5px;
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rightCol {
|
||||||
|
margin-top: 25px;
|
||||||
|
margin-left: 5px;
|
||||||
|
text-align: left;
|
||||||
|
width: 240px;
|
||||||
|
float: left;
|
||||||
|
background: #f8c301;
|
||||||
|
padding-left: 3px;
|
||||||
|
padding-right: 3px;
|
||||||
|
padding-bottom: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rightCol h1 {
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#newsletter_signup
|
||||||
|
{
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#email
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#meeting_list {
|
||||||
|
}
|
||||||
|
|
||||||
|
#meeting_list_title {
|
||||||
|
}
|
||||||
|
|
||||||
|
.box
|
||||||
|
{
|
||||||
|
margin: 30px 5px 15px 10px;
|
||||||
|
border: #3c5a86 1px dashed;
|
||||||
|
padding:5px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #000000;
|
||||||
|
background-color: #d1e0ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box a
|
||||||
|
{
|
||||||
|
text-decoration: none;
|
||||||
|
color: #142908;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box H1
|
||||||
|
{
|
||||||
|
margin : 0px 0px -12px 5px;
|
||||||
|
position: relative;
|
||||||
|
top : -12px;
|
||||||
|
border: #3c5a86 1px solid;
|
||||||
|
padding-top : 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
padding-left : 5px;
|
||||||
|
padding-right : 5px;
|
||||||
|
font-size : 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color : #000000;
|
||||||
|
display: inline;
|
||||||
|
background-color: #99bbdd;
|
||||||
|
}
|
54
itf/static/css/festival_index.css
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
body {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbox
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#rightbox
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#meeting_list {
|
||||||
|
}
|
||||||
|
|
||||||
|
#meeting_list_title {
|
||||||
|
}
|
||||||
|
|
||||||
|
.box
|
||||||
|
{
|
||||||
|
margin: 30px 5px 15px 10px;
|
||||||
|
border: #3c5a86 1px dashed;
|
||||||
|
padding:5px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #000000;
|
||||||
|
background-color: #d1e0ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box a
|
||||||
|
{
|
||||||
|
text-decoration: none;
|
||||||
|
color: #142908;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box H1
|
||||||
|
{
|
||||||
|
margin : 0px 0px -12px 5px;
|
||||||
|
position: relative;
|
||||||
|
top : -12px;
|
||||||
|
border: #3c5a86 1px solid;
|
||||||
|
padding-top : 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
padding-left : 5px;
|
||||||
|
padding-right : 5px;
|
||||||
|
font-size : 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color : #000000;
|
||||||
|
display: inline;
|
||||||
|
background-color: #99bbdd;
|
||||||
|
}
|
184
itf/static/css/fullcalendar.css
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
|
||||||
|
/* top area w/ month title and buttons */
|
||||||
|
|
||||||
|
.full-calendar-title {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-buttons {
|
||||||
|
float: right;
|
||||||
|
margin: 0 0 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-buttons button {
|
||||||
|
vertical-align: middle;
|
||||||
|
margin: 0 0 0 5px;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-buttons button span {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* To always display the "today" button:
|
||||||
|
*
|
||||||
|
* .full-calendar-buttons button.today {
|
||||||
|
* visibility: visible !important;
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* table layout & outer border */
|
||||||
|
|
||||||
|
.full-calendar-month-wrap {
|
||||||
|
clear: both;
|
||||||
|
border: 1px solid #333; /* outer border color & style */
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month {
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* cell styling */
|
||||||
|
|
||||||
|
.full-calendar-month th,
|
||||||
|
.full-calendar-month td.day {
|
||||||
|
padding: 0;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: solid; /* inner border style */
|
||||||
|
border-color: #333; /* inner border color */
|
||||||
|
border-width: 1px 0 0 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month th {
|
||||||
|
border-top: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month th.first,
|
||||||
|
.full-calendar-month td.first {
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month td.today {
|
||||||
|
background: #FFFFCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .day-number {
|
||||||
|
text-align: right;
|
||||||
|
padding: 0 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .other-month .day-number {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .day-content {
|
||||||
|
padding: 2px 2px 0; /* distance between events and day edges */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FullCalendar automatically chooses a cell's height,
|
||||||
|
* but this can be overridden:
|
||||||
|
*
|
||||||
|
* .full-calendar-month td.day {
|
||||||
|
* height: 100px !important;
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* event styling */
|
||||||
|
|
||||||
|
.full-calendar-month .event {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
font-size: .85em;
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .ui-draggable-dragging td {
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .event td {
|
||||||
|
background: #C1D9EC;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .event td.ne,
|
||||||
|
.full-calendar-month .event td.nw,
|
||||||
|
.full-calendar-month .event td.se,
|
||||||
|
.full-calendar-month .event td.sw {
|
||||||
|
background: none;
|
||||||
|
width: 1px; /* <-- remove if you dont want "rounded" corners */
|
||||||
|
height: 1px; /* <-- */
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .nobg td {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .event td.c {
|
||||||
|
padding: 0 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-calendar-month .event-time {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* To change the color of events on a per-class basis (such as with the
|
||||||
|
* "className" attribute of a CalEvent), do something like this:
|
||||||
|
*
|
||||||
|
* .full-calendar-month .myclass td {
|
||||||
|
* background: green;
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* the rectangle that covers a day when dragging an event */
|
||||||
|
|
||||||
|
.full-calendar-month .over-day {
|
||||||
|
background: #ADDBFF;
|
||||||
|
opacity: .2;
|
||||||
|
filter: alpha(opacity=20); /* for IE */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* right-to-left support */
|
||||||
|
|
||||||
|
.r2l .full-calendar-title {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.r2l .full-calendar-buttons {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.r2l .full-calendar-buttons button {
|
||||||
|
margin: 0 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.r2l .full-calendar-month .day-number {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.r2l .full-calendar-month .event {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
419
itf/static/css/index.css
Normal file
|
@ -0,0 +1,419 @@
|
||||||
|
body {
|
||||||
|
background: #D5DBE8;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loggedIn {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loggedInButtons {
|
||||||
|
width: 300px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 25000;
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
height: 50px;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
background: #000;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #fff;
|
||||||
|
border-bottom: 1px dashed #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainWrapper {
|
||||||
|
position: relative;
|
||||||
|
top: 50px;
|
||||||
|
}
|
||||||
|
#searchDiv {
|
||||||
|
position: absolute;
|
||||||
|
right: 5px;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftBar {
|
||||||
|
float: left;
|
||||||
|
width: 19%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#locationSelect {
|
||||||
|
text-align: center;
|
||||||
|
background: #361848;
|
||||||
|
border: 2px solid #61AAF2;
|
||||||
|
padding: 4px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
-moz-border-radius: 15px;
|
||||||
|
-webkit-border-radius: 15px;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#center {
|
||||||
|
float: left;
|
||||||
|
width: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rightBar {
|
||||||
|
float: left;
|
||||||
|
width: 19%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toplink {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #eee;
|
||||||
|
font-size: 11px;
|
||||||
|
text-decoration: underline;
|
||||||
|
position: relative;
|
||||||
|
left: -12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toplink:hover {
|
||||||
|
color: #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small {
|
||||||
|
font-size: 10px;
|
||||||
|
color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
#signUp {
|
||||||
|
color: #E21515;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
font-size: 18px;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #361848;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginDiv {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#signupDiv {
|
||||||
|
position: absolute;
|
||||||
|
top: 16px;
|
||||||
|
left: 65%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topBtn {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogBox {
|
||||||
|
position: fixed;
|
||||||
|
top: 50px;
|
||||||
|
left: 25%;
|
||||||
|
width: 50%;
|
||||||
|
text-align: center;
|
||||||
|
background: #2B86E0;
|
||||||
|
border: 1px dashed #361848;
|
||||||
|
display: none;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogTitle {
|
||||||
|
position: relative;
|
||||||
|
background: #61AAF2;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
color: #666;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.closeBtn {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #f00;
|
||||||
|
font-size: 18px;
|
||||||
|
right: 4px;
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerBtns {
|
||||||
|
width: 700px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
background: #61AAF2;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.centerBtn {
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
border: 2px solid #61AAF2;
|
||||||
|
color: #61AAF2;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: #361848;
|
||||||
|
padding: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
-moz-border-radius: 6px;
|
||||||
|
-webkit-border-radius: 6px;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.centerBtnHover {
|
||||||
|
color: #FCB281;
|
||||||
|
}
|
||||||
|
|
||||||
|
.centerBtnSelected {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabContainer {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding-top: 10px;
|
||||||
|
width: 96%;
|
||||||
|
margin-left: 2%;
|
||||||
|
margin-right: 2%;
|
||||||
|
height: 100%;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftTabs {
|
||||||
|
padding-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.leftTab {
|
||||||
|
background: #61AAF2;
|
||||||
|
border: 1px dashed #361848;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
width: 96%;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
padding-left: 5px;
|
||||||
|
color: #361848;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leftTabContent {
|
||||||
|
display: none;
|
||||||
|
position: relative;
|
||||||
|
width: 97%;
|
||||||
|
margin-left: 1%;
|
||||||
|
margin-right: 2%;
|
||||||
|
border-left: 1px dashed #361848;
|
||||||
|
border-right: 1px dashed #361848;
|
||||||
|
border-bottom: 1px dashed #361848;
|
||||||
|
border-top: 1px dotted #D5DBE8;
|
||||||
|
top: -8px;
|
||||||
|
padding-top: 1px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
background: #61AAF2;
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leftTabContent a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leftTabContent a:hover {
|
||||||
|
color: #FCB281;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seeAll {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
right: 10px;
|
||||||
|
color: #f00;
|
||||||
|
font-size: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#adminMessageBox {
|
||||||
|
position: relative;
|
||||||
|
width: 60%;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
text-align: center;
|
||||||
|
background: yellow;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
border: 1px dashed #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
#basicLinks {
|
||||||
|
}
|
||||||
|
|
||||||
|
.basicLink {
|
||||||
|
position: relative;
|
||||||
|
height: 24px;
|
||||||
|
width: 100%;
|
||||||
|
cursor: pointer;
|
||||||
|
background: #ccc;
|
||||||
|
opacity: 0.5;
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basicLinkInner {
|
||||||
|
height: 24px;
|
||||||
|
width: 70px;
|
||||||
|
z-index: 100;
|
||||||
|
position: absolute;
|
||||||
|
right: 1px;
|
||||||
|
font-weight: bold;
|
||||||
|
opacity: 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basicLinkInner a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#map {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer
|
||||||
|
{
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 0px;
|
||||||
|
width: 100%;
|
||||||
|
height: 28px;
|
||||||
|
background-color: #000;
|
||||||
|
border-top: 1px dashed #f00;
|
||||||
|
z-index: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer-nav {
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
bottom: 4px;
|
||||||
|
color: #000;
|
||||||
|
height: 18px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#footer-nav ul,
|
||||||
|
#footer-nav li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mycarousel {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-div
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 15px;
|
||||||
|
width: 95%;
|
||||||
|
background: #2B86E0;
|
||||||
|
-moz-border-radius: 15px;
|
||||||
|
-webkit-border-radius: 15px;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.roundborder
|
||||||
|
{
|
||||||
|
-moz-border-radius: 15px;
|
||||||
|
-webkit-border-radius: 15px;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.multi-content
|
||||||
|
{
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#photoID {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#multi-categories {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#multi-video {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#multi-audio {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#multi-images {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#itfList li {
|
||||||
|
border: 1px solid #000;
|
||||||
|
background: #000;
|
||||||
|
color: #fff;
|
||||||
|
margin-bottom: 7px;
|
||||||
|
padding: 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#itfBox {
|
||||||
|
border: 2px solid #fff;
|
||||||
|
margin-top: 15px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seemore
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
bottom: 10px;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seemore a
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
color:black;
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-ul
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-ul li
|
||||||
|
{
|
||||||
|
display: inline;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-right: 20px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
65
itf/static/css/jScrollPane.css
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
|
||||||
|
.jScrollPaneContainer {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jScrollPaneTrack {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
background: #aaa;
|
||||||
|
}
|
||||||
|
.jScrollPaneDrag {
|
||||||
|
position: absolute;
|
||||||
|
background: #666;
|
||||||
|
cursor: pointer;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.jScrollPaneDragTop {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.jScrollPaneDragBottom {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
a.jScrollArrowUp {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
text-indent: -2000px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #666;
|
||||||
|
height: 9px;
|
||||||
|
}
|
||||||
|
a.jScrollArrowUp:hover {
|
||||||
|
background-color: #f60;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.jScrollArrowDown {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
text-indent: -2000px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #666;
|
||||||
|
height: 9px;
|
||||||
|
}
|
||||||
|
a.jScrollArrowDown:hover {
|
||||||
|
background-color: #f60;
|
||||||
|
}
|
||||||
|
a.jScrollActiveArrowButton, a.jScrollActiveArrowButton:hover {
|
||||||
|
background-color: #f00;
|
||||||
|
}
|
49
itf/static/css/jcarousel.css
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/**
|
||||||
|
* This <div> element is wrapped by jCarousel around the list
|
||||||
|
* and has the classname "jcarousel-container".
|
||||||
|
*/
|
||||||
|
.jcarousel-container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-clip {
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-list {
|
||||||
|
z-index: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-list li,
|
||||||
|
.jcarousel-item {
|
||||||
|
float: left;
|
||||||
|
list-style: none;
|
||||||
|
/* We set the width/height explicitly. No width/height causes infinite loops. */
|
||||||
|
width: 75px;
|
||||||
|
height: 75px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The buttons are added dynamically by jCarousel before
|
||||||
|
* the <ul> list (inside the <div> described above) and
|
||||||
|
* have the classnames "jcarousel-next" and "jcarousel-prev".
|
||||||
|
*/
|
||||||
|
.jcarousel-next {
|
||||||
|
z-index: 3;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-prev {
|
||||||
|
z-index: 3;
|
||||||
|
display: none;
|
||||||
|
}
|
50
itf/static/css/jcarouselskin.css
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* This <div> element is wrapped by jCarousel around the list
|
||||||
|
* and has the classname "jcarousel-container".
|
||||||
|
*/
|
||||||
|
.jcarousel-container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-clip {
|
||||||
|
z-index: 2;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-list {
|
||||||
|
z-index: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-list li,
|
||||||
|
.jcarousel-item {
|
||||||
|
float: left;
|
||||||
|
list-style: none;
|
||||||
|
/* We set the width/height explicitly. No width/height causes infinite loops. */
|
||||||
|
width: 75px;
|
||||||
|
height: 75px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The buttons are added dynamically by jCarousel before
|
||||||
|
* the <ul> list (inside the <div> described above) and
|
||||||
|
* have the classnames "jcarousel-next" and "jcarousel-prev".
|
||||||
|
*/
|
||||||
|
.jcarousel-next {
|
||||||
|
z-index: 3;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcarousel-prev {
|
||||||
|
z-index: 3;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
406
itf/static/css/jquery-ui-1.7.2.custom.css
vendored
Normal file
|
@ -0,0 +1,406 @@
|
||||||
|
/*
|
||||||
|
* jQuery UI CSS Framework
|
||||||
|
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Layout helpers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-helper-hidden { display: none; }
|
||||||
|
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
||||||
|
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||||
|
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||||
|
.ui-helper-clearfix { display: inline-block; }
|
||||||
|
/* required comment for clearfix to work in Opera \*/
|
||||||
|
* html .ui-helper-clearfix { height:1%; }
|
||||||
|
.ui-helper-clearfix { display:block; }
|
||||||
|
/* end clearfix */
|
||||||
|
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||||
|
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-disabled { cursor: default !important; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* jQuery UI CSS Framework
|
||||||
|
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Component containers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
|
||||||
|
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
|
||||||
|
.ui-widget-content { background: #FFFCC7 url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
|
||||||
|
.ui-widget-content a { color: #333333; }
|
||||||
|
/*.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; }
|
||||||
|
*/
|
||||||
|
.ui-widget-header { border-bottom: 1px solid #e78f08; color: #ffffff; }
|
||||||
|
.ui-widget-header a { color: #ffffff; }
|
||||||
|
|
||||||
|
/* Interaction states
|
||||||
|
----------------#852002;---------f6f6f6-------#1c94c4;--*/
|
||||||
|
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #ddd5a4 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; color: #1c94c4; outline: none; font-size: 12px;}
|
||||||
|
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #852002; text-decoration: none; outline: none; font-size: 12px; }
|
||||||
|
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; color: #c77405; outline: none; font-size: 12px;}
|
||||||
|
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; font-size: 12px;}
|
||||||
|
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #FFFCC7 url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-size: 12px; color: #eb8f00; outline: none; }
|
||||||
|
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #852002; outline: none; text-decoration: none; font-size: 12px; }
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
|
||||||
|
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
|
||||||
|
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
|
||||||
|
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
|
||||||
|
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
|
||||||
|
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||||
|
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
|
||||||
|
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
||||||
|
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||||
|
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
||||||
|
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||||
|
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||||
|
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||||
|
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
|
||||||
|
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
|
||||||
|
|
||||||
|
/* positioning */
|
||||||
|
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||||
|
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||||
|
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||||
|
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||||
|
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||||
|
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||||
|
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||||
|
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||||
|
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||||
|
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||||
|
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||||
|
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||||
|
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||||
|
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||||
|
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||||
|
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||||
|
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||||
|
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||||
|
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||||
|
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||||
|
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||||
|
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||||
|
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||||
|
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||||
|
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||||
|
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||||
|
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||||
|
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||||
|
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||||
|
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||||
|
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||||
|
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||||
|
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||||
|
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||||
|
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||||
|
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||||
|
.ui-icon-extlink { background-position: -32px -80px; }
|
||||||
|
.ui-icon-newwin { background-position: -48px -80px; }
|
||||||
|
.ui-icon-refresh { background-position: -64px -80px; }
|
||||||
|
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||||
|
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||||
|
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||||
|
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||||
|
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||||
|
.ui-icon-document { background-position: -32px -96px; }
|
||||||
|
.ui-icon-document-b { background-position: -48px -96px; }
|
||||||
|
.ui-icon-note { background-position: -64px -96px; }
|
||||||
|
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||||
|
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||||
|
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||||
|
.ui-icon-comment { background-position: -128px -96px; }
|
||||||
|
.ui-icon-person { background-position: -144px -96px; }
|
||||||
|
.ui-icon-print { background-position: -160px -96px; }
|
||||||
|
.ui-icon-trash { background-position: -176px -96px; }
|
||||||
|
.ui-icon-locked { background-position: -192px -96px; }
|
||||||
|
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||||
|
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||||
|
.ui-icon-tag { background-position: -240px -96px; }
|
||||||
|
.ui-icon-home { background-position: 0 -112px; }
|
||||||
|
.ui-icon-flag { background-position: -16px -112px; }
|
||||||
|
.ui-icon-calendar { background-position: -32px -112px; }
|
||||||
|
.ui-icon-cart { background-position: -48px -112px; }
|
||||||
|
.ui-icon-pencil { background-position: -64px -112px; }
|
||||||
|
.ui-icon-clock { background-position: -80px -112px; }
|
||||||
|
.ui-icon-disk { background-position: -96px -112px; }
|
||||||
|
.ui-icon-calculator { background-position: -112px -112px; }
|
||||||
|
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||||
|
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||||
|
.ui-icon-search { background-position: -160px -112px; }
|
||||||
|
.ui-icon-wrench { background-position: -176px -112px; }
|
||||||
|
.ui-icon-gear { background-position: -192px -112px; }
|
||||||
|
.ui-icon-heart { background-position: -208px -112px; }
|
||||||
|
.ui-icon-star { background-position: -224px -112px; }
|
||||||
|
.ui-icon-link { background-position: -240px -112px; }
|
||||||
|
.ui-icon-cancel { background-position: 0 -128px; }
|
||||||
|
.ui-icon-plus { background-position: -16px -128px; }
|
||||||
|
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||||
|
.ui-icon-minus { background-position: -48px -128px; }
|
||||||
|
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||||
|
.ui-icon-close { background-position: -80px -128px; }
|
||||||
|
.ui-icon-closethick { background-position: -96px -128px; }
|
||||||
|
.ui-icon-key { background-position: -112px -128px; }
|
||||||
|
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||||
|
.ui-icon-scissors { background-position: -144px -128px; }
|
||||||
|
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||||
|
.ui-icon-copy { background-position: -176px -128px; }
|
||||||
|
.ui-icon-contact { background-position: -192px -128px; }
|
||||||
|
.ui-icon-image { background-position: -208px -128px; }
|
||||||
|
.ui-icon-video { background-position: -224px -128px; }
|
||||||
|
.ui-icon-script { background-position: -240px -128px; }
|
||||||
|
.ui-icon-alert { background-position: 0 -144px; }
|
||||||
|
.ui-icon-info { background-position: -16px -144px; }
|
||||||
|
.ui-icon-notice { background-position: -32px -144px; }
|
||||||
|
.ui-icon-help { background-position: -48px -144px; }
|
||||||
|
.ui-icon-check { background-position: -64px -144px; }
|
||||||
|
.ui-icon-bullet { background-position: -80px -144px; }
|
||||||
|
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||||
|
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||||
|
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||||
|
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||||
|
.ui-icon-play { background-position: 0 -160px; }
|
||||||
|
.ui-icon-pause { background-position: -16px -160px; }
|
||||||
|
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||||
|
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||||
|
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||||
|
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||||
|
.ui-icon-stop { background-position: -96px -160px; }
|
||||||
|
.ui-icon-eject { background-position: -112px -160px; }
|
||||||
|
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||||
|
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||||
|
.ui-icon-power { background-position: 0 -176px; }
|
||||||
|
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||||
|
.ui-icon-signal { background-position: -32px -176px; }
|
||||||
|
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||||
|
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||||
|
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||||
|
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||||
|
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||||
|
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||||
|
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||||
|
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||||
|
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||||
|
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||||
|
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||||
|
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||||
|
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||||
|
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||||
|
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||||
|
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||||
|
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||||
|
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||||
|
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||||
|
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||||
|
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||||
|
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||||
|
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||||
|
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||||
|
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||||
|
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||||
|
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||||
|
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||||
|
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||||
|
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Corner radius */
|
||||||
|
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
|
||||||
|
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
||||||
|
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
||||||
|
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
||||||
|
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
||||||
|
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
||||||
|
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
||||||
|
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
||||||
|
/* .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } */
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
|
||||||
|
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||||
|
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||||
|
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||||
|
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
|
||||||
|
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
|
||||||
|
.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||||
|
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||||
|
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
|
||||||
|
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||||
|
.ui-datepicker select.ui-datepicker-month,
|
||||||
|
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||||
|
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
|
||||||
|
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||||
|
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||||
|
.ui-datepicker td { border: 0; padding: 1px; }
|
||||||
|
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||||
|
|
||||||
|
/* with multiple calendars */
|
||||||
|
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||||
|
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||||
|
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||||
|
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||||
|
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||||
|
|
||||||
|
/* RTL support */
|
||||||
|
.ui-datepicker-rtl { direction: rtl; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||||
|
|
||||||
|
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||||
|
.ui-datepicker-cover {
|
||||||
|
display: none; /*sorry for IE5*/
|
||||||
|
display/**/: block; /*sorry for IE5*/
|
||||||
|
position: absolute; /*must have*/
|
||||||
|
z-index: -1; /*must have*/
|
||||||
|
filter: mask(); /*must have*/
|
||||||
|
top: -4px; /*must have*/
|
||||||
|
left: -4px; /*must have*/
|
||||||
|
width: 200px; /*must have*/
|
||||||
|
height: 200px; /*must have*/
|
||||||
|
}/* Dialog
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-dialog { position: relative; padding: .2em; width: 300px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
|
||||||
|
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||||
|
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
||||||
|
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||||
|
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||||
|
/* Progressbar
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-progressbar { height:2em; text-align: left; }
|
||||||
|
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-resizable { position: relative;}
|
||||||
|
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
||||||
|
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||||
|
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
|
||||||
|
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
|
||||||
|
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
|
||||||
|
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
|
||||||
|
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||||
|
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||||
|
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||||
|
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-slider { position: relative; text-align: left; }
|
||||||
|
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||||
|
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
|
||||||
|
|
||||||
|
.ui-slider-horizontal { height: .8em; }
|
||||||
|
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||||
|
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||||
|
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||||
|
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||||
|
|
||||||
|
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||||
|
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||||
|
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||||
|
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||||
|
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-tabs { zoom: 1; }
|
||||||
|
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; background-color: #EE9B11; }
|
||||||
|
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
|
||||||
|
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .1em 1em; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||||
|
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||||
|
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
|
||||||
|
.ui-tabs .ui-tabs-hide { display: none !important; }
|
9
itf/static/css/jquery.tooltip.css
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#tooltip {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 3000;
|
||||||
|
border: 1px solid #111;
|
||||||
|
background-color: #eee;
|
||||||
|
padding: 5px;
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
#tooltip h3, #tooltip div { margin: 0; }
|
104
itf/static/css/meeting.css
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
.session {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabText {
|
||||||
|
width: 90%;
|
||||||
|
overflow-x: hide;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabs {
|
||||||
|
font-family: Arial, Georgia, Helvetica, mono !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabs ul {
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-tabs-hide {
|
||||||
|
position: absolute;
|
||||||
|
left: -10000px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sessionIntro {
|
||||||
|
/* margin-bottom: 15px; */
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sessionTitle {
|
||||||
|
cursor: pointer;
|
||||||
|
/* margin-bottom: 10px; */
|
||||||
|
font-size: 12px;
|
||||||
|
color: #c73e2b;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sessionChild {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.talksTitle {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.talkIcons {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.myToolTip {
|
||||||
|
width: 350px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ttIntro {
|
||||||
|
font-size 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rightclickHelp {
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 11px;
|
||||||
|
display: block;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabTitle {
|
||||||
|
color: #582E1E;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.talks li {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.readingMatTitle a, .readingMatTitle a:visited {
|
||||||
|
text-decoration: none !important;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #c73e2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.readingMatTitle a:hover {
|
||||||
|
color: #5f3326;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#commentForm {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#comment_form_errors {
|
||||||
|
color: #FF4400;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment_meta span {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
28
itf/static/css/people.css
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
.pName {
|
||||||
|
text-align: left;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: bold;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pName a:link, .pName a:visited {
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #852002 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pName a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #E15517 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pBio {
|
||||||
|
text-align: left;
|
||||||
|
display: none;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pWrapper {
|
||||||
|
margin-bottom: 3px;
|
||||||
|
}
|
163
itf/static/css/thickbox.css
Normal file
|
@ -0,0 +1,163 @@
|
||||||
|
/* ----------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/
|
||||||
|
/* ----------------------------------------------------------------------------------------------------------------*/
|
||||||
|
*{padding: 0; margin: 0;}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/
|
||||||
|
/* ----------------------------------------------------------------------------------------------------------------*/
|
||||||
|
#TB_window {
|
||||||
|
font: 12px Arial, Helvetica, sans-serif;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_secondLine {
|
||||||
|
font: 10px Arial, Helvetica, sans-serif;
|
||||||
|
color:#666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_window a:link {color: #666666;}
|
||||||
|
#TB_window a:visited {color: #666666;}
|
||||||
|
#TB_window a:hover {color: #000;}
|
||||||
|
#TB_window a:active {color: #666666;}
|
||||||
|
#TB_window a:focus{color: #666666;}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/
|
||||||
|
/* ----------------------------------------------------------------------------------------------------------------*/
|
||||||
|
#TB_overlay {
|
||||||
|
position: fixed;
|
||||||
|
z-index:100;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
height:100%;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;}
|
||||||
|
.TB_overlayBG {
|
||||||
|
background-color:#000;
|
||||||
|
filter:alpha(opacity=75);
|
||||||
|
-moz-opacity: 0.75;
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
* html #TB_overlay { /* ie6 hack */
|
||||||
|
position: absolute;
|
||||||
|
height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_window {
|
||||||
|
position: fixed;
|
||||||
|
background: #ffffff;
|
||||||
|
z-index: 102;
|
||||||
|
color:#000000;
|
||||||
|
display:none;
|
||||||
|
border: 4px solid #525252;
|
||||||
|
text-align:left;
|
||||||
|
top:50%;
|
||||||
|
left:50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
* html #TB_window { /* ie6 hack */
|
||||||
|
position: absolute;
|
||||||
|
margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_window img#TB_Image {
|
||||||
|
display:block;
|
||||||
|
margin: 15px 0 0 15px;
|
||||||
|
border-right: 1px solid #ccc;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
border-top: 1px solid #666;
|
||||||
|
border-left: 1px solid #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_caption{
|
||||||
|
height:25px;
|
||||||
|
padding:7px 30px 10px 25px;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_closeWindow{
|
||||||
|
height:25px;
|
||||||
|
padding:11px 25px 10px 0;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_closeAjaxWindow{
|
||||||
|
padding:7px 10px 5px 0;
|
||||||
|
margin-bottom:1px;
|
||||||
|
text-align:right;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_ajaxWindowTitle{
|
||||||
|
float:left;
|
||||||
|
padding:7px 0 5px 10px;
|
||||||
|
margin-bottom:1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_title{
|
||||||
|
background-color:#e8e8e8;
|
||||||
|
height:27px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_ajaxContent{
|
||||||
|
clear:both;
|
||||||
|
padding:2px 15px 15px 15px;
|
||||||
|
overflow:auto;
|
||||||
|
text-align:left;
|
||||||
|
line-height:1.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_ajaxContent.TB_modal{
|
||||||
|
padding:15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_ajaxContent p{
|
||||||
|
padding:5px 0px 5px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_load{
|
||||||
|
position: fixed;
|
||||||
|
display:none;
|
||||||
|
height:13px;
|
||||||
|
width:208px;
|
||||||
|
z-index:103;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
* html #TB_load { /* ie6 hack */
|
||||||
|
position: absolute;
|
||||||
|
margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_HideSelect{
|
||||||
|
z-index:99;
|
||||||
|
position:fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color:#fff;
|
||||||
|
border:none;
|
||||||
|
filter:alpha(opacity=0);
|
||||||
|
-moz-opacity: 0;
|
||||||
|
opacity: 0;
|
||||||
|
height:100%;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
* html #TB_HideSelect { /* ie6 hack */
|
||||||
|
position: absolute;
|
||||||
|
height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
|
||||||
|
}
|
||||||
|
|
||||||
|
#TB_iframeContent{
|
||||||
|
clear:both;
|
||||||
|
border:none;
|
||||||
|
margin-bottom:-1px;
|
||||||
|
margin-top:1px;
|
||||||
|
_margin-bottom:1px;
|
||||||
|
}
|
200
itf/static/css/wireframe.css
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
#pageTitle
|
||||||
|
{
|
||||||
|
margin-left: 0px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#welcomeText
|
||||||
|
{
|
||||||
|
color: #fff;
|
||||||
|
font-size: 17px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.centerText{
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rightText{
|
||||||
|
font-size: 11px;
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#emailInput
|
||||||
|
{
|
||||||
|
color: #d4a03a;
|
||||||
|
background: #fffcc7;
|
||||||
|
border: 1px solid #852002;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftNav {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
width: 150px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftNav li {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftNav li a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #852002;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
background: #e15517;
|
||||||
|
width: 150px;
|
||||||
|
/* border: 1px solid #852002; */
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftNav li a:link {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #852002;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftNav li a:visited {
|
||||||
|
color: #852002;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftNav li a:hover {
|
||||||
|
background: #c52620;
|
||||||
|
color: yellow;
|
||||||
|
/* border: 1px solid #000; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.currentNav a {
|
||||||
|
color: #652d00 !important;
|
||||||
|
background: #f8c301 !important;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.currentNav a:link {
|
||||||
|
color: #fff !important;
|
||||||
|
background: #f8c301 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.currentNav a:hover {
|
||||||
|
/* border: 1px solid #d13 !important; */
|
||||||
|
color: #831717 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerContent {
|
||||||
|
padding: 25px;
|
||||||
|
background: #fffcc7;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerContent h1, h2, h3, h4, h5 {
|
||||||
|
color: #582e1e;
|
||||||
|
text-align: left;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerContent a {
|
||||||
|
color: #c73e2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerContent a:visited {
|
||||||
|
color: #c73e2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#centerContent a:hover {
|
||||||
|
color: #5f3326;
|
||||||
|
}
|
||||||
|
|
||||||
|
#submitText {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
background: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus {
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.helper {
|
||||||
|
display: none;
|
||||||
|
font-size: -1;
|
||||||
|
background: #ccc;
|
||||||
|
border-bottom: 1px dashed #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.objWrapper {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.titleLink {
|
||||||
|
text-align: left;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
color:#C73E2B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.titleLink a {
|
||||||
|
font-weight: bold;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.titleLink a:hover {
|
||||||
|
color: #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
#submitting {
|
||||||
|
display: none;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
a img {
|
||||||
|
border: 0px solid #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color: #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
#emailSignup {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #ee9b11 !important;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more a:hover {
|
||||||
|
color: #5f3326 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right2 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rightMore a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rightMore a:hover {
|
||||||
|
color: #5f3326;
|
||||||
|
}
|
BIN
itf/static/images/150x150.jpg
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
itf/static/images/50x50.jpg
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
itf/static/images/Audio.jpg
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
itf/static/images/Lowbg_bak.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
itf/static/images/PDFIcon.jpg
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
itf/static/images/VideoIcon.jpg
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
itf/static/images/audio.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
itf/static/images/bg1.jpg
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
itf/static/images/book.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
itf/static/images/border.png
Normal file
After Width: | Height: | Size: 112 B |
BIN
itf/static/images/controls.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
itf/static/images/document.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
itf/static/images/favicon.ico
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
itf/static/images/image.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
itf/static/images/internet_explorer/borderBottomCenter.png
Normal file
After Width: | Height: | Size: 111 B |
BIN
itf/static/images/internet_explorer/borderBottomLeft.png
Normal file
After Width: | Height: | Size: 215 B |
BIN
itf/static/images/internet_explorer/borderBottomRight.png
Normal file
After Width: | Height: | Size: 217 B |
BIN
itf/static/images/internet_explorer/borderMiddleLeft.png
Normal file
After Width: | Height: | Size: 108 B |
BIN
itf/static/images/internet_explorer/borderMiddleRight.png
Normal file
After Width: | Height: | Size: 108 B |
BIN
itf/static/images/internet_explorer/borderTopCenter.png
Normal file
After Width: | Height: | Size: 111 B |
BIN
itf/static/images/internet_explorer/borderTopLeft.png
Normal file
After Width: | Height: | Size: 216 B |
BIN
itf/static/images/internet_explorer/borderTopRight.png
Normal file
After Width: | Height: | Size: 214 B |
BIN
itf/static/images/large_audio.gif
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
itf/static/images/loading.gif
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
itf/static/images/loadingAnimation.gif
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
itf/static/images/loading_background.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
itf/static/images/overlay.png
Normal file
After Width: | Height: | Size: 145 B |
BIN
itf/static/images/player.swf
Normal file
BIN
itf/static/images/playvid.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
itf/static/images/playvid100.jpg
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
itf/static/images/profileimage.jpg
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
itf/static/images/theatre.jpg
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
itf/static/images/video-mini.gif
Normal file
After Width: | Height: | Size: 384 B |
73
itf/static/js/festival.js
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
String.prototype.trim = function(){
|
||||||
|
return( this.replace(new RegExp("^([\\s]+)|([\\s]+)$", "gm"), "") );
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
// if ($('#centerContent').length > 0 && $.support.opacity) $('#centerContent').jScrollPane();
|
||||||
|
$('#emailInput').initDefaults();
|
||||||
|
$('#submitText').click(function() {
|
||||||
|
var that = this;
|
||||||
|
$(this).fadeOut("fast");
|
||||||
|
$('#submitting').fadeIn("fast");
|
||||||
|
$('#emailInput').attr("disabled", "disabled");
|
||||||
|
var email = $('#emailInput').val();
|
||||||
|
$.get("/itf/save_email/", {
|
||||||
|
'email': email
|
||||||
|
}, function(res) {
|
||||||
|
if (res == '1') {
|
||||||
|
$('#emailSignup').hide();
|
||||||
|
$('#emailSignup').html("Thanks for signing up!");
|
||||||
|
$('#emailSignup').slideDown("slow");
|
||||||
|
} else {
|
||||||
|
$('#emailInput').removeAttr("disabled");
|
||||||
|
$('#welcomeText').hide();
|
||||||
|
$('#welcomeText').html("Please enter a valid email address: ");
|
||||||
|
$('#welcomeText').addClass("error");
|
||||||
|
$('#welcomeText').show();
|
||||||
|
$('#submitting').hide();
|
||||||
|
$('#submitText').fadeIn("fast");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('#submitText').hover(function() {
|
||||||
|
$(this).css("color", "#f8c301");
|
||||||
|
}, function() {
|
||||||
|
$(this).css("color", "#fff");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function showNext() {
|
||||||
|
$('#right2').show("slow");
|
||||||
|
$('.rightMore').hide();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
$('#leftNav > li > a').mouseover(function() {
|
||||||
|
$(this).next().slideDown("fast");
|
||||||
|
});
|
||||||
|
$('#leftNav > li').mouseout(function() {
|
||||||
|
$(this).children('.helper').slideUp("fast");
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
jQuery.fn.initDefaults = function() {
|
||||||
|
this.each(function() {
|
||||||
|
if ($(this).val().trim() == '') {
|
||||||
|
var val = $(this).attr("data-default");
|
||||||
|
$(this).val(val);
|
||||||
|
}
|
||||||
|
$(this).focus(function() {
|
||||||
|
if ($(this).val() === $(this).attr('data-default')) {
|
||||||
|
$(this).val('');
|
||||||
|
}
|
||||||
|
}).blur(function() {
|
||||||
|
var that = $(this);
|
||||||
|
if ($(this).val().trim() == '') {
|
||||||
|
$(this).val(that.attr("data-default"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
1238
itf/static/js/fullcalendar.js
Normal file
16
itf/static/js/fullcalendar.min.js
vendored
Normal file
1
itf/static/js/jScrollPane-1.2.3.min.js
vendored
Normal file
16
itf/static/js/jcarousel.js
Normal file
19
itf/static/js/jquery-1.3.2.min.js
vendored
Executable file
34
itf/static/js/jquery-ui-1.7.2.custom.min.js
vendored
Normal file
2
itf/static/js/jquery.colorbox-min.js
vendored
Normal file
60
itf/static/js/jquery.mousewheel.js
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
/*! Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
|
||||||
|
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||||
|
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
|
||||||
|
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
|
||||||
|
*
|
||||||
|
* Version: 3.0.2
|
||||||
|
*
|
||||||
|
* Requires: 1.2.2+
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
|
||||||
|
var types = ['DOMMouseScroll', 'mousewheel'];
|
||||||
|
|
||||||
|
$.event.special.mousewheel = {
|
||||||
|
setup: function() {
|
||||||
|
if ( this.addEventListener )
|
||||||
|
for ( var i=types.length; i; )
|
||||||
|
this.addEventListener( types[--i], handler, false );
|
||||||
|
else
|
||||||
|
this.onmousewheel = handler;
|
||||||
|
},
|
||||||
|
|
||||||
|
teardown: function() {
|
||||||
|
if ( this.removeEventListener )
|
||||||
|
for ( var i=types.length; i; )
|
||||||
|
this.removeEventListener( types[--i], handler, false );
|
||||||
|
else
|
||||||
|
this.onmousewheel = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.extend({
|
||||||
|
mousewheel: function(fn) {
|
||||||
|
return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
|
||||||
|
},
|
||||||
|
|
||||||
|
unmousewheel: function(fn) {
|
||||||
|
return this.unbind("mousewheel", fn);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function handler(event) {
|
||||||
|
var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
|
||||||
|
|
||||||
|
event = $.event.fix(event || window.event);
|
||||||
|
event.type = "mousewheel";
|
||||||
|
|
||||||
|
if ( event.wheelDelta ) delta = event.wheelDelta/120;
|
||||||
|
if ( event.detail ) delta = -event.detail/3;
|
||||||
|
|
||||||
|
// Add events and delta to the front of the arguments
|
||||||
|
args.unshift(event, delta);
|
||||||
|
|
||||||
|
return $.event.handle.apply(this, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
})(jQuery);
|
294
itf/static/js/jquery.tooltip.js
Normal file
|
@ -0,0 +1,294 @@
|
||||||
|
/*
|
||||||
|
* jQuery Tooltip plugin 1.3
|
||||||
|
*
|
||||||
|
* http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
|
||||||
|
* http://docs.jquery.com/Plugins/Tooltip
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006 - 2008 Jörn Zaefferer
|
||||||
|
*
|
||||||
|
* $Id: jquery.tooltip.js 5741 2008-06-21 15:22: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($) {
|
||||||
|
|
||||||
|
// the tooltip element
|
||||||
|
var helper = {},
|
||||||
|
// the current tooltipped element
|
||||||
|
current,
|
||||||
|
// the title of the current element, used for restoring
|
||||||
|
title,
|
||||||
|
// timeout id for delayed tooltips
|
||||||
|
tID,
|
||||||
|
// IE 5.5 or 6
|
||||||
|
IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
|
||||||
|
// flag for mouse tracking
|
||||||
|
track = false;
|
||||||
|
|
||||||
|
$.tooltip = {
|
||||||
|
blocked: false,
|
||||||
|
defaults: {
|
||||||
|
delay: 200,
|
||||||
|
fade: false,
|
||||||
|
showURL: true,
|
||||||
|
extraClass: "",
|
||||||
|
top: 15,
|
||||||
|
left: 15,
|
||||||
|
id: "tooltip"
|
||||||
|
},
|
||||||
|
block: function() {
|
||||||
|
$.tooltip.blocked = !$.tooltip.blocked;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.extend({
|
||||||
|
tooltip: function(settings) {
|
||||||
|
settings = $.extend({}, $.tooltip.defaults, settings);
|
||||||
|
createHelper(settings);
|
||||||
|
return this.each(function() {
|
||||||
|
$.data(this, "tooltip", settings);
|
||||||
|
this.tOpacity = helper.parent.css("opacity");
|
||||||
|
// copy tooltip into its own expando and remove the title
|
||||||
|
this.tooltipText = this.title;
|
||||||
|
$(this).removeAttr("title");
|
||||||
|
// also remove alt attribute to prevent default tooltip in IE
|
||||||
|
this.alt = "";
|
||||||
|
})
|
||||||
|
.mouseover(save)
|
||||||
|
.mouseout(hide)
|
||||||
|
.click(hide);
|
||||||
|
},
|
||||||
|
fixPNG: IE ? function() {
|
||||||
|
return this.each(function () {
|
||||||
|
var image = $(this).css('backgroundImage');
|
||||||
|
if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
|
||||||
|
image = RegExp.$1;
|
||||||
|
$(this).css({
|
||||||
|
'backgroundImage': 'none',
|
||||||
|
'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
|
||||||
|
}).each(function () {
|
||||||
|
var position = $(this).css('position');
|
||||||
|
if (position != 'absolute' && position != 'relative')
|
||||||
|
$(this).css('position', 'relative');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} : function() { return this; },
|
||||||
|
unfixPNG: IE ? function() {
|
||||||
|
return this.each(function () {
|
||||||
|
$(this).css({'filter': '', backgroundImage: ''});
|
||||||
|
});
|
||||||
|
} : function() { return this; },
|
||||||
|
hideWhenEmpty: function() {
|
||||||
|
return this.each(function() {
|
||||||
|
$(this)[ $(this).html() ? "show" : "hide" ]();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
url: function() {
|
||||||
|
return this.attr('href') || this.attr('src');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function createHelper(settings) {
|
||||||
|
// there can be only one tooltip helper
|
||||||
|
if( helper.parent )
|
||||||
|
return;
|
||||||
|
// create the helper, h3 for title, div for url
|
||||||
|
helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')
|
||||||
|
// add to document
|
||||||
|
.appendTo(document.body)
|
||||||
|
// hide it at first
|
||||||
|
.hide();
|
||||||
|
|
||||||
|
// apply bgiframe if available
|
||||||
|
if ( $.fn.bgiframe )
|
||||||
|
helper.parent.bgiframe();
|
||||||
|
|
||||||
|
// save references to title and url elements
|
||||||
|
helper.title = $('h3', helper.parent);
|
||||||
|
helper.body = $('div.body', helper.parent);
|
||||||
|
helper.url = $('div.url', helper.parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
function settings(element) {
|
||||||
|
return $.data(element, "tooltip");
|
||||||
|
}
|
||||||
|
|
||||||
|
// main event handler to start showing tooltips
|
||||||
|
function handle(event) {
|
||||||
|
// show helper, either with timeout or on instant
|
||||||
|
if( settings(this).delay )
|
||||||
|
tID = setTimeout(show, settings(this).delay);
|
||||||
|
else
|
||||||
|
show();
|
||||||
|
|
||||||
|
// if selected, update the helper position when the mouse moves
|
||||||
|
track = !!settings(this).track;
|
||||||
|
$(document.body).bind('mousemove', update);
|
||||||
|
|
||||||
|
// update at least once
|
||||||
|
update(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// save elements title before the tooltip is displayed
|
||||||
|
function save() {
|
||||||
|
// if this is the current source, or it has no title (occurs with click event), stop
|
||||||
|
if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// save current
|
||||||
|
current = this;
|
||||||
|
title = this.tooltipText;
|
||||||
|
|
||||||
|
if ( settings(this).bodyHandler ) {
|
||||||
|
helper.title.hide();
|
||||||
|
var bodyContent = settings(this).bodyHandler.call(this);
|
||||||
|
if (bodyContent.nodeType || bodyContent.jquery) {
|
||||||
|
helper.body.empty().append(bodyContent)
|
||||||
|
} else {
|
||||||
|
helper.body.html( bodyContent );
|
||||||
|
}
|
||||||
|
helper.body.show();
|
||||||
|
} else if ( settings(this).showBody ) {
|
||||||
|
var parts = title.split(settings(this).showBody);
|
||||||
|
helper.title.html(parts.shift()).show();
|
||||||
|
helper.body.empty();
|
||||||
|
for(var i = 0, part; (part = parts[i]); i++) {
|
||||||
|
if(i > 0)
|
||||||
|
helper.body.append("<br/>");
|
||||||
|
helper.body.append(part);
|
||||||
|
}
|
||||||
|
helper.body.hideWhenEmpty();
|
||||||
|
} else {
|
||||||
|
helper.title.html(title).show();
|
||||||
|
helper.body.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if element has href or src, add and show it, otherwise hide it
|
||||||
|
if( settings(this).showURL && $(this).url() )
|
||||||
|
helper.url.html( $(this).url().replace('http://', '') ).show();
|
||||||
|
else
|
||||||
|
helper.url.hide();
|
||||||
|
|
||||||
|
// add an optional class for this tip
|
||||||
|
helper.parent.addClass(settings(this).extraClass);
|
||||||
|
|
||||||
|
// fix PNG background for IE
|
||||||
|
if (settings(this).fixPNG )
|
||||||
|
helper.parent.fixPNG();
|
||||||
|
|
||||||
|
handle.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete timeout and show helper
|
||||||
|
function show() {
|
||||||
|
tID = null;
|
||||||
|
if ((!IE || !$.fn.bgiframe) && settings(current).fade) {
|
||||||
|
if (helper.parent.is(":animated"))
|
||||||
|
helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity);
|
||||||
|
else
|
||||||
|
helper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade);
|
||||||
|
} else {
|
||||||
|
helper.parent.show();
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* callback for mousemove
|
||||||
|
* updates the helper position
|
||||||
|
* removes itself when no current element
|
||||||
|
*/
|
||||||
|
function update(event) {
|
||||||
|
if($.tooltip.blocked)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event && event.target.tagName == "OPTION") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// stop updating when tracking is disabled and the tooltip is visible
|
||||||
|
if ( !track && helper.parent.is(":visible")) {
|
||||||
|
$(document.body).unbind('mousemove', update)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no current element is available, remove this listener
|
||||||
|
if( current == null ) {
|
||||||
|
$(document.body).unbind('mousemove', update);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove position helper classes
|
||||||
|
helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");
|
||||||
|
|
||||||
|
var left = helper.parent[0].offsetLeft;
|
||||||
|
var top = helper.parent[0].offsetTop;
|
||||||
|
if (event) {
|
||||||
|
// position the helper 15 pixel to bottom right, starting from mouse position
|
||||||
|
left = event.pageX + settings(current).left;
|
||||||
|
top = event.pageY + settings(current).top;
|
||||||
|
var right='auto';
|
||||||
|
if (settings(current).positionLeft) {
|
||||||
|
right = $(window).width() - left;
|
||||||
|
left = 'auto';
|
||||||
|
}
|
||||||
|
helper.parent.css({
|
||||||
|
left: left,
|
||||||
|
right: right,
|
||||||
|
top: top
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var v = viewport(),
|
||||||
|
h = helper.parent[0];
|
||||||
|
// check horizontal position
|
||||||
|
if (v.x + v.cx < h.offsetLeft + h.offsetWidth) {
|
||||||
|
left -= h.offsetWidth + 20 + settings(current).left;
|
||||||
|
helper.parent.css({left: left + 'px'}).addClass("viewport-right");
|
||||||
|
}
|
||||||
|
// check vertical position
|
||||||
|
if (v.y + v.cy < h.offsetTop + h.offsetHeight) {
|
||||||
|
top -= h.offsetHeight + 20 + settings(current).top;
|
||||||
|
helper.parent.css({top: top + 'px'}).addClass("viewport-bottom");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function viewport() {
|
||||||
|
return {
|
||||||
|
x: $(window).scrollLeft(),
|
||||||
|
y: $(window).scrollTop(),
|
||||||
|
cx: $(window).width(),
|
||||||
|
cy: $(window).height()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// hide helper and restore added classes and the title
|
||||||
|
function hide(event) {
|
||||||
|
if($.tooltip.blocked)
|
||||||
|
return;
|
||||||
|
// clear timeout if possible
|
||||||
|
if(tID)
|
||||||
|
clearTimeout(tID);
|
||||||
|
// no more current element
|
||||||
|
current = null;
|
||||||
|
|
||||||
|
var tsettings = settings(this);
|
||||||
|
function complete() {
|
||||||
|
helper.parent.removeClass( tsettings.extraClass ).hide().css("opacity", "");
|
||||||
|
}
|
||||||
|
if ((!IE || !$.fn.bgiframe) && tsettings.fade) {
|
||||||
|
if (helper.parent.is(':animated'))
|
||||||
|
helper.parent.stop().fadeTo(tsettings.fade, 0, complete);
|
||||||
|
else
|
||||||
|
helper.parent.stop().fadeOut(tsettings.fade, complete);
|
||||||
|
} else
|
||||||
|
complete();
|
||||||
|
|
||||||
|
if( settings(this).fixPNG )
|
||||||
|
helper.parent.unfixPNG();
|
||||||
|
}
|
||||||
|
|
||||||
|
})(jQuery);
|
26
itf/static/js/jquery.transliterate.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
Use like $(elem).GTransliterate(lang);
|
||||||
|
where lang = a language code like "hi", "ka", etc.
|
||||||
|
Make sure to include <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> at top of page
|
||||||
|
Also, you must include this at the top of your page:
|
||||||
|
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
|
||||||
|
*/
|
||||||
|
|
||||||
|
google.load("elements", "1", {
|
||||||
|
packages: 'transliteration'
|
||||||
|
});
|
||||||
|
|
||||||
|
jQuery.fn.GTransliterate = function(lang) {
|
||||||
|
var options = {
|
||||||
|
sourceLanguage: 'en',
|
||||||
|
destinationLanguage: [lang],
|
||||||
|
transliterationEnabled: true
|
||||||
|
}
|
||||||
|
var thisId = this.attr('id');
|
||||||
|
var GControl = new google.elements.transliteration.TransliterationControl(options);
|
||||||
|
GControl.makeTransliteratable([thisId]);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
256
itf/static/js/mockup.js
Normal file
|
@ -0,0 +1,256 @@
|
||||||
|
var calJson = [{
|
||||||
|
'id': 1,
|
||||||
|
'title': 'Midsummers Night Dream',
|
||||||
|
'date': new Date()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'title': 'Childrens Acting Workshop',
|
||||||
|
'date': getFutureDate(3)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 3,
|
||||||
|
'title': 'एक हिंदी नाटक',
|
||||||
|
'date': getPastDate(5)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 4,
|
||||||
|
'title': 'Workshop Series by Jehan Maneckshaw',
|
||||||
|
'start': getPastDate(8),
|
||||||
|
'end': getPastDate(4),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 5,
|
||||||
|
'title': 'Lorem Ipsum Dolor Amet',
|
||||||
|
'date': getFutureDate(5)
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
function getFutureDate(no) {
|
||||||
|
var now = new Date();
|
||||||
|
now.setDate(now.getDate() + no);
|
||||||
|
// console.log(now.getDate());
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPastDate(no) {
|
||||||
|
var now = new Date();
|
||||||
|
now.setDate(now.getDate() - no);
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
// $('#mycarousel').jcarousel();
|
||||||
|
// initMap();
|
||||||
|
//Behaviour of top drop-down dialog
|
||||||
|
//TODO: remove global var currentlyDisplayedDialog
|
||||||
|
currentlyDisplayedDialog = '';
|
||||||
|
$('.dialogLink').live("click", function() {
|
||||||
|
if (currentlyDisplayedDialog != '') {
|
||||||
|
$('#' + currentlyDisplayedDialog).slideUp();
|
||||||
|
}
|
||||||
|
var target = $(this).attr("data-target");
|
||||||
|
var targetSelector = '#' + target;
|
||||||
|
var t = $(targetSelector);
|
||||||
|
if (target == currentlyDisplayedDialog) {
|
||||||
|
t.slideUp();
|
||||||
|
currentlyDisplayedDialog = '';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//Adds header elem from title attr and adds close button.
|
||||||
|
if (t.children(".dialogTitle").length === 0) {
|
||||||
|
var titleElem = $('<div />');
|
||||||
|
titleElem.addClass('dialogTitle');
|
||||||
|
titleElem.text(t.attr("title"));
|
||||||
|
var closeBtn = $('<div />');
|
||||||
|
closeBtn.addClass('closeBtn');
|
||||||
|
closeBtn.attr("data-target", target);
|
||||||
|
closeBtn.text("X");
|
||||||
|
closeBtn.click(function() {
|
||||||
|
var tempTarg = $(this).attr("data-target");
|
||||||
|
$('#' + tempTarg).slideUp();
|
||||||
|
currentlyDisplayedDialog = '';
|
||||||
|
});
|
||||||
|
titleElem.append(closeBtn);
|
||||||
|
t.prepend(titleElem);
|
||||||
|
}
|
||||||
|
t.slideDown();
|
||||||
|
currentlyDisplayedDialog = target;
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
//top button hover states.
|
||||||
|
//TODO use addClass / removeClass
|
||||||
|
addTopHovers();
|
||||||
|
$('.toplink').hover(function() {
|
||||||
|
$(this).css({'font-weight': 'bold', 'color': '#fff'});
|
||||||
|
}, function() {
|
||||||
|
$(this).css({'font-weight': 'normal', 'color': '#eee'});
|
||||||
|
});
|
||||||
|
|
||||||
|
//center buttons hover states
|
||||||
|
$('.centerBtn').hover(function() {
|
||||||
|
$(this).addClass('centerBtnHover');
|
||||||
|
}, function() {
|
||||||
|
$(this).removeClass('centerBtnHover');
|
||||||
|
});
|
||||||
|
|
||||||
|
//Handles center tabs: displays the div specified in data-target and if data-source is set, loads data from url specified.
|
||||||
|
//TODO: remove use of global currentlyDisplayedTab
|
||||||
|
currentlyDisplayedTab = '';
|
||||||
|
$('.tabBtn').live("click", function() {
|
||||||
|
var that = $(this);
|
||||||
|
var target = $(this).attr('data-target');
|
||||||
|
var tElem = $('#' + target);
|
||||||
|
if (currentlyDisplayedTab == target) {
|
||||||
|
return true;
|
||||||
|
} else if (currentlyDisplayedTab == '') {
|
||||||
|
tElem.show();
|
||||||
|
currentlyDisplayedTab = target;
|
||||||
|
} else {
|
||||||
|
var cElem = $('#' + currentlyDisplayedTab);
|
||||||
|
cElem.hide();
|
||||||
|
tElem.show();
|
||||||
|
$('.tabBtn').filter("div[data-target=" + currentlyDisplayedTab + "]").removeClass("centerBtnSelected");
|
||||||
|
currentlyDisplayedTab = target;
|
||||||
|
if (that.attr('data-source')) {
|
||||||
|
if (!tElem.attr("data-loaded")) {
|
||||||
|
var dataSource = that.attr('data-source');
|
||||||
|
tElem.load(dataSource);
|
||||||
|
tElem.attr("data-loaded", "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
that.addClass('centerBtnSelected');
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
//toggle function for left menu collapsibles
|
||||||
|
$('.leftTab').toggle(function() {
|
||||||
|
$(this).next().slideDown();
|
||||||
|
// $(this).css('text-decoration', 'underline');
|
||||||
|
}, function() {
|
||||||
|
$(this).next().slideUp();
|
||||||
|
// $(this).css('text-decoration', 'none');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
isAnimating = [];
|
||||||
|
$('.basicLink').each(function() {
|
||||||
|
var innerText = $(this).children('.basicLinkInner').text();
|
||||||
|
$(this).attr('data-id', innerText);
|
||||||
|
isAnimating[innerText] = false;
|
||||||
|
});
|
||||||
|
$('.basicLink').hover(function() {
|
||||||
|
var id = $(this).attr('data-id');
|
||||||
|
isAnimating[id] = true;
|
||||||
|
$(this).children('.basicLinkInner').animate({'right': '150px'}, 500, function() {
|
||||||
|
isAnimating[id] = false;
|
||||||
|
});
|
||||||
|
}, function() {
|
||||||
|
$(this).children('.basicLinkInner').stop();
|
||||||
|
$(this).children('.basicLinkInner').css("right", "0px");
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
$('#basicLinks').mouseout(function() {
|
||||||
|
$('.basicLinkInner').stop();
|
||||||
|
$('.basicLinkInner').each(function() {
|
||||||
|
var currRight = $(this).css("right");
|
||||||
|
if (currRight != '0px') {
|
||||||
|
$(this).animate({'right': '0px'}, 250);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
/*.mouseout(function() {
|
||||||
|
$(this).stop();
|
||||||
|
$(this).children('.basicLinkInner').animate({'right': '0px'}, 250);
|
||||||
|
});*/
|
||||||
|
|
||||||
|
//silly function to add a 'See All' to the end of the left tab contents, might be evil.
|
||||||
|
$('.leftTabContent').each(function() {
|
||||||
|
var e = $('<div />');
|
||||||
|
e.addClass('seeAll');
|
||||||
|
e.text('See All');
|
||||||
|
$(this).append(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//also a bit silly, simulates a click on the calendar button to make it the default displayed.
|
||||||
|
$('#calendarBtn').click();
|
||||||
|
$('#tabCalendar').fullCalendar({
|
||||||
|
'events': calJson
|
||||||
|
});
|
||||||
|
$('#newsBtn').click();
|
||||||
|
|
||||||
|
//onclick handler to close admin message box
|
||||||
|
$('#adminMessageBoxClose').click(function() {
|
||||||
|
$('#adminMessageBox').slideUp();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#loginSubmit').click(function() {
|
||||||
|
$('#loginDialog').slideUp();
|
||||||
|
$('#adminMessage').slideUp(500, function() {
|
||||||
|
$(this).html("You are now logged in.");
|
||||||
|
$(this).show()
|
||||||
|
$('#adminMessageBox').slideDown();
|
||||||
|
var html = getLoggedInHtml();
|
||||||
|
$('#loginRegister').html(html);
|
||||||
|
addTopHovers();
|
||||||
|
addLoggedInClickHandlers();
|
||||||
|
$('#profileButton').click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function addLoggedInClickHandlers() {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLoggedInHtml() {
|
||||||
|
var html = '';
|
||||||
|
html += '<div id="loggedInButtons">';
|
||||||
|
html += '<div class="topBtn loggedIn tabBtn" data-target="tabProfile" data-source="/x0profile" id="profileButton" data-target="">Profile </div>';
|
||||||
|
html += '<div class="topBtn loggedIn" id="messagesButton" data-target=""> Messages </div>';
|
||||||
|
html += '<div class="topBtn loggedIn" id="connectionsButton" data-target=""> Connections</div>';
|
||||||
|
html += '</div>';
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTopHovers() {
|
||||||
|
$('.topBtn').hover(function() {
|
||||||
|
$(this).css("color", "#FCB281");
|
||||||
|
}, function() {
|
||||||
|
$(this).css("color", "#fff");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function initCarousel() {
|
||||||
|
$('#mycarousel').jcarousel({start: 3});
|
||||||
|
}
|
||||||
|
|
||||||
|
function initMap() {
|
||||||
|
var latlng = new google.maps.LatLng(19.13307, 72.91374);
|
||||||
|
var myOptions = {
|
||||||
|
zoom: 11,
|
||||||
|
center: latlng,
|
||||||
|
mapTypeId: google.maps.MapTypeId.ROADMAP
|
||||||
|
};
|
||||||
|
map = new google.maps.Map(document.getElementById("map"), myOptions);
|
||||||
|
var lonlat = [];
|
||||||
|
lonlat[0] = new google.maps.LatLng(19.063152313232, 72.829391479492);
|
||||||
|
lonlat[1] = new google.maps.LatLng(19.106038, 72.828798);
|
||||||
|
for (l in lonlat) {
|
||||||
|
if (lonlat.hasOwnProperty(l)) {
|
||||||
|
var m = new google.maps.Marker(lonlat[l]);
|
||||||
|
map.addOverlay(m);
|
||||||
|
/* google.maps.Event.addListener(m, 'click', function() {
|
||||||
|
m.openInfoWindowHtml("Details of the event would go here ... ");
|
||||||
|
}); */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
54
itf/static/js/mytrans.js
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
google.load("elements", "1", {
|
||||||
|
packages: 'transliteration'
|
||||||
|
});
|
||||||
|
|
||||||
|
//google.load("language", "1"):
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
var transElem = $('#id_translations-TOTAL_FORMS').parent();
|
||||||
|
transElem.remove();
|
||||||
|
var firstFormElem = $('.form-row:first');
|
||||||
|
firstFormElem.append(transElem);
|
||||||
|
//Add on blur to english field
|
||||||
|
$('#id_translations-0-firstname').blur(function() {
|
||||||
|
var strArr = $(this).val().split(" ");
|
||||||
|
google.language.transliterate(strArr, "en", "hi", function(result) {
|
||||||
|
if (!result.error) {
|
||||||
|
console.log(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$.getJSON("/getLanguages", {}, function(data) {
|
||||||
|
var myLanguages = data;
|
||||||
|
var destLangs = [];
|
||||||
|
var allTransIds = [];
|
||||||
|
for (var l in myLanguages) {
|
||||||
|
if (l >= 1) {
|
||||||
|
var lShort = myLanguages[l]['short']
|
||||||
|
destLangs.push(lShort);
|
||||||
|
var thisForm = transElem.find('.inline-related').eq(l);
|
||||||
|
thisForm.find('textarea, input').each(function() {
|
||||||
|
if ($(this).attr("type") != "hidden") {
|
||||||
|
var thisId = $(this).attr('id');
|
||||||
|
allTransIds.push(thisId);
|
||||||
|
$(this).attr("data-lang", lShort);
|
||||||
|
$(this).focus(function() {
|
||||||
|
var lang = $(this).attr("data-lang");
|
||||||
|
GControl.setLanguagePair("en", lang);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
var options = {
|
||||||
|
sourceLanguage: 'en',
|
||||||
|
destinationLanguage: destLangs,
|
||||||
|
transliterationEnabled: true
|
||||||
|
}
|
||||||
|
GControl = new google.elements.transliteration.TransliterationControl(options);
|
||||||
|
GControl.makeTransliteratable(allTransIds);
|
||||||
|
});
|
||||||
|
});
|
12
itf/static/js/people.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.pName').toggle(function() {
|
||||||
|
$(this).next().slideDown();
|
||||||
|
}, function() {
|
||||||
|
$(this).next().slideUp();
|
||||||
|
});
|
||||||
|
$('.pName').hover(function() {
|
||||||
|
$(this).css("color", "#582E1E");
|
||||||
|
}, function() {
|
||||||
|
$(this).css("color", "#C73E2B");
|
||||||
|
});
|
||||||
|
});
|
36
itf/static/js/pretty.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* JavaScript Pretty Date
|
||||||
|
* Copyright (c) 2008 John Resig (jquery.com)
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Takes an ISO time and returns a string representing how
|
||||||
|
// long ago the date represents.
|
||||||
|
function prettyDate(time){
|
||||||
|
var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
|
||||||
|
diff = (((new Date()).getTime() - date.getTime()) / 1000),
|
||||||
|
day_diff = Math.floor(diff / 86400);
|
||||||
|
|
||||||
|
if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
return day_diff == 0 && (
|
||||||
|
diff < 60 && "just now" ||
|
||||||
|
diff < 120 && "1 minute ago" ||
|
||||||
|
diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
|
||||||
|
diff < 7200 && "1 hour ago" ||
|
||||||
|
diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
|
||||||
|
day_diff == 1 && "Yesterday" ||
|
||||||
|
day_diff < 7 && day_diff + " days ago" ||
|
||||||
|
day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
|
||||||
|
}
|
||||||
|
|
||||||
|
// If jQuery is included in the page, adds a jQuery plugin to handle it as well
|
||||||
|
if ( typeof jQuery != "undefined" )
|
||||||
|
jQuery.fn.prettyDate = function(){
|
||||||
|
return this.each(function(){
|
||||||
|
var date = prettyDate(this.title);
|
||||||
|
if ( date )
|
||||||
|
jQuery(this).text( date );
|
||||||
|
});
|
||||||
|
};
|
8
itf/static/js/swfobject.js
Normal file
10
itf/static/js/thickbox.js
Normal file
16
itf/templates/404.html
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{% extends 'festival_wireframe.html' %}
|
||||||
|
|
||||||
|
{% block title %} Page Not Found {% endblock %}
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/error_pages.css" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block centerCol %}
|
||||||
|
<div class="errorTxt">
|
||||||
|
This is a website acting like it found the page you were looking for, but really didn't.
|
||||||
|
<br /><br />
|
||||||
|
Please check the url you typed in, and if it seems like an error on our part, please email admin@theatreforum.in.
|
||||||
|
<br /><br />
|
||||||
|
Thanks, and err.. apologies.
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
14
itf/templates/500.html
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends 'festival_wireframe.html' %}
|
||||||
|
|
||||||
|
{% block title %} Oops.. we made an error.. {% endblock %}
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/css/error_pages.css" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block centerCol %}
|
||||||
|
<div class="errorTxt">
|
||||||
|
Oops.. the website made a booboo.<br /><br />
|
||||||
|
Please contact admin@theatreforum.in if this error persists.<br /><br />
|
||||||
|
Thanks, and err.. apologies.
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
10
itf/templates/admin/base_site.html
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{% extends "admin/base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}{{ title }} | {% trans 'ITF site admin' %}{% endblock %}
|
||||||
|
|
||||||
|
{% block branding %}
|
||||||
|
<h1 id="site-name">{% trans 'India Theatre Forum Admin' %}</h1>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav-global %}{% endblock %}
|
32
itf/templates/erang.html
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{% extends 'festival_wireframe.html' %}
|
||||||
|
{% block title %}
|
||||||
|
ITF - eRang
|
||||||
|
{% endblock %}
|
||||||
|
{% block leftCol %}
|
||||||
|
<ul id="leftNav">
|
||||||
|
<li><a href="/itf/">Home</a></li>
|
||||||
|
<li><a href="/itf/meetings">Activities</a><div class="helper">ITF Meetings - transcripts, audio, discussions.</div></li>
|
||||||
|
<li><a href="/itf/projects">Projects</a><div class="helper">Projects undertaken by the ITF...</div></li>
|
||||||
|
<li class="currentNav"><a href="/itf/erang">e-Rang</a><div class="helper">The theatre newsletter...</div></li>
|
||||||
|
<li><a href="/itf/resources">Resources</a><div class="helper">Downloadable reading materials and resources</div></li>
|
||||||
|
<li><a href="/itf/surveys">Surveys</a><div class="helper">Surveys about theatre in India...</div></li>
|
||||||
|
<li><a href="/itf/publications">Publications</a><div class="helper">Publications by the ITF..</div></li>
|
||||||
|
<li><a href="/itf/people">Participants</a><div class="helper">A list of participants for all ITF meetings</div></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="centerCol">
|
||||||
|
{% block centerCol %}
|
||||||
|
<div id="centerContent">
|
||||||
|
<h3>e-Rang</h3>
|
||||||
|
<br><div class="titleLink">e-Rang: Fortnightly Theatre Journal</div>
|
||||||
|
<div class="centerText">
|
||||||
|
<p>There are a large number of people who are deeply interested in Indian theatre, but who are starved of regular news and discussion about it. Bringing out a hard copy journal is a costly affair, and is not easy to sustain. Therefore, as part of the Forum website, it was felt that it would be useful to bring out an internet-based fortnightly journal. The coordinator of this project, Sudhanva Deshpande, has some experience of bringing out a journal of this kind, since he co-edited e-STQ. It was decided that he would put together a team that would bring out the new e-journal, tentatively christened e-Rang.</p>
|
||||||
|
|
||||||
|
<p>e-Rang will be sent out free to readers.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
71
itf/templates/festival_base.html
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="/static/css/festival.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/wireframe.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" media="all" href="/static/css/jScrollPane.css" />
|
||||||
|
<script src="/static/js/jquery-1.3.2.min.js" type="text/javascript"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/jquery.mousewheel.js"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/jScrollPane-1.2.3.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/festival.js"></script>
|
||||||
|
{% block extra_head %}
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrapper">
|
||||||
|
<div id="header">
|
||||||
|
{% block headerRow %}
|
||||||
|
<div id="pageTitle">
|
||||||
|
<h1> India Theatre Forum </hi>
|
||||||
|
</div>
|
||||||
|
<div id="emailSignup">
|
||||||
|
Website coming soon. Sign-up for updates:
|
||||||
|
<input type="text" id="emailInput" data-default="E-mail" />
|
||||||
|
<span id="submitText">Submit</span>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="body_wrapper">
|
||||||
|
<div id="leftCol">
|
||||||
|
{% block leftCol %}
|
||||||
|
<ul id="leftNav">
|
||||||
|
<li class="currentNav"><a href="/itf/">Home</li>
|
||||||
|
<li><a href="/itf/meetings">Meetings</a><div class="helper">ITF Meetings - transcripts, audio, discussions.</div></li>
|
||||||
|
<li><a href="/itf/projects">Projects</a><div class="helper">Projects undertaken by the ITF...</li>
|
||||||
|
<li><a href="/itf/erang">eRang</a><div class="helper">The theatre newsletter...</div></li>
|
||||||
|
<li><a href="/itf/people">Participants</a><div class="helper">A list of participants for all ITF meetings</div></li>
|
||||||
|
<li><a href="/itf/resources">Resources</a><div class="helper">Downloadable reading materials and resources</div></li>
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="centerCol">
|
||||||
|
{% block centerCol %}
|
||||||
|
<div id="centerContent">
|
||||||
|
<h1> Meetings </h1>
|
||||||
|
<div class="centerText">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas laoreet, velit non ultricies blandit, augue lacus mattis lacus, vel malesuada massa mi nec nisl. Nulla condimentum venenatis malesuada. Donec purus tellus, feugiat nec porttitor id, feugiat sed tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam at dapibus justo. Praesent volutpat mauris non orci molestie sit amet ultrices nisi sodales. In vitae consectetur ante. Nulla vel odio nibh, eu cursus velit. Fusce vel augue eget sapien lobortis pretium ut aliquam mauris. Nunc non varius quam. Nulla vel justo ut dui laoreet vehicula sed sed sem.
|
||||||
|
<br /><br />
|
||||||
|
Pellentesque ut rhoncus tortor. Vivamus facilisis hendrerit turpis, sit amet cursus diam accumsan nec. Nunc in nisi enim, quis ultricies libero. Aliquam ut augue diam. Vivamus vel dui augue. Praesent dictum tristique urna sed pharetra. In hac habitasse platea dictumst. Phasellus sit amet ornare elit. Praesent nunc magna, interdum tristique aliquet nec, malesuada eu libero. Vivamus blandit felis ac ipsum placerat sed porttitor orci placerat. Nullam magna arcu, feugiat in gravida nec, porta nec erat. Proin aliquam turpis vel lacus posuere vehicula. Nullam eros elit, vulputate sed iaculis in, scelerisque id nunc. Suspendisse potenti. Cras vitae purus quis ante ornare venenatis nec sit amet metus. Cras vehicula tortor vitae arcu dignissim hendrerit. Phasellus vel est justo, id tristique dolor. Vestibulum congue tempus mauris interdum pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam orci orci, ultricies in luctus eu, faucibus eget nibh.
|
||||||
|
<br /><br />
|
||||||
|
Donec a pharetra purus. Duis vel elit ipsum. Proin rhoncus viverra sollicitudin. Curabitur consectetur viverra vestibulum. Nulla vel ante vel lectus interdum laoreet et ac tortor. In interdum, arcu ut venenatis ultrices, nibh massa posuere urna, id dapibus nisl dui non mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam porta, nulla eu sollicitudin placerat, dui arcu fermentum libero, vel dignissim ante augue sit amet est. Aenean a enim urna. Aenean semper eros at mi tristique lacinia. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse et arcu id mi imperdiet porta. Sed vel sapien odio, vel imperdiet felis. Maecenas porttitor lacus ac nisi luctus sit amet ullamcorper magna dapibus. Etiam eu lorem in magna elementum sollicitudin.
|
||||||
|
<br /><br />
|
||||||
|
Nam placerat leo vitae dui lobortis vulputate. Aliquam congue faucibus erat in luctus. Aenean volutpat aliquam tellus, et cursus massa rhoncus ut. In tincidunt porttitor velit at elementum. Ut felis nunc, porttitor quis varius ut, ullamcorper eget odio. Vivamus magna erat, dictum id volutpat eget, luctus in elit. Cras tempor elementum bibendum. Phasellus imperdiet neque ac lacus rhoncus eget tincidunt dolor imperdiet. Suspendisse potenti. Phasellus porttitor condimentum leo, sit amet tempor dui tristique at. Phasellus tincidunt orci a nisi laoreet mollis. Aenean vel sagittis erat.
|
||||||
|
<br /><br />
|
||||||
|
Suspendisse vehicula iaculis est tristique semper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean id enim dapibus lorem posuere sollicitudin. Sed vitae pulvinar nisi. Duis non augue odio. In hac habitasse platea dictumst. Praesent egestas erat eu est mollis in porta mauris auctor. Nunc ultrices scelerisque tempus. Quisque mattis orci eu mauris porttitor et porttitor nulla pulvinar. Curabitur tincidunt leo sit amet eros dapibus id eleifend dui varius. Nulla facilisi. Vivamus nec dolor convallis libero dictum posuere. Integer vestibulum, nulla sed iaculis molestie, leo justo pretium neque, adipiscing sollicitudin turpis turpis ut quam. Integer ac velit orci, ut sollicitudin magna. Vestibulum fermentum sodales ante, quis vulputate mi pellentesque quis.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="rightCol">
|
||||||
|
{% block rightCol %}
|
||||||
|
<h1>About Us</h1>
|
||||||
|
<div id="rightText">
|
||||||
|
Suspendisse vehicula iaculis est tristique semper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean id enim dapibus lorem posuere sollicitudin. Sed vitae pulvinar nisi. Duis non augue odio. In hac habitasse platea dictumst. Praesent egestas erat eu est mollis in porta mauris auctor. Nunc ultrices scelerisque tempus. Quisque mattis orci eu mauris porttitor et porttitor nulla pulvinar. Curabitur tincidunt leo sit amet eros dapibus id eleifend dui varius. Nulla facilisi. Vivamus nec dolor convallis libero dictum posuere. Integer vestibulum, nulla sed iaculis molestie, leo justo pretium neque, adipiscing sollicitudin turpis turpis ut quam. Integer ac velit orci, ut sollicitudin magna. Vestibulum fermentum sodales ante, quis vulputate mi pellentesque quis.
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
86
itf/templates/festival_index.html
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="/static/css/festival.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/wireframe.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" media="all" href="/static/css/jScrollPane.css" />
|
||||||
|
<script src="/static/js/jquery-1.3.2.min.js" type="text/javascript"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/jquery.mousewheel.js"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/jScrollPane-1.2.3.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/festival.js"></script>
|
||||||
|
{% block extra_head %}
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrapper">
|
||||||
|
<div id="header">
|
||||||
|
{% block headerRow %}
|
||||||
|
<div id="pageTitle">
|
||||||
|
<h1> India Theatre Forum </hi>
|
||||||
|
</div>
|
||||||
|
<div id="emailSignup">
|
||||||
|
Website coming soon. Sign-up for updates:
|
||||||
|
<input type="text" id="emailInput" data-default="E-mail" />
|
||||||
|
<span id="submitText">Submit</span>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="body_wrapper">
|
||||||
|
<div id="leftCol">
|
||||||
|
{% block leftCol %}
|
||||||
|
<ul id="leftNav">
|
||||||
|
<li class="currentNav"><a href="#">Home</li>
|
||||||
|
<li><a href="/itf/meetings">Meetings</a><div class="helper">ITF Meetings - transcripts, audio, discussions.</div></li>
|
||||||
|
<li><a href="/itf/projects">Projects</a><div class="helper">Projects undertaken by the ITF...</li>
|
||||||
|
<li><a href="/itf/erang">eRang</a><div class="helper">The theatre newsletter...</div></li>
|
||||||
|
<li><a href="/itf/people">Participants</a><div class="helper">A list of participants for all ITF meetings</div></li>
|
||||||
|
<li><a href="/itf/resources">Resources</a><div class="helper">Downloadable reading materials and resources</div></li>
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="centerCol">
|
||||||
|
{% block centerCol %}
|
||||||
|
<div id="centerContent">
|
||||||
|
<h1> Meetings </h1>
|
||||||
|
<div class="centerText">
|
||||||
|
|
||||||
|
<div id="meeting_list" class="box">
|
||||||
|
<h1>Latest Meetings</h1>
|
||||||
|
<ul>
|
||||||
|
{% for o in data.latest_meetings %}
|
||||||
|
<li><a href="/meetingdetails/{{o.meeting.id}}">{{ o.meeting.title }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas laoreet, velit non ultricies blandit, augue lacus mattis lacus, vel malesuada massa mi nec nisl. Nulla condimentum venenatis malesuada. Donec purus tellus, feugiat nec porttitor id, feugiat sed tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam at dapibus justo. Praesent volutpat mauris non orci molestie sit amet ultrices nisi sodales. In vitae consectetur ante. Nulla vel odio nibh, eu cursus velit. Fusce vel augue eget sapien lobortis pretium ut aliquam mauris. Nunc non varius quam. Nulla vel justo ut dui laoreet vehicula sed sed sem.
|
||||||
|
<br /><br />
|
||||||
|
Pellentesque ut rhoncus tortor. Vivamus facilisis hendrerit turpis, sit amet cursus diam accumsan nec. Nunc in nisi enim, quis ultricies libero. Aliquam ut augue diam. Vivamus vel dui augue. Praesent dictum tristique urna sed pharetra. In hac habitasse platea dictumst. Phasellus sit amet ornare elit. Praesent nunc magna, interdum tristique aliquet nec, malesuada eu libero. Vivamus blandit felis ac ipsum placerat sed porttitor orci placerat. Nullam magna arcu, feugiat in gravida nec, porta nec erat. Proin aliquam turpis vel lacus posuere vehicula. Nullam eros elit, vulputate sed iaculis in, scelerisque id nunc. Suspendisse potenti. Cras vitae purus quis ante ornare venenatis nec sit amet metus. Cras vehicula tortor vitae arcu dignissim hendrerit. Phasellus vel est justo, id tristique dolor. Vestibulum congue tempus mauris interdum pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam orci orci, ultricies in luctus eu, faucibus eget nibh.
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
|
Donec a pharetra purus. Duis vel elit ipsum. Proin rhoncus viverra sollicitudin. Curabitur consectetur viverra vestibulum. Nulla vel ante vel lectus interdum laoreet et ac tortor. In interdum, arcu ut venenatis ultrices, nibh massa posuere urna, id dapibus nisl dui non mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam porta, nulla eu sollicitudin placerat, dui arcu fermentum libero, vel dignissim ante augue sit amet est. Aenean a enim urna. Aenean semper eros at mi tristique lacinia. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse et arcu id mi imperdiet porta. Sed vel sapien odio, vel imperdiet felis. Maecenas porttitor lacus ac nisi luctus sit amet ullamcorper magna dapibus. Etiam eu lorem in magna elementum sollicitudin.
|
||||||
|
<br /><br />
|
||||||
|
Nam placerat leo vitae dui lobortis vulputate. Aliquam congue faucibus erat in luctus. Aenean volutpat aliquam tellus, et cursus massa rhoncus ut. In tincidunt porttitor velit at elementum. Ut felis nunc, porttitor quis varius ut, ullamcorper eget odio. Vivamus magna erat, dictum id volutpat eget, luctus in elit. Cras tempor elementum bibendum. Phasellus imperdiet neque ac lacus rhoncus eget tincidunt dolor imperdiet. Suspendisse potenti. Phasellus porttitor condimentum leo, sit amet tempor dui tristique at. Phasellus tincidunt orci a nisi laoreet mollis. Aenean vel sagittis erat.
|
||||||
|
<br /><br />
|
||||||
|
Suspendisse vehicula iaculis est tristique semper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean id enim dapibus lorem posuere sollicitudin. Sed vitae pulvinar nisi. Duis non augue odio. In hac habitasse platea dictumst. Praesent egestas erat eu est mollis in porta mauris auctor. Nunc ultrices scelerisque tempus. Quisque mattis orci eu mauris porttitor et porttitor nulla pulvinar. Curabitur tincidunt leo sit amet eros dapibus id eleifend dui varius. Nulla facilisi. Vivamus nec dolor convallis libero dictum posuere. Integer vestibulum, nulla sed iaculis molestie, leo justo pretium neque, adipiscing sollicitudin turpis turpis ut quam. Integer ac velit orci, ut sollicitudin magna. Vestibulum fermentum sodales ante, quis vulputate mi pellentesque quis.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="rightCol">
|
||||||
|
{% block rightCol %}
|
||||||
|
<h1>About Us</h1>
|
||||||
|
<div id="rightText">
|
||||||
|
Suspendisse vehicula iaculis est tristique semper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean id enim dapibus lorem posuere sollicitudin. Sed vitae pulvinar nisi. Duis non augue odio. In hac habitasse platea dictumst. Praesent egestas erat eu est mollis in porta mauris auctor. Nunc ultrices scelerisque tempus. Quisque mattis orci eu mauris porttitor et porttitor nulla pulvinar. Curabitur tincidunt leo sit amet eros dapibus id eleifend dui varius. Nulla facilisi. Vivamus nec dolor convallis libero dictum posuere. Integer vestibulum, nulla sed iaculis molestie, leo justo pretium neque, adipiscing sollicitudin turpis turpis ut quam. Integer ac velit orci, ut sollicitudin magna. Vestibulum fermentum sodales ante, quis vulputate mi pellentesque quis.
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
100
itf/templates/festival_wireframe.html
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>{% block title %} India Theatre Forum {% endblock %}</title>
|
||||||
|
<link rel="stylesheet" href="/static/css/festival.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/wireframe.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" media="all" href="/static/css/jScrollPane.css" />
|
||||||
|
<script src="/static/js/jquery-1.3.2.min.js" type="text/javascript"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/festival.js"></script>
|
||||||
|
<!-- <script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script> -->
|
||||||
|
{% block extra_head %}
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrapper">
|
||||||
|
<div id="header">
|
||||||
|
{% block headerRow %}
|
||||||
|
<div id="pageTitle">
|
||||||
|
<!-- <h1><span style="color: #da251c">India</span> <span style="color: #ee9b11">Theatre</span> <span style="color: #f8c301">Forum</span> </h1> -->
|
||||||
|
</div>
|
||||||
|
<div id="emailSignup">
|
||||||
|
<div id="welcomeText">Sign-up for updates:</div>
|
||||||
|
<input type="text" id="emailInput" data-default="E-mail" /><span id="submitText">Submit</span><span id="submitting">Submitting...</span>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="body_wrapper">
|
||||||
|
<div id="leftCol">
|
||||||
|
{% block leftCol %}
|
||||||
|
<ul id="leftNav">
|
||||||
|
<li><a href="/itf/">Home</a></li>
|
||||||
|
<li><a href="/itf/meetings">Activities</a><div class="helper">ITF Meetings - transcripts, audio, discussions.</div></li>
|
||||||
|
<li><a href="/itf/projects">Projects</a><div class="helper">Projects undertaken by the ITF...</div></li>
|
||||||
|
<li><a href="/itf/erang">e-Rang</a><div class="helper">The theatre newsletter...</div></li>
|
||||||
|
<li><a href="/itf/resources">Resources</a><div class="helper">Downloadable reading materials and resources</div></li>
|
||||||
|
<li><a href="/itf/surveys">Surveys</a><div class="helper">Surveys about theatre in India...</div></li>
|
||||||
|
<li><a href="/itf/publications">Publications</a><div class="helper">Publications by the ITF..</div></li>
|
||||||
|
<li><a href="/itf/people">Participants</a><div class="helper">A list of participants for all ITF meetings</div></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="centerCol">
|
||||||
|
{% block centerCol %}
|
||||||
|
<div id="centerContent">
|
||||||
|
<h1> Meetings </h1>
|
||||||
|
<div class="centerText">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas laoreet, velit non ultricies blandit, augue lacus mattis lacus, vel malesuada massa mi nec nisl. Nulla condimentum venenatis malesuada. Donec purus tellus, feugiat nec porttitor id, feugiat sed tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam at dapibus justo. Praesent volutpat mauris non orci molestie sit amet ultrices nisi sodales. In vitae consectetur ante. Nulla vel odio nibh, eu cursus velit. Fusce vel augue eget sapien lobortis pretium ut aliquam mauris. Nunc non varius quam. Nulla vel justo ut dui laoreet vehicula sed sed sem.
|
||||||
|
<br /><br />
|
||||||
|
Pellentesque ut rhoncus tortor. Vivamus facilisis hendrerit turpis, sit amet cursus diam accumsan nec. Nunc in nisi enim, quis ultricies libero. Aliquam ut augue diam. Vivamus vel dui augue. Praesent dictum tristique urna sed pharetra. In hac habitasse platea dictumst. Phasellus sit amet ornare elit. Praesent nunc magna, interdum tristique aliquet nec, malesuada eu libero. Vivamus blandit felis ac ipsum placerat sed porttitor orci placerat. Nullam magna arcu, feugiat in gravida nec, porta nec erat. Proin aliquam turpis vel lacus posuere vehicula. Nullam eros elit, vulputate sed iaculis in, scelerisque id nunc. Suspendisse potenti. Cras vitae purus quis ante ornare venenatis nec sit amet metus. Cras vehicula tortor vitae arcu dignissim hendrerit. Phasellus vel est justo, id tristique dolor. Vestibulum congue tempus mauris interdum pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam orci orci, ultricies in luctus eu, faucibus eget nibh.
|
||||||
|
<br /><br />
|
||||||
|
Donec a pharetra purus. Duis vel elit ipsum. Proin rhoncus viverra sollicitudin. Curabitur consectetur viverra vestibulum. Nulla vel ante vel lectus interdum laoreet et ac tortor. In interdum, arcu ut venenatis ultrices, nibh massa posuere urna, id dapibus nisl dui non mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam porta, nulla eu sollicitudin placerat, dui arcu fermentum libero, vel dignissim ante augue sit amet est. Aenean a enim urna. Aenean semper eros at mi tristique lacinia. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse et arcu id mi imperdiet porta. Sed vel sapien odio, vel imperdiet felis. Maecenas porttitor lacus ac nisi luctus sit amet ullamcorper magna dapibus. Etiam eu lorem in magna elementum sollicitudin.
|
||||||
|
<br /><br />
|
||||||
|
Nam placerat leo vitae dui lobortis vulputate. Aliquam congue faucibus erat in luctus. Aenean volutpat aliquam tellus, et cursus massa rhoncus ut. In tincidunt porttitor velit at elementum. Ut felis nunc, porttitor quis varius ut, ullamcorper eget odio. Vivamus magna erat, dictum id volutpat eget, luctus in elit. Cras tempor elementum bibendum. Phasellus imperdiet neque ac lacus rhoncus eget tincidunt dolor imperdiet. Suspendisse potenti. Phasellus porttitor condimentum leo, sit amet tempor dui tristique at. Phasellus tincidunt orci a nisi laoreet mollis. Aenean vel sagittis erat.
|
||||||
|
<br /><br />
|
||||||
|
Suspendisse vehicula iaculis est tristique semper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean id enim dapibus lorem posuere sollicitudin. Sed vitae pulvinar nisi. Duis non augue odio. In hac habitasse platea dictumst. Praesent egestas erat eu est mollis in porta mauris auctor. Nunc ultrices scelerisque tempus. Quisque mattis orci eu mauris porttitor et porttitor nulla pulvinar. Curabitur tincidunt leo sit amet eros dapibus id eleifend dui varius. Nulla facilisi. Vivamus nec dolor convallis libero dictum posuere. Integer vestibulum, nulla sed iaculis molestie, leo justo pretium neque, adipiscing sollicitudin turpis turpis ut quam. Integer ac velit orci, ut sollicitudin magna. Vestibulum fermentum sodales ante, quis vulputate mi pellentesque quis.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="rightCol">
|
||||||
|
{% block rightCol %}
|
||||||
|
<h3 style="padding-top: 15px; text-align: center;">About Us</h3>
|
||||||
|
<div id="rightText">
|
||||||
|
|
||||||
|
<div id="right1">
|
||||||
|
<p>Since the summer of 2006, a number of theatre practitioners, scholars and theatre lovers have come together under the aegis of the India Theatre Forum (ITF) to try and create a national resource for theatre and a meeting ground for all those who wish to take on the public responsibility of laying the grounds for excellence and diversity in theatrical endeavour. The ITF is a Prithvi Theatre initiative, and is more or less a loose association of people who have come together in the larger interest of Indian theatre. There is a team at the heart of it which gets called the ‘core team’, which currently consists of Akshara K.V., Moloyashree Hashmi, Pravin K.P., Sameera Iyengar, Sanjna Kapoor and Sudhanva Deshpande.</p>
|
||||||
|
|
||||||
|
<p>Theatre practice and livelihood in India is unsurprisingly like the country itself – vast, diverse, and often unconnected and unaware of each other’s existence. Much theatre practice is also used to subsisting on meagre resources – which means theatre somehow manages to survive rather than thrive in this country. It also means our dreams for what we can do with theatre – artistically and socially – are invariably limited dreams. We neither strive to imagine our utmost potential nor do we see ourselves as important enough actors in this country’s social fabric.
|
||||||
|
<span class="rightMore"><a href="Javascript:showNext()">more >>></a></span>
|
||||||
|
</div>
|
||||||
|
<div id="right2">
|
||||||
|
Of course, there are exceptions – people who have thought deeply, believed in the potential of theatre, and shown it consistently in their work. People who have found innovative ways of stepping beyond the struggle of survival and created vibrant theatre communities of performers, audiences and supporters.</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>The question that led to the creation of the ITF was: can this happenstance become the norm? Can we overcome what we see as limitations, can we learn to identify and recognize opportunities and openings, can we think in terms of long-term growth and sustenance? Such work cannot be done in isolation, but requires the coming together of dedicated and experienced people who have an abiding interest in the field of theatre, and who represent the diverse knowledge and experience base of theatre in this country. It requires the constant exchange of ideas and information, as well as intensive and open debate and discussion.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In addition to bringing out Our Stage, The ITF is currently working on:
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li>Guidelines for Best Practices in Theatre</li>
|
||||||
|
<li>a website for the theatre community in India</li>
|
||||||
|
<li>a social security scheme for artists</li>
|
||||||
|
<li>an arts management programme</li>
|
||||||
|
<li>a fortnightly e-newsletter</li>
|
||||||
|
<li>theatre survey</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
Supported by the Arts Management of the Sir Ratan Tata Trust
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
71
itf/templates/home.html
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{% extends 'festival_wireframe.html' %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
ITF - Home
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block leftCol %}
|
||||||
|
<ul id="leftNav">
|
||||||
|
<li class="currentNav"><a href="/itf/">Home</a></li>
|
||||||
|
<li><a href="/itf/meetings">Activities</a><div class="helper">ITF Meetings - transcripts, audio, discussions.</div></li>
|
||||||
|
<li><a href="/itf/projects">Projects</a><div class="helper">Projects undertaken by the ITF...</div></li>
|
||||||
|
<li><a href="/itf/erang">e-Rang</a><div class="helper">The theatre newsletter...</div></li>
|
||||||
|
<li><a href="/itf/resources">Resources</a><div class="helper">Downloadable reading materials and resources</div></li>
|
||||||
|
<li><a href="/itf/surveys">Surveys</a><div class="helper">Surveys about theatre in India...</div></li>
|
||||||
|
<li><a href="/itf/publications">Publications</a><div class="helper">Publications by the ITF..</div></li>
|
||||||
|
<li><a href="/itf/people">Participants</a><div class="helper">A list of participants for all ITF meetings</div></li>
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div id="centerCol">
|
||||||
|
{% block centerCol %}
|
||||||
|
<div id="centerContent">
|
||||||
|
<h3>Welcome to the ITF Website</h3>
|
||||||
|
<div class="centerText">
|
||||||
|
|
||||||
|
<p>Welcome to the India Theatre Forum Website!</p>
|
||||||
|
|
||||||
|
<p>As you will notice very quickly … this site is very much under construction. However we did want to put it up, so you can begin to access some information on the India Theatre Forum itself, and also stay in touch with what we are planning for this site.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p>Essentially – we want this site to be a hub for Indian theatre – a place where you can come and get, give, share, exchange all sorts of information, ideas, resources and more.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p>Examples of some things you can get:
|
||||||
|
<ul>
|
||||||
|
<li>a space of your own on the site</li>
|
||||||
|
<li>information on theatre activity, people and groups across India</li>
|
||||||
|
<li>a calendar of theatre activity across India</li>
|
||||||
|
<li>a fortnightly newsletter, emailed to your inbox</li>
|
||||||
|
<li>links between you and people you have worked with</li>
|
||||||
|
<li>access to offers & needs, where you can ask or browse for theatre needs you have – rehearsal space, costumes, some lighting problem you need to tackle … etc</li>
|
||||||
|
<li>theatre-related information – schemes, grants, government reports, policies and more</li>
|
||||||
|
<li>Guidelines for Best Practices in Theatre</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>Examples of some things you can give:
|
||||||
|
<ul>
|
||||||
|
<li>information on yourself and your theatre activity</li>
|
||||||
|
<li>theatre-related information you have access to</li>
|
||||||
|
<li>offers of resources you or your group may have</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>This is a site for you, for us … and can come alive only with your active participation. Do log in so we can keep you informed … and we look forward to having you on board as part of the ITF online community.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
1
itf/templates/index.html
Executable file
|
@ -0,0 +1 @@
|
||||||
|
Welcome :-)
|