major cleanup
This commit is contained in:
parent
47c2183503
commit
250d1c8df6
|
@ -1,97 +0,0 @@
|
|||
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
|
|
@ -1,95 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import sys
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
from ox.django.shortcuts import render_to_json_response, json_response
|
||||
|
||||
|
||||
def autodiscover():
|
||||
#register api actions from all installed apps
|
||||
from django.utils.importlib import import_module
|
||||
from django.utils.module_loading import module_has_submodule
|
||||
for app in settings.INSTALLED_APPS:
|
||||
if app != 'api':
|
||||
mod = import_module(app)
|
||||
try:
|
||||
import_module('%s.views'%app)
|
||||
except:
|
||||
if module_has_submodule(mod, 'views'):
|
||||
raise
|
||||
|
||||
|
||||
def trim(docstring):
|
||||
if not docstring:
|
||||
return ''
|
||||
# Convert tabs to spaces (following the normal Python rules)
|
||||
# and split into a list of lines:
|
||||
lines = docstring.expandtabs().splitlines()
|
||||
# Determine minimum indentation (first line doesn't count):
|
||||
indent = sys.maxint
|
||||
for line in lines[1:]:
|
||||
stripped = line.lstrip()
|
||||
if stripped:
|
||||
indent = min(indent, len(line) - len(stripped))
|
||||
# Remove indentation (first line is special):
|
||||
trimmed = [lines[0].strip()]
|
||||
if indent < sys.maxint:
|
||||
for line in lines[1:]:
|
||||
trimmed.append(line[indent:].rstrip())
|
||||
# Strip off trailing and leading blank lines:
|
||||
while trimmed and not trimmed[-1]:
|
||||
trimmed.pop()
|
||||
while trimmed and not trimmed[0]:
|
||||
trimmed.pop(0)
|
||||
# Return a single string:
|
||||
return '\n'.join(trimmed)
|
||||
|
||||
|
||||
class ApiActions(dict):
|
||||
properties = {}
|
||||
def __init__(self):
|
||||
|
||||
def api(request):
|
||||
'''
|
||||
returns list of all known api action
|
||||
return {'status': {'code': int, 'text': string},
|
||||
'data': {actions: ['api', 'hello', ...]}}
|
||||
'''
|
||||
_actions = self.keys()
|
||||
_actions.sort()
|
||||
actions = {}
|
||||
for a in _actions:
|
||||
actions[a] = self.properties[a]
|
||||
response = json_response({'actions': actions})
|
||||
return render_to_json_response(response)
|
||||
self.register(api)
|
||||
|
||||
def apidoc(request):
|
||||
'''
|
||||
returns array of actions with documentation
|
||||
'''
|
||||
actions = self.keys()
|
||||
actions.sort()
|
||||
docs = {}
|
||||
for f in actions:
|
||||
docs[f] = self.doc(f)
|
||||
return render_to_json_response(json_response({'actions': docs}))
|
||||
|
||||
self.register(apidoc)
|
||||
|
||||
def doc(self, f):
|
||||
return trim(self[f].__doc__)
|
||||
|
||||
def register(self, method, action=None, cache=True):
|
||||
if not action:
|
||||
action = method.func_name
|
||||
self[action] = method
|
||||
self.properties[action] = {'cache': cache}
|
||||
|
||||
def unregister(self, action):
|
||||
if action in self:
|
||||
del self[action]
|
||||
|
||||
actions = ApiActions()
|
|
@ -1,3 +0,0 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
|
@ -1,23 +0,0 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
408
itf/api/views.py
408
itf/api/views.py
|
@ -1,408 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
import os.path
|
||||
from os.path import join
|
||||
import re
|
||||
from datetime import datetime
|
||||
from urllib2 import unquote
|
||||
import mimetypes
|
||||
|
||||
from django import forms
|
||||
from django.core.paginator import Paginator
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models import Q, Avg, Count, Sum
|
||||
from django.http import HttpResponse, Http404
|
||||
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404, redirect
|
||||
from django.template import RequestContext
|
||||
from django.conf import settings
|
||||
from django.contrib.comments.forms import CommentForm
|
||||
from django.contrib.comments.models import Comment
|
||||
from django.contrib.comments.signals import comment_will_be_posted, comment_was_posted
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from ox.utils import json
|
||||
from ox.django.decorators import login_required_json
|
||||
from ox.django.shortcuts import render_to_json_response, get_object_or_404_json, json_response
|
||||
from ox.django.http import HttpFileResponse
|
||||
import ox
|
||||
from actions import actions
|
||||
from user.models import get_user_json
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from boxes.views import _getPageData
|
||||
|
||||
@csrf_exempt
|
||||
def api(request):
|
||||
if request.META['REQUEST_METHOD'] == "OPTIONS":
|
||||
response = render_to_json_response({'status': {'code': 200,
|
||||
'text': 'use POST'}})
|
||||
response['Access-Control-Allow-Origin'] = '*'
|
||||
return response
|
||||
if not 'action' in request.POST:
|
||||
methods = actions.keys()
|
||||
api = []
|
||||
for f in sorted(methods):
|
||||
api.append({'name': f,
|
||||
'doc': actions.doc(f).replace('\n', '<br>\n')})
|
||||
context = RequestContext(request, {'api': api,
|
||||
'sitename': settings.SITENAME})
|
||||
return render_to_response('api.html', context)
|
||||
function = request.POST['action']
|
||||
#FIXME: possible to do this in f
|
||||
#data = json.loads(request.POST['data'])
|
||||
|
||||
f = actions.get(function, None)
|
||||
if f:
|
||||
response = f(request)
|
||||
else:
|
||||
response = render_to_json_response(json_response(status=400,
|
||||
text='Unknown function %s' % function))
|
||||
response['Access-Control-Allow-Origin'] = '*'
|
||||
return response
|
||||
|
||||
#def api_api(request):
|
||||
# '''
|
||||
# returns list of all known api action
|
||||
# return {'status': {'code': int, 'text': string},
|
||||
# 'data': {actions: ['api', 'hello', ...]}}
|
||||
# '''
|
||||
# actions = globals().keys()
|
||||
# actions = map(lambda a: a[4:], filter(lambda a: a.startswith('api_'), actions))
|
||||
# actions.sort()
|
||||
# ret = {}
|
||||
# #FIXME: set cache to False for login, logout, etc.
|
||||
# for a in actions:
|
||||
# ret[a] = {
|
||||
# 'cache': True
|
||||
# }
|
||||
# return render_to_json_response(json_response({'actions': ret}))
|
||||
|
||||
#def api_apidoc(request):
|
||||
# '''
|
||||
# returns array of actions with documentation
|
||||
# '''
|
||||
# actions = globals().keys()
|
||||
# actions = map(lambda a: a[4:], filter(lambda a: a.startswith('api_'), actions))
|
||||
# actions.sort()
|
||||
# docs = {}
|
||||
# for f in actions:
|
||||
# docs[f] = get_api_doc(f)
|
||||
# return render_to_json_response(json_response({'actions': docs}))
|
||||
|
||||
|
||||
def init(request):
|
||||
'''
|
||||
return {'status': {'code': int, 'text': string},
|
||||
'data': {user: object}}
|
||||
'''
|
||||
#data = json.loads(request.POST['data'])
|
||||
response = json_response({})
|
||||
if request.user.is_authenticated():
|
||||
response['data']['user'] = get_user_json(request.user)
|
||||
else:
|
||||
response['data']['user'] = {'name': 'Guest', 'group': 'guest', 'level': 'guest', 'preferences': {}}
|
||||
#FIXME: Get config definition out of here.
|
||||
response['data']['config'] = {
|
||||
'site': {
|
||||
'name': 'India Theatre Forum'
|
||||
}
|
||||
}
|
||||
# response['data']['page'] = _getPageData(request)
|
||||
return render_to_json_response(response)
|
||||
actions.register(init)
|
||||
|
||||
def error(request):
|
||||
'''
|
||||
trows 503 error
|
||||
'''
|
||||
success = error_is_success
|
||||
return render_to_json_response({})
|
||||
actions.register(error)
|
||||
|
||||
def find(request):
|
||||
data = json.loads(request.POST['data'])
|
||||
# print json.dumps(data)
|
||||
model = getModel(data)
|
||||
response = json_response({})
|
||||
l = model.get_list(data)
|
||||
if data.has_key('ids'):
|
||||
ids = data['ids']
|
||||
else:
|
||||
ids = []
|
||||
if data.has_key('range'):
|
||||
response['data']['items'] = l
|
||||
else:
|
||||
response['data']['items'] = len(l)
|
||||
response['data']['positions'] = _get_positions(ids, l)
|
||||
response['status'] = {'code': 200}
|
||||
return render_to_json_response(response)
|
||||
actions.register(find)
|
||||
|
||||
def _get_positions(ids, l):
|
||||
ret = {}
|
||||
i = 0
|
||||
for id in ids:
|
||||
for obj in l:
|
||||
if obj['id'] == id:
|
||||
ret[id] = i
|
||||
break
|
||||
i += 1
|
||||
return ret
|
||||
|
||||
|
||||
def preview(request):
|
||||
data = json.loads(request.POST['data'])
|
||||
if not data.has_key('id'):
|
||||
return render_to_json_response({'status': {'code': 404}})
|
||||
id = int(data['id'])
|
||||
model = getModel(data)
|
||||
response = json_response({})
|
||||
response['status'] = {'code': 200}
|
||||
obj = get_object_or_404(model, pk=id)
|
||||
response['data'] = obj.preview_dict()
|
||||
response['template'] = getTemplate(data, "preview")
|
||||
return render_to_json_response(response)
|
||||
actions.register(preview)
|
||||
|
||||
#FIXME: Generalize based on these two functions being the same.
|
||||
def info(request):
|
||||
'''
|
||||
id: object id
|
||||
model: string, name of model
|
||||
module: string, name of module
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
id = int(data['id'])
|
||||
model = getModel(data)
|
||||
response = json_response({})
|
||||
response['status'] = {'code': 200}
|
||||
obj = get_object_or_404(model, pk=id)
|
||||
if model.hasComments:
|
||||
response['commentForm'] = _get_comment_form_initial(request, obj)
|
||||
response['comments'] = _get_comments(obj)
|
||||
response['data'] = obj.info_dict()
|
||||
response['template'] = getTemplate(data, "info")
|
||||
return render_to_json_response(response)
|
||||
actions.register(info)
|
||||
|
||||
#obj: Django model instance - object for which to get comment form for.
|
||||
#Returns dict with content_type, object_id, security_hash, etc.
|
||||
#FIXME: put comments stuff somewhere
|
||||
def _get_comment_form_initial(request, obj):
|
||||
c = CommentForm(obj)
|
||||
return c.initial
|
||||
|
||||
def _get_comments(obj):
|
||||
ret = []
|
||||
content_type = ContentType.objects.get_for_model(obj)
|
||||
object_id = obj.id
|
||||
qset = Comment.objects.filter(content_type=content_type, object_pk=object_id)
|
||||
for q in qset:
|
||||
ret.append({
|
||||
'name': q.name,
|
||||
# 'date': q.submit_date,
|
||||
'comment': q.comment
|
||||
})
|
||||
return ret
|
||||
|
||||
@login_required_json
|
||||
def addComment(request):
|
||||
'''
|
||||
id
|
||||
module
|
||||
model
|
||||
comment
|
||||
content_type
|
||||
email
|
||||
name
|
||||
object_pk
|
||||
security_hash
|
||||
timestamp
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
data.update({
|
||||
'name': request.user.username,
|
||||
'email': request.user.email
|
||||
})
|
||||
id = int(data['object_pk'])
|
||||
model = getModel(data)
|
||||
obj = get_object_or_404_json(model, pk=id)
|
||||
cf = CommentForm(obj, data=data)
|
||||
ret = json_response({})
|
||||
if cf.is_valid():
|
||||
comment = cf.get_comment_object()
|
||||
comment.user = request.user
|
||||
# Signal that the comment is about to be saved
|
||||
responses = comment_will_be_posted.send(
|
||||
sender = comment.__class__,
|
||||
comment = comment,
|
||||
request = request
|
||||
)
|
||||
|
||||
for (receiver, response) in responses:
|
||||
if response == False:
|
||||
return CommentPostBadRequest(
|
||||
"comment_will_be_posted receiver %r killed the comment" % receiver.__name__)
|
||||
|
||||
# Save the comment and signal that it was saved
|
||||
comment.save()
|
||||
comment_was_posted.send(
|
||||
sender = comment.__class__,
|
||||
comment = comment,
|
||||
request = request
|
||||
)
|
||||
ret['data'] = {
|
||||
id: comment.id
|
||||
}
|
||||
ret['status'] = {'code': 200}
|
||||
|
||||
else:
|
||||
ret['status'] = {'code': 200}
|
||||
ret['errors'] = cf.errors
|
||||
return render_to_json_response(ret)
|
||||
actions.register(addComment)
|
||||
|
||||
widgetMap = {
|
||||
'TextInput': 'text',
|
||||
'Textarea': 'textarea',
|
||||
'Select': 'select'
|
||||
}
|
||||
|
||||
def getAddItemForm(request):
|
||||
response = json_response({})
|
||||
data = json.loads(request.POST['data'])
|
||||
model = getModel(data)
|
||||
# import pdb; pdb.set_trace()
|
||||
form = getForm(data)
|
||||
form_fields = []
|
||||
for field in form.base_fields:
|
||||
name = field
|
||||
this = form.base_fields[field]
|
||||
widget = this.widget
|
||||
widgetClassName = type(widget).__name__
|
||||
|
||||
if hasattr(widget, "choices"):
|
||||
choices = []
|
||||
for c in widget.choices:
|
||||
if c[0] == '':
|
||||
id = 0
|
||||
else:
|
||||
id = c[0]
|
||||
choices.append({
|
||||
'id': id,
|
||||
'title': c[1]
|
||||
})
|
||||
else:
|
||||
choices = False
|
||||
|
||||
js_widget = widgetMap.get(widgetClassName, "text")
|
||||
form_fields.append({
|
||||
'name': name,
|
||||
'widget': js_widget,
|
||||
'label': this.label,
|
||||
'choices': choices
|
||||
})
|
||||
response['data']['form'] = form_fields
|
||||
return render_to_json_response(response)
|
||||
actions.register(getAddItemForm)
|
||||
|
||||
|
||||
@login_required_json
|
||||
def addItem(request):
|
||||
response = json_response({})
|
||||
data = json.loads(request.POST['data'])
|
||||
model = getModel(data)
|
||||
form = getForm(data)
|
||||
if form.is_valid():
|
||||
m = model()
|
||||
for field in form.base_fields:
|
||||
m.__setattr__(field, form.cleaned_data[field])
|
||||
m.save()
|
||||
response['data'] = {'id': m.id}
|
||||
else:
|
||||
response['errors'] = form.errors
|
||||
return render_to_json_response(response)
|
||||
actions.register(addItem)
|
||||
|
||||
|
||||
def getTemplate(data, tmpl_name):
|
||||
path = join(settings.PROJECT_PATH, "templates", data['module'], data['model'], tmpl_name + ".html")
|
||||
return open(path).read().strip()
|
||||
|
||||
def getModel(data):
|
||||
module = __import__(data['module'])
|
||||
return module.models.__getattribute__(data['model'])
|
||||
|
||||
#FIXME: BAAD Hack
|
||||
def getForm(data):
|
||||
module = __import__(data['module'] + ".forms")
|
||||
model = getModel(data)
|
||||
formStr = model.add_form
|
||||
return module.forms.__getattribute__(formStr)
|
||||
|
||||
|
||||
def get_api_doc(f):
|
||||
f = 'api_' + f
|
||||
|
||||
import sys
|
||||
def trim(docstring):
|
||||
if not docstring:
|
||||
return ''
|
||||
# Convert tabs to spaces (following the normal Python rules)
|
||||
# and split into a list of lines:
|
||||
lines = docstring.expandtabs().splitlines()
|
||||
# Determine minimum indentation (first line doesn't count):
|
||||
indent = sys.maxint
|
||||
for line in lines[1:]:
|
||||
stripped = line.lstrip()
|
||||
if stripped:
|
||||
indent = min(indent, len(line) - len(stripped))
|
||||
# Remove indentation (first line is special):
|
||||
trimmed = [lines[0].strip()]
|
||||
if indent < sys.maxint:
|
||||
for line in lines[1:]:
|
||||
trimmed.append(line[indent:].rstrip())
|
||||
# Strip off trailing and leading blank lines:
|
||||
while trimmed and not trimmed[-1]:
|
||||
trimmed.pop()
|
||||
while trimmed and not trimmed[0]:
|
||||
trimmed.pop(0)
|
||||
# Return a single string:
|
||||
return '\n'.join(trimmed)
|
||||
|
||||
return trim(globals()[f].__doc__)
|
||||
|
||||
def apidoc(request):
|
||||
'''
|
||||
this is used for online documentation at http://127.0.0.1:8000/api/
|
||||
'''
|
||||
|
||||
functions = filter(lambda x: x.startswith('api_'), globals().keys())
|
||||
api = []
|
||||
for f in sorted(functions):
|
||||
api.append({
|
||||
'name': f[4:],
|
||||
'doc': get_api_doc(f[4:]).replace('\n', '<br>\n')
|
||||
})
|
||||
context = RequestContext(request, {'api': api,
|
||||
'sitename': settings.SITENAME,})
|
||||
return render_to_response('api.html', context)
|
||||
|
||||
def jsdoc(request):
|
||||
'''
|
||||
Used to document OxUI JS Widgets
|
||||
'''
|
||||
context = RequestContext(request, {})
|
||||
return render_to_response("jsdoc.html", context)
|
||||
|
||||
|
||||
'''
|
||||
ajax html snapshots
|
||||
http://code.google.com/web/ajaxcrawling/docs/html-snapshot.html
|
||||
'''
|
||||
def html_snapshot(request):
|
||||
fragment = unquote(request.GET['_escaped_fragment_'])
|
||||
url = request.build_absolute_uri('/ra')
|
||||
url = 'http://'+settings.URL
|
||||
response = HttpResponse('sorry, server side rendering for %s!#%s not yet implemented'%(url, fragment))
|
||||
return response
|
|
@ -334,7 +334,9 @@ class ItfModel(models.Model):
|
|||
results = paginator.page(paginator.num_pages)
|
||||
|
||||
for r in results.object_list:
|
||||
ret.append(r.list_dict())
|
||||
d = r.list_dict()
|
||||
d['url'] = r.get_absolute_url()
|
||||
ret.append(d)
|
||||
|
||||
|
||||
return {
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
from django.contrib import admin
|
||||
from models import ModelExtra, ModelSort, DialogButton, StaticDownloadButton, ModelDownloadButton, ExtraButton, PanelBoxes, StaticBox, ModelsBox, Panel
|
||||
|
||||
'''
|
||||
class ButtonsInline(admin.StackedInline):
|
||||
model = ModelExtraButton
|
||||
extra = 2
|
||||
|
||||
|
||||
class ModelBoxAdmin(admin.ModelAdmin):
|
||||
inlines = [ButtonsInline]
|
||||
'''
|
||||
|
||||
#admin.site.register(ModelBox, ModelBoxAdmin)
|
||||
admin.site.register(ModelExtra)
|
||||
admin.site.register(ModelSort)
|
||||
admin.site.register(DialogButton)
|
||||
admin.site.register(StaticDownloadButton)
|
||||
admin.site.register(ModelDownloadButton)
|
||||
admin.site.register(ExtraButton)
|
||||
admin.site.register(PanelBoxes)
|
||||
admin.site.register(StaticBox)
|
||||
admin.site.register(ModelsBox)
|
||||
admin.site.register(Panel)
|
|
@ -1,241 +0,0 @@
|
|||
from django.db import models
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from app.models import ItfModel
|
||||
from django.contrib.contenttypes import generic
|
||||
|
||||
|
||||
'''
|
||||
Classes that need to link to a ContentType should link to ModelExtra instead. Maybe there's a better way to do this?
|
||||
'''
|
||||
class ModelExtra(models.Model):
|
||||
model = models.OneToOneField(ContentType)
|
||||
friendly_name = models.CharField(max_length=255, blank=True, null=True)
|
||||
friendly_name_plural = models.CharField(max_length=255, blank=True, null=True)
|
||||
sort_options = models.ManyToManyField("ModelSort", blank=True, null=True)
|
||||
has_comments = models.BooleanField(default=False)
|
||||
|
||||
|
||||
def __unicode__(self):
|
||||
return "%d: %s" % (self.id, self.friendly_name)
|
||||
|
||||
def get_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'module': self.model.model_class()._meta.app_label,
|
||||
'model': self.model.model_class().__name__,
|
||||
'has_comments': self.has_comments,
|
||||
# 'info': self.info,
|
||||
'friendly_name': self.friendly_name,
|
||||
'friendly_name_plural': self.friendly_name_plural,
|
||||
'fk_filters': self.model.model_class().fk_filters,
|
||||
'fts_fields': self.model.model_class().fts_fields,
|
||||
'sort_options': map(lambda x: {'key': x.key, 'operator': x.operator, 'text': x.text}, self.sort_options.all())
|
||||
}
|
||||
|
||||
|
||||
|
||||
class ModelSort(models.Model):
|
||||
operator = models.CharField(max_length=4)
|
||||
key = models.CharField(max_length=64)
|
||||
text = models.CharField(max_length=256)
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s%s: %s" % (self.operator, self.key, self.text,)
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Base class for buttons - buttons can be an 'extra_button' for either a Box class or an instance of a model (defined in ModelExtra).
|
||||
"""
|
||||
class Button(ItfModel):
|
||||
typ = ''
|
||||
icon = models.CharField(max_length=255) #FIXME: read choices from list of icons
|
||||
mouseover = models.CharField(max_length=255)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def __unicode__(self):
|
||||
return "%d: %s" % (self.id, self.mouseover)
|
||||
|
||||
def get_dict(self):
|
||||
data = self.get_data()
|
||||
data['id'] = self.id,
|
||||
data['type'] = self.typ,
|
||||
data['icon'] = self.icon,
|
||||
data['mouseover'] = self.mouseover
|
||||
return data
|
||||
|
||||
'''
|
||||
Subclasses need to implement get_data and return additional data-items as a dict. Keys cannot be one of 'type', 'icon', and 'mouseover' in the return value.
|
||||
'''
|
||||
def get_data(self):
|
||||
return {}
|
||||
|
||||
|
||||
class BoxButton(Button):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
class ModelButton(Button):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class DialogButton(BoxButton):
|
||||
typ = 'dialog'
|
||||
dialogTitle = models.CharField(max_length=255)
|
||||
dialogHTML = models.TextField()
|
||||
|
||||
def get_data(self):
|
||||
return {
|
||||
'title': self.dialogTitle,
|
||||
'html': self.dialogHTML
|
||||
}
|
||||
|
||||
|
||||
class StaticDownloadButton(BoxButton):
|
||||
typ = 'staticDownload'
|
||||
fil = models.FileField(upload_to='uploads/button_downloads/')
|
||||
|
||||
def get_data(self):
|
||||
return {
|
||||
'file': {
|
||||
'path': self.fil.url
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ModelDownloadButton(ModelButton):
|
||||
typ = 'modelDownload'
|
||||
file_field = models.CharField(max_length=100) #name of field which holds the file/s(?) to be downloaded
|
||||
|
||||
def get_data(self):
|
||||
return {
|
||||
'file': {
|
||||
'path': self.fil.url
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Join model to enable m2m relations to generic foreign keys
|
||||
"""
|
||||
class ExtraButton(models.Model):
|
||||
related_name = models.CharField(max_length=255, blank=True, null=True)
|
||||
button_content_type = models.ForeignKey(ContentType)
|
||||
button_id = models.PositiveIntegerField()
|
||||
button = generic.GenericForeignKey('button_content_type', 'button_id')
|
||||
|
||||
def __unicode__(self):
|
||||
return "%d: %s" % (self.id, self.related_name)
|
||||
|
||||
def get_dict(self):
|
||||
return self.button.get_dict()
|
||||
|
||||
"""
|
||||
Join model
|
||||
"""
|
||||
class PanelBoxes(models.Model):
|
||||
related_name = models.CharField(max_length=255, blank=True, null=True)
|
||||
box_content_type = models.ForeignKey(ContentType)
|
||||
box_id = models.PositiveIntegerField()
|
||||
box = generic.GenericForeignKey("box_content_type", "box_id")
|
||||
|
||||
def __unicode__(self):
|
||||
return "%d: %s" % (self.id, self.related_name)
|
||||
|
||||
def get_dict(self):
|
||||
return self.box.get_dict()
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Panel box"
|
||||
verbose_name_plural = "Panel boxes"
|
||||
|
||||
|
||||
|
||||
'''
|
||||
Abstract base-class for boxes.
|
||||
'''
|
||||
class Box(ItfModel):
|
||||
title = models.CharField(max_length=256)
|
||||
extra_buttons = models.ManyToManyField("ExtraButton", blank=True, null=True)
|
||||
logo = models.ImageField(upload_to="upload/box_logos/", blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def render():
|
||||
return ''
|
||||
|
||||
def __unicode__(self):
|
||||
return "%d: %s" % (self.id, self.title)
|
||||
|
||||
def _get_buttons(self):
|
||||
ret = []
|
||||
for b in self.extra_buttons.all():
|
||||
ret.append(b.button.get_dict())
|
||||
return ret
|
||||
|
||||
def get_dict(self):
|
||||
return {}
|
||||
|
||||
|
||||
class StaticBox(Box):
|
||||
html = models.TextField(blank=True, null=True)
|
||||
|
||||
def get_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'type': 'StaticBox',
|
||||
'title': self.title,
|
||||
'html': self.html,
|
||||
'extra_buttons': self._get_buttons()
|
||||
}
|
||||
|
||||
|
||||
class ModelsBox(Box):
|
||||
default_model = models.ForeignKey(ModelExtra)
|
||||
view_models = models.ManyToManyField(ModelExtra, related_name="box_views", blank=True, null=True)
|
||||
info = models.TextField(blank=True)
|
||||
|
||||
@property
|
||||
def module(self):
|
||||
return self.default_model.app_label
|
||||
|
||||
def get_dict(self):
|
||||
data = {
|
||||
'id': self.id,
|
||||
'type': 'ModelsBox',
|
||||
'title': self.title,
|
||||
'info': self.info,
|
||||
'extra_buttons': self._get_buttons(),
|
||||
'default_model': self.default_model.get_dict(),
|
||||
'view_models': map(lambda x: x.get_dict(), self.view_models.all())
|
||||
}
|
||||
return data
|
||||
|
||||
|
||||
|
||||
class Panel(models.Model):
|
||||
title = models.CharField(max_length=255)
|
||||
boxes = models.ManyToManyField("PanelBoxes", blank=True, null=True)
|
||||
enabled = models.BooleanField(default=False)
|
||||
displayed = models.BooleanField(default=False)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
||||
def get_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'title': self.title,
|
||||
'boxes': map(lambda x: x.get_dict(), self.boxes.all())
|
||||
}
|
||||
|
||||
'''
|
||||
class Page(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
'''
|
|
@ -1,23 +0,0 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
# Create your views here.
|
||||
from api.actions import actions
|
||||
import ox
|
||||
from django.shortcuts import render_to_response
|
||||
from ox.django.decorators import login_required_json
|
||||
from ox.django.shortcuts import render_to_json_response, get_object_or_404_json, json_response
|
||||
from models import Panel
|
||||
import json
|
||||
from django.template import RequestContext
|
||||
|
||||
def mainPage(request):
|
||||
d = {'title': 'India Theatre Forum'}
|
||||
return render_to_response("noel/index.html", d)
|
||||
|
||||
def innerPage(request):
|
||||
return render_to_response("noel/bestpractices.html", RequestContext(request, {}))
|
||||
|
||||
def getPage(request):
|
||||
'''
|
||||
returns displayed panels as displayed; hidden panels as hidden.
|
||||
each panel is:
|
||||
title
|
||||
boxes:
|
||||
type
|
||||
title
|
||||
default_model
|
||||
etc
|
||||
'''
|
||||
# data = json.loads(request.POST['data'])
|
||||
panels = _getPageData(request)
|
||||
response = json_response({})
|
||||
response['data'] = panels
|
||||
response['status'] = {'code': 200}
|
||||
return render_to_json_response(response)
|
||||
actions.register(getPage)
|
||||
|
||||
def _getPageData(request):
|
||||
data = json.loads(request.POST['data'])
|
||||
displayedPanels = Panel.objects.filter(enabled=True).filter(displayed=True)
|
||||
hiddenPanels = Panel.objects.filter(enabled=True).filter(displayed=False)
|
||||
panels = {}
|
||||
panels['displayed'] = []
|
||||
for d in displayedPanels:
|
||||
panels['displayed'].append(d.get_dict())
|
||||
panels['hidden'] = []
|
||||
for h in hiddenPanels:
|
||||
panels['hidden'].append(h.get_dict())
|
||||
return panels
|
|
@ -1,20 +0,0 @@
|
|||
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")
|
||||
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
from django.contrib import admin
|
||||
from models import *
|
||||
# from forms import ArticleForm
|
||||
|
||||
class ArticleInline(admin.StackedInline):
|
||||
model = Article
|
||||
extra = 4
|
||||
filter_horizontal = ['authors']
|
||||
|
||||
class ImageInline(admin.StackedInline):
|
||||
model = Image
|
||||
extra = 4
|
||||
|
||||
class DocumentInline(admin.StackedInline):
|
||||
model = Document
|
||||
extra = 4
|
||||
|
||||
class IssueAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'date', 'published',)
|
||||
inlines = [ArticleInline, ImageInline, DocumentInline]
|
||||
save_on_top = True
|
||||
|
||||
class ContributorAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
class DocumentAdmin(admin.ModelAdmin):
|
||||
list_filter = ['issue']
|
||||
search_fields = ('doc_txt',)
|
||||
list_display = ('title', 'doc_txt',)
|
||||
|
||||
class ImageAdmin(admin.ModelAdmin):
|
||||
list_filter = ['issue']
|
||||
|
||||
class ArticleAdmin(admin.ModelAdmin):
|
||||
filter_horizontal = ['authors']
|
||||
list_filter = ['issue']
|
||||
# form = ArticleForm
|
||||
|
||||
admin.site.register(Issue, IssueAdmin)
|
||||
admin.site.register(Article, ArticleAdmin)
|
||||
admin.site.register(Document, DocumentAdmin)
|
||||
admin.site.register(Contributor, ContributorAdmin)
|
||||
admin.site.register(Image, ImageAdmin)
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
from django.db import models
|
||||
import datetime
|
||||
from django.db.models.signals import post_save
|
||||
# import subprocess
|
||||
import os
|
||||
import codecs
|
||||
|
||||
class Issue(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
date = models.DateField()
|
||||
published = models.BooleanField(default=False)
|
||||
notes = models.TextField(blank=True)
|
||||
|
||||
is_itf_model = False
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
class Article(models.Model):
|
||||
authors = models.ManyToManyField("Contributor", blank=True, null=True)
|
||||
title = models.CharField(max_length=255)
|
||||
order = models.IntegerField(blank=True, null=True)
|
||||
notes = models.TextField(blank=True)
|
||||
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
|
||||
|
||||
DOC_CATEGORIES = (
|
||||
('main', 'Main Article'),
|
||||
('secondary', 'Secondary Article'),
|
||||
('feedback', 'Feedback'),
|
||||
('announce', 'Announcements & Reviews'),
|
||||
('reference', 'Reference'),
|
||||
('other', 'Other'),
|
||||
)
|
||||
|
||||
class Document(models.Model):
|
||||
file = models.FileField(upload_to='erang/documents/')
|
||||
title = models.CharField(max_length=500)
|
||||
issue = models.ForeignKey(Issue)
|
||||
category = models.CharField(max_length=255, choices=DOC_CATEGORIES, blank=True)
|
||||
notes = models.TextField(blank=True)
|
||||
contributor = models.ForeignKey(Contributor, blank=True, null=True)
|
||||
doc_txt = models.TextField(blank=True)
|
||||
date_added = models.DateTimeField(default=datetime.datetime.now(), editable=False)
|
||||
|
||||
def txtPath(self):
|
||||
path = self.file.path
|
||||
return path + ".txt"
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
||||
class Image(models.Model):
|
||||
file = models.FileField(upload_to='erang/images/')
|
||||
title = models.CharField(max_length=255)
|
||||
contributor = models.ForeignKey(Contributor, blank=True, null=True)
|
||||
issue = models.ForeignKey(Issue)
|
||||
notes = models.TextField(blank=True)
|
||||
date_added = models.DateTimeField(default=datetime.datetime.now(), editable=False)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
'''
|
||||
def docToTxt(**kwargs):
|
||||
obj = kwargs['instance']
|
||||
f = open("/tmp/tmpDocToTxt.txt", "w")
|
||||
s = subprocess.Popen(["antiword", "-f", "-m", "UTF-8", obj.file.path], stdout = f)
|
||||
f.close()
|
||||
f2 = open("/tmp/tmpDocToTxt.txt")
|
||||
txt = f2.read()
|
||||
f2.close()
|
||||
obj.doc_txt = txt
|
||||
obj.save()
|
||||
return
|
||||
'''
|
||||
def docToTxt(**kwargs):
|
||||
obj = kwargs['instance']
|
||||
docFilePath = obj.file.path
|
||||
txtPath = obj.txtPath()
|
||||
if not os.path.isfile(txtPath):
|
||||
os.system("antiword -f -m 'UTF-8' '%s' > %s" % (docFilePath, txtPath,))
|
||||
f = codecs.open(txtPath, encoding='utf-8')
|
||||
txt = f.read()
|
||||
f.close()
|
||||
obj.doc_txt = txt
|
||||
obj.save()
|
||||
return
|
||||
return
|
||||
|
||||
post_save.connect(docToTxt, sender=Document)
|
|
@ -1,23 +0,0 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
|
@ -1 +0,0 @@
|
|||
# Create your views here.
|
|
@ -1,13 +0,0 @@
|
|||
from django.contrib import admin
|
||||
from models import *
|
||||
# from forms import ArticleForm
|
||||
|
||||
|
||||
|
||||
class IssueAdmin(admin.ModelAdmin):
|
||||
list_display = ('title', 'date',)
|
||||
|
||||
|
||||
admin.site.register(Issue, IssueAdmin)
|
||||
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
from django.db import models
|
||||
from django.contrib.comments.signals import comment_was_posted
|
||||
from django.core.mail import send_mail
|
||||
from app.models import ItfModel
|
||||
|
||||
class Issue(ItfModel):
|
||||
title = models.CharField(max_length=255)
|
||||
summary = models.TextField(blank=True, null=True)
|
||||
date = models.DateField()
|
||||
html = models.TextField(blank=True)
|
||||
|
||||
fts_fields = ['title', 'summary']
|
||||
fk_filters = []
|
||||
|
||||
def preview_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'title': self.title,
|
||||
'summary': self.summary,
|
||||
}
|
||||
|
||||
def info_dict(self):
|
||||
d = self.preview_dict()
|
||||
d['html'] = self.html
|
||||
return d
|
||||
|
||||
def list_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'title': self.title
|
||||
}
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
||||
def get_dict(self):
|
||||
#FIXME: return self.date in JSON-friendly way
|
||||
return {
|
||||
'id': self.id,
|
||||
'title': self.title,
|
||||
'summary': self.summary,
|
||||
}
|
||||
|
||||
# Create your models here.
|
||||
|
||||
def comments_notify(sender, **kwargs):
|
||||
comment = kwargs['comment']
|
||||
name = comment.name
|
||||
email = comment.email
|
||||
content = comment.comment
|
||||
erang_id = comment.content_object.id
|
||||
comment_id = comment.id
|
||||
# url = "http://theatreforum.in/erang/?issue_id=%d" % (erang_id)
|
||||
admin_url = "http://theatreforum.in/admin/comments/comment/%d/" % (comment_id)
|
||||
message = "Name: %s \n Email: %s \n Comment: %s\n\n Moderate: %s" % (name, email, content, admin_url)
|
||||
send_mail("New comment on Theatreforum.in", message, "do_not_reply@theatreforum.in", ["sanjaybhangar@gmail.com"])
|
||||
return True
|
||||
|
||||
comment_was_posted.connect(comments_notify)
|
|
@ -1,8 +0,0 @@
|
|||
from django import template
|
||||
|
||||
register = template.Library()
|
||||
|
||||
def absolutify_links(value):
|
||||
return value.replace('src="img.x', 'src="http://a.organisedmail.com/img.x')
|
||||
|
||||
register.filter("absolutify_links", absolutify_links)
|
|
@ -1,23 +0,0 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
from django.conf.urls.defaults import *
|
||||
import views
|
||||
|
||||
urlpatterns = patterns('',
|
||||
# Example:
|
||||
# (r'^bhangar/', include('bhangar.foo.urls')),
|
||||
#(r'^search/', include('solango.urls')),
|
||||
(r'^$', views.home),
|
||||
(r'^subscribe/$', views.subscribe),
|
||||
(r'^search/$', views.search),
|
||||
# (r'^postfeedback/$', views.postfeedback),
|
||||
(r'^issue_list/$', views.issue_list),
|
||||
)
|
|
@ -1,108 +0,0 @@
|
|||
# Create your views here.
|
||||
from django.shortcuts import render_to_response
|
||||
from models import Issue
|
||||
from settings import ERANG_SUBSCRIBE_URL
|
||||
import urllib2
|
||||
from django.http import HttpResponse
|
||||
from django.core.mail import send_mail
|
||||
from django.db.models import Q
|
||||
from ox.django.shortcuts import render_to_json_response
|
||||
from django.core.paginator import Paginator, InvalidPage, EmptyPage
|
||||
from django.template import RequestContext
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
RESULTS_PER_PAGE = 6
|
||||
|
||||
def home(request):
|
||||
all_issues = Issue.objects.all().order_by('-date')
|
||||
if request.GET.has_key('issue_id'):
|
||||
issue_id = request.GET.get('issue_id')
|
||||
else:
|
||||
# l = 0
|
||||
issue_id = all_issues[0].id
|
||||
current_issue = Issue.objects.get(pk=issue_id)
|
||||
other_issues = all_issues.exclude(pk=issue_id)
|
||||
hasCommented = request.GET.has_key('c')
|
||||
return render_to_response("erang/home.html", {
|
||||
'current_issue': current_issue,
|
||||
'hasCommented': hasCommented
|
||||
# 'past_issues': other_issues
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def issue_list(request):
|
||||
p = RESULTS_PER_PAGE
|
||||
try:
|
||||
page_no = int(request.GET.get("page", '1'))
|
||||
except ValueError:
|
||||
page_no = 1
|
||||
|
||||
# print start_no
|
||||
search_terms = request.GET.get("search", "")
|
||||
# print search_terms
|
||||
if search_terms != '':
|
||||
qset = search(search_terms)
|
||||
else:
|
||||
qset = Issue.objects.all()
|
||||
|
||||
qset = qset.order_by('-date')
|
||||
paginator = Paginator(qset, p)
|
||||
|
||||
try:
|
||||
results = paginator.page(page_no)
|
||||
except (EmptyPage, InvalidPage):
|
||||
results = paginator.page(paginator.num_pages)
|
||||
|
||||
issues = []
|
||||
for r in results.object_list:
|
||||
d = r.get_dict()
|
||||
issues.append(d)
|
||||
|
||||
return render_to_json_response({
|
||||
'hasPrev': results.has_previous(),
|
||||
'hasNext': results.has_next(),
|
||||
'issues': issues,
|
||||
'page_no': page_no,
|
||||
'search_terms': search_terms
|
||||
})
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
def subscribe(request):
|
||||
email = request.POST.get("email")
|
||||
url = ERANG_SUBSCRIBE_URL + email
|
||||
re = urllib2.urlopen(url).read()
|
||||
return HttpResponse(re)
|
||||
|
||||
def search(terms):
|
||||
# terms = request.GET['search']
|
||||
words = terms.split(" ")
|
||||
qset = Issue.objects.all()
|
||||
issues = []
|
||||
for w in words:
|
||||
qset = qset.filter(Q(title__icontains=w) | Q(summary__icontains=w))
|
||||
return qset
|
||||
|
||||
'''
|
||||
for issue in qset:
|
||||
d = issue.get_dict()
|
||||
issues.append(d)
|
||||
return issues
|
||||
'''
|
||||
|
||||
'''
|
||||
def postfeedback(request):
|
||||
p = request.POST
|
||||
issue = p.get("issue")
|
||||
name = p.get("name")
|
||||
email = p.get("email")
|
||||
comment = p.get("comment")
|
||||
txt = """
|
||||
Feedback on Issue: %s
|
||||
|
||||
Name: %s
|
||||
Email: %s
|
||||
Feedback %s
|
||||
""" % (issue, name, email, comment,)
|
||||
send_mail("eRang Feedback", txt, "do-not-reply@theatreforum.in", ['sanjaybhangar@gmail.com', 'erang@theatreforum.in'])
|
||||
return HttpResponse("1")
|
||||
'''
|
|
@ -5,5 +5,6 @@ urlpatterns = patterns('',
|
|||
(r'^get_list$', views.get_list),
|
||||
(r'^get_details$', views.get_details),
|
||||
(r'^get_tab$', views.get_tab),
|
||||
(r'^(?P<module_slug>.*)/$', views.main),
|
||||
#(r'^static/(?P<module_slug>.*)/$', views.render_object),
|
||||
(r'^(?P<module_slug>.*)/$', views.render_object),
|
||||
)
|
||||
|
|
|
@ -80,3 +80,49 @@ def get_details(request):
|
|||
return render_to_json_response(ret)
|
||||
|
||||
|
||||
def render_object(request, module_slug):
|
||||
module = get_object_or_404(Module, slug=module_slug)
|
||||
tab_slug = request.GET.get("tab", '')
|
||||
try:
|
||||
tab = get_object_or_404(ModuleTab, slug=tab_slug)
|
||||
except:
|
||||
try:
|
||||
tab = module.moduletab_set.filter(is_default=True)[0]
|
||||
except:
|
||||
tab = module.moduletab_set.all()[0]
|
||||
|
||||
model_class = tab.model_class()
|
||||
object_id = request.GET.get("object_id", 0)
|
||||
sortString = request.GET.get("sort", "")
|
||||
if sortString == "" or sortString == 'null':
|
||||
sortArray = []
|
||||
else:
|
||||
sortOperator = sortString[0]
|
||||
sortField = sortString[1:]
|
||||
sortArray = [{
|
||||
'operator': sortOperator,
|
||||
'key': sortField
|
||||
}]
|
||||
list_options = {
|
||||
'search': request.GET.get("search", ""),
|
||||
'sort': sortArray,
|
||||
'page': request.GET.get("page", 1),
|
||||
'object_id': object_id,
|
||||
'count': request.GET.get("count", 15) #FIXME: make list_length either in settings.py or config per model
|
||||
}
|
||||
object_list = tab.get_list(list_options)
|
||||
|
||||
if object_id == 0:
|
||||
object_id = object_list['items'][0]['id']
|
||||
|
||||
obj = get_object_or_404(model_class, pk=object_id)
|
||||
item_data = obj.insidepage_dict(request)
|
||||
|
||||
context = RequestContext(request, {
|
||||
'item': obj,
|
||||
'item_data': item_data,
|
||||
'tab': tab,
|
||||
'object_list': object_list,
|
||||
'tabs': tab.module.moduletab_set.all()
|
||||
})
|
||||
return render_to_response("noel/render_object.html", context)
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -5,7 +5,7 @@ from os.path import join
|
|||
# import markdown
|
||||
|
||||
SITENAME = "India Theatre Forum"
|
||||
DEBUG = True
|
||||
DEBUG = False
|
||||
TEMPLATE_DEBUG = DEBUG
|
||||
JSON_DEBUG = DEBUG
|
||||
|
||||
|
@ -69,7 +69,7 @@ TWITTER_ID = "sachin_rt"
|
|||
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
|
||||
# 'LOCATION': '127.0.0.1:11211',
|
||||
# }
|
||||
#}
|
||||
#}
|
||||
|
||||
CACHES = {
|
||||
'default': {
|
||||
|
@ -177,7 +177,7 @@ INSTALLED_APPS = (
|
|||
'festival',
|
||||
'insidepages',
|
||||
# 'erang',
|
||||
'erang_organised',
|
||||
# 'erang_organised',
|
||||
'scriptbank',
|
||||
'bestpractices',
|
||||
'emailer',
|
||||
|
@ -186,7 +186,7 @@ INSTALLED_APPS = (
|
|||
'tagging',
|
||||
'app',
|
||||
'padmavideos',
|
||||
'api',
|
||||
# 'api',
|
||||
# 'boxes',
|
||||
'frontpage',
|
||||
# 'solango',
|
||||
|
@ -198,7 +198,7 @@ INSTALLED_APPS = (
|
|||
'crispy_forms',
|
||||
'floppyforms',
|
||||
# 'south',
|
||||
'user',
|
||||
# 'user',
|
||||
'ckeditor',
|
||||
'fccv',
|
||||
'haystack',
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
ALTER TABLE `bestpractices_bestpractice`
|
||||
ADD `display_image` varchar(100);
|
||||
|
|
@ -1,57 +1,68 @@
|
|||
'use strict';
|
||||
|
||||
/*
|
||||
jQuery plugin to embed video from a pan.do/ra instance
|
||||
Usage:
|
||||
html:
|
||||
<div id="video" data-pandora-id="AA"></div>
|
||||
js:
|
||||
$('#video').pandoravideo();
|
||||
|
||||
Options can be passed as data- attributes in the html or in an options object - read code for docs
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
$.fn.pandoravideo = function(options) {
|
||||
|
||||
//get options, giving preference, in order, to data- attributes defined on the html element, options passed when instantiatiing $(element).pandoravideo(options), defaults.
|
||||
var options = options || {},
|
||||
namespace = options.namespace || "pandora",
|
||||
$this = this;
|
||||
|
||||
|
||||
var optionTypes = {
|
||||
'strings': ['api', 'base', 'resolution', 'action', 'id'],
|
||||
'integers': ['width', 'interval'],
|
||||
'floats': ['in', 'out'],
|
||||
'arrays': ['layers', 'keys'],
|
||||
'booleans': []
|
||||
//'functions': ['callback'] FIXME: lets not.
|
||||
};
|
||||
|
||||
optionTypes = {
|
||||
'strings': ['api', 'base', 'resolution', 'action', 'id'],
|
||||
'integers': ['width', 'interval'],
|
||||
'floats': ['in', 'out'],
|
||||
'arrays': ['layers', 'keys'],
|
||||
'booleans': []
|
||||
//'functions': ['callback'] FIXME: lets not.
|
||||
};
|
||||
|
||||
var dataOptions = $.extend(options, $this.getDataOptions(optionTypes, namespace));
|
||||
|
||||
return this.each(function() {
|
||||
|
||||
var $this = $(this),
|
||||
dataOptions = $.extend(options, $this.getDataOptions(optionTypes, namespace)),
|
||||
opts = $.extend({
|
||||
'id': 'ABC', //FIXME: throw an error if id is undefined at this point
|
||||
'layers': ['transcripts', 'descriptions', 'keywords', 'places'],
|
||||
'keys': ['layers'], //data keys to fetch from API call. FIXME: add more apt keys
|
||||
'api': "//pad.ma/api/", //pandora instance api end-point - see http://pad.ma/api
|
||||
'in': 0, //in point (float, in seconds) of clip
|
||||
'out': 0, //out point of clip
|
||||
'pandora_base': 'pad.ma/', //pandora instance from where to fetch video and image data
|
||||
'resolution': '480p', //resolution of video (96p, 240p, or 480p)
|
||||
'width': '640', //display (css) width
|
||||
'interval': 300, //interval (in ms) to run updatePlayer polling loop
|
||||
'action': 'get', //action POST param to send to url
|
||||
'callback': function() { $.noop(); } //function to call after done instantiating pandoraVideo object, called with the object.
|
||||
}, dataOptions),
|
||||
id = opts.id,
|
||||
$loading = $('<div />').addClass("pandoraLoading").text("Loading video...").appendTo($this),
|
||||
sendData = JSON.stringify({'id': id, 'keys': opts.keys});
|
||||
|
||||
var opts = $.extend({
|
||||
'id': 'ABC', //FIXME: throw an error if id is undefined at this point
|
||||
'layers': ['transcripts', 'descriptions', 'keywords', 'places'],
|
||||
'keys': ['layers'], //data keys to fetch from API call. FIXME: add more apt keys
|
||||
'api': "//pad.ma/api/", //pandora instance api end-point - see http://pad.ma/api
|
||||
'in': 0, //in point (float, in seconds) of clip
|
||||
'out': 0, //out point of clip
|
||||
'pandora_base': 'pad.ma/', //pandora instance from where to fetch video and image data
|
||||
'resolution': '480p', //resolution of video (96p, 240p, or 480p)
|
||||
'width': '640', //display (css) width
|
||||
'interval': 300, //interval (in ms) to run updatePlayer polling loop
|
||||
'action': 'get', //action POST param to send to url
|
||||
'callback': function() { $.noop(); } //function to call after done instantiating pandoraVideo object, called with the object.
|
||||
}, dataOptions);
|
||||
//get the pandora id and instantiate a pandoraVideo object with the current element and render it and execute optional callback
|
||||
var deferred = $.post(opts.api, {'action': opts.action, 'data': sendData}, function(response) {
|
||||
$loading.hide().remove();
|
||||
var pandora = new PandoraVideo(id, response.data, $this, opts);
|
||||
pandora.render();
|
||||
opts.callback(pandora);
|
||||
}, "json");
|
||||
|
||||
//get the pandora id and instantiate a pandoraVideo object with the current element and render it and execute optional callback
|
||||
var id = opts.id,
|
||||
$loading = $('<div />').addClass("pandoraLoading").text("Loading video...").appendTo($this),
|
||||
sendData = JSON.stringify({'id': id, 'keys': opts.keys});
|
||||
|
||||
var deferred = $.post(opts.api, {'action': opts.action, 'data': sendData}, function(response) {
|
||||
$loading.hide().remove();
|
||||
var pandora = new PandoraVideo(id, response.data, $this, opts);
|
||||
pandora.render();
|
||||
opts.callback(pandora);
|
||||
}, "json");
|
||||
|
||||
deferred.error(function(data) {
|
||||
alert("failed to load video data");
|
||||
deferred.error(function(data) {
|
||||
alert("failed to load video data");
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
pandoraVideo class
|
||||
Parameters:
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% extends 'noel/base.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 %}
|
||||
{% block content %}
|
||||
<div class="errorTxt">
|
||||
This is a website acting like it found the page you were looking for, but really didn't.
|
||||
<br /><br />
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% extends 'noel/base.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 %}
|
||||
{% block content %}
|
||||
<div class="errorTxt">
|
||||
Oops.. the website made a booboo.<br /><br />
|
||||
Please contact admin@theatreforum.in if this error persists.<br /><br />
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
|
||||
<script type="text/javascript" src="/static/js/jquery.js"></script>
|
||||
<link rel="shortcut icon" href="/static/images/favicon.ico" />
|
||||
{% block head %}
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
{% block body %}
|
||||
|
||||
{% endblock %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,168 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
|
||||
{% block title %}
|
||||
India Theatre Forum - Best Practices
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_head %}
|
||||
<link rel="stylesheet" href="/static/css/bestpractices.css" />
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.bpItem a').click(function(e) {
|
||||
e.preventDefault();
|
||||
var id = $(this).parent().attr("data-id");
|
||||
if ($(this).parent().find(".bpAjax").is(":visible")) {
|
||||
$('.bpAjax').slideUp("fast", function() {
|
||||
$(this).remove();
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if ($('.bpAjax').is(":visible")) {
|
||||
$('.bpAjax').slideUp("fast", function() {
|
||||
$(this).remove();
|
||||
});
|
||||
}
|
||||
var container = $('<div />').addClass("bpAjax").text("Loading...");
|
||||
$(this).parent().append(container);
|
||||
var url = $(this).attr("href");
|
||||
$.get(url, {}, function(response) {
|
||||
container.hide().html(response).slideDown("fast", function() {
|
||||
var top = container.parent().position().top;
|
||||
$('html').scrollTop(top - 3);
|
||||
location.hash = id;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
if (location.hash != '') {
|
||||
var id = location.hash.replace("#", "");
|
||||
var aElem = $('div[data-id=' + id + ']').find('a');
|
||||
aElem.click();
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
{% 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><a href="/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>
|
||||
<li class="currentNav"><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices</div></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Best Practices</h3>
|
||||
<div class="centerText">
|
||||
{% block bpTabs %}
|
||||
<div id="bpTabs">
|
||||
<ul>
|
||||
<li class="bpCurrentTab">Intro</li>
|
||||
<li><a href="/itf/bestpractices/stories">Stories</a></li>
|
||||
<li><a href="/itf/bestpractices/guidelines">Guidelines</a></li>
|
||||
<li><a href="/itf/bestpractices/glossary">Glossary</a></li>
|
||||
<li><a href="/itf/bestpractices/faq">FAQ</a></li>
|
||||
<li><a href="/itf/bestpractices/download">Download</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
{% endblock %}
|
||||
{% block bpContent %}
|
||||
<div id="intro">
|
||||
<p>
|
||||
Starting off on this project to map the contours of the copyright issues that impact upon theatre practice, I asked a lawyer friend his opinion. ‘You may set the cat among the pigeons!’ he chortled. ‘But is your book for or against the copyright regime?’ he queried, more seriously.
|
||||
For or against copyright? I realized at once that this will be a primary question in the minds of most readers, following closely on the heels of ‘So what is copyright, anyway?’
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This project was taken up based on feedback received at the Not the Drama Seminar (NTDS) organized by the India Theatre Forum (ITF), at Ninasam, Heggodu, in March 2008. Earlier, Sudhanva Deshpande’s discussion with Prabir Purkayastha on the idea of a script archive on the ITF website had led to Prabir’s talk on Creative Commons at the seminar.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
The Core Team that presently takes responsibility for the India Theatre Forum (ITF), took on certain projects based on needs expressed by the theatre community. The ITF is a loose collective of theatre practitioners coming together to reflect on and to improve theatre practice in India.
|
||||
K.V. Akshara is working on ‘Kala Kalyana’, an insurance-cum-pension policy for artists; Sameera Iyengar has worked on the ITF website which is designed to cater to the needs of connectivity and networking; Sanjna Kapoor has launched ‘Theatre Arts’, a management initiative, and Sudhanva Deshpande is looking at the possibilities of the website hosting a script archive.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
While making scripts available to the theatre community, we have to keep in mind the welfare of the playwrights. Prabir Purkayastha, who made a presentation on Creative Commons at the NTDS, suggested this approach to Sudhanva Deshpande. This project was born out of the necessity to understand the concept of Copyrights and Commons.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Soon after I took on this responsibility, incidents reported from around the country made us realize that the theatre fraternity was sorely misinformed on this issue.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A simple handbook, the Core Team felt, would be of great help. Ashish Rajadhakshya, who was present at our first meeting on the project shared his view and extended the support of Sir Ratan Tata Trust for the process and publication.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Over two years, the ITF conducted limited surveys among theatre practitioners and playwrights on theatre practices around the country. They also collected stories arising out of copyright conflict in the theatre community. I worked simultaneously with several lawyers to collate this material, make sense of it, relate it to the relevant copyright laws and also look at the international treaties that India is a signatory to.
|
||||
The findings were shared with the Core Team. Over e-mails and several meetings, the feedback and discussions grappled with issues of culture, ethics and law as well as findings on actual praxis on the ground.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The ITF organized a forum for playwrights, theatre practitioners and lawyers in Delhi in 2009.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
These issues and findings were discussed and other stories and concerns emerged. Our invited experts presented perspectives on the practice of theatre in this country and on the motives that led to the framing of copyright laws. The idea of commons and sharing in creative practice was also discussed. The idea for an online script archive was presented to the playwrights. Quite a few practitioners present, candidly and unabashedly, professed total ignorance of the copyright laws. Unanimous opinion was expressed that a handbook on copyright laws with guidelines for best practices would be most useful.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Along with the Core Team members already mentioned, I have to thank Moloyashree Hashmi, not only for her valuable suggestions but also for shouldering responsibility for this forum.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Lawrence Liang, who was part of the discussions from early on and whose enthusiasm for the project was heartening, gets a big thank you.
|
||||
I express my gratitude also to Choiti Ghosh and Saurabh Nayyar, the administrative staff of the ITF whose untiring efforts through the process have helped it come to fruition.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This book, then, is a collection of copyright stories and situations. Many are from India and the theatre community. Some are also from other related arts and other countries. While most stories are real, with or without name changes, some stories are hypothetical.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The stories are meant to illustrate points of law. The cases presented are not exhaustive and are not meant to replace legal advice. This book is therefore in that sense ‘work in progress’ and is only a beginning of what we hope to be a much more comprehensive compendium through further editions.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For the ease of reading, the stories are abbreviated with parts of the conflict phrased as dialogue.<br />
|
||||
Some of the intra-text is brought out through sketches.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A list of FAQs and glossary at the end should see the reader better equipped to deal with copyright decisions required in the practice of theatre. The incidents are arranged in sequence resembling the steps followed in a theatre production – from the idea to production and performance, and on to the re-staging many years later.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Copyright is part of the legal environment we live in and we can be for or against it as much as we can be for or against the wind that blows. From what I have learnt though, there are some very hi-tech cats already out there on the net and as for pigeons - have you noticed how sparrows, sunbirds and mynahs have all but disappeared from our cities?
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Pravin Chennai October 28, 2010
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<div class="bpContent">
|
||||
Download Booklet: <br /><br />
|
||||
{% for d in downloads %}
|
||||
<div class="bpDownload">
|
||||
<a target="_blank" href="{{ d.fil.url }}" title="Click link to download PDF">{{ d.language }}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,14 +0,0 @@
|
|||
<div class="itfInfo">
|
||||
{{each stories}}
|
||||
<span class="itfInfoSub">Story ${$index + 1}: </span><span class="ifInfoInfo">{{html tmplToHtml($value.text) }}</span>
|
||||
<img class="itfInfoImg" src="${$value.image}" />
|
||||
<br /><br />
|
||||
{{/each}}
|
||||
<span class="itfInfoSub">Law: </span><span class="itfInfoInfo">{{html tmplToHtml(law)}}</span>
|
||||
{{if law_image}}
|
||||
<img class="itfInfoImg" src="${law_image}" />
|
||||
{{/if}}
|
||||
<br /><br />
|
||||
<span class="itfInfoSub">Relevance to Theatre: </span><span class="itfInfoInfo">{{html tmplToHtml(theatre)}}</span><br /><br />
|
||||
<span class="itfInfoSub">Quick Howto: </span><span class="itfInfoInfo">{{html tmplToHtml(quick_howto)}}</span><br /><br />
|
||||
</div>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="itfPreview">
|
||||
<span class="itfPreviewTitle">${title}</span><br /><br />
|
||||
<div class="itfPreviewImages">
|
||||
{{each images}} <img src="${$value.thumb}" width="200" title="${$value.caption}" /> {{/each}}
|
||||
</div>
|
||||
<span class="itfPreviewSub">Story: </span><span class="itfPreviewText">{{html tmplTrunc(tmplToHtml(story), 512)}}</span>
|
||||
</div>
|
|
@ -1,21 +0,0 @@
|
|||
{% extends 'bestpractices.html' %}
|
||||
|
||||
{% block bpTabs %}
|
||||
<div id="bpTabs">
|
||||
<ul>
|
||||
<li><a href="/itf/bestpractices">Intro</a></li>
|
||||
<li><a href="/itf/bestpractices/stories">Stories</a></li>
|
||||
<li><a href="/itf/bestpractices/guidelines">Guidelines</a></li>
|
||||
<li><a href="/itf/bestpractices/glossary">Glossary</a></li>
|
||||
<li><a href="/itf/bestpractices/faq">FAQ</a></li>
|
||||
<li class="bpCurrentTab">Download</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block bpContent %}
|
||||
<div class="bpContent">
|
||||
<a href="/static/upload/bestpractices_downloads/INDIA_THEATRE_FORUM_BOOK-rev-4-4-11_1.pdf" target="_blank">Download Booklet in English</a>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,32 +0,0 @@
|
|||
{% extends 'bestpractices.html' %}
|
||||
|
||||
{% block bpTabs %}
|
||||
<div id="bpTabs">
|
||||
<ul>
|
||||
<li><a href="/itf/bestpractices">Intro</a></li>
|
||||
<li><a href="/itf/bestpractices/stories">Stories</a></li>
|
||||
<li><a href="/itf/bestpractices/guidelines">Guidelines</a></li>
|
||||
<li><a href="/itf/bestpractices/glossary">Glossary</a></li>
|
||||
<li class="bpCurrentTab">FAQ</li>
|
||||
<li><a href="/itf/bestpractices/download">Download</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block bpContent %}
|
||||
<style type="text/css">
|
||||
.faqItem {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
</style>
|
||||
<div class="bpContent">
|
||||
{% for f in faqs %}
|
||||
<div class="faqItem">
|
||||
<p class="question"><b>{{ f.question }}</b></p>
|
||||
<p class="answer">{{ f.answer }}</p>
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,31 +0,0 @@
|
|||
{% extends 'bestpractices.html' %}
|
||||
|
||||
{% block bpTabs %}
|
||||
<div id="bpTabs">
|
||||
<ul>
|
||||
<li><a href="/itf/bestpractices">Intro</a></li>
|
||||
<li><a href="/itf/bestpractices/stories">Stories</a></li>
|
||||
<li><a href="/itf/bestpractices/guidelines">Guidelines</a></li>
|
||||
<li class="bpCurrentTab">Glossary</li>
|
||||
<li><a href="/itf/bestpractices/faq">FAQ</a></li>
|
||||
<li><a href="/itf/bestpractices/download">Download</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block bpContent %}
|
||||
<div class="bpContent">
|
||||
{% for t in terms %}
|
||||
<div class="bpItem">
|
||||
<div class="glossaryTerm">
|
||||
{{t.term}}
|
||||
</div>
|
||||
<div class="glossaryDefinition">
|
||||
{{t.definition}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,6 +0,0 @@
|
|||
{% load guidelines %}
|
||||
<div class="itfInfo">
|
||||
{% autoescape off %}
|
||||
{{ text|link_bps|linebreaksbr }}
|
||||
{% endautoescape %}
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
{% extends 'bestpractices.html' %}
|
||||
|
||||
{% block bpTabs %}
|
||||
<div id="bpTabs">
|
||||
<ul>
|
||||
<li><a href="/itf/bestpractices">Intro</a></li>
|
||||
<li><a href="/itf/bestpractices/stories">Stories</a></li>
|
||||
<li class="bpCurrentTab">Guidelines</li>
|
||||
<li><a href="/itf/bestpractices/glossary">Glossary</a></li>
|
||||
<li><a href="/itf/bestpractices/faq">FAQ</a></li>
|
||||
<li><a href="/itf/bestpractices/download">Download</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block bpContent %}
|
||||
<div class="bpContent">
|
||||
{% for g in guidelines %}
|
||||
<div class="bpItem" data-id="{{g.id}}">
|
||||
<a href="/itf/bestpractices/guideline/{{g.id}}">{{g.title}}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,25 +0,0 @@
|
|||
{% extends 'bestpractices.html' %}
|
||||
|
||||
{% block bpTabs %}
|
||||
<div id="bpTabs">
|
||||
<ul>
|
||||
<li><a href="/itf/bestpractices">Intro</a></li>
|
||||
<li class="bpCurrentTab">Stories</li>
|
||||
<li><a href="/itf/bestpractices/guidelines">Guidelines</a></li>
|
||||
<li><a href="/itf/bestpractices/glossary">Glossary</a></li>
|
||||
<li><a href="/itf/bestpractices/faq">FAQ</a></li>
|
||||
<li><a href="/itf/bestpractices/download">Download</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block bpContent %}
|
||||
<div class="bpContent">
|
||||
{% for s in stories %}
|
||||
<div class="bpStory bpItem" data-id="{{s.id}}">
|
||||
<a href="/itf/bestpractices/story/{{s.id}}">{{ s.title }}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,14 +0,0 @@
|
|||
<div class="itfInfo">
|
||||
{% for s in stories %}
|
||||
<span class="itfInfoSub">Story {{forloop.counter}}: </span><span class="ifInfoInfo">{{ s.text|linebreaksbr }}</span>
|
||||
<img class="itfInfoImg" src="{{ s.image }}" />
|
||||
<br /><br />
|
||||
{% endfor %}
|
||||
<span class="itfInfoSub">Law: </span><span class="itfInfoInfo">{{ law|linebreaksbr }}</span>
|
||||
{% if law_image %}
|
||||
<img class="itfInfoImg" src="{{ law_image }}" />
|
||||
{% endif %}
|
||||
<br /><br />
|
||||
<span class="itfInfoSub">Relevance to Theatre: </span><span class="itfInfoInfo">{{ theatre|linebreaksbr }}</span><br /><br />
|
||||
<span class="itfInfoSub">Quick Howto: </span><span class="itfInfoInfo">{{ quick_howto|linebreaksbr }}</span><br /><br />
|
||||
</div>
|
|
@ -1,34 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% block title %}
|
||||
India Theatre Forum - 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="/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>
|
||||
|
||||
<p><b>Update:</b> e-Rang sent out it's first issue on July 15th, 2010. You can subscribe and view current and past issues at <a href="http://theatreforum.in/erang/">http://theatreforum.in/erang/</a></p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
|
@ -1,114 +0,0 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% block head %}
|
||||
<title>India Theatre Forum - {{ current_issue.title }}</title>
|
||||
<script type="text/javascript" src="/static/js/jquery.color.js"></script>
|
||||
<script type="text/javascript" src="/static/js/utils.js"></script>
|
||||
<script type="text/javascript">
|
||||
var ERANG_ISSUE_ID = {{ current_issue.id }};
|
||||
</script>
|
||||
<script type="text/javascript" src="/static/js/erang/erang.js"></script>
|
||||
<link rel="stylesheet" href="/static/css/erang/erang.css" />
|
||||
<link rel="stylesheet" href="/static/css/erang/comments.css" />
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<script type="text/html" id="tmpl_issue_list">
|
||||
<ul class="newsletterList">
|
||||
<% for (var i=0; i<issues.length; i++) {
|
||||
var issue = issues[i];
|
||||
if (issue.id === ERANG_ISSUE_ID) { var classname="currentIssue" } else { var classname="otherIssue"}
|
||||
%>
|
||||
<li>
|
||||
<a href="?issue_id=<%= issue.id %>" class="<%= classname %>"><%= issue.title %></a>
|
||||
<br />
|
||||
<span class="date"></span>
|
||||
</li>
|
||||
<% } %>
|
||||
</ul>
|
||||
<div class="navBtns" data-terms="<%= search_terms %>" data-page="<%= page_no %>">
|
||||
<% if (hasPrev) { %><span class="prevBtn">< Previous</span><% } %>
|
||||
<% if (hasNext) { %><span class="nextBtn">Next ></span><% } %>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
<div id="leftMenu">
|
||||
<div class="homeLink">
|
||||
<h3><img src="/static/images/favicon.ico" title="India Theatre Forum" alt="" /> <a href="/" title="India Theatre Forum Home"> Home</a> </h3>
|
||||
</div>
|
||||
<div id="issueListWrapper">
|
||||
<h3>Past Issues:</h3>
|
||||
<form id="searchForm" action="" method="get" />
|
||||
<input id="issueSearch" data-placeholder="Search" /><input id="searchSubmit" type="submit" value="Go" />
|
||||
</form>
|
||||
<div class="issueListContainer">
|
||||
</div>
|
||||
</div>
|
||||
<div id="subscribe">
|
||||
<a name="subscribe"></>
|
||||
<h3>Subscribe:</h3>
|
||||
<form id="subscribeForm">
|
||||
<input id="email" name="email" data-placeholder="E-Mail" /><br />
|
||||
<button id="subscribeBtn">Subscribe!</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% load erangtags %}
|
||||
<div id="newsletterContent">
|
||||
{% autoescape off %}
|
||||
{{ current_issue.html|absolutify_links }}
|
||||
{% endautoescape %}
|
||||
<div id="commentWrapper">
|
||||
{% load comments %}
|
||||
<h3>Comments and Feedback</h3>
|
||||
<a name="comments"></a>
|
||||
{% get_comment_list for erang_organised.issue current_issue.id as comment_list %}
|
||||
|
||||
{% ifnotequal comment_list|length 0 %}
|
||||
<div id="comments_list">
|
||||
<!--
|
||||
<h4 class="responsesHeader">
|
||||
Responses:
|
||||
</h4>
|
||||
-->
|
||||
{% for comment in comment_list %}
|
||||
<div class="comment {% cycle 'commentOdd' 'commentEven' %}">
|
||||
<div class="comment_user">
|
||||
{{ comment.user_name }}:
|
||||
</div>
|
||||
<div class="comment_comment">
|
||||
{{ comment.comment }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
|
||||
|
||||
{% get_comment_form for current_issue as form %}
|
||||
|
||||
<div id="comment_form">
|
||||
<h4 class="formHeader">
|
||||
Leave a Response:
|
||||
</h4>
|
||||
<form action="{% comment_form_target %}" method="POST">{% csrf_token %}
|
||||
<input type="hidden" name="next" value="/erang/?issue_id={{ current_issue.id }}" />
|
||||
<table id="form_table">
|
||||
<tr class="leave_response">
|
||||
<th></th>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{{ form }}
|
||||
<tr>
|
||||
<th></th>
|
||||
<td><input type="submit" name="post" class="submit-post" value="Post"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,14 +0,0 @@
|
|||
<div class="itfInfo">
|
||||
{{each stories}}
|
||||
<span class="itfInfoSub">Story ${$index + 1}: </span><span class="ifInfoInfo">{{html tmplToHtml($value.text) }}</span>
|
||||
<img class="itfInfoImg" src="${$value.image}" />
|
||||
<br /><br />
|
||||
{{/each}}
|
||||
<span class="itfInfoSub">Law: </span><span class="itfInfoInfo">{{html tmplToHtml(law)}}</span>
|
||||
{{if law_image}}
|
||||
<img class="itfInfoImg" src="${law_image}" />
|
||||
{{/if}}
|
||||
<br /><br />
|
||||
<span class="itfInfoSub">Relevance to Theatre: </span><span class="itfInfoInfo">{{html tmplToHtml(theatre)}}</span><br /><br />
|
||||
<span class="itfInfoSub">Quick Howto: </span><span class="itfInfoInfo">{{html tmplToHtml(quick_howto)}}</span><br /><br />
|
||||
</div>
|
|
@ -1,5 +0,0 @@
|
|||
<div class="itfPreview">
|
||||
<span class="itfPreviewTitle">${title}</span><br />
|
||||
<span class="itfViewLink"><a href="/erang/?issue_id=${id}" target="_blank">View on site</a></span><br /><br />
|
||||
<span class="itfPreviewSub">Summary: </span>><span class="itfPreviewText">{{html tmplToHtml(summary) }}</span>
|
||||
</div>
|
|
@ -1,5 +0,0 @@
|
|||
<div class="itfPreview">
|
||||
<span class="itfPreviewTitle">${title}</span><br /><br />
|
||||
<span class="itfViewLink"><a href="/itf/project/${id}/" target="_blank">View on site</a></span><br />
|
||||
<span class="itfPreviewSub">Intro: </span>><span class="itfPreviewText">{{html tmplToHtml(intro) }}</span>
|
||||
</div>
|
|
@ -1,71 +0,0 @@
|
|||
<!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="/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>
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
<!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>
|
||||
<meta name="title" content="India Theatre Forum">
|
||||
{% 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="/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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</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>
|
||||
|
|
@ -1,106 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
|
||||
<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>
|
||||
<meta name="keywords" content="Theatre, ITF, India, Best Practices, Theatre Resources" />
|
||||
<meta name="title" content="India Theatre Forum" />
|
||||
<meta name="description" content="India Theatre Forum: Best practices and theatre resources for the theatre community in India." />
|
||||
<!-- <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="/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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</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></p>
|
||||
</div>
|
||||
<div id="right2">
|
||||
<p>
|
||||
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:
|
||||
</p>
|
||||
<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>
|
||||
<p>Supported by the Arts Management of the Sir Ratan Tata Trust</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
|
||||
{% block title %}
|
||||
India Theatre Forum - 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="/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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</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:</p>
|
||||
<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>Examples of some things you can give:</p>
|
||||
<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>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,33 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>India Theatre Forum</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<link rel="shortcut icon" type="image/png" href="/favicon.ico"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/oxjs/build/css/ox.ui.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/itf.css"/>
|
||||
<script type='text/javascript'>
|
||||
if(typeof(console)=='undefined') {
|
||||
console = {};
|
||||
console.log = function() {};
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="/static/js/jquery.js"></script>
|
||||
<script type="text/javascript" src="/static/js/jquery/jquery.tmpl.min.js"></script>
|
||||
<!-- <script type="text/javascript" src="/static/js/jquery/jquery.videosupport.js"></script> -->
|
||||
<script type="text/javascript" src="/static/oxjs/build/js/ox.load.js"></script>
|
||||
<script type="text/javascript" src="/static/oxjs/build/js/ox.js"></script>
|
||||
<script type="text/javascript" src="/static/oxjs/build/js/ox.ui.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/itf.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/app.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/query.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/construct.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/widgets.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/forms.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/boxes.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/box_types.js"></script>
|
||||
<script type="text/javascript" src="/static/js/itf/button_types.js"></script>
|
||||
<script type="text/javascript" src="/static/js/bookmyshow.js"></script>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
|
@ -1,313 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% block title %}
|
||||
India Theatre Forum - {{data.meeting.title}}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_head %}
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/jquery-ui-1.7.2.custom.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/jquery.tooltip.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/meeting.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/people.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/colorbox.css" />
|
||||
<script type="text/javascript" src="/static/js/jquery-ui-1.7.2.custom.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/jquery.tooltip.js"></script>
|
||||
<script type="text/javascript" src="/static/js/people.js"></script>
|
||||
<script type="text/javascript" src="/static/js/jquery.colorbox-min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/pretty.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
function commentFormError(err) {
|
||||
$('#comment_form_errors').html(err);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.comment_date').each(function() {
|
||||
var seconds = parseInt($.trim($(this).text()));
|
||||
var datestring = new Date(seconds * 1000).toString();
|
||||
var pretty_date = prettyDate(datestring);
|
||||
$(this).text(pretty_date);
|
||||
});
|
||||
// if ($.support.opacity) $('.tabText').jScrollPane();
|
||||
$('#tabs').tabs();
|
||||
$('.talkIcon img').tooltip({
|
||||
showURL: false,
|
||||
extraClass: 'myToolTip'
|
||||
});
|
||||
$('.thickbox').colorbox();
|
||||
$('.sessionTitle').toggle(function() {
|
||||
$(this).next().show("slow");
|
||||
}, function() {
|
||||
$(this).next().hide("slow");
|
||||
});
|
||||
$('#comment_form').submit(function(e) {
|
||||
var $that = $(this);
|
||||
e.preventDefault();
|
||||
var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
|
||||
var emailField = $('#id_email');
|
||||
if (!filter.test(emailField.val())) {
|
||||
var err = "Please enter a valid email address. We will never display it publicly, sell it, or use it to send you unsolicited email. Thanks.";
|
||||
commentFormError(err);
|
||||
return false;
|
||||
}
|
||||
if ($.trim($("#id_comment").val()) == '') {
|
||||
var err = "You cannot leave the comment field blank!"
|
||||
commentFormError(err);
|
||||
return false;
|
||||
}
|
||||
if ($.trim($("#id_name").val()) == '') {
|
||||
var err = "Write something for your name?"
|
||||
commentFormError(err);
|
||||
return false;
|
||||
}
|
||||
var data = $that.serialize();
|
||||
$('#commentSubmit').attr("disabled", "disabled");
|
||||
$.getJSON("/itf/meeting/comment/", data, function(json) {
|
||||
if (json.status == 0) {
|
||||
$('#comment_form_errors').html(json.msg);
|
||||
$('#commentSubmit').removeAttr("disabled");
|
||||
} else {
|
||||
var d = {
|
||||
'cname': $('#id_name').val(),
|
||||
'cdate': prettyDate(new Date().toString()),
|
||||
'ccomment': $('#id_comment').val()
|
||||
}
|
||||
$('#comment_form_errors').html('');
|
||||
var html = tmpl("tmpl_comment", d);
|
||||
$('#commentList').append(html);
|
||||
var jqForm = $('#commentForm');
|
||||
jqForm.hide();
|
||||
jqForm.html("Thanks for the comment!");
|
||||
jqForm.slideDown("slow");
|
||||
jqForm.animate({'fontSize': '36px'}, 2000);
|
||||
jqForm.fadeOut(2000);
|
||||
}
|
||||
});
|
||||
});
|
||||
// $('.cbIframe').colorbox({width: '530px', height: '450px', iframe: true});
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
John Resig's templating utility - http://ejohn.org/blog/javascript-micro-templating/
|
||||
Updated code to resolve issue with single quotes from: http://www.west-wind.com/Weblog/posts/509108.aspx
|
||||
define templates inside <script type="text/html" id="foo"> tags
|
||||
get html of template with tmpl("foo", json)
|
||||
*/
|
||||
(function() {
|
||||
var cache = {};
|
||||
|
||||
this.tmpl = function tmpl(str, data) {
|
||||
// Figure out if we're getting a template, or if we need to
|
||||
// load the template - and be sure to cache the result.
|
||||
var fn = !/\W/.test(str) ?
|
||||
cache[str] = cache[str] ||
|
||||
tmpl(document.getElementById(str).innerHTML) :
|
||||
|
||||
// Generate a reusable function that will serve as a template
|
||||
// generator (and which will be cached).
|
||||
new Function("obj",
|
||||
"var p=[],print=function(){p.push.apply(p,arguments);};" +
|
||||
|
||||
// Introduce the data as local variables using with(){}
|
||||
"with(obj){p.push('" +
|
||||
|
||||
// Convert the template into pure JavaScript
|
||||
str.replace(/[\r\t\n]/g, " ")
|
||||
.replace(/'(?=[^%]*%>)/g,"\t")
|
||||
.split("'").join("\\'")
|
||||
.split("\t").join("'")
|
||||
.replace(/<%=(.+?)%>/g, "',$1,'")
|
||||
.split("<%").join("');")
|
||||
.split("%>").join("p.push('")
|
||||
+ "');}return p.join('');");
|
||||
|
||||
// Provide some basic currying to the user
|
||||
return data ? fn(data) : fn;
|
||||
};
|
||||
})();
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block centerCol %}
|
||||
<script type="text/html" id="tmpl_comment">
|
||||
<div class="comment">
|
||||
<div class="comment_meta">
|
||||
posted by <span class="comment_name"><%= cname %></span> <span class="comment_date"><%= cdate %></span>:
|
||||
</div>
|
||||
<div class="comment_comment">
|
||||
<%= ccomment %>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<div>
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<li><a href="#synopsis">Synopsis</a></li>
|
||||
{% ifnotequal data.sessions|length 0%}
|
||||
<li><a href="#talks">Talks</a></li>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal data.documents|length 0%}
|
||||
<li><a href="#prereading">Pre-Reading</a></li>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal data.imagegallery|length 0 %}
|
||||
<li><a href="#gallery">Gallery</a></li>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal data.participants|length 0 %}
|
||||
<li><a href="#participants">Participants</a></li>
|
||||
{% endifnotequal %}
|
||||
<li><a href="#comments">Comments</a></li>
|
||||
</ul>
|
||||
<div id="synopsis">
|
||||
<h4 class="tabTitle">{{data.meeting.title}}</h4>
|
||||
<div class="tabText">
|
||||
{{data.meeting.intro}}
|
||||
</div>
|
||||
</div>
|
||||
{% ifnotequal data.sessions|length 0 %}
|
||||
<div id="talks">
|
||||
<h4 class="tabTitle">Programme</h4>
|
||||
<div class="tabText">
|
||||
{% for s in data.sessions %}
|
||||
<div class="session">
|
||||
<div class="sessionTitle">
|
||||
{{ s.title|title }}
|
||||
</div>
|
||||
<div class="sessionChild">
|
||||
<div class="sessionIntro">
|
||||
{{ s.intro|linebreaksbr }}
|
||||
</div>
|
||||
{% ifnotequal s.talks|length 0 %}
|
||||
<ul class="talks">
|
||||
{% for talk in s.talks %}
|
||||
<li>
|
||||
<span class="talkIcons">
|
||||
{% for d in talk.documents %}
|
||||
<span class="talkIcon">
|
||||
<a href="/static/{{d.file}}" target="_blank">
|
||||
<img src="/static/images/PDFIcon.jpg" title="<span class='ttTitle'>Download: {{d.title}}.</span> <br /><span class='ttIntro'>{{d.intro}}</span>" />
|
||||
</a>
|
||||
</span>
|
||||
{% endfor %}
|
||||
{% for a in talk.audio %}
|
||||
<span class="talkIcon">
|
||||
<a href="/static/{{a.file}}" target="_blank">
|
||||
<img src="/static/images/Audio.jpg" title="<span class='ttTitle'>Listen: {{a.title}}.</span><br /><span class='rightclickHelp'>(Right click and select 'Save Link As' to download)</span>" />
|
||||
</a>
|
||||
</span>
|
||||
{% endfor %}
|
||||
{% for v in talk.video %}
|
||||
<span class="talkIcon">
|
||||
<a href="/static/{{v.file}}">
|
||||
<img src="/static/images/VideoIcon.jpg" title="<span class='ttTitle'>Video: {{ talk.title }}.</span><span class='rightclickHelp'>(Right click and select 'Save Link As' to download)</span>">
|
||||
</a>
|
||||
</span>
|
||||
{% endfor %}
|
||||
</span>
|
||||
{{ talk.title }} by {{ talk.presenter }}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endifnotequal %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal data.documents|length 0%}
|
||||
<div id="prereading">
|
||||
<h4 class="tabTitle">Reading Materials</h4>
|
||||
<div class="tabText">
|
||||
{% for d in data.documents %}
|
||||
<div class="objWrapper">
|
||||
<div class="readingMatTitle">
|
||||
<a href="/static/{{d.file}}">{{d.title}}</a>
|
||||
</div>
|
||||
<div class="intro">
|
||||
{{ d.intro }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal data.imagegallery|length 0 %}
|
||||
<div id="gallery">
|
||||
<h4 class="tabTitle">Gallery</h4>
|
||||
<div class="tabText">
|
||||
{% load thumbnail %}
|
||||
{% for i in data.imagegallery %}
|
||||
{% thumbnail i.file "600x500" crop="center" as bigimage %}
|
||||
|
||||
<a href="{{ bigimage.url }}" title="{{i.title}}" class="thickbox" rel="gall">
|
||||
{% endthumbnail %}
|
||||
{% thumbnail i.file "100x100" crop="center" as thumb %}
|
||||
<img src="{{ thumb.url }}" />
|
||||
{% endthumbnail %}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal data.participants|length 0 %}
|
||||
<div id="participants">
|
||||
<h4 class="tabTitle">Participant List</h4>
|
||||
<div class="tabText">
|
||||
{% for p in data.participants %}
|
||||
<div class="pWrapper">
|
||||
<div class="pName">
|
||||
<a href="#">{{ p.name }}</a>
|
||||
</div>
|
||||
<div class="pBio">
|
||||
{{ p.short_bio }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
<div id="comments">
|
||||
<h4 class="tabTitle">Comments</h4>
|
||||
<div class="tabText">
|
||||
{% ifequal data.comments|length 0 %}
|
||||
No comments yet.. Be the first!
|
||||
{% else %}
|
||||
<div id="commentList">
|
||||
{% for c in data.comments %}
|
||||
<div class="comment">
|
||||
<div class="comment_meta">
|
||||
posted by <span class="comment_name">{{ c.name }}</span> <span class="comment_date">{{ c.epoch_date }}</span>:
|
||||
</div>
|
||||
<div class="comment_comment">
|
||||
{{ c.comment }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endifequal %}
|
||||
<div id="commentForm">
|
||||
<p>Add a Comment:</p>
|
||||
<form id="comment_form" action="/itf/meeting/comment/" method="POST">
|
||||
<div id="comment_form_errors"></div>
|
||||
{{comment_form.as_p}}
|
||||
|
||||
<div class="captchaWrap">
|
||||
<p>Please answer this question to prove you are human (sorry): </p>
|
||||
<p><span class="captchaQ">{{ captcha.question }}</span> <input id="captcha" name="captcha" type="text" /></p>
|
||||
</div>
|
||||
<input name="captcha_id" id="captcha_id" value="{{captcha.id}}" type="hidden" />
|
||||
<input name="meeting_id" id="meeting_id" value="{{id}}" type="hidden" />
|
||||
<input name="parent_id" id="parent_id" value="0" type="hidden" />
|
||||
|
||||
<input type="submit" id="commentSubmit" value="Submit" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,41 +0,0 @@
|
|||
{% extends 'festival_base.html' %}
|
||||
|
||||
{% block centerCol %}
|
||||
|
||||
<div id="meeting_list" class="box">
|
||||
<h1>Meeting Information</h1>
|
||||
|
||||
<br><br>
|
||||
|
||||
<b>Title:</b> {{ data.meeting.title }} <br>
|
||||
<b>Intro:</b> {{ data.meeting.intro }} <br>
|
||||
<b>Slug:</b> {{ data.meeting.slug }} <br>
|
||||
|
||||
{% for s in data.sessions %}
|
||||
<br><b>{{s.title}}</b>:<br>
|
||||
{% if s.talks %}
|
||||
<ul style="list-style-type: circle">
|
||||
{% for t in s.talks %}
|
||||
<li> {{ t.title }} </li>
|
||||
{% if t.documents %}
|
||||
<ul style="list-style-type: disc">
|
||||
{% for d in t.documents %}
|
||||
<li> {{ d.title }} <a href="{{d.file}}"><image style="border-style: none" src="/static/images/document.gif"></a> </li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% if t.images %}
|
||||
<ul style="list-style-type: disc">
|
||||
{% for i in t.images %}
|
||||
<li> {{ i.title }} <a href="{{i.file}}"><image style="border-style: none" src="/static/images/image.gif"></a> </li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,48 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
|
||||
{% block title %}
|
||||
India Theatre Forum - Activities
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_head %}
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/meetings.css" />
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block leftCol %}
|
||||
<ul id="leftNav">
|
||||
<li><a href="/itf/">Home</a></li>
|
||||
<li class="currentNav"><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="/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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</div></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Activities</h3>
|
||||
<div class="centerText">
|
||||
{% for m in meetings %}
|
||||
<div class="objWrapper">
|
||||
<div class="titleLink">
|
||||
<a href="/itf/meeting/{{m.id}}/">{{m.title}} ({{ m.start_date|date:"d M Y" }}{% ifnotequal m.start_date m.end_date %} - {{ m.end_date|date:"d M Y" }} {% endifnotequal %})</a>
|
||||
</div>
|
||||
<div class="intro">
|
||||
{{ m.intro }} <span class="more"><a href="/itf/meeting/{{m.id}}/">more >>></a></span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -1,241 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>India Theatre Forum - Home</title>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/index.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/fullcalendar.css" />
|
||||
<script type="text/javascript" src="/static/js/jquery-1.3.2.min.js"></script>
|
||||
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
|
||||
<script type="text/javascript" src="/static/js/fullcalendar.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/mockup.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="header">
|
||||
<div id="title">India Theatre Forum</div>
|
||||
<div id="searchDiv">
|
||||
Search: <input type="text" id="search" />
|
||||
<div class="toplink dialogLink" id="advancedSearch" data-target="searchDialog">Advanced Search</div>
|
||||
</div>
|
||||
<div id="loginRegister">
|
||||
<span class="topBtn dialogLink" id="loginButton" data-target="loginDialog">Login </span>
|
||||
|
|
||||
<span class="topBtn dialogLink" id="registerButton" data-target="signupDialog"> Sign up </span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainWrapper">
|
||||
<div id="adminMessageBox">
|
||||
<div id="adminMessage">
|
||||
This is an important message from admin...
|
||||
</div>
|
||||
<div id="adminMessageBoxClose" class="closeBtn">
|
||||
X
|
||||
</div>
|
||||
</div>
|
||||
<div id="leftBar">
|
||||
<div id="locationSelect">
|
||||
Your Location: <br />
|
||||
<select id="location">
|
||||
<option value="0">Mumbai</option>
|
||||
<option value="1">Delhi</option>
|
||||
<option value="2">Calcutta</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="leftTabs">
|
||||
<div class="leftTab">
|
||||
Performances
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
Events
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
Theatre Groups
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
Offers
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
Needs
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
Venues
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
People
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="leftTab">
|
||||
Recent Changes
|
||||
</div>
|
||||
<div class="leftTabContent">
|
||||
<ul>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
<li><a href="#">Lorem Ipsum Dolor Amet ... </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="center">
|
||||
<div id="centerBtns">
|
||||
<div class="centerBtn tabBtn" id="calendarBtn" data-target="tabCalendar">
|
||||
Calendar
|
||||
</div>
|
||||
<div class="centerBtn tabBtn" data-target="tabMap" onclick="setTimeout('initMap()', 1000)">
|
||||
Map
|
||||
</div>
|
||||
<div class="centerBtn tabBtn" id="newsBtn" data-target="tabNews" data-source="/x0news">
|
||||
Newsfeed
|
||||
</div>
|
||||
<div class="centerBtn tabBtn" data-target="tabDiscussion" data-source="/x0disc">
|
||||
Discussion
|
||||
</div>
|
||||
<div class="centerBtn tabBtn" data-target="tabMultimedia" data-source="/x0multi">
|
||||
Multimedia
|
||||
</div>
|
||||
<div class="centerBtn tabBtn" data-target="tabResources" data-source="/x0resources">
|
||||
Resources
|
||||
</div>
|
||||
<div class="centerBtn tabBtn" data-target="tabeRang" data-source="/x0erang">
|
||||
e-Rang
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="tabContainer">
|
||||
<div id="tabCalendar" class="tab">
|
||||
</div>
|
||||
<div id="tabMap" class="tab">
|
||||
<div id="map">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="tabNews" class="tab">
|
||||
Loading...
|
||||
</div>
|
||||
<div id="tabDiscussion" class="tab">
|
||||
Loading...
|
||||
</div>
|
||||
<div id="tabMultimedia" class="tab">
|
||||
Loading...
|
||||
</div>
|
||||
<div id="tabResources" class="tab">
|
||||
Loading...
|
||||
</div>
|
||||
<div id="tabeRang" class="tab">
|
||||
Loading...
|
||||
</div>
|
||||
<div id="tabProfile" class="tab">
|
||||
Loading...
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="rightBar">
|
||||
<div id="itfBox">
|
||||
<h2>India Theatre Forum:</h2>
|
||||
<ul id="itfList">
|
||||
<li>Documentation of Meetings</li>
|
||||
<li>Government Reports</li>
|
||||
<li>Theatre in the Press</li>
|
||||
<li>Reviews</li>
|
||||
<li>Audio / Video</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- start footer -->
|
||||
<div id="footer">
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
|
||||
<li><span class="selected-nav"><a href="#"><span style="color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;">Legal</span></a></li>
|
||||
<li>|</li>
|
||||
<li><a href="#"><span style="color: rgb(255, 255, 255); font-weight: bold">Privacy</span></a></li>
|
||||
<li>|</li>
|
||||
<li><a href="#"><span style="color: rgb(255, 255, 255); font-weight: bold">Terms</span></a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- end footer -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- DIALOG BOXES START -->
|
||||
<div id="loginDialog" class="dialogBox" title="Login">
|
||||
Username: <input type="text" id="username" value="username" /> <br />
|
||||
Password: <input type="password" id="password" /><br />
|
||||
<button id="loginSubmit">Login</button>
|
||||
</div>
|
||||
<div id="signupDialog" class="dialogBox" title="Sign Up!">
|
||||
Sign up stuff goes here
|
||||
</div>
|
||||
<div id="searchDialog" class="dialogBox" title="Advanced Search">
|
||||
Advanced search stuff goes here.
|
||||
</div>
|
||||
<!-- DIALOG BOXES END -->
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -211,25 +211,7 @@
|
|||
|
||||
<div id="bottomRight">
|
||||
Loading...
|
||||
<!--
|
||||
<p><span class="sectionTitle">Story 1:</span> A well known theatre group had auditions for casting lead characters in their play for which over 150 actors auditioned. A television film director happened to see the recording of the auditions and obtained a copy. Two months later, a few actors who had auditioned were horrified to see themselves in a television comedy show. Snippets of the recording had obviously been used!</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Actors:</span> Not on! If you like our acting, you hire us! Not use our improvisations for another purpose and that too by someone else! We'll sue the television show producer and the theatre group.</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Story 2:</span> Neha Bhasin, a play back singer went for an audition. Months later, she heard the piece on a radio channel and realized that it had been used without her permission. She also found that her name was mentioned as the background vocalist and the producer of the movie was credited as the lead vocalist.</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Neha Bhasin:</span> That's my voice…that's my name on the CD but I'm not the background vocalist!!! I'll sue the film producer! The music director: Hmmm not so! We didn't even want to use your voice. It was a recording mistake! The Court: A costly mistake. You've used her voice, now pay up royalty! And recall all the CDs with her voice.</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Law:</span> Do actors have special rights? Under the Indian Copyright law, actors, singers, musicians, dancers, et al are called performers</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Actors:</span> Not on! If you like our acting, you hire us! Not use our improvisations for another purpose and that too by someone else! We'll sue the television show producer and the theatre group.</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Story 2:</span> Neha Bhasin, a play back singer went for an audition. Months later, she heard the piece on a radio channel and realized that it had been used without her permission. She also found that her name was mentioned as the background vocalist and the producer of the movie was credited as the lead vocalist.</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Neha Bhasin:</span> That's my voice…that's my name on the CD but I'm not the background vocalist!!! I'll sue the film producer! The music director: Hmmm not so! We didn't even want to use your voice. It was a recording mistake! The Court: A costly mistake. You've used her voice, now pay up royalty! And recall all the CDs with her voice.</p><br/>
|
||||
|
||||
<p><span class="sectionTitle">Law:</span> Do actors have special rights? Under the Indian Copyright law, actors, singers, musicians, dancers, et al are called performers</p><br/>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div id="clearBoth"></div>
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% block extra_head %}
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/people.css" />
|
||||
<script type="text/javascript" src="/static/js/people.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
</script>
|
||||
<style type="text/css">
|
||||
|
||||
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block title %}
|
||||
India Theatre Forum - People
|
||||
{% 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><a href="/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 class="currentNav"><a href="/itf/people">Participants</a><div class="helper">A list of participants for all ITF meetings</div></li>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</div></li>
|
||||
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Meeting Participants</h3>
|
||||
<div class="centerText">
|
||||
{% for p in participants %}
|
||||
<div class="pWrapper">
|
||||
<div class="pName"><a href="#">{{p.name}}</a></div>
|
||||
<div class="pBio">{{p.short_bio}}</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,13 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% block title %}
|
||||
India Theatre Forum - {{ project.title }}
|
||||
{% endblock %}
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h1>{{project.title}}</h1>
|
||||
<div class="centerText">
|
||||
{{project.intro|linebreaksbr}}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,39 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
|
||||
{% block title %}
|
||||
India Theatre Forum - Projects
|
||||
{% 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 class="currentNav"><a href="/itf/projects">Projects</a><div class="helper">Projects undertaken by the ITF...</div></li>
|
||||
<li><a href="/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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</div></li>
|
||||
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Projects</h3>
|
||||
<div class="centerText">
|
||||
{% for p in projects %}
|
||||
<div class="objWrapper">
|
||||
<div class="titleLink">
|
||||
<a href="/itf/project/{{p.id}}/">{{p.title}}</a>
|
||||
</div>
|
||||
<div class="intro">
|
||||
{{ p.intro|truncatewords:'25' }} <span class="more"><a href="/itf/project/{{p.id}}/">more >>></a></span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,76 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
|
||||
{% block title %}
|
||||
India Theatre Forum - Publications
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_head %}
|
||||
<style type="text/css">
|
||||
.link a, .link a:visited {
|
||||
text-decoration: none;
|
||||
color: #c73e2b;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
{% 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><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 class="currentNav"><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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</div></li>
|
||||
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Publications</h3>
|
||||
<span style="align: center; text-align: center; font-size: 12px;">
|
||||
<b>OUR STAGE: Pleasures and Perils of Theatre Practice in India </b><br>
|
||||
<b>Edited by:</b> Sudhanva Deshpande, Akshara K.V., Sameera Iyengar
|
||||
</span>
|
||||
<div class="centerText" style="height: 900px;">
|
||||
|
||||
<p>Monday 16th | 7 pm | Prithvi Theatre</p>
|
||||
|
||||
<p><img src="/static/images/book.jpg" style="float: left; margin-right: 13px;" />In March 2008, over a hundred and forty theatre practitioners, critics, scholars, social scientists, activists, and theatre lovers came together at Ninasam in Heggodu, Karnataka, to discuss, debate, and critique the state of our theatre. This 5-day event organized by the India Theatre Forum was called ‘Not the Drama Seminar: Theatre Practice in India Today’. This was the largest such gathering at one place since the historic Drama Seminar of 1956.</p>
|
||||
<p>The book OUR STAGE brings together the discussions of those five days, and has contributions by Samik Bandyopadhyaya, G.P. Deshpande, Sadanand Menon, Ram Bapat, Shanta Gokhale, Shiv Vishwanathan, Shyamala Vanarase, K.V. Akshara, Gopal Guru, Sundar Sarukkai, Sanjna Kapoor, Keval Arora, Anmol Vellani, Prabir Purkayastha, Kaushik Sen, Moloyashree Hashmi, Sameera Iyengar, Sudhanva Deshpande, and others. Without doubt, the book will prove to be a major publication in the field of drama and performance studies. The book is published by Tulika Books, a leading New Delhi-based publisher.
|
||||
</p>
|
||||
|
||||
|
||||
<br />
|
||||
|
||||
<div class="link">
|
||||
For the actual transcripts, audios, videos and more, <a href="/itf/meeting/1/">click here</a>.
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<p>To buy the book online:</p>
|
||||
|
||||
<p><a href="http://www.leftword.com/bookdetails.php?BkId=269&type=PB">http://www.leftword.com/bookdetails.php?BkId=269&type=PB</a></p>
|
||||
|
||||
<p>
|
||||
Details:
|
||||
<br />
|
||||
Our Stage: Pleasures and Perils of Theatre Practice in India <br />
|
||||
Edited by: Sudhanva Deshpande, Akshara K. V. and Sameera Iyengar <br />
|
||||
ISBN: 978-81-89487-61-4 <br />
|
||||
Paperback <br />
|
||||
Tulika, 2009, Rs 350 <br />
|
||||
Distributed by IPD Alternatives <ipd.alternatives@gmail.com> <br /><br />
|
||||
|
||||
Using these details, you can also ask your local bookshops to order the book.
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% block title %}
|
||||
India Theatre Forum - Resources
|
||||
{% endblock %}
|
||||
{% block extra_head %}
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/people.css" />
|
||||
<style type="text/css">
|
||||
.intro {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript" src="/static/js/people.js"></script>
|
||||
{% 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><a href="/erang">e-Rang</a><div class="helper">The theatre newsletter...</div></li>
|
||||
<li class="currentNav"><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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</div></li>
|
||||
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Resources</h3>
|
||||
<div class="centerText">
|
||||
{% for r in resources %}
|
||||
<div class="objWrapper">
|
||||
<div class="titleLink pName">
|
||||
{{ r.title }}
|
||||
</div>
|
||||
<div class="intro">
|
||||
{% autoescape off %}
|
||||
{{ r.intro }}
|
||||
{% endautoescape %}
|
||||
<br />
|
||||
{% if r.file %}
|
||||
<a href="/static/{{r.file}}" target="_blank">Download Full Text</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
{% extends 'festival_wireframe.html' %}
|
||||
{% block title %}
|
||||
India Theatre Forum - Surveys
|
||||
{% 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><a href="/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 class="currentNav"><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>
|
||||
<li><a href="/itf/bestpractices">Best Practices</a><div class="helper">Best Practices publication</div></li>
|
||||
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block centerCol %}
|
||||
<div id="centerContent">
|
||||
<h3>Surveys</h3>
|
||||
<div class="centerText">
|
||||
Data collection and analysis can be one of the greatest tools to being able to grasp, evaluate and work towards the future of Indian theatre practice.
|
||||
<br /><br />
|
||||
We aim to arrive at an understanding of the different ways theatre is practiced, audiences develop, auditoria are run and theatre economics works – these are some of the focus areas that we hope our Survey will encompass over the years.
|
||||
<br /><br />
|
||||
Information, and data is collated through in-depth interviews. And the analysis of this data is being done in collaboration with TISS (Tata Institute of Social Sciences)
|
||||
<br /><br />
|
||||
The analysis will be shared broadly as well as the working system. In the hope that more nodal points of data collection and analysis may take place across the country. Thereby creating a wide pool of material to work on specific ideas to enhance theatre policy, working systems, practices etc.
|
||||
<br /><br />
|
||||
We will be putting up our survey forms regularly; please do try to fill them out as far as possible and bring us a step closer to understanding how theatre works in this wonderful country!
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
|
||||
#download {
|
||||
width: 470px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#download a {
|
||||
text-decoration: none;
|
||||
color: #c73e2b;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#download a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.rightclick {
|
||||
font-size: 12px;
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript" src="/static/js/swfobject.js"></script>
|
||||
|
||||
</head>
|
||||
<body style="background: #000;">
|
||||
|
||||
|
||||
<div id='mediaspace'>You will need Flash 9 to be able to view the videos.</div>
|
||||
<div id="download"><a href="/static/{{video.file}}" target="_blank">Download Video</a><br /><span class="rightclick">(Right click and select "Save As...")</span></div>
|
||||
<script type='text/javascript'>
|
||||
var so = new SWFObject('/static/images/player.swf','mpl','470','320','9');
|
||||
so.addParam('allowfullscreen','true');
|
||||
so.addParam('allowscriptaccess','always');
|
||||
so.addParam('autostart', 'true');
|
||||
so.addParam('wmode','opaque');
|
||||
so.addVariable('file','/static/{{video.file}}');
|
||||
so.write('mediaspace');
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,58 +0,0 @@
|
|||
|
||||
<div id="wrap">
|
||||
|
||||
|
||||
<div class="center-div" id="multi-categories">
|
||||
<h4>E-Rang</h4>
|
||||
|
||||
<p class="multi-content">
|
||||
E-rang is our weekly newsletter. Subscribe.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="center-div" id="resource-list-container">
|
||||
<h4>Issues</h4>
|
||||
<table style="border: 1px solid; font-size: 12px; width:100%; border-collapse: collapse;">
|
||||
<tr style="font-weight:bold;">
|
||||
<td>Issue No.</td>
|
||||
<td>Name</td>
|
||||
<td>Date</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>E-rang August</td>
|
||||
<td>1-Aug-2009</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>E-rang September</td>
|
||||
<td>1-Aug-2009</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>E-rang October</td>
|
||||
<td>1-Aug-2009</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>E-rang November</td>
|
||||
<td>1-Aug-2009</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>E-rang December</td>
|
||||
<td>1-Aug-2009</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
|
||||
<div id="wrap">
|
||||
|
||||
|
||||
<div class="center-div" id="multi-categories">
|
||||
<h4>Categories</h4>
|
||||
|
||||
<p class="multi-content">
|
||||
|
||||
<ul class="content-ul">
|
||||
<li>Comedy</li>
|
||||
<li>Drama</li>
|
||||
<li>Political</li>
|
||||
<li>Musical</li>
|
||||
<li>Fantasy</li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="center-div" id="multi-video">
|
||||
<h4>Videos</h4>
|
||||
<p class="multi-content">
|
||||
|
||||
<ul class="content-ul">
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/playvid100.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/playvid100.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/playvid100.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/playvid100.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/playvid100.jpg" /></li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
<span class="seemore"><a href="#">See more Videos</a></span>
|
||||
</div>
|
||||
|
||||
<div class="center-div" id="multi-images">
|
||||
<h4>Images</h4>
|
||||
|
||||
<p class="multi-content">
|
||||
|
||||
<ul class="content-ul">
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/theatre.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/theatre.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/theatre.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/theatre.jpg" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/theatre.jpg" /></li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
<span class="seemore"><a href="#">See more Images</a></span>
|
||||
</div>
|
||||
|
||||
<div class="center-div" id="multi-audio">
|
||||
<h4>Audio</h4>
|
||||
|
||||
<p class="multi-content">
|
||||
|
||||
<ul class="content-ul">
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/audio.gif" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/audio.gif" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/audio.gif" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/audio.gif" /></li>
|
||||
<li><img style="border: 1px solid; padding: 2px;" src="/static/images/audio.gif" /></li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<span class="seemore"><a href="#">See more Audio</a></span>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
|
||||
</div>
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
<style type="text/css">
|
||||
.headline {
|
||||
text-align: center;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mainStory {
|
||||
position: relative;
|
||||
padding: 4px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.column {
|
||||
float: left;
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
#firstColumn {
|
||||
margin-right: 20%;
|
||||
}
|
||||
|
||||
.columnStory {
|
||||
position: relative;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
img.floatLeft {
|
||||
float: left;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
<div id="x0newsWrapper">
|
||||
<div id="x0mainStory">
|
||||
<div class="headline">
|
||||
Lorem Ipsum
|
||||
</div>
|
||||
<div>
|
||||
<img class="floatLeft" height="150" width="150" src="/static/images/150x150.jpg" />
|
||||
</div>
|
||||
<div class="mainStory">
|
||||
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages.
|
||||
<div class="seeAll">
|
||||
Read More...
|
||||
</div>
|
||||
</div>
|
||||
<div class="storyImage">
|
||||
<img class="floatLeft" height="150" width="150" src="/static/images/150x150.jpg" />
|
||||
</div>
|
||||
<div class="mainStory">
|
||||
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages.
|
||||
<div class="seeAll">
|
||||
Read More...
|
||||
</div>
|
||||
</div>
|
||||
<div id="columnsContainer">
|
||||
<div class="column" id="firstColumn">
|
||||
<img class="floatLeft" height="50" width="50" src="/static/images/50x50.jpg" />
|
||||
|
||||
<div class="columnStory">
|
||||
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages.
|
||||
<div class="seeAll">
|
||||
Read More...
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column">
|
||||
<img class="floatLeft" height="50" width="50" src="/static/images/50x50.jpg" />
|
||||
<div class="columnStory">
|
||||
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages.
|
||||
<div class="seeAll">
|
||||
Read More...
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -1,57 +0,0 @@
|
|||
|
||||
<div id="wrap">
|
||||
|
||||
|
||||
<div id="photoID" style="height: 1000px">
|
||||
<h4>amar_singh's Profile</h4>
|
||||
|
||||
<p>
|
||||
|
||||
<table class="roundborder" style="border: 1px solid black; width: 100%; padding: 10px;">
|
||||
<tr>
|
||||
<td>
|
||||
<img style="border: 1px solid; padding: 3px; background-color: #ffffff; color: white; margin-bottom: 100px;" src="/static/images/profileimage.jpg" class="roundborder" />
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<div id="profile-details" style="font-size: 12px">
|
||||
<p><span style="font-weight: bold; font-size: 16px;">Amar Singh</span></p>
|
||||
<p><span style="font-weight: bold;">Occupation(s):</span> Director, Producer</p>
|
||||
<p><span style="font-weight: bold;">Location(s): Mumbai</span>, Goa, Delhi</p>
|
||||
<p></p>
|
||||
<p><span style="font-weight: bold;">Groups:</span></p>
|
||||
<ul>
|
||||
<li><a href="#" style="text-decoration: none">Prithvi Theatre</a></li>
|
||||
<li><a href="#" style="text-decoration: none">Lighthouse Theatre</a></li>
|
||||
<li><a href="#" style="text-decoration: none">Sunlight Theatre</a></li>
|
||||
<li><a href="#" style="text-decoration: none">EyeMoon Theatre</a></li>
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">Latest Posts:</span></p>
|
||||
<ul>
|
||||
<li><a href="#" style="text-decoration: none">Re: Timeline for events</a></li>
|
||||
<li><a href="#" style="text-decoration: none">Re:Re: Timeline for events</a></li>
|
||||
</ul>
|
||||
|
||||
<p><span style="font-weight: bold;">Uploads:</span></p>
|
||||
<ul>
|
||||
<li><a href="#" style="text-decoration: none">Lighthouse Theatre Event Schedule [1-Aug-2009].pdf</a></li>
|
||||
<li><a href="#" style="text-decoration: none">Lighthouse Theatre Introduction.pdf</a></li>
|
||||
<li><a href="#" style="text-decoration: none">Theatre Survey.doc</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
|
||||
<div id="wrap">
|
||||
|
||||
|
||||
<div class="center-div" id="multi-categories">
|
||||
<h4>Categories</h4>
|
||||
|
||||
<p class="multi-content">
|
||||
|
||||
<ul class="content-ul">
|
||||
<li>Scripts</li>
|
||||
<li>Funding</li>
|
||||
<li>Training</li>
|
||||
<li>Tributes</li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="center-div" id="resource-list-container">
|
||||
<h4>Resources</h4>
|
||||
<table style="border: 1px solid; font-size: 12px; width:100%; border-collapse: collapse;">
|
||||
<tr style="font-weight:bold;">
|
||||
<td>Name</td>
|
||||
<td>Description</td>
|
||||
<td>Categories</td>
|
||||
<td>Type</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hamlet - Full Script</td>
|
||||
<td>Full text of Hamlet the famous Shakespearean play.</td>
|
||||
<td>Shakespere, Hamlet, Drama</td>
|
||||
<td>PDF Document</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
18
itf/urls.py
18
itf/urls.py
|
@ -18,29 +18,29 @@ urlpatterns = patterns('',
|
|||
# (r'^bhangar/', include('bhangar.foo.urls')),
|
||||
#(r'^search/', include('solango.urls')),
|
||||
(r'^$', "frontpage.views.index"),
|
||||
(r'^t/$', "frontpage.views.index"),
|
||||
# (r'^t/$', "frontpage.views.index"),
|
||||
(r'm/', include('insidepages.urls')),
|
||||
(r'^page/(?P<slug>[a-zA-Z].*?)/', 'pages.views.render_page'),
|
||||
(r'^contact/$', 'frontpage.views.contact'),
|
||||
(r'^emailer/issue/(?P<issue_no>\d+)/$', 'emailer.views.show_emailer'),
|
||||
# ('m/(?P<module_slug>.*)', 'insidepages.views.main'),
|
||||
(r'^comments/', include('django.contrib.comments.urls')),
|
||||
(r'^ckeditor/', include('ckeditor.urls')),
|
||||
# (r'^ckeditor/', include('ckeditor.urls')),
|
||||
(r'^robots.txt$', direct_to_template, {'template': 'robots.txt', 'mimetype': 'text/plain'}),
|
||||
(r'^erang/', include('erang_organised.urls')),
|
||||
(r'api/', 'api.views.api'),
|
||||
(r'jsdoc/', 'api.views.jsdoc'),
|
||||
(r'site.json', 'app.views.site_json'),
|
||||
# (r'^erang/', include('erang_organised.urls')),
|
||||
# (r'api/', 'api.views.api'),
|
||||
# (r'jsdoc/', 'api.views.jsdoc'),
|
||||
# (r'site.json', 'app.views.site_json'),
|
||||
(r'^itf/', include('festival.urls')),
|
||||
# (r'^accounts/register/', 'registration.views.register', {'form_class': ItfRegistrationForm }),
|
||||
(r'^accounts/', include('registration.urls')),
|
||||
(r'^admin/', include(admin.site.urls)),
|
||||
('^getLanguages', 'itfcore.views.getLanguages'),
|
||||
# ('^getLanguages', 'itfcore.views.getLanguages'),
|
||||
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
|
||||
# to INSTALLED_APPS to enable admin documentation:
|
||||
#Core views:
|
||||
(r'test_profile', 'itfprofiles.views.person_form'),
|
||||
(r'i/', include('itfcore.urls')),
|
||||
# (r'i/', include('itfcore.urls')),
|
||||
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
(r'^search/', include('haystack.urls')),
|
||||
(r'^markitup/', include('markitup.urls')),
|
||||
|
@ -51,7 +51,7 @@ urlpatterns = patterns('',
|
|||
|
||||
# (r'^ajax_filtered_fields/', include('ajax_filtered_fields.urls')),
|
||||
# Uncomment the next line to enable the admin:
|
||||
(r'^test$', 'app.views.index'),
|
||||
# (r'^test$', 'app.views.index'),
|
||||
# (r'^$', 'festival.views.home')
|
||||
)
|
||||
|
||||
|
|
|
@ -1,110 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from datetime import datetime
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.db.models import Max
|
||||
|
||||
from ox.django.fields import DictField
|
||||
|
||||
#from app.models import site_config
|
||||
site_config = {
|
||||
'user': {
|
||||
'ui': {}
|
||||
}
|
||||
}
|
||||
# from itemlist.models import List, Position
|
||||
|
||||
|
||||
class UserProfile(models.Model):
|
||||
reset_token = models.TextField(blank=True, null=True)
|
||||
user = models.ForeignKey(User, unique=True)
|
||||
# validate_token = models.TextField(blank=True, null=True)
|
||||
# is_validated = models.BooleanField(default=False)
|
||||
files_updated = models.DateTimeField(default=datetime.now)
|
||||
newsletter = models.BooleanField(default=True)
|
||||
ui = DictField(default={})
|
||||
preferences = DictField(default={})
|
||||
|
||||
def get_preferences(self):
|
||||
prefs = self.preferences
|
||||
prefs['email'] = self.user.email
|
||||
return prefs
|
||||
|
||||
def get_ui(self):
|
||||
ui = {}
|
||||
config = site_config()
|
||||
ui.update(config['user']['ui'])
|
||||
def updateUI(ui, new):
|
||||
'''
|
||||
only update set keys in dicts
|
||||
'''
|
||||
for key in new:
|
||||
if isinstance(new[key], dict) and key in ui:
|
||||
ui[key] = updateUI(ui[key], new[key])
|
||||
else:
|
||||
ui[key] = new[key]
|
||||
return ui
|
||||
ui = updateUI(ui, self.ui)
|
||||
if not 'lists' in ui:
|
||||
ui['lists'] = {}
|
||||
ui['lists'][''] = config['uiDefaults']['list']
|
||||
|
||||
def add(lists, section):
|
||||
ids = []
|
||||
for l in lists:
|
||||
qs = Position.objects.filter(section=section)
|
||||
if section == 'featured':
|
||||
try:
|
||||
pos = Position.objects.get(list=l, section=section)
|
||||
created = False
|
||||
except Position.DoesNotExist:
|
||||
pos = Position(list=l, section=section, user=self.user)
|
||||
pos.save()
|
||||
created = True
|
||||
else:
|
||||
pos, created = Position.objects.get_or_create(list=l, user=self.user, section=section)
|
||||
qs = qs.filter(user=self.user)
|
||||
if created:
|
||||
pos.position = qs.aggregate(Max('position'))['position__max'] + 1
|
||||
pos.save()
|
||||
id = l.get_id()
|
||||
'''
|
||||
if id not in ui['lists']:
|
||||
ui['lists'][id] = {}
|
||||
ui['lists'][id].update(ui['lists'][''])
|
||||
'''
|
||||
ids.append(id)
|
||||
return ids
|
||||
|
||||
ids = ['']
|
||||
ids += add(self.user.lists.exclude(status="featured"), 'personal')
|
||||
ids += add(self.user.subscribed_lists.filter(status='public'), 'public')
|
||||
ids += add(List.objects.filter(status='featured'), 'featured')
|
||||
for i in ui['lists'].keys():
|
||||
if i not in ids:
|
||||
del ui['lists'][i]
|
||||
return ui
|
||||
|
||||
def user_post_save(sender, instance, **kwargs):
|
||||
profile, new = UserProfile.objects.get_or_create(user=instance)
|
||||
|
||||
models.signals.post_save.connect(user_post_save, sender=User)
|
||||
|
||||
|
||||
def get_user_json(user):
|
||||
# profile = user.get_profile()
|
||||
result = {}
|
||||
for key in ('username', ):
|
||||
result[key] = getattr(user, key)
|
||||
if user.is_superuser:
|
||||
result['level'] = 'admin'
|
||||
elif user.is_staff:
|
||||
result['level'] = 'staff'
|
||||
else:
|
||||
result['level'] = 'member'
|
||||
result['groups'] = [g.name for g in user.groups.all()]
|
||||
# result['preferences'] = profile.get_preferences()
|
||||
# result['ui'] = profile.get_ui()
|
||||
return result
|
|
@ -1,4 +0,0 @@
|
|||
Hi {{sitename}} admin,
|
||||
|
||||
someone sent you a message:
|
||||
{{message}}
|
|
@ -1,7 +0,0 @@
|
|||
To reset your password, please use the following token:
|
||||
|
||||
{{token}}
|
||||
|
||||
If you do not want to reset your password, no further action is required.
|
||||
|
||||
{{sitename}} - {{url}}
|
|
@ -1,23 +0,0 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
|
||||
urlpatterns = patterns("user.views",
|
||||
(r'^preferences', 'preferences'),
|
||||
(r'^login', 'login'),
|
||||
(r'^logout', 'logout'),
|
||||
(r'^register', 'register'),
|
||||
)
|
||||
|
|
@ -1,478 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import random
|
||||
random.seed()
|
||||
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.template import RequestContext, loader
|
||||
from django.utils import simplejson as json
|
||||
from django.conf import settings
|
||||
from django.core.mail import send_mail, BadHeaderError
|
||||
|
||||
from ox.django.shortcuts import render_to_json_response, json_response
|
||||
from ox.django.decorators import login_required_json
|
||||
import ox
|
||||
|
||||
import models
|
||||
|
||||
from api.actions import actions
|
||||
from app.models import site_config
|
||||
from django.db.models import Q
|
||||
|
||||
# from item.models import Access, Item
|
||||
|
||||
|
||||
class LoginForm(forms.Form):
|
||||
usernameOrEmail = forms.TextInput()
|
||||
password = forms.TextInput()
|
||||
|
||||
|
||||
def signin(request):
|
||||
'''
|
||||
param data {
|
||||
username: 'username',
|
||||
password: 'password'
|
||||
}
|
||||
|
||||
return {
|
||||
status: {'code': 200, 'text': 'ok'}
|
||||
data: {
|
||||
errors: {
|
||||
username: 'Unknown Username',
|
||||
password: 'Incorrect Password'
|
||||
}
|
||||
user: {
|
||||
...
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
form = LoginForm(data, request.FILES)
|
||||
if form.is_valid():
|
||||
typ = data['usernameOrEmail'][0]['id']
|
||||
val = data['usernameOrEmail'][1]
|
||||
qstring = typ + "__iexact"
|
||||
q = Q(**{qstring:val})
|
||||
if models.User.objects.filter(q).count == 0:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'username': 'Unknown Username or E-Mail address'
|
||||
}
|
||||
})
|
||||
else:
|
||||
if typ == 'email':
|
||||
uname = models.User.objects.get(email=val).username
|
||||
else:
|
||||
uname = val
|
||||
|
||||
user = authenticate(username=uname, password=data['password'])
|
||||
if user is not None:
|
||||
if user.is_active:
|
||||
login(request, user)
|
||||
user_json = models.get_user_json(user)
|
||||
response = json_response({
|
||||
'user': user_json
|
||||
})
|
||||
else:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'username': 'User Disabled'
|
||||
}
|
||||
})
|
||||
else:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'password': 'Incorrect Password'
|
||||
}
|
||||
})
|
||||
else:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
return render_to_json_response(response)
|
||||
actions.register(signin, "login", cache=False)
|
||||
|
||||
|
||||
def signout(request):
|
||||
'''
|
||||
param data {
|
||||
}
|
||||
|
||||
return {
|
||||
status: {'code': int, 'text': string}
|
||||
data: {
|
||||
user: {
|
||||
default user
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
response = json_response(text='ok')
|
||||
if request.user.is_authenticated():
|
||||
response = json_response(text='logged out')
|
||||
logout(request)
|
||||
|
||||
# response['data']['user'] = site_config()['user']
|
||||
response['data']['user'] = {}
|
||||
return render_to_json_response(response)
|
||||
actions.register(signout, "logout", cache=False)
|
||||
|
||||
|
||||
class RegisterForm(forms.Form):
|
||||
username = forms.TextInput()
|
||||
password = forms.TextInput()
|
||||
email = forms.TextInput()
|
||||
|
||||
|
||||
def register(request):
|
||||
'''
|
||||
param data {
|
||||
username: 'username',
|
||||
password: 'password',
|
||||
email: 'emailaddress'
|
||||
}
|
||||
|
||||
return {
|
||||
status: {'code': int, 'text': string}
|
||||
data: {
|
||||
errors: {
|
||||
username: 'Unknown Username',
|
||||
password: 'Incorrect Password'
|
||||
}
|
||||
user: {
|
||||
...
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
form = RegisterForm(data, request.FILES)
|
||||
if form.is_valid():
|
||||
if models.User.objects.filter(username=form.data['username']).count() > 0:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'username': 'Username already exists'
|
||||
}
|
||||
})
|
||||
elif models.User.objects.filter(email=form.data['email']).count() > 0:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'email': 'Email address already exits'
|
||||
}
|
||||
})
|
||||
elif not form.data['password']:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'password': 'Password can not be empty'
|
||||
}
|
||||
})
|
||||
else:
|
||||
first_user = models.User.objects.count() == 0
|
||||
user = models.User(username=form.data['username'], email=form.data['email'])
|
||||
user.set_password(form.data['password'])
|
||||
#make first user admin
|
||||
user.is_superuser = first_user
|
||||
user.is_staff = first_user
|
||||
user.save()
|
||||
#create default user lists:
|
||||
'''
|
||||
for l in settings.DEFAULT_BOXES:
|
||||
list = models.List(name=l['name'], user=user)
|
||||
for key in ('query', 'public', 'featured'):
|
||||
if key in l:
|
||||
setattr(list, key, l[key])
|
||||
list.save()
|
||||
'''
|
||||
user = authenticate(username=form.data['username'],
|
||||
password=form.data['password'])
|
||||
login(request, user)
|
||||
user_json = models.get_user_json(user)
|
||||
response = json_response({
|
||||
'user': user_json
|
||||
}, text='account created')
|
||||
else:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
return render_to_json_response(response)
|
||||
actions.register(register, cache=False)
|
||||
|
||||
|
||||
def resetPassword(request):
|
||||
'''
|
||||
param data {
|
||||
token: reset token
|
||||
password: new password
|
||||
}
|
||||
|
||||
return {
|
||||
status: {'code': int, 'text': string}
|
||||
data: {
|
||||
errors: {
|
||||
token: 'Invalid token'
|
||||
}
|
||||
user {
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
if 'token' in data and 'password' in data:
|
||||
if not data['password']:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'password': 'Password can not be empty'
|
||||
}
|
||||
})
|
||||
else:
|
||||
qs = models.UserProfile.objects.filter(reset_token=data['token'])
|
||||
if qs.count() == 1:
|
||||
user = qs[0].user
|
||||
user.set_password(data['password'])
|
||||
user.save()
|
||||
user_profile = user.get_profile()
|
||||
user_profile.reset_token = None
|
||||
user_profile.save()
|
||||
user = authenticate(username=user.username, password=data['password'])
|
||||
login(request, user)
|
||||
|
||||
user_json = models.get_user_json(user)
|
||||
response = json_response({
|
||||
'user': user_json
|
||||
}, text='password reset')
|
||||
else:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
'token': 'Invalid token'
|
||||
}
|
||||
})
|
||||
|
||||
else:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
return render_to_json_response(response)
|
||||
actions.register(resetPassword, cache=False)
|
||||
|
||||
|
||||
def requestToken(request):
|
||||
'''
|
||||
param data {
|
||||
username: username,
|
||||
email: email
|
||||
}
|
||||
|
||||
return {
|
||||
status: {'code': int, 'text': string}
|
||||
data: {
|
||||
errors: {
|
||||
username: 'Unknown Username'
|
||||
email: 'Unknown Email'
|
||||
}
|
||||
username: user
|
||||
}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
user = None
|
||||
if 'username' in data:
|
||||
try:
|
||||
user = models.User.objects.get(username=data['username'])
|
||||
except models.User.DoesNotExist:
|
||||
user = None
|
||||
elif 'email' in data:
|
||||
try:
|
||||
user = models.User.objects.get(email=data['email'])
|
||||
except models.User.DoesNotExist:
|
||||
user = None
|
||||
if user:
|
||||
while True:
|
||||
token = ox.to32(random.randint(32768, 1048575))
|
||||
if models.UserProfile.objects.filter(reset_token=token).count() == 0:
|
||||
break
|
||||
user_profile = user.get_profile()
|
||||
user_profile.reset_token = token
|
||||
user_profile.save()
|
||||
|
||||
template = loader.get_template('password_reset_email.txt')
|
||||
context = RequestContext(request, {
|
||||
'url': request.build_absolute_uri("/"),
|
||||
'token': token,
|
||||
'sitename': settings.SITENAME,
|
||||
})
|
||||
message = template.render(context)
|
||||
subject = '%s - Reset Password' % settings.SITENAME
|
||||
user.email_user(subject, message)
|
||||
response = json_response({
|
||||
'username': user.username
|
||||
}, text='password reset email sent')
|
||||
else:
|
||||
response = json_response({
|
||||
'errors': {
|
||||
}
|
||||
})
|
||||
if 'username' in data:
|
||||
response['data']['errors']['username'] = 'Unknown Username'
|
||||
elif 'email' in data:
|
||||
response['data']['errors']['email'] = 'Unknown Email'
|
||||
else:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
return render_to_json_response(response)
|
||||
actions.register(requestToken, cache=False)
|
||||
|
||||
|
||||
def findUser(request):
|
||||
'''
|
||||
param data {
|
||||
key: "username",
|
||||
value: "foo", operator: "="
|
||||
}
|
||||
|
||||
return {
|
||||
'status': {'code': int, 'text': string}
|
||||
'data': {
|
||||
users = ['user1', 'user2']
|
||||
}
|
||||
}
|
||||
'''
|
||||
#FIXME: support other operators and keys
|
||||
data = json.loads(request.POST['data'])
|
||||
response = json_response(status=200, text='ok')
|
||||
if data['key'] == 'email':
|
||||
response['data']['users'] = [u.username for u in User.objects.filter(email__iexact=data['value'])]
|
||||
else:
|
||||
response['data']['users'] = [u.username for u in User.objects.filter(username__iexact=data['value'])]
|
||||
return render_to_json_response(response)
|
||||
actions.register(findUser)
|
||||
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
email = forms.EmailField()
|
||||
subject = forms.TextInput()
|
||||
message = forms.TextInput()
|
||||
|
||||
|
||||
def contact(request):
|
||||
'''
|
||||
param data {
|
||||
'email': string,
|
||||
'message': string
|
||||
}
|
||||
|
||||
return {
|
||||
'status': {'code': int, 'text': string}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
form = ContactForm(data, request.FILES)
|
||||
if form.is_valid():
|
||||
email = data['email']
|
||||
template = loader.get_template('contact_email.txt')
|
||||
context = RequestContext(request, {
|
||||
'sitename': settings.SITENAME,
|
||||
'email': email,
|
||||
'message': data['message'],
|
||||
})
|
||||
message = template.render(context)
|
||||
subject = '%s contact: %s' % (settings.SITENAME, data['subject'])
|
||||
response = json_response(text='message sent')
|
||||
try:
|
||||
send_mail(subject, message, email, [settings.DEFAULT_FROM_EMAIL, ])
|
||||
except BadHeaderError:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
else:
|
||||
response = json_response(status=400, text='invalid data')
|
||||
return render_to_json_response(response)
|
||||
actions.register(contact, cache=False)
|
||||
|
||||
|
||||
def getPositionById(list, key):
|
||||
for i in range(0, len(list)):
|
||||
if list[i]['id'] == key:
|
||||
return i
|
||||
return -1
|
||||
|
||||
|
||||
@login_required_json
|
||||
def setPreferences(request):
|
||||
'''
|
||||
param data {
|
||||
key.subkey: value
|
||||
}
|
||||
return
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
keys = data.keys()[0].split('.')
|
||||
value = data.values()[0]
|
||||
profile = request.user.get_profile()
|
||||
p = profile.preferences
|
||||
while len(keys)>1:
|
||||
key = keys.pop(0)
|
||||
if isinstance(p, list):
|
||||
p = p[getPositionById(p, key)]
|
||||
else:
|
||||
p = p[key]
|
||||
p[keys[0]] = value
|
||||
profile.save()
|
||||
response = json_response()
|
||||
return render_to_json_response(response)
|
||||
actions.register(setPreferences, cache=False)
|
||||
|
||||
|
||||
@login_required_json
|
||||
def resetUI(request):
|
||||
'''
|
||||
reset user ui settings to defaults
|
||||
param data {
|
||||
}
|
||||
|
||||
return {
|
||||
'status': {'code': int, 'text': string}
|
||||
}
|
||||
'''
|
||||
profile = request.user.get_profile()
|
||||
profile.ui = {}
|
||||
profile.save()
|
||||
response = json_response()
|
||||
return render_to_json_response(response)
|
||||
actions.register(resetUI, cache=False)
|
||||
|
||||
def setUI(request):
|
||||
'''
|
||||
param data {
|
||||
key.subkey: value
|
||||
}
|
||||
you can set nested keys
|
||||
api.setUI({"lists|my|ListView": "icons"})
|
||||
|
||||
return {
|
||||
'status': {'code': int, 'text': string}
|
||||
}
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
if request.user.is_authenticated():
|
||||
for key in data:
|
||||
keys = key.split('|')
|
||||
value = data[key]
|
||||
profile = request.user.get_profile()
|
||||
p = profile.ui
|
||||
while len(keys)>1:
|
||||
key = keys.pop(0)
|
||||
if isinstance(p, list):
|
||||
p = p[getPositionById(p, key)]
|
||||
else:
|
||||
if key not in p:
|
||||
p[key] = {}
|
||||
p = p[key]
|
||||
p[keys[0]] = value
|
||||
profile.save()
|
||||
|
||||
if data.get('item', False):
|
||||
item = Item.objects.get(itemId=data['item'])
|
||||
if request.user.is_authenticated():
|
||||
access, created = Access.objects.get_or_create(item=item, user=request.user)
|
||||
else:
|
||||
access, created = Access.objects.get_or_create(item=item, user=None)
|
||||
access.save()
|
||||
|
||||
response = json_response()
|
||||
return render_to_json_response(response)
|
||||
actions.register(setUI, cache=False)
|
||||
|
Loading…
Reference in New Issue
Block a user