Commit e6957a01 by Diana Huang

Merge branch 'master' into feature/diana/close-oe-problems

Conflicts:
	common/lib/xmodule/xmodule/combined_open_ended_module.py
parents 97655d03 a6b35853
......@@ -77,18 +77,19 @@ def replace_static_urls(text, data_directory, course_namespace=None):
# course_namespace is not None, then use studio style urls
if course_namespace is not None and not isinstance(modulestore(), XMLModuleStore):
url = StaticContent.convert_legacy_static_url(rest, course_namespace)
# If we're in debug mode, and the file as requested exists, then don't change the links
elif (settings.DEBUG and finders.find(rest, True)):
return original
# Otherwise, look the file up in staticfiles_storage without the data directory
# Otherwise, look the file up in staticfiles_storage, and append the data directory if needed
else:
course_path = "/".join((data_directory, rest))
try:
if staticfiles_storage.exists(rest):
url = staticfiles_storage.url(rest)
else:
url = staticfiles_storage.url(course_path)
# And if that fails, assume that it's course content, and add manually data directory
except Exception as err:
log.warning("staticfiles_storage couldn't find path {0}: {1}".format(
rest, str(err)))
url = "".join([prefix, data_directory, '/', rest])
url = "".join([prefix, course_path])
return "".join([quote, url, quote])
......
......@@ -24,15 +24,24 @@ def test_multi_replace():
)
@patch('static_replace.finders')
@patch('static_replace.settings')
def test_debug_no_modify(mock_settings, mock_finders):
mock_settings.DEBUG = True
mock_finders.find.return_value = True
@patch('static_replace.staticfiles_storage')
def test_storage_url_exists(mock_storage):
mock_storage.exists.return_value = True
mock_storage.url.return_value = '/static/file.png'
assert_equals('"/static/file.png"', replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
mock_storage.exists.called_once_with('file.png')
mock_storage.url.called_once_with('data_dir/file.png')
assert_equals(STATIC_SOURCE, replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
@patch('static_replace.staticfiles_storage')
def test_storage_url_not_exists(mock_storage):
mock_storage.exists.return_value = False
mock_storage.url.return_value = '/static/data_dir/file.png'
mock_finders.find.assert_called_once_with('file.png', True)
assert_equals('"/static/data_dir/file.png"', replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
mock_storage.exists.called_once_with('file.png')
mock_storage.url.called_once_with('file.png')
@patch('static_replace.StaticContent')
......@@ -59,7 +68,10 @@ def test_mongo_filestore(mock_modulestore, mock_static_content):
@patch('static_replace.staticfiles_storage')
def test_data_dir_fallback(mock_storage, mock_modulestore, mock_settings):
mock_modulestore.return_value = Mock(XMLModuleStore)
mock_settings.DEBUG = False
mock_storage.url.side_effect = Exception
mock_storage.exists.return_value = True
assert_equals('"/static/data_dir/file.png"', replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
mock_storage.exists.return_value = False
assert_equals('"/static/data_dir/file.png"', replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
......@@ -834,3 +834,108 @@ class DragAndDropInput(InputTypeBase):
registry.register(DragAndDropInput)
#--------------------------------------------------------------------------------------------------------------------
class EditAMoleculeInput(InputTypeBase):
"""
An input type for edit-a-molecule. Integrates with the molecule editor java applet.
Example:
<editamolecule size="50"/>
options: size -- width of the textbox.
"""
template = "editamolecule.html"
tags = ['editamoleculeinput']
@classmethod
def get_attributes(cls):
"""
Can set size of text field.
"""
return [Attribute('file'),
Attribute('missing', None)]
def _extra_context(self):
"""
"""
context = {
'applet_loader': '/static/js/capa/editamolecule.js',
}
return context
registry.register(EditAMoleculeInput)
#-----------------------------------------------------------------------------
class DesignProtein2dInput(InputTypeBase):
"""
An input type for design of a protein in 2D. Integrates with the Protex java applet.
Example:
<designprotein2d width="800" hight="500" target_shape="E;NE;NW;W;SW;E;none" />
"""
template = "designprotein2dinput.html"
tags = ['designprotein2dinput']
@classmethod
def get_attributes(cls):
"""
Note: width, hight, and target_shape are required.
"""
return [Attribute('width'),
Attribute('height'),
Attribute('target_shape')
]
def _extra_context(self):
"""
"""
context = {
'applet_loader': '/static/js/capa/design-protein-2d.js',
}
return context
registry.register(DesignProtein2dInput)
#-----------------------------------------------------------------------------
class EditAGeneInput(InputTypeBase):
"""
An input type for editing a gene. Integrates with the genex java applet.
Example:
<editagene width="800" hight="500" dna_sequence="ETAAGGCTATAACCGA" />
"""
template = "editageneinput.html"
tags = ['editageneinput']
@classmethod
def get_attributes(cls):
"""
Note: width, hight, and dna_sequencee are required.
"""
return [Attribute('width'),
Attribute('height'),
Attribute('dna_sequence')
]
def _extra_context(self):
"""
"""
context = {
'applet_loader': '/static/js/capa/edit-a-gene.js',
}
return context
registry.register(EditAGeneInput)
......@@ -875,7 +875,8 @@ def sympy_check2():
allowed_inputfields = ['textline', 'textbox', 'crystallography',
'chemicalequationinput', 'vsepr_input',
'drag_and_drop_input']
'drag_and_drop_input', 'editamoleculeinput',
'designprotein2dinput', 'editageneinput']
def setup_response(self):
xml = self.xml
......
......@@ -31,7 +31,6 @@
<div id="input_${id}_preview" class="equation">
</div>
<p id="answer_${id}" class="answer"></p>
% if status in ['unsubmitted', 'correct', 'incorrect', 'incomplete']:
......
<section id="designprotein2dinput_${id}" class="designprotein2dinput">
<div class="script_placeholder" data-src="/static/js/capa/protex/protex.nocache.js"/>
<div class="script_placeholder" data-src="${applet_loader}"/>
% if status == 'unsubmitted':
<div class="unanswered" id="status_${id}">
% elif status == 'correct':
<div class="correct" id="status_${id}">
% elif status == 'incorrect':
<div class="incorrect" id="status_${id}">
% elif status == 'incomplete':
<div class="incomplete" id="status_${id}">
% endif
<div id="protex_container"></div>
<input type="hidden" name="target_shape" id="target_shape" value ="${target_shape}"></input>
<input type="hidden" name="input_${id}" id="input_${id}" value="${value|h}"/>
<p class="status">
% if status == 'unsubmitted':
unanswered
% elif status == 'correct':
correct
% elif status == 'incorrect':
incorrect
% elif status == 'incomplete':
incomplete
% endif
</p>
<p id="answer_${id}" class="answer"></p>
% if status in ['unsubmitted', 'correct', 'incorrect', 'incomplete']:
</div>
% endif
</section>
<section id="editageneinput_${id}" class="editageneinput">
<div class="script_placeholder" data-src="${applet_loader}"/>
% if status == 'unsubmitted':
<div class="unanswered" id="status_${id}">
% elif status == 'correct':
<div class="correct" id="status_${id}">
% elif status == 'incorrect':
<div class="incorrect" id="status_${id}">
% elif status == 'incomplete':
<div class="incorrect" id="status_${id}">
% endif
<object type="application/x-java-applet" id="applet_${id}" class="applet" width="${width}" height="${height}">
<param name="archive" value="/static/applets/capa/genex.jar" />
<param name="code" value="GX.GenexApplet.class" />
<param name="DNA_SEQUENCE" value="${dna_sequence}" />
Applet failed to run. No Java plug-in was found.
</object>
<input type="hidden" name="input_${id}" id="input_${id}" value="${value|h}"/>
<p class="status">
% if status == 'unsubmitted':
unanswered
% elif status == 'correct':
correct
% elif status == 'incorrect':
incorrect
% elif status == 'incomplete':
incomplete
% endif
</p>
<p id="answer_${id}" class="answer"></p>
% if status in ['unsubmitted', 'correct', 'incorrect', 'incomplete']:
</div>
% endif
</section>
<section id="editamoleculeinput_${id}" class="editamoleculeinput">
<div class="script_placeholder" data-src="${applet_loader}"/>
% if status == 'unsubmitted':
<div class="unanswered" id="status_${id}">
% elif status == 'correct':
<div class="correct" id="status_${id}">
% elif status == 'incorrect':
<div class="incorrect" id="status_${id}">
% elif status == 'incomplete':
<div class="incorrect" id="status_${id}">
% endif
<div id="applet_${id}" class="applet" data-molfile-src="${file}" style="display:block;width:500px;height:400px">
</div>
<br/>
<input type="hidden" name="input_${id}" id="input_${id}" value="${value|h}"/>
<button id="reset_${id}" class="reset">Reset</button>
<p id="answer_${id}" class="answer"></p>
<p class="status">
% if status == 'unsubmitted':
unanswered
% elif status == 'correct':
correct
% elif status == 'incorrect':
incorrect
% elif status == 'incomplete':
incomplete
% endif
</p>
<br/> <br/>
<div class="error_message" style="padding: 5px 5px 5px 5px; background-color:#FA6666; height:60px;width:400px; display: none"></div>
% if status in ['unsubmitted', 'correct', 'incorrect', 'incomplete']:
</div>
% endif
</section>
# A simple script demonstrating how to have an external program post problem
# responses to an edx server.
#
# ***** NOTE *****
# This is not intended as a stable public API. In fact, it is almost certainly
# going to change. If you use this for some reason, be prepared to change your
# code.
#
# We will be working to define a stable public API for external programs. We
# don't have have one yet (Feb 2013).
import requests
import sys
import getpass
def prompt(msg, default=None, safe=False):
d = ' [{0}]'.format(default) if default is not None else ''
prompt = 'Enter {msg}{default}: '.format(msg=msg, default=d)
if not safe:
print prompt
x = sys.stdin.readline().strip()
else:
x = getpass.getpass(prompt=prompt)
if x == '' and default is not None:
return default
return x
server = 'https://www.edx.org'
course_id = 'HarvardX/PH207x/2012_Fall'
location = 'i4x://HarvardX/PH207x/problem/ex_practice_2'
#server = prompt('Server (no trailing slash)', 'http://127.0.0.1:8000')
#course_id = prompt('Course id', 'MITx/7012x/2013_Spring')
#location = prompt('problem location', 'i4x://MITx/7012x/problem/example_upload_answer')
value = prompt('value to upload')
username = prompt('username on server', 'victor@edx.org')
password = prompt('password', 'abc123', safe=True)
print "get csrf cookie"
session = requests.session()
r = session.get(server + '/')
r.raise_for_status()
# print session.cookies
# for some reason, the server expects a header containing the csrf cookie, not just the
# cookie itself.
session.headers['X-CSRFToken'] = session.cookies['csrftoken']
# for https, need a referer header
session.headers['Referer'] = server + '/'
login_url = '/'.join([server, 'login'])
print "log in"
r = session.post(login_url, {'email': 'victor@edx.org', 'password': 'Secret!', 'remember': 'false'})
#print "request headers: ", r.request.headers
#print "response headers: ", r.headers
r.raise_for_status()
url = '/'.join([server, 'courses', course_id, 'modx', location, 'problem_check'])
data = {'input_{0}_2_1'.format(location.replace('/','-').replace(':','').replace('--','-')): value}
#data = {'input_i4x-MITx-7012x-problem-example_upload_answer_2_1': value}
print "Posting to '{0}': {1}".format(url, data)
r = session.post(url, data)
r.raise_for_status()
print ("To see the uploaded answer, go to {server}/courses/{course_id}/jump_to/{location}"
.format(server=server, course_id=course_id, location=location))
......@@ -20,40 +20,17 @@ from .stringify import stringify_children
from .x_module import XModule
from .xml_module import XmlDescriptor
from xmodule.modulestore import Location
import self_assessment_module
import open_ended_module
from combined_open_ended_rubric import CombinedOpenEndedRubric, RubricParsingError
from .stringify import stringify_children
from combined_open_ended_modulev1 import CombinedOpenEndedV1Module, CombinedOpenEndedV1Descriptor
log = logging.getLogger("mitx.courseware")
# Set the default number of max attempts. Should be 1 for production
# Set higher for debugging/testing
# attempts specified in xml definition overrides this.
MAX_ATTEMPTS = 10000
# Set maximum available number of points.
# Overriden by max_score specified in xml.
MAX_SCORE = 1
#The highest score allowed for the overall xmodule and for each rubric point
MAX_SCORE_ALLOWED = 3
#If true, default behavior is to score module as a practice problem. Otherwise, no grade at all is shown in progress
#Metadata overrides this.
IS_SCORED = False
#If true, then default behavior is to require a file upload or pasted link from a student for this problem.
#Metadata overrides this.
ACCEPT_FILE_UPLOAD = False
VERSION_TUPLES = (
('1', CombinedOpenEndedV1Descriptor, CombinedOpenEndedV1Module),
)
#Contains all reasonable bool and case combinations of True
TRUE_DICT = ["True", True, "TRUE", "true"]
HUMAN_TASK_TYPE = {
'selfassessment': "Self Assessment",
'openended': "External Grader",
}
DEFAULT_VERSION = 1
DEFAULT_VERSION = str(DEFAULT_VERSION)
class CombinedOpenEndedModule(XModule):
"""
......@@ -134,523 +111,68 @@ class CombinedOpenEndedModule(XModule):
"""
self.system = system
self.system.set('location', location)
# Load instance state
if instance_state is not None:
instance_state = json.loads(instance_state)
else:
instance_state = {}
#We need to set the location here so the child modules can use it
system.set('location', location)
#Tells the system which xml definition to load
self.current_task_number = instance_state.get('current_task_number', 0)
#This loads the states of the individual children
self.task_states = instance_state.get('task_states', [])
#Overall state of the combined open ended module
self.state = instance_state.get('state', self.INITIAL)
self.attempts = instance_state.get('attempts', 0)
#Allow reset is true if student has failed the criteria to move to the next child task
self.allow_reset = instance_state.get('ready_to_reset', False)
self.max_attempts = int(self.metadata.get('attempts', MAX_ATTEMPTS))
self.is_scored = self.metadata.get('is_graded', IS_SCORED) in TRUE_DICT
self.accept_file_upload = self.metadata.get('accept_file_upload', ACCEPT_FILE_UPLOAD) in TRUE_DICT
display_due_date_string = self.metadata.get('due', None)
grace_period_string = self.metadata.get('graceperiod', None)
self.version = self.metadata.get('version', DEFAULT_VERSION)
if not isinstance(self.version, basestring):
try:
self.timeinfo = TimeInfo(display_due_date_string, grace_period_string)
self.version = str(self.version)
except:
log.error("Error parsing due date information in location {0}".format(location))
raise
self.display_due_date = self.timeinfo.display_due_date
log.error("Version {0} is not correct. Going with version {1}".format(self.version, DEFAULT_VERSION))
self.version = DEFAULT_VERSION
# Used for progress / grading. Currently get credit just for
# completion (doesn't matter if you self-assessed correct/incorrect).
self._max_score = int(self.metadata.get('max_score', MAX_SCORE))
versions = [i[0] for i in VERSION_TUPLES]
descriptors = [i[1] for i in VERSION_TUPLES]
modules = [i[2] for i in VERSION_TUPLES]
try:
version_index = versions.index(self.version)
except:
log.error("Version {0} is not correct. Going with version {1}".format(self.version, DEFAULT_VERSION))
self.version = DEFAULT_VERSION
version_index = versions.index(self.version)
rubric_renderer = CombinedOpenEndedRubric(system, True)
rubric_string = stringify_children(definition['rubric'])
rubric_renderer.check_if_rubric_is_parseable(rubric_string, location, MAX_SCORE_ALLOWED, self._max_score)
#Static data is passed to the child modules to render
self.static_data = {
'max_score': self._max_score,
'max_attempts': self.max_attempts,
'prompt': definition['prompt'],
'rubric': definition['rubric'],
'display_name': self.display_name,
'accept_file_upload': self.accept_file_upload,
'close_date': self.timeinfo.close_date
}
self.task_xml = definition['task_xml']
self.setup_next_task()
def get_tag_name(self, xml):
"""
Gets the tag name of a given xml block.
Input: XML string
Output: The name of the root tag
"""
tag = etree.fromstring(xml).tag
return tag
def overwrite_state(self, current_task_state):
"""
Overwrites an instance state and sets the latest response to the current response. This is used
to ensure that the student response is carried over from the first child to the rest.
Input: Task state json string
Output: Task state json string
"""
last_response_data = self.get_last_response(self.current_task_number - 1)
last_response = last_response_data['response']
loaded_task_state = json.loads(current_task_state)
if loaded_task_state['state'] == self.INITIAL:
loaded_task_state['state'] = self.ASSESSING
loaded_task_state['created'] = True
loaded_task_state['history'].append({'answer': last_response})
current_task_state = json.dumps(loaded_task_state)
return current_task_state
def child_modules(self):
"""
Returns the constructors associated with the child modules in a dictionary. This makes writing functions
simpler (saves code duplication)
Input: None
Output: A dictionary of dictionaries containing the descriptor functions and module functions
"""
child_modules = {
'openended': open_ended_module.OpenEndedModule,
'selfassessment': self_assessment_module.SelfAssessmentModule,
}
child_descriptors = {
'openended': open_ended_module.OpenEndedDescriptor,
'selfassessment': self_assessment_module.SelfAssessmentDescriptor,
}
children = {
'modules': child_modules,
'descriptors': child_descriptors,
}
return children
def setup_next_task(self, reset=False):
"""
Sets up the next task for the module. Creates an instance state if none exists, carries over the answer
from the last instance state to the next if needed.
Input: A boolean indicating whether or not the reset function is calling.
Output: Boolean True (not useful right now)
"""
current_task_state = None
if len(self.task_states) > self.current_task_number:
current_task_state = self.task_states[self.current_task_number]
self.current_task_xml = self.task_xml[self.current_task_number]
if self.current_task_number > 0:
self.allow_reset = self.check_allow_reset()
if self.allow_reset:
self.current_task_number = self.current_task_number - 1
current_task_type = self.get_tag_name(self.current_task_xml)
children = self.child_modules()
child_task_module = children['modules'][current_task_type]
self.current_task_descriptor = children['descriptors'][current_task_type](self.system)
#This is the xml object created from the xml definition of the current task
etree_xml = etree.fromstring(self.current_task_xml)
#This sends the etree_xml object through the descriptor module of the current task, and
#returns the xml parsed by the descriptor
self.current_task_parsed_xml = self.current_task_descriptor.definition_from_xml(etree_xml, self.system)
if current_task_state is None and self.current_task_number == 0:
self.current_task = child_task_module(self.system, self.location,
self.current_task_parsed_xml, self.current_task_descriptor, self.static_data)
self.task_states.append(self.current_task.get_instance_state())
self.state = self.ASSESSING
elif current_task_state is None and self.current_task_number > 0:
last_response_data = self.get_last_response(self.current_task_number - 1)
last_response = last_response_data['response']
current_task_state = json.dumps({
'state': self.ASSESSING,
'version': self.STATE_VERSION,
'max_score': self._max_score,
'attempts': 0,
'created': True,
'history': [{'answer': last_response}],
})
self.current_task = child_task_module(self.system, self.location,
self.current_task_parsed_xml, self.current_task_descriptor, self.static_data,
instance_state=current_task_state)
self.task_states.append(self.current_task.get_instance_state())
self.state = self.ASSESSING
else:
if self.current_task_number > 0 and not reset:
current_task_state = self.overwrite_state(current_task_state)
self.current_task = child_task_module(self.system, self.location,
self.current_task_parsed_xml, self.current_task_descriptor, self.static_data,
instance_state=current_task_state)
return True
def check_allow_reset(self):
"""
Checks to see if the student has passed the criteria to move to the next module. If not, sets
allow_reset to true and halts the student progress through the tasks.
Input: None
Output: the allow_reset attribute of the current module.
"""
if not self.allow_reset:
if self.current_task_number > 0:
last_response_data = self.get_last_response(self.current_task_number - 1)
current_response_data = self.get_current_attributes(self.current_task_number)
if(current_response_data['min_score_to_attempt'] > last_response_data['score']
or current_response_data['max_score_to_attempt'] < last_response_data['score']):
self.state = self.DONE
self.allow_reset = True
return self.allow_reset
def get_context(self):
"""
Generates a context dictionary that is used to render html.
Input: None
Output: A dictionary that can be rendered into the combined open ended template.
"""
task_html = self.get_html_base()
#set context variables and render template
context = {
'items': [{'content': task_html}],
'ajax_url': self.system.ajax_url,
'allow_reset': self.allow_reset,
'state': self.state,
'task_count': len(self.task_xml),
'task_number': self.current_task_number + 1,
'status': self.get_status(),
'display_name': self.display_name,
'accept_file_upload': self.accept_file_upload,
static_data = {
'rewrite_content_links' : self.rewrite_content_links,
}
return context
self.child_descriptor = descriptors[version_index](self.system)
self.child_definition = descriptors[version_index].definition_from_xml(etree.fromstring(definition['xml_string']), self.system)
self.child_module = modules[version_index](self.system, location, self.child_definition, self.child_descriptor,
instance_state = json.dumps(instance_state), metadata = self.metadata, static_data= static_data)
def get_html(self):
"""
Gets HTML for rendering.
Input: None
Output: rendered html
"""
context = self.get_context()
html = self.system.render_template('combined_open_ended.html', context)
return html
def get_html_nonsystem(self):
"""
Gets HTML for rendering via AJAX. Does not use system, because system contains some additional
html, which is not appropriate for returning via ajax calls.
Input: None
Output: HTML rendered directly via Mako
"""
context = self.get_context()
html = self.system.render_template('combined_open_ended.html', context)
return html
def get_html_base(self):
"""
Gets the HTML associated with the current child task
Input: None
Output: Child task HTML
"""
self.update_task_states()
html = self.current_task.get_html(self.system)
return_html = rewrite_links(html, self.rewrite_content_links)
return return_html
def get_current_attributes(self, task_number):
"""
Gets the min and max score to attempt attributes of the specified task.
Input: The number of the task.
Output: The minimum and maximum scores needed to move on to the specified task.
"""
task_xml = self.task_xml[task_number]
etree_xml = etree.fromstring(task_xml)
min_score_to_attempt = int(etree_xml.attrib.get('min_score_to_attempt', 0))
max_score_to_attempt = int(etree_xml.attrib.get('max_score_to_attempt', self._max_score))
return {'min_score_to_attempt': min_score_to_attempt, 'max_score_to_attempt': max_score_to_attempt}
def get_last_response(self, task_number):
"""
Returns data associated with the specified task number, such as the last response, score, etc.
Input: The number of the task.
Output: A dictionary that contains information about the specified task.
"""
last_response = ""
task_state = self.task_states[task_number]
task_xml = self.task_xml[task_number]
task_type = self.get_tag_name(task_xml)
children = self.child_modules()
task_descriptor = children['descriptors'][task_type](self.system)
etree_xml = etree.fromstring(task_xml)
min_score_to_attempt = int(etree_xml.attrib.get('min_score_to_attempt', 0))
max_score_to_attempt = int(etree_xml.attrib.get('max_score_to_attempt', self._max_score))
task_parsed_xml = task_descriptor.definition_from_xml(etree_xml, self.system)
task = children['modules'][task_type](self.system, self.location, task_parsed_xml, task_descriptor,
self.static_data, instance_state=task_state)
last_response = task.latest_answer()
last_score = task.latest_score()
last_post_assessment = task.latest_post_assessment(self.system)
last_post_feedback = ""
if task_type == "openended":
last_post_assessment = task.latest_post_assessment(self.system, short_feedback=False, join_feedback=False)
if isinstance(last_post_assessment, list):
eval_list = []
for i in xrange(0, len(last_post_assessment)):
eval_list.append(task.format_feedback_with_evaluation(self.system, last_post_assessment[i]))
last_post_evaluation = "".join(eval_list)
else:
last_post_evaluation = task.format_feedback_with_evaluation(self.system, last_post_assessment)
last_post_assessment = last_post_evaluation
last_correctness = task.is_last_response_correct()
max_score = task.max_score()
state = task.state
if task_type in HUMAN_TASK_TYPE:
human_task_name = HUMAN_TASK_TYPE[task_type]
else:
human_task_name = task_type
if state in task.HUMAN_NAMES:
human_state = task.HUMAN_NAMES[state]
else:
human_state = state
last_response_dict = {
'response': last_response,
'score': last_score,
'post_assessment': last_post_assessment,
'type': task_type,
'max_score': max_score,
'state': state,
'human_state': human_state,
'human_task': human_task_name,
'correct': last_correctness,
'min_score_to_attempt': min_score_to_attempt,
'max_score_to_attempt': max_score_to_attempt,
}
return last_response_dict
def update_task_states(self):
"""
Updates the task state of the combined open ended module with the task state of the current child module.
Input: None
Output: boolean indicating whether or not the task state changed.
"""
changed = False
if not self.allow_reset:
self.task_states[self.current_task_number] = self.current_task.get_instance_state()
current_task_state = json.loads(self.task_states[self.current_task_number])
if current_task_state['state'] == self.DONE:
self.current_task_number += 1
if self.current_task_number >= (len(self.task_xml)):
self.state = self.DONE
self.current_task_number = len(self.task_xml) - 1
else:
self.state = self.INITIAL
changed = True
self.setup_next_task()
return changed
def update_task_states_ajax(self, return_html):
"""
Runs the update task states function for ajax calls. Currently the same as update_task_states
Input: The html returned by the handle_ajax function of the child
Output: New html that should be rendered
"""
changed = self.update_task_states()
if changed:
#return_html=self.get_html()
pass
return return_html
def get_results(self, get):
"""
Gets the results of a given grader via ajax.
Input: AJAX get dictionary
Output: Dictionary to be rendered via ajax that contains the result html.
"""
task_number = int(get['task_number'])
self.update_task_states()
response_dict = self.get_last_response(task_number)
context = {'results': response_dict['post_assessment'], 'task_number': task_number + 1}
html = self.system.render_template('combined_open_ended_results.html', context)
return {'html': html, 'success': True}
return self.child_module.get_html()
def handle_ajax(self, dispatch, get):
"""
This is called by courseware.module_render, to handle an AJAX call.
"get" is request.POST.
Returns a json dictionary:
{ 'progress_changed' : True/False,
'progress': 'none'/'in_progress'/'done',
<other request-specific values here > }
"""
handlers = {
'next_problem': self.next_problem,
'reset': self.reset,
'get_results': self.get_results
}
if dispatch not in handlers:
return_html = self.current_task.handle_ajax(dispatch, get, self.system)
return self.update_task_states_ajax(return_html)
d = handlers[dispatch](get)
return json.dumps(d, cls=ComplexEncoder)
def next_problem(self, get):
"""
Called via ajax to advance to the next problem.
Input: AJAX get request.
Output: Dictionary to be rendered
"""
self.update_task_states()
return {'success': True, 'html': self.get_html_nonsystem(), 'allow_reset': self.allow_reset}
def reset(self, get):
"""
If resetting is allowed, reset the state of the combined open ended module.
Input: AJAX get dictionary
Output: AJAX dictionary to tbe rendered
"""
if self.state != self.DONE:
if not self.allow_reset:
return self.out_of_sync_error(get)
if self.attempts > self.max_attempts:
return {
'success': False,
'error': 'Too many attempts.'
}
self.state = self.INITIAL
self.allow_reset = False
for i in xrange(0, len(self.task_xml)):
self.current_task_number = i
self.setup_next_task(reset=True)
self.current_task.reset(self.system)
self.task_states[self.current_task_number] = self.current_task.get_instance_state()
self.current_task_number = 0
self.allow_reset = False
self.setup_next_task()
return {'success': True, 'html': self.get_html_nonsystem()}
return self.child_module.handle_ajax(dispatch, get)
def get_instance_state(self):
"""
Returns the current instance state. The module can be recreated from the instance state.
Input: None
Output: A dictionary containing the instance state.
"""
state = {
'version': self.STATE_VERSION,
'current_task_number': self.current_task_number,
'state': self.state,
'task_states': self.task_states,
'attempts': self.attempts,
'ready_to_reset': self.allow_reset,
}
return json.dumps(state)
def get_status(self):
"""
Gets the status panel to be displayed at the top right.
Input: None
Output: The status html to be rendered
"""
status = []
for i in xrange(0, self.current_task_number + 1):
task_data = self.get_last_response(i)
task_data.update({'task_number': i + 1})
status.append(task_data)
context = {'status_list': status}
status_html = self.system.render_template("combined_open_ended_status.html", context)
return status_html
def check_if_done_and_scored(self):
"""
Checks if the object is currently in a finished state (either student didn't meet criteria to move
to next step, in which case they are in the allow_reset state, or they are done with the question
entirely, in which case they will be in the self.DONE state), and if it is scored or not.
@return: Boolean corresponding to the above.
"""
return (self.state == self.DONE or self.allow_reset) and self.is_scored
return self.child_module.get_instance_state()
def get_score(self):
"""
Score the student received on the problem, or None if there is no
score.
Returns:
dictionary
{'score': integer, from 0 to get_max_score(),
'total': get_max_score()}
"""
max_score = None
score = None
if self.check_if_done_and_scored():
last_response = self.get_last_response(self.current_task_number)
max_score = last_response['max_score']
score = last_response['score']
score_dict = {
'score': score,
'total': max_score,
}
return score_dict
return self.child_module.get_score()
def max_score(self):
''' Maximum score. Two notes:
* This is generic; in abstract, a problem could be 3/5 points on one
randomization, and 5/7 on another
'''
max_score = None
if self.check_if_done_and_scored():
last_response = self.get_last_response(self.current_task_number)
max_score = last_response['max_score']
return max_score
return self.child_module.max_score()
def get_progress(self):
''' Return a progress.Progress object that represents how far the
student has gone in this module. Must be implemented to get correct
progress tracking behavior in nesting modules like sequence and
vertical.
return self.child_module.get_progress()
If this module has no notion of progress, return None.
'''
progress_object = Progress(self.current_task_number, len(self.task_xml))
@property
def due_date(self):
return self.child_module.due_date
return progress_object
@property
def display_name(self):
return self.child_module.display_name
class CombinedOpenEndedDescriptor(XmlDescriptor, EditingDescriptor):
......@@ -680,20 +202,8 @@ class CombinedOpenEndedDescriptor(XmlDescriptor, EditingDescriptor):
'task_xml': dictionary of xml strings,
}
"""
expected_children = ['task', 'rubric', 'prompt']
for child in expected_children:
if len(xml_object.xpath(child)) == 0:
raise ValueError("Combined Open Ended definition must include at least one '{0}' tag".format(child))
def parse_task(k):
"""Assumes that xml_object has child k"""
return [stringify_children(xml_object.xpath(k)[i]) for i in xrange(0, len(xml_object.xpath(k)))]
def parse(k):
"""Assumes that xml_object has child k"""
return xml_object.xpath(k)[0]
return {'task_xml': parse_task('task'), 'prompt': parse('prompt'), 'rubric': parse('rubric')}
return {'xml_string' : etree.tostring(xml_object), 'metadata' : xml_object.attrib}
def definition_to_xml(self, resource_fs):
......
import copy
from fs.errors import ResourceNotFoundError
import itertools
import json
import logging
from lxml import etree
from lxml.html import rewrite_links
from path import path
import os
import sys
from pkg_resources import resource_string
from .capa_module import only_one, ComplexEncoder
from .editing_module import EditingDescriptor
from .html_checker import check_html
from progress import Progress
from .stringify import stringify_children
from .x_module import XModule
from .xml_module import XmlDescriptor
from xmodule.modulestore import Location
import self_assessment_module
import open_ended_module
from combined_open_ended_rubric import CombinedOpenEndedRubric, RubricParsingError
from .stringify import stringify_children
import dateutil
import dateutil.parser
import datetime
from timeparse import parse_timedelta
log = logging.getLogger("mitx.courseware")
# Set the default number of max attempts. Should be 1 for production
# Set higher for debugging/testing
# attempts specified in xml definition overrides this.
MAX_ATTEMPTS = 10000
# Set maximum available number of points.
# Overriden by max_score specified in xml.
MAX_SCORE = 1
#The highest score allowed for the overall xmodule and for each rubric point
MAX_SCORE_ALLOWED = 3
#If true, default behavior is to score module as a practice problem. Otherwise, no grade at all is shown in progress
#Metadata overrides this.
IS_SCORED = False
#If true, then default behavior is to require a file upload or pasted link from a student for this problem.
#Metadata overrides this.
ACCEPT_FILE_UPLOAD = False
#Contains all reasonable bool and case combinations of True
TRUE_DICT = ["True", True, "TRUE", "true"]
HUMAN_TASK_TYPE = {
'selfassessment' : "Self Assessment",
'openended' : "External Grader",
}
class CombinedOpenEndedV1Module():
"""
This is a module that encapsulates all open ended grading (self assessment, peer assessment, etc).
It transitions between problems, and support arbitrary ordering.
Each combined open ended module contains one or multiple "child" modules.
Child modules track their own state, and can transition between states. They also implement get_html and
handle_ajax.
The combined open ended module transitions between child modules as appropriate, tracks its own state, and passess
ajax requests from the browser to the child module or handles them itself (in the cases of reset and next problem)
ajax actions implemented by all children are:
'save_answer' -- Saves the student answer
'save_assessment' -- Saves the student assessment (or external grader assessment)
'save_post_assessment' -- saves a post assessment (hint, feedback on feedback, etc)
ajax actions implemented by combined open ended module are:
'reset' -- resets the whole combined open ended module and returns to the first child module
'next_problem' -- moves to the next child module
'get_results' -- gets results from a given child module
Types of children. Task is synonymous with child module, so each combined open ended module
incorporates multiple children (tasks):
openendedmodule
selfassessmentmodule
"""
STATE_VERSION = 1
# states
INITIAL = 'initial'
ASSESSING = 'assessing'
INTERMEDIATE_DONE = 'intermediate_done'
DONE = 'done'
js = {'coffee': [resource_string(__name__, 'js/src/combinedopenended/display.coffee'),
resource_string(__name__, 'js/src/collapsible.coffee'),
resource_string(__name__, 'js/src/javascript_loader.coffee'),
]}
js_module_name = "CombinedOpenEnded"
css = {'scss': [resource_string(__name__, 'css/combinedopenended/display.scss')]}
def __init__(self, system, location, definition, descriptor,
instance_state=None, shared_state=None, metadata = None, static_data = None, **kwargs):
"""
Definition file should have one or many task blocks, a rubric block, and a prompt block:
Sample file:
<combinedopenended attempts="10000" max_score="1">
<rubric>
Blah blah rubric.
</rubric>
<prompt>
Some prompt.
</prompt>
<task>
<selfassessment>
<hintprompt>
What hint about this problem would you give to someone?
</hintprompt>
<submitmessage>
Save Succcesful. Thanks for participating!
</submitmessage>
</selfassessment>
</task>
<task>
<openended min_score_to_attempt="1" max_score_to_attempt="1">
<openendedparam>
<initial_display>Enter essay here.</initial_display>
<answer_display>This is the answer.</answer_display>
<grader_payload>{"grader_settings" : "ml_grading.conf",
"problem_id" : "6.002x/Welcome/OETest"}</grader_payload>
</openendedparam>
</openended>
</task>
</combinedopenended>
"""
self.metadata = metadata
self.display_name = metadata.get('display_name', "Open Ended")
self.rewrite_content_links = static_data.get('rewrite_content_links',"")
# Load instance state
if instance_state is not None:
instance_state = json.loads(instance_state)
else:
instance_state = {}
#We need to set the location here so the child modules can use it
system.set('location', location)
self.system = system
#Tells the system which xml definition to load
self.current_task_number = instance_state.get('current_task_number', 0)
#This loads the states of the individual children
self.task_states = instance_state.get('task_states', [])
#Overall state of the combined open ended module
self.state = instance_state.get('state', self.INITIAL)
self.attempts = instance_state.get('attempts', 0)
#Allow reset is true if student has failed the criteria to move to the next child task
self.allow_reset = instance_state.get('ready_to_reset', False)
self.max_attempts = int(self.metadata.get('attempts', MAX_ATTEMPTS))
self.is_scored = self.metadata.get('is_graded', IS_SCORED) in TRUE_DICT
self.accept_file_upload = self.metadata.get('accept_file_upload', ACCEPT_FILE_UPLOAD) in TRUE_DICT
display_due_date_string = self.metadata.get('due', None)
if display_due_date_string is not None:
try:
self.display_due_date = dateutil.parser.parse(display_due_date_string)
except ValueError:
log.error("Could not parse due date {0} for location {1}".format(display_due_date_string, location))
raise
else:
self.display_due_date = None
grace_period_string = self.metadata.get('graceperiod', None)
if grace_period_string is not None and self.display_due_date:
try:
self.grace_period = parse_timedelta(grace_period_string)
self.close_date = self.display_due_date + self.grace_period
except:
log.error("Error parsing the grace period {0} for location {1}".format(grace_period_string, location))
raise
else:
self.grace_period = None
self.close_date = self.display_due_date
# Used for progress / grading. Currently get credit just for
# completion (doesn't matter if you self-assessed correct/incorrect).
self._max_score = int(self.metadata.get('max_score', MAX_SCORE))
rubric_renderer = CombinedOpenEndedRubric(system, True)
rubric_string = stringify_children(definition['rubric'])
rubric_renderer.check_if_rubric_is_parseable(rubric_string, location, MAX_SCORE_ALLOWED, self._max_score)
#Static data is passed to the child modules to render
self.static_data = {
'max_score': self._max_score,
'max_attempts': self.max_attempts,
'prompt': definition['prompt'],
'rubric': definition['rubric'],
'display_name': self.display_name,
'accept_file_upload': self.accept_file_upload,
'close_date' : self.close_date,
}
self.task_xml = definition['task_xml']
self.location = location
self.setup_next_task()
def get_tag_name(self, xml):
"""
Gets the tag name of a given xml block.
Input: XML string
Output: The name of the root tag
"""
tag = etree.fromstring(xml).tag
return tag
def overwrite_state(self, current_task_state):
"""
Overwrites an instance state and sets the latest response to the current response. This is used
to ensure that the student response is carried over from the first child to the rest.
Input: Task state json string
Output: Task state json string
"""
last_response_data = self.get_last_response(self.current_task_number - 1)
last_response = last_response_data['response']
loaded_task_state = json.loads(current_task_state)
if loaded_task_state['state'] == self.INITIAL:
loaded_task_state['state'] = self.ASSESSING
loaded_task_state['created'] = True
loaded_task_state['history'].append({'answer': last_response})
current_task_state = json.dumps(loaded_task_state)
return current_task_state
def child_modules(self):
"""
Returns the constructors associated with the child modules in a dictionary. This makes writing functions
simpler (saves code duplication)
Input: None
Output: A dictionary of dictionaries containing the descriptor functions and module functions
"""
child_modules = {
'openended': open_ended_module.OpenEndedModule,
'selfassessment': self_assessment_module.SelfAssessmentModule,
}
child_descriptors = {
'openended': open_ended_module.OpenEndedDescriptor,
'selfassessment': self_assessment_module.SelfAssessmentDescriptor,
}
children = {
'modules': child_modules,
'descriptors': child_descriptors,
}
return children
def setup_next_task(self, reset=False):
"""
Sets up the next task for the module. Creates an instance state if none exists, carries over the answer
from the last instance state to the next if needed.
Input: A boolean indicating whether or not the reset function is calling.
Output: Boolean True (not useful right now)
"""
current_task_state = None
if len(self.task_states) > self.current_task_number:
current_task_state = self.task_states[self.current_task_number]
self.current_task_xml = self.task_xml[self.current_task_number]
if self.current_task_number > 0:
self.allow_reset = self.check_allow_reset()
if self.allow_reset:
self.current_task_number = self.current_task_number - 1
current_task_type = self.get_tag_name(self.current_task_xml)
children = self.child_modules()
child_task_module = children['modules'][current_task_type]
self.current_task_descriptor = children['descriptors'][current_task_type](self.system)
#This is the xml object created from the xml definition of the current task
etree_xml = etree.fromstring(self.current_task_xml)
#This sends the etree_xml object through the descriptor module of the current task, and
#returns the xml parsed by the descriptor
self.current_task_parsed_xml = self.current_task_descriptor.definition_from_xml(etree_xml, self.system)
if current_task_state is None and self.current_task_number == 0:
self.current_task = child_task_module(self.system, self.location,
self.current_task_parsed_xml, self.current_task_descriptor, self.static_data)
self.task_states.append(self.current_task.get_instance_state())
self.state = self.ASSESSING
elif current_task_state is None and self.current_task_number > 0:
last_response_data = self.get_last_response(self.current_task_number - 1)
last_response = last_response_data['response']
current_task_state = json.dumps({
'state': self.ASSESSING,
'version': self.STATE_VERSION,
'max_score': self._max_score,
'attempts': 0,
'created': True,
'history': [{'answer': last_response}],
})
self.current_task = child_task_module(self.system, self.location,
self.current_task_parsed_xml, self.current_task_descriptor, self.static_data,
instance_state=current_task_state)
self.task_states.append(self.current_task.get_instance_state())
self.state = self.ASSESSING
else:
if self.current_task_number > 0 and not reset:
current_task_state = self.overwrite_state(current_task_state)
self.current_task = child_task_module(self.system, self.location,
self.current_task_parsed_xml, self.current_task_descriptor, self.static_data,
instance_state=current_task_state)
return True
def check_allow_reset(self):
"""
Checks to see if the student has passed the criteria to move to the next module. If not, sets
allow_reset to true and halts the student progress through the tasks.
Input: None
Output: the allow_reset attribute of the current module.
"""
if not self.allow_reset:
if self.current_task_number > 0:
last_response_data = self.get_last_response(self.current_task_number - 1)
current_response_data = self.get_current_attributes(self.current_task_number)
if(current_response_data['min_score_to_attempt'] > last_response_data['score']
or current_response_data['max_score_to_attempt'] < last_response_data['score']):
self.state = self.DONE
self.allow_reset = True
return self.allow_reset
def get_context(self):
"""
Generates a context dictionary that is used to render html.
Input: None
Output: A dictionary that can be rendered into the combined open ended template.
"""
task_html = self.get_html_base()
#set context variables and render template
context = {
'items': [{'content': task_html}],
'ajax_url': self.system.ajax_url,
'allow_reset': self.allow_reset,
'state': self.state,
'task_count': len(self.task_xml),
'task_number': self.current_task_number + 1,
'status': self.get_status(),
'display_name': self.display_name,
'accept_file_upload': self.accept_file_upload,
}
return context
def get_html(self):
"""
Gets HTML for rendering.
Input: None
Output: rendered html
"""
context = self.get_context()
html = self.system.render_template('combined_open_ended.html', context)
return html
def get_html_nonsystem(self):
"""
Gets HTML for rendering via AJAX. Does not use system, because system contains some additional
html, which is not appropriate for returning via ajax calls.
Input: None
Output: HTML rendered directly via Mako
"""
context = self.get_context()
html = self.system.render_template('combined_open_ended.html', context)
return html
def get_html_base(self):
"""
Gets the HTML associated with the current child task
Input: None
Output: Child task HTML
"""
self.update_task_states()
html = self.current_task.get_html(self.system)
return_html = rewrite_links(html, self.rewrite_content_links)
return return_html
def get_current_attributes(self, task_number):
"""
Gets the min and max score to attempt attributes of the specified task.
Input: The number of the task.
Output: The minimum and maximum scores needed to move on to the specified task.
"""
task_xml = self.task_xml[task_number]
etree_xml = etree.fromstring(task_xml)
min_score_to_attempt = int(etree_xml.attrib.get('min_score_to_attempt', 0))
max_score_to_attempt = int(etree_xml.attrib.get('max_score_to_attempt', self._max_score))
return {'min_score_to_attempt': min_score_to_attempt, 'max_score_to_attempt': max_score_to_attempt}
def get_last_response(self, task_number):
"""
Returns data associated with the specified task number, such as the last response, score, etc.
Input: The number of the task.
Output: A dictionary that contains information about the specified task.
"""
last_response = ""
task_state = self.task_states[task_number]
task_xml = self.task_xml[task_number]
task_type = self.get_tag_name(task_xml)
children = self.child_modules()
task_descriptor = children['descriptors'][task_type](self.system)
etree_xml = etree.fromstring(task_xml)
min_score_to_attempt = int(etree_xml.attrib.get('min_score_to_attempt', 0))
max_score_to_attempt = int(etree_xml.attrib.get('max_score_to_attempt', self._max_score))
task_parsed_xml = task_descriptor.definition_from_xml(etree_xml, self.system)
task = children['modules'][task_type](self.system, self.location, task_parsed_xml, task_descriptor,
self.static_data, instance_state=task_state)
last_response = task.latest_answer()
last_score = task.latest_score()
last_post_assessment = task.latest_post_assessment(self.system)
last_post_feedback = ""
if task_type == "openended":
last_post_assessment = task.latest_post_assessment(self.system, short_feedback=False, join_feedback=False)
if isinstance(last_post_assessment, list):
eval_list = []
for i in xrange(0, len(last_post_assessment)):
eval_list.append(task.format_feedback_with_evaluation(self.system, last_post_assessment[i]))
last_post_evaluation = "".join(eval_list)
else:
last_post_evaluation = task.format_feedback_with_evaluation(self.system, last_post_assessment)
last_post_assessment = last_post_evaluation
last_correctness = task.is_last_response_correct()
max_score = task.max_score()
state = task.state
if task_type in HUMAN_TASK_TYPE:
human_task_name = HUMAN_TASK_TYPE[task_type]
else:
human_task_name = task_type
if state in task.HUMAN_NAMES:
human_state = task.HUMAN_NAMES[state]
else:
human_state = state
last_response_dict = {
'response': last_response,
'score': last_score,
'post_assessment': last_post_assessment,
'type': task_type,
'max_score': max_score,
'state': state,
'human_state': human_state,
'human_task': human_task_name,
'correct': last_correctness,
'min_score_to_attempt': min_score_to_attempt,
'max_score_to_attempt': max_score_to_attempt,
}
return last_response_dict
def update_task_states(self):
"""
Updates the task state of the combined open ended module with the task state of the current child module.
Input: None
Output: boolean indicating whether or not the task state changed.
"""
changed = False
if not self.allow_reset:
self.task_states[self.current_task_number] = self.current_task.get_instance_state()
current_task_state = json.loads(self.task_states[self.current_task_number])
if current_task_state['state'] == self.DONE:
self.current_task_number += 1
if self.current_task_number >= (len(self.task_xml)):
self.state = self.DONE
self.current_task_number = len(self.task_xml) - 1
else:
self.state = self.INITIAL
changed = True
self.setup_next_task()
return changed
def update_task_states_ajax(self, return_html):
"""
Runs the update task states function for ajax calls. Currently the same as update_task_states
Input: The html returned by the handle_ajax function of the child
Output: New html that should be rendered
"""
changed = self.update_task_states()
if changed:
#return_html=self.get_html()
pass
return return_html
def get_results(self, get):
"""
Gets the results of a given grader via ajax.
Input: AJAX get dictionary
Output: Dictionary to be rendered via ajax that contains the result html.
"""
task_number = int(get['task_number'])
self.update_task_states()
response_dict = self.get_last_response(task_number)
context = {'results': response_dict['post_assessment'], 'task_number': task_number + 1}
html = self.system.render_template('combined_open_ended_results.html', context)
return {'html': html, 'success': True}
def handle_ajax(self, dispatch, get):
"""
This is called by courseware.module_render, to handle an AJAX call.
"get" is request.POST.
Returns a json dictionary:
{ 'progress_changed' : True/False,
'progress': 'none'/'in_progress'/'done',
<other request-specific values here > }
"""
handlers = {
'next_problem': self.next_problem,
'reset': self.reset,
'get_results': self.get_results
}
if dispatch not in handlers:
return_html = self.current_task.handle_ajax(dispatch, get, self.system)
return self.update_task_states_ajax(return_html)
d = handlers[dispatch](get)
return json.dumps(d, cls=ComplexEncoder)
def next_problem(self, get):
"""
Called via ajax to advance to the next problem.
Input: AJAX get request.
Output: Dictionary to be rendered
"""
self.update_task_states()
return {'success': True, 'html': self.get_html_nonsystem(), 'allow_reset': self.allow_reset}
def reset(self, get):
"""
If resetting is allowed, reset the state of the combined open ended module.
Input: AJAX get dictionary
Output: AJAX dictionary to tbe rendered
"""
if self.state != self.DONE:
if not self.allow_reset:
return self.out_of_sync_error(get)
if self.attempts > self.max_attempts:
return {
'success': False,
'error': 'Too many attempts.'
}
self.state = self.INITIAL
self.allow_reset = False
for i in xrange(0, len(self.task_xml)):
self.current_task_number = i
self.setup_next_task(reset=True)
self.current_task.reset(self.system)
self.task_states[self.current_task_number] = self.current_task.get_instance_state()
self.current_task_number = 0
self.allow_reset = False
self.setup_next_task()
return {'success': True, 'html': self.get_html_nonsystem()}
def get_instance_state(self):
"""
Returns the current instance state. The module can be recreated from the instance state.
Input: None
Output: A dictionary containing the instance state.
"""
state = {
'version': self.STATE_VERSION,
'current_task_number': self.current_task_number,
'state': self.state,
'task_states': self.task_states,
'attempts': self.attempts,
'ready_to_reset': self.allow_reset,
}
return json.dumps(state)
def get_status(self):
"""
Gets the status panel to be displayed at the top right.
Input: None
Output: The status html to be rendered
"""
status = []
for i in xrange(0, self.current_task_number + 1):
task_data = self.get_last_response(i)
task_data.update({'task_number': i + 1})
status.append(task_data)
context = {'status_list': status}
status_html = self.system.render_template("combined_open_ended_status.html", context)
return status_html
def check_if_done_and_scored(self):
"""
Checks if the object is currently in a finished state (either student didn't meet criteria to move
to next step, in which case they are in the allow_reset state, or they are done with the question
entirely, in which case they will be in the self.DONE state), and if it is scored or not.
@return: Boolean corresponding to the above.
"""
return (self.state == self.DONE or self.allow_reset) and self.is_scored
def get_score(self):
"""
Score the student received on the problem, or None if there is no
score.
Returns:
dictionary
{'score': integer, from 0 to get_max_score(),
'total': get_max_score()}
"""
max_score = None
score = None
if self.check_if_done_and_scored():
last_response = self.get_last_response(self.current_task_number)
max_score = last_response['max_score']
score = last_response['score']
score_dict = {
'score': score,
'total': max_score,
}
return score_dict
def max_score(self):
''' Maximum score. Two notes:
* This is generic; in abstract, a problem could be 3/5 points on one
randomization, and 5/7 on another
'''
max_score = None
if self.check_if_done_and_scored():
last_response = self.get_last_response(self.current_task_number)
max_score = last_response['max_score']
return max_score
def get_progress(self):
''' Return a progress.Progress object that represents how far the
student has gone in this module. Must be implemented to get correct
progress tracking behavior in nesting modules like sequence and
vertical.
If this module has no notion of progress, return None.
'''
progress_object = Progress(self.current_task_number, len(self.task_xml))
return progress_object
class CombinedOpenEndedV1Descriptor(XmlDescriptor, EditingDescriptor):
"""
Module for adding combined open ended questions
"""
mako_template = "widgets/html-edit.html"
module_class = CombinedOpenEndedV1Module
filename_extension = "xml"
stores_state = True
has_score = True
template_dir_name = "combinedopenended"
js = {'coffee': [resource_string(__name__, 'js/src/html/edit.coffee')]}
js_module_name = "HTMLEditingDescriptor"
@classmethod
def definition_from_xml(cls, xml_object, system):
"""
Pull out the individual tasks, the rubric, and the prompt, and parse
Returns:
{
'rubric': 'some-html',
'prompt': 'some-html',
'task_xml': dictionary of xml strings,
}
"""
expected_children = ['task', 'rubric', 'prompt']
for child in expected_children:
if len(xml_object.xpath(child)) == 0:
raise ValueError("Combined Open Ended definition must include at least one '{0}' tag".format(child))
def parse_task(k):
"""Assumes that xml_object has child k"""
return [stringify_children(xml_object.xpath(k)[i]) for i in xrange(0, len(xml_object.xpath(k)))]
def parse(k):
"""Assumes that xml_object has child k"""
return xml_object.xpath(k)[0]
return {'task_xml': parse_task('task'), 'prompt': parse('prompt'), 'rubric': parse('rubric')}
def definition_to_xml(self, resource_fs):
'''Return an xml element representing this definition.'''
elt = etree.Element('combinedopenended')
def add_child(k):
child_str = '<{tag}>{body}</{tag}>'.format(tag=k, body=self.definition[k])
child_node = etree.fromstring(child_str)
elt.append(child_node)
for child in ['task']:
add_child(child)
return elt
\ No newline at end of file
......@@ -45,6 +45,10 @@ class ConditionalModule(XModule):
XModule.__init__(self, system, location, definition, descriptor, instance_state, shared_state, **kwargs)
self.contents = None
self.condition = self.metadata.get('condition', '')
self._get_required_modules()
children = self.get_display_items()
if children:
self.icon_class = children[0].get_icon_class()
#log.debug('conditional module required=%s' % self.required_modules_list)
def _get_required_modules(self):
......@@ -129,7 +133,14 @@ class ConditionalDescriptor(SequenceDescriptor):
required_module_list = [tuple(x.split('/', 1)) for x in self.metadata.get('required', '').split('&')]
self.required_module_locations = []
for (tag, name) in required_module_list:
for rm in required_module_list:
try:
(tag, name) = rm
except Exception as err:
msg = "Specification of required module in conditional is broken: %s" % self.metadata.get('required')
log.warning(msg)
self.system.error_tracker(msg)
continue
loc = self.location.dict()
loc['category'] = tag
loc['name'] = name
......
......@@ -11,6 +11,7 @@ class @Problem
$(selector, @el)
bind: =>
if MathJax?
@el.find('.problem > div').each (index, element) =>
MathJax.Hub.Queue ["Typeset", MathJax.Hub, element]
......@@ -31,6 +32,7 @@ class @Problem
# Dynamath
@$('input.math').keyup(@refreshMath)
if MathJax?
@$('input.math').each (index, element) =>
MathJax.Hub.Queue [@refreshMath, null, element]
......@@ -230,6 +232,7 @@ class @Problem
showMethod = @inputtypeShowAnswerMethods[cls]
showMethod(inputtype, display, answers) if showMethod?
if MathJax?
@el.find('.problem > div').each (index, element) =>
MathJax.Hub.Queue ["Typeset", MathJax.Hub, element]
......@@ -273,7 +276,7 @@ class @Problem
preprocessor_tag = "inputtype_" + elid
mathjax_preprocessor = @inputtypeDisplays[preprocessor_tag]
if jax = MathJax.Hub.getAllJax(target)[0]
if MathJax? and jax = MathJax.Hub.getAllJax(target)[0]
eqn = $(element).val()
if mathjax_preprocessor
eqn = mathjax_preprocessor(eqn)
......@@ -286,6 +289,7 @@ class @Problem
$("##{element.id}_dynamath").val(jax.root.toMathML '')
catch exception
throw exception unless exception.restart
if MathJax?
MathJax.Callback.After [@refreshMath, jax], exception.restart
refreshAnswers: =>
......
......@@ -20,7 +20,10 @@
return module
catch error
console.error "Unable to load #{moduleType}: #{error.message}" if console
if window.console and console.log
console.error "Unable to load #{moduleType}: #{error.message}"
else
throw error
###
Load all modules on the page of the specified type.
......
......@@ -40,7 +40,7 @@ ALLOWABLE_IMAGE_SUFFIXES = [
]
#Maximum allowed dimensions (x and y) for an uploaded image
MAX_ALLOWED_IMAGE_DIM = 1000
MAX_ALLOWED_IMAGE_DIM = 1500
#Dimensions to which image is resized before it is evaluated for color count, etc
MAX_IMAGE_DIM = 150
......@@ -128,10 +128,16 @@ class ImageProperties(object):
"""
image_is_okay = False
try:
image_is_okay = self.count_colors() and self.get_skin_ratio() and not self.image_too_large
#image_is_okay = self.count_colors() and self.get_skin_ratio() and not self.image_too_large
image_is_okay = not self.image_too_large
except:
log.exception("Could not run image tests.")
if not ENABLE_PIL:
image_is_okay = True
#log.debug("Image OK: {0}".format(image_is_okay))
return image_is_okay
......@@ -250,7 +256,9 @@ def upload_to_s3(file_to_upload, keyname):
return True, public_url
except:
return False, "Could not connect to S3."
error_message = "Could not connect to S3."
log.exception(error_message)
return False, error_message
def get_from_s3(s3_public_url):
......
......@@ -339,7 +339,7 @@ class OpenEndedChild(object):
image_tag = ""
image_ok = False
if 'can_upload_files' in get_data:
if get_data['can_upload_files'] == 'true':
if get_data['can_upload_files'] in ['true', '1']:
has_file_to_upload = True
file = get_data['student_file'][0]
uploaded_to_s3, image_ok, s3_public_url = self.upload_image_to_s3(file)
......@@ -378,7 +378,7 @@ class OpenEndedChild(object):
elif has_file_to_upload and not uploaded_to_s3 and image_ok:
#In this case, an image was submitted by the student, but the image could not be uploaded to S3. Likely
#a config issue (development vs deployment). For now, just treat this as a "success"
log.warning("Student AJAX post to combined open ended xmodule indicated that it contained an image, "
log.exception("Student AJAX post to combined open ended xmodule indicated that it contained an image, "
"but the image was not able to be uploaded to S3. This could indicate a config"
"issue with this deployment, but it could also indicate a problem with S3 or with the"
"student image itself.")
......@@ -388,6 +388,8 @@ class OpenEndedChild(object):
success, get_data['student_answer'] = self.check_for_url_in_text(get_data['student_answer'])
overall_success = success
#log.debug("Has file: {0} Uploaded: {1} Image Ok: {2}".format(has_file_to_upload, uploaded_to_s3, image_ok))
return overall_success, get_data
def check_for_url_in_text(self, string):
......
......@@ -4,7 +4,7 @@ import unittest
from xmodule.openendedchild import OpenEndedChild
from xmodule.open_ended_module import OpenEndedModule
from xmodule.combined_open_ended_module import CombinedOpenEndedModule
from xmodule.combined_open_ended_modulev1 import CombinedOpenEndedV1Module
from xmodule.modulestore import Location
from lxml import etree
......@@ -159,7 +159,8 @@ class OpenEndedModuleTest(unittest.TestCase):
'max_score': max_score,
'display_name': 'Name',
'accept_file_upload': False,
'close_date': None
'rewrite_content_links' : "",
'close_date': None,
}
oeparam = etree.XML('''
......@@ -283,13 +284,16 @@ class CombinedOpenEndedModuleTest(unittest.TestCase):
metadata = {'attempts': '10', 'max_score': max_score}
static_data = json.dumps({
static_data = {
'max_attempts': 20,
'prompt': prompt,
'rubric': rubric,
'max_score': max_score,
'display_name': 'Name'
})
'display_name': 'Name',
'accept_file_upload' : False,
'rewrite_content_links' : "",
'close_date' : "",
}
oeparam = etree.XML('''
<openendedparam>
......@@ -321,7 +325,7 @@ class CombinedOpenEndedModuleTest(unittest.TestCase):
descriptor = Mock()
def setUp(self):
self.combinedoe = CombinedOpenEndedModule(test_system, self.location, self.definition, self.descriptor, self.static_data, metadata=self.metadata)
self.combinedoe = CombinedOpenEndedV1Module(test_system, self.location, self.definition, self.descriptor, static_data = self.static_data, metadata=self.metadata)
def test_get_tag_name(self):
name = self.combinedoe.get_tag_name("<t>Tag</t>")
......@@ -331,14 +335,14 @@ class CombinedOpenEndedModuleTest(unittest.TestCase):
response_dict = self.combinedoe.get_last_response(0)
self.assertEqual(response_dict['type'], "selfassessment")
self.assertEqual(response_dict['max_score'], self.max_score)
self.assertEqual(response_dict['state'], CombinedOpenEndedModule.INITIAL)
self.assertEqual(response_dict['state'], CombinedOpenEndedV1Module.INITIAL)
def test_update_task_states(self):
changed = self.combinedoe.update_task_states()
self.assertFalse(changed)
current_task = self.combinedoe.current_task
current_task.change_state(CombinedOpenEndedModule.DONE)
current_task.change_state(CombinedOpenEndedV1Module.DONE)
changed = self.combinedoe.update_task_states()
self.assertTrue(changed)
......@@ -128,6 +128,17 @@ class VideoModule(XModule):
else:
caption_asset_path = StaticContent.get_base_url_path_for_course_assets(self.location) + '/subs_'
# We normally let JS parse this, but in the case that we need a hacked
# out <object> player because YouTube has broken their <iframe> API for
# the third time in a year, we need to extract it server side.
normal_speed_video_id = None # The 1.0 speed video
# video_list() example:
# "0.75:nugHYNiD3fI,1.0:7m8pab1MfYY,1.25:3CxdPGXShq8,1.50:F-D7bOFCnXA"
for video_id_str in self.video_list().split(","):
if video_id_str.startswith("1.0:"):
normal_speed_video_id = video_id_str.split(":")[1]
return self.system.render_template('video.html', {
'streams': self.video_list(),
'id': self.location.html_id(),
......@@ -140,7 +151,8 @@ class VideoModule(XModule):
'caption_asset_path': caption_asset_path,
'show_captions': self.show_captions,
'start': self.start_time,
'end': self.end_time
'end': self.end_time,
'normal_speed_video_id': normal_speed_video_id
})
......
(function () {
var timeout = 1000;
waitForProtex();
function waitForProtex() {
if (typeof(protex) !== "undefined" && protex) {
protex.onInjectionDone("protex");
}
/*if (typeof(protex) !== "undefined") {
//initializeProtex();
}*/
else {
setTimeout(function() { waitForProtex(); }, timeout);
}
}
//NOTE:
// Protex uses three global functions:
// protexSetTargetShape (exported from GWT)
// exported protexCheckAnswer (exported from GWT)
// It calls protexIsReady with a deferred command when it has finished
// initialization and has drawn itself
protexIsReady = function() {
//Load target shape
var target_shape = $('#target_shape').val();
protexSetTargetShape(target_shape);
//Get answer from protex and store it into the hidden input field
//when Check button is clicked
var problem = $('#protex_container').parents('.problem');
var check_button = problem.find('input.check');
var input_field = problem.find('input[type=hidden]');
check_button.on('click', function() {
var protex_answer = protexCheckAnswer();
var value = {protex_answer: protex_answer};
input_field.val(JSON.stringify(value));
});
};
/*function initializeProtex() {
//Check to see if the two exported GWT functions protexSetTargetShape
// and protexCheckAnswer have been appended to global scope -- this
//happens at the end of onModuleLoad() in GWT
if (typeof(protexSetTargetShape) === "function" &&
typeof(protexCheckAnswer) === "function") {
//Load target shape
var target_shape = $('#target_shape').val();
//protexSetTargetShape(target_shape);
//Get answer from protex and store it into the hidden input field
//when Check button is clicked
var problem = $('#protex_container').parents('.problem');
var check_button = problem.find('input.check');
var input_field = problem.find('input[type=hidden]');
check_button.on('click', function() {
var protex_answer = protexCheckAnswer();
var value = {protex_answer: protex_answer};
input_field.val(JSON.stringify(value));
});
//TO DO: Fix this, it works but is utterly ugly and unreliable
setTimeout(function() {
protexSetTargetShape(target_shape);}, 2000);
}
else {
setTimeout(function() {initializeProtex(); }, timeout);
}
}*/
}).call(this);
(function () {
var timeout = 1000;
function initializeApplet(applet) {
console.log("Initializing " + applet);
waitForApplet(applet);
}
function waitForApplet(applet) {
if (applet.isActive && applet.isActive()) {
console.log("Applet is ready.");
var answerStr = applet.checkAnswer();
console.log(answerStr);
var input = $('.editageneinput input');
console.log(input);
input.val(answerStr);
} else if (timeout > 30 * 1000) {
console.error("Applet did not load on time.");
} else {
console.log("Waiting for applet...");
setTimeout(function() { waitForApplet(applet); }, timeout);
}
}
var applets = $('.editageneinput object');
applets.each(function(i, el) { initializeApplet(el); });
}).call(this);
(function () {
var timeout = 100;
// Simple "lock" to prevent applets from being initialized more than once
if (typeof(_editamolecule_loaded) == 'undefined' || _editamolecule_loaded == false) {
_editamolecule_loaded = true;
loadGWTScripts();
waitForGWT();
} else {
return;
}
function loadScript(src) {
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', src);
$('head')[0].appendChild(script);
}
function loadGWTScripts() {
// The names of the script are split to prevent them from
// being rewritten by LMS. GWT uses the filename of the script
// to find the URL path in which the script lives. If the name
// of the file is changed, GWT won't load correctly
var jsmolcalc_src = '/sta' + 'tic/js/capa/jsmolcalc/jsmolcalc.nocache.js';
var jsme_src = '/sta' + 'tic/js/capa/jsme/jsme_export.nocache.js';
// Make sure we don't request the scripts twice
if (typeof (_jsmolcalc) == 'undefined') {
_jsmolcalc = true;
loadScript(jsmolcalc_src);
}
if (typeof (_jsme) == 'undefined') {
_jsme = true;
loadScript(jsme_src);
}
}
function waitForGWT() {
// jsme and jsmolcalc are not initialized automatically by the GWT
// script loader. To fix this, wait for the scripts to load,
// initialize them manually and wait until they are ready
if (typeof(jsmolcalc) != 'undefined' && jsmolcalc)
{
jsmolcalc.onInjectionDone('jsmolcalc');
}
if (typeof(jsme_export) != 'undefined' && jsme_export)
{
// dummy function called by jsme_export
window.jsmeOnLoad = function() {};
jsme_export.onInjectionDone('jsme_export');
}
// jsmol is defined my jsmolcalc and JavaScriptApplet is defined by jsme
if (typeof(jsmol) != 'undefined' && typeof(JavaScriptApplet) != 'undefined') {
// ready, initialize applets
initializeApplets();
_editamolecule_loaded = false; // for reloading when checking is pressed
} else {
setTimeout(waitForGWT, timeout);
}
}
function initializeApplets() {
var applets = $('.editamoleculeinput div.applet');
applets.each(function(i, element) {
if (!$(element).hasClass('loaded')) {
var applet = new JavaScriptApplet.JSME(
element.id,
$(element).width(),
$(element).height(),
{
"options" : "query, hydrogens"
});
$(element).addClass('loaded');
configureApplet(element, applet);
}
});
}
function configureApplet(element, applet) {
// Traverse up the DOM tree and get the other relevant elements
var parent = $(element).parent();
var input_field = parent.find('input[type=hidden]');
var reset_button = parent.find('button.reset');
var message_field = parent.find('.error_message');
// Applet options
applet.setAntialias(true);
// Load initial data
var value = input_field.val();
if (value) {
var data = JSON.parse(value)["mol"];
loadAppletData(applet, data, input_field);
} else {
requestAppletData(element, applet, input_field);
}
reset_button.on('click', function() {
requestAppletData(element, applet, input_field);
message_field.html('').hide(); // clear messages
});
// Update the input element everytime the is an interaction
// with the applet (click, drag, etc)
$(element).on('mouseup', function() {
var values = updateInput(applet, input_field);
updateMessages(message_field, values);
});
}
function requestAppletData(element, applet, input_field) {
var molFile = $(element).data('molfile-src');
jQuery.ajax({
url: molFile,
dataType: "text",
success: function(data) {
loadAppletData(applet, data, input_field);
},
error: function() {
console.error("Cannot load mol data from: " + molFile);
}
});
}
function loadAppletData(applet, data, input_field) {
applet.readMolFile(data);
updateInput(applet, input_field);
}
function updateInput(applet, input_field) {
var mol = applet.molFile();
var smiles = applet.smiles();
var jme = applet.jmeFile();
var raw_info = jsmol.API.getInfo(mol, smiles, jme).toString();
var info = formatInfo(raw_info);
var error = formatError(raw_info);
var value = { mol: mol, info: info, error: error };
input_field.val(JSON.stringify(value));
return value;
}
function formatInfo(raw_info) {
var results = [];
if (raw_info.search("It is not possible") == -1) {
var fragment = $('<div>').append(raw_info);
fragment.find('font').each(function () {
results.push($(this).html());
});
}
return results;
}
function formatError(raw_info) {
var error = '';
if (raw_info.search("It is not possible") != -1) {
var tags = /<((\/)?\w{1,7})>/g;
error = raw_info.replace(tags, ' ');
}
return error;
}
function updateMessages(message_field, values) {
var error = values['error'];
if (error) {
message_field.html(error).show();
} else {
// Clear messages
message_field.html('').hide();
}
}
}).call(this);
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* The file contains styles for GWT widgets in the Clean theme.
*
* In order to maintain cross-browser compatibility, the following syntax is
* used to create IE6 specific style rules:
* .gwt-Widget {
* property: rule applies to all browsers
* -property: rule applies only to IE6 (overrides previous rule)
* }
* * html .gwt-Widget {
* property: rule applies to all versions of IE
* }
*/
body, table td, select, button {
font-family: Arial Unicode MS, Arial, sans-serif;
font-size: small;
}
pre {
font-family: "courier new", courier;
font-size: small;
}
body {
color: black;
margin: 10px;
border: 0px;
padding: 0px;
background: #fff;
direction: ltr;
}
a, a:visited {
color: #0066cc;
text-decoration:none;
}
a:hover {
color: #0066cc;
text-decoration:underline;
}
select {
background: white;
}
/**
* The reference theme can be used to determine when this style sheet has
* loaded. Create a hidden div element with absolute position, assign the style
* name below, and attach it to the DOM. Use a timer to detect when the
* element's height and width are set to 5px.
*/
.gwt-Reference-clean {
height: 5px;
width: 5px;
zoom: 1;
}
.gwt-Button {
margin: 0;
padding: 5px 7px;
text-decoration: none;
cursor: pointer;
cursor: hand;
font-size:small;
background: url("images/hborder.png") repeat-x 0px -2077px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
border-radius: 3px;
-moz-border-radius: 3px;
}
.gwt-Button:active {
border: 1px inset #ccc;
}
.gwt-Button:hover {
border-color: #939393;
}
.gwt-Button[disabled] {
cursor: default;
color: #888;
}
.gwt-Button[disabled]:hover {
border: 1px outset #ccc;
}
.gwt-CheckBox {
}
.gwt-CheckBox-disabled {
color: #888;
}
.gwt-DecoratorPanel {
}
.gwt-DecoratorPanel .topCenter {
border-top: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .bottomCenter {
border-bottom: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .topCenterInner,
.gwt-DecoratorPanel .bottomCenterInner {
height: 1px;
line-height: 0px;
font-size: 1px;
}
.gwt-DecoratorPanel .middleLeft {
border-left: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleRight {
border-right: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleLeftInner,
.gwt-DecoratorPanel .middleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-DecoratorPanel .topLeftInner,
.gwt-DecoratorPanel .topRightInner,
.gwt-DecoratorPanel .bottomLeftInner,
.gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
zoom: 1;
font-size: 1px;
overflow: hidden;
}
.gwt-DecoratorPanel .topLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
}
.gwt-DecoratorPanel .topRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
}
.gwt-DecoratorPanel .bottomLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
}
.gwt-DecoratorPanel .bottomRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
}
* html .gwt-DecoratorPanel .topLeftInner,
* html .gwt-DecoratorPanel .topRightInner,
* html .gwt-DecoratorPanel .bottomLeftInner,
* html .gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
overflow: hidden;
}
.gwt-DialogBox .Caption {
background: #F1F1F1;
padding: 4px 8px 4px 4px;
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
font-weight: bold;
border-bottom: 1px solid #bbbbbb;
border-top: 1px solid #D2D2D2;
}
.gwt-DialogBox .dialogContent {
}
.gwt-DialogBox .dialogMiddleCenter {
padding: 3px;
background: white;
}
.gwt-DialogBox .dialogBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2945px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2144px;
}
.gwt-DialogBox .dialogMiddleLeft {
background: url(images/vborder.png) repeat-y -31px 0px;
}
.gwt-DialogBox .dialogMiddleRight {
background: url(images/vborder.png) repeat-y -32px 0px;
-background: url(images/vborder_ie6.png) repeat-y -32px 0px;
}
.gwt-DialogBox .dialogTopLeftInner {
width: 10px;
height: 8px;
zoom: 1;
}
.gwt-DialogBox .dialogTopRightInner {
width: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogTopLeft {
background: url(images/circles.png) no-repeat -20px 0px;
-background: url(images/circles_ie6.png) no-repeat -20px 0px;
}
.gwt-DialogBox .dialogTopRight {
background: url(images/circles.png) no-repeat -28px 0px;
-background: url(images/circles_ie6.png) no-repeat -28px 0px;
}
.gwt-DialogBox .dialogBottomLeft {
background: url(images/circles.png) no-repeat 0px -36px;
-background: url(images/circles_ie6.png) no-repeat 0px -36px;
}
.gwt-DialogBox .dialogBottomRight {
background: url(images/circles.png) no-repeat -8px -36px;
-background: url(images/circles_ie6.png) no-repeat -8px -36px;
}
* html .gwt-DialogBox .dialogTopLeftInner {
width: 10px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogTopRightInner {
width: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
overflow: hidden;
}
.gwt-DisclosurePanel {
}
.gwt-DisclosurePanel-open {
}
.gwt-DisclosurePanel-closed {
}
.gwt-DisclosurePanel .header,
.gwt-DisclosurePanel .header a,
.gwt-DisclosurePanel .header td {
text-decoration: none; /* Remove underline from header */
color: black;
cursor: pointer;
cursor: hand;
}
.gwt-DisclosurePanel .content {
border-left: 3px solid #e7e7e7;
padding: 4px 0px 4px 8px;
margin-left: 6px;
}
.gwt-FileUpload {
}
.gwt-Frame {
border-top: 2px solid #666;
border-left: 2px solid #666;
border-right: 2px solid #bbb;
border-bottom: 2px solid #bbb;
}
.gwt-HorizontalSplitPanel {
}
.gwt-HorizontalSplitPanel .hsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-VerticalSplitPanel {
}
.gwt-VerticalSplitPanel .vsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-HTML {
padding: 0 0px;
}
.gwt-Hyperlink {
cursor: pointer;
}
.gwt-Image {
}
.gwt-Label {
}
.gwt-ListBox {
}
.gwt-MenuBar {
cursor: default;
}
.gwt-MenuBar .gwt-MenuItem {
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-MenuBar .gwt-MenuItem-selected {
background: #E3E8F3;
}
.gwt-MenuBar-horizontal {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border: 1px solid #e0e0e0;
}
.gwt-MenuBar-horizontal .gwt-MenuItem {
padding: 5px 10px;
vertical-align: bottom;
color: #000;
font-weight: bold;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator {
width: 1px;
padding: 0px;
margin: 0px;
border: 0px;
border-left: 1px solid #ccc;
background: white;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner {
width: 1px;
height: 1px;
background: white;
}
.gwt-MenuBar-vertical {
margin-top: 0px;
margin-left: 0px;
background: white;
}
.gwt-MenuBar-vertical table {
border-collapse: collapse;
}
.gwt-MenuBar-vertical .gwt-MenuItem {
padding: 2px 40px 2px 1px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator {
padding: 2px 0px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator .menuSeparatorInner {
height: 1px;
padding: 0px;
border: 0px;
border-top: 1px solid #ccc;
overflow: hidden;
}
.gwt-MenuBar-vertical .subMenuIcon {
padding-right: 4px;
}
.gwt-MenuBar-vertical .subMenuIcon-selected {
background: #E3E8F3;
}
.gwt-MenuBarPopup {
margin: 0px 0px 0px 3px;
}
.gwt-MenuBarPopup .menuPopupTopCenter {
background: url(images/hborder.png) 0px -12px repeat-x;
}
.gwt-MenuBarPopup .menuPopupBottomCenter {
background: url(images/hborder.png) 0px -13px repeat-x;
-background: url(images/hborder_ie6.png) 0px -13px repeat-x;
}
.gwt-MenuBarPopup .menuPopupMiddleLeft {
background: url(images/vborder.png) -12px 0px repeat-y;
-background: url(images/vborder_ie6.png) -12px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupMiddleRight {
background: url(images/vborder.png) -13px 0px repeat-y;
-background: url(images/vborder_ie6.png) -13px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopLeft {
background: url(images/corner.png) no-repeat 0px -36px;
-background: url(images/corner_ie6.png) no-repeat 0px -36px;
}
.gwt-MenuBarPopup .menuPopupTopRight {
background: url(images/corner.png) no-repeat -5px -36px;
-background: url(images/corner_ie6.png) no-repeat -5px -36px;
}
.gwt-MenuBarPopup .menuPopupBottomLeft {
background: url(images/corner.png) no-repeat 0px -41px;
-background: url(images/corner_ie6.png) no-repeat 0px -41px;
}
.gwt-MenuBarPopup .menuPopupBottomRight {
background: url(images/corner.png) no-repeat -5px -41px;
-background: url(images/corner_ie6.png) no-repeat -5px -41px;
}
* html .gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
overflow: hidden;
}
.gwt-PasswordTextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-PasswordTextBox-readonly {
color: #888;
}
.gwt-PopupPanel {
border: 3px solid #e7e7e7;
padding: 3px;
background: white;
}
.gwt-DecoratedPopupPanel .popupContent {
}
.gwt-DecoratedPopupPanel .popupMiddleCenter {
padding: 3px;
background: #f1f1f1;
}
.gwt-DecoratedPopupPanel .popupTopCenter {
background: url(images/hborder.png) 0px -2937px repeat-x;
}
.gwt-DecoratedPopupPanel .popupBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2938px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2138px;
}
.gwt-DecoratedPopupPanel .popupMiddleLeft {
background: url(images/vborder.png) -21px 0px repeat-y;
}
.gwt-DecoratedPopupPanel .popupMiddleRight {
background: url(images/vborder.png) repeat-y -24px 0px;
-background: url(images/vborder_ie6.png) repeat-y -24px 0px;
}
.gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopLeft {
background: url(images/circles.png) no-repeat 0px -16px;
-background: url(images/circles_ie6.png) no-repeat 0px -16px;
}
.gwt-DecoratedPopupPanel .popupTopRight {
background: url(images/circles.png) no-repeat -6px -16px;
-background: url(images/circles_ie6.png) no-repeat -6px -16px;
}
.gwt-DecoratedPopupPanel .popupBottomLeft {
background: url(images/circles.png) no-repeat 0px -21px;
-background: url(images/circles_ie6.png) no-repeat 0px -21px;
}
.gwt-DecoratedPopupPanel .popupBottomRight {
background: url(images/circles.png) no-repeat -6px -21px;
-background: url(images/circles_ie6.png) no-repeat -6px -21px;
}
* html .gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-PopupPanelGlass {
background-color: #000;
opacity: 0.3;
filter: alpha(opacity=30);
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled,
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
border-radius: 2px;
-moz-border-radius: 2px;
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-PushButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
padding: 4px 4px 2px 6px;
outline:none;
}
.gwt-PushButton-down {
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-hovering {
border: 1px solid #939393;
border-top: 1px solid #333333;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-disabled {
border: 1px outset #ccc;
cursor: default;
opacity: 0.5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-RadioButton {
}
.gwt-RadioButton-disabled {
color: #888;
}
.gwt-RichTextArea {
}
.hasRichTextToolbar {
border: 0px;
}
.gwt-RichTextToolbar {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border-bottom: 1px solid #BBBBBB;
padding: 3px;
margin: 0px;
}
.gwt-RichTextToolbar .gwt-PushButton-up {
padding: 0px 1px 0px 0px;
margin-right: 4px;
margin-bottom: 4px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-StackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-DecoratedStackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
}
.gwt-DecoratedStackPanel .stackItemTopLeft,
.gwt-DecoratedStackPanel .stackItemTopRight {
height: 6px;
width: 6px;
zoom: 1;
}
.gwt-DecoratedStackPanel .stackItemTopLeft {
border-left: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat 0px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat 0px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopRight {
border-right: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat -6px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat -6px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopLeftInner,
.gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 1px;
height: 1px;
}
* html .gwt-DecoratedStackPanel .stackItemTopLeftInner,
* html .gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-DecoratedStackPanel .stackItemTopCenter {
background: url(images/hborder.png) 0px -21px repeat-x;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeft {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-left: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeftInner,
.gwt-DecoratedStackPanel .stackItemMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedStackPanel .stackItemMiddleRight {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-right: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleCenter {
font-weight: bold;
font-size: 1.3em;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopRight,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopLeft {
border: 0px;
background-color: white;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopLeft,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopRight {
background-color: white;
}
.gwt-SuggestBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-SuggestBoxPopup {
}
.gwt-SuggestBoxPopup .item {
padding: 2px 6px;
color: #000;
cursor: default;
font-size: 110%;
}
.gwt-SuggestBoxPopup .item-selected {
background: #D5E2FF;
}
.gwt-SuggestBoxPopup .suggestPopupContent {
background: white;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenter {
border-top: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupBottomCenter {
border-bottom: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenterInner,
.gwt-SuggestBoxPopup .suggestPopupBottomCenterInner {
height: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeft {
border-left: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleRight {
border-right: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner,
.gwt-SuggestBoxPopup .suggestPopupMiddleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeft {
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupTopRight {
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeft {
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRight {
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
width:5px;
height:5px;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
.gwt-TabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-TabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-TabBar .gwt-TabBarRest {
}
.gwt-TabBar .gwt-TabBarItem {
margin-left: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabBar .gwt-TabBarItem-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-TabBar .gwt-TabBarItem-disabled {
cursor: default;
color: #999999;
}
.gwt-TabPanel {
}
.gwt-TabPanelBottom {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
overflow: hidden;
padding: 6px;
}
.gwt-DecoratedTabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-DecoratedTabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-DecoratedTabBar .gwt-TabBarRest {
}
.gwt-DecoratedTabBar .gwt-TabBarItem {
border-collapse: collapse;
margin-left: 4px;
}
.gwt-DecoratedTabBar .tabTopCenter {
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabTopLeft,
.gwt-DecoratedTabBar .tabTopRight {
padding: 0px;
zoom: 1;
}
.gwt-DecoratedTabBar .tabTopLeftInner,
.gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
}
.gwt-DecoratedTabBar .tabTopLeft {
background: url(images/circles.png) no-repeat 0px 0px;
-background: url(images/circles_ie6.png) no-repeat 0px 0px;
}
.gwt-DecoratedTabBar .tabTopRight {
background: url(images/circles.png) no-repeat -3px 0px;
-background: url(images/circles_ie6.png) no-repeat -3px 0px;
}
* html .gwt-DecoratedTabBar .tabTopLeftInner,
* html .gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
overflow: hidden;
}
.gwt-DecoratedTabBar .tabMiddleLeft,
.gwt-DecoratedTabBar .tabMiddleRight {
width: 3px;
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabMiddleLeftInner,
.gwt-DecoratedTabBar .tabMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedTabBar .tabMiddleCenter {
padding: 0px 5px 4px 5px;
cursor: pointer;
cursor: hand;
color: #fff;
font-weight: normal;
text-align: center;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter {
background:#fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft {
background: url(images/circles.png) no-repeat -6px 0px;
-background: url(images/circles_ie6.png) no-repeat -6px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight {
background: url(images/circles.png) no-repeat -9px 0px;
-background: url(images/circles_ie6.png) no-repeat -9px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft,
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight {
background: #fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter {
cursor: default;
background: #fff;
color:#333;
font-weight:bold;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-disabled .tabMiddleCenter {
cursor: default;
color: #999999;
}
.gwt-TextArea {
padding: 4px;
border: 1px solid #ccc;
border-top: 1px solid #666;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextArea-readonly {
color: #888;
}
.gwt-TextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: small;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextBox-readonly {
color: #888;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled,
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
-moz-border-radius: 2px;
border-radius: 2px;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-ToggleButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
padding: 4px 4px 2px 6px;
}
.gwt-ToggleButton-down {
background-position: 0 -513px;
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-hovering {
background-position: 0 -513px;
border: 1px inset;
border-color: #9cf #69e #69e #7af;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-disabled {
background-position: 0 -513px;
border: 1px inset #ccc;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-Tree .gwt-TreeItem {
padding: 1px 0px;
margin: 0px;
white-space: nowrap;
cursor: hand;
cursor: pointer;
}
.gwt-Tree .gwt-TreeItem-selected {
background: #ebeff9;
}
.gwt-TreeItem .gwt-RadioButton input,
.gwt-TreeItem .gwt-CheckBox input {
margin-left: 0px;
}
* html .gwt-TreeItem .gwt-RadioButton input,
* html .gwt-TreeItem .gwt-CheckBox input {
margin-left: -4px;
}
.gwt-DateBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-DateBox input {
width: 8em;
}
.dateBoxFormatError {
background: #ffcccc;
}
.dateBoxPopup {
}
.gwt-DatePicker {
border: 1px solid #ccc;
border-top:1px solid #999;
cursor: default;
}
.gwt-DatePicker td,
.datePickerMonthSelector td:focus {
outline: none;
}
.datePickerDays {
width: 100%;
background: white;
}
.datePickerDay,
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
font-size: 85%;
text-align: center;
padding: 4px;
outline: none;
font-weight:bold;
color:#333;
border-right: 1px solid #EDEDED;
border-bottom: 1px solid #EDEDED;
}
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
background: #fff;
padding: 0px 4px 2px;
cursor: default;
color:#666;
font-size:70%;
font-weight:normal;
}
.datePickerDay {
padding: 4px 7px;
cursor: hand;
cursor: pointer;
}
.datePickerDayIsWeekend {
background: #f7f7f7;
}
.datePickerDayIsFiller {
color: #999;
font-weight:normal;
}
.datePickerDayIsValue {
background: #d7dfe8;
}
.datePickerDayIsDisabled {
color: #AAAAAA;
font-style: italic;
}
.datePickerDayIsHighlighted {
background: #F0E68C;
}
.datePickerDayIsValueAndHighlighted {
background: #d7dfe8;
}
.datePickerDayIsToday {
padding: 3px;
color: #fff;
background: url(images/hborder.png) repeat-x 0px -2607px;
}
.datePickerMonthSelector {
width: 100%;
padding: 1px 0 5px 0;
background: #fff;
}
td.datePickerMonth {
text-align: center;
vertical-align: middle;
white-space: nowrap;
font-size: 100%;
font-weight: bold;
color: #333;
}
.datePickerPreviousButton,
.datePickerNextButton {
font-size: 120%;
line-height: 1em;
color: #3a6aad;
cursor: hand;
cursor: pointer;
font-weight: bold;
padding: 0px 4px;
outline: none;
}
.gwt-StackLayoutPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader-hovering {
background: #d3def6;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-TabLayoutPanel {
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs {
background: #ccc;
padding-top: 6px;
padding-left: 5px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContentContainer {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContent {
overflow: hidden;
padding: 6px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab {
margin-left: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-SplitLayoutPanel-HDragger {
background: #e7e7e7 url(images/thumb_vertical.png) center center no-repeat;
cursor: col-resize;
}
.gwt-SplitLayoutPanel-VDragger {
background: #e7e7e7 url(images/thumb_horz.png) center center no-repeat;
cursor: row-resize;
}
\ No newline at end of file
/**
* The file contains styles for GWT widgets in the Clean theme, in RTL mode.
*
* In order to maintain cross-browser compatibility, the following syntax is
* used to create IE6 specific style rules:
* .gwt-Widget {
* property: rule applies to all browsers
* -property: rule applies only to IE6 (overrides previous rule)
* }
* * html .gwt-Widget {
* property: rule applies to all versions of IE
* }
*/
body, table td, select, button {
font-family: Arial Unicode MS, Arial, sans-serif;
font-size: small;
}
pre {
font-family: "courier new", courier;
font-size: small;
}
body {
color: black;
margin: 10px;
border: 0px;
padding: 0px;
background: #fff;
direction: rtl;
}
a, a:visited {
color: #0066cc;
text-decoration:none;
}
a:hover {
color: #0066cc;
text-decoration:underline;
}
select {
background: white;
}
/**
* The reference theme can be used to determine when this style sheet has
* loaded. Create a hidden div element with absolute position, assign the style
* name below, and attach it to the DOM. Use a timer to detect when the
* element's height and width are set to 5px.
*/
.gwt-Reference-clean-rtl {
height: 5px;
width: 5px;
zoom: 1;
}
.gwt-Button {
margin: 0;
padding: 5px 7px;
text-decoration: none;
cursor: pointer;
cursor: hand;
font-size:small;
background: url("images/hborder.png") repeat-x 0px -2077px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
border-radius: 3px;
-moz-border-radius: 3px;
}
.gwt-Button:active {
border: 1px inset #ccc;
}
.gwt-Button:hover {
border-color: #939393;
}
.gwt-Button[disabled] {
cursor: default;
color: #888;
}
.gwt-Button[disabled]:hover {
border: 1px outset #ccc;
}
.gwt-CheckBox {
}
.gwt-CheckBox-disabled {
color: #888;
}
.gwt-DecoratorPanel {
}
.gwt-DecoratorPanel .topCenter {
border-top: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .bottomCenter {
border-bottom: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .topCenterInner,
.gwt-DecoratorPanel .bottomCenterInner {
height: 1px;
line-height: 0px;
font-size: 1px;
}
.gwt-DecoratorPanel .middleLeft {
border-left: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleRight {
border-right: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleLeftInner,
.gwt-DecoratorPanel .middleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-DecoratorPanel .topLeftInner,
.gwt-DecoratorPanel .topRightInner,
.gwt-DecoratorPanel .bottomLeftInner,
.gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
zoom: 1;
font-size: 1px;
overflow: hidden;
}
.gwt-DecoratorPanel .topLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
}
.gwt-DecoratorPanel .topRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
}
.gwt-DecoratorPanel .bottomLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
}
.gwt-DecoratorPanel .bottomRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
}
* html .gwt-DecoratorPanel .topLeftInner,
* html .gwt-DecoratorPanel .topRightInner,
* html .gwt-DecoratorPanel .bottomLeftInner,
* html .gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
overflow: hidden;
}
.gwt-DialogBox .Caption {
background: #F1F1F1;
padding: 4px 4px 4px 8px;
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
font-weight: bold;
border-bottom: 1px solid #bbbbbb;
border-top: 1px solid #D2D2D2;
}
.gwt-DialogBox .dialogContent {
}
.gwt-DialogBox .dialogMiddleCenter {
padding: 3px;
background: white;
}
.gwt-DialogBox .dialogBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2945px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2144px;
}
.gwt-DialogBox .dialogMiddleLeft {
background: url(images/vborder.png) repeat-y -31px 0px;
}
.gwt-DialogBox .dialogMiddleRight {
background: url(images/vborder.png) repeat-y -32px 0px;
-background: url(images/vborder_ie6.png) repeat-y -32px 0px;
}
.gwt-DialogBox .dialogTopLeftInner {
width: 10px;
height: 8px;
zoom: 1;
}
.gwt-DialogBox .dialogTopRightInner {
width: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogTopLeft {
background: url(images/circles.png) no-repeat -20px 0px;
-background: url(images/circles_ie6.png) no-repeat -20px 0px;
}
.gwt-DialogBox .dialogTopRight {
background: url(images/circles.png) no-repeat -28px 0px;
-background: url(images/circles_ie6.png) no-repeat -28px 0px;
}
.gwt-DialogBox .dialogBottomLeft {
background: url(images/circles.png) no-repeat 0px -36px;
-background: url(images/circles_ie6.png) no-repeat 0px -36px;
}
.gwt-DialogBox .dialogBottomRight {
background: url(images/circles.png) no-repeat -8px -36px;
-background: url(images/circles_ie6.png) no-repeat -8px -36px;
}
* html .gwt-DialogBox .dialogTopLeftInner {
width: 10px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogTopRightInner {
width: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
overflow: hidden;
}
.gwt-DisclosurePanel {
}
.gwt-DisclosurePanel-open {
}
.gwt-DisclosurePanel-closed {
}
.gwt-DisclosurePanel .header,
.gwt-DisclosurePanel .header a,
.gwt-DisclosurePanel .header td {
text-decoration: none; /* Remove underline from header */
color: black;
cursor: pointer;
cursor: hand;
}
.gwt-DisclosurePanel .content {
border-right: 3px solid #e7e7e7;
padding: 4px 8px 4px 0px;
margin-right: 6px;
}
.gwt-FileUpload {
}
.gwt-Frame {
border-top: 2px solid #666;
border-left: 2px solid #666;
border-right: 2px solid #bbb;
border-bottom: 2px solid #bbb;
}
.gwt-HorizontalSplitPanel {
}
.gwt-HorizontalSplitPanel .hsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-VerticalSplitPanel {
}
.gwt-VerticalSplitPanel .vsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-HTML {
padding: 0 0px;
}
.gwt-Hyperlink {
cursor: pointer;
}
.gwt-Image {
}
.gwt-Label {
}
.gwt-ListBox {
}
.gwt-MenuBar {
cursor: default;
}
.gwt-MenuBar .gwt-MenuItem {
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-MenuBar .gwt-MenuItem-selected {
background: #E3E8F3;
}
.gwt-MenuBar-horizontal {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border: 1px solid #e0e0e0;
}
.gwt-MenuBar-horizontal .gwt-MenuItem {
padding: 5px 10px;
vertical-align: bottom;
color: #000;
font-weight: bold;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator {
width: 1px;
padding: 0px;
margin: 0px;
border: 0px;
border-right: 1px solid #ccc;
background: white;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner {
width: 1px;
height: 1px;
background: white;
}
.gwt-MenuBar-vertical {
margin-top: 0px;
margin-right: 0px;
background: white;
}
.gwt-MenuBar-vertical table {
border-collapse: collapse;
}
.gwt-MenuBar-vertical .gwt-MenuItem {
padding: 2px 1px 2px 40px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator {
padding: 2px 0px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator .menuSeparatorInner {
height: 1px;
padding: 0px;
border: 0px;
border-top: 1px solid #ccc;
overflow: hidden;
}
.gwt-MenuBar-vertical .subMenuIcon {
padding-left: 4px;
}
.gwt-MenuBar-vertical .subMenuIcon-selected {
background: #E3E8F3;
}
.gwt-MenuBarPopup {
margin: 0px 3px 0px 0px;
}
.gwt-MenuBarPopup .menuPopupTopCenter {
background: url(images/hborder.png) 0px -12px repeat-x;
}
.gwt-MenuBarPopup .menuPopupBottomCenter {
background: url(images/hborder.png) 0px -13px repeat-x;
-background: url(images/hborder_ie6.png) 0px -13px repeat-x;
}
.gwt-MenuBarPopup .menuPopupMiddleLeft {
background: url(images/vborder.png) -12px 0px repeat-y;
-background: url(images/vborder_ie6.png) -12px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupMiddleRight {
background: url(images/vborder.png) -13px 0px repeat-y;
-background: url(images/vborder_ie6.png) -13px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopLeft {
background: url(images/corner.png) no-repeat 0px -36px;
-background: url(images/corner_ie6.png) no-repeat 0px -36px;
}
.gwt-MenuBarPopup .menuPopupTopRight {
background: url(images/corner.png) no-repeat -5px -36px;
-background: url(images/corner_ie6.png) no-repeat -5px -36px;
}
.gwt-MenuBarPopup .menuPopupBottomLeft {
background: url(images/corner.png) no-repeat 0px -41px;
-background: url(images/corner_ie6.png) no-repeat 0px -41px;
}
.gwt-MenuBarPopup .menuPopupBottomRight {
background: url(images/corner.png) no-repeat -5px -41px;
-background: url(images/corner_ie6.png) no-repeat -5px -41px;
}
* html .gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
overflow: hidden;
}
.gwt-PasswordTextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-PasswordTextBox-readonly {
color: #888;
}
.gwt-PopupPanel {
border: 3px solid #e7e7e7;
padding: 3px;
background: white;
}
.gwt-DecoratedPopupPanel .popupContent {
}
.gwt-DecoratedPopupPanel .popupMiddleCenter {
padding: 3px;
background: #f1f1f1;
}
.gwt-DecoratedPopupPanel .popupTopCenter {
background: url(images/hborder.png) 0px -2937px repeat-x;
}
.gwt-DecoratedPopupPanel .popupBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2938px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2138px;
}
.gwt-DecoratedPopupPanel .popupMiddleLeft {
background: url(images/vborder.png) -21px 0px repeat-y;
}
.gwt-DecoratedPopupPanel .popupMiddleRight {
background: url(images/vborder.png) repeat-y -24px 0px;
-background: url(images/vborder_ie6.png) repeat-y -24px 0px;
}
.gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopLeft {
background: url(images/circles.png) no-repeat 0px -16px;
-background: url(images/circles_ie6.png) no-repeat 0px -16px;
}
.gwt-DecoratedPopupPanel .popupTopRight {
background: url(images/circles.png) no-repeat -6px -16px;
-background: url(images/circles_ie6.png) no-repeat -6px -16px;
}
.gwt-DecoratedPopupPanel .popupBottomLeft {
background: url(images/circles.png) no-repeat 0px -21px;
-background: url(images/circles_ie6.png) no-repeat 0px -21px;
}
.gwt-DecoratedPopupPanel .popupBottomRight {
background: url(images/circles.png) no-repeat -6px -21px;
-background: url(images/circles_ie6.png) no-repeat -6px -21px;
}
* html .gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-PopupPanelGlass {
background-color: #000;
opacity: 0.3;
filter: alpha(opacity=30);
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled,
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
border-radius: 2px;
-moz-border-radius: 2px;
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-PushButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
padding: 4px 6px 2px 4px;
outline:none;
}
.gwt-PushButton-down {
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-hovering {
border: 1px solid #939393;
border-top: 1px solid #333333;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-disabled {
border: 1px outset #ccc;
cursor: default;
opacity: 0.5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-RadioButton {
}
.gwt-RadioButton-disabled {
color: #888;
}
.gwt-RichTextArea {
}
.hasRichTextToolbar {
border: 0px;
}
.gwt-RichTextToolbar {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border-bottom: 1px solid #BBBBBB;
padding: 3px;
margin: 0px;
}
.gwt-RichTextToolbar .gwt-PushButton-up {
padding: 0px 0px 0px 1px;
margin-left: 4px;
margin-bottom: 4px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-StackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-DecoratedStackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 5px 10px 2px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
}
.gwt-DecoratedStackPanel .stackItemTopLeft,
.gwt-DecoratedStackPanel .stackItemTopRight {
height: 6px;
width: 6px;
zoom: 1;
}
.gwt-DecoratedStackPanel .stackItemTopLeft {
border-left: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat 0px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat 0px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopRight {
border-right: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat -6px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat -6px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopLeftInner,
.gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 1px;
height: 1px;
}
* html .gwt-DecoratedStackPanel .stackItemTopLeftInner,
* html .gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-DecoratedStackPanel .stackItemTopCenter {
background: url(images/hborder.png) 0px -21px repeat-x;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeft {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-left: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeftInner,
.gwt-DecoratedStackPanel .stackItemMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedStackPanel .stackItemMiddleRight {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-right: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleCenter {
font-weight: bold;
font-size: 1.3em;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopRight,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopLeft {
border: 0px;
background-color: white;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopLeft,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopRight {
background-color: white;
}
.gwt-SuggestBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-SuggestBoxPopup {
}
.gwt-SuggestBoxPopup .item {
padding: 2px 6px;
color: #000;
cursor: default;
font-size: 110%;
}
.gwt-SuggestBoxPopup .item-selected {
background: #D5E2FF;
}
.gwt-SuggestBoxPopup .suggestPopupContent {
background: white;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenter {
border-top: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupBottomCenter {
border-bottom: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenterInner,
.gwt-SuggestBoxPopup .suggestPopupBottomCenterInner {
height: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeft {
border-left: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleRight {
border-right: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner,
.gwt-SuggestBoxPopup .suggestPopupMiddleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeft {
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupTopRight {
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeft {
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRight {
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
width:5px;
height:5px;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
.gwt-TabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-TabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-TabBar .gwt-TabBarRest {
}
.gwt-TabBar .gwt-TabBarItem {
margin-right: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabBar .gwt-TabBarItem-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-TabBar .gwt-TabBarItem-disabled {
cursor: default;
color: #999999;
}
.gwt-TabPanel {
}
.gwt-TabPanelBottom {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
overflow: hidden;
padding: 6px;
}
.gwt-DecoratedTabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-DecoratedTabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-DecoratedTabBar .gwt-TabBarRest {
}
.gwt-DecoratedTabBar .gwt-TabBarItem {
border-collapse: collapse;
margin-right: 4px;
}
.gwt-DecoratedTabBar .tabTopCenter {
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabTopLeft,
.gwt-DecoratedTabBar .tabTopRight {
padding: 0px;
zoom: 1;
}
.gwt-DecoratedTabBar .tabTopLeftInner,
.gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
}
.gwt-DecoratedTabBar .tabTopLeft {
background: url(images/circles.png) no-repeat 0px 0px;
-background: url(images/circles_ie6.png) no-repeat 0px 0px;
}
.gwt-DecoratedTabBar .tabTopRight {
background: url(images/circles.png) no-repeat -3px 0px;
-background: url(images/circles_ie6.png) no-repeat -3px 0px;
}
* html .gwt-DecoratedTabBar .tabTopLeftInner,
* html .gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
overflow: hidden;
}
.gwt-DecoratedTabBar .tabMiddleLeft,
.gwt-DecoratedTabBar .tabMiddleRight {
width: 3px;
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabMiddleLeftInner,
.gwt-DecoratedTabBar .tabMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedTabBar .tabMiddleCenter {
padding: 0px 5px 4px 5px;
cursor: pointer;
cursor: hand;
color: #fff;
font-weight: normal;
text-align: center;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter {
background:#fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft {
background: url(images/circles.png) no-repeat -6px 0px;
-background: url(images/circles_ie6.png) no-repeat -6px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight {
background: url(images/circles.png) no-repeat -9px 0px;
-background: url(images/circles_ie6.png) no-repeat -9px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft,
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight {
background: #fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter {
cursor: default;
background: #fff;
color:#333;
font-weight:bold;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-disabled .tabMiddleCenter {
cursor: default;
color: #999999;
}
.gwt-TextArea {
padding: 4px;
border: 1px solid #ccc;
border-top: 1px solid #666;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextArea-readonly {
color: #888;
}
.gwt-TextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: small;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextBox-readonly {
color: #888;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled,
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
-moz-border-radius: 2px;
border-radius: 2px;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-ToggleButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
padding: 4px 6px 2px 4px;
}
.gwt-ToggleButton-down {
background-position: 0 -513px;
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-hovering {
background-position: 0 -513px;
border: 1px inset;
border-color: #9cf #69e #69e #7af;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-disabled {
background-position: 0 -513px;
border: 1px inset #ccc;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-Tree .gwt-TreeItem {
padding: 1px 0px;
margin: 0px;
white-space: nowrap;
cursor: hand;
cursor: pointer;
zoom: 1;
}
.gwt-Tree .gwt-TreeItem-selected {
background: #ebeff9;
}
.gwt-TreeItem .gwt-RadioButton input,
.gwt-TreeItem .gwt-CheckBox input {
margin-right: 0px;
}
* html .gwt-TreeItem .gwt-RadioButton input,
* html .gwt-TreeItem .gwt-CheckBox input {
margin-right: -4px;
}
.gwt-DateBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-DateBox input {
width: 8em;
}
.dateBoxFormatError {
background: #ffcccc;
}
.dateBoxPopup {
}
.gwt-DatePicker {
border: 1px solid #ccc;
border-top:1px solid #999;
cursor: default;
}
.gwt-DatePicker td,
.datePickerMonthSelector td:focus {
outline: none;
}
.datePickerDays {
width: 100%;
background: white;
}
.datePickerDay,
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
font-size: 85%;
text-align: center;
padding: 4px;
outline: none;
font-weight:bold;
color:#333;
border-right: 1px solid #EDEDED;
border-bottom: 1px solid #EDEDED;
}
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
background: #fff;
padding: 0px 4px 2px;
cursor: default;
color:#666;
font-size:70%;
font-weight:normal;
}
.datePickerDay {
padding: 4px 7px;
cursor: hand;
cursor: pointer;
}
.datePickerDayIsWeekend {
background: #f7f7f7;
}
.datePickerDayIsFiller {
color: #999;
font-weight:normal;
}
.datePickerDayIsValue {
background: #d7dfe8;
}
.datePickerDayIsDisabled {
color: #AAAAAA;
font-style: italic;
}
.datePickerDayIsHighlighted {
background: #F0E68C;
}
.datePickerDayIsValueAndHighlighted {
background: #d7dfe8;
}
.datePickerDayIsToday {
padding: 3px;
color: #fff;
background: url(images/hborder.png) repeat-x 0px -2607px;
}
.datePickerMonthSelector {
width: 100%;
padding: 1px 0 5px 0;
background: #fff;
}
td.datePickerMonth {
text-align: center;
vertical-align: middle;
white-space: nowrap;
font-size: 100%;
font-weight: bold;
color: #333;
}
.datePickerPreviousButton,
.datePickerNextButton {
font-size: 120%;
line-height: 1em;
color: #3a6aad;
cursor: hand;
cursor: pointer;
font-weight: bold;
padding: 0px 4px;
outline: none;
}
.gwt-StackLayoutPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader-hovering {
background: #d3def6;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 5px 10px 2px;
}
.gwt-TabLayoutPanel {
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs {
background: #ccc;
padding-top: 6px;
padding-right: 5px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContentContainer {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContent {
overflow: hidden;
padding: 6px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab {
margin-right: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-SplitLayoutPanel-HDragger {
background: #e7e7e7 url(images/thumb_vertical.png) center center no-repeat;
cursor: col-resize;
}
.gwt-SplitLayoutPanel-VDragger {
background: #e7e7e7 url(images/thumb_horz.png) center center no-repeat;
cursor: row-resize;
}
\ No newline at end of file
function jsme_export() {
var P = '', xb = '" for "gwt:onLoadErrorFn"', vb = '" for "gwt:onPropertyErrorFn"', ib = '"><\/script>', Z = '#', _b = '.cache.html', _ = '/', lb = '//', Tb = '0611409F263B5178342FE86F2A15096A', Vb = '396B3EA649BF55AAB5739A9E6278DBB1', Wb = '55B43920D2446B7876A6D007C7823913', $b = ':', Ub = ':1', pb = '::', hc = '<script defer="defer">jsme_export.onInjectionDone(\'jsme_export\')<\/script>', hb = '<script id="', sb = '=', $ = '?', Xb = 'A3B7F92654E7A93271CE0440D9179625', Yb = 'AC3F6C30BBCDFBDD8EAE31273C273251', Zb = 'B4ADD17684A99693FE9C9A04B1CAF23B', Eb = 'BackCompat', ub = 'Bad handler "', Db = 'CSS1Compat', gc = 'DOMContentLoaded', jb = 'SCRIPT', gb = '__gwt_marker_jsme_export', kb = 'base', cb = 'baseUrl', T = 'begin', S = 'bootstrap', bb = 'clear.cache.gif', Cb = 'compat.mode', rb = 'content', Y = 'end', Nb = 'gecko', Ob = 'gecko1_8', U = 'gwt.codesvr=', V = 'gwt.hosted=', W = 'gwt.hybrid', ac = 'gwt/clean/clean.css', wb = 'gwt:onLoadErrorFn', tb = 'gwt:onPropertyErrorFn', qb = 'gwt:property', fc = 'head', Rb = 'hosted.html?jsme_export', ec = 'href', Mb = 'ie6', Lb = 'ie8', Kb = 'ie9', yb = 'iframe', ab = 'img', zb = "javascript:''", Q = 'jsme_export', eb = 'jsme_export.nocache.js', ob = 'jsme_export::', bc = 'link', Qb = 'loadExternalRefs', mb = 'meta', Bb = 'moduleRequested', X = 'moduleStartup', Jb = 'msie', nb = 'name', Gb = 'opera', Ab = 'position:absolute;width:0;height:0;border:none', cc = 'rel', Ib = 'safari', db = 'script', Sb = 'selectingPermutation', R = 'startup', dc = 'stylesheet', fb = 'undefined', Pb = 'unknown', Fb = 'user.agent', Hb = 'webkit';
var m = window, n = document, o = m.__gwtStatsEvent ? function(a) {
return m.__gwtStatsEvent(a)
} : null, p = m.__gwtStatsSessionId ? m.__gwtStatsSessionId : null, q, r, s, t = P, u = {}, v = [], w = [], x = [], y = 0, z, A;
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: S,millis: (new Date).getTime(),type: T});
if (!m.__gwt_stylesLoaded) {
m.__gwt_stylesLoaded = {}
}
if (!m.__gwt_scriptsLoaded) {
m.__gwt_scriptsLoaded = {}
}
function B() {
var b = false;
try {
var c = m.location.search;
return (c.indexOf(U) != -1 || (c.indexOf(V) != -1 || m.external && m.external.gwtOnLoad)) && c.indexOf(W) == -1
} catch (a) {
}
B = function() {
return b
};
return b
}
function C() {
if (q && r) {
var b = n.getElementById(Q);
var c = b.contentWindow;
if (B()) {
c.__gwt_getProperty = function(a) {
return H(a)
}
}
jsme_export = null;
c.gwtOnLoad(z, Q, t, y);
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: X,millis: (new Date).getTime(),type: Y})
}
}
function D() {
function e(a) {
var b = a.lastIndexOf(Z);
if (b == -1) {
b = a.length
}
var c = a.indexOf($);
if (c == -1) {
c = a.length
}
var d = a.lastIndexOf(_, Math.min(c, b));
return d >= 0 ? a.substring(0, d + 1) : P
}
function f(a) {
if (a.match(/^\w+:\/\//)) {
} else {
var b = n.createElement(ab);
b.src = a + bb;
a = e(b.src)
}
return a
}
function g() {
var a = F(cb);
if (a != null) {
return a
}
return P
}
function h() {
var a = n.getElementsByTagName(db);
for (var b = 0; b < a.length; ++b) {
if (a[b].src.indexOf(eb) != -1) {
return e(a[b].src)
}
}
return P
}
function i() {
var a;
if (typeof isBodyLoaded == fb || !isBodyLoaded()) {
var b = gb;
var c;
n.write(hb + b + ib);
c = n.getElementById(b);
a = c && c.previousSibling;
while (a && a.tagName != jb) {
a = a.previousSibling
}
if (c) {
c.parentNode.removeChild(c)
}
if (a && a.src) {
return e(a.src)
}
}
return P
}
function j() {
var a = n.getElementsByTagName(kb);
if (a.length > 0) {
return a[a.length - 1].href
}
return P
}
function k() {
var a = n.location;
return a.href == a.protocol + lb + a.host + a.pathname + a.search + a.hash
}
var l = g();
if (l == P) {
l = h()
}
if (l == P) {
l = i()
}
if (l == P) {
l = j()
}
if (l == P && k()) {
l = e(n.location.href)
}
l = f(l);
t = l;
return l
}
function E() {
var b = document.getElementsByTagName(mb);
for (var c = 0, d = b.length; c < d; ++c) {
var e = b[c], f = e.getAttribute(nb), g;
if (f) {
f = f.replace(ob, P);
if (f.indexOf(pb) >= 0) {
continue
}
if (f == qb) {
g = e.getAttribute(rb);
if (g) {
var h, i = g.indexOf(sb);
if (i >= 0) {
f = g.substring(0, i);
h = g.substring(i + 1)
} else {
f = g;
h = P
}
u[f] = h
}
} else if (f == tb) {
g = e.getAttribute(rb);
if (g) {
try {
A = eval(g)
} catch (a) {
alert(ub + g + vb)
}
}
} else if (f == wb) {
g = e.getAttribute(rb);
if (g) {
try {
z = eval(g)
} catch (a) {
alert(ub + g + xb)
}
}
}
}
}
}
function F(a) {
var b = u[a];
return b == null ? null : b
}
function G(a, b) {
var c = x;
for (var d = 0, e = a.length - 1; d < e; ++d) {
c = c[a[d]] || (c[a[d]] = [])
}
c[a[e]] = b
}
function H(a) {
var b = w[a](), c = v[a];
if (b in c) {
return b
}
var d = [];
for (var e in c) {
d[c[e]] = e
}
if (A) {
A(a, d, b)
}
throw null
}
var I;
function J() {
if (!I) {
I = true;
var a = n.createElement(yb);
a.src = zb;
a.id = Q;
a.style.cssText = Ab;
a.tabIndex = -1;
n.body.appendChild(a);
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: X,millis: (new Date).getTime(),type: Bb});
a.contentWindow.location.replace(t + L)
}
}
w[Cb] = function() {
return document.compatMode == Db ? Db : Eb
};
v[Cb] = {BackCompat: 0,CSS1Compat: 1};
w[Fb] = function() {
var b = navigator.userAgent.toLowerCase();
var c = function(a) {
return parseInt(a[1]) * 1000 + parseInt(a[2])
};
if (function() {
return b.indexOf(Gb) != -1
}())
return Gb;
if (function() {
return b.indexOf(Hb) != -1
}())
return Ib;
if (function() {
return b.indexOf(Jb) != -1 && n.documentMode >= 9
}())
return Kb;
if (function() {
return b.indexOf(Jb) != -1 && n.documentMode >= 8
}())
return Lb;
if (function() {
var a = /msie ([0-9]+)\.([0-9]+)/.exec(b);
if (a && a.length == 3)
return c(a) >= 6000
}())
return Mb;
if (function() {
return b.indexOf(Nb) != -1
}())
return Ob;
return Pb
};
v[Fb] = {gecko1_8: 0,ie6: 1,ie8: 2,ie9: 3,opera: 4,safari: 5};
jsme_export.onScriptLoad = function() {
if (I) {
r = true;
C()
}
};
jsme_export.onInjectionDone = function() {
q = true;
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: Qb,millis: (new Date).getTime(),type: Y});
C()
};
E();
D();
var K;
var L;
if (B()) {
if (m.external && (m.external.initModule && m.external.initModule(Q))) {
m.location.reload();
return
}
L = Rb;
K = P
}
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: S,millis: (new Date).getTime(),type: Sb});
if (!B()) {
try {
G([Eb, Ib], Tb);
G([Db, Ib], Tb);
G([Eb, Ib], Tb + Ub);
G([Db, Ib], Tb + Ub);
G([Eb, Ob], Vb);
G([Db, Ob], Vb);
G([Eb, Ob], Vb + Ub);
G([Db, Ob], Vb + Ub);
G([Eb, Gb], Wb);
G([Db, Gb], Wb);
G([Eb, Gb], Wb + Ub);
G([Db, Gb], Wb + Ub);
G([Eb, Lb], Xb);
G([Db, Lb], Xb);
G([Eb, Lb], Xb + Ub);
G([Db, Lb], Xb + Ub);
G([Eb, Mb], Yb);
G([Db, Mb], Yb);
G([Eb, Mb], Yb + Ub);
G([Db, Mb], Yb + Ub);
G([Eb, Kb], Zb);
G([Db, Kb], Zb);
G([Eb, Kb], Zb + Ub);
G([Db, Kb], Zb + Ub);
K = x[H(Cb)][H(Fb)];
var M = K.indexOf($b);
if (M != -1) {
y = Number(K.substring(M + 1));
K = K.substring(0, M)
}
L = K + _b
} catch (a) {
return
}
}
var N;
function O() {
if (!s) {
s = true;
if (!__gwt_stylesLoaded[ac]) {
var a = n.createElement(bc);
__gwt_stylesLoaded[ac] = a;
a.setAttribute(cc, dc);
a.setAttribute(ec, t + ac);
n.getElementsByTagName(fc)[0].appendChild(a)
}
C();
if (n.removeEventListener) {
n.removeEventListener(gc, O, false)
}
if (N) {
clearInterval(N)
}
}
}
if (n.addEventListener) {
n.addEventListener(gc, function() {
J();
O()
}, false)
}
var N = setInterval(function() {
if (/loaded|complete/.test(n.readyState)) {
J();
O()
}
}, 50);
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: S,millis: (new Date).getTime(),type: Y});
o && o({moduleName: Q,sessionId: p,subSystem: R,evtGroup: Qb,millis: (new Date).getTime(),type: T});
n.write(hc);
}
jsme_export();
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* The file contains styles for GWT widgets in the Clean theme.
*
* In order to maintain cross-browser compatibility, the following syntax is
* used to create IE6 specific style rules:
* .gwt-Widget {
* property: rule applies to all browsers
* -property: rule applies only to IE6 (overrides previous rule)
* }
* * html .gwt-Widget {
* property: rule applies to all versions of IE
* }
*/
body, table td, select, button {
font-family: Arial Unicode MS, Arial, sans-serif;
font-size: small;
}
pre {
font-family: "courier new", courier;
font-size: small;
}
body {
color: black;
margin: 10px;
border: 0px;
padding: 0px;
background: #fff;
direction: ltr;
}
a, a:visited {
color: #0066cc;
text-decoration:none;
}
a:hover {
color: #0066cc;
text-decoration:underline;
}
select {
background: white;
}
/**
* The reference theme can be used to determine when this style sheet has
* loaded. Create a hidden div element with absolute position, assign the style
* name below, and attach it to the DOM. Use a timer to detect when the
* element's height and width are set to 5px.
*/
.gwt-Reference-clean {
height: 5px;
width: 5px;
zoom: 1;
}
.gwt-Button {
margin: 0;
padding: 5px 7px;
text-decoration: none;
cursor: pointer;
cursor: hand;
font-size:small;
background: url("images/hborder.png") repeat-x 0px -2077px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
border-radius: 3px;
-moz-border-radius: 3px;
}
.gwt-Button:active {
border: 1px inset #ccc;
}
.gwt-Button:hover {
border-color: #939393;
}
.gwt-Button[disabled] {
cursor: default;
color: #888;
}
.gwt-Button[disabled]:hover {
border: 1px outset #ccc;
}
.gwt-CheckBox {
}
.gwt-CheckBox-disabled {
color: #888;
}
.gwt-DecoratorPanel {
}
.gwt-DecoratorPanel .topCenter {
border-top: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .bottomCenter {
border-bottom: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .topCenterInner,
.gwt-DecoratorPanel .bottomCenterInner {
height: 1px;
line-height: 0px;
font-size: 1px;
}
.gwt-DecoratorPanel .middleLeft {
border-left: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleRight {
border-right: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleLeftInner,
.gwt-DecoratorPanel .middleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-DecoratorPanel .topLeftInner,
.gwt-DecoratorPanel .topRightInner,
.gwt-DecoratorPanel .bottomLeftInner,
.gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
zoom: 1;
font-size: 1px;
overflow: hidden;
}
.gwt-DecoratorPanel .topLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
}
.gwt-DecoratorPanel .topRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
}
.gwt-DecoratorPanel .bottomLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
}
.gwt-DecoratorPanel .bottomRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
}
* html .gwt-DecoratorPanel .topLeftInner,
* html .gwt-DecoratorPanel .topRightInner,
* html .gwt-DecoratorPanel .bottomLeftInner,
* html .gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
overflow: hidden;
}
.gwt-DialogBox .Caption {
background: #F1F1F1;
padding: 4px 8px 4px 4px;
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
font-weight: bold;
border-bottom: 1px solid #bbbbbb;
border-top: 1px solid #D2D2D2;
}
.gwt-DialogBox .dialogContent {
}
.gwt-DialogBox .dialogMiddleCenter {
padding: 3px;
background: white;
}
.gwt-DialogBox .dialogBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2945px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2144px;
}
.gwt-DialogBox .dialogMiddleLeft {
background: url(images/vborder.png) repeat-y -31px 0px;
}
.gwt-DialogBox .dialogMiddleRight {
background: url(images/vborder.png) repeat-y -32px 0px;
-background: url(images/vborder_ie6.png) repeat-y -32px 0px;
}
.gwt-DialogBox .dialogTopLeftInner {
width: 10px;
height: 8px;
zoom: 1;
}
.gwt-DialogBox .dialogTopRightInner {
width: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogTopLeft {
background: url(images/circles.png) no-repeat -20px 0px;
-background: url(images/circles_ie6.png) no-repeat -20px 0px;
}
.gwt-DialogBox .dialogTopRight {
background: url(images/circles.png) no-repeat -28px 0px;
-background: url(images/circles_ie6.png) no-repeat -28px 0px;
}
.gwt-DialogBox .dialogBottomLeft {
background: url(images/circles.png) no-repeat 0px -36px;
-background: url(images/circles_ie6.png) no-repeat 0px -36px;
}
.gwt-DialogBox .dialogBottomRight {
background: url(images/circles.png) no-repeat -8px -36px;
-background: url(images/circles_ie6.png) no-repeat -8px -36px;
}
* html .gwt-DialogBox .dialogTopLeftInner {
width: 10px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogTopRightInner {
width: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
overflow: hidden;
}
.gwt-DisclosurePanel {
}
.gwt-DisclosurePanel-open {
}
.gwt-DisclosurePanel-closed {
}
.gwt-DisclosurePanel .header,
.gwt-DisclosurePanel .header a,
.gwt-DisclosurePanel .header td {
text-decoration: none; /* Remove underline from header */
color: black;
cursor: pointer;
cursor: hand;
}
.gwt-DisclosurePanel .content {
border-left: 3px solid #e7e7e7;
padding: 4px 0px 4px 8px;
margin-left: 6px;
}
.gwt-FileUpload {
}
.gwt-Frame {
border-top: 2px solid #666;
border-left: 2px solid #666;
border-right: 2px solid #bbb;
border-bottom: 2px solid #bbb;
}
.gwt-HorizontalSplitPanel {
}
.gwt-HorizontalSplitPanel .hsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-VerticalSplitPanel {
}
.gwt-VerticalSplitPanel .vsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-HTML {
padding: 0 0px;
}
.gwt-Hyperlink {
cursor: pointer;
}
.gwt-Image {
}
.gwt-Label {
}
.gwt-ListBox {
}
.gwt-MenuBar {
cursor: default;
}
.gwt-MenuBar .gwt-MenuItem {
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-MenuBar .gwt-MenuItem-selected {
background: #E3E8F3;
}
.gwt-MenuBar-horizontal {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border: 1px solid #e0e0e0;
}
.gwt-MenuBar-horizontal .gwt-MenuItem {
padding: 5px 10px;
vertical-align: bottom;
color: #000;
font-weight: bold;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator {
width: 1px;
padding: 0px;
margin: 0px;
border: 0px;
border-left: 1px solid #ccc;
background: white;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner {
width: 1px;
height: 1px;
background: white;
}
.gwt-MenuBar-vertical {
margin-top: 0px;
margin-left: 0px;
background: white;
}
.gwt-MenuBar-vertical table {
border-collapse: collapse;
}
.gwt-MenuBar-vertical .gwt-MenuItem {
padding: 2px 40px 2px 1px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator {
padding: 2px 0px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator .menuSeparatorInner {
height: 1px;
padding: 0px;
border: 0px;
border-top: 1px solid #ccc;
overflow: hidden;
}
.gwt-MenuBar-vertical .subMenuIcon {
padding-right: 4px;
}
.gwt-MenuBar-vertical .subMenuIcon-selected {
background: #E3E8F3;
}
.gwt-MenuBarPopup {
margin: 0px 0px 0px 3px;
}
.gwt-MenuBarPopup .menuPopupTopCenter {
background: url(images/hborder.png) 0px -12px repeat-x;
}
.gwt-MenuBarPopup .menuPopupBottomCenter {
background: url(images/hborder.png) 0px -13px repeat-x;
-background: url(images/hborder_ie6.png) 0px -13px repeat-x;
}
.gwt-MenuBarPopup .menuPopupMiddleLeft {
background: url(images/vborder.png) -12px 0px repeat-y;
-background: url(images/vborder_ie6.png) -12px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupMiddleRight {
background: url(images/vborder.png) -13px 0px repeat-y;
-background: url(images/vborder_ie6.png) -13px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopLeft {
background: url(images/corner.png) no-repeat 0px -36px;
-background: url(images/corner_ie6.png) no-repeat 0px -36px;
}
.gwt-MenuBarPopup .menuPopupTopRight {
background: url(images/corner.png) no-repeat -5px -36px;
-background: url(images/corner_ie6.png) no-repeat -5px -36px;
}
.gwt-MenuBarPopup .menuPopupBottomLeft {
background: url(images/corner.png) no-repeat 0px -41px;
-background: url(images/corner_ie6.png) no-repeat 0px -41px;
}
.gwt-MenuBarPopup .menuPopupBottomRight {
background: url(images/corner.png) no-repeat -5px -41px;
-background: url(images/corner_ie6.png) no-repeat -5px -41px;
}
* html .gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
overflow: hidden;
}
.gwt-PasswordTextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-PasswordTextBox-readonly {
color: #888;
}
.gwt-PopupPanel {
border: 3px solid #e7e7e7;
padding: 3px;
background: white;
}
.gwt-DecoratedPopupPanel .popupContent {
}
.gwt-DecoratedPopupPanel .popupMiddleCenter {
padding: 3px;
background: #f1f1f1;
}
.gwt-DecoratedPopupPanel .popupTopCenter {
background: url(images/hborder.png) 0px -2937px repeat-x;
}
.gwt-DecoratedPopupPanel .popupBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2938px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2138px;
}
.gwt-DecoratedPopupPanel .popupMiddleLeft {
background: url(images/vborder.png) -21px 0px repeat-y;
}
.gwt-DecoratedPopupPanel .popupMiddleRight {
background: url(images/vborder.png) repeat-y -24px 0px;
-background: url(images/vborder_ie6.png) repeat-y -24px 0px;
}
.gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopLeft {
background: url(images/circles.png) no-repeat 0px -16px;
-background: url(images/circles_ie6.png) no-repeat 0px -16px;
}
.gwt-DecoratedPopupPanel .popupTopRight {
background: url(images/circles.png) no-repeat -6px -16px;
-background: url(images/circles_ie6.png) no-repeat -6px -16px;
}
.gwt-DecoratedPopupPanel .popupBottomLeft {
background: url(images/circles.png) no-repeat 0px -21px;
-background: url(images/circles_ie6.png) no-repeat 0px -21px;
}
.gwt-DecoratedPopupPanel .popupBottomRight {
background: url(images/circles.png) no-repeat -6px -21px;
-background: url(images/circles_ie6.png) no-repeat -6px -21px;
}
* html .gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-PopupPanelGlass {
background-color: #000;
opacity: 0.3;
filter: alpha(opacity=30);
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled,
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
border-radius: 2px;
-moz-border-radius: 2px;
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-PushButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
padding: 4px 4px 2px 6px;
outline:none;
}
.gwt-PushButton-down {
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-hovering {
border: 1px solid #939393;
border-top: 1px solid #333333;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-disabled {
border: 1px outset #ccc;
cursor: default;
opacity: 0.5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-RadioButton {
}
.gwt-RadioButton-disabled {
color: #888;
}
.gwt-RichTextArea {
}
.hasRichTextToolbar {
border: 0px;
}
.gwt-RichTextToolbar {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border-bottom: 1px solid #BBBBBB;
padding: 3px;
margin: 0px;
}
.gwt-RichTextToolbar .gwt-PushButton-up {
padding: 0px 1px 0px 0px;
margin-right: 4px;
margin-bottom: 4px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
margin-right: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-StackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-DecoratedStackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
}
.gwt-DecoratedStackPanel .stackItemTopLeft,
.gwt-DecoratedStackPanel .stackItemTopRight {
height: 6px;
width: 6px;
zoom: 1;
}
.gwt-DecoratedStackPanel .stackItemTopLeft {
border-left: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat 0px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat 0px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopRight {
border-right: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat -6px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat -6px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopLeftInner,
.gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 1px;
height: 1px;
}
* html .gwt-DecoratedStackPanel .stackItemTopLeftInner,
* html .gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-DecoratedStackPanel .stackItemTopCenter {
background: url(images/hborder.png) 0px -21px repeat-x;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeft {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-left: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeftInner,
.gwt-DecoratedStackPanel .stackItemMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedStackPanel .stackItemMiddleRight {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-right: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleCenter {
font-weight: bold;
font-size: 1.3em;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopRight,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopLeft {
border: 0px;
background-color: white;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopLeft,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopRight {
background-color: white;
}
.gwt-SuggestBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-SuggestBoxPopup {
}
.gwt-SuggestBoxPopup .item {
padding: 2px 6px;
color: #000;
cursor: default;
font-size: 110%;
}
.gwt-SuggestBoxPopup .item-selected {
background: #D5E2FF;
}
.gwt-SuggestBoxPopup .suggestPopupContent {
background: white;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenter {
border-top: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupBottomCenter {
border-bottom: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenterInner,
.gwt-SuggestBoxPopup .suggestPopupBottomCenterInner {
height: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeft {
border-left: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleRight {
border-right: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner,
.gwt-SuggestBoxPopup .suggestPopupMiddleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeft {
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupTopRight {
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeft {
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRight {
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
width:5px;
height:5px;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
.gwt-TabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-TabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-TabBar .gwt-TabBarRest {
}
.gwt-TabBar .gwt-TabBarItem {
margin-left: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabBar .gwt-TabBarItem-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-TabBar .gwt-TabBarItem-disabled {
cursor: default;
color: #999999;
}
.gwt-TabPanel {
}
.gwt-TabPanelBottom {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
overflow: hidden;
padding: 6px;
}
.gwt-DecoratedTabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-DecoratedTabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-DecoratedTabBar .gwt-TabBarRest {
}
.gwt-DecoratedTabBar .gwt-TabBarItem {
border-collapse: collapse;
margin-left: 4px;
}
.gwt-DecoratedTabBar .tabTopCenter {
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabTopLeft,
.gwt-DecoratedTabBar .tabTopRight {
padding: 0px;
zoom: 1;
}
.gwt-DecoratedTabBar .tabTopLeftInner,
.gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
}
.gwt-DecoratedTabBar .tabTopLeft {
background: url(images/circles.png) no-repeat 0px 0px;
-background: url(images/circles_ie6.png) no-repeat 0px 0px;
}
.gwt-DecoratedTabBar .tabTopRight {
background: url(images/circles.png) no-repeat -3px 0px;
-background: url(images/circles_ie6.png) no-repeat -3px 0px;
}
* html .gwt-DecoratedTabBar .tabTopLeftInner,
* html .gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
overflow: hidden;
}
.gwt-DecoratedTabBar .tabMiddleLeft,
.gwt-DecoratedTabBar .tabMiddleRight {
width: 3px;
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabMiddleLeftInner,
.gwt-DecoratedTabBar .tabMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedTabBar .tabMiddleCenter {
padding: 0px 5px 4px 5px;
cursor: pointer;
cursor: hand;
color: #fff;
font-weight: normal;
text-align: center;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter {
background:#fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft {
background: url(images/circles.png) no-repeat -6px 0px;
-background: url(images/circles_ie6.png) no-repeat -6px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight {
background: url(images/circles.png) no-repeat -9px 0px;
-background: url(images/circles_ie6.png) no-repeat -9px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft,
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight {
background: #fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter {
cursor: default;
background: #fff;
color:#333;
font-weight:bold;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-disabled .tabMiddleCenter {
cursor: default;
color: #999999;
}
.gwt-TextArea {
padding: 4px;
border: 1px solid #ccc;
border-top: 1px solid #666;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextArea-readonly {
color: #888;
}
.gwt-TextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: small;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextBox-readonly {
color: #888;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled,
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
-moz-border-radius: 2px;
border-radius: 2px;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-ToggleButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
padding: 4px 4px 2px 6px;
}
.gwt-ToggleButton-down {
background-position: 0 -513px;
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-hovering {
background-position: 0 -513px;
border: 1px inset;
border-color: #9cf #69e #69e #7af;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-disabled {
background-position: 0 -513px;
border: 1px inset #ccc;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-Tree .gwt-TreeItem {
padding: 1px 0px;
margin: 0px;
white-space: nowrap;
cursor: hand;
cursor: pointer;
}
.gwt-Tree .gwt-TreeItem-selected {
background: #ebeff9;
}
.gwt-TreeItem .gwt-RadioButton input,
.gwt-TreeItem .gwt-CheckBox input {
margin-left: 0px;
}
* html .gwt-TreeItem .gwt-RadioButton input,
* html .gwt-TreeItem .gwt-CheckBox input {
margin-left: -4px;
}
.gwt-DateBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-DateBox input {
width: 8em;
}
.dateBoxFormatError {
background: #ffcccc;
}
.dateBoxPopup {
}
.gwt-DatePicker {
border: 1px solid #ccc;
border-top:1px solid #999;
cursor: default;
}
.gwt-DatePicker td,
.datePickerMonthSelector td:focus {
outline: none;
}
.datePickerDays {
width: 100%;
background: white;
}
.datePickerDay,
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
font-size: 85%;
text-align: center;
padding: 4px;
outline: none;
font-weight:bold;
color:#333;
border-right: 1px solid #EDEDED;
border-bottom: 1px solid #EDEDED;
}
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
background: #fff;
padding: 0px 4px 2px;
cursor: default;
color:#666;
font-size:70%;
font-weight:normal;
}
.datePickerDay {
padding: 4px 7px;
cursor: hand;
cursor: pointer;
}
.datePickerDayIsWeekend {
background: #f7f7f7;
}
.datePickerDayIsFiller {
color: #999;
font-weight:normal;
}
.datePickerDayIsValue {
background: #d7dfe8;
}
.datePickerDayIsDisabled {
color: #AAAAAA;
font-style: italic;
}
.datePickerDayIsHighlighted {
background: #F0E68C;
}
.datePickerDayIsValueAndHighlighted {
background: #d7dfe8;
}
.datePickerDayIsToday {
padding: 3px;
color: #fff;
background: url(images/hborder.png) repeat-x 0px -2607px;
}
.datePickerMonthSelector {
width: 100%;
padding: 1px 0 5px 0;
background: #fff;
}
td.datePickerMonth {
text-align: center;
vertical-align: middle;
white-space: nowrap;
font-size: 100%;
font-weight: bold;
color: #333;
}
.datePickerPreviousButton,
.datePickerNextButton {
font-size: 120%;
line-height: 1em;
color: #3a6aad;
cursor: hand;
cursor: pointer;
font-weight: bold;
padding: 0px 4px;
outline: none;
}
.gwt-StackLayoutPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader-hovering {
background: #d3def6;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-TabLayoutPanel {
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs {
background: #ccc;
padding-top: 6px;
padding-left: 5px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContentContainer {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContent {
overflow: hidden;
padding: 6px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab {
margin-left: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-SplitLayoutPanel-HDragger {
background: #e7e7e7 url(images/thumb_vertical.png) center center no-repeat;
cursor: col-resize;
}
.gwt-SplitLayoutPanel-VDragger {
background: #e7e7e7 url(images/thumb_horz.png) center center no-repeat;
cursor: row-resize;
}
\ No newline at end of file
/**
* The file contains styles for GWT widgets in the Clean theme, in RTL mode.
*
* In order to maintain cross-browser compatibility, the following syntax is
* used to create IE6 specific style rules:
* .gwt-Widget {
* property: rule applies to all browsers
* -property: rule applies only to IE6 (overrides previous rule)
* }
* * html .gwt-Widget {
* property: rule applies to all versions of IE
* }
*/
body, table td, select, button {
font-family: Arial Unicode MS, Arial, sans-serif;
font-size: small;
}
pre {
font-family: "courier new", courier;
font-size: small;
}
body {
color: black;
margin: 10px;
border: 0px;
padding: 0px;
background: #fff;
direction: rtl;
}
a, a:visited {
color: #0066cc;
text-decoration:none;
}
a:hover {
color: #0066cc;
text-decoration:underline;
}
select {
background: white;
}
/**
* The reference theme can be used to determine when this style sheet has
* loaded. Create a hidden div element with absolute position, assign the style
* name below, and attach it to the DOM. Use a timer to detect when the
* element's height and width are set to 5px.
*/
.gwt-Reference-clean-rtl {
height: 5px;
width: 5px;
zoom: 1;
}
.gwt-Button {
margin: 0;
padding: 5px 7px;
text-decoration: none;
cursor: pointer;
cursor: hand;
font-size:small;
background: url("images/hborder.png") repeat-x 0px -2077px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
border-radius: 3px;
-moz-border-radius: 3px;
}
.gwt-Button:active {
border: 1px inset #ccc;
}
.gwt-Button:hover {
border-color: #939393;
}
.gwt-Button[disabled] {
cursor: default;
color: #888;
}
.gwt-Button[disabled]:hover {
border: 1px outset #ccc;
}
.gwt-CheckBox {
}
.gwt-CheckBox-disabled {
color: #888;
}
.gwt-DecoratorPanel {
}
.gwt-DecoratorPanel .topCenter {
border-top: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .bottomCenter {
border-bottom: 1px solid #bbb;
line-height: 0px;
}
.gwt-DecoratorPanel .topCenterInner,
.gwt-DecoratorPanel .bottomCenterInner {
height: 1px;
line-height: 0px;
font-size: 1px;
}
.gwt-DecoratorPanel .middleLeft {
border-left: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleRight {
border-right: 1px solid #bbb;
}
.gwt-DecoratorPanel .middleLeftInner,
.gwt-DecoratorPanel .middleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-DecoratorPanel .topLeftInner,
.gwt-DecoratorPanel .topRightInner,
.gwt-DecoratorPanel .bottomLeftInner,
.gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
zoom: 1;
font-size: 1px;
overflow: hidden;
}
.gwt-DecoratorPanel .topLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
}
.gwt-DecoratorPanel .topRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
}
.gwt-DecoratorPanel .bottomLeft {
line-height: 0px;
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
}
.gwt-DecoratorPanel .bottomRight {
line-height: 0px;
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
}
* html .gwt-DecoratorPanel .topLeftInner,
* html .gwt-DecoratorPanel .topRightInner,
* html .gwt-DecoratorPanel .bottomLeftInner,
* html .gwt-DecoratorPanel .bottomRightInner {
width: 5px;
height: 5px;
overflow: hidden;
}
.gwt-DialogBox .Caption {
background: #F1F1F1;
padding: 4px 4px 4px 8px;
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
font-weight: bold;
border-bottom: 1px solid #bbbbbb;
border-top: 1px solid #D2D2D2;
}
.gwt-DialogBox .dialogContent {
}
.gwt-DialogBox .dialogMiddleCenter {
padding: 3px;
background: white;
}
.gwt-DialogBox .dialogBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2945px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2144px;
}
.gwt-DialogBox .dialogMiddleLeft {
background: url(images/vborder.png) repeat-y -31px 0px;
}
.gwt-DialogBox .dialogMiddleRight {
background: url(images/vborder.png) repeat-y -32px 0px;
-background: url(images/vborder_ie6.png) repeat-y -32px 0px;
}
.gwt-DialogBox .dialogTopLeftInner {
width: 10px;
height: 8px;
zoom: 1;
}
.gwt-DialogBox .dialogTopRightInner {
width: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
zoom: 1;
}
.gwt-DialogBox .dialogTopLeft {
background: url(images/circles.png) no-repeat -20px 0px;
-background: url(images/circles_ie6.png) no-repeat -20px 0px;
}
.gwt-DialogBox .dialogTopRight {
background: url(images/circles.png) no-repeat -28px 0px;
-background: url(images/circles_ie6.png) no-repeat -28px 0px;
}
.gwt-DialogBox .dialogBottomLeft {
background: url(images/circles.png) no-repeat 0px -36px;
-background: url(images/circles_ie6.png) no-repeat 0px -36px;
}
.gwt-DialogBox .dialogBottomRight {
background: url(images/circles.png) no-repeat -8px -36px;
-background: url(images/circles_ie6.png) no-repeat -8px -36px;
}
* html .gwt-DialogBox .dialogTopLeftInner {
width: 10px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogTopRightInner {
width: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomLeftInner {
width: 10px;
height: 12px;
overflow: hidden;
}
* html .gwt-DialogBox .dialogBottomRightInner {
width: 12px;
height: 12px;
overflow: hidden;
}
.gwt-DisclosurePanel {
}
.gwt-DisclosurePanel-open {
}
.gwt-DisclosurePanel-closed {
}
.gwt-DisclosurePanel .header,
.gwt-DisclosurePanel .header a,
.gwt-DisclosurePanel .header td {
text-decoration: none; /* Remove underline from header */
color: black;
cursor: pointer;
cursor: hand;
}
.gwt-DisclosurePanel .content {
border-right: 3px solid #e7e7e7;
padding: 4px 8px 4px 0px;
margin-right: 6px;
}
.gwt-FileUpload {
}
.gwt-Frame {
border-top: 2px solid #666;
border-left: 2px solid #666;
border-right: 2px solid #bbb;
border-bottom: 2px solid #bbb;
}
.gwt-HorizontalSplitPanel {
}
.gwt-HorizontalSplitPanel .hsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-VerticalSplitPanel {
}
.gwt-VerticalSplitPanel .vsplitter {
cursor: move;
border: 0px;
background: #e7e7e7;
line-height: 0px;
}
.gwt-HTML {
padding: 0 0px;
}
.gwt-Hyperlink {
cursor: pointer;
}
.gwt-Image {
}
.gwt-Label {
}
.gwt-ListBox {
}
.gwt-MenuBar {
cursor: default;
}
.gwt-MenuBar .gwt-MenuItem {
cursor: default;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-MenuBar .gwt-MenuItem-selected {
background: #E3E8F3;
}
.gwt-MenuBar-horizontal {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border: 1px solid #e0e0e0;
}
.gwt-MenuBar-horizontal .gwt-MenuItem {
padding: 5px 10px;
vertical-align: bottom;
color: #000;
font-weight: bold;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator {
width: 1px;
padding: 0px;
margin: 0px;
border: 0px;
border-right: 1px solid #ccc;
background: white;
}
.gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner {
width: 1px;
height: 1px;
background: white;
}
.gwt-MenuBar-vertical {
margin-top: 0px;
margin-right: 0px;
background: white;
}
.gwt-MenuBar-vertical table {
border-collapse: collapse;
}
.gwt-MenuBar-vertical .gwt-MenuItem {
padding: 2px 1px 2px 40px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator {
padding: 2px 0px;
}
.gwt-MenuBar-vertical .gwt-MenuItemSeparator .menuSeparatorInner {
height: 1px;
padding: 0px;
border: 0px;
border-top: 1px solid #ccc;
overflow: hidden;
}
.gwt-MenuBar-vertical .subMenuIcon {
padding-left: 4px;
}
.gwt-MenuBar-vertical .subMenuIcon-selected {
background: #E3E8F3;
}
.gwt-MenuBarPopup {
margin: 0px 3px 0px 0px;
}
.gwt-MenuBarPopup .menuPopupTopCenter {
background: url(images/hborder.png) 0px -12px repeat-x;
}
.gwt-MenuBarPopup .menuPopupBottomCenter {
background: url(images/hborder.png) 0px -13px repeat-x;
-background: url(images/hborder_ie6.png) 0px -13px repeat-x;
}
.gwt-MenuBarPopup .menuPopupMiddleLeft {
background: url(images/vborder.png) -12px 0px repeat-y;
-background: url(images/vborder_ie6.png) -12px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupMiddleRight {
background: url(images/vborder.png) -13px 0px repeat-y;
-background: url(images/vborder_ie6.png) -13px 0px repeat-y;
}
.gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
zoom: 1;
}
.gwt-MenuBarPopup .menuPopupTopLeft {
background: url(images/corner.png) no-repeat 0px -36px;
-background: url(images/corner_ie6.png) no-repeat 0px -36px;
}
.gwt-MenuBarPopup .menuPopupTopRight {
background: url(images/corner.png) no-repeat -5px -36px;
-background: url(images/corner_ie6.png) no-repeat -5px -36px;
}
.gwt-MenuBarPopup .menuPopupBottomLeft {
background: url(images/corner.png) no-repeat 0px -41px;
-background: url(images/corner_ie6.png) no-repeat 0px -41px;
}
.gwt-MenuBarPopup .menuPopupBottomRight {
background: url(images/corner.png) no-repeat -5px -41px;
-background: url(images/corner_ie6.png) no-repeat -5px -41px;
}
* html .gwt-MenuBarPopup .menuPopupTopLeftInner {
width: 5px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupTopRightInner {
width: 8px;
height: 5px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomLeftInner {
width: 5px;
height: 8px;
overflow: hidden;
}
* html .gwt-MenuBarPopup .menuPopupBottomRightInner {
width: 8px;
height: 8px;
overflow: hidden;
}
.gwt-PasswordTextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-PasswordTextBox-readonly {
color: #888;
}
.gwt-PopupPanel {
border: 3px solid #e7e7e7;
padding: 3px;
background: white;
}
.gwt-DecoratedPopupPanel .popupContent {
}
.gwt-DecoratedPopupPanel .popupMiddleCenter {
padding: 3px;
background: #f1f1f1;
}
.gwt-DecoratedPopupPanel .popupTopCenter {
background: url(images/hborder.png) 0px -2937px repeat-x;
}
.gwt-DecoratedPopupPanel .popupBottomCenter {
background: url(images/hborder.png) repeat-x 0px -2938px;
-background: url(images/hborder_ie6.png) repeat-x 0px -2138px;
}
.gwt-DecoratedPopupPanel .popupMiddleLeft {
background: url(images/vborder.png) -21px 0px repeat-y;
}
.gwt-DecoratedPopupPanel .popupMiddleRight {
background: url(images/vborder.png) repeat-y -24px 0px;
-background: url(images/vborder_ie6.png) repeat-y -24px 0px;
}
.gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
zoom: 1;
}
.gwt-DecoratedPopupPanel .popupTopLeft {
background: url(images/circles.png) no-repeat 0px -16px;
-background: url(images/circles_ie6.png) no-repeat 0px -16px;
}
.gwt-DecoratedPopupPanel .popupTopRight {
background: url(images/circles.png) no-repeat -6px -16px;
-background: url(images/circles_ie6.png) no-repeat -6px -16px;
}
.gwt-DecoratedPopupPanel .popupBottomLeft {
background: url(images/circles.png) no-repeat 0px -21px;
-background: url(images/circles_ie6.png) no-repeat 0px -21px;
}
.gwt-DecoratedPopupPanel .popupBottomRight {
background: url(images/circles.png) no-repeat -6px -21px;
-background: url(images/circles_ie6.png) no-repeat -6px -21px;
}
* html .gwt-DecoratedPopupPanel .popupTopLeftInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupTopRightInner {
width: 6px;
height: 5px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomLeftInner {
width: 6px;
height: 6px;
overflow: hidden;
}
* html .gwt-DecoratedPopupPanel .popupBottomRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-PopupPanelGlass {
background-color: #000;
opacity: 0.3;
filter: alpha(opacity=30);
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled,
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
border-radius: 2px;
-moz-border-radius: 2px;
}
.gwt-PushButton-up,
.gwt-PushButton-up-hovering,
.gwt-PushButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-PushButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-PushButton-down,
.gwt-PushButton-down-hovering,
.gwt-PushButton-down-disabled {
padding: 4px 6px 2px 4px;
outline:none;
}
.gwt-PushButton-down {
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-hovering {
border: 1px solid #939393;
border-top: 1px solid #333333;
cursor: pointer;
cursor: hand;
}
.gwt-PushButton-down-disabled {
border: 1px outset #ccc;
cursor: default;
opacity: 0.5;
filter: alpha(opacity=45);
zoom: 1;
}
.gwt-RadioButton {
}
.gwt-RadioButton-disabled {
color: #888;
}
.gwt-RichTextArea {
}
.hasRichTextToolbar {
border: 0px;
}
.gwt-RichTextToolbar {
background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
border-bottom: 1px solid #BBBBBB;
padding: 3px;
margin: 0px;
}
.gwt-RichTextToolbar .gwt-PushButton-up {
padding: 0px 0px 0px 1px;
margin-left: 4px;
margin-bottom: 4px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
}
.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 0px 0px 1px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
margin-left: 4px;
margin-bottom: 4px;
padding: 0px 1px 0px 0px;
border-width: 1px;
}
.gwt-StackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 2px 10px 5px;
}
.gwt-DecoratedStackPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .gwt-StackPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 5px 10px 2px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem {
cursor: pointer;
cursor: hand;
}
.gwt-DecoratedStackPanel .stackItemTopLeft,
.gwt-DecoratedStackPanel .stackItemTopRight {
height: 6px;
width: 6px;
zoom: 1;
}
.gwt-DecoratedStackPanel .stackItemTopLeft {
border-left: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat 0px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat 0px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopRight {
border-right: 1px solid #bbbbbb;
background: #d3def6 url(images/corner.png) no-repeat -6px -49px;
-background: #d3def6 url(images/corner_ie6.png) no-repeat -6px -49px;
}
.gwt-DecoratedStackPanel .stackItemTopLeftInner,
.gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 1px;
height: 1px;
}
* html .gwt-DecoratedStackPanel .stackItemTopLeftInner,
* html .gwt-DecoratedStackPanel .stackItemTopRightInner {
width: 6px;
height: 6px;
overflow: hidden;
}
.gwt-DecoratedStackPanel .stackItemTopCenter {
background: url(images/hborder.png) 0px -21px repeat-x;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeft {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-left: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleLeftInner,
.gwt-DecoratedStackPanel .stackItemMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedStackPanel .stackItemMiddleRight {
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
border-right: 1px solid #bbbbbb;
}
.gwt-DecoratedStackPanel .stackItemMiddleCenter {
font-weight: bold;
font-size: 1.3em;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopRight,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopLeft {
border: 0px;
background-color: white;
}
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopLeft,
.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopRight {
background-color: white;
}
.gwt-SuggestBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-SuggestBoxPopup {
}
.gwt-SuggestBoxPopup .item {
padding: 2px 6px;
color: #000;
cursor: default;
font-size: 110%;
}
.gwt-SuggestBoxPopup .item-selected {
background: #D5E2FF;
}
.gwt-SuggestBoxPopup .suggestPopupContent {
background: white;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenter {
border-top: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupBottomCenter {
border-bottom: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupTopCenterInner,
.gwt-SuggestBoxPopup .suggestPopupBottomCenterInner {
height: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeft {
border-left: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleRight {
border-right: 1px solid #bbb;
}
.gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner,
.gwt-SuggestBoxPopup .suggestPopupMiddleRightInner {
width: 1px;
line-height: 1px;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
zoom: 1;
}
.gwt-SuggestBoxPopup .suggestPopupTopLeft {
background: url(images/circles.png) no-repeat 0px -6px;
-background: url(images/circles_ie6.png) no-repeat 0px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupTopRight {
background: url(images/circles.png) no-repeat -5px -6px;
-background: url(images/circles_ie6.png) no-repeat -5px -6px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomLeft {
background: url(images/circles.png) no-repeat 0px -11px;
-background: url(images/circles_ie6.png) no-repeat 0px -11px;
width:5px;
height:5px;
}
.gwt-SuggestBoxPopup .suggestPopupBottomRight {
background: url(images/circles.png) no-repeat -5px -11px;
-background: url(images/circles_ie6.png) no-repeat -5px -11px;
width:5px;
height:5px;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
width: 0px;
height: 0px;
overflow: hidden;
}
* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
width: 0px;
height: 0px;
overflow: hidden;
}
.gwt-TabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-TabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-TabBar .gwt-TabBarRest {
}
.gwt-TabBar .gwt-TabBarItem {
margin-right: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabBar .gwt-TabBarItem-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-TabBar .gwt-TabBarItem-disabled {
cursor: default;
color: #999999;
}
.gwt-TabPanel {
}
.gwt-TabPanelBottom {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
overflow: hidden;
padding: 6px;
}
.gwt-DecoratedTabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-DecoratedTabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-DecoratedTabBar .gwt-TabBarRest {
}
.gwt-DecoratedTabBar .gwt-TabBarItem {
border-collapse: collapse;
margin-right: 4px;
}
.gwt-DecoratedTabBar .tabTopCenter {
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabTopLeft,
.gwt-DecoratedTabBar .tabTopRight {
padding: 0px;
zoom: 1;
}
.gwt-DecoratedTabBar .tabTopLeftInner,
.gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
}
.gwt-DecoratedTabBar .tabTopLeft {
background: url(images/circles.png) no-repeat 0px 0px;
-background: url(images/circles_ie6.png) no-repeat 0px 0px;
}
.gwt-DecoratedTabBar .tabTopRight {
background: url(images/circles.png) no-repeat -3px 0px;
-background: url(images/circles_ie6.png) no-repeat -3px 0px;
}
* html .gwt-DecoratedTabBar .tabTopLeftInner,
* html .gwt-DecoratedTabBar .tabTopRightInner {
width: 3px;
height: 3px;
overflow: hidden;
}
.gwt-DecoratedTabBar .tabMiddleLeft,
.gwt-DecoratedTabBar .tabMiddleRight {
width: 3px;
padding: 0px;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .tabMiddleLeftInner,
.gwt-DecoratedTabBar .tabMiddleRightInner {
width: 1px;
height: 1px;
}
.gwt-DecoratedTabBar .tabMiddleCenter {
padding: 0px 5px 4px 5px;
cursor: pointer;
cursor: hand;
color: #fff;
font-weight: normal;
text-align: center;
background: #8E8E8E;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter {
background:#fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft {
background: url(images/circles.png) no-repeat -6px 0px;
-background: url(images/circles_ie6.png) no-repeat -6px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight {
background: url(images/circles.png) no-repeat -9px 0px;
-background: url(images/circles_ie6.png) no-repeat -9px 0px;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft,
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight {
background: #fff;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter {
cursor: default;
background: #fff;
color:#333;
font-weight:bold;
}
.gwt-DecoratedTabBar .gwt-TabBarItem-disabled .tabMiddleCenter {
cursor: default;
color: #999999;
}
.gwt-TextArea {
padding: 4px;
border: 1px solid #ccc;
border-top: 1px solid #666;
font-size: 100%;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextArea-readonly {
color: #888;
}
.gwt-TextBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: small;
font-family: Arial Unicode MS, Arial, sans-serif;
}
.gwt-TextBox-readonly {
color: #888;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled,
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
margin: 0;
text-decoration: none;
background: url("images/hborder.png") repeat-x 0px -27px;
-moz-border-radius: 2px;
border-radius: 2px;
}
.gwt-ToggleButton-up,
.gwt-ToggleButton-up-hovering,
.gwt-ToggleButton-up-disabled {
padding: 3px 5px 3px 5px;
}
.gwt-ToggleButton-up {
border:1px solid #bbb;
border-bottom: 1px solid #a0a0a0;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-hovering {
border: 1px solid;
border-color: #939393;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-up-disabled {
border: 1px solid #bbb;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-ToggleButton-down,
.gwt-ToggleButton-down-hovering,
.gwt-ToggleButton-down-disabled {
padding: 4px 6px 2px 4px;
}
.gwt-ToggleButton-down {
background-position: 0 -513px;
border: 1px inset #666;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-hovering {
background-position: 0 -513px;
border: 1px inset;
border-color: #9cf #69e #69e #7af;
cursor: pointer;
cursor: hand;
}
.gwt-ToggleButton-down-disabled {
background-position: 0 -513px;
border: 1px inset #ccc;
cursor: default;
opacity: .5;
zoom: 1;
filter: alpha(opacity=45);
}
.gwt-Tree .gwt-TreeItem {
padding: 1px 0px;
margin: 0px;
white-space: nowrap;
cursor: hand;
cursor: pointer;
zoom: 1;
}
.gwt-Tree .gwt-TreeItem-selected {
background: #ebeff9;
}
.gwt-TreeItem .gwt-RadioButton input,
.gwt-TreeItem .gwt-CheckBox input {
margin-right: 0px;
}
* html .gwt-TreeItem .gwt-RadioButton input,
* html .gwt-TreeItem .gwt-CheckBox input {
margin-right: -4px;
}
.gwt-DateBox {
padding: 5px 4px;
border: 1px solid #ccc;
border-top: 1px solid #999;
font-size: 100%;
}
.gwt-DateBox input {
width: 8em;
}
.dateBoxFormatError {
background: #ffcccc;
}
.dateBoxPopup {
}
.gwt-DatePicker {
border: 1px solid #ccc;
border-top:1px solid #999;
cursor: default;
}
.gwt-DatePicker td,
.datePickerMonthSelector td:focus {
outline: none;
}
.datePickerDays {
width: 100%;
background: white;
}
.datePickerDay,
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
font-size: 85%;
text-align: center;
padding: 4px;
outline: none;
font-weight:bold;
color:#333;
border-right: 1px solid #EDEDED;
border-bottom: 1px solid #EDEDED;
}
.datePickerWeekdayLabel,
.datePickerWeekendLabel {
background: #fff;
padding: 0px 4px 2px;
cursor: default;
color:#666;
font-size:70%;
font-weight:normal;
}
.datePickerDay {
padding: 4px 7px;
cursor: hand;
cursor: pointer;
}
.datePickerDayIsWeekend {
background: #f7f7f7;
}
.datePickerDayIsFiller {
color: #999;
font-weight:normal;
}
.datePickerDayIsValue {
background: #d7dfe8;
}
.datePickerDayIsDisabled {
color: #AAAAAA;
font-style: italic;
}
.datePickerDayIsHighlighted {
background: #F0E68C;
}
.datePickerDayIsValueAndHighlighted {
background: #d7dfe8;
}
.datePickerDayIsToday {
padding: 3px;
color: #fff;
background: url(images/hborder.png) repeat-x 0px -2607px;
}
.datePickerMonthSelector {
width: 100%;
padding: 1px 0 5px 0;
background: #fff;
}
td.datePickerMonth {
text-align: center;
vertical-align: middle;
white-space: nowrap;
font-size: 100%;
font-weight: bold;
color: #333;
}
.datePickerPreviousButton,
.datePickerNextButton {
font-size: 120%;
line-height: 1em;
color: #3a6aad;
cursor: hand;
cursor: pointer;
font-weight: bold;
padding: 0px 4px;
outline: none;
}
.gwt-StackLayoutPanel {
border-bottom: 1px solid #bbbbbb;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader {
cursor: pointer;
cursor: hand;
font-weight: bold;
font-size: 1.3em;
padding: 3px;
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader-hovering {
background: #d3def6;
}
.gwt-StackLayoutPanel .gwt-StackLayoutPanelContent {
border: 1px solid #bbbbbb;
border-bottom: 0px;
background: white;
padding: 2px 5px 10px 2px;
}
.gwt-TabLayoutPanel {
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs {
background: #ccc;
padding-top: 6px;
padding-right: 5px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContentContainer {
border-color: #ccc;
border-style: solid;
border-width: 0px 1px 1px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelContent {
overflow: hidden;
padding: 6px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab {
margin-right: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-SplitLayoutPanel-HDragger {
background: #e7e7e7 url(images/thumb_vertical.png) center center no-repeat;
cursor: col-resize;
}
.gwt-SplitLayoutPanel-VDragger {
background: #e7e7e7 url(images/thumb_horz.png) center center no-repeat;
cursor: row-resize;
}
\ No newline at end of file
<html>
<head><script>
var $wnd = parent;
var $doc = $wnd.document;
var $moduleName, $moduleBase, $entry
,$stats = $wnd.__gwtStatsEvent ? function(a) {return $wnd.__gwtStatsEvent(a);} : null
,$sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null;
// Lightweight metrics
if ($stats) {
var moduleFuncName = location.search.substr(1);
var moduleFunc = $wnd[moduleFuncName];
var moduleName = moduleFunc ? moduleFunc.moduleName : "unknown";
$stats({moduleName:moduleName,sessionId:$sessionId,subSystem:'startup',evtGroup:'moduleStartup',millis:(new Date()).getTime(),type:'moduleEvalStart'});
}
var $hostedHtmlVersion="2.1";
var gwtOnLoad;
var $hosted = "localhost:9997";
function loadIframe(url) {
var topDoc = window.top.document;
// create an iframe
var iframeDiv = topDoc.createElement("div");
iframeDiv.innerHTML = "<iframe scrolling=no frameborder=0 src='" + url + "'>";
var iframe = iframeDiv.firstChild;
// mess with the iframe style a little
var iframeStyle = iframe.style;
iframeStyle.position = "absolute";
iframeStyle.borderWidth = "0";
iframeStyle.left = "0";
iframeStyle.top = "0";
iframeStyle.width = "100%";
iframeStyle.backgroundColor = "#ffffff";
iframeStyle.zIndex = "1";
iframeStyle.height = "100%";
// update the top window's document's body's style
var hostBodyStyle = window.top.document.body.style;
hostBodyStyle.margin = "0";
hostBodyStyle.height = iframeStyle.height;
hostBodyStyle.overflow = "hidden";
// insert the iframe
topDoc.body.insertBefore(iframe, topDoc.body.firstChild);
}
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("gecko") != -1) {
// install eval wrapper on FF to avoid EvalError problem
var __eval = window.eval;
window.eval = function(s) {
return __eval(s);
}
}
if (ua.indexOf("chrome") != -1) {
// work around __gwt_ObjectId appearing in JS objects
var hop = Object.prototype.hasOwnProperty;
Object.prototype.hasOwnProperty = function(prop) {
return prop != "__gwt_ObjectId" && hop.call(this, prop);
};
// do the same in our parent as well -- see issue 4486
// NOTE: this will have to be changed when we support non-iframe-based DevMode
var hop2 = parent.Object.prototype.hasOwnProperty;
parent.Object.prototype.hasOwnProperty = function(prop) {
return prop != "__gwt_ObjectId" && hop2.call(this, prop);
};
}
// wrapper to call JS methods, which we need both to be able to supply a
// different this for method lookup and to get the exception back
function __gwt_jsInvoke(thisObj, methodName) {
try {
var args = Array.prototype.slice.call(arguments, 2);
return [0, window[methodName].apply(thisObj, args)];
} catch (e) {
return [1, e];
}
}
var __gwt_javaInvokes = [];
function __gwt_makeJavaInvoke(argCount) {
return __gwt_javaInvokes[argCount] || __gwt_doMakeJavaInvoke(argCount);
}
function __gwt_doMakeJavaInvoke(argCount) {
// IE6 won't eval() anonymous functions except as r-values
var argList = "";
for (var i = 0; i < argCount; i++) {
argList += ",p" + i;
}
var argListNoComma = argList.substring(1);
return eval(
"__gwt_javaInvokes[" + argCount + "] =\n" +
" function(thisObj, dispId" + argList + ") {\n" +
" var result = __static(dispId, thisObj" + argList + ");\n" +
" if (result[0]) {\n" +
" throw result[1];\n" +
" } else {\n" +
" return result[1];\n" +
" }\n" +
" }\n"
);
}
/*
* This is used to create tear-offs of Java methods. Each function corresponds
* to exactly one dispId, and also embeds the argument count. We get the "this"
* value from the context in which the function is being executed.
* Function-object identity is preserved by caching in a sparse array.
*/
var __gwt_tearOffs = [];
var __gwt_tearOffGenerators = [];
function __gwt_makeTearOff(proxy, dispId, argCount) {
return __gwt_tearOffs[dispId] || __gwt_doMakeTearOff(dispId, argCount);
}
function __gwt_doMakeTearOff(dispId, argCount) {
return __gwt_tearOffs[dispId] =
(__gwt_tearOffGenerators[argCount] || __gwt_doMakeTearOffGenerator(argCount))(dispId);
}
function __gwt_doMakeTearOffGenerator(argCount) {
// IE6 won't eval() anonymous functions except as r-values
var argList = "";
for (var i = 0; i < argCount; i++) {
argList += ",p" + i;
}
var argListNoComma = argList.substring(1);
return eval(
"__gwt_tearOffGenerators[" + argCount + "] =\n" +
" function(dispId) {\n" +
" return function(" + argListNoComma + ") {\n" +
" var result = __static(dispId, this" + argList + ");\n" +
" if (result[0]) {\n" +
" throw result[1];\n" +
" } else {\n" +
" return result[1];\n" +
" }\n" +
" }\n" +
" }\n"
);
}
function __gwt_makeResult(isException, result) {
return [isException, result];
}
function __gwt_disconnected() {
// Prevent double-invocation.
window.__gwt_disconnected = new Function();
// Do it in a timeout so we can be sure we have a clean stack.
window.setTimeout(__gwt_disconnected_impl, 1);
}
function __gwt_disconnected_impl() {
__gwt_displayGlassMessage('GWT Code Server Disconnected',
'Most likely, you closed GWT Development Mode. Or, you might have lost '
+ 'network connectivity. To fix this, try restarting GWT Development Mode and '
+ 'refresh this page.');
}
// Keep track of z-index to allow layering of multiple glass messages
var __gwt_glassMessageZIndex = 2147483647;
// Note this method is also used by ModuleSpace.java
function __gwt_displayGlassMessage(summary, details) {
var topWin = window.top;
var topDoc = topWin.document;
var outer = topDoc.createElement("div");
// Do not insert whitespace or outer.firstChild will get a text node.
outer.innerHTML =
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' +
'<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' +
'<div style="font-size:15px;">' + details + '</div>' +
'</div>' +
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>'
;
topDoc.body.appendChild(outer);
var glass = outer.firstChild;
var glassStyle = glass.style;
// Scroll to the top and remove scrollbars.
topWin.scrollTo(0, 0);
if (topDoc.compatMode == "BackCompat") {
topDoc.body.style["overflow"] = "hidden";
} else {
topDoc.documentElement.style["overflow"] = "hidden";
}
// Steal focus.
glass.focus();
if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) {
// IE quirks mode doesn't support right/bottom, but does support this.
glassStyle.width = "125%";
glassStyle.height = "100%";
} else if (navigator.userAgent.indexOf("MSIE 6") >= 0) {
// IE6 doesn't have a real standards mode, so we have to use hacks.
glassStyle.width = "125%"; // Get past scroll bar area.
// Nasty CSS; onresize would be better but the outer window won't let us add a listener IE.
glassStyle.setExpression("height", "document.documentElement.clientHeight");
}
$doc.title = summary + " [" + $doc.title + "]";
}
function findPluginObject() {
try {
return document.getElementById('pluginObject');
} catch (e) {
return null;
}
}
function findPluginEmbed() {
try {
return document.getElementById('pluginEmbed')
} catch (e) {
return null;
}
}
function findPluginXPCOM() {
try {
return __gwt_HostedModePlugin;
} catch (e) {
return null;
}
}
gwtOnLoad = function(errFn, modName, modBase){
$moduleName = modName;
$moduleBase = modBase;
// Note that the order is important
var pluginFinders = [
findPluginXPCOM,
findPluginObject,
findPluginEmbed,
];
var topWin = window.top;
var url = topWin.location.href;
if (!topWin.__gwt_SessionID) {
var ASCII_EXCLAMATION = 33;
var ASCII_TILDE = 126;
var chars = [];
for (var i = 0; i < 16; ++i) {
chars.push(Math.floor(ASCII_EXCLAMATION
+ Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1)));
}
topWin.__gwt_SessionID = String.fromCharCode.apply(null, chars);
}
var plugin = null;
for (var i = 0; i < pluginFinders.length; ++i) {
try {
var maybePlugin = pluginFinders[i]();
if (maybePlugin != null && maybePlugin.init(window)) {
plugin = maybePlugin;
break;
}
} catch (e) {
}
}
if (!plugin) {
// try searching for a v1 plugin for backwards compatibility
var found = false;
for (var i = 0; i < pluginFinders.length; ++i) {
try {
plugin = pluginFinders[i]();
if (plugin != null && plugin.connect($hosted, $moduleName, window)) {
return;
}
} catch (e) {
}
}
loadIframe("http://gwt.google.com/missing-plugin");
} else {
if (plugin.connect(url, topWin.__gwt_SessionID, $hosted, $moduleName,
$hostedHtmlVersion)) {
window.onUnload = function() {
try {
// wrap in try/catch since plugins are not required to supply this
plugin.disconnect();
} catch (e) {
}
};
} else {
if (errFn) {
errFn(modName);
} else {
__gwt_displayGlassMessage(
"Plugin failed to connect to Development Mode server at " + simpleEscape($hosted),
"Follow the troubleshooting instructions at "
+ "<a href='http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM'>"
+ "http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM</a>");
}
}
}
}
function simpleEscape(originalString) {
return originalString.replace(/&/g,"&amp;")
.replace(/</g,"&lt;")
.replace(/>/g,"&gt;")
.replace(/\'/g, "&#39;")
.replace(/\"/g,"&quot;");
}
window.onunload = function() {
};
// Lightweight metrics
window.fireOnModuleLoadStart = function(className) {
$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'onModuleLoadStart', className:className});
};
window.__gwt_module_id = 0;
</script></head>
<body>
<font face='arial' size='-1'>This html file is for Development Mode support.</font>
<script><!--
// Lightweight metrics
$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'moduleEvalEnd'});
// OOPHM currently only supports IFrameLinker
var query = parent.location.search;
if (!findPluginXPCOM()) {
document.write('<embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10" height="10">');
document.write('</embed>');
document.write('<object id="pluginObject" CLASSID="CLSID:1D6156B6-002B-49E7-B5CA-C138FB843B4E">');
document.write('</object>');
}
// look for the old query parameter if we don't find the new one
var idx = query.indexOf("gwt.codesvr=");
if (idx >= 0) {
idx += 12; // "gwt.codesvr=".length() == 12
} else {
idx = query.indexOf("gwt.hosted=");
if (idx >= 0) {
idx += 11; // "gwt.hosted=".length() == 11
}
}
if (idx >= 0) {
var amp = query.indexOf("&", idx);
if (amp >= 0) {
$hosted = query.substring(idx, amp);
} else {
$hosted = query.substring(idx);
}
// According to RFC 3986, some of this component's characters (e.g., ':')
// are reserved and *may* be escaped.
$hosted = decodeURIComponent($hosted);
}
query = window.location.search.substring(1);
if (query && $wnd[query]) setTimeout($wnd[query].onScriptLoad, 1);
--></script></body></html>
function jsmolcalc(){
var $wnd_0 = window, $doc_0 = document, $stats = $wnd_0.__gwtStatsEvent?function(a){
return $wnd_0.__gwtStatsEvent(a);
}
:null, $sessionId_0 = $wnd_0.__gwtStatsSessionId?$wnd_0.__gwtStatsSessionId:null, scriptsDone, loadDone, bodyDone, base = '', metaProps = {}, values = [], providers = [], answers = [], softPermutationId = 0, onLoadErrorFunc, propertyErrorFunc;
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'bootstrap', millis:(new Date).getTime(), type:'begin'});
if (!$wnd_0.__gwt_stylesLoaded) {
$wnd_0.__gwt_stylesLoaded = {};
}
if (!$wnd_0.__gwt_scriptsLoaded) {
$wnd_0.__gwt_scriptsLoaded = {};
}
function isHostedMode(){
var result = false;
try {
var query = $wnd_0.location.search;
return (query.indexOf('gwt.codesvr=') != -1 || (query.indexOf('gwt.hosted=') != -1 || $wnd_0.external && $wnd_0.external.gwtOnLoad)) && query.indexOf('gwt.hybrid') == -1;
}
catch (e) {
}
isHostedMode = function(){
return result;
}
;
return result;
}
function maybeStartModule(){
if (scriptsDone && loadDone) {
var iframe = $doc_0.getElementById('jsmolcalc');
var frameWnd = iframe.contentWindow;
if (isHostedMode()) {
frameWnd.__gwt_getProperty = function(name_0){
return computePropValue(name_0);
}
;
}
jsmolcalc = null;
frameWnd.gwtOnLoad(onLoadErrorFunc, 'jsmolcalc', base, softPermutationId);
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date).getTime(), type:'end'});
}
}
function computeScriptBase(){
function getDirectoryOfFile(path){
var hashIndex = path.lastIndexOf('#');
if (hashIndex == -1) {
hashIndex = path.length;
}
var queryIndex = path.indexOf('?');
if (queryIndex == -1) {
queryIndex = path.length;
}
var slashIndex = path.lastIndexOf('/', Math.min(queryIndex, hashIndex));
return slashIndex >= 0?path.substring(0, slashIndex + 1):'';
}
function ensureAbsoluteUrl(url){
if (url.match(/^\w+:\/\//)) {
}
else {
var img = $doc_0.createElement('img');
img.src = url + 'clear.cache.gif';
url = getDirectoryOfFile(img.src);
}
return url;
}
function tryMetaTag(){
var metaVal = __gwt_getMetaProperty('baseUrl');
if (metaVal != null) {
return metaVal;
}
return '';
}
function tryNocacheJsTag(){
var scriptTags = $doc_0.getElementsByTagName('script');
for (var i = 0; i < scriptTags.length; ++i) {
if (scriptTags[i].src.indexOf('jsmolcalc.nocache.js') != -1) {
return getDirectoryOfFile(scriptTags[i].src);
}
}
return '';
}
function tryMarkerScript(){
var thisScript;
if (typeof isBodyLoaded == 'undefined' || !isBodyLoaded()) {
var markerId = '__gwt_marker_jsmolcalc';
var markerScript;
$doc_0.write('<script id="' + markerId + '"><\/script>');
markerScript = $doc_0.getElementById(markerId);
thisScript = markerScript && markerScript.previousSibling;
while (thisScript && thisScript.tagName != 'SCRIPT') {
thisScript = thisScript.previousSibling;
}
if (markerScript) {
markerScript.parentNode.removeChild(markerScript);
}
if (thisScript && thisScript.src) {
return getDirectoryOfFile(thisScript.src);
}
}
return '';
}
function tryBaseTag(){
var baseElements = $doc_0.getElementsByTagName('base');
if (baseElements.length > 0) {
return baseElements[baseElements.length - 1].href;
}
return '';
}
function isLocationOk(){
var loc = $doc_0.location;
return loc.href == loc.protocol + '//' + loc.host + loc.pathname + loc.search + loc.hash;
}
var tempBase = tryMetaTag();
if (tempBase == '') {
tempBase = tryNocacheJsTag();
}
if (tempBase == '') {
tempBase = tryMarkerScript();
}
if (tempBase == '') {
tempBase = tryBaseTag();
}
if (tempBase == '' && isLocationOk()) {
tempBase = getDirectoryOfFile($doc_0.location.href);
}
tempBase = ensureAbsoluteUrl(tempBase);
base = tempBase;
return tempBase;
}
function processMetas(){
var metas = document.getElementsByTagName('meta');
for (var i = 0, n = metas.length; i < n; ++i) {
var meta = metas[i], name_0 = meta.getAttribute('name'), content_0;
if (name_0) {
name_0 = name_0.replace('jsmolcalc::', '');
if (name_0.indexOf('::') >= 0) {
continue;
}
if (name_0 == 'gwt:property') {
content_0 = meta.getAttribute('content');
if (content_0) {
var value, eq = content_0.indexOf('=');
if (eq >= 0) {
name_0 = content_0.substring(0, eq);
value = content_0.substring(eq + 1);
}
else {
name_0 = content_0;
value = '';
}
metaProps[name_0] = value;
}
}
else if (name_0 == 'gwt:onPropertyErrorFn') {
content_0 = meta.getAttribute('content');
if (content_0) {
try {
propertyErrorFunc = eval(content_0);
}
catch (e) {
alert('Bad handler "' + content_0 + '" for "gwt:onPropertyErrorFn"');
}
}
}
else if (name_0 == 'gwt:onLoadErrorFn') {
content_0 = meta.getAttribute('content');
if (content_0) {
try {
onLoadErrorFunc = eval(content_0);
}
catch (e) {
alert('Bad handler "' + content_0 + '" for "gwt:onLoadErrorFn"');
}
}
}
}
}
}
function __gwt_getMetaProperty(name_0){
var value = metaProps[name_0];
return value == null?null:value;
}
function unflattenKeylistIntoAnswers(propValArray, value){
var answer = answers;
for (var i = 0, n = propValArray.length - 1; i < n; ++i) {
answer = answer[propValArray[i]] || (answer[propValArray[i]] = []);
}
answer[propValArray[n]] = value;
}
function computePropValue(propName){
var value = providers[propName](), allowedValuesMap = values[propName];
if (value in allowedValuesMap) {
return value;
}
var allowedValuesList = [];
for (var k in allowedValuesMap) {
allowedValuesList[allowedValuesMap[k]] = k;
}
if (propertyErrorFunc) {
propertyErrorFunc(propName, allowedValuesList, value);
}
throw null;
}
var frameInjected;
function maybeInjectFrame(){
if (!frameInjected) {
frameInjected = true;
var iframe = $doc_0.createElement('iframe');
iframe.src = "javascript:''";
iframe.id = 'jsmolcalc';
iframe.style.cssText = 'position:absolute;width:0;height:0;border:none';
iframe.tabIndex = -1;
$doc_0.body.appendChild(iframe);
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date).getTime(), type:'moduleRequested'});
iframe.contentWindow.location.replace(base + initialHtml);
}
}
providers['user.agent'] = function(){
var ua = navigator.userAgent.toLowerCase();
var makeVersion = function(result){
return parseInt(result[1]) * 1000 + parseInt(result[2]);
}
;
if (function(){
return ua.indexOf('opera') != -1;
}
())
return 'opera';
if (function(){
return ua.indexOf('webkit') != -1;
}
())
return 'safari';
if (function(){
return ua.indexOf('msie') != -1 && $doc_0.documentMode >= 9;
}
())
return 'ie9';
if (function(){
return ua.indexOf('msie') != -1 && $doc_0.documentMode >= 8;
}
())
return 'ie8';
if (function(){
var result = /msie ([0-9]+)\.([0-9]+)/.exec(ua);
if (result && result.length == 3)
return makeVersion(result) >= 6000;
}
())
return 'ie6';
if (function(){
return ua.indexOf('gecko') != -1;
}
())
return 'gecko1_8';
return 'unknown';
}
;
values['user.agent'] = {gecko1_8:0, ie6:1, ie8:2, ie9:3, opera:4, safari:5};
jsmolcalc.onScriptLoad = function(){
if (frameInjected) {
loadDone = true;
maybeStartModule();
}
}
;
jsmolcalc.onInjectionDone = function(){
scriptsDone = true;
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'loadExternalRefs', millis:(new Date).getTime(), type:'end'});
maybeStartModule();
}
;
processMetas();
computeScriptBase();
var strongName;
var initialHtml;
if (isHostedMode()) {
if ($wnd_0.external && ($wnd_0.external.initModule && $wnd_0.external.initModule('jsmolcalc'))) {
$wnd_0.location.reload();
return;
}
initialHtml = 'hosted.html?jsmolcalc';
strongName = '';
}
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'bootstrap', millis:(new Date).getTime(), type:'selectingPermutation'});
if (!isHostedMode()) {
try {
unflattenKeylistIntoAnswers(['ie6'], '2F6BC62FA9B71FB5EB318145F5D37E84');
unflattenKeylistIntoAnswers(['ie8'], '468C0B0171166372F064D287492CBD1E');
unflattenKeylistIntoAnswers(['gecko1_8'], 'C43483CC355E7BFB7BE2F45092922897');
unflattenKeylistIntoAnswers(['safari'], 'E38BF09B489084CBFD0BF2CB8A77BFAC');
unflattenKeylistIntoAnswers(['opera'], 'E8EDF03FE9C26D69E2C7DB17E15CF0ED');
unflattenKeylistIntoAnswers(['ie9'], 'F8283183F9546F019176F75A8E25B0F0');
strongName = answers[computePropValue('user.agent')];
var idx = strongName.indexOf(':');
if (idx != -1) {
softPermutationId = Number(strongName.substring(idx + 1));
strongName = strongName.substring(0, idx);
}
initialHtml = strongName + '.cache.html';
}
catch (e) {
return;
}
}
var onBodyDoneTimerId;
function onBodyDone(){
if (!bodyDone) {
bodyDone = true;
if (!__gwt_stylesLoaded['gwt/clean/clean.css']) {
var l = $doc_0.createElement('link');
__gwt_stylesLoaded['gwt/clean/clean.css'] = l;
l.setAttribute('rel', 'stylesheet');
l.setAttribute('href', base + 'gwt/clean/clean.css');
$doc_0.getElementsByTagName('head')[0].appendChild(l);
}
maybeStartModule();
if ($doc_0.removeEventListener) {
$doc_0.removeEventListener('DOMContentLoaded', onBodyDone, false);
}
if (onBodyDoneTimerId) {
clearInterval(onBodyDoneTimerId);
}
}
}
if ($doc_0.addEventListener) {
$doc_0.addEventListener('DOMContentLoaded', function(){
maybeInjectFrame();
onBodyDone();
}
, false);
}
var onBodyDoneTimerId = setInterval(function(){
if (/loaded|complete/.test($doc_0.readyState)) {
maybeInjectFrame();
onBodyDone();
}
}
, 50);
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'bootstrap', millis:(new Date).getTime(), type:'end'});
$stats && $stats({moduleName:'jsmolcalc', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'loadExternalRefs', millis:(new Date).getTime(), type:'begin'});
$doc_0.write('<script defer="defer">jsmolcalc.onInjectionDone(\'jsmolcalc\')<\/script>');
}
jsmolcalc();
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<html>
<head><script>
var $wnd = parent;
var $doc = $wnd.document;
var $moduleName, $moduleBase, $entry
,$stats = $wnd.__gwtStatsEvent ? function(a) {return $wnd.__gwtStatsEvent(a);} : null
,$sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null;
// Lightweight metrics
if ($stats) {
var moduleFuncName = location.search.substr(1);
var moduleFunc = $wnd[moduleFuncName];
var moduleName = moduleFunc ? moduleFunc.moduleName : "unknown";
$stats({moduleName:moduleName,sessionId:$sessionId,subSystem:'startup',evtGroup:'moduleStartup',millis:(new Date()).getTime(),type:'moduleEvalStart'});
}
var $hostedHtmlVersion="2.1";
var gwtOnLoad;
var $hosted = "localhost:9997";
function loadIframe(url) {
var topDoc = window.top.document;
// create an iframe
var iframeDiv = topDoc.createElement("div");
iframeDiv.innerHTML = "<iframe scrolling=no frameborder=0 src='" + url + "'>";
var iframe = iframeDiv.firstChild;
// mess with the iframe style a little
var iframeStyle = iframe.style;
iframeStyle.position = "absolute";
iframeStyle.borderWidth = "0";
iframeStyle.left = "0";
iframeStyle.top = "0";
iframeStyle.width = "100%";
iframeStyle.backgroundColor = "#ffffff";
iframeStyle.zIndex = "1";
iframeStyle.height = "100%";
// update the top window's document's body's style
var hostBodyStyle = window.top.document.body.style;
hostBodyStyle.margin = "0";
hostBodyStyle.height = iframeStyle.height;
hostBodyStyle.overflow = "hidden";
// insert the iframe
topDoc.body.insertBefore(iframe, topDoc.body.firstChild);
}
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("gecko") != -1) {
// install eval wrapper on FF to avoid EvalError problem
var __eval = window.eval;
window.eval = function(s) {
return __eval(s);
}
}
if (ua.indexOf("chrome") != -1) {
// work around __gwt_ObjectId appearing in JS objects
var hop = Object.prototype.hasOwnProperty;
Object.prototype.hasOwnProperty = function(prop) {
return prop != "__gwt_ObjectId" && hop.call(this, prop);
};
// do the same in our parent as well -- see issue 4486
// NOTE: this will have to be changed when we support non-iframe-based DevMode
var hop2 = parent.Object.prototype.hasOwnProperty;
parent.Object.prototype.hasOwnProperty = function(prop) {
return prop != "__gwt_ObjectId" && hop2.call(this, prop);
};
}
// wrapper to call JS methods, which we need both to be able to supply a
// different this for method lookup and to get the exception back
function __gwt_jsInvoke(thisObj, methodName) {
try {
var args = Array.prototype.slice.call(arguments, 2);
return [0, window[methodName].apply(thisObj, args)];
} catch (e) {
return [1, e];
}
}
var __gwt_javaInvokes = [];
function __gwt_makeJavaInvoke(argCount) {
return __gwt_javaInvokes[argCount] || __gwt_doMakeJavaInvoke(argCount);
}
function __gwt_doMakeJavaInvoke(argCount) {
// IE6 won't eval() anonymous functions except as r-values
var argList = "";
for (var i = 0; i < argCount; i++) {
argList += ",p" + i;
}
var argListNoComma = argList.substring(1);
return eval(
"__gwt_javaInvokes[" + argCount + "] =\n" +
" function(thisObj, dispId" + argList + ") {\n" +
" var result = __static(dispId, thisObj" + argList + ");\n" +
" if (result[0]) {\n" +
" throw result[1];\n" +
" } else {\n" +
" return result[1];\n" +
" }\n" +
" }\n"
);
}
/*
* This is used to create tear-offs of Java methods. Each function corresponds
* to exactly one dispId, and also embeds the argument count. We get the "this"
* value from the context in which the function is being executed.
* Function-object identity is preserved by caching in a sparse array.
*/
var __gwt_tearOffs = [];
var __gwt_tearOffGenerators = [];
function __gwt_makeTearOff(proxy, dispId, argCount) {
return __gwt_tearOffs[dispId] || __gwt_doMakeTearOff(dispId, argCount);
}
function __gwt_doMakeTearOff(dispId, argCount) {
return __gwt_tearOffs[dispId] =
(__gwt_tearOffGenerators[argCount] || __gwt_doMakeTearOffGenerator(argCount))(dispId);
}
function __gwt_doMakeTearOffGenerator(argCount) {
// IE6 won't eval() anonymous functions except as r-values
var argList = "";
for (var i = 0; i < argCount; i++) {
argList += ",p" + i;
}
var argListNoComma = argList.substring(1);
return eval(
"__gwt_tearOffGenerators[" + argCount + "] =\n" +
" function(dispId) {\n" +
" return function(" + argListNoComma + ") {\n" +
" var result = __static(dispId, this" + argList + ");\n" +
" if (result[0]) {\n" +
" throw result[1];\n" +
" } else {\n" +
" return result[1];\n" +
" }\n" +
" }\n" +
" }\n"
);
}
function __gwt_makeResult(isException, result) {
return [isException, result];
}
function __gwt_disconnected() {
// Prevent double-invocation.
window.__gwt_disconnected = new Function();
// Do it in a timeout so we can be sure we have a clean stack.
window.setTimeout(__gwt_disconnected_impl, 1);
}
function __gwt_disconnected_impl() {
__gwt_displayGlassMessage('GWT Code Server Disconnected',
'Most likely, you closed GWT Development Mode. Or, you might have lost '
+ 'network connectivity. To fix this, try restarting GWT Development Mode and '
+ 'refresh this page.');
}
// Keep track of z-index to allow layering of multiple glass messages
var __gwt_glassMessageZIndex = 2147483647;
// Note this method is also used by ModuleSpace.java
function __gwt_displayGlassMessage(summary, details) {
var topWin = window.top;
var topDoc = topWin.document;
var outer = topDoc.createElement("div");
// Do not insert whitespace or outer.firstChild will get a text node.
outer.innerHTML =
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' +
'<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' +
'<div style="font-size:15px;">' + details + '</div>' +
'</div>' +
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>'
;
topDoc.body.appendChild(outer);
var glass = outer.firstChild;
var glassStyle = glass.style;
// Scroll to the top and remove scrollbars.
topWin.scrollTo(0, 0);
if (topDoc.compatMode == "BackCompat") {
topDoc.body.style["overflow"] = "hidden";
} else {
topDoc.documentElement.style["overflow"] = "hidden";
}
// Steal focus.
glass.focus();
if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) {
// IE quirks mode doesn't support right/bottom, but does support this.
glassStyle.width = "125%";
glassStyle.height = "100%";
} else if (navigator.userAgent.indexOf("MSIE 6") >= 0) {
// IE6 doesn't have a real standards mode, so we have to use hacks.
glassStyle.width = "125%"; // Get past scroll bar area.
// Nasty CSS; onresize would be better but the outer window won't let us add a listener IE.
glassStyle.setExpression("height", "document.documentElement.clientHeight");
}
$doc.title = summary + " [" + $doc.title + "]";
}
function findPluginObject() {
try {
return document.getElementById('pluginObject');
} catch (e) {
return null;
}
}
function findPluginEmbed() {
try {
return document.getElementById('pluginEmbed')
} catch (e) {
return null;
}
}
function findPluginXPCOM() {
try {
return __gwt_HostedModePlugin;
} catch (e) {
return null;
}
}
gwtOnLoad = function(errFn, modName, modBase){
$moduleName = modName;
$moduleBase = modBase;
// Note that the order is important
var pluginFinders = [
findPluginXPCOM,
findPluginObject,
findPluginEmbed,
];
var topWin = window.top;
var url = topWin.location.href;
if (!topWin.__gwt_SessionID) {
var ASCII_EXCLAMATION = 33;
var ASCII_TILDE = 126;
var chars = [];
for (var i = 0; i < 16; ++i) {
chars.push(Math.floor(ASCII_EXCLAMATION
+ Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1)));
}
topWin.__gwt_SessionID = String.fromCharCode.apply(null, chars);
}
var plugin = null;
for (var i = 0; i < pluginFinders.length; ++i) {
try {
var maybePlugin = pluginFinders[i]();
if (maybePlugin != null && maybePlugin.init(window)) {
plugin = maybePlugin;
break;
}
} catch (e) {
}
}
if (!plugin) {
// try searching for a v1 plugin for backwards compatibility
var found = false;
for (var i = 0; i < pluginFinders.length; ++i) {
try {
plugin = pluginFinders[i]();
if (plugin != null && plugin.connect($hosted, $moduleName, window)) {
return;
}
} catch (e) {
}
}
loadIframe("http://gwt.google.com/missing-plugin");
} else {
if (plugin.connect(url, topWin.__gwt_SessionID, $hosted, $moduleName,
$hostedHtmlVersion)) {
window.onUnload = function() {
try {
// wrap in try/catch since plugins are not required to supply this
plugin.disconnect();
} catch (e) {
}
};
} else {
if (errFn) {
errFn(modName);
} else {
__gwt_displayGlassMessage(
"Plugin failed to connect to Development Mode server at " + simpleEscape($hosted),
"Follow the troubleshooting instructions at "
+ "<a href='http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM'>"
+ "http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM</a>");
}
}
}
}
function simpleEscape(originalString) {
return originalString.replace(/&/g,"&amp;")
.replace(/</g,"&lt;")
.replace(/>/g,"&gt;")
.replace(/\'/g, "&#39;")
.replace(/\"/g,"&quot;");
}
window.onunload = function() {
};
// Lightweight metrics
window.fireOnModuleLoadStart = function(className) {
$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'onModuleLoadStart', className:className});
};
window.__gwt_module_id = 0;
</script></head>
<body>
<font face='arial' size='-1'>This html file is for Development Mode support.</font>
<script><!--
// Lightweight metrics
$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'moduleEvalEnd'});
// OOPHM currently only supports IFrameLinker
var query = parent.location.search;
if (!findPluginXPCOM()) {
document.write('<embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10" height="10">');
document.write('</embed>');
document.write('<object id="pluginObject" CLASSID="CLSID:1D6156B6-002B-49E7-B5CA-C138FB843B4E">');
document.write('</object>');
}
// look for the old query parameter if we don't find the new one
var idx = query.indexOf("gwt.codesvr=");
if (idx >= 0) {
idx += 12; // "gwt.codesvr=".length() == 12
} else {
idx = query.indexOf("gwt.hosted=");
if (idx >= 0) {
idx += 11; // "gwt.hosted=".length() == 11
}
}
if (idx >= 0) {
var amp = query.indexOf("&", idx);
if (amp >= 0) {
$hosted = query.substring(idx, amp);
} else {
$hosted = query.substring(idx);
}
// According to RFC 3986, some of this component's characters (e.g., ':')
// are reserved and *may* be escaped.
$hosted = decodeURIComponent($hosted);
}
query = window.location.search.substring(1);
if (query && $wnd[query]) setTimeout($wnd[query].onScriptLoad, 1);
--></script></body></html>
.protex-absolute-panel {
background-color: #BBBBBB;
}
.protex-canvas {
outline: none;
}
.protex-caption-panel {
padding: 10px 10px 10px 10px;
margin: 0px 0px 0px 0px;
border:2px solid #4E4E4E;
font: normal normal normal 14pt/normal 'Open Sans', sans-serif;
background-color: #B2B2FF;
}
.protex-textbox {
font: normal normal normal 12pt/normal 'Open Sans', sans-serif !important;
padding: 2px 2px 2px 2px !important;
}
.protex-caption-panel-ss-bonds-on {
padding: 10px 10px 10px 10px;
margin: 0px 0px 0px 0px;
border:2px solid #4E4E4E;
font: normal normal normal 14pt/normal 'Open Sans', sans-serif;
background-color: #B2FFFF;
}
.protex-button {
margin-right: 15px;
}
.protex-listbox {
}
.gwt-ProgressBar-shell {
border: 2px solid #faf9f7;
border-right: 2px solid #848280;
border-bottom: 2px solid #848280;
background-color: #AAAAAA;
height: 14pt;
width: 50%;
margin-left: 15px;
}
.gwt-ProgressBar-shell .gwt-ProgressBar-bar {
background-color: #67A7E3;
}
.gwt-ProgressBar-shell .gwt-ProgressBar-text {
padding: 0px;
margin: 0px;
color: white;
}
function protex(){var P='',xb='" for "gwt:onLoadErrorFn"',vb='" for "gwt:onPropertyErrorFn"',ib='"><\/script>',Z='#',Xb='.cache.html',_='/',lb='//',Qb='39CC89519B0E1FCB47B935AC9FE13D7B',Rb='6E05B1CD5BFCAF7D53C7C64D84318178',Wb=':',pb='::',dc='<script defer="defer">protex.onInjectionDone(\'protex\')<\/script>',hb='<script id="',sb='=',$='?',ub='Bad handler "',Sb='C824A958AB642DC2213DFFDAC640BEAA',Tb='D9267DE8FB02F8B995B4A58C66C76E29',cc='DOMContentLoaded',Ub='F275492F7098103BCB05F4F86ABF6218',Vb='F3301B0E65F38C7FCF2EF3764B3BB0B6',jb='SCRIPT',gb='__gwt_marker_protex',kb='base',cb='baseUrl',T='begin',S='bootstrap',bb='clear.cache.gif',rb='content',Y='end',Kb='gecko',Lb='gecko1_8',U='gwt.codesvr=',V='gwt.hosted=',W='gwt.hybrid',wb='gwt:onLoadErrorFn',tb='gwt:onPropertyErrorFn',qb='gwt:property',bc='head',Ob='hosted.html?protex',ac='href',Jb='ie6',Ib='ie8',Hb='ie9',yb='iframe',ab='img',zb="javascript:''",Zb='link',Nb='loadExternalRefs',mb='meta',Bb='moduleRequested',X='moduleStartup',Gb='msie',nb='name',Db='opera',Ab='position:absolute;width:0;height:0;border:none',Q='protex',Yb='protex.css',eb='protex.nocache.js',ob='protex::',$b='rel',Fb='safari',db='script',Pb='selectingPermutation',R='startup',_b='stylesheet',fb='undefined',Mb='unknown',Cb='user.agent',Eb='webkit';var m=window,n=document,o=m.__gwtStatsEvent?function(a){return m.__gwtStatsEvent(a)}:null,p=m.__gwtStatsSessionId?m.__gwtStatsSessionId:null,q,r,s,t=P,u={},v=[],w=[],x=[],y=0,z,A;o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:S,millis:(new Date).getTime(),type:T});if(!m.__gwt_stylesLoaded){m.__gwt_stylesLoaded={}}if(!m.__gwt_scriptsLoaded){m.__gwt_scriptsLoaded={}}function B(){var b=false;try{var c=m.location.search;return (c.indexOf(U)!=-1||(c.indexOf(V)!=-1||m.external&&m.external.gwtOnLoad))&&c.indexOf(W)==-1}catch(a){}B=function(){return b};return b}
function C(){if(q&&r){var b=n.getElementById(Q);var c=b.contentWindow;if(B()){c.__gwt_getProperty=function(a){return H(a)}}protex=null;c.gwtOnLoad(z,Q,t,y);o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:X,millis:(new Date).getTime(),type:Y})}}
function D(){function e(a){var b=a.lastIndexOf(Z);if(b==-1){b=a.length}var c=a.indexOf($);if(c==-1){c=a.length}var d=a.lastIndexOf(_,Math.min(c,b));return d>=0?a.substring(0,d+1):P}
function f(a){if(a.match(/^\w+:\/\//)){}else{var b=n.createElement(ab);b.src=a+bb;a=e(b.src)}return a}
function g(){var a=F(cb);if(a!=null){return a}return P}
function h(){var a=n.getElementsByTagName(db);for(var b=0;b<a.length;++b){if(a[b].src.indexOf(eb)!=-1){return e(a[b].src)}}return P}
function i(){var a;if(typeof isBodyLoaded==fb||!isBodyLoaded()){var b=gb;var c;n.write(hb+b+ib);c=n.getElementById(b);a=c&&c.previousSibling;while(a&&a.tagName!=jb){a=a.previousSibling}if(c){c.parentNode.removeChild(c)}if(a&&a.src){return e(a.src)}}return P}
function j(){var a=n.getElementsByTagName(kb);if(a.length>0){return a[a.length-1].href}return P}
function k(){var a=n.location;return a.href==a.protocol+lb+a.host+a.pathname+a.search+a.hash}
var l=g();if(l==P){l=h()}if(l==P){l=i()}if(l==P){l=j()}if(l==P&&k()){l=e(n.location.href)}l=f(l);t=l;return l}
function E(){var b=document.getElementsByTagName(mb);for(var c=0,d=b.length;c<d;++c){var e=b[c],f=e.getAttribute(nb),g;if(f){f=f.replace(ob,P);if(f.indexOf(pb)>=0){continue}if(f==qb){g=e.getAttribute(rb);if(g){var h,i=g.indexOf(sb);if(i>=0){f=g.substring(0,i);h=g.substring(i+1)}else{f=g;h=P}u[f]=h}}else if(f==tb){g=e.getAttribute(rb);if(g){try{A=eval(g)}catch(a){alert(ub+g+vb)}}}else if(f==wb){g=e.getAttribute(rb);if(g){try{z=eval(g)}catch(a){alert(ub+g+xb)}}}}}}
function F(a){var b=u[a];return b==null?null:b}
function G(a,b){var c=x;for(var d=0,e=a.length-1;d<e;++d){c=c[a[d]]||(c[a[d]]=[])}c[a[e]]=b}
function H(a){var b=w[a](),c=v[a];if(b in c){return b}var d=[];for(var e in c){d[c[e]]=e}if(A){A(a,d,b)}throw null}
var I;function J(){if(!I){I=true;var a=n.createElement(yb);a.src=zb;a.id=Q;a.style.cssText=Ab;a.tabIndex=-1;n.body.appendChild(a);o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:X,millis:(new Date).getTime(),type:Bb});a.contentWindow.location.replace(t+L)}}
w[Cb]=function(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Db)!=-1}())return Db;if(function(){return b.indexOf(Eb)!=-1}())return Fb;if(function(){return b.indexOf(Gb)!=-1&&n.documentMode>=9}())return Hb;if(function(){return b.indexOf(Gb)!=-1&&n.documentMode>=8}())return Ib;if(function(){var a=/msie ([0-9]+)\.([0-9]+)/.exec(b);if(a&&a.length==3)return c(a)>=6000}())return Jb;if(function(){return b.indexOf(Kb)!=-1}())return Lb;return Mb};v[Cb]={gecko1_8:0,ie6:1,ie8:2,ie9:3,opera:4,safari:5};protex.onScriptLoad=function(){if(I){r=true;C()}};protex.onInjectionDone=function(){q=true;o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:Nb,millis:(new Date).getTime(),type:Y});C()};E();D();var K;var L;if(B()){if(m.external&&(m.external.initModule&&m.external.initModule(Q))){m.location.reload();return}L=Ob;K=P}o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:S,millis:(new Date).getTime(),type:Pb});if(!B()){try{G([Db],Qb);G([Ib],Rb);G([Fb],Sb);G([Hb],Tb);G([Jb],Ub);G([Lb],Vb);K=x[H(Cb)];var M=K.indexOf(Wb);if(M!=-1){y=Number(K.substring(M+1));K=K.substring(0,M)}L=K+Xb}catch(a){return}}var N;function O(){if(!s){s=true;if(!__gwt_stylesLoaded[Yb]){var a=n.createElement(Zb);__gwt_stylesLoaded[Yb]=a;a.setAttribute($b,_b);a.setAttribute(ac,t+Yb);n.getElementsByTagName(bc)[0].appendChild(a)}C();if(n.removeEventListener){n.removeEventListener(cc,O,false)}if(N){clearInterval(N)}}}
if(n.addEventListener){n.addEventListener(cc,function(){J();O()},false)}var N=setInterval(function(){if(/loaded|complete/.test(n.readyState)){J();O()}},50);o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:S,millis:(new Date).getTime(),type:Y});o&&o({moduleName:Q,sessionId:p,subSystem:R,evtGroup:Nb,millis:(new Date).getTime(),type:T});n.write(dc)}
protex();
\ No newline at end of file
......@@ -81,6 +81,9 @@ MITX_FEATURES = {
'AUTH_USE_OPENID': False,
'AUTH_USE_MIT_CERTIFICATES': False,
'AUTH_USE_OPENID_PROVIDER': False,
# Flip to True when the YouTube iframe API breaks (again)
'USE_YOUTUBE_OBJECT_API': False,
}
# Used for A/B testing
......
(Originally written by Ike.)
At a high level, the main challenges of checking symbolic math expressions are (1) making sure the expression is mathematically legal, and (2) simplifying the expression for comparison with what is expected.
(1) Generation (and testing) of legal input is done by using MathJax to provide input math in an XML format known as Presentation MathML (PMathML). Such expressions typeset correctly, but may not be mathematically legal, like "5 / (1 = 2)". The PMathML is converted into "Content MathML" (CMathML), which is by definition mathematically legal, using an XSLT 2.0 stylesheet, via a module in SnuggleTeX. CMathML is then converted into a sympy expression. This work is all done in `lms/lib/symmath/formula.py`
(2) Simplifying the expression and checking against what is expected is done by using sympy, and a set of heuristics based on options flags provided by the problem author. For example, the problem author may specify that the expected expression is a matrix, in which case the dimensionality of the input expression is checked. Other options include specifying that the comparison be checked numerically in addition to symbolically. The checking is done in stages, first with no simplification, then with increasing levels of testing; if a match is found at any stage, then an "ok" is returned. Helpful messages are also returned, eg if the input expression is of a different type than the expected. This work is all done in `lms/lib/symmath/symmath_check.py`
Links:
SnuggleTex: http://www2.ph.ed.ac.uk/snuggletex/documentation/overview-and-features.html
MathML: http://www.w3.org/TR/MathML2/overview.html
SymPy: http://sympy.org/en/index.html
......@@ -21,7 +21,7 @@
<div class="input-group">
% if has_extauth_info is UNDEFINED:
<label data-field="email">E-mail*</label>
<input name="email" type="email" placeholder="eg. example@edx.org">
<input name="email" type="email" placeholder="eg. yourname@domain.com">
<label data-field="password">Password*</label>
<input name="password" type="password" placeholder="****">
<label data-field="username">Public Username*</label>
......
......@@ -2,9 +2,19 @@
<h2> ${display_name} </h2>
% endif
%if settings.MITX_FEATURES['STUB_VIDEO_FOR_TESTING']:
<div id="stub_out_video_for_testing"></div>
%elif settings.MITX_FEATURES.get('USE_YOUTUBE_OBJECT_API') and normal_speed_video_id:
<object width="640" height="390">
<param name="movie"
value="https://www.youtube.com/v/${normal_speed_video_id}?version=3&amp;autoplay=1&amp;rel=0"></param>
<param name="allowScriptAccess" value="always"></param>
<embed src="https://www.youtube.com/v/${normal_speed_video_id}?version=3&amp;autoplay=1&amp;rel=0"
type="application/x-shockwave-flash"
allowscriptaccess="always"
width="640" height="390"></embed>
</object>
%else:
<div id="video_${id}" class="video" data-streams="${streams}" data-caption-data-dir="${data_dir}" data-show-captions="${show_captions}" data-start="${start}" data-end="${end}" data-caption-asset-path="${caption_asset_path}">
<div class="tc-wrapper">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment