first app for merge, sreq
- Legacy-Id: 5173
8
ietf/secr/__init__.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
__version__ = "1.33"
|
||||
|
||||
__date__ = "$Date: 2011/07/26 14:29:17 $"
|
||||
|
||||
__rev__ = "$Rev: 3113 $"
|
||||
|
||||
__id__ = "$Id: __init__.py,v 1.5 2011/07/26 14:29:17 rcross Exp $"
|
||||
|
10
ietf/secr/context_processors.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf import settings
|
||||
from ietf.secr import __date__, __rev__, __version__, __id__
|
||||
|
||||
def server_mode(request):
|
||||
return {'server_mode': settings.SERVER_MODE}
|
||||
|
||||
def secr_revision_info(request):
|
||||
return {'secr_revision_time': __date__[7:32], 'secr_revision_date': __date__[7:17], 'secr_revision_num': __rev__[6:-2], "secr_revision_id": __id__[5:-2], "secr_version_num": __version__ }
|
0
ietf/secr/middleware/__init__.py
Normal file
51
ietf/secr/middleware/secauth.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
from django.conf import settings
|
||||
from django.http import HttpResponseForbidden
|
||||
from django.shortcuts import render_to_response
|
||||
|
||||
from ietf.ietfauth.decorators import has_role
|
||||
|
||||
import re
|
||||
|
||||
class SecAuthMiddleware(object):
|
||||
"""
|
||||
Middleware component that performs custom auth check for every
|
||||
request except those excluded by SEC_AUTH_UNRESTRICTED_URLS.
|
||||
|
||||
Since authentication is performed externally at the apache level
|
||||
REMOTE_USER should contain the name of the authenticated
|
||||
user. If the user is a secretariat than access is granted.
|
||||
Otherwise return a 401 error page.
|
||||
|
||||
To use, add the class to MIDDLEWARE_CLASSES and define
|
||||
SEC_AUTH_UNRESTRCITED_URLS in your settings.py.
|
||||
|
||||
The following example allows access to anything under "/interim/"
|
||||
to non-secretariat users:
|
||||
|
||||
SEC_AUTH_UNRESTRCITED_URLS = (
|
||||
(r'^/interim/'),
|
||||
|
||||
Also sets custom request attributes:
|
||||
user_is_secretariat
|
||||
user_is_chair
|
||||
user_is_ad
|
||||
)
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.unrestricted = [re.compile(pattern) for pattern in
|
||||
settings.SEC_AUTH_UNRESTRICTED_URLS]
|
||||
|
||||
def process_view(self, request, view_func, view_args, view_kwargs):
|
||||
# need to initialize user, it doesn't get set when running tests for example
|
||||
user = ''
|
||||
request.user_is_secretariat = False
|
||||
|
||||
if 'REMOTE_USER' in request.META:
|
||||
# do custom auth
|
||||
if has_role(request.user,'Secretariat'):
|
||||
request.user_is_secretariat = True
|
||||
|
||||
return None
|
||||
|
0
ietf/secr/sreq/__init__.py
Normal file
133
ietf/secr/sreq/forms.py
Normal file
|
@ -0,0 +1,133 @@
|
|||
from django import forms
|
||||
|
||||
from ietf.group.models import Group
|
||||
import os
|
||||
|
||||
# -------------------------------------------------
|
||||
# Globals
|
||||
# -------------------------------------------------
|
||||
|
||||
NUM_SESSION_CHOICES = (('','--Please select'),('1','1'),('2','2'))
|
||||
LENGTH_SESSION_CHOICES = (('','--Please select'),('1800','30 minutes'),('3600','1 hour'),('5400','1.5 hours'), ('7200','2 hours'),('9000','2.5 hours'))
|
||||
WG_CHOICES = list( Group.objects.filter(type__in=('wg','rg','ag'),state__in=('bof','proposed','active')).values_list('acronym','acronym').order_by('acronym'))
|
||||
WG_CHOICES.insert(0,('','--Select WG(s)'))
|
||||
|
||||
# -------------------------------------------------
|
||||
# Helper Functions
|
||||
# -------------------------------------------------
|
||||
def check_conflict(groups):
|
||||
'''
|
||||
Takes a string which is a list of group acronyms. Checks that they are all active groups
|
||||
'''
|
||||
# convert to python list (allow space or comma separated lists)
|
||||
items = groups.replace(',',' ').split()
|
||||
active_groups = Group.objects.filter(type__in=('wg','ag','rg'), state__in=('bof','proposed','active'))
|
||||
for group in items:
|
||||
if not active_groups.filter(acronym=group):
|
||||
raise forms.ValidationError("Invalid or inactive group acronym: %s" % group)
|
||||
|
||||
def join_conflicts(data):
|
||||
'''
|
||||
Takes a dictionary (ie. data dict from a form) and concatenates all
|
||||
conflict fields into one list
|
||||
'''
|
||||
conflicts = []
|
||||
for groups in (data['conflict1'],data['conflict2'],data['conflict3']):
|
||||
# convert to python list (allow space or comma separated lists)
|
||||
items = groups.replace(',',' ').split()
|
||||
conflicts.extend(items)
|
||||
return conflicts
|
||||
|
||||
# -------------------------------------------------
|
||||
# Forms
|
||||
# -------------------------------------------------
|
||||
|
||||
class GroupSelectForm(forms.Form):
|
||||
group = forms.ChoiceField()
|
||||
|
||||
def __init__(self,*args,**kwargs):
|
||||
choices = kwargs.pop('choices')
|
||||
super(GroupSelectForm, self).__init__(*args,**kwargs)
|
||||
self.fields['group'].widget.choices = choices
|
||||
|
||||
|
||||
class SessionForm(forms.Form):
|
||||
num_session = forms.ChoiceField(choices=NUM_SESSION_CHOICES)
|
||||
length_session1 = forms.ChoiceField(choices=LENGTH_SESSION_CHOICES)
|
||||
length_session2 = forms.ChoiceField(choices=LENGTH_SESSION_CHOICES,required=False)
|
||||
length_session3 = forms.ChoiceField(choices=LENGTH_SESSION_CHOICES,required=False)
|
||||
attendees = forms.IntegerField()
|
||||
conflict1 = forms.CharField(max_length=255,required=False)
|
||||
conflict2 = forms.CharField(max_length=255,required=False)
|
||||
conflict3 = forms.CharField(max_length=255,required=False)
|
||||
comments = forms.CharField(max_length=200,required=False)
|
||||
wg_selector1 = forms.ChoiceField(choices=WG_CHOICES,required=False)
|
||||
wg_selector2 = forms.ChoiceField(choices=WG_CHOICES,required=False)
|
||||
wg_selector3 = forms.ChoiceField(choices=WG_CHOICES,required=False)
|
||||
third_session = forms.BooleanField(required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SessionForm, self).__init__(*args, **kwargs)
|
||||
self.fields['num_session'].widget.attrs['onChange'] = "stat_ls(this.selectedIndex);"
|
||||
self.fields['length_session1'].widget.attrs['onClick'] = "if (check_num_session(1)) this.disabled=true;"
|
||||
self.fields['length_session2'].widget.attrs['onClick'] = "if (check_num_session(2)) this.disabled=true;"
|
||||
self.fields['length_session3'].widget.attrs['onClick'] = "if (check_third_session()) { this.disabled=true;}"
|
||||
self.fields['comments'].widget = forms.Textarea(attrs={'rows':'6','cols':'65'})
|
||||
self.fields['wg_selector1'].widget.attrs['onChange'] = "document.form_post.conflict1.value=document.form_post.conflict1.value + ' ' + this.options[this.selectedIndex].value; return handleconflictfield(1);"
|
||||
self.fields['wg_selector2'].widget.attrs['onChange'] = "document.form_post.conflict2.value=document.form_post.conflict2.value + ' ' + this.options[this.selectedIndex].value; return handleconflictfield(2);"
|
||||
self.fields['wg_selector2'].widget.attrs['onClick'] = "return check_prior_conflict(2);"
|
||||
self.fields['wg_selector3'].widget.attrs['onChange'] = "document.form_post.conflict3.value=document.form_post.conflict3.value + ' ' + this.options[this.selectedIndex].value; return handleconflictfield(3);"
|
||||
self.fields['wg_selector3'].widget.attrs['onClick'] = "return check_prior_conflict(3);"
|
||||
self.fields['third_session'].widget.attrs['onClick'] = "if (document.form_post.num_session.selectedIndex < 2) { alert('Cannot use this field - Number of Session is not set to 2'); return false; } else { if (this.checked==true) { document.form_post.length_session3.disabled=false; } else { document.form_post.length_session3.value=0;document.form_post.length_session3.disabled=true; } }"
|
||||
|
||||
# check third_session checkbox if instance and length_session3
|
||||
# assert False, (self.instance, self.fields['length_session3'].initial)
|
||||
if self.initial and 'length_session3' in self.initial:
|
||||
if self.initial['length_session3'] != '0' and self.initial['length_session3'] != None:
|
||||
self.fields['third_session'].initial = True
|
||||
|
||||
def clean_conflict1(self):
|
||||
conflict = self.cleaned_data['conflict1']
|
||||
check_conflict(conflict)
|
||||
return conflict
|
||||
|
||||
def clean_conflict2(self):
|
||||
conflict = self.cleaned_data['conflict2']
|
||||
check_conflict(conflict)
|
||||
return conflict
|
||||
|
||||
def clean_conflict3(self):
|
||||
conflict = self.cleaned_data['conflict3']
|
||||
check_conflict(conflict)
|
||||
return conflict
|
||||
|
||||
def clean(self):
|
||||
super(SessionForm, self).clean()
|
||||
data = self.cleaned_data
|
||||
if self.errors:
|
||||
return self.cleaned_data
|
||||
|
||||
# error if conflits contain dupes
|
||||
all_conflicts = join_conflicts(data)
|
||||
temp = []
|
||||
for c in all_conflicts:
|
||||
if c not in temp:
|
||||
temp.append(c)
|
||||
else:
|
||||
raise forms.ValidationError('%s appears in conflicts more than once' % c)
|
||||
|
||||
# verify session_length and num_session correspond
|
||||
# if default (empty) option is selected, cleaned_data won't include num_session key
|
||||
if data.get('num_session','') == 2:
|
||||
if not data['length_session2']:
|
||||
raise forms.ValidationError('You must enter a length for session 2')
|
||||
|
||||
if data.get('third_session',False):
|
||||
if not data.get('length_session3',None):
|
||||
raise forms.ValidationError('Length of third session not selected')
|
||||
|
||||
return data
|
||||
|
||||
class ToolStatusForm(forms.Form):
|
||||
message = forms.CharField(widget=forms.Textarea(attrs={'rows':'3','cols':'80'}))
|
||||
|
1
ietf/secr/sreq/models.py
Normal file
|
@ -0,0 +1 @@
|
|||
from django.db import models
|
0
ietf/secr/sreq/templatetags/__init__.py
Normal file
82
ietf/secr/sreq/tests.py
Normal file
|
@ -0,0 +1,82 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from ietf.group.models import Group
|
||||
from ietf.ietfauth.decorators import has_role
|
||||
|
||||
from pyquery import PyQuery
|
||||
|
||||
SEC_USER='rcross'
|
||||
WG_USER=''
|
||||
AD_USER=''
|
||||
|
||||
class MainTestCase(TestCase):
|
||||
fixtures = ['names',
|
||||
'test-meeting',
|
||||
'test-group',
|
||||
'test-person',
|
||||
'test-user',
|
||||
'test-email',
|
||||
'test-role']
|
||||
|
||||
# ------- Test View -------- #
|
||||
def test_main(self):
|
||||
url = reverse('sessions')
|
||||
r = self.client.get(url,REMOTE_USER=SEC_USER)
|
||||
self.assertEquals(r.status_code, 200)
|
||||
#assert False, (r.context)
|
||||
sched = r.context['scheduled_groups']
|
||||
unsched = r.context['unscheduled_groups']
|
||||
self.failUnless(len(sched) == 0)
|
||||
self.failUnless(len(unsched) == 5)
|
||||
#ancp = Group.objects.get(acronym='ancp')
|
||||
paws = Group.objects.get(acronym='paws')
|
||||
#self.failUnless(ancp in sched)
|
||||
self.failUnless(paws in unsched)
|
||||
#assert False, r.content
|
||||
#user = User.objects.get(username='rcross')
|
||||
#self.failUnless(has_role(user,'Secretariat'))
|
||||
|
||||
class SubmitRequestCase(TestCase):
|
||||
fixtures = ['names',
|
||||
'test-meeting',
|
||||
'test-group',
|
||||
'test-person',
|
||||
'test-user',
|
||||
'test-email',
|
||||
'test-role']
|
||||
|
||||
def test_submit_request(self):
|
||||
url = reverse('sessions_new',kwargs={'acronym':'ancp'})
|
||||
post_data = {'id_num_session':'1',
|
||||
'id_length_session1':'3600',
|
||||
'id_attendees':'10',
|
||||
'id_conflict1':'core',
|
||||
'id_comments':'need projector'}
|
||||
self.client.login(remote_user='rcross')
|
||||
r = self.client.post(url,post_data)
|
||||
self.assertEquals(r.status_code, 200)
|
||||
#assert False, self.client.session..__dict__
|
||||
|
||||
url = reverse('sessions_confirm',kwargs={'acronym':'ancp'})
|
||||
#s = self.client.session
|
||||
#s['session_form'] = post_data
|
||||
r = self.client.get(url)
|
||||
assert False, r.content
|
||||
|
||||
class EditRequestCase(TestCase):
|
||||
pass
|
||||
|
||||
class NotMeetingCase(TestCase):
|
||||
pass
|
||||
|
||||
class RetrievePreviousCase(TestCase):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
# test error if already scheduled
|
||||
# test get previous exists/doesn't exist
|
||||
# test that groups scheduled and unscheduled add up to total groups
|
||||
# test locking function, access by unauthorized
|
13
ietf/secr/sreq/urls.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
from django.conf.urls.defaults import *
|
||||
|
||||
urlpatterns = patterns('sec.sreq.views',
|
||||
url(r'^$', 'main', name='sessions'),
|
||||
url(r'^status/$', 'tool_status', name='sessions_tool_status'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/$', 'view', name='sessions_view'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/approve/$', 'approve', name='sessions_approve'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/cancel/$', 'cancel', name='sessions_cancel'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/confirm/$', 'confirm', name='sessions_confirm'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/edit/$', 'edit', name='sessions_edit'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/new/$', 'new', name='sessions_new'),
|
||||
url(r'^(?P<acronym>[A-Za-z0-9_\-\+]+)/no_session/$', 'no_session', name='sessions_no_session'),
|
||||
)
|
669
ietf/secr/sreq/views.py
Normal file
|
@ -0,0 +1,669 @@
|
|||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db.models import Q
|
||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
||||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from django.template import RequestContext
|
||||
|
||||
from ietf.secr.utils.mail import get_ad_email_list, get_chair_email_list, get_cc_list
|
||||
from ietf.secr.utils.decorators import check_permissions, sec_only
|
||||
from ietf.secr.utils.group import get_my_groups, groups_by_session
|
||||
|
||||
from ietf.ietfauth.decorators import has_role
|
||||
from ietf.utils.mail import send_mail
|
||||
from ietf.meeting.models import Meeting, Session, Constraint
|
||||
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.name.models import SessionStatusName, ConstraintName
|
||||
|
||||
from forms import *
|
||||
|
||||
from itertools import chain
|
||||
import datetime
|
||||
import itertools
|
||||
|
||||
# -------------------------------------------------
|
||||
# Globals
|
||||
# -------------------------------------------------
|
||||
SESSION_REQUEST_EMAIL = 'session-request@ietf.org'
|
||||
LOCKFILE = os.path.join(settings.PROCEEDINGS_DIR,'session_request.lock')
|
||||
# -------------------------------------------------
|
||||
# Helper Functions
|
||||
# -------------------------------------------------
|
||||
|
||||
def check_app_locked():
|
||||
'''
|
||||
This function returns True if the application is locked to non-secretariat users.
|
||||
'''
|
||||
return os.path.exists(LOCKFILE)
|
||||
|
||||
def get_initial_session(sessions):
|
||||
'''
|
||||
This function takes a queryset of sessions ordered by 'id' for consistency. It returns
|
||||
a dictionary to be used as the initial for a legacy session form
|
||||
'''
|
||||
meeting = sessions[0].meeting
|
||||
group = sessions[0].group
|
||||
conflicts = group.constraint_source_set.filter(meeting=meeting)
|
||||
initial = {}
|
||||
# even if there are three sessions requested, the old form has 2 in this field
|
||||
initial['num_session'] = sessions.count() if sessions.count() <= 2 else 2
|
||||
|
||||
# accessing these foreign key fields throw errors if they are unset so we
|
||||
# need to catch these
|
||||
initial['length_session1'] = str(sessions[0].requested_duration.seconds)
|
||||
try:
|
||||
initial['length_session2'] = str(sessions[1].requested_duration.seconds)
|
||||
initial['length_session3'] = str(sessions[2].requested_duration.seconds)
|
||||
except IndexError:
|
||||
pass
|
||||
initial['attendees'] = sessions[0].attendees
|
||||
initial['conflict1'] = ' '.join([ c.target.acronym for c in conflicts.filter(name__slug='conflict') ])
|
||||
initial['conflict2'] = ' '.join([ c.target.acronym for c in conflicts.filter(name__slug='conflic2') ])
|
||||
initial['conflict3'] = ' '.join([ c.target.acronym for c in conflicts.filter(name__slug='conflic3') ])
|
||||
initial['comments'] = sessions[0].comments
|
||||
return initial
|
||||
|
||||
def get_lock_message():
|
||||
'''
|
||||
Returns the message to display to non-secretariat users when the tool is locked.
|
||||
'''
|
||||
try:
|
||||
f = open(LOCKFILE,'r')
|
||||
message = f.read()
|
||||
f.close()
|
||||
except IOError:
|
||||
message = "This application is currently locked."
|
||||
return message
|
||||
|
||||
def get_meeting():
|
||||
'''
|
||||
Function to get the current IETF regular meeting. Simply returns the meeting with the most recent date
|
||||
'''
|
||||
return Meeting.objects.filter(type='ietf').order_by('-date')[0]
|
||||
|
||||
def save_conflicts(group, meeting, conflicts, name):
|
||||
'''
|
||||
This function takes a Group, Meeting a string which is a list of Groups acronyms (conflicts),
|
||||
and the constraint name (conflict|conflic2|conflic3) and creates Constraint records
|
||||
'''
|
||||
constraint_name = ConstraintName.objects.get(slug=name)
|
||||
acronyms = conflicts.replace(',',' ').split()
|
||||
for acronym in acronyms:
|
||||
target = Group.objects.get(acronym=acronym)
|
||||
|
||||
constraint = Constraint(source=group,
|
||||
target=target,
|
||||
meeting=meeting,
|
||||
name=constraint_name)
|
||||
constraint.save()
|
||||
|
||||
def send_notification(group,meeting,login,session,action):
|
||||
'''
|
||||
This function generates email notifications for various session request activities.
|
||||
session argument is a dictionary of fields from the session request form
|
||||
action argument is a string [new|update].
|
||||
'''
|
||||
to_email = SESSION_REQUEST_EMAIL
|
||||
cc_list = get_cc_list(group, login)
|
||||
from_email = ('"IETF Meeting Session Request Tool"','session_request_developers@ietf.org')
|
||||
subject = '%s - New Meeting Session Request for IETF %s' % (group.acronym, meeting.number)
|
||||
template = 'sreq/session_request_notification.txt'
|
||||
|
||||
# send email
|
||||
context = {}
|
||||
context['session'] = session
|
||||
context['group'] = group
|
||||
context['meeting'] = meeting
|
||||
context['login'] = login
|
||||
context['header'] = 'A new'
|
||||
|
||||
# update overrides
|
||||
if action == 'update':
|
||||
subject = '%s - Update to a Meeting Session Request for IETF %s' % (group.acronym, meeting.number)
|
||||
context['header'] = 'An update to a'
|
||||
|
||||
# if third session requested approval is required
|
||||
# change headers TO=ADs, CC=session-request, submitter and cochairs
|
||||
if session.get('length_session3',None):
|
||||
context['session']['num_session'] = 3
|
||||
to_email = get_ad_email_list(group)
|
||||
cc_list = get_chair_email_list(group)
|
||||
cc_list.append(SESSION_REQUEST_EMAIL)
|
||||
if login.role_email(role_name='wg').address not in cc_list:
|
||||
cc_list.append(login.role_email(role_name='wg').address)
|
||||
subject = '%s - Request for meeting session approval for IETF %s' % (group.acronym, meeting.number)
|
||||
template = 'sreq/session_approval_notification.txt'
|
||||
status_text = 'the %s Directors for approval' % group.parent
|
||||
send_mail(None,
|
||||
to_email,
|
||||
from_email,
|
||||
subject,
|
||||
template,
|
||||
context,
|
||||
cc=cc_list)
|
||||
|
||||
def session_conflicts_as_string(group, meeting):
|
||||
'''
|
||||
Takes a Group object and Meeting object and returns a string of other groups which have
|
||||
a conflict with this one
|
||||
'''
|
||||
group_list = [ g.source.acronym for g in group.constraint_target_set.filter(meeting=meeting) ]
|
||||
return ', '.join(group_list)
|
||||
|
||||
# -------------------------------------------------
|
||||
# View Functions
|
||||
# -------------------------------------------------
|
||||
@check_permissions
|
||||
def approve(request, acronym):
|
||||
'''
|
||||
This view approves the third session. For use by ADs or Secretariat.
|
||||
'''
|
||||
meeting = get_meeting()
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
session = Session.objects.get(meeting=meeting,group=group,status='apprw')
|
||||
|
||||
if has_role(request.user,'Secretariat') or group.parent.role_set.filter(name='ad',person=request.user.get_profile()):
|
||||
session.status = SessionStatusName.objects.get(slug='appr')
|
||||
session.save()
|
||||
|
||||
messages.success(request, 'Third session approved')
|
||||
url = reverse('sessions_view', kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
# if an unauthorized user gets here return error
|
||||
messages.error(request, 'Not authorized to approve the third session')
|
||||
url = reverse('sessions_view', kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@check_permissions
|
||||
def cancel(request, acronym):
|
||||
'''
|
||||
This view cancels a session request and sends a notification.
|
||||
To cancel, or withdraw the request set status = deleted.
|
||||
"canceled" status is used by the secretariat.
|
||||
|
||||
NOTE: this function can also be called after a session has been
|
||||
scheduled during the period when the session request tool is
|
||||
reopened. In this case be sure to clear the timeslot assignment as well.
|
||||
'''
|
||||
meeting = get_meeting()
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
sessions = Session.objects.filter(meeting=meeting,group=group).order_by('id')
|
||||
login = request.user.get_profile()
|
||||
|
||||
# delete conflicts
|
||||
Constraint.objects.filter(meeting=meeting,source=group).delete()
|
||||
|
||||
# mark sessions as deleted
|
||||
for session in sessions:
|
||||
session.status_id = 'deleted'
|
||||
session.save()
|
||||
|
||||
# clear timeslot assignment if already scheduled
|
||||
if session.timeslot_set.all():
|
||||
timeslot = session.timeslot_set.all()[0]
|
||||
timeslot.session = None
|
||||
timeslot.save()
|
||||
|
||||
# log activity
|
||||
#add_session_activity(group,'Session was cancelled',meeting,user)
|
||||
|
||||
# send notifitcation
|
||||
to_email = SESSION_REQUEST_EMAIL
|
||||
cc_list = get_cc_list(group, login)
|
||||
from_email = ('"IETF Meeting Session Request Tool"','session_request_developers@ietf.org')
|
||||
subject = '%s - Cancelling a meeting request for IETF %s' % (group.acronym, meeting.number)
|
||||
send_mail(request, to_email, from_email, subject, 'sreq/session_cancel_notification.txt',
|
||||
{'login':login,
|
||||
'group':group,
|
||||
'meeting':meeting}, cc=cc_list)
|
||||
|
||||
messages.success(request, 'The %s Session Request has been canceled' % group.acronym)
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
def confirm(request, acronym):
|
||||
'''
|
||||
This view displays details of the new session that has been requested for the user
|
||||
to confirm for submission.
|
||||
'''
|
||||
querydict = request.session.get('session_form',None)
|
||||
if not querydict:
|
||||
raise Http404
|
||||
form = querydict.copy()
|
||||
meeting = get_meeting()
|
||||
group = get_object_or_404(Group,acronym=acronym)
|
||||
login = request.user.get_profile()
|
||||
|
||||
if request.method == 'POST':
|
||||
# clear http session data
|
||||
del request.session['session_form']
|
||||
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
messages.success(request, 'Session Request has been canceled')
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# delete any existing session records with status = canceled or notmeet
|
||||
Session.objects.filter(group=group,meeting=meeting,status__in=('canceled','notmeet')).delete()
|
||||
|
||||
# create new session records
|
||||
count = 0
|
||||
# lenth_session2 and length_session3 fields might be disabled by javascript and so
|
||||
# wouldn't appear in form data
|
||||
for duration in (form.get('length_session1',None),form.get('length_session2',None),form.get('length_session3',None)):
|
||||
count += 1
|
||||
if duration:
|
||||
slug = 'apprw' if count == 3 else 'schedw'
|
||||
new_session = Session(meeting=meeting,
|
||||
group=group,
|
||||
attendees=form['attendees'],
|
||||
requested=datetime.datetime.now(),
|
||||
requested_by=login,
|
||||
requested_duration=datetime.timedelta(0,int(duration)),
|
||||
comments=form['comments'],
|
||||
status=SessionStatusName.objects.get(slug=slug))
|
||||
new_session.save()
|
||||
|
||||
# write constraint records
|
||||
save_conflicts(group,meeting,form['conflict1'],'conflict')
|
||||
save_conflicts(group,meeting,form['conflict2'],'conflic2')
|
||||
save_conflicts(group,meeting,form['conflict3'],'conflic3')
|
||||
|
||||
# deprecated in new schema
|
||||
# log activity
|
||||
#add_session_activity(group,'New session was requested',meeting,user)
|
||||
|
||||
# clear not meeting
|
||||
Session.objects.filter(group=group,meeting=meeting,status='notmeet').delete()
|
||||
|
||||
# send notification
|
||||
send_notification(group,meeting,login,form,'new')
|
||||
|
||||
status_text = 'IETF Agenda to be scheduled'
|
||||
messages.success(request, 'Your request has been sent to %s' % status_text)
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# GET logic
|
||||
session_conflicts = session_conflicts_as_string(group, meeting)
|
||||
|
||||
return render_to_response('sreq/confirm.html', {
|
||||
'session': form,
|
||||
'group': group,
|
||||
'session_conflicts': session_conflicts},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
||||
@check_permissions
|
||||
def edit(request, acronym):
|
||||
'''
|
||||
This view allows the user to edit details of the session request
|
||||
'''
|
||||
meeting = get_meeting()
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
sessions = Session.objects.filter(meeting=meeting,group=group).order_by('id')
|
||||
sessions_count = sessions.count()
|
||||
initial = get_initial_session(sessions)
|
||||
session_conflicts = session_conflicts_as_string(group, meeting)
|
||||
login = request.user.get_profile()
|
||||
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
url = reverse('sessions_view', kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
form = SessionForm(request.POST,initial=initial)
|
||||
if form.is_valid():
|
||||
if form.has_changed():
|
||||
# might be cleaner to simply delete and rewrite all records (but maintain submitter?)
|
||||
# adjust duration or add sessions
|
||||
# session 1
|
||||
if 'length_session1' in form.changed_data:
|
||||
session = sessions[0]
|
||||
session.requested_duration = datetime.timedelta(0,int(form.cleaned_data['length_session1']))
|
||||
session.save()
|
||||
|
||||
# session 2
|
||||
if 'length_session2' in form.changed_data:
|
||||
length_session2 = form.cleaned_data['length_session2']
|
||||
if length_session2 == '':
|
||||
sessions[1].delete()
|
||||
elif sessions_count < 2:
|
||||
duration = datetime.timedelta(0,int(form.cleaned_data['length_session2']))
|
||||
new_session = Session(meeting=meeting,
|
||||
group=group,
|
||||
attendees=form.cleaned_data['attendees'],
|
||||
requested=datetime.datetime.now(),
|
||||
requested_by=login,
|
||||
requested_duration=duration,
|
||||
comments=form.cleaned_data['comments'],
|
||||
status=SessionStatusName.objects.get(slug='schedw'))
|
||||
new_session.save()
|
||||
else:
|
||||
duration = datetime.timedelta(0,int(form.cleaned_data['length_session2']))
|
||||
session = sessions[1]
|
||||
session.requested_duration = duration
|
||||
session.save()
|
||||
|
||||
# session 3
|
||||
if 'length_session3' in form.changed_data:
|
||||
length_session3 = form.cleaned_data['length_session3']
|
||||
if length_session3 == '':
|
||||
sessions[2].delete()
|
||||
elif sessions_count < 3:
|
||||
duration = datetime.timedelta(0,int(form.cleaned_data['length_session3']))
|
||||
new_session = Session(meeting=meeting,
|
||||
group=group,
|
||||
attendees=form.cleaned_data['attendees'],
|
||||
requested=datetime.datetime.now(),
|
||||
requested_by=login,
|
||||
requested_duration=duration,
|
||||
comments=form.cleaned_data['comments'],
|
||||
status=SessionStatusName.objects.get(slug='apprw'))
|
||||
new_session.save()
|
||||
else:
|
||||
duration = datetime.timedelta(0,int(form.cleaned_data['length_session3']))
|
||||
session = sessions[2]
|
||||
session.requested_duration = duration
|
||||
session.save()
|
||||
|
||||
|
||||
if 'attendees' in form.changed_data:
|
||||
sessions.update(attendees=form.cleaned_data['attendees'])
|
||||
if 'comments' in form.changed_data:
|
||||
sessions.update(comments=form.cleaned_data['comments'])
|
||||
if 'conflict1' in form.changed_data:
|
||||
Constraint.objects.filter(meeting=meeting,source=group,name='conflict').delete()
|
||||
save_conflicts(group,meeting,form.cleaned_data['conflict1'],'conflict')
|
||||
if 'conflict2' in form.changed_data:
|
||||
Constraint.objects.filter(meeting=meeting,source=group,name='conflic2').delete()
|
||||
save_conflicts(group,meeting,form.cleaned_data['conflict2'],'conflic2')
|
||||
if 'conflict3' in form.changed_data:
|
||||
Constraint.objects.filter(meeting=meeting,source=group,name='conflic3').delete()
|
||||
save_conflicts(group,meeting,form.cleaned_data['conflict3'],'conflic3')
|
||||
|
||||
# deprecated
|
||||
# log activity
|
||||
#add_session_activity(group,'Session Request was updated',meeting,user)
|
||||
|
||||
# send notification
|
||||
send_notification(group,meeting,login,form.cleaned_data,'update')
|
||||
|
||||
messages.success(request, 'Session Request updated')
|
||||
url = reverse('sessions_view', kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
form = SessionForm(initial=initial)
|
||||
|
||||
return render_to_response('sreq/edit.html', {
|
||||
'meeting': meeting,
|
||||
'form': form,
|
||||
'group': group,
|
||||
'session_conflicts': session_conflicts},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
||||
def main(request):
|
||||
'''
|
||||
Display list of groups the user has access to.
|
||||
|
||||
Template variables
|
||||
form: a select box populated with unscheduled groups
|
||||
meeting: the current meeting
|
||||
scheduled_sessions:
|
||||
'''
|
||||
# check for locked flag
|
||||
is_locked = check_app_locked()
|
||||
|
||||
if is_locked and not has_role(request.user,'Secretariat'):
|
||||
message = get_lock_message()
|
||||
return render_to_response('sreq/locked.html', {
|
||||
'message': message},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
||||
# TODO this is not currently used in the main template
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Group will not meet':
|
||||
url = reverse('sessions_no_session', kwargs={'acronym':request.POST['group']})
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
redirect_url = reverse('sessions_new', kwargs={'acronym':request.POST['group']})
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
meeting = get_meeting()
|
||||
scheduled_groups,unscheduled_groups = groups_by_session(request.user, meeting)
|
||||
|
||||
# load form select with unscheduled groups
|
||||
choices = zip([ g.pk for g in unscheduled_groups ],
|
||||
[ str(g) for g in unscheduled_groups ])
|
||||
form = GroupSelectForm(choices=choices)
|
||||
|
||||
# add session status messages for use in template
|
||||
for group in scheduled_groups:
|
||||
sessions = group.session_set.filter(meeting=meeting)
|
||||
if sessions.count() < 3:
|
||||
group.status_message = sessions[0].status
|
||||
else:
|
||||
group.status_message = 'First two sessions: %s, Third session: %s' % (sessions[0].status,sessions[2].status)
|
||||
|
||||
# add not meeting indicators for use in template
|
||||
for group in unscheduled_groups:
|
||||
if group.session_set.filter(meeting=meeting,status='notmeet'):
|
||||
group.not_meeting = True
|
||||
|
||||
return render_to_response('sreq/main.html', {
|
||||
'is_locked': is_locked,
|
||||
'form': form,
|
||||
'meeting': meeting,
|
||||
'scheduled_groups': scheduled_groups,
|
||||
'unscheduled_groups': unscheduled_groups},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
||||
@check_permissions
|
||||
def new(request, acronym):
|
||||
'''
|
||||
This view gathers details for a new session request. The user proceeds to confirm()
|
||||
to create the request.
|
||||
'''
|
||||
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
meeting = get_meeting()
|
||||
session_conflicts = session_conflicts_as_string(group, meeting)
|
||||
user = request.user
|
||||
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
form = SessionForm(request.POST)
|
||||
if form.is_valid():
|
||||
# check if request already exists for this group
|
||||
if Session.objects.filter(group=group,meeting=meeting).exclude(status__in=('deleted','notmeet')):
|
||||
messages.warning(request, 'Sessions for working group %s have already been requested once.' % group.acronym)
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# save in user session
|
||||
request.session['session_form'] = form.data
|
||||
|
||||
url = reverse('sessions_confirm',kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# the "previous" querystring causes the form to be returned
|
||||
# pre-populated with data from last meeeting's session request
|
||||
elif request.method == 'GET' and request.GET.has_key('previous'):
|
||||
previous_meeting = Meeting.objects.get(number=str(int(meeting.number) - 1))
|
||||
previous_sessions = Session.objects.filter(meeting=previous_meeting,group=group).exclude(status__in=('notmeet','deleted')).order_by('id')
|
||||
if not previous_sessions:
|
||||
messages.warning(request, 'This group did not meet at %s' % previous_meeting)
|
||||
redirect_url = reverse('sessions_new', kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
initial = get_initial_session(previous_sessions)
|
||||
form = SessionForm(initial=initial)
|
||||
|
||||
else:
|
||||
form = SessionForm()
|
||||
|
||||
return render_to_response('sreq/new.html', {
|
||||
'meeting': meeting,
|
||||
'form': form,
|
||||
'group': group,
|
||||
'session_conflicts': session_conflicts},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
||||
@check_permissions
|
||||
def no_session(request, acronym):
|
||||
'''
|
||||
The user has indicated that the named group will not be having a session this IETF meeting.
|
||||
Actions:
|
||||
- send notification
|
||||
- update session_activity log
|
||||
'''
|
||||
meeting = get_meeting()
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
login = request.user.get_profile()
|
||||
|
||||
# delete canceled record if there is one
|
||||
Session.objects.filter(group=group,meeting=meeting,status='canceled').delete()
|
||||
|
||||
# skip if state is already notmeet
|
||||
if Session.objects.filter(group=group,meeting=meeting,status='notmeet'):
|
||||
messages.info(request, 'The group %s is already marked as not meeting' % group.acronym)
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
session = Session(group=group,
|
||||
meeting=meeting,
|
||||
requested=datetime.datetime.now(),
|
||||
requested_by=login,
|
||||
requested_duration=0,
|
||||
status=SessionStatusName.objects.get(slug='notmeet'))
|
||||
session.save()
|
||||
|
||||
# send notification
|
||||
to_email = SESSION_REQUEST_EMAIL
|
||||
cc_list = get_cc_list(group, login)
|
||||
from_email = ('"IETF Meeting Session Request Tool"','session_request_developers@ietf.org')
|
||||
subject = '%s - Not having a session at IETF %s' % (group.acronym, meeting.number)
|
||||
send_mail(request, to_email, from_email, subject, 'sreq/not_meeting_notification.txt',
|
||||
{'login':login,
|
||||
'group':group,
|
||||
'meeting':meeting}, cc=cc_list)
|
||||
|
||||
# deprecated?
|
||||
# log activity
|
||||
#text = 'A message was sent to notify not having a session at IETF %d' % meeting.meeting_num
|
||||
#add_session_activity(group,text,meeting,request.person)
|
||||
|
||||
# redirect
|
||||
messages.success(request, 'A message was sent to notify not having a session at IETF %s' % meeting.number)
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@sec_only
|
||||
def tool_status(request):
|
||||
'''
|
||||
This view handles locking and unlocking of the tool to the public.
|
||||
'''
|
||||
is_locked = check_app_locked()
|
||||
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Done':
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
form = ToolStatusForm(request.POST)
|
||||
|
||||
if button_text == 'Lock':
|
||||
if form.is_valid():
|
||||
f = open(LOCKFILE,'w')
|
||||
f.write(form.cleaned_data['message'])
|
||||
f.close()
|
||||
|
||||
messages.success(request, 'Session Request Tool is now Locked')
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
elif button_text == 'Unlock':
|
||||
os.remove(LOCKFILE)
|
||||
|
||||
messages.success(request, 'Session Request Tool is now Unlocked')
|
||||
url = reverse('sessions')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
else:
|
||||
if is_locked:
|
||||
message = get_lock_message()
|
||||
initial = {'message': message}
|
||||
form = ToolStatusForm(initial=initial)
|
||||
else:
|
||||
form = ToolStatusForm()
|
||||
|
||||
return render_to_response('sreq/tool_status.html', {
|
||||
'is_locked': is_locked,
|
||||
'form': form},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
||||
def view(request, acronym):
|
||||
'''
|
||||
This view displays the session request info
|
||||
'''
|
||||
meeting = get_meeting()
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
sessions = Session.objects.filter(~Q(status__in=('canceled','notmeet','deleted')),meeting=meeting,group=group).order_by('id')
|
||||
|
||||
# if there are no session requests yet, redirect to new session request page
|
||||
if not sessions:
|
||||
redirect_url = reverse('sessions_new', kwargs={'acronym':acronym})
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
# TODO simulate activity records
|
||||
activities = [{'act_date':sessions[0].requested.strftime('%b %d, %Y'),
|
||||
'act_time':sessions[0].requested.strftime('%H:%M:%S'),
|
||||
'activity':'New session was requested',
|
||||
'act_by':sessions[0].requested_by}]
|
||||
if sessions[0].scheduled:
|
||||
activities.append({'act_date':sessions[0].scheduled.strftime('%b %d, %Y'),
|
||||
'act_time':sessions[0].scheduled.strftime('%H:%M:%S'),
|
||||
'activity':'Session was scheduled',
|
||||
'act_by':'Secretariat'})
|
||||
|
||||
# other groups that list this group in their conflicts
|
||||
session_conflicts = session_conflicts_as_string(group, meeting)
|
||||
show_approve_button = False
|
||||
|
||||
# if sessions include a 3rd session waiting approval and the user is a secretariat or AD of the group
|
||||
# display approve button
|
||||
if sessions.filter(status='apprw'):
|
||||
if has_role(request.user,'Secretariat') or group.parent.role_set.filter(name='ad',person=request.user.get_profile()):
|
||||
show_approve_button = True
|
||||
|
||||
# build session dictionary (like querydict from new session request form) for use in template
|
||||
session = get_initial_session(sessions)
|
||||
|
||||
return render_to_response('sreq/view.html', {
|
||||
'session': session,
|
||||
'activities': activities,
|
||||
'meeting': meeting,
|
||||
'group': group,
|
||||
'session_conflicts': session_conflicts,
|
||||
'show_approve_button': show_approve_button},
|
||||
RequestContext(request, {}),
|
||||
)
|
||||
|
85
ietf/secr/templates/base.html
Normal file
|
@ -0,0 +1,85 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}/secr/css/base.css{% endblock %}" />
|
||||
<link rel="stylesheet" type="text/css" href="/secr/css/forms.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/secr/css/custom.css" />
|
||||
{% if server_mode == "test" %}
|
||||
<link rel="stylesheet" type="text/css" href="/secr/css/test.css" />
|
||||
{% endif %}
|
||||
{% block extrastyle %}{% endblock %}
|
||||
|
||||
{% block extrahead %}
|
||||
<script type="text/javascript" src="/secr/js/jquery-1.5.1.min.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
|
||||
</head>
|
||||
|
||||
<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
|
||||
|
||||
<!-- Container -->
|
||||
<div id="container">
|
||||
|
||||
{% if not is_popup %}
|
||||
<!-- Header -->
|
||||
<div id="header">
|
||||
<div id="branding">
|
||||
{% block branding %}{% endblock %}
|
||||
</div>
|
||||
{% block nav-global %}{% endblock %}
|
||||
</div>
|
||||
<!-- END Header -->
|
||||
|
||||
<!-- Breadcrumbs -->
|
||||
<div class="breadcrumbs">
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
{% block breadcrumbs %}<a href="/">Home</a>{% endblock %}
|
||||
</td>
|
||||
<td align="right">
|
||||
{% block instructions %}{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<!-- END Breadcrumbs -->
|
||||
{% endif %}
|
||||
|
||||
{% comment %}
|
||||
<!-- Removed per Glen 08-04-2010 -->
|
||||
<!-- Javascript Warning -->
|
||||
<noscript class="errornote"> You have Javascript disabled. Javascript is required for this application.</noscript>
|
||||
{% endcomment %}
|
||||
|
||||
<!-- Django Messages -->
|
||||
{% if messages %}
|
||||
<ul class="messages">
|
||||
{% for message in messages %}
|
||||
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
<!-- Content -->
|
||||
<div id="content" class="{% block coltype %}colM{% endblock %}">
|
||||
{% block pretitle %}{% endblock %}
|
||||
{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
|
||||
{% block content %}
|
||||
{% block object-tools %}{% endblock %}
|
||||
{{ content }}
|
||||
{% endblock %}
|
||||
{% block sidebar %}{% endblock %}
|
||||
<br class="clear" />
|
||||
</div>
|
||||
<!-- END Content -->
|
||||
|
||||
{% block footer %}<div id="footer"></div>{% endblock %}
|
||||
</div>
|
||||
<!-- END Container -->
|
||||
|
||||
</body>
|
||||
</html>
|
37
ietf/secr/templates/base_site.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{{ title }}{% if request.user_is_secretariat %} Secretariat Dashboard {% else %} WG Chair Dashboard {% endif %}{% endblock %}
|
||||
|
||||
{% block branding %}
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<h1 id="site-name">{% if request.user_is_secretariat %} Secretariat Dashboard {% else %} WG Chair Dashboard {% endif %}</h1>
|
||||
</td>
|
||||
<td align="right">
|
||||
<br>
|
||||
<span class="login">{% if request.user_is_secretariat %}Secretariat {% endif %}Logged in: {{ request.META.REMOTE_USER }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block nav-global %}{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<div id="footer">
|
||||
<div id="footer-extras">
|
||||
<ul>
|
||||
{% block footer-extras %}{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footer-version">
|
||||
<p>IETF Secretariat Tools v. {{ secr_version_num }}</p>
|
||||
|
||||
</div>
|
||||
<div id="footer-logo">
|
||||
<a href="http://www.amsl.com/"><img src="/secr/img/ams_logo.png" alt="AMS" align="right" border="0" hspace="5" /></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
53
ietf/secr/templates/main.html
Normal file
|
@ -0,0 +1,53 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content-main">
|
||||
|
||||
{% if request.user_is_secretariat %}
|
||||
|
||||
<table class="menu" width="100%" cellpadding="5" cellspacing="5" border="0">
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<h3>IESG</h3>
|
||||
</td>
|
||||
<td>
|
||||
<h3>IDs and WGs Process</h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<h3>Meetings and Proceedings</h3>
|
||||
<li> <a href="{% url sessions %}"><b>Session Requests</b></a></li><br>
|
||||
</td>
|
||||
<td>
|
||||
<h3>IPR</h3>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{% else %}
|
||||
|
||||
<table class="menu" width="100%" cellpadding="5" cellspacing="5" border="0">
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<h3>Section 1</h3>
|
||||
<li> <a href="{% url sessions %}"><b>Session Requests</b></a></li><br>
|
||||
</td>
|
||||
<td>
|
||||
<h3>Section 2</h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<h3>Section 3</h3>
|
||||
</td>
|
||||
<td>
|
||||
<h3>Section 4</h3>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
36
ietf/secr/templates/sreq/confirm.html
Executable file
|
@ -0,0 +1,36 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions - View{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="{% url sessions %}">Sessions</a>
|
||||
» <a href="../">New</a>
|
||||
» Session Request Confirmation
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>Sessions - Confirm</h2>
|
||||
|
||||
{% include "includes/sessions_request_view.html" %}
|
||||
|
||||
{% if session.length_session3 %}
|
||||
<br>
|
||||
<span class="alert"><p><b>Note: Your request for a third session must be approved by an area director before
|
||||
being submitted to agenda@ietf.org. Click "Submit" below to email an approval
|
||||
request to the area directors.</b></p></span>
|
||||
<br>
|
||||
{% endif %}
|
||||
|
||||
<form action="" method="post">
|
||||
{% include "includes/buttons_submit_cancel.html" %}
|
||||
</form>
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
36
ietf/secr/templates/sreq/edit.html
Executable file
|
@ -0,0 +1,36 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions - Edit{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/secr/js/sessions.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="../../">Sessions</a>
|
||||
» <a href="../">{{ group.acronym }}</a>
|
||||
» Edit
|
||||
{% endblock %}
|
||||
|
||||
{% block instructions %}
|
||||
<a href="http://www.ietf.org/wg/request-tool-instructions.html" target="_blank">Instructions</a>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>IETF {{ meeting.number }}: Edit Session Request</h2>
|
||||
<div class="inline-related">
|
||||
<br>
|
||||
|
||||
{% include "includes/sessions_request_form.html" %}
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
29
ietf/secr/templates/sreq/locked.html
Executable file
|
@ -0,0 +1,29 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» Sessions (Locked)
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>Sessions - Status</h2>
|
||||
|
||||
<p>{{ message }}</p>
|
||||
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
<li><button onclick="window.location='../'">Back</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
66
ietf/secr/templates/sreq/main.1_2
Executable file
|
@ -0,0 +1,66 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/static/js/utils.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» Sessions
|
||||
{% endblock %}
|
||||
{% block instructions %}
|
||||
<a href="http://www.ietf.org/wg/request-tool-instructions.html" target="_blank">Instructions</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>
|
||||
Sessions Request Tool: IETF {{ meeting.meeting_num }}
|
||||
{% if request.user_is_secretariat %}
|
||||
{% if is_locked %}
|
||||
<span class="locked"><a href="{% url sessions_tool_status %}">Tool Status: Locked</a></span>
|
||||
{% else %}
|
||||
<span class="unlocked"><a href="{% url sessions_tool_status %}">Tool Status: Unlocked</a></span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h2>
|
||||
<div class="inline-related">
|
||||
<h3><b>Request New Session</b></h3>
|
||||
<p>The list below includes those working groups that you currently chair which do not already have a session scheduled. You can click on an acronym to initiate a request for a new session at the upcoming IETF meeting. Click "Group will not meet" to send a notification that the group does not plan to meet.</p>
|
||||
<ul>
|
||||
{% for group in unscheduled_groups %}
|
||||
<li>
|
||||
<a href="{% url sessions_new acronym=group.acronym %}">{{ group.acronym }}</a>
|
||||
{% if meeting in group.meetings_not_scheduled.all %}
|
||||
<span class="required"> (Currently, this group does not plan to hold a session at IETF {{ meeting.meeting_num }})</span>
|
||||
{% else %}
|
||||
<!--
|
||||
<a href="{% url sessions_no_session acronym=group.acronym %}"> - [ Group will not meet ]</a>
|
||||
-->
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div> <!-- inline-related -->
|
||||
<br>
|
||||
<div class="inline-related">
|
||||
<h2></h2>
|
||||
<h3><b>Edit / Cancel Previously Requested Sessions</b></h3>
|
||||
<p>The list below includes those working groups for which you or your co-chair has requested sessions at the upcoming IETF meeting. You can click on an acronym to initiate changes to a session, or cancel a session.</p>
|
||||
<ul>
|
||||
{% for session in scheduled_sessions %}
|
||||
<li><a href="{% url sessions_view session_id=session.session_id %}">{{ session.group }} - {% if not session.ts_status_id %}{{ session.status }}{% else %}First Two Sessions:{{ session.status }}, Third Session:{{ session.ts_status }}{% endif %}</a></li>
|
||||
{% empty %}
|
||||
<i>NONE</i>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div> <!-- inline-related -->
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
62
ietf/secr/templates/sreq/main.html
Executable file
|
@ -0,0 +1,62 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» Sessions
|
||||
{% endblock %}
|
||||
{% block instructions %}
|
||||
<a href="http://www.ietf.org/wg/request-tool-instructions.html" target="_blank">Instructions</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>
|
||||
Sessions Request Tool: IETF {{ meeting.number }}
|
||||
{% if request.user_is_secretariat %}
|
||||
{% if is_locked %}
|
||||
<span class="locked"><a href="{% url sessions_tool_status %}">Tool Status: Locked</a></span>
|
||||
{% else %}
|
||||
<span class="unlocked"><a href="{% url sessions_tool_status %}">Tool Status: Unlocked</a></span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h2>
|
||||
<div class="inline-related">
|
||||
<h3><b>Request New Session</b></h3>
|
||||
<p>The list below includes those working groups that you currently chair which do not already have a session scheduled. You can click on an acronym to initiate a request for a new session at the upcoming IETF meeting. Click "Group will not meet" to send a notification that the group does not plan to meet.</p>
|
||||
<ul>
|
||||
{% for group in unscheduled_groups %}
|
||||
<li>
|
||||
<a href="{% url sessions_new acronym=group.acronym %}">{{ group.acronym }}</a>
|
||||
{% if group.not_meeting %}
|
||||
<span class="required"> (Currently, this group does not plan to hold a session at IETF {{ meeting.number }})</span>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div> <!-- inline-related -->
|
||||
<br>
|
||||
<div class="inline-related">
|
||||
<h2></h2>
|
||||
<h3><b>Edit / Cancel Previously Requested Sessions</b></h3>
|
||||
<p>The list below includes those working groups for which you or your co-chair has requested sessions at the upcoming IETF meeting. You can click on an acronym to initiate changes to a session, or cancel a session.</p>
|
||||
<ul>
|
||||
{% for group in scheduled_groups %}
|
||||
<li><a href="{% url sessions_view acronym=group.acronym %}">{{ group.acronym }} - {{ group.status_message }}</a></li>
|
||||
{% empty %}
|
||||
<i>NONE</i>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div> <!-- inline-related -->
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
38
ietf/secr/templates/sreq/new.html
Executable file
|
@ -0,0 +1,38 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions- New{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/secr/js/sessions.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="../../">Sessions</a>
|
||||
» New Session Request
|
||||
{% endblock %}
|
||||
|
||||
{% block instructions %}
|
||||
<a href="http://www.ietf.org/wg/request-tool-instructions.html" target="_blank">Instructions</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>IETF {{ meeting.number }}: New Session Request</h2>
|
||||
<div class="inline-related">
|
||||
<br>
|
||||
<ul class="session-buttons">
|
||||
<li><button onclick="if (window.confirm('A message will be sent to agenda@ietf.com as well as to the area director(s).\n\nContinue?')) { window.location='{% url sessions_no_session acronym=group.acronym %}'};">Send a notification that the group does not plan to hold a session at IETF {{ meeting.number }}</button></li>
|
||||
<li><button onclick="window.location='{% url sessions_new acronym=group.acronym %}?previous'">Retrieve all information from previous meeting</button></li>
|
||||
</ul>
|
||||
|
||||
{% include "includes/sessions_request_form.html" %}
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
7
ietf/secr/templates/sreq/not_meeting_notification.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
{% load ams_filters %}
|
||||
|
||||
{{ login|smart_login }} {{ group.acronym }} working group, indicated that the {{ group.acronym }} working group does not plan to hold a session at IETF {{ meeting.number }}.
|
||||
|
||||
This message was generated and sent by the IETF Meeting Session Request Tool.
|
||||
|
||||
|
15
ietf/secr/templates/sreq/session_approval_notification.txt
Normal file
|
@ -0,0 +1,15 @@
|
|||
Dear {{ group.parent }} Director(s):
|
||||
|
||||
{{ header }} meeting session request has just been
|
||||
submitted by {{ login }}, a working group chair of {{ group.name }}.
|
||||
The third session requires your approval.
|
||||
|
||||
To approve the session go to the session request view here:
|
||||
https://pub.ietf.org{% url sessions_view acronym=group.acronym %}
|
||||
and click "Approve Third Session".
|
||||
|
||||
Regards,
|
||||
|
||||
The IETF Secretariat.
|
||||
|
||||
{% include "includes/session_info.txt" %}
|
4
ietf/secr/templates/sreq/session_cancel_notification.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
{% load ams_filters %}
|
||||
|
||||
A request to cancel a meeting session has just been submitted by {{ login|smart_login }} {{ group.acronym }} working group.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{% load ams_filters %}
|
||||
|
||||
{{ header }} meeting session request has just been submitted by {{ login|smart_login }} {{ group.acronym }} working group.
|
||||
|
||||
{% include "includes/session_info.txt" %}
|
38
ietf/secr/templates/sreq/tool_status.html
Executable file
|
@ -0,0 +1,38 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="../">Sessions</a>
|
||||
» Session Status
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>Sessions - Status</h2>
|
||||
<p>Enter the message that you would like displayed to the WG Chair when this tool is locked.</p>
|
||||
<form action="" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
{% if is_locked %}
|
||||
<li><button type="submit" name="submit" value="Unlock">Unlock</button></li>
|
||||
{% else %}
|
||||
<li><button type="submit" name="submit" value="Lock">Lock</button></li>
|
||||
{% endif %}
|
||||
<li><button type="submit" name="submit" value="Done">Done</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
|
||||
</form>
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
45
ietf/secr/templates/sreq/view.html
Normal file
|
@ -0,0 +1,45 @@
|
|||
{% extends "base_site.html" %}
|
||||
|
||||
{% block title %}Sessions - View{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<script type="text/javascript" src="/secr/js/utils.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="../">Sessions</a>
|
||||
» {{ group.acronym }}
|
||||
{% endblock %}
|
||||
|
||||
{% block instructions %}
|
||||
<a href="http://www.ietf.org/wg/request-tool-instructions.html" target="_blank">Instructions</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>Sessions - View</h2>
|
||||
|
||||
{% include "includes/sessions_request_view.html" %}
|
||||
|
||||
<br>
|
||||
|
||||
{% include "includes/activities.html" %}
|
||||
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
<li><button onclick="window.location='edit/'">Edit</button></li>
|
||||
{% if show_approve_button %}
|
||||
<li><button onclick="window.location='approve/'">Approve Third Session</button></li>
|
||||
{% endif %}
|
||||
<li><button onclick="if (window.confirm('Do you really want to cancel this session?')) { window.location='cancel/' };">Cancel this Request</button></li>
|
||||
<li><button onclick="window.location='../'">Back</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
9
ietf/secr/urls.py
Normal file
|
@ -0,0 +1,9 @@
|
|||
from django.conf import settings
|
||||
from django.conf.urls.defaults import *
|
||||
from django.contrib import admin
|
||||
from django.views.generic.simple import direct_to_template
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', direct_to_template, {'template': 'main.html'}, name="home"),
|
||||
(r'^sreq/', include('sec.sreq.urls')),
|
||||
)
|
0
ietf/secr/utils/__init__.py
Normal file
69
ietf/secr/utils/ams_utils.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
from django.conf import settings
|
||||
|
||||
from ietf.person.models import Person
|
||||
|
||||
import glob
|
||||
import os
|
||||
import re
|
||||
|
||||
def get_base(name):
|
||||
"""
|
||||
Takes a draft filename and returns the basename, with file extension
|
||||
and revision number stripped
|
||||
"""
|
||||
#m = re.match(r'(.*)(-\d{2}\.(txt|pdf|ps|xml))$',name)
|
||||
m = re.match(r'(.*)(-\d{2})(.*)$',name)
|
||||
return m.group(1)
|
||||
|
||||
def get_revision(name):
|
||||
"""
|
||||
Takes a draft filename and returns the revision, as a string.
|
||||
"""
|
||||
#return name[-6:-4]
|
||||
base,ext = os.path.splitext(name)
|
||||
return base[-2:]
|
||||
|
||||
def get_last_revision(filename):
|
||||
"""
|
||||
This function takes a filename, in the same form it appears in the InternetDraft record,
|
||||
no revision or extension (ie. draft-ietf-alto-reqs) and returns a string which is the
|
||||
reivision number of the last active version of the document, the highest revision
|
||||
txt document in the archive directory. If no matching file is found raise exception.
|
||||
"""
|
||||
files = glob.glob(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR,filename) + '-??.txt')
|
||||
if files:
|
||||
sorted_files = sorted(files)
|
||||
return get_revision(sorted_files[-1])
|
||||
else:
|
||||
raise Exception('last revision not found in archive')
|
||||
|
||||
def get_person(name):
|
||||
'''
|
||||
This function takes a string which is in the name autocomplete format "name - email (tag)"
|
||||
and returns a person object
|
||||
'''
|
||||
|
||||
match = re.search(r'\((\d+)\)', name)
|
||||
if not match:
|
||||
return None
|
||||
tag = match.group(1)
|
||||
try:
|
||||
person = Person.objects.get(pk=tag)
|
||||
except (Person.ObjectDoesNoExist, Person.MultipleObjectsReturned):
|
||||
return None
|
||||
return person
|
||||
|
||||
def get_email(name):
|
||||
'''
|
||||
This function takes a string which is in the name autocomplete format "name - email (tag)"
|
||||
and returns a email object
|
||||
'''
|
||||
match = re.search(r'\((\d+)\)', name)
|
||||
if not match:
|
||||
return None
|
||||
tag = match.group(1)
|
||||
try:
|
||||
person = Person.objects.get(pk=tag)
|
||||
except (Person.ObjectDoesNoExist, Person.MultipleObjectsReturned):
|
||||
return None
|
||||
return person.email_address()
|
88
ietf/secr/utils/decorators.py
Normal file
|
@ -0,0 +1,88 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from functools import wraps
|
||||
|
||||
from ietf.ietfauth.decorators import has_role
|
||||
from ietf.doc.models import Document
|
||||
from ietf.group.models import Group
|
||||
from ietf.meeting.models import Session
|
||||
|
||||
from itertools import chain
|
||||
|
||||
def check_for_cancel(redirect_url):
|
||||
"""
|
||||
Decorator to make a view redirect to the given url if the reuqest is a POST which contains
|
||||
a submit=Cancel.
|
||||
"""
|
||||
def decorator(func):
|
||||
@wraps(func)
|
||||
def inner(request, *args, **kwargs):
|
||||
if request.method == 'POST' and request.POST.get('submit',None) == 'Cancel':
|
||||
request.session.clear()
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
return func(request, *args, **kwargs)
|
||||
return inner
|
||||
return decorator
|
||||
|
||||
def check_permissions(func):
|
||||
"""
|
||||
This decorator checks that the user making the request has access to the
|
||||
object being requested. Expects one of the following four keyword
|
||||
arguments:
|
||||
|
||||
acronym: a group acronym
|
||||
session_id: a session id (used for sessions of type other or plenary)
|
||||
meeting_id, slide_id
|
||||
"""
|
||||
def wrapper(request, *args, **kwargs):
|
||||
session = None
|
||||
# short circuit. secretariat user has full access
|
||||
if has_role(request.user,'Secretariat'):
|
||||
return func(request, *args, **kwargs)
|
||||
# get the parent group
|
||||
if 'acronym' in kwargs:
|
||||
acronym = kwargs['acronym']
|
||||
group = get_object_or_404(Group,acronym=acronym)
|
||||
elif 'session_id' in kwargs:
|
||||
session = get_object_or_404(Session, id=kwargs['session_id'])
|
||||
group = session.group
|
||||
elif 'slide_id' in kwargs:
|
||||
slide = get_object_or_404(Document, name=kwargs['slide_id'])
|
||||
session = slide.session_set.all()[0]
|
||||
group = session.group
|
||||
|
||||
login = request.user.get_profile()
|
||||
all_roles = chain(
|
||||
group.role_set.filter(name__in=('chair','secr')),
|
||||
group.parent.role_set.filter(name__in=('ad','chair')))
|
||||
if login in [ r.person for r in all_roles ]:
|
||||
return func(request, *args, **kwargs)
|
||||
|
||||
# if session is plenary allow ietf/iab chairs
|
||||
if session and session.timeslot_set.filter(type__slug='plenary'):
|
||||
if login.role_set.filter(name='Chair',group__acronym__in=('iesg','iab')):
|
||||
return func(request, *args, **kwargs)
|
||||
|
||||
# if we get here access is denied
|
||||
return render_to_response('unauthorized.html',{
|
||||
'user_name':login,
|
||||
'group_name':group.acronym}
|
||||
)
|
||||
return wraps(func)(wrapper)
|
||||
|
||||
def sec_only(func):
|
||||
"""
|
||||
This decorator checks that the user making the request is a secretariat user.
|
||||
(Based on the cusotm user_is_secretariat request attribute)
|
||||
"""
|
||||
def wrapper(request, *args, **kwargs):
|
||||
# short circuit. secretariat user has full access
|
||||
if request.user_is_secretariat:
|
||||
return func(request, *args, **kwargs)
|
||||
|
||||
return render_to_response('unauthorized.html',{
|
||||
'user_name':request.user.get_profile()}
|
||||
)
|
||||
|
||||
return wraps(func)(wrapper)
|
29
ietf/secr/utils/document.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
def get_full_path(doc):
|
||||
'''
|
||||
Returns for name of file on disk with full path. This should really be a method on doc
|
||||
NOTE: this currently only works for material file types
|
||||
'''
|
||||
import os
|
||||
|
||||
if doc.type_id not in ('slides','agenda','minutes') or not doc.external_url:
|
||||
return None
|
||||
return os.path.join(doc.get_file_path(), doc.external_url)
|
||||
|
||||
def get_rfc_num(doc):
|
||||
qs = doc.docalias_set.filter(name__startswith='rfc')
|
||||
return qs[0].name[3:] if qs else None
|
||||
|
||||
def is_draft(doc):
|
||||
if doc.docalias_set.filter(name__startswith='rfc'):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def get_start_date(doc):
|
||||
'''
|
||||
This function takes a document object and returns the date of the first
|
||||
new revision doc event
|
||||
'''
|
||||
# based on ietf.doc.proxy
|
||||
event = doc.docevent_set.filter(type='new_revision').order_by('time')
|
||||
return event[0].time.date() if event else None
|
76
ietf/secr/utils/group.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
from django.conf import settings
|
||||
from ietf.group.models import Group
|
||||
from ietf.meeting.models import Session
|
||||
|
||||
from ietf.ietfauth.decorators import has_role
|
||||
|
||||
import itertools
|
||||
import os
|
||||
|
||||
def current_nomcom():
|
||||
qs = Group.objects.filter(acronym__startswith='nomcom',state__name="Active").order_by('-time')
|
||||
return qs[0]
|
||||
|
||||
def get_charter_text(group):
|
||||
'''
|
||||
Takes a group object and returns the text or the group's charter as a string
|
||||
'''
|
||||
charter = group.charter
|
||||
path = os.path.join(settings.CHARTER_PATH, '%s-%s.txt' % (charter.canonical_name(), charter.rev))
|
||||
f = file(path,'r')
|
||||
text = f.read()
|
||||
f.close()
|
||||
|
||||
return text
|
||||
|
||||
def get_my_groups(user):
|
||||
'''
|
||||
Takes a Django user object (from request)
|
||||
Returns a list of groups the user has access to. Rules are as follows
|
||||
secretariat - has access to all groups
|
||||
area director - has access to all groups in their area
|
||||
wg chair or secretary - has acceses to their own group
|
||||
chair of irtf has access to all irtf groups
|
||||
|
||||
If user=None than all groups are returned.
|
||||
'''
|
||||
my_groups = set()
|
||||
all_groups = Group.objects.filter(type__in=('wg','rg','ag','team'),state__in=('bof','proposed','active')).order_by('acronym')
|
||||
if user == None:
|
||||
return all_groups
|
||||
else:
|
||||
person = user.get_profile()
|
||||
|
||||
if has_role(user,'Secretariat'):
|
||||
return all_groups
|
||||
|
||||
for group in all_groups:
|
||||
if group.role_set.filter(person=person,name__in=('chair','secr')):
|
||||
my_groups.add(group)
|
||||
continue
|
||||
if group.parent and group.parent.role_set.filter(person=person,name__in=('ad','chair')):
|
||||
my_groups.add(group)
|
||||
continue
|
||||
|
||||
return list(my_groups)
|
||||
|
||||
def groups_by_session(user, meeting):
|
||||
'''
|
||||
Takes a Django User object and a Meeting object
|
||||
Returns a tuple scheduled_groups, unscheduled groups. sorted lists of those groups that
|
||||
the user has access to, secretariat defaults to all groups
|
||||
If user=None than all groups are returned.
|
||||
'''
|
||||
groups_session = []
|
||||
groups_no_session = []
|
||||
my_groups = get_my_groups(user)
|
||||
sessions = Session.objects.filter(meeting=meeting,status__in=('schedw','apprw','appr','sched'))
|
||||
groups_with_sessions = [ s.group for s in sessions ]
|
||||
for group in my_groups:
|
||||
if group in groups_with_sessions:
|
||||
groups_session.append(group)
|
||||
else:
|
||||
groups_no_session.append(group)
|
||||
|
||||
return groups_session, groups_no_session
|
||||
|
58
ietf/secr/utils/mail.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
from django import forms
|
||||
from django.forms import ValidationError
|
||||
from django.utils.encoding import smart_unicode
|
||||
|
||||
import re
|
||||
|
||||
class MultiEmailField(forms.Field):
|
||||
def to_python(self, value):
|
||||
"Normalize data to a list of strings."
|
||||
|
||||
# Return an empty list if no input was given.
|
||||
if not value:
|
||||
return []
|
||||
return value.split(',')
|
||||
|
||||
def validate(self, value):
|
||||
"Check if value consists only of valid emails."
|
||||
assert False, ('got to validate', value)
|
||||
# Use the parent's handling of required fields, etc.
|
||||
super(MultiEmailField, self).validate(value)
|
||||
|
||||
for email in value:
|
||||
validate_email(email)
|
||||
|
||||
def get_ad_email_list(group):
|
||||
'''
|
||||
This function takes a group and returns the Area Director email as a list.
|
||||
NOTE: we still have custom logic here for IRTF groups, where the "Area Director"
|
||||
is the chair of the parent group, 'irtf'.
|
||||
'''
|
||||
emails = []
|
||||
if group.type.slug == 'wg':
|
||||
emails.append('%s-ads@tools.ietf.org' % group.acronym)
|
||||
elif group.type.slug == 'rg':
|
||||
emails.append(group.parent.role_set.filter(name='chair')[0].email.address)
|
||||
return emails
|
||||
|
||||
def get_cc_list(group, person=None):
|
||||
'''
|
||||
This function takes a Group and Person. It returns a list of emails for the ads and chairs of
|
||||
the group and the person's email if it isn't already in the list.
|
||||
|
||||
Per Pete Resnick, at IETF 80 meeting, session request notifications
|
||||
should go to chairs,ads lists not individuals.
|
||||
'''
|
||||
emails = []
|
||||
emails.extend(get_ad_email_list(group))
|
||||
emails.extend(get_chair_email_list(group))
|
||||
if person and person.email_address() not in emails:
|
||||
emails.append(person.email_address())
|
||||
return emails
|
||||
|
||||
def get_chair_email_list(group):
|
||||
'''
|
||||
This function takes a group and returns chair email(s) as a list.
|
||||
'''
|
||||
return [ r.email.address for r in group.role_set.filter(name='chair') ]
|
||||
|
42
ietf/secr/utils/meeting.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
from django.conf import settings
|
||||
from ietf.meeting.models import Meeting
|
||||
|
||||
import os
|
||||
|
||||
def get_current_meeting():
|
||||
'''Returns the most recent IETF meeting'''
|
||||
return Meeting.objects.filter(type='ietf').order_by('-number')[0]
|
||||
|
||||
def get_material(session):
|
||||
'''
|
||||
This function takes a session object and returns a tuple of active materials:
|
||||
agenda(Document), minutes(Document), slides(list of Documents)
|
||||
'''
|
||||
active_materials = session.materials.exclude(states__slug='deleted')
|
||||
slides = active_materials.filter(type='slides').order_by('order')
|
||||
minutes = active_materials.filter(type='minutes')
|
||||
minutes = minutes[0] if minutes else None
|
||||
agenda = active_materials.filter(type='agenda')
|
||||
agenda = agenda[0] if agenda else None
|
||||
|
||||
return agenda,minutes,slides
|
||||
|
||||
def get_proceedings_path(meeting, group):
|
||||
if meeting.type.slug == 'interim':
|
||||
path = os.path.join(get_upload_root(meeting),'proceedings.html')
|
||||
else:
|
||||
path = os.path.join(get_upload_root(meeting),'%s.html' % group.acronym)
|
||||
return path
|
||||
|
||||
def get_upload_root(meeting):
|
||||
path = ''
|
||||
if meeting.type.slug == 'ietf':
|
||||
path = os.path.join(settings.AGENDA_PATH,meeting.number)
|
||||
elif meeting.type.slug == 'interim':
|
||||
path = os.path.join(settings.AGENDA_PATH,
|
||||
'interim',
|
||||
meeting.date.strftime('%Y'),
|
||||
meeting.date.strftime('%m'),
|
||||
meeting.date.strftime('%d'),
|
||||
meeting.session_set.all()[0].group.acronym)
|
||||
return path
|
20
ietf/secr/utils/test.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
'''
|
||||
Functions to aid unit testing
|
||||
'''
|
||||
from ietf.person.models import *
|
||||
from ietf.group.models import *
|
||||
|
||||
def reset():
|
||||
'''Revert my roles back to production settings'''
|
||||
me = Person.objects.get(name='Ryan Cross')
|
||||
me.role_set.all().delete()
|
||||
Role.objects.create(person=me,email_id='rcross@amsl.com',name_id='secr',group_id=4)
|
||||
print me.role_set.all()
|
||||
|
||||
def copy_roles(person):
|
||||
'''Copy the roles of person'''
|
||||
me = Person.objects.get(name='Ryan Cross')
|
||||
me.role_set.all().delete()
|
||||
for role in person.role_set.all():
|
||||
Role.objects.create(person=me,email_id='rcross@amsl.com',name=role.name,group=role.group)
|
||||
print me.role_set.all()
|
|
@ -116,7 +116,8 @@ MIDDLEWARE_CLASSES = (
|
|||
ROOT_URLCONF = 'ietf.urls'
|
||||
|
||||
TEMPLATE_DIRS = (
|
||||
BASE_DIR + "/templates"
|
||||
BASE_DIR + "/templates",
|
||||
BASE_DIR + "/secr/templates",
|
||||
)
|
||||
|
||||
TEMPLATE_CONTEXT_PROCESSORS = (
|
||||
|
@ -127,6 +128,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
|
|||
'django.contrib.messages.context_processors.messages',
|
||||
'ietf.context_processors.server_mode',
|
||||
'ietf.context_processors.revision_info',
|
||||
'ietf.secr.context_processors.secr_revision_info',
|
||||
'ietf.context_processors.rfcdiff_prefix',
|
||||
)
|
||||
|
||||
|
@ -308,6 +310,16 @@ BIBXML_BASE_PATH = '/a/www/ietf-ftp/xml2rfc'
|
|||
TZDATA_ICS_PATH = '/www/ietf-datatracker/tz/ics/'
|
||||
CHANGELOG_PATH = '/www/ietf-datatracker/web/changelog'
|
||||
|
||||
# Secretariat Tool
|
||||
# this is a tuple of regular expressions. if the incoming URL matches one of
|
||||
# these, than non secretariat access is allowed.
|
||||
SEC_AUTH_UNRESTRICTED_URLS = (
|
||||
#(r'^/$'),
|
||||
#(r'^/announcement/'),
|
||||
#(r'^/proceedings/'),
|
||||
(r'^/secr/sreq/'),
|
||||
)
|
||||
|
||||
# Put SECRET_KEY in here, or any other sensitive or site-specific
|
||||
# changes. DO NOT commit settings_local.py to svn.
|
||||
from settings_local import *
|
||||
|
|
|
@ -62,6 +62,7 @@ urlpatterns = patterns('',
|
|||
(r'^person/', include('ietf.person.urls')),
|
||||
(r'^release/$', 'ietf.release.views.release'),
|
||||
(r'^release/(?P<version>.+)/$', 'ietf.release.views.release'),
|
||||
(r'^secr/', include('ietf.secr.urls')),
|
||||
(r'^sitemap-(?P<section>.+).xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
|
||||
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', { 'sitemaps': sitemaps}),
|
||||
(r'^streams/', include('ietf.ietfworkflows.urls')),
|
||||
|
|
787
static/secr/css/base.css
Normal file
|
@ -0,0 +1,787 @@
|
|||
/*
|
||||
DJANGO Admin styles
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 12px;
|
||||
font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
/* LINKS */
|
||||
|
||||
a:link, a:visited {
|
||||
color: #5b80b2;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #036;
|
||||
}
|
||||
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
a.section:link, a.section:visited {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* GLOBAL DEFAULTS */
|
||||
|
||||
p, ol, ul, dl {
|
||||
margin: .2em 0 .8em 0;
|
||||
}
|
||||
|
||||
p {
|
||||
padding: 0;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 18px;
|
||||
color: #666;
|
||||
padding: 0 6px 0 0;
|
||||
margin: 0 0 .2em 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 16px;
|
||||
margin: 1em 0 .5em 0;
|
||||
}
|
||||
|
||||
h2.subhead {
|
||||
font-weight: normal;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14px;
|
||||
margin: .8em 0 .3em 0;
|
||||
color: #666;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 12px;
|
||||
margin: 1em 0 .8em 0;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 10px;
|
||||
margin: 1.5em 0 .5em 0;
|
||||
color: #666;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
ul li {
|
||||
list-style-type: square;
|
||||
padding: 1px 0;
|
||||
}
|
||||
|
||||
ul.plainlist {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
ul.plainlist li {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
li ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
li, dt, dd {
|
||||
font-size: 11px;
|
||||
line-height: 14px;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
margin: 0;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
font-size: 11px;
|
||||
color: #777;
|
||||
margin-left: 2px;
|
||||
padding-left: 10px;
|
||||
border-left: 5px solid #ddd;
|
||||
}
|
||||
|
||||
code, pre {
|
||||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
||||
background: inherit;
|
||||
color: #666;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
pre.literal-block {
|
||||
margin: 10px;
|
||||
background: #eee;
|
||||
padding: 6px 8px;
|
||||
}
|
||||
|
||||
code strong {
|
||||
color: #930;
|
||||
}
|
||||
|
||||
hr {
|
||||
clear: both;
|
||||
color: #eee;
|
||||
background-color: #eee;
|
||||
height: 1px;
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 1px;
|
||||
line-height: 1px;
|
||||
}
|
||||
|
||||
/* TEXT STYLES & MODIFIERS */
|
||||
|
||||
.small {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.tiny {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
p.tiny {
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
.mini {
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
p.mini {
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.help, p.help {
|
||||
font-size: 10px !important;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
p img, h1 img, h2 img, h3 img, h4 img, td img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.quiet, a.quiet:link, a.quiet:visited {
|
||||
color: #999 !important;
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
.quiet strong {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
.float-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.float-left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.example {
|
||||
margin: 10px 0;
|
||||
padding: 5px 10px;
|
||||
background: #efefef;
|
||||
}
|
||||
|
||||
.nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* TABLES */
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-color: #ccc;
|
||||
}
|
||||
|
||||
td, th {
|
||||
font-size: 11px;
|
||||
line-height: 13px;
|
||||
border-bottom: 1px solid #eee;
|
||||
vertical-align: top;
|
||||
padding: 5px;
|
||||
font-family: "Lucida Grande", Verdana, Arial, sans-serif;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
thead th,
|
||||
tfoot td {
|
||||
color: #666;
|
||||
padding: 2px 5px;
|
||||
font-size: 11px;
|
||||
background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
|
||||
border-left: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
tfoot td {
|
||||
border-bottom: none;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
thead th:first-child,
|
||||
tfoot td:first-child {
|
||||
border-left: none !important;
|
||||
}
|
||||
|
||||
thead th.optional {
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
fieldset table {
|
||||
border-right: 1px solid #eee;
|
||||
}
|
||||
|
||||
tr.row-label td {
|
||||
font-size: 9px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
border-bottom: none;
|
||||
color: #666;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
tr.alt {
|
||||
background: #f6f6f6;
|
||||
}
|
||||
|
||||
.row1 {
|
||||
background: #EDF3FE;
|
||||
}
|
||||
|
||||
.row2 {
|
||||
background: white;
|
||||
}
|
||||
|
||||
/* SORTABLE TABLES */
|
||||
|
||||
thead th a:link, thead th a:visited {
|
||||
color: #666;
|
||||
display: block;
|
||||
}
|
||||
|
||||
table thead th.sorted {
|
||||
background-position: bottom left !important;
|
||||
}
|
||||
|
||||
table thead th.sorted a {
|
||||
padding-right: 13px;
|
||||
}
|
||||
|
||||
table thead th.ascending a {
|
||||
background: url(../img/admin/arrow-down.gif) right .4em no-repeat;
|
||||
}
|
||||
|
||||
table thead th.descending a {
|
||||
background: url(../img/admin/arrow-up.gif) right .4em no-repeat;
|
||||
}
|
||||
|
||||
/* ORDERABLE TABLES */
|
||||
|
||||
table.orderable tbody tr td:hover {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
table.orderable tbody tr td:first-child {
|
||||
padding-left: 14px;
|
||||
background-image: url(../img/admin/nav-bg-grabber.gif);
|
||||
background-repeat: repeat-y;
|
||||
}
|
||||
|
||||
table.orderable-initalized .order-cell, body>tr>td.order-cell {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* FORM DEFAULTS */
|
||||
|
||||
input, textarea, select {
|
||||
margin: 2px 0;
|
||||
padding: 2px 3px;
|
||||
vertical-align: middle;
|
||||
font-family: "Lucida Grande", Verdana, Arial, sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
vertical-align: top !important;
|
||||
}
|
||||
|
||||
input[type=text], input[type=password], textarea, select, .vTextField {
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
/* FORM BUTTONS */
|
||||
|
||||
.button, input[type=submit], input[type=button], .submit-row input {
|
||||
background: white url(../img/admin/nav-bg.gif) bottom repeat-x;
|
||||
padding: 3px;
|
||||
color: black;
|
||||
border: 1px solid #bbb;
|
||||
border-color: #ddd #aaa #aaa #ddd;
|
||||
}
|
||||
|
||||
.button:active, input[type=submit]:active, input[type=button]:active {
|
||||
background-image: url(../img/admin/nav-bg-reverse.gif);
|
||||
background-position: top;
|
||||
}
|
||||
|
||||
.button.default, input[type=submit].default, .submit-row input.default {
|
||||
border: 2px solid #5b80b2;
|
||||
background: #7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.button.default:active, input[type=submit].default:active {
|
||||
background-image: url(../img/admin/default-bg-reverse.gif);
|
||||
background-position: top;
|
||||
}
|
||||
|
||||
/* MODULES */
|
||||
|
||||
.module {
|
||||
border: 1px solid #ccc;
|
||||
margin-bottom: 5px;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.module blockquote {
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.module ul, .module ol {
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
.module h3 {
|
||||
margin-top: .6em;
|
||||
}
|
||||
|
||||
.module h2, .module caption, .inline-group h2 {
|
||||
margin: 0;
|
||||
padding: 2px 5px 3px 5px;
|
||||
font-size: 11px;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
background: #7CA0C7 url(../img/admin/default-bg.gif) top left repeat-x;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.module table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* MESSAGES & ERRORS */
|
||||
|
||||
ul.messagelist {
|
||||
padding: 0 0 5px 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ul.messagelist li {
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
padding: 4px 5px 4px 25px;
|
||||
margin: 0 0 3px 0;
|
||||
border-bottom: 1px solid #ddd;
|
||||
color: #666;
|
||||
background: #ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat;
|
||||
}
|
||||
/******** User feedback messages ********/
|
||||
ul.messages {
|
||||
padding: 0 0 5px 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ul.messages li {
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
padding: 4px 5px 4px 25px;
|
||||
margin: 0 0 3px 0;
|
||||
border-bottom: 1px solid #ddd;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.info,
|
||||
.success,
|
||||
.warning,
|
||||
.error,
|
||||
.validation {
|
||||
padding: 4px 5px 4px 25px;
|
||||
margin: 0 0 3px 0;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.info {
|
||||
background: #ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat;
|
||||
}
|
||||
|
||||
.success {
|
||||
background: #ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background: #ffc url(../img/admin/icon_alert.gif) 5px .3em no-repeat;
|
||||
}
|
||||
|
||||
.error {
|
||||
background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
|
||||
}
|
||||
/******** /User feedback messages ********/
|
||||
|
||||
.errornote {
|
||||
font-size: 12px !important;
|
||||
display: block;
|
||||
padding: 4px 5px 4px 25px;
|
||||
margin: 0 0 3px 0;
|
||||
border: 1px solid red;
|
||||
color: red;
|
||||
background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
|
||||
}
|
||||
|
||||
ul.errorlist {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.errorlist li {
|
||||
font-size: 12px !important;
|
||||
display: block;
|
||||
padding: 4px 5px 4px 25px;
|
||||
margin: 0 0 3px 0;
|
||||
border: 1px solid red;
|
||||
color: white;
|
||||
background: red url(../img/admin/icon_alert.gif) 5px .3em no-repeat;
|
||||
}
|
||||
|
||||
td ul.errorlist {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
td ul.errorlist li {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.errors {
|
||||
background: #ffc;
|
||||
}
|
||||
|
||||
.errors input, .errors select {
|
||||
border: 1px solid red;
|
||||
}
|
||||
|
||||
div.system-message {
|
||||
background: #ffc;
|
||||
margin: 10px;
|
||||
padding: 6px 8px;
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
padding: 4px 5px 4px 25px;
|
||||
margin: 0;
|
||||
color: red;
|
||||
background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: 12px;
|
||||
padding: 5px 0 0 12px;
|
||||
}
|
||||
|
||||
/* BREADCRUMBS */
|
||||
|
||||
div.breadcrumbs {
|
||||
background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
|
||||
padding: 2px 8px 3px 8px;
|
||||
font-size: 11px;
|
||||
color: #999;
|
||||
border-top: 1px solid white;
|
||||
border-bottom: 1px solid #ccc;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* ACTION ICONS */
|
||||
|
||||
.addlink {
|
||||
padding-left: 12px;
|
||||
background: url(../img/admin/icon_addlink.gif) 0 .2em no-repeat;
|
||||
}
|
||||
|
||||
.changelink {
|
||||
padding-left: 12px;
|
||||
background: url(../img/admin/icon_changelink.gif) 0 .2em no-repeat;
|
||||
}
|
||||
|
||||
.deletelink {
|
||||
padding-left: 12px;
|
||||
background: url(../img/admin/icon_deletelink.gif) 0 .25em no-repeat;
|
||||
}
|
||||
|
||||
a.deletelink:link, a.deletelink:visited {
|
||||
color: #CC3434;
|
||||
}
|
||||
|
||||
a.deletelink:hover {
|
||||
color: #993333;
|
||||
}
|
||||
|
||||
/* OBJECT TOOLS */
|
||||
|
||||
.object-tools {
|
||||
font-size: 10px;
|
||||
font-weight: bold;
|
||||
font-family: Arial,Helvetica,sans-serif;
|
||||
padding-left: 0;
|
||||
float: right;
|
||||
position: relative;
|
||||
margin-top: -2.4em;
|
||||
margin-bottom: -2em;
|
||||
}
|
||||
|
||||
.form-row .object-tools {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
float: none;
|
||||
height: 2em;
|
||||
padding-left: 3.5em;
|
||||
}
|
||||
|
||||
.object-tools li {
|
||||
display: block;
|
||||
float: left;
|
||||
background: url(../img/admin/tool-left.gif) 0 0 no-repeat;
|
||||
padding: 0 0 0 8px;
|
||||
margin-left: 2px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.object-tools li:hover {
|
||||
background: url(../img/admin/tool-left_over.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
.object-tools a:link, .object-tools a:visited {
|
||||
display: block;
|
||||
float: left;
|
||||
color: white;
|
||||
padding: .1em 14px .1em 8px;
|
||||
height: 14px;
|
||||
background: #999 url(../img/admin/tool-right.gif) 100% 0 no-repeat;
|
||||
}
|
||||
|
||||
.object-tools a:hover, .object-tools li:hover a {
|
||||
background: #5b80b2 url(../img/admin/tool-right_over.gif) 100% 0 no-repeat;
|
||||
}
|
||||
|
||||
.object-tools a.viewsitelink, .object-tools a.golink {
|
||||
background: #999 url(../img/admin/tooltag-arrowright.gif) top right no-repeat;
|
||||
padding-right: 28px;
|
||||
}
|
||||
|
||||
.object-tools a.viewsitelink:hover, .object-tools a.golink:hover {
|
||||
background: #5b80b2 url(../img/admin/tooltag-arrowright_over.gif) top right no-repeat;
|
||||
}
|
||||
|
||||
.object-tools a.addlink {
|
||||
background: #999 url(../img/admin/tooltag-add.gif) top right no-repeat;
|
||||
padding-right: 28px;
|
||||
}
|
||||
|
||||
.object-tools a.addlink:hover {
|
||||
background: #5b80b2 url(../img/admin/tooltag-add_over.gif) top right no-repeat;
|
||||
}
|
||||
|
||||
/* OBJECT HISTORY */
|
||||
|
||||
table#change-history {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table#change-history tbody th {
|
||||
width: 16em;
|
||||
}
|
||||
|
||||
/* PAGE STRUCTURE */
|
||||
|
||||
#container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
min-width: 760px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin: 10px 15px;
|
||||
}
|
||||
|
||||
#header {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#content-main {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#content-related {
|
||||
float: right;
|
||||
width: 18em;
|
||||
position: relative;
|
||||
margin-right: -19em;
|
||||
}
|
||||
|
||||
#footer {
|
||||
clear: both;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* COLUMN TYPES */
|
||||
|
||||
.colMS {
|
||||
margin-right: 20em !important;
|
||||
}
|
||||
|
||||
.colSM {
|
||||
margin-left: 20em !important;
|
||||
}
|
||||
|
||||
.colSM #content-related {
|
||||
float: left;
|
||||
margin-right: 0;
|
||||
margin-left: -19em;
|
||||
}
|
||||
|
||||
.colSM #content-main {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.popup .colM {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.subcol {
|
||||
float: left;
|
||||
width: 46%;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.dashboard #content {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
/* HEADER */
|
||||
|
||||
#header {
|
||||
background: #417690;
|
||||
color: #ffc;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#header a:link, #header a:visited {
|
||||
color: white;
|
||||
}
|
||||
|
||||
#header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#branding h1 {
|
||||
padding: 0 10px;
|
||||
font-size: 18px;
|
||||
margin: 8px 0;
|
||||
font-weight: normal;
|
||||
color: #f4f379;
|
||||
}
|
||||
|
||||
#branding h2 {
|
||||
padding: 0 10px;
|
||||
font-size: 14px;
|
||||
margin: -8px 0 8px 0;
|
||||
font-weight: normal;
|
||||
color: #ffc;
|
||||
}
|
||||
|
||||
#user-tools {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding: 1.2em 10px;
|
||||
font-size: 11px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* SIDEBAR */
|
||||
|
||||
#content-related h3 {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
#content-related h4 {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
#content-related .module h2 {
|
||||
background: #eee url(../img/admin/nav-bg.gif) bottom left repeat-x;
|
||||
color: #666;
|
||||
}
|
||||
|
793
static/secr/css/custom.css
Normal file
|
@ -0,0 +1,793 @@
|
|||
/*
|
||||
Overrides (override existing properties from Django admin css)
|
||||
*/
|
||||
|
||||
#container {
|
||||
margin: 0 auto;
|
||||
width: 760px;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin: 10px auto;
|
||||
}
|
||||
|
||||
#footer {
|
||||
/* background-color: #DDDDDD;
|
||||
background-color: #EEEEFF; */
|
||||
color: #888888;
|
||||
margin-top: 8px;
|
||||
padding: 6px 0;
|
||||
text-align: left;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#footer-logo {
|
||||
border-top: 1px solid #DDDDDD;
|
||||
padding-top: 9px;
|
||||
}
|
||||
|
||||
#footer-version {
|
||||
float: left;
|
||||
border-top: 1px solid #DDDDDD;
|
||||
padding-top: 9px;
|
||||
}
|
||||
|
||||
#footer ul {
|
||||
margin: 0;
|
||||
padding: 0 0 9px;
|
||||
}
|
||||
|
||||
#footer li {
|
||||
list-style-type: none;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
/*.inline-group th, td {
|
||||
padding: 3px;
|
||||
}*/
|
||||
|
||||
.object-tools {
|
||||
float: left;
|
||||
margin-bottom: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.errorlist li {
|
||||
background: #FF8080 url(../img/admin/icon_alert.gif) no-repeat scroll 5px 0.3em;
|
||||
border: 1px solid #FF8080;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
General Styles
|
||||
========================================================================== */
|
||||
|
||||
.alert {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.breadcrumbs td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.internal-form {
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.message-right {
|
||||
float: right;
|
||||
color: Red;
|
||||
}
|
||||
|
||||
.locked {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.locked a {
|
||||
color: Red;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.locked a:hover {
|
||||
color: Blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.unlocked {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.unlocked a {
|
||||
color: White;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.unlocked a:hover {
|
||||
color: Blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.login {
|
||||
float: right;
|
||||
color: white;
|
||||
font-size: 12px;
|
||||
vertical-align: bottom;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.menu li {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
ul.none li {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.required {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.loading {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
td.border-right {
|
||||
border-right: #ccc 1px solid;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
tr.green-row {
|
||||
background-color: #A5EEAA;
|
||||
}
|
||||
|
||||
tr.red-row {
|
||||
background-color: #FF66FF;
|
||||
}
|
||||
|
||||
table.full-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.new-style th {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Buttons
|
||||
========================================================================== */
|
||||
|
||||
.action-group ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 7px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.action-group li {
|
||||
list-style-type: none;
|
||||
padding: 4px;}
|
||||
|
||||
.button.standard, input.standard[type="submit"] {
|
||||
background: none;
|
||||
}
|
||||
|
||||
.button-group {
|
||||
clear: both;
|
||||
width: auto;
|
||||
height: 2.5em;
|
||||
padding: 4px 7px;
|
||||
background: white url(../img/admin/nav-bg.gif) 0 100% repeat-x;
|
||||
border: 0 solid #ccc;
|
||||
border-top: 1px solid #ccc;
|
||||
margin: 5px 0 0 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.button-group ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 7px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.button-group li {
|
||||
display: inline;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
button.fancy:hover {
|
||||
background-color: #ffc;
|
||||
}
|
||||
|
||||
/* Navigation Bar
|
||||
========================================================================== */
|
||||
|
||||
#nav {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul#list-nav {
|
||||
padding-left: 0;
|
||||
margin-left: 0;
|
||||
background-color: #36648B;
|
||||
color: White;
|
||||
/* float: left; */
|
||||
width: 100%;
|
||||
/* font-family: arial, helvetica, sans-serif; */
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
ul#list-nav li { display: inline; }
|
||||
|
||||
|
||||
ul#list-nav li a {
|
||||
/*padding: 0.2em 1em; */
|
||||
padding: 0.2em;
|
||||
/*width: 19.1%; */
|
||||
width: 23%;
|
||||
background-color: #36648B;
|
||||
color: White;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
float: left;
|
||||
border-left: 1px solid #fff;
|
||||
}
|
||||
|
||||
ul#list-nav li.leftmost a {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
ul#list-nav li a:hover {
|
||||
background-color: #4F94CD;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
ul#list-nav a.current {
|
||||
background-color: #7CA0C7;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Announcement Tool
|
||||
========================================================================== */
|
||||
|
||||
#announce-table input[type="text"] {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#announce-table #id_body {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#announce-table td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
#announce-table th {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
#announce-confirm {
|
||||
color: black;
|
||||
font-family: "Courier New",Courier,monospace;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Area Tool
|
||||
========================================================================== */
|
||||
|
||||
#areas-list-table td {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
#area-awp-table input[type="text"] {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#area-add-table #id_comments {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#area-add-table #id_name {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Draft Tool
|
||||
========================================================================== */
|
||||
|
||||
input.draft-file-input {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
.draft-container #id_title {
|
||||
height: 4em;
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
.draft-container #id_pages {
|
||||
width: 4em;
|
||||
}
|
||||
|
||||
.draft-container #id_internal_comments {
|
||||
height: 4em;
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
.draft-container #id_abstract {
|
||||
height: 15em;
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#draft-confirm-email th {
|
||||
text-align: right;
|
||||
font-weight: normal;
|
||||
padding-right: 2em;
|
||||
}
|
||||
|
||||
#draft-file-table label {
|
||||
width: 12em;
|
||||
/* text-align: right;
|
||||
margin-right: 0.5em; */
|
||||
margin-left: 1em;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#draft-search-table th {
|
||||
width: 15em;
|
||||
}
|
||||
|
||||
#draft-view-col1 {
|
||||
float: left;
|
||||
width: 600px;
|
||||
margin: 0;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
}
|
||||
|
||||
#draft-view-col2 {
|
||||
float: left;
|
||||
width: 157px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#draft-edit-col1 {
|
||||
float: left;
|
||||
width: 620px;
|
||||
margin: 0;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
}
|
||||
|
||||
#draft-edit-col2 {
|
||||
float: left;
|
||||
width: 137px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#draft-edit-table #id_name {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
#draft-email-table #id_cc {
|
||||
width: 60em;
|
||||
}
|
||||
|
||||
#draft-email-table #id_subject {
|
||||
width: 60em;
|
||||
}
|
||||
|
||||
#draft-email-table #id_to {
|
||||
width: 60em;
|
||||
}
|
||||
|
||||
#draft-email-table #id_body {
|
||||
width: 60em;
|
||||
}
|
||||
|
||||
#draft-search-form #id_document_title {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#draft-search-form #id_group {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#draft-search-form #id_filename {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#draft-obsoletes-table input[type="text"] {
|
||||
width: 3.5em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Group Tool
|
||||
========================================================================== */
|
||||
|
||||
.awp-form input {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
#groups-table #id_name,#id_list_email,#id_list_subscribe,#id_list_archive {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#groups-table #id_comments {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
#group-description-form #id_description {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
#group-search-results td {
|
||||
font-size: xx-small;
|
||||
}
|
||||
|
||||
#groups-people-col1 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
#groups-people-col2 {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
#groups-view-col1 {
|
||||
float: left;
|
||||
width: 620px;
|
||||
margin: 0;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
}
|
||||
|
||||
#groups-view-col2 {
|
||||
float: left;
|
||||
width: 137px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Meeting Tool
|
||||
========================================================================== */
|
||||
|
||||
#non-session-edit-form input[type="text"] {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
#additional-info-form #id_text {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
#meetings-schedule-form input[type="text"] {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
#timeslot-form #id_time,#id_duration {
|
||||
width: 5em;
|
||||
}
|
||||
|
||||
#timeslot-form #id_name {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
#timeslot-form th {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
#id_duration input {
|
||||
width: 5em;
|
||||
}
|
||||
|
||||
tr.break td {
|
||||
border-top: 2px solid black;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Proceedings Tool
|
||||
========================================================================== */
|
||||
|
||||
input#id_slide_name {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
input#id_title {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
div.interim-scroll {
|
||||
height: 300px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
color: #FF0000;
|
||||
}
|
||||
|
||||
.internal-form label {
|
||||
float: left;
|
||||
width: 100px;
|
||||
text-align: right;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.internal-form select {
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
#interim-directory-table td {
|
||||
padding-left: 2em;
|
||||
padding-right: 2em;
|
||||
}
|
||||
|
||||
#proceedings-interim-table td {
|
||||
white-space:pre-wrap;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
/* font-family: "Courier",monospace; */
|
||||
}
|
||||
|
||||
#proceedings-list-table td {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
#proceedings-add-table th {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
#proceedings-edit-table th {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
#proceedings-upload-table th {
|
||||
text-align: right;
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
#proceedings-view-first-col {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
#proceedings-left-col {
|
||||
float: left;
|
||||
width: 378px;
|
||||
margin: 0;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
}
|
||||
|
||||
#proceedings-right-col {
|
||||
float: left;
|
||||
width: 377px;
|
||||
margin: 0;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-left: 1px solid #CCCCCC;
|
||||
}
|
||||
|
||||
td.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Role Tool
|
||||
========================================================================== */
|
||||
|
||||
.name-autocomplete {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Rolodex Tool
|
||||
========================================================================== */
|
||||
|
||||
form[id^="rolodex-"] input[type=text] {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
form[id^="rolodex-"] #id_address {
|
||||
width: 30em;
|
||||
height: 7em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Session Request Tool
|
||||
========================================================================== */
|
||||
|
||||
tr.bg1 {
|
||||
background: #CCCCCC;
|
||||
}
|
||||
|
||||
tr.bg2 {
|
||||
background: #EEEEEE;
|
||||
}
|
||||
|
||||
/*
|
||||
table#sessions-new-table td {
|
||||
padding: 2px;
|
||||
border-spacing: 2px;
|
||||
border: 1;
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
#id_number_attendee {
|
||||
width: 3em;
|
||||
}
|
||||
|
||||
#id_conflict1 { width: 37em; }
|
||||
#id_conflict2 { width: 37em; }
|
||||
#id_conflict3 { width: 37em; }
|
||||
|
||||
ul.session-buttons {
|
||||
padding-left: 2px;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.session-buttons li {
|
||||
list-style-type: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Telechat Tool
|
||||
========================================================================== */
|
||||
|
||||
#telechat-sidebar {
|
||||
float: left;
|
||||
width: 294px;
|
||||
background: url("../img/admin/default-bg.gif") repeat-x scroll left top #7CA0C7;
|
||||
color: white;
|
||||
min-height: 500px;
|
||||
padding: 0 0 0 6px;
|
||||
}
|
||||
|
||||
#telechat-sidebar h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#telechat-sidebar ul {
|
||||
/*list-style-type: none;*/
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#telechat-sidebar ul.doc-list {
|
||||
list-style-type: circle;
|
||||
}
|
||||
|
||||
ul.doc-list li {
|
||||
list-style-type: circle;
|
||||
}
|
||||
|
||||
#telechat-sidebar ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
|
||||
#telechat-sidebar a:link {
|
||||
color: #FFFF99;
|
||||
}
|
||||
|
||||
#telechat-sidebar a:visited {
|
||||
color: #FFFF99;
|
||||
}
|
||||
|
||||
#telechat-sidebar a:hover {
|
||||
color: #FF0000;
|
||||
}
|
||||
|
||||
#telechat-sidebar li.level1 {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
#telechat-positions-table td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*
|
||||
#telechat-sidebar ol {
|
||||
list-style-position: outside;
|
||||
counter-reset: item;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#telechat-sidebar li { display: block }
|
||||
#telechat-sidebar li li { display: block; padding: 3px 3px 3px 3px; }
|
||||
#telechat-sidebar li:before { content: counters(item, ".") " "; counter-increment: item }
|
||||
*/
|
||||
|
||||
#telechat-main {
|
||||
float: left;
|
||||
padding-left: 20px;
|
||||
width: 640px;
|
||||
}
|
||||
|
||||
#telechat-main pre {
|
||||
white-space: pre-wrap; /* css-3 */
|
||||
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
||||
white-space: -pre-wrap; /* Opera 4-6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 */
|
||||
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||
}
|
||||
|
||||
.right-nav {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.telechat-warn h3 {
|
||||
color: white;
|
||||
text-align: center;
|
||||
background-color: #FF66FF;
|
||||
}
|
||||
|
||||
.telechat-button {
|
||||
height: 2.5em;
|
||||
padding: 4px 7px;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.telechat-button ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 7px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.telechat-button li {
|
||||
list-style-type: none;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Redesign Section
|
||||
========================================================================== */
|
||||
|
||||
table.amstable {
|
||||
background-color: #F2F2E6;
|
||||
}
|
||||
|
||||
table.amstable th {
|
||||
color: #666666;
|
||||
font-size: 12px;
|
||||
font-weight: normal !important;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table.amsview th {
|
||||
border-bottom: none;
|
||||
color: #666666;
|
||||
font-size: 13px;
|
||||
padding: 4px 10px 4px 4px;
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table.amsview td {
|
||||
border-bottom: none;
|
||||
vertical-align: middle;
|
||||
padding: 4px 10px 4px 4px;
|
||||
}
|
||||
|
||||
.button-group {
|
||||
background: #F2F2E6;
|
||||
}
|
||||
|
||||
td, th, li, h2 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.module h2 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
thead th {
|
||||
font-size: 12px;
|
||||
}
|
354
static/secr/css/forms.css
Normal file
|
@ -0,0 +1,354 @@
|
|||
@import url('widgets.css');
|
||||
|
||||
/* FORM ROWS */
|
||||
|
||||
.form-row {
|
||||
overflow: hidden;
|
||||
padding: 8px 12px;
|
||||
font-size: 11px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.form-row img, .form-row input {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
form .form-row p {
|
||||
padding-left: 0;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
/* FORM LABELS */
|
||||
|
||||
form h4 {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: normal !important;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.required label, label.required {
|
||||
font-weight: bold !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
/* RADIO BUTTONS */
|
||||
|
||||
form ul.radiolist li {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
form ul.radiolist label {
|
||||
float: none;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
form ul.inline {
|
||||
margin-left: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
form ul.inline li {
|
||||
float: left;
|
||||
padding-right: 7px;
|
||||
}
|
||||
|
||||
/* ALIGNED FIELDSETS */
|
||||
|
||||
.aligned label {
|
||||
display: block;
|
||||
padding: 3px 10px 0 0;
|
||||
float: left;
|
||||
width: 8em;
|
||||
}
|
||||
|
||||
.aligned ul label {
|
||||
display: inline;
|
||||
float: none;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
|
||||
width: 350px;
|
||||
}
|
||||
|
||||
form .aligned p, form .aligned ul {
|
||||
margin-left: 7em;
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
form .aligned table p {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
form .aligned p.help {
|
||||
padding-left: 38px;
|
||||
}
|
||||
|
||||
.aligned .vCheckboxLabel {
|
||||
float: none !important;
|
||||
display: inline;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
|
||||
width: 610px;
|
||||
}
|
||||
|
||||
.checkbox-row p.help {
|
||||
margin-left: 0;
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
fieldset .field-box {
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
/* WIDE FIELDSETS */
|
||||
|
||||
.wide label {
|
||||
width: 15em !important;
|
||||
}
|
||||
|
||||
form .wide p {
|
||||
margin-left: 15em;
|
||||
}
|
||||
|
||||
form .wide p.help {
|
||||
padding-left: 38px;
|
||||
}
|
||||
|
||||
.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
|
||||
width: 450px;
|
||||
}
|
||||
|
||||
/* COLLAPSED FIELDSETS */
|
||||
|
||||
fieldset.collapsed * {
|
||||
display: none;
|
||||
}
|
||||
|
||||
fieldset.collapsed h2, fieldset.collapsed {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
fieldset.collapsed h2 {
|
||||
background-image: url(../img/admin/nav-bg.gif);
|
||||
background-position: bottom left;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
fieldset.collapsed .collapse-toggle {
|
||||
background: transparent;
|
||||
display: inline !important;
|
||||
}
|
||||
|
||||
/* MONOSPACE TEXTAREAS */
|
||||
|
||||
fieldset.monospace textarea {
|
||||
font-family: "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace;
|
||||
}
|
||||
|
||||
/* SUBMIT ROW */
|
||||
|
||||
.submit-row {
|
||||
padding: 5px 7px;
|
||||
text-align: right;
|
||||
background: white url(../img/admin/nav-bg.gif) 0 100% repeat-x;
|
||||
border: 1px solid #ccc;
|
||||
margin: 5px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.submit-row input {
|
||||
margin: 0 0 0 5px;
|
||||
}
|
||||
|
||||
.submit-row p {
|
||||
margin: 0.3em;
|
||||
}
|
||||
|
||||
.submit-row p.deletelink-box {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.submit-row .deletelink {
|
||||
background: url(../img/admin/icon_deletelink.gif) 0 50% no-repeat;
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
/* CUSTOM FORM FIELDS */
|
||||
|
||||
.vSelectMultipleField {
|
||||
vertical-align: top !important;
|
||||
}
|
||||
|
||||
.vCheckboxField {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.vDateField, .vTimeField {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.vURLField {
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
.vLargeTextField, .vXMLLargeTextField {
|
||||
width: 48em;
|
||||
}
|
||||
|
||||
.flatpages-flatpage #id_content {
|
||||
height: 40.2em;
|
||||
}
|
||||
|
||||
.module table .vPositiveSmallIntegerField {
|
||||
width: 2.2em;
|
||||
}
|
||||
|
||||
.vTextField {
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
.vIntegerField {
|
||||
width: 5em;
|
||||
}
|
||||
|
||||
.vForeignKeyRawIdAdminField {
|
||||
width: 5em;
|
||||
}
|
||||
|
||||
/* INLINES */
|
||||
|
||||
.inline-group {
|
||||
padding: 0;
|
||||
border: 1px solid #ccc;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.inline-group .aligned label {
|
||||
width: 8em;
|
||||
}
|
||||
|
||||
.inline-related {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.inline-related h3 {
|
||||
margin: 0;
|
||||
color: #666;
|
||||
padding: 3px 5px;
|
||||
font-size: 11px;
|
||||
background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.inline-related h3 span.delete {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.inline-related h3 span.delete label {
|
||||
margin-left: 2px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.inline-related fieldset {
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.inline-related fieldset.module h3 {
|
||||
margin: 0;
|
||||
padding: 2px 5px 3px 5px;
|
||||
font-size: 11px;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
background: #bcd;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.inline-group .tabular fieldset.module {
|
||||
border: none;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.inline-related.tabular fieldset.module table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.last-related fieldset {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.inline-group .tabular tr.has_original td {
|
||||
padding-top: 2em;
|
||||
}
|
||||
|
||||
.inline-group .tabular tr td.original {
|
||||
padding: 2px 0 0 0;
|
||||
width: 0;
|
||||
_position: relative;
|
||||
}
|
||||
|
||||
.inline-group .tabular th.original {
|
||||
width: 0px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.inline-group .tabular td.original p {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
height: 1.1em;
|
||||
padding: 2px 7px;
|
||||
overflow: hidden;
|
||||
font-size: 9px;
|
||||
font-weight: bold;
|
||||
color: #666;
|
||||
_width: 700px;
|
||||
}
|
||||
|
||||
.inline-group ul.tools {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.inline-group ul.tools li {
|
||||
display: inline;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.inline-group div.add-row,
|
||||
.inline-group .tabular tr.add-row td {
|
||||
color: #666;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
|
||||
}
|
||||
|
||||
.inline-group .tabular tr.add-row td {
|
||||
padding: 4px 5px 3px;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.inline-group ul.tools a.add,
|
||||
.inline-group div.add-row a,
|
||||
.inline-group .tabular tr.add-row td a {
|
||||
background: url(../img/admin/icon_addlink.gif) 0 50% no-repeat;
|
||||
padding-left: 14px;
|
||||
font-size: 11px;
|
||||
outline: 0; /* Remove dotted border around link */
|
||||
}
|
||||
|
||||
.empty-form {
|
||||
display: none;
|
||||
}
|
50
static/secr/css/ietf.js
Normal file
|
@ -0,0 +1,50 @@
|
|||
function getCookie(name){
|
||||
var cname = name + "=";
|
||||
var dc = document.cookie;
|
||||
if (dc.length > 0) {
|
||||
begin = dc.indexOf(cname);
|
||||
if (begin != -1) {
|
||||
begin += cname.length;
|
||||
end = dc.indexOf(";", begin);
|
||||
if (end == -1) end = dc.length;
|
||||
return unescape(dc.substring(begin, end));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function setCookie(name, value, expires, path, domain, secure) {
|
||||
document.cookie = name + "=" + escape(value) +
|
||||
((expires == null) ? "" : "; expires=" + expires) +
|
||||
((path == null) ? "" : "; path=" + path) +
|
||||
((domain == null) ? "" : "; domain=" + domain) +
|
||||
((secure == null) ? "" : "; secure");
|
||||
}
|
||||
|
||||
function delCookie (name,path,domain) {
|
||||
if (getCookie(name)) {
|
||||
document.cookie = name + "=" +
|
||||
((path == null) ? "" : "; path=" + path) +
|
||||
((domain == null) ? "" : "; domain=" + domain) +
|
||||
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
|
||||
}
|
||||
}
|
||||
|
||||
function setStyle (cstyleSheet) {
|
||||
var styleSheet = cstyleSheet;
|
||||
if(styleSheet=="0") { styleSheet = getCookie('styleSheet'); }
|
||||
var sheet1 = document.getElementById("sheet1");
|
||||
var sheet2 = document.getElementById("sheet2");
|
||||
var sheet3 = document.getElementById("sheet3");
|
||||
var sheet4 = document.getElementById("sheet4");
|
||||
sheet1.disabled=true;
|
||||
sheet2.disabled=true;
|
||||
sheet3.disabled=true;
|
||||
sheet4.disabled=true;
|
||||
if(styleSheet=="1") { sheet1.disabled=false; }
|
||||
else if(styleSheet=="2") { sheet2.disabled=false; }
|
||||
else if(styleSheet=="3") { sheet3.disabled=false; }
|
||||
else if(styleSheet=="4") { sheet4.disabled=false; }
|
||||
else { styleSheet="1"; sheet1.disabled=false; }
|
||||
setCookie('styleSheet',styleSheet,"Mon, 31-Dec-2035 23:59:59 GMT","/");
|
||||
}
|
132
static/secr/css/ipr.css
Normal file
|
@ -0,0 +1,132 @@
|
|||
form ul {
|
||||
list-style-type:none;
|
||||
padding-left:0;
|
||||
}
|
||||
form li {
|
||||
overflow:auto;
|
||||
margin-top:15px;
|
||||
}
|
||||
form li label {
|
||||
width:200px;
|
||||
float:left;
|
||||
text-align:right;
|
||||
margin:2px 10px 0 0;
|
||||
clear:left;
|
||||
}
|
||||
.errorlist li {
|
||||
background:red;
|
||||
color:white;
|
||||
font-weight:bold;
|
||||
padding:5px;
|
||||
margin:0 0 5px 0;
|
||||
}
|
||||
form ol label {
|
||||
width:auto;
|
||||
}
|
||||
form ol li li {
|
||||
clear:left;
|
||||
margin:5px 0 0 40px;
|
||||
}
|
||||
form ol li label {
|
||||
float:none;
|
||||
}
|
||||
|
||||
.autocompletes a img {
|
||||
border:1px solid white;
|
||||
}
|
||||
.autocompletes a:hover img {
|
||||
border:1px solid gray;
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
width:500px;
|
||||
}
|
||||
body {
|
||||
font-family: verdana, arial, sans-serif;
|
||||
}
|
||||
.alert {
|
||||
color: red;
|
||||
}
|
||||
|
||||
#content form fieldset#update_license_declaration input[type=checkbox] {
|
||||
margin-left: 55px;
|
||||
}
|
||||
#content form input[type=text] {
|
||||
width: 500px;
|
||||
}
|
||||
#content form {
|
||||
width: 900px;
|
||||
}
|
||||
#content fieldset {
|
||||
width: 860px;
|
||||
}
|
||||
#content form label[for=id_document_sections_0] {
|
||||
height: 60px;
|
||||
}
|
||||
#content fieldset ol input {
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
#id_notes {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
width: 500px;
|
||||
}
|
||||
form ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
form li {
|
||||
overflow: auto;
|
||||
margin-top: 15px;
|
||||
}
|
||||
form li label {
|
||||
width: 250px;
|
||||
/* text-align: right; */
|
||||
margin: 2px 10px 0 0;
|
||||
/* clear: both; */
|
||||
}
|
||||
form li input {
|
||||
margin-left: 15px;
|
||||
text-align: top;
|
||||
}
|
||||
form li label input {
|
||||
margin: 0;
|
||||
}
|
||||
form li textarea {
|
||||
margin-left: 15px;
|
||||
}
|
||||
.autocompletes a img {
|
||||
border: 1px solid white;
|
||||
}
|
||||
.autocompletes a:hover img {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
/*
|
||||
#id_update_ipr {
|
||||
text-align: center;
|
||||
display: block;
|
||||
}
|
||||
*/
|
||||
|
||||
/* AMS Changes follow */
|
||||
.button-group li {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.ipr-container {
|
||||
width: 900px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
#rfc_num_list {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/* override main content div width */
|
||||
#content {
|
||||
margin: 10px auto;
|
||||
width: 900px;
|
||||
}
|
486
static/secr/css/jquery-ui-1.8.1.custom.css
vendored
Normal file
|
@ -0,0 +1,486 @@
|
|||
/*
|
||||
* jQuery UI CSS Framework
|
||||
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||
*/
|
||||
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden { display: none; }
|
||||
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
.ui-helper-clearfix { display: inline-block; }
|
||||
/* required comment for clearfix to work in Opera \*/
|
||||
* html .ui-helper-clearfix { height:1%; }
|
||||
.ui-helper-clearfix { display:block; }
|
||||
/* end clearfix */
|
||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled { cursor: default !important; }
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
|
||||
/*
|
||||
* jQuery UI CSS Framework
|
||||
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
|
||||
.ui-widget-content a { color: #333333; }
|
||||
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
|
||||
.ui-widget-header a { color: #ffffff; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
|
||||
.ui-widget :active { outline: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background-position: -16px -144px; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
|
||||
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
||||
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
||||
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
||||
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
|
||||
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* Resizable
|
||||
----------------------------------*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion
|
||||
----------------------------------*/
|
||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
|
||||
/* IE7-/Win - Fix extra vertical space in lists */
|
||||
.ui-accordion a { zoom: 1; }
|
||||
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
|
||||
----------------------------------*/
|
||||
.ui-autocomplete { position: absolute; cursor: default; }
|
||||
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
|
||||
|
||||
/* workarounds */
|
||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
||||
|
||||
/* Menu
|
||||
----------------------------------*/
|
||||
.ui-menu {
|
||||
list-style:none;
|
||||
padding: 2px;
|
||||
margin: 0;
|
||||
display:block;
|
||||
}
|
||||
.ui-menu .ui-menu {
|
||||
margin-top: -3px;
|
||||
}
|
||||
.ui-menu .ui-menu-item {
|
||||
margin:0;
|
||||
padding: 0;
|
||||
zoom: 1;
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 100%;
|
||||
}
|
||||
.ui-menu .ui-menu-item a {
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
padding:.2em .4em;
|
||||
line-height:1.5;
|
||||
zoom:1;
|
||||
}
|
||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
||||
.ui-menu .ui-menu-item a.ui-state-active {
|
||||
font-weight: normal;
|
||||
margin: -1px;
|
||||
}
|
||||
/* Button
|
||||
----------------------------------*/
|
||||
|
||||
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
|
||||
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
||||
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
||||
.ui-button-icons-only { width: 3.4em; }
|
||||
button.ui-button-icons-only { width: 3.7em; }
|
||||
|
||||
/*button text element */
|
||||
.ui-button .ui-button-text { display: block; line-height: 1.4; }
|
||||
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
||||
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
||||
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
|
||||
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
||||
/* no icon support for input elements, provide padding by default */
|
||||
input.ui-button { padding: .4em 1em; }
|
||||
|
||||
/*button icon element(s) */
|
||||
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
||||
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
||||
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
|
||||
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||
|
||||
/*button sets*/
|
||||
.ui-buttonset { margin-right: 7px; }
|
||||
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
||||
|
||||
/* workarounds */
|
||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Dialog
|
||||
----------------------------------*/
|
||||
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||
/* Slider
|
||||
----------------------------------*/
|
||||
.ui-slider { position: relative; text-align: left; }
|
||||
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
||||
|
||||
.ui-slider-horizontal { height: .8em; }
|
||||
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||
|
||||
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
||||
----------------------------------*/
|
||||
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
|
||||
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
|
||||
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
|
||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
||||
/* Datepicker
|
||||
----------------------------------*/
|
||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||
.ui-datepicker td { border: 0; padding: 1px; }
|
||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl { direction: rtl; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
|
||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||
.ui-datepicker-cover {
|
||||
display: none; /*sorry for IE5*/
|
||||
display/**/: block; /*sorry for IE5*/
|
||||
position: absolute; /*must have*/
|
||||
z-index: -1; /*must have*/
|
||||
filter: mask(); /*must have*/
|
||||
top: -4px; /*must have*/
|
||||
left: -4px; /*must have*/
|
||||
width: 200px; /*must have*/
|
||||
height: 200px; /*must have*/
|
||||
}/* Progressbar
|
||||
----------------------------------*/
|
||||
.ui-progressbar { height:2em; text-align: left; }
|
||||
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
|
486
static/secr/css/jquery-ui-modified.css
Normal file
|
@ -0,0 +1,486 @@
|
|||
/*
|
||||
* jQuery UI CSS Framework
|
||||
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||
*/
|
||||
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden { display: none; }
|
||||
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
.ui-helper-clearfix { display: inline-block; }
|
||||
/* required comment for clearfix to work in Opera \*/
|
||||
* html .ui-helper-clearfix { height:1%; }
|
||||
.ui-helper-clearfix { display:block; }
|
||||
/* end clearfix */
|
||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled { cursor: default !important; }
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and /img */
|
||||
.ui-icon { display: inline-block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
|
||||
/*
|
||||
* jQuery UI CSS Framework
|
||||
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(/img/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
|
||||
.ui-widget-content a { color: #333333; }
|
||||
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(/img/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
|
||||
.ui-widget-header a { color: #ffffff; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(/img/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(/img/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(/img/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
|
||||
.ui-widget :active { outline: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(/img/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(/img/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(/img/ui-icons_666666_256x240.png); }
|
||||
.ui-widget-content .ui-icon {background-image: url(/img/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-header .ui-icon {background-image: url(/img/ui-icons_ffffff_256x240.png); }
|
||||
.ui-state-default .ui-icon { background-image: url(/img/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(/img/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-active .ui-icon {background-image: url(/img/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-highlight .ui-icon {background-image: url(/img/ui-icons_228ef1_256x240.png); }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(/img/ui-icons_ffd27a_256x240.png); }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background-position: -16px -144px; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
|
||||
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
||||
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
||||
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
||||
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #666666 url(/img/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
|
||||
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(/img/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* Resizable
|
||||
----------------------------------*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion
|
||||
----------------------------------*/
|
||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
|
||||
/* IE7-/Win - Fix extra vertical space in lists */
|
||||
.ui-accordion a { zoom: 1; }
|
||||
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
|
||||
----------------------------------*/
|
||||
.ui-autocomplete { position: absolute; cursor: default; }
|
||||
.ui-autocomplete-loading { background: white url('/img/ui-anim_basic_16x16.gif') right center no-repeat; }
|
||||
|
||||
/* workarounds */
|
||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
||||
|
||||
/* Menu
|
||||
----------------------------------*/
|
||||
.ui-menu {
|
||||
list-style:none;
|
||||
padding: 2px;
|
||||
margin: 0;
|
||||
display:block;
|
||||
}
|
||||
.ui-menu .ui-menu {
|
||||
margin-top: -3px;
|
||||
}
|
||||
.ui-menu .ui-menu-item {
|
||||
margin:0;
|
||||
padding: 0;
|
||||
zoom: 1;
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 100%;
|
||||
}
|
||||
.ui-menu .ui-menu-item a {
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
padding:.2em .4em;
|
||||
line-height:1.5;
|
||||
zoom:1;
|
||||
}
|
||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
||||
.ui-menu .ui-menu-item a.ui-state-active {
|
||||
font-weight: normal;
|
||||
margin: -1px;
|
||||
}
|
||||
/* Button
|
||||
----------------------------------*/
|
||||
|
||||
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
|
||||
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
||||
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
||||
.ui-button-icons-only { width: 3.4em; }
|
||||
button.ui-button-icons-only { width: 3.7em; }
|
||||
|
||||
/*button text element */
|
||||
.ui-button .ui-button-text { display: block; line-height: 1.4; }
|
||||
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
||||
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
||||
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
|
||||
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
||||
/* no icon support for input elements, provide padding by default */
|
||||
input.ui-button { padding: .4em 1em; }
|
||||
|
||||
/*button icon element(s) */
|
||||
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
||||
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
||||
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
|
||||
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||
|
||||
/*button sets*/
|
||||
.ui-buttonset { margin-right: 7px; }
|
||||
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
||||
|
||||
/* workarounds */
|
||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Dialog
|
||||
----------------------------------*/
|
||||
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||
/* Slider
|
||||
----------------------------------*/
|
||||
.ui-slider { position: relative; text-align: left; }
|
||||
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
||||
|
||||
.ui-slider-horizontal { height: .8em; }
|
||||
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||
|
||||
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
||||
----------------------------------*/
|
||||
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
|
||||
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
|
||||
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
|
||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
||||
/* Datepicker
|
||||
----------------------------------*/
|
||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||
.ui-datepicker td { border: 0; padding: 1px; }
|
||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl { direction: rtl; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
|
||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||
.ui-datepicker-cover {
|
||||
display: none; /*sorry for IE5*/
|
||||
display/**/: block; /*sorry for IE5*/
|
||||
position: absolute; /*must have*/
|
||||
z-index: -1; /*must have*/
|
||||
filter: mask(); /*must have*/
|
||||
top: -4px; /*must have*/
|
||||
left: -4px; /*must have*/
|
||||
width: 200px; /*must have*/
|
||||
height: 200px; /*must have*/
|
||||
}/* Progressbar
|
||||
----------------------------------*/
|
||||
.ui-progressbar { height:2em; text-align: left; }
|
||||
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
|
44
static/secr/css/jquery.ui.autocomplete.css
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* Autocomplete
|
||||
----------------------------------*/
|
||||
.ui-autocomplete { position: absolute; cursor: default; }
|
||||
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
|
||||
|
||||
/* workarounds */
|
||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
||||
|
||||
/* Menu
|
||||
----------------------------------*/
|
||||
.ui-menu {
|
||||
list-style:none;
|
||||
padding: 2px;
|
||||
margin: 0;
|
||||
display:block;
|
||||
}
|
||||
.ui-menu .ui-menu {
|
||||
margin-top: -3px;
|
||||
}
|
||||
.ui-menu .ui-menu-item {
|
||||
margin:0;
|
||||
padding: 0;
|
||||
zoom: 1;
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 100%;
|
||||
}
|
||||
.ui-menu .ui-menu-item a {
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
padding:.2em .4em;
|
||||
line-height:1.5;
|
||||
zoom:1;
|
||||
}
|
||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
||||
.ui-menu .ui-menu-item a.ui-state-active {
|
||||
font-weight: normal;
|
||||
margin: -1px;
|
||||
}
|
||||
|
||||
/* had to add this to override django admin base css */
|
||||
.ui-menu li {
|
||||
list-style:none;
|
||||
}
|
573
static/secr/css/redmond/jquery-ui-1.8.9.custom.css
vendored
Normal file
|
@ -0,0 +1,573 @@
|
|||
/*
|
||||
* jQuery UI CSS Framework 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Theming/API
|
||||
*/
|
||||
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden { display: none; }
|
||||
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
|
||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
.ui-helper-clearfix { display: inline-block; }
|
||||
/* required comment for clearfix to work in Opera \*/
|
||||
* html .ui-helper-clearfix { height:1%; }
|
||||
.ui-helper-clearfix { display:block; }
|
||||
/* end clearfix */
|
||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled { cursor: default !important; }
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
|
||||
/*
|
||||
* jQuery UI CSS Framework 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Theming/API
|
||||
*
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
|
||||
.ui-widget-content a { color: #222222; }
|
||||
.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
|
||||
.ui-widget-header a { color: #ffffff; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; }
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; }
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
|
||||
.ui-widget :active { outline: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
|
||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
|
||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
|
||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
|
||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
|
||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background-position: -16px -144px; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; }
|
||||
.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
|
||||
.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
|
||||
.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
|
||||
.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
|
||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
|
||||
.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
|
||||
.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
|
||||
.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
|
||||
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
|
||||
* jQuery UI Resizable 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Resizable#theming
|
||||
*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
|
||||
* jQuery UI Selectable 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Selectable#theming
|
||||
*/
|
||||
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
||||
/*
|
||||
* jQuery UI Accordion 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Accordion#theming
|
||||
*/
|
||||
/* IE/Win - Fix animation bug - #4615 */
|
||||
.ui-accordion { width: 100%; }
|
||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
|
||||
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-content-active { display: block; }
|
||||
/*
|
||||
* jQuery UI Autocomplete 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Autocomplete#theming
|
||||
*/
|
||||
.ui-autocomplete { position: absolute; cursor: default; }
|
||||
|
||||
/* workarounds */
|
||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
||||
|
||||
/*
|
||||
* jQuery UI Menu 1.8.9
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Menu#theming
|
||||
*/
|
||||
.ui-menu {
|
||||
list-style:none;
|
||||
padding: 2px;
|
||||
margin: 0;
|
||||
display:block;
|
||||
float: left;
|
||||
}
|
||||
.ui-menu .ui-menu {
|
||||
margin-top: -3px;
|
||||
}
|
||||
.ui-menu .ui-menu-item {
|
||||
margin:0;
|
||||
padding: 0;
|
||||
zoom: 1;
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 100%;
|
||||
}
|
||||
.ui-menu .ui-menu-item a {
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
padding:.2em .4em;
|
||||
line-height:1.5;
|
||||
zoom:1;
|
||||
}
|
||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
||||
.ui-menu .ui-menu-item a.ui-state-active {
|
||||
font-weight: normal;
|
||||
margin: -1px;
|
||||
}
|
||||
/*
|
||||
* jQuery UI Button 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Button#theming
|
||||
*/
|
||||
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
|
||||
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
||||
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
||||
.ui-button-icons-only { width: 3.4em; }
|
||||
button.ui-button-icons-only { width: 3.7em; }
|
||||
|
||||
/*button text element */
|
||||
.ui-button .ui-button-text { display: block; line-height: 1.4; }
|
||||
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
||||
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
||||
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
|
||||
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
|
||||
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
||||
/* no icon support for input elements, provide padding by default */
|
||||
input.ui-button { padding: .4em 1em; }
|
||||
|
||||
/*button icon element(s) */
|
||||
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
||||
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
||||
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
|
||||
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||
|
||||
/*button sets*/
|
||||
.ui-buttonset { margin-right: 7px; }
|
||||
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
||||
|
||||
/* workarounds */
|
||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
||||
/*
|
||||
* jQuery UI Dialog 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Dialog#theming
|
||||
*/
|
||||
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
||||
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||
/*
|
||||
* jQuery UI Slider 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Slider#theming
|
||||
*/
|
||||
.ui-slider { position: relative; text-align: left; }
|
||||
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
||||
|
||||
.ui-slider-horizontal { height: .8em; }
|
||||
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||
|
||||
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
|
||||
* jQuery UI Tabs 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Tabs#theming
|
||||
*/
|
||||
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
|
||||
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
|
||||
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
|
||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
||||
/*
|
||||
* jQuery UI Datepicker 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Datepicker#theming
|
||||
*/
|
||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
|
||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||
.ui-datepicker td { border: 0; padding: 1px; }
|
||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl { direction: rtl; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
|
||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||
.ui-datepicker-cover {
|
||||
display: none; /*sorry for IE5*/
|
||||
display/**/: block; /*sorry for IE5*/
|
||||
position: absolute; /*must have*/
|
||||
z-index: -1; /*must have*/
|
||||
filter: mask(); /*must have*/
|
||||
top: -4px; /*must have*/
|
||||
left: -4px; /*must have*/
|
||||
width: 200px; /*must have*/
|
||||
height: 200px; /*must have*/
|
||||
}/*
|
||||
* jQuery UI Progressbar 1.8.9
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Progressbar#theming
|
||||
*/
|
||||
.ui-progressbar { height:2em; text-align: left; }
|
||||
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
|
10
static/secr/css/telechat.css
Normal file
|
@ -0,0 +1,10 @@
|
|||
#container {
|
||||
margin: 0 auto;
|
||||
width: 960px;
|
||||
}
|
||||
|
||||
ul#list-nav li a {
|
||||
width: 19%;
|
||||
background-color: #36648B;
|
||||
}
|
||||
|
3
static/secr/css/test.css
Normal file
|
@ -0,0 +1,3 @@
|
|||
body {
|
||||
background-image:url('../img/test-background.png');
|
||||
}
|
506
static/secr/css/widgets.css
Normal file
|
@ -0,0 +1,506 @@
|
|||
/* SELECTOR (FILTER INTERFACE) */
|
||||
|
||||
.selector {
|
||||
width: 580px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.selector select {
|
||||
width: 270px;
|
||||
height: 17.2em;
|
||||
}
|
||||
|
||||
.selector-available, .selector-chosen {
|
||||
float: left;
|
||||
width: 270px;
|
||||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.selector-available h2, .selector-chosen h2 {
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.selector .selector-available h2 {
|
||||
background: white url(../img/admin/nav-bg.gif) bottom left repeat-x;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.selector .selector-filter {
|
||||
background: white;
|
||||
border: 1px solid #ccc;
|
||||
border-width: 0 1px;
|
||||
padding: 3px;
|
||||
color: #999;
|
||||
font-size: 10px;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.selector .selector-chosen .selector-filter {
|
||||
padding: 4px 5px;
|
||||
}
|
||||
|
||||
.selector .selector-available input {
|
||||
width: 230px;
|
||||
}
|
||||
|
||||
.selector ul.selector-chooser {
|
||||
float: left;
|
||||
width: 22px;
|
||||
height: 50px;
|
||||
background: url(../img/admin/chooser-bg.gif) top center no-repeat;
|
||||
margin: 8em 3px 0 3px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.selector-chooser li {
|
||||
margin: 0;
|
||||
padding: 3px;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.selector select {
|
||||
margin-bottom: 5px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.selector-add, .selector-remove {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: block;
|
||||
text-indent: -3000px;
|
||||
}
|
||||
|
||||
.selector-add {
|
||||
background: url(../img/admin/selector-add.gif) top center no-repeat;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.selector-remove {
|
||||
background: url(../img/admin/selector-remove.gif) top center no-repeat;
|
||||
}
|
||||
|
||||
a.selector-chooseall, a.selector-clearall {
|
||||
display: block;
|
||||
width: 6em;
|
||||
text-align: left;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
font-weight: bold;
|
||||
color: #666;
|
||||
padding: 3px 0 3px 18px;
|
||||
}
|
||||
|
||||
a.selector-chooseall:hover, a.selector-clearall:hover {
|
||||
color: #036;
|
||||
}
|
||||
|
||||
a.selector-chooseall {
|
||||
width: 7em;
|
||||
background: url(../img/admin/selector-addall.gif) left center no-repeat;
|
||||
}
|
||||
|
||||
a.selector-clearall {
|
||||
background: url(../img/admin/selector-removeall.gif) left center no-repeat;
|
||||
}
|
||||
|
||||
|
||||
/* STACKED SELECTORS */
|
||||
|
||||
.stacked {
|
||||
float: left;
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
.stacked select {
|
||||
width: 480px;
|
||||
height: 10.1em;
|
||||
}
|
||||
|
||||
.stacked .selector-available, .stacked .selector-chosen {
|
||||
width: 480px;
|
||||
}
|
||||
|
||||
.stacked .selector-available {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.stacked .selector-available input {
|
||||
width: 442px;
|
||||
}
|
||||
|
||||
.stacked ul.selector-chooser {
|
||||
height: 22px;
|
||||
width: 50px;
|
||||
margin: 0 0 3px 40%;
|
||||
background: url(../img/admin/chooser_stacked-bg.gif) top center no-repeat;
|
||||
}
|
||||
|
||||
.stacked .selector-chooser li {
|
||||
float: left;
|
||||
padding: 3px 3px 3px 5px;
|
||||
}
|
||||
|
||||
.stacked .selector-chooseall, .stacked .selector-clearall {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.stacked .selector-add {
|
||||
background-image: url(../img/admin/selector_stacked-add.gif);
|
||||
}
|
||||
|
||||
.stacked .selector-remove {
|
||||
background-image: url(../img/admin/selector_stacked-remove.gif);
|
||||
}
|
||||
|
||||
|
||||
/* DATE AND TIME */
|
||||
|
||||
p.datetime {
|
||||
line-height: 20px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #666;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.datetime span {
|
||||
font-size: 11px;
|
||||
color: #ccc;
|
||||
font-weight: normal;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
table p.datetime {
|
||||
font-size: 10px;
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
/* FILE UPLOADS */
|
||||
|
||||
p.file-upload {
|
||||
line-height: 20px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #666;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.file-upload a {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.file-upload .deletelink {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* CALENDARS & CLOCKS */
|
||||
|
||||
.calendarbox, .clockbox {
|
||||
margin: 5px auto;
|
||||
font-size: 11px;
|
||||
width: 16em;
|
||||
text-align: center;
|
||||
background: white;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.clockbox {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.calendar {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.calendar table {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-collapse: collapse;
|
||||
background: white;
|
||||
width: 99%;
|
||||
}
|
||||
|
||||
.calendar caption, .calendarbox h2 {
|
||||
margin: 0;
|
||||
font-size: 11px;
|
||||
text-align: center;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.calendar th {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
padding: 2px 3px;
|
||||
text-align: center;
|
||||
background: #e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.calendar td {
|
||||
font-size: 11px;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
border-top: 1px solid #eee;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.calendar td.selected a {
|
||||
background: #C9DBED;
|
||||
}
|
||||
|
||||
.calendar td.nonday {
|
||||
background: #efefef;
|
||||
}
|
||||
|
||||
.calendar td.today a {
|
||||
background: #ffc;
|
||||
}
|
||||
|
||||
.calendar td a, .timelist a {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
padding: 4px;
|
||||
text-decoration: none;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.calendar td a:hover, .timelist a:hover {
|
||||
background: #5b80b2;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.calendar td a:active, .timelist a:active {
|
||||
background: #036;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.calendarnav {
|
||||
font-size: 10px;
|
||||
text-align: center;
|
||||
color: #ccc;
|
||||
margin: 0;
|
||||
padding: 1px 3px;
|
||||
}
|
||||
|
||||
.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.calendar-shortcuts {
|
||||
background: white;
|
||||
font-size: 10px;
|
||||
line-height: 11px;
|
||||
border-top: 1px solid #eee;
|
||||
padding: 3px 0 4px;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
||||
display: block;
|
||||
position: absolute;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
background: #C9DBED url(../img/admin/default-bg.gif) bottom left repeat-x;
|
||||
padding: 1px 4px 2px 4px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.calendarnav-previous:hover, .calendarnav-next:hover {
|
||||
background: #036;
|
||||
}
|
||||
|
||||
.calendarnav-previous {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.calendarnav-next {
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.calendar-cancel {
|
||||
margin: 0 !important;
|
||||
padding: 0;
|
||||
font-size: 10px;
|
||||
background: #e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.calendar-cancel a {
|
||||
padding: 2px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
ul.timelist, .timelist li {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.timelist a {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
/* INLINE ORDERER */
|
||||
|
||||
ul.orderer {
|
||||
position: relative;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
ul.orderer li {
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 1px solid #bbb;
|
||||
border-width: 0 1px 1px 0;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
background: #e2e2e2 url(../img/admin/nav-bg-grabber.gif) repeat-y;
|
||||
}
|
||||
|
||||
ul.orderer li:hover {
|
||||
cursor: move;
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
ul.orderer li a.selector {
|
||||
margin-left: 12px;
|
||||
overflow: hidden;
|
||||
width: 83%;
|
||||
font-size: 10px !important;
|
||||
padding: 0.6em 0;
|
||||
}
|
||||
|
||||
ul.orderer li a:link, ul.orderer li a:visited {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
ul.orderer li .inline-deletelink {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
margin-top: 0.6em;
|
||||
}
|
||||
|
||||
ul.orderer li.selected {
|
||||
background-color: #f8f8f8;
|
||||
border-right-color: #f8f8f8;
|
||||
}
|
||||
|
||||
ul.orderer li.deleted {
|
||||
background: #bbb url(../img/admin/deleted-overlay.gif);
|
||||
}
|
||||
|
||||
ul.orderer li.deleted a:link, ul.orderer li.deleted a:visited {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
ul.orderer li.deleted .inline-deletelink {
|
||||
background-image: url(../img/admin/inline-restore.png);
|
||||
}
|
||||
|
||||
ul.orderer li.deleted:hover, ul.orderer li.deleted a.selector:hover {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* EDIT INLINE */
|
||||
|
||||
.inline-deletelink {
|
||||
display: block;
|
||||
text-indent: -9999px;
|
||||
background: transparent url(../img/admin/inline-delete.png) no-repeat;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
margin: 0.4em 0;
|
||||
border: 0px none;
|
||||
}
|
||||
|
||||
.inline-deletelink:hover {
|
||||
background-position: -15px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.editinline button.addlink {
|
||||
border: 0px none;
|
||||
color: #5b80b2;
|
||||
font-size: 100%;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.editinline button.addlink:hover {
|
||||
color: #036;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.editinline table .help {
|
||||
text-align: right;
|
||||
float: right;
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
.editinline tfoot .addlink {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.editinline table thead th:last-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.editinline tr.deleted {
|
||||
background: #ddd url(../img/admin/deleted-overlay.gif);
|
||||
}
|
||||
|
||||
.editinline tr.deleted .inline-deletelink {
|
||||
background-image: url(../img/admin/inline-restore.png);
|
||||
}
|
||||
|
||||
.editinline tr.deleted td:hover {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.editinline tr.deleted td:first-child {
|
||||
background-image: none !important;
|
||||
}
|
||||
|
||||
/* EDIT INLINE - STACKED */
|
||||
|
||||
.editinline-stacked {
|
||||
min-width: 758px;
|
||||
}
|
||||
|
||||
.editinline-stacked .inline-object {
|
||||
margin-left: 210px;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.editinline-stacked .inline-source {
|
||||
float: left;
|
||||
width: 200px;
|
||||
background: #f8f8f8;
|
||||
}
|
||||
|
||||
.editinline-stacked .inline-splitter {
|
||||
float: left;
|
||||
width: 9px;
|
||||
background: #f8f8f8 url(../img/admin/inline-splitter-bg.gif) 50% 50% no-repeat;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.editinline-stacked .controls {
|
||||
clear: both;
|
||||
background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
|
||||
padding: 3px 4px;
|
||||
font-size: 11px;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
BIN
static/secr/img/admin/arrow-down.gif
Normal file
After Width: | Height: | Size: 80 B |
BIN
static/secr/img/admin/arrow-up.gif
Normal file
After Width: | Height: | Size: 838 B |
BIN
static/secr/img/admin/changelist-bg.gif
Normal file
After Width: | Height: | Size: 58 B |
BIN
static/secr/img/admin/changelist-bg_rtl.gif
Normal file
After Width: | Height: | Size: 75 B |
BIN
static/secr/img/admin/chooser-bg.gif
Normal file
After Width: | Height: | Size: 199 B |
BIN
static/secr/img/admin/chooser_stacked-bg.gif
Normal file
After Width: | Height: | Size: 212 B |
BIN
static/secr/img/admin/default-bg-reverse.gif
Normal file
After Width: | Height: | Size: 843 B |
BIN
static/secr/img/admin/default-bg.gif
Normal file
After Width: | Height: | Size: 844 B |
BIN
static/secr/img/admin/deleted-overlay.gif
Normal file
After Width: | Height: | Size: 45 B |
BIN
static/secr/img/admin/icon-no.gif
Normal file
After Width: | Height: | Size: 176 B |
BIN
static/secr/img/admin/icon-unknown.gif
Normal file
After Width: | Height: | Size: 130 B |
BIN
static/secr/img/admin/icon-yes.gif
Normal file
After Width: | Height: | Size: 299 B |
BIN
static/secr/img/admin/icon_addlink.gif
Normal file
After Width: | Height: | Size: 119 B |
BIN
static/secr/img/admin/icon_alert.gif
Normal file
After Width: | Height: | Size: 145 B |
BIN
static/secr/img/admin/icon_calendar.gif
Normal file
After Width: | Height: | Size: 192 B |
BIN
static/secr/img/admin/icon_changelink.gif
Normal file
After Width: | Height: | Size: 119 B |
BIN
static/secr/img/admin/icon_clock.gif
Normal file
After Width: | Height: | Size: 390 B |
BIN
static/secr/img/admin/icon_deletelink.gif
Normal file
After Width: | Height: | Size: 181 B |
BIN
static/secr/img/admin/icon_error.gif
Normal file
After Width: | Height: | Size: 319 B |
BIN
static/secr/img/admin/icon_searchbox.png
Normal file
After Width: | Height: | Size: 667 B |
BIN
static/secr/img/admin/icon_success.gif
Normal file
After Width: | Height: | Size: 341 B |
BIN
static/secr/img/admin/inline-delete-8bit.png
Normal file
After Width: | Height: | Size: 477 B |
BIN
static/secr/img/admin/inline-delete.png
Normal file
After Width: | Height: | Size: 781 B |
BIN
static/secr/img/admin/inline-restore-8bit.png
Normal file
After Width: | Height: | Size: 447 B |
BIN
static/secr/img/admin/inline-restore.png
Normal file
After Width: | Height: | Size: 623 B |
BIN
static/secr/img/admin/inline-splitter-bg.gif
Normal file
After Width: | Height: | Size: 102 B |
BIN
static/secr/img/admin/nav-bg-grabber.gif
Normal file
After Width: | Height: | Size: 116 B |
BIN
static/secr/img/admin/nav-bg-reverse.gif
Normal file
After Width: | Height: | Size: 186 B |
BIN
static/secr/img/admin/nav-bg.gif
Normal file
After Width: | Height: | Size: 273 B |
BIN
static/secr/img/admin/selector-add.gif
Normal file
After Width: | Height: | Size: 606 B |
BIN
static/secr/img/admin/selector-addall.gif
Normal file
After Width: | Height: | Size: 358 B |
BIN
static/secr/img/admin/selector-remove.gif
Normal file
After Width: | Height: | Size: 398 B |
BIN
static/secr/img/admin/selector-removeall.gif
Normal file
After Width: | Height: | Size: 355 B |
BIN
static/secr/img/admin/selector-search.gif
Normal file
After Width: | Height: | Size: 552 B |
BIN
static/secr/img/admin/selector_stacked-add.gif
Normal file
After Width: | Height: | Size: 612 B |
BIN
static/secr/img/admin/selector_stacked-remove.gif
Normal file
After Width: | Height: | Size: 401 B |
BIN
static/secr/img/admin/tool-left.gif
Normal file
After Width: | Height: | Size: 197 B |
BIN
static/secr/img/admin/tool-left_over.gif
Normal file
After Width: | Height: | Size: 203 B |
BIN
static/secr/img/admin/tool-right.gif
Normal file
After Width: | Height: | Size: 198 B |
BIN
static/secr/img/admin/tool-right_over.gif
Normal file
After Width: | Height: | Size: 200 B |
BIN
static/secr/img/admin/tooltag-add.gif
Normal file
After Width: | Height: | Size: 932 B |
BIN
static/secr/img/admin/tooltag-add_over.gif
Normal file
After Width: | Height: | Size: 336 B |
BIN
static/secr/img/admin/tooltag-arrowright.gif
Normal file
After Width: | Height: | Size: 351 B |
BIN
static/secr/img/admin/tooltag-arrowright_over.gif
Normal file
After Width: | Height: | Size: 354 B |
BIN
static/secr/img/ajax-loader.gif
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
static/secr/img/ams_logo.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
static/secr/img/delete.png
Normal file
After Width: | Height: | Size: 655 B |
BIN
static/secr/img/test-background.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/secr/img/ui-icons_222222_256x240.png
Executable file
After Width: | Height: | Size: 4.3 KiB |
BIN
static/secr/img/ui-icons_666666_256x240.png
Executable file
After Width: | Height: | Size: 4.3 KiB |
BIN
static/secr/img/wait26.gif
Normal file
After Width: | Height: | Size: 5.2 KiB |