summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrabhu Ramachandran2015-09-29 13:45:06 +0530
committerPrabhu Ramachandran2015-09-29 13:45:06 +0530
commitebbf135af98720f1979cd28a9108817bac385ce7 (patch)
treee812ac5466ad043f867c58bc363df823522a8468
parent31f5e743031d105b0406e9587dc33bb065cd6e4d (diff)
parent53be4bc2ec40a9a84ff5ea73db2fbea0a07f5338 (diff)
downloadonline_test-ebbf135af98720f1979cd28a9108817bac385ce7.tar.gz
online_test-ebbf135af98720f1979cd28a9108817bac385ce7.tar.bz2
online_test-ebbf135af98720f1979cd28a9108817bac385ce7.zip
Merge pull request #56 from ankitjavalkar/examtime
Start and Expiry times for Quizzes
-rw-r--r--.travis.yml2
-rw-r--r--MANIFEST.in17
-rw-r--r--README.md28
-rw-r--r--online_test/settings.py4
-rw-r--r--online_test/urls.py2
-rw-r--r--setup.py2
-rw-r--r--testapp/myauthentication/README12
-rw-r--r--testapp/myauthentication/backend.py43
-rw-r--r--testapp/myauthentication/models_spoken_tutorial.py26
-rw-r--r--testapp/myauthentication/router.py12
-rw-r--r--testapp/myauthentication/tests.py5
-rw-r--r--testapp/myauthentication/urls.py0
-rw-r--r--testapp/myauthentication/views.py1
-rw-r--r--testapp/tests/test_bash_evaluation.py41
-rw-r--r--testapp/tests/test_c_cpp_evaluation.py77
-rw-r--r--testapp/tests/test_code_evaluation.py24
-rw-r--r--testapp/tests/test_java_evaluation.py53
-rw-r--r--testapp/tests/test_python_evaluation.py53
-rw-r--r--testapp/tests/test_scilab_evaluation.py47
-rw-r--r--testapp/urls.py29
-rw-r--r--testapp/yaksh_app/__init__.py0
-rw-r--r--testapp/yaksh_app/management/__init__.py0
-rw-r--r--testapp/yaksh_app/management/commands/__init__.py0
-rw-r--r--testapp/yaksh_app/static/yaksh_app/js/jquery-1.4.2.min.js154
-rw-r--r--yaksh/__init__.py (renamed from testapp/__init__.py)0
-rw-r--r--yaksh/admin.py (renamed from testapp/yaksh_app/admin.py)2
-rw-r--r--yaksh/bash_code_evaluator.py (renamed from testapp/yaksh_app/bash_code_evaluator.py)0
-rw-r--r--yaksh/bash_files/sample.args (renamed from testapp/yaksh_app/bash_files/sample.args)0
-rwxr-xr-xyaksh/bash_files/sample.sh (renamed from testapp/yaksh_app/bash_files/sample.sh)0
-rwxr-xr-xyaksh/c_cpp_files/main.cpp (renamed from testapp/yaksh_app/c_cpp_files/main.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main2.c (renamed from testapp/yaksh_app/c_cpp_files/main2.c)0
-rwxr-xr-xyaksh/c_cpp_files/main_array_check.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_array_check.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_array_check_all.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_array_check_all.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_array_sum.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_array_sum.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_blackJack.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_blackJack.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_check_digit.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_check_digit.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_count667.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_count667.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_count7.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_count7.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_fact.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_fact.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_greatest.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_greatest.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_hello_name.c (renamed from testapp/yaksh_app/c_cpp_files/main_hello_name.c)0
-rwxr-xr-xyaksh/c_cpp_files/main_lessThan9.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_lessThan9.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_mean.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_mean.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_palindrome.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_palindrome.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_roundTo10.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_roundTo10.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_specialSum.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_specialSum.cpp)0
-rwxr-xr-xyaksh/c_cpp_files/main_within.cpp (renamed from testapp/yaksh_app/c_cpp_files/main_within.cpp)0
-rw-r--r--yaksh/code_evaluator.py (renamed from testapp/yaksh_app/code_evaluator.py)0
-rwxr-xr-xyaksh/code_server.py (renamed from testapp/yaksh_app/code_server.py)0
-rw-r--r--yaksh/cpp_code_evaluator.py (renamed from testapp/yaksh_app/cpp_code_evaluator.py)0
-rw-r--r--yaksh/demo_templates/demo_settings.py (renamed from testapp/templates/demo_settings.py)4
-rw-r--r--yaksh/demo_templates/demo_urls.py (renamed from testapp/templates/demo_urls.py)2
-rw-r--r--yaksh/docs/sample.args (renamed from testapp/yaksh_app/docs/sample.args)0
-rwxr-xr-xyaksh/docs/sample.sh (renamed from testapp/yaksh_app/docs/sample.sh)0
-rw-r--r--yaksh/docs/sample_questions.py (renamed from testapp/yaksh_app/docs/sample_questions.py)0
-rw-r--r--yaksh/docs/sample_questions.xml (renamed from testapp/yaksh_app/docs/sample_questions.xml)0
-rw-r--r--yaksh/fixtures/initial_fixtures.json (renamed from testapp/fixtures/initial_fixtures.json)0
-rw-r--r--yaksh/forms.py (renamed from testapp/yaksh_app/forms.py)15
-rw-r--r--yaksh/java_code_evaluator.py (renamed from testapp/yaksh_app/java_code_evaluator.py)0
-rw-r--r--yaksh/java_files/main_array_sum.java (renamed from testapp/yaksh_app/java_files/main_array_sum.java)0
-rw-r--r--yaksh/java_files/main_fact.java (renamed from testapp/yaksh_app/java_files/main_fact.java)0
-rw-r--r--yaksh/java_files/main_great.java (renamed from testapp/yaksh_app/java_files/main_great.java)0
-rw-r--r--yaksh/java_files/main_hello_name.java (renamed from testapp/yaksh_app/java_files/main_hello_name.java)0
-rw-r--r--yaksh/java_files/main_lastDigit.java (renamed from testapp/yaksh_app/java_files/main_lastDigit.java)0
-rw-r--r--yaksh/java_files/main_moreThan30.java (renamed from testapp/yaksh_app/java_files/main_moreThan30.java)0
-rw-r--r--yaksh/java_files/main_palindrome.java (renamed from testapp/yaksh_app/java_files/main_palindrome.java)0
-rw-r--r--yaksh/java_files/main_square.java (renamed from testapp/yaksh_app/java_files/main_square.java)0
-rw-r--r--yaksh/language_registry.py (renamed from testapp/yaksh_app/language_registry.py)0
-rw-r--r--yaksh/management/__init__.py (renamed from testapp/myauthentication/__init__.py)0
-rw-r--r--yaksh/management/commands/__init__.py (renamed from testapp/scripts/__init__.py)0
-rw-r--r--yaksh/management/commands/add_group.py (renamed from testapp/yaksh_app/management/commands/add_group.py)2
-rw-r--r--yaksh/management/commands/dump_user_data.py (renamed from testapp/yaksh_app/management/commands/dump_user_data.py)4
-rw-r--r--yaksh/management/commands/load_exam.py (renamed from testapp/yaksh_app/management/commands/load_exam.py)2
-rw-r--r--yaksh/management/commands/load_questions_xml.py (renamed from testapp/yaksh_app/management/commands/load_questions_xml.py)2
-rw-r--r--yaksh/management/commands/results2csv.py (renamed from testapp/yaksh_app/management/commands/results2csv.py)2
-rw-r--r--yaksh/models.py (renamed from testapp/yaksh_app/models.py)11
-rw-r--r--yaksh/output/README.txt (renamed from testapp/yaksh_app/output/README.txt)0
-rw-r--r--yaksh/python_code_evaluator.py (renamed from testapp/yaksh_app/python_code_evaluator.py)0
-rw-r--r--yaksh/scilab_code_evaluator.py (renamed from testapp/yaksh_app/scilab_code_evaluator.py)0
-rw-r--r--yaksh/scilab_files/test_add.sce (renamed from testapp/yaksh_app/scilab_files/test_add.sce)0
-rw-r--r--yaksh/scripts/__init__.py (renamed from testapp/tests/__init__.py)0
-rw-r--r--yaksh/scripts/project_detail.py (renamed from testapp/scripts/project_detail.py)0
-rw-r--r--yaksh/scripts/yaksh.py (renamed from testapp/scripts/yaksh.py)4
-rw-r--r--yaksh/settings.py (renamed from testapp/yaksh_app/settings.py)2
-rw-r--r--yaksh/static/yaksh/css/autotaggit.css (renamed from testapp/yaksh_app/static/yaksh_app/css/autotaggit.css)0
-rw-r--r--yaksh/static/yaksh/css/base.css (renamed from testapp/yaksh_app/static/yaksh_app/css/base.css)0
-rw-r--r--yaksh/static/yaksh/css/gradeuser.css (renamed from testapp/yaksh_app/static/yaksh_app/css/gradeuser.css)0
-rw-r--r--yaksh/static/yaksh/css/login.css (renamed from testapp/yaksh_app/static/yaksh_app/css/login.css)0
-rw-r--r--yaksh/static/yaksh/css/monitor.css (renamed from testapp/yaksh_app/static/yaksh_app/css/monitor.css)0
-rw-r--r--yaksh/static/yaksh/css/question.css (renamed from testapp/yaksh_app/static/yaksh_app/css/question.css)0
-rw-r--r--yaksh/static/yaksh/css/question_paper_creation.css (renamed from testapp/yaksh_app/static/yaksh_app/css/question_paper_creation.css)0
-rw-r--r--yaksh/static/yaksh/css/question_quiz.css (renamed from testapp/yaksh_app/static/yaksh_app/css/question_quiz.css)0
-rw-r--r--yaksh/static/yaksh/css/showusers.css (renamed from testapp/yaksh_app/static/yaksh_app/css/showusers.css)0
-rw-r--r--yaksh/static/yaksh/js/add_question.js (renamed from testapp/yaksh_app/static/yaksh_app/js/add_question.js)0
-rw-r--r--yaksh/static/yaksh/js/add_questionpaper.js (renamed from testapp/yaksh_app/static/yaksh_app/js/add_questionpaper.js)0
-rw-r--r--yaksh/static/yaksh/js/add_quiz.js (renamed from testapp/yaksh_app/static/yaksh_app/js/add_quiz.js)0
-rw-r--r--yaksh/static/yaksh/js/bootstrap-modal.js (renamed from testapp/yaksh_app/static/yaksh_app/js/bootstrap-modal.js)0
-rw-r--r--yaksh/static/yaksh/js/bootstrap-tabs.js (renamed from testapp/yaksh_app/static/yaksh_app/js/bootstrap-tabs.js)0
-rw-r--r--yaksh/static/yaksh/js/edit_question.js (renamed from testapp/yaksh_app/static/yaksh_app/js/edit_question.js)0
-rw-r--r--yaksh/static/yaksh/js/edit_quiz.js (renamed from testapp/yaksh_app/static/yaksh_app/js/edit_quiz.js)0
-rw-r--r--yaksh/static/yaksh/js/jquery-1.4.2.min.js (renamed from testapp/exam/static/exam/js/jquery-1.4.2.min.js)0
-rw-r--r--yaksh/static/yaksh/js/min.js (renamed from testapp/yaksh_app/static/yaksh_app/js/min.js)0
-rw-r--r--yaksh/static/yaksh/js/question.js (renamed from testapp/yaksh_app/static/yaksh_app/js/question.js)0
-rw-r--r--yaksh/static/yaksh/js/question_filter.js (renamed from testapp/exam/static/exam/js/question_filter.js)0
-rw-r--r--yaksh/static/yaksh/js/question_paper_creation.js (renamed from testapp/yaksh_app/static/yaksh_app/js/question_paper_creation.js)0
-rw-r--r--yaksh/static/yaksh/js/show_question.js (renamed from testapp/yaksh_app/static/yaksh_app/js/show_question.js)0
-rw-r--r--yaksh/static/yaksh/js/show_quiz.js (renamed from testapp/yaksh_app/static/yaksh_app/js/show_quiz.js)0
-rw-r--r--yaksh/templates/404.html (renamed from testapp/yaksh_app/templates/404.html)0
-rw-r--r--yaksh/templates/500.html (renamed from testapp/yaksh_app/templates/500.html)0
-rw-r--r--yaksh/templates/base.html (renamed from testapp/yaksh_app/templates/base.html)2
-rw-r--r--yaksh/templates/manage.html (renamed from testapp/yaksh_app/templates/manage.html)4
-rw-r--r--yaksh/templates/user.html (renamed from testapp/yaksh_app/templates/user.html)2
-rw-r--r--yaksh/templates/yaksh/add_question.html (renamed from testapp/yaksh_app/templates/yaksh_app/add_question.html)8
-rw-r--r--yaksh/templates/yaksh/add_questionpaper.html (renamed from testapp/yaksh_app/templates/yaksh_app/add_questionpaper.html)8
-rw-r--r--yaksh/templates/yaksh/add_quiz.html (renamed from testapp/yaksh_app/templates/yaksh_app/add_quiz.html)4
-rw-r--r--yaksh/templates/yaksh/ajax_marks.html (renamed from testapp/yaksh_app/templates/yaksh_app/ajax_marks.html)0
-rw-r--r--yaksh/templates/yaksh/ajax_question_filter.html (renamed from testapp/exam/templates/exam/ajax_question_filter.html)0
-rw-r--r--yaksh/templates/yaksh/ajax_questions.html (renamed from testapp/yaksh_app/templates/yaksh_app/ajax_questions.html)0
-rw-r--r--yaksh/templates/yaksh/automatic_questionpaper.html (renamed from testapp/yaksh_app/templates/yaksh_app/automatic_questionpaper.html)8
-rw-r--r--yaksh/templates/yaksh/complete.html (renamed from testapp/yaksh_app/templates/yaksh_app/complete.html)0
-rw-r--r--yaksh/templates/yaksh/design_questionpaper.html (renamed from testapp/yaksh_app/templates/yaksh_app/design_questionpaper.html)18
-rw-r--r--yaksh/templates/yaksh/edit_question.html (renamed from testapp/yaksh_app/templates/yaksh_app/edit_question.html)8
-rw-r--r--yaksh/templates/yaksh/edit_quiz.html (renamed from testapp/yaksh_app/templates/yaksh_app/edit_quiz.html)4
-rw-r--r--yaksh/templates/yaksh/editquestionpaper.html (renamed from testapp/yaksh_app/templates/yaksh_app/editquestionpaper.html)2
-rw-r--r--yaksh/templates/yaksh/grade_user.html (renamed from testapp/yaksh_app/templates/yaksh_app/grade_user.html)4
-rw-r--r--yaksh/templates/yaksh/intro.html (renamed from testapp/yaksh_app/templates/yaksh_app/intro.html)27
-rw-r--r--yaksh/templates/yaksh/login.html (renamed from testapp/yaksh_app/templates/yaksh_app/login.html)2
-rw-r--r--yaksh/templates/yaksh/manual_questionpaper.html (renamed from testapp/yaksh_app/templates/yaksh_app/manual_questionpaper.html)9
-rw-r--r--yaksh/templates/yaksh/monitor.html (renamed from testapp/yaksh_app/templates/yaksh_app/monitor.html)2
-rw-r--r--yaksh/templates/yaksh/question.html (renamed from testapp/yaksh_app/templates/yaksh_app/question.html)8
-rw-r--r--yaksh/templates/yaksh/quit.html (renamed from testapp/yaksh_app/templates/yaksh_app/quit.html)0
-rw-r--r--yaksh/templates/yaksh/quizlist.html (renamed from testapp/yaksh_app/templates/yaksh_app/quizlist.html)0
-rw-r--r--yaksh/templates/yaksh/quizzes_user.html (renamed from testapp/yaksh_app/templates/yaksh_app/quizzes_user.html)18
-rw-r--r--yaksh/templates/yaksh/register.html (renamed from testapp/yaksh_app/templates/yaksh_app/register.html)0
-rw-r--r--yaksh/templates/yaksh/results_user.html (renamed from testapp/yaksh_app/templates/yaksh_app/results_user.html)2
-rw-r--r--yaksh/templates/yaksh/show_quiz.html (renamed from testapp/yaksh_app/templates/yaksh_app/show_quiz.html)2
-rw-r--r--yaksh/templates/yaksh/showquestionpapers.html (renamed from testapp/yaksh_app/templates/yaksh_app/showquestionpapers.html)2
-rw-r--r--yaksh/templates/yaksh/showquestions.html (renamed from testapp/yaksh_app/templates/yaksh_app/showquestions.html)6
-rw-r--r--yaksh/templates/yaksh/showusers.html (renamed from testapp/yaksh_app/templates/yaksh_app/showusers.html)2
-rw-r--r--yaksh/templates/yaksh/user_data.html (renamed from testapp/yaksh_app/templates/yaksh_app/user_data.html)0
-rw-r--r--yaksh/tests.py (renamed from testapp/yaksh_app/tests.py)2
-rw-r--r--yaksh/urls.py (renamed from testapp/yaksh_app/urls.py)2
-rw-r--r--yaksh/views.py (renamed from testapp/yaksh_app/views.py)262
-rw-r--r--yaksh/xmlrpc_clients.py (renamed from testapp/yaksh_app/xmlrpc_clients.py)0
144 files changed, 296 insertions, 806 deletions
diff --git a/.travis.yml b/.travis.yml
index 8c064ac..d70a43b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,5 +18,5 @@ before_install:
# command to run tests
script:
- - nosetests ./testapp/tests/
+ - nosetests ./yaksh/tests/
- python manage.py test \ No newline at end of file
diff --git a/MANIFEST.in b/MANIFEST.in
index 762b21a..dbaf299 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,13 +1,8 @@
include LICENSE
include README.rst
-exclude testapp/production.py
-exclude testapp/settings.py
-exclude testapp/urls.py
-exclude testapp/test_server.py
-exclude testapp/manage.py
-recursive-exclude testapp/myauthentication *
-recursive-include testapp/yaksh_app/static *
-recursive-include testapp/yaksh_app/templates *
-recursive-include testapp/yaksh_app/management *
-recursive-include testapp/yaksh_app/output *
-recursive-include testapp/yaksh_app/fixtures *
+recursive-include yaksh/static *
+recursive-include yaksh/templates *
+recursive-include yaksh/demo_templates *
+recursive-include yaksh/management *
+recursive-include yaksh/output *
+recursive-include yaksh/fixtures *
diff --git a/README.md b/README.md
index 2483ab2..45c3e4f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-Vimarsh
+Yaksh
========
[![Build Status](https://travis-ci.org/FOSSEE/online_test.svg?branch=master)](https://travis-ci.org/FOSSEE/online_test)
@@ -28,13 +28,13 @@ Quick Start
#### Installation
-1. Install the vimarsh app
+1. Install the yaksh
- pip install vimarsh
+ pip install yaksh
1. In the terminal run
- vimarsh create_demo [-p PATH] project_name
+ yaksh create_demo [-p PATH] project_name
- ```project_name``` is the desired name of the django project
- PATH is an optional argument to specify where the django project will be installed
- If PATH is not provided, the project is created in the current directory
@@ -48,11 +48,11 @@ Quick Start
1. Run:
- vimarsh run_demo
+ yaksh run_demo
1. In a new terminal run:
- sudo vimarsh run_code_server
+ sudo yaksh run_code_server
1. Open your browser and open the URL ```http://localhost:8000/exam```
@@ -74,18 +74,18 @@ Production Deployment
#### Configure MySql server
- 1. Create a database named ``online_test`` by following the steps below
+ 1. Create a database named ``yaksh`` by following the steps below
$> mysql -u root -p
- mysql> create database online_test
+ mysql> create database yaksh
- 1. Add a user named ```online_test_user``` and give access to it on the database ```online_test``` by following the steps below
+ 1. Add a user named ```yaksh_user``` and give access to it on the database ```yaksh``` by following the steps below
- 1. mysql> grant usage on online_test.* to online_test_user@localhost identified by 'mysecretpassword';
+ 1. mysql> grant usage on yaksh.* to yaksh_user@localhost identified by 'mysecretpassword';
- 1. mysql> grant all privileges on online_test.* to online_test_user@localhost;
+ 1. mysql> grant all privileges on yaksh.* to yaksh_user@localhost;
- 1. Create a file named `local.py` in folder `testapp` and insert `DATABASE_PASSWORD = 'mysecretpassword'` and `DATABASE_USER = 'online_test_user'`
+ 1. Add `DATABASE_PASSWORD = 'mysecretpassword'` and `DATABASE_USER = 'yaksh_user'` to online_test/settings.py
To deploy this app follow the steps below:
@@ -104,7 +104,7 @@ To deploy this app follow the steps below:
1. First run the python server provided. This ensures that the code is executed in a safe environment. Do this like so:
- $ sudo python testapp/exam/code_server.py
+ $ sudo python yaksh/code_server.py
Put this in the background once it has started since this will not
return back the prompt. It is important that the server be running
@@ -177,7 +177,7 @@ To install this app follow the steps below:
1. First run the python server provided. This ensures that the code is executed in a safe environment. Do this like so:
- $ sudo python testapp/code_server.py
+ $ sudo python yaksh/code_server.py
Put this in the background once it has started since this will not
return back the prompt. It is important that the server be running
diff --git a/online_test/settings.py b/online_test/settings.py
index 3d57c3b..e46b055 100644
--- a/online_test/settings.py
+++ b/online_test/settings.py
@@ -37,7 +37,7 @@ INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
- 'testapp.yaksh_app',
+ 'yaksh',
'taggit',
)
@@ -68,7 +68,7 @@ DATABASES = {
# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/
-AUTH_PROFILE_MODULE = 'yaksh_app.Profile'
+AUTH_PROFILE_MODULE = 'yaksh.Profile'
LANGUAGE_CODE = 'en-us'
diff --git a/online_test/urls.py b/online_test/urls.py
index 8a61db1..0415511 100644
--- a/online_test/urls.py
+++ b/online_test/urls.py
@@ -9,5 +9,5 @@ urlpatterns = patterns('',
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
- url(r'^exam/', include('testapp.yaksh_app.urls')),
+ url(r'^exam/', include('yaksh.urls')),
)
diff --git a/setup.py b/setup.py
index a9b23c5..839607e 100644
--- a/setup.py
+++ b/setup.py
@@ -16,7 +16,7 @@ setup(
license='BSD License',
entry_points = {
'console_scripts': [
- 'vimarsh = testapp.scripts.vimarsh:main',
+ 'yaksh = yaksh.scripts.yaksh:main',
],
},
description='A django app to conduct online tests.',
diff --git a/testapp/myauthentication/README b/testapp/myauthentication/README
deleted file mode 100644
index 4aef3c5..0000000
--- a/testapp/myauthentication/README
+++ /dev/null
@@ -1,12 +0,0 @@
-To use authentication from external source, follow the instructions given below:
-
-1. In settings.py,
- Uncomment AUTHENTICATION_BACKENDS = ('myauthentication.backend.MyBackend',)
- Uncomment AUTHENTICATION_BACKENDS = ('myauthentication.backend.MyBackend',)
- Enter database name, username and password for the spoken tutorial database.
-
-2. From login.html template comment 'New User? Sign-Up' link.
- This is to be done so that user will register only from external
- application and their details will be stored in the external database.
-
-3. In urls.py comment 'register' url pattern.
diff --git a/testapp/myauthentication/backend.py b/testapp/myauthentication/backend.py
deleted file mode 100644
index 721fe54..0000000
--- a/testapp/myauthentication/backend.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import hashlib
-from django.contrib.auth.models import User, check_password
-from models_spoken_tutorial import MoodleUser
-
-
-class MyBackend:
- supports_object_permissions = False
- supports_anonymous_user = False
- supports_inactive_user = False
-
- def authenticate(self, username=None, password=None):
- '''
- Checks username and password with external User table.
- If valid then adds the user details in django User table
- and authenticates the user.
- '''
- try:
- user = MoodleUser.objects.get(username=username)
- pwd = user.password
- uid = user.id
- firstname = user.firstname
- lastname = user.lastname
- email_id = user.email
- p = hashlib.md5(password)
- pwd_valid = (pwd == p.hexdigest())
- if user and pwd_valid:
- try:
- user = User.objects.get(username=username)
- return user
- except Exception, e:
- user = User(id=uid, username=username, password=pwd,
- first_name=firstname, last_name=lastname,
- email=email_id)
- user.save()
- return user
- except Exception, e:
- return None
-
- def get_user(self, user_id):
- try:
- return User.objects.get(pk=user_id)
- except Exception, e:
- return None
diff --git a/testapp/myauthentication/models_spoken_tutorial.py b/testapp/myauthentication/models_spoken_tutorial.py
deleted file mode 100644
index d333400..0000000
--- a/testapp/myauthentication/models_spoken_tutorial.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# This is an auto-generated Django model module.
-# You'll have to do the following manually to clean this up:
-# * Rearrange models' order
-# * Make sure each model has one field with primary_key=True
-# Feel free to rename the models, but don't rename db_table values or field names.
-#
-# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'
-# into your database.
-
-from django.db import models
-
-class MoodleUser(models.Model):
- id = models.BigIntegerField(primary_key=True)
- username = models.CharField(unique=True, max_length=300)
- password = models.CharField(max_length=96)
- idnumber = models.CharField(max_length=765)
- firstname = models.CharField(max_length=300)
- lastname = models.CharField(max_length=300)
- email = models.CharField(max_length=300)
- institution = models.CharField(max_length=120)
- department = models.CharField(max_length=90)
- address = models.CharField(max_length=210)
- city = models.CharField(max_length=360)
- country = models.CharField(max_length=6)
- class Meta:
- db_table = u'mdl_user'
diff --git a/testapp/myauthentication/router.py b/testapp/myauthentication/router.py
deleted file mode 100644
index 3d9c330..0000000
--- a/testapp/myauthentication/router.py
+++ /dev/null
@@ -1,12 +0,0 @@
-class MyDatabaseRouter(object):
- """
- A router to manage database operations in the myauthentication app.
- """
- def db_for_read(self, model, **hints):
- """
- Point all read operations on myauthentication app to spoken
- database.
- """
- if model._meta.app_label == 'myauthentication':
- return 'spoken_tutorial'
- return None
diff --git a/testapp/myauthentication/tests.py b/testapp/myauthentication/tests.py
deleted file mode 100644
index 4103038..0000000
--- a/testapp/myauthentication/tests.py
+++ /dev/null
@@ -1,5 +0,0 @@
-#This file demonstrates writing tests using the unittest module. These will pass
-#when you run "manage.py test".
-
-#Write appropriate tests for the application.
-
diff --git a/testapp/myauthentication/urls.py b/testapp/myauthentication/urls.py
deleted file mode 100644
index e69de29..0000000
--- a/testapp/myauthentication/urls.py
+++ /dev/null
diff --git a/testapp/myauthentication/views.py b/testapp/myauthentication/views.py
deleted file mode 100644
index 60f00ef..0000000
--- a/testapp/myauthentication/views.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your views here.
diff --git a/testapp/tests/test_bash_evaluation.py b/testapp/tests/test_bash_evaluation.py
deleted file mode 100644
index 924c560..0000000
--- a/testapp/tests/test_bash_evaluation.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import unittest
-import os
-from testapp.yaksh_app.bash_code_evaluator import BashCodeEvaluator
-from testapp.yaksh_app.settings import SERVER_TIMEOUT
-
-class BashEvaluationTestCases(unittest.TestCase):
- def setUp(self):
- self.language = "bash"
- self.ref_code_path = "bash_files/sample.sh,bash_files/sample.args"
- self.in_dir = "/tmp"
- self.test_case_data = []
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
- self.test = None
-
- def test_correct_answer(self):
- user_answer = "#!/bin/bash\n[[ $# -eq 2 ]] && echo $(( $1 + $2 )) && exit $(( $1 + $2 ))"
- get_class = BashCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertTrue(result.get("success"))
- self.assertEqual(result.get("error"), "Correct answer")
-
- def test_error(self):
- user_answer = "#!/bin/bash\n[[ $# -eq 2 ]] && echo $(( $1 - $2 )) && exit $(( $1 - $2 ))"
- get_class = BashCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertTrue("Error" in result.get("error"))
-
- def test_infinite_loop(self):
- user_answer = "#!/bin/bash\nwhile [ 1 ] ; do echo "" > /dev/null ; done"
- get_class = BashCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/testapp/tests/test_c_cpp_evaluation.py b/testapp/tests/test_c_cpp_evaluation.py
deleted file mode 100644
index 3d7f09d..0000000
--- a/testapp/tests/test_c_cpp_evaluation.py
+++ /dev/null
@@ -1,77 +0,0 @@
-import unittest
-import os
-from testapp.yaksh_app.cpp_code_evaluator import CppCodeEvaluator
-from testapp.yaksh_app.settings import SERVER_TIMEOUT
-
-class CEvaluationTestCases(unittest.TestCase):
- def setUp(self):
- self.language = "C"
- self.ref_code_path = "c_cpp_files/main.cpp"
- self.in_dir = "/tmp"
- self.test_case_data = []
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
- self.test = None
-
- def test_correct_answer(self):
- user_answer = "int add(int a, int b)\n{return a+b;}"
- get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertTrue(result.get("success"))
- self.assertEqual(result.get("error"), "Correct answer")
-
- def test_compilation_error(self):
- user_answer = "int add(int a, int b)\n{return a+b}"
- get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertTrue("Compilation Error" in result.get("error"))
-
- def test_infinite_loop(self):
- user_answer = "int add(int a, int b)\n{while(1>0){}}"
- get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
-
-
-###############################################################################
-class CppEvaluationTestCases(unittest.TestCase):
- def setUp(self):
- self.language = "CPP"
- self.ref_code_path = "c_cpp_files/main.cpp"
- self.in_dir = "/tmp"
- self.test_case_data = []
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
- self.test = None
-
- def test_correct_answer(self):
- user_answer = "int add(int a, int b)\n{return a+b;}"
- get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertTrue(result.get("success"))
- self.assertEqual(result.get("error"), "Correct answer")
-
- def test_compilation_error(self):
- user_answer = "int add(int a, int b)\n{return a+b}"
- get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertTrue("Compilation Error" in result.get("error"))
-
- def test_infinite_loop(self):
- user_answer = "int add(int a, int b)\n{while(1>0){}}"
- get_class = CppCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/testapp/tests/test_code_evaluation.py b/testapp/tests/test_code_evaluation.py
deleted file mode 100644
index 9f0885f..0000000
--- a/testapp/tests/test_code_evaluation.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import unittest
-import os
-from testapp.yaksh_app import python_code_evaluator
-from testapp.yaksh_app.language_registry import _LanguageRegistry, set_registry, get_registry
-from testapp.yaksh_app.settings import SERVER_TIMEOUT
-
-
-class RegistryTestCase(unittest.TestCase):
- def setUp(self):
- set_registry()
- self.registry_object = get_registry()
- self.language_registry = _LanguageRegistry()
-
- def test_set_register(self):
- class_name = getattr(python_code_evaluator, 'PythonCodeEvaluator')
- self.registry_object.register("python", "testapp.yaksh_app.python_code_evaluator.PythonCodeEvaluator")
- self.assertEquals(self.registry_object.get_class("python"), class_name)
-
- def tearDown(self):
- self.registry_object = None
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/testapp/tests/test_java_evaluation.py b/testapp/tests/test_java_evaluation.py
deleted file mode 100644
index 8e1fdeb..0000000
--- a/testapp/tests/test_java_evaluation.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import unittest
-import os
-from testapp.yaksh_app import code_evaluator as evaluator
-from testapp.yaksh_app.java_code_evaluator import JavaCodeEvaluator
-
-
-class JavaEvaluationTestCases(unittest.TestCase):
- def setUp(self):
- self.language = "java"
- self.ref_code_path = "java_files/main_square.java"
- self.in_dir = "/tmp"
- self.test_case_data = []
- evaluator.SERVER_TIMEOUT = 9
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in "
- "your code.").format(evaluator.SERVER_TIMEOUT)
- self.test = None
-
- def tearDown(self):
- evaluator.SERVER_TIMEOUT = 2
-
- def test_correct_answer(self):
- user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a*a;\n\t}\n}"
- get_class = JavaCodeEvaluator(self.test_case_data, self.test,
- self.language, user_answer,
- self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertTrue(result.get("success"))
- self.assertEqual(result.get("error"), "Correct answer")
-
- def test_error(self):
- user_answer = "class Test {\n\tint square_num(int a) {\n\treturn a*a"
- get_class = JavaCodeEvaluator(self.test_case_data, self.test,
- self.language, user_answer,
- self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertTrue("Error" in result.get("error"))
-
- def test_infinite_loop(self):
- user_answer = "class Test {\n\tint square_num(int a) {\n\t\twhile(0==0){\n\t\t}\n\t}\n}"
- get_class = JavaCodeEvaluator(self.test_case_data, self.test,
- self.language, user_answer,
- self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/testapp/tests/test_python_evaluation.py b/testapp/tests/test_python_evaluation.py
deleted file mode 100644
index 7039b75..0000000
--- a/testapp/tests/test_python_evaluation.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import unittest
-import os
-from testapp.yaksh_app.python_code_evaluator import PythonCodeEvaluator
-from testapp.yaksh_app.settings import SERVER_TIMEOUT
-
-class PythonEvaluationTestCases(unittest.TestCase):
- def setUp(self):
- self.language = "Python"
- self.test = None
- self.test_case_data = [{"func_name": "add",
- "expected_answer": "5",
- "test_id": u'null',
- "pos_args": ["3", "2"],
- "kw_args": {}
- }]
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
-
- def test_correct_answer(self):
- user_answer = "def add(a, b):\n\treturn a + b"""
- get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
- result = get_class.evaluate()
- self.assertTrue(result.get("success"))
- self.assertEqual(result.get("error"), "Correct answer")
-
- def test_incorrect_answer(self):
- user_answer = "def add(a, b):\n\treturn a - b"
- test_case_data = [{"func_name": "add",
- "expected_answer": "5",
- "test_id": u'null',
- "pos_args": ["3", "2"],
- "kw_args": {}
- }]
- get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
- result = get_class.evaluate()
- self.assertFalse(result.get("success"))
- self.assertEqual(result.get("error"), "AssertionError in: assert add(3, 2) == 5")
-
- def test_infinite_loop(self):
- user_answer = "def add(a, b):\n\twhile True:\n\t\tpass"""
- test_case_data = [{"func_name": "add",
- "expected_answer": "5",
- "test_id": u'null',
- "pos_args": ["3", "2"],
- "kw_args": {}
- }]
- get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
- result = get_class.evaluate()
- self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/testapp/tests/test_scilab_evaluation.py b/testapp/tests/test_scilab_evaluation.py
deleted file mode 100644
index 346060a..0000000
--- a/testapp/tests/test_scilab_evaluation.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import unittest
-import os
-from testapp.yaksh_app.scilab_code_evaluator import ScilabCodeEvaluator
-from testapp.yaksh_app.settings import SERVER_TIMEOUT
-
-class ScilabEvaluationTestCases(unittest.TestCase):
- def setUp(self):
- self.language = "scilab"
- self.ref_code_path = "scilab_files/test_add.sce"
- self.in_dir = "/tmp"
- self.test_case_data = []
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
- self.test = None
-
- def test_correct_answer(self):
- user_answer = "funcprot(0)\nfunction[c]=add(a,b)\n\tc=a+b;\nendfunction"
- get_class = ScilabCodeEvaluator(self.test_case_data, self.test,
- self.language, user_answer,
- self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertTrue(result.get("success"))
- self.assertEqual(result.get("error"), "Correct answer")
-
- def test_error(self):
- user_answer = "funcprot(0)\nfunction[c]=add(a,b)\n\tc=a+b;\ndis(\tendfunction"
- get_class = ScilabCodeEvaluator(self.test_case_data, self.test,
- self.language, user_answer,
- self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertTrue("error" in result.get("error"))
-
- def test_infinite_loop(self):
- user_answer = "funcprot(0)\nfunction[c]=add(a,b)\n\tc=a;\nwhile(1==1)\nend\nendfunction"
- get_class = ScilabCodeEvaluator(self.test_case_data, self.test,
- self.language, user_answer,
- self.ref_code_path, self.in_dir)
- result = get_class.evaluate()
-
- self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/testapp/urls.py b/testapp/urls.py
deleted file mode 100644
index 4547232..0000000
--- a/testapp/urls.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from django.conf.urls import patterns, include, url
-
-# Uncomment the next two lines to enable the admin:
-from django.contrib import admin
-admin.autodiscover()
-
-from settings import URL_ROOT
-
-if URL_ROOT.startswith('/'):
- URL_BASE = r'^%s/exam/'%URL_ROOT[1:]
- ADMIN_BASE = r'^%s/admin/'%URL_ROOT[1:]
-else:
- URL_BASE = r'^exam/'
- ADMIN_BASE = r'^admin/'
-
-urlpatterns = patterns('',
- url(URL_BASE, include('yaksh_app.urls')),
- #url(r'^admin/', include(admin.site.urls)),
- # Uncomment the admin/doc line below to enable admin documentation:
- # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
- # Uncomment the next line to enable the admin:
- url(ADMIN_BASE, include(admin.site.urls)),
-
-)
-
-urlpatterns += patterns('',
- url(r'^taggit_autocomplete_modified/', include\
- ('taggit_autocomplete_modified.urls')),
-)
diff --git a/testapp/yaksh_app/__init__.py b/testapp/yaksh_app/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/testapp/yaksh_app/__init__.py
+++ /dev/null
diff --git a/testapp/yaksh_app/management/__init__.py b/testapp/yaksh_app/management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/testapp/yaksh_app/management/__init__.py
+++ /dev/null
diff --git a/testapp/yaksh_app/management/commands/__init__.py b/testapp/yaksh_app/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/testapp/yaksh_app/management/commands/__init__.py
+++ /dev/null
diff --git a/testapp/yaksh_app/static/yaksh_app/js/jquery-1.4.2.min.js b/testapp/yaksh_app/static/yaksh_app/js/jquery-1.4.2.min.js
deleted file mode 100644
index 48a88b8..0000000
--- a/testapp/yaksh_app/static/yaksh_app/js/jquery-1.4.2.min.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); \ No newline at end of file
diff --git a/testapp/__init__.py b/yaksh/__init__.py
index e69de29..e69de29 100644
--- a/testapp/__init__.py
+++ b/yaksh/__init__.py
diff --git a/testapp/yaksh_app/admin.py b/yaksh/admin.py
index e0a7741..71dfb3b 100644
--- a/testapp/yaksh_app/admin.py
+++ b/yaksh/admin.py
@@ -1,4 +1,4 @@
-from testapp.yaksh_app.models import Question, Quiz, TestCase
+from yaksh.models import Question, Quiz, TestCase
from django.contrib import admin
admin.site.register(Question)
diff --git a/testapp/yaksh_app/bash_code_evaluator.py b/yaksh/bash_code_evaluator.py
index a468fd7..a468fd7 100644
--- a/testapp/yaksh_app/bash_code_evaluator.py
+++ b/yaksh/bash_code_evaluator.py
diff --git a/testapp/yaksh_app/bash_files/sample.args b/yaksh/bash_files/sample.args
index 4d9f00d..4d9f00d 100644
--- a/testapp/yaksh_app/bash_files/sample.args
+++ b/yaksh/bash_files/sample.args
diff --git a/testapp/yaksh_app/bash_files/sample.sh b/yaksh/bash_files/sample.sh
index e935cb3..e935cb3 100755
--- a/testapp/yaksh_app/bash_files/sample.sh
+++ b/yaksh/bash_files/sample.sh
diff --git a/testapp/yaksh_app/c_cpp_files/main.cpp b/yaksh/c_cpp_files/main.cpp
index ebe1f08..ebe1f08 100755
--- a/testapp/yaksh_app/c_cpp_files/main.cpp
+++ b/yaksh/c_cpp_files/main.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main2.c b/yaksh/c_cpp_files/main2.c
index ccd1768..ccd1768 100755
--- a/testapp/yaksh_app/c_cpp_files/main2.c
+++ b/yaksh/c_cpp_files/main2.c
diff --git a/testapp/yaksh_app/c_cpp_files/main_array_check.cpp b/yaksh/c_cpp_files/main_array_check.cpp
index ea34fdd..ea34fdd 100755
--- a/testapp/yaksh_app/c_cpp_files/main_array_check.cpp
+++ b/yaksh/c_cpp_files/main_array_check.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_array_check_all.cpp b/yaksh/c_cpp_files/main_array_check_all.cpp
index 140578e..140578e 100755
--- a/testapp/yaksh_app/c_cpp_files/main_array_check_all.cpp
+++ b/yaksh/c_cpp_files/main_array_check_all.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_array_sum.cpp b/yaksh/c_cpp_files/main_array_sum.cpp
index 55b2ebf..55b2ebf 100755
--- a/testapp/yaksh_app/c_cpp_files/main_array_sum.cpp
+++ b/yaksh/c_cpp_files/main_array_sum.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_blackJack.cpp b/yaksh/c_cpp_files/main_blackJack.cpp
index cc54e78..cc54e78 100755
--- a/testapp/yaksh_app/c_cpp_files/main_blackJack.cpp
+++ b/yaksh/c_cpp_files/main_blackJack.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_check_digit.cpp b/yaksh/c_cpp_files/main_check_digit.cpp
index d3bf3d6..d3bf3d6 100755
--- a/testapp/yaksh_app/c_cpp_files/main_check_digit.cpp
+++ b/yaksh/c_cpp_files/main_check_digit.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_count667.cpp b/yaksh/c_cpp_files/main_count667.cpp
index f146e8c..f146e8c 100755
--- a/testapp/yaksh_app/c_cpp_files/main_count667.cpp
+++ b/yaksh/c_cpp_files/main_count667.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_count7.cpp b/yaksh/c_cpp_files/main_count7.cpp
index 982e930..982e930 100755
--- a/testapp/yaksh_app/c_cpp_files/main_count7.cpp
+++ b/yaksh/c_cpp_files/main_count7.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_fact.cpp b/yaksh/c_cpp_files/main_fact.cpp
index a4ff230..a4ff230 100755
--- a/testapp/yaksh_app/c_cpp_files/main_fact.cpp
+++ b/yaksh/c_cpp_files/main_fact.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_greatest.cpp b/yaksh/c_cpp_files/main_greatest.cpp
index 6d0a7c2..6d0a7c2 100755
--- a/testapp/yaksh_app/c_cpp_files/main_greatest.cpp
+++ b/yaksh/c_cpp_files/main_greatest.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_hello_name.c b/yaksh/c_cpp_files/main_hello_name.c
index 71b83a2..71b83a2 100755
--- a/testapp/yaksh_app/c_cpp_files/main_hello_name.c
+++ b/yaksh/c_cpp_files/main_hello_name.c
diff --git a/testapp/yaksh_app/c_cpp_files/main_lessThan9.cpp b/yaksh/c_cpp_files/main_lessThan9.cpp
index 722b4bb..722b4bb 100755
--- a/testapp/yaksh_app/c_cpp_files/main_lessThan9.cpp
+++ b/yaksh/c_cpp_files/main_lessThan9.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_mean.cpp b/yaksh/c_cpp_files/main_mean.cpp
index 21a4b1a..21a4b1a 100755
--- a/testapp/yaksh_app/c_cpp_files/main_mean.cpp
+++ b/yaksh/c_cpp_files/main_mean.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_palindrome.cpp b/yaksh/c_cpp_files/main_palindrome.cpp
index 0e66928..0e66928 100755
--- a/testapp/yaksh_app/c_cpp_files/main_palindrome.cpp
+++ b/yaksh/c_cpp_files/main_palindrome.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_roundTo10.cpp b/yaksh/c_cpp_files/main_roundTo10.cpp
index 12c961d..12c961d 100755
--- a/testapp/yaksh_app/c_cpp_files/main_roundTo10.cpp
+++ b/yaksh/c_cpp_files/main_roundTo10.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_specialSum.cpp b/yaksh/c_cpp_files/main_specialSum.cpp
index d614536..d614536 100755
--- a/testapp/yaksh_app/c_cpp_files/main_specialSum.cpp
+++ b/yaksh/c_cpp_files/main_specialSum.cpp
diff --git a/testapp/yaksh_app/c_cpp_files/main_within.cpp b/yaksh/c_cpp_files/main_within.cpp
index 50f9ad0..50f9ad0 100755
--- a/testapp/yaksh_app/c_cpp_files/main_within.cpp
+++ b/yaksh/c_cpp_files/main_within.cpp
diff --git a/testapp/yaksh_app/code_evaluator.py b/yaksh/code_evaluator.py
index 381b2e8..381b2e8 100644
--- a/testapp/yaksh_app/code_evaluator.py
+++ b/yaksh/code_evaluator.py
diff --git a/testapp/yaksh_app/code_server.py b/yaksh/code_server.py
index 2593752..2593752 100755
--- a/testapp/yaksh_app/code_server.py
+++ b/yaksh/code_server.py
diff --git a/testapp/yaksh_app/cpp_code_evaluator.py b/yaksh/cpp_code_evaluator.py
index 7242884..7242884 100644
--- a/testapp/yaksh_app/cpp_code_evaluator.py
+++ b/yaksh/cpp_code_evaluator.py
diff --git a/testapp/templates/demo_settings.py b/yaksh/demo_templates/demo_settings.py
index ecc1fe3..4e12463 100644
--- a/testapp/templates/demo_settings.py
+++ b/yaksh/demo_templates/demo_settings.py
@@ -38,7 +38,7 @@ INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
- 'testapp.exam',
+ 'yaksh',
'taggit',
)
@@ -85,4 +85,4 @@ USE_TZ = False
STATIC_URL = '/static/'
-AUTH_PROFILE_MODULE = 'exam.Profile'
+AUTH_PROFILE_MODULE = 'yaksh.Profile'
diff --git a/testapp/templates/demo_urls.py b/yaksh/demo_templates/demo_urls.py
index 275b281..d99e473 100644
--- a/testapp/templates/demo_urls.py
+++ b/yaksh/demo_templates/demo_urls.py
@@ -9,5 +9,5 @@ urlpatterns = patterns('',
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
- url(r'^exam/', include('testapp.exam.urls')),
+ url(r'^exam/', include('yaksh.urls')),
)
diff --git a/testapp/yaksh_app/docs/sample.args b/yaksh/docs/sample.args
index 4d9f00d..4d9f00d 100644
--- a/testapp/yaksh_app/docs/sample.args
+++ b/yaksh/docs/sample.args
diff --git a/testapp/yaksh_app/docs/sample.sh b/yaksh/docs/sample.sh
index e935cb3..e935cb3 100755
--- a/testapp/yaksh_app/docs/sample.sh
+++ b/yaksh/docs/sample.sh
diff --git a/testapp/yaksh_app/docs/sample_questions.py b/yaksh/docs/sample_questions.py
index 60f32cb..60f32cb 100644
--- a/testapp/yaksh_app/docs/sample_questions.py
+++ b/yaksh/docs/sample_questions.py
diff --git a/testapp/yaksh_app/docs/sample_questions.xml b/yaksh/docs/sample_questions.xml
index 53c76f8..53c76f8 100644
--- a/testapp/yaksh_app/docs/sample_questions.xml
+++ b/yaksh/docs/sample_questions.xml
diff --git a/testapp/fixtures/initial_fixtures.json b/yaksh/fixtures/initial_fixtures.json
index e16b09f..e16b09f 100644
--- a/testapp/fixtures/initial_fixtures.json
+++ b/yaksh/fixtures/initial_fixtures.json
diff --git a/testapp/yaksh_app/forms.py b/yaksh/forms.py
index c0b5cdc..de40419 100644
--- a/testapp/yaksh_app/forms.py
+++ b/yaksh/forms.py
@@ -1,5 +1,5 @@
from django import forms
-from testapp.yaksh_app.models import Profile, Quiz, Question, TestCase
+from yaksh.models import Profile, Quiz, Question, TestCase
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
@@ -139,7 +139,10 @@ class QuizForm(forms.Form):
self.fields['prerequisite'] = forms.CharField(required=False,
widget=forms.Select(choices=quizzes))
- start_date = forms.DateField(initial=datetime.date.today)
+ start_date = forms.DateField(initial=datetime.date.today(), required=False)
+ start_time = forms.TimeField(initial=datetime.datetime.now().time(), required=False)
+ end_date = forms.DateField(initial=datetime.date(2199, 1, 1), required=False)
+ end_time = forms.TimeField(initial=datetime.time(0, 0, 0, 0), required=False)
duration = forms.IntegerField(help_text='Will be taken in minutes')
active = forms.BooleanField(required=False)
description = forms.CharField(max_length=256, widget=forms.Textarea\
@@ -154,6 +157,9 @@ class QuizForm(forms.Form):
def save(self):
start_date = self.cleaned_data["start_date"]
+ start_time = self.cleaned_data["start_time"]
+ end_date = self.cleaned_data["end_date"]
+ end_time = self.cleaned_data["end_time"]
duration = self.cleaned_data["duration"]
active = self.cleaned_data['active']
description = self.cleaned_data["description"]
@@ -163,7 +169,10 @@ class QuizForm(forms.Form):
attempts_allowed = self.cleaned_data["attempts_allowed"]
time_between_attempts = self.cleaned_data["time_between_attempts"]
new_quiz = Quiz()
- new_quiz.start_date = start_date
+ new_quiz.start_date_time = datetime.datetime.combine(start_date,
+ start_time)
+ new_quiz.end_date_time = datetime.datetime.combine(end_date,
+ end_time)
new_quiz.duration = duration
new_quiz.active = active
new_quiz.description = description
diff --git a/testapp/yaksh_app/java_code_evaluator.py b/yaksh/java_code_evaluator.py
index 4367259..4367259 100644
--- a/testapp/yaksh_app/java_code_evaluator.py
+++ b/yaksh/java_code_evaluator.py
diff --git a/testapp/yaksh_app/java_files/main_array_sum.java b/yaksh/java_files/main_array_sum.java
index 5eae299..5eae299 100644
--- a/testapp/yaksh_app/java_files/main_array_sum.java
+++ b/yaksh/java_files/main_array_sum.java
diff --git a/testapp/yaksh_app/java_files/main_fact.java b/yaksh/java_files/main_fact.java
index 325dab6..325dab6 100644
--- a/testapp/yaksh_app/java_files/main_fact.java
+++ b/yaksh/java_files/main_fact.java
diff --git a/testapp/yaksh_app/java_files/main_great.java b/yaksh/java_files/main_great.java
index 4bfcb1f..4bfcb1f 100644
--- a/testapp/yaksh_app/java_files/main_great.java
+++ b/yaksh/java_files/main_great.java
diff --git a/testapp/yaksh_app/java_files/main_hello_name.java b/yaksh/java_files/main_hello_name.java
index 84bb282..84bb282 100644
--- a/testapp/yaksh_app/java_files/main_hello_name.java
+++ b/yaksh/java_files/main_hello_name.java
diff --git a/testapp/yaksh_app/java_files/main_lastDigit.java b/yaksh/java_files/main_lastDigit.java
index 05439e2..05439e2 100644
--- a/testapp/yaksh_app/java_files/main_lastDigit.java
+++ b/yaksh/java_files/main_lastDigit.java
diff --git a/testapp/yaksh_app/java_files/main_moreThan30.java b/yaksh/java_files/main_moreThan30.java
index 7da31cb..7da31cb 100644
--- a/testapp/yaksh_app/java_files/main_moreThan30.java
+++ b/yaksh/java_files/main_moreThan30.java
diff --git a/testapp/yaksh_app/java_files/main_palindrome.java b/yaksh/java_files/main_palindrome.java
index c0745f9..c0745f9 100644
--- a/testapp/yaksh_app/java_files/main_palindrome.java
+++ b/yaksh/java_files/main_palindrome.java
diff --git a/testapp/yaksh_app/java_files/main_square.java b/yaksh/java_files/main_square.java
index 5cb8c35..5cb8c35 100644
--- a/testapp/yaksh_app/java_files/main_square.java
+++ b/yaksh/java_files/main_square.java
diff --git a/testapp/yaksh_app/language_registry.py b/yaksh/language_registry.py
index 76a23d7..76a23d7 100644
--- a/testapp/yaksh_app/language_registry.py
+++ b/yaksh/language_registry.py
diff --git a/testapp/myauthentication/__init__.py b/yaksh/management/__init__.py
index e69de29..e69de29 100644
--- a/testapp/myauthentication/__init__.py
+++ b/yaksh/management/__init__.py
diff --git a/testapp/scripts/__init__.py b/yaksh/management/commands/__init__.py
index e69de29..e69de29 100644
--- a/testapp/scripts/__init__.py
+++ b/yaksh/management/commands/__init__.py
diff --git a/testapp/yaksh_app/management/commands/add_group.py b/yaksh/management/commands/add_group.py
index db0ebb6..03ef103 100644
--- a/testapp/yaksh_app/management/commands/add_group.py
+++ b/yaksh/management/commands/add_group.py
@@ -15,7 +15,7 @@ class Command(BaseCommand):
help = 'Adds the moderator group'
def handle(self, *args, **options):
- app = 'yaksh_app'
+ app = 'yaksh'
group = Group(name='moderator')
try:
group.save()
diff --git a/testapp/yaksh_app/management/commands/dump_user_data.py b/yaksh/management/commands/dump_user_data.py
index 2c1a108..7deee03 100644
--- a/testapp/yaksh_app/management/commands/dump_user_data.py
+++ b/yaksh/management/commands/dump_user_data.py
@@ -5,8 +5,8 @@ from django.core.management.base import BaseCommand
from django.template import Template, Context
# Local imports.
-from testapp.yaksh_app.views import get_user_data
-from testapp.yaksh_app.models import User
+from yaksh.views import get_user_data
+from yaksh.models import User
data_template = Template('''\
===============================================================================
diff --git a/testapp/yaksh_app/management/commands/load_exam.py b/yaksh/management/commands/load_exam.py
index 9163fdc..b354fbd 100644
--- a/testapp/yaksh_app/management/commands/load_exam.py
+++ b/yaksh/management/commands/load_exam.py
@@ -5,7 +5,7 @@ from os.path import basename
from django.core.management.base import BaseCommand
# Local imports.
-from testapp.yaksh_app.models import Question, Quiz
+from yaksh.models import Question, Quiz
def clear_exam():
"""Deactivate all questions from the database."""
diff --git a/testapp/yaksh_app/management/commands/load_questions_xml.py b/yaksh/management/commands/load_questions_xml.py
index 7bde9e9..02714ea 100644
--- a/testapp/yaksh_app/management/commands/load_questions_xml.py
+++ b/yaksh/management/commands/load_questions_xml.py
@@ -8,7 +8,7 @@ import re
from django.core.management.base import BaseCommand
# Local imports.
-from testapp.yaksh_app.models import Question
+from yaksh.models import Question
def decode_html(html_str):
"""Un-escape or decode HTML strings to more usable Python strings.
diff --git a/testapp/yaksh_app/management/commands/results2csv.py b/yaksh/management/commands/results2csv.py
index c9b05ce..2644354 100644
--- a/testapp/yaksh_app/management/commands/results2csv.py
+++ b/yaksh/management/commands/results2csv.py
@@ -7,7 +7,7 @@ from django.core.management.base import BaseCommand
from django.template import Template, Context
# Local imports.
-from testapp.yaksh_app.models import Quiz, QuestionPaper
+from yaksh.models import Quiz, QuestionPaper
result_template = Template('''\
"name","username","rollno","email","answered","total","attempts","position",\
diff --git a/testapp/yaksh_app/models.py b/yaksh/models.py
index 9e37ef5..62ac9bc 100644
--- a/testapp/yaksh_app/models.py
+++ b/yaksh/models.py
@@ -160,7 +160,14 @@ class Quiz(models.Model):
"""
# The start date of the quiz.
- start_date = models.DateField("Date of the quiz")
+ start_date_time = models.DateTimeField("Start Date and Time of the quiz",
+ default=datetime.datetime.now(),
+ null=True)
+
+ # The end date and time of the quiz
+ end_date_time = models.DateTimeField("End Date and Time of the quiz",
+ default=datetime.datetime(2199, 1, 1, 0, 0, 0, 0),
+ null=True)
# This is always in minutes.
duration = models.IntegerField("Duration of quiz in minutes", default=20)
@@ -192,7 +199,7 @@ class Quiz(models.Model):
def __unicode__(self):
desc = self.description or 'Quiz'
- return '%s: on %s for %d minutes' % (desc, self.start_date,
+ return '%s: on %s for %d minutes' % (desc, self.start_date_time,
self.duration)
diff --git a/testapp/yaksh_app/output/README.txt b/yaksh/output/README.txt
index 3163ed4..3163ed4 100644
--- a/testapp/yaksh_app/output/README.txt
+++ b/yaksh/output/README.txt
diff --git a/testapp/yaksh_app/python_code_evaluator.py b/yaksh/python_code_evaluator.py
index 0c473cf..0c473cf 100644
--- a/testapp/yaksh_app/python_code_evaluator.py
+++ b/yaksh/python_code_evaluator.py
diff --git a/testapp/yaksh_app/scilab_code_evaluator.py b/yaksh/scilab_code_evaluator.py
index 392cd45..392cd45 100644
--- a/testapp/yaksh_app/scilab_code_evaluator.py
+++ b/yaksh/scilab_code_evaluator.py
diff --git a/testapp/yaksh_app/scilab_files/test_add.sce b/yaksh/scilab_files/test_add.sce
index a317cdb..a317cdb 100644
--- a/testapp/yaksh_app/scilab_files/test_add.sce
+++ b/yaksh/scilab_files/test_add.sce
diff --git a/testapp/tests/__init__.py b/yaksh/scripts/__init__.py
index e69de29..e69de29 100644
--- a/testapp/tests/__init__.py
+++ b/yaksh/scripts/__init__.py
diff --git a/testapp/scripts/project_detail.py b/yaksh/scripts/project_detail.py
index 583e9f4..583e9f4 100644
--- a/testapp/scripts/project_detail.py
+++ b/yaksh/scripts/project_detail.py
diff --git a/testapp/scripts/yaksh.py b/yaksh/scripts/yaksh.py
index 8b3e8b7..4360d1b 100644
--- a/testapp/scripts/yaksh.py
+++ b/yaksh/scripts/yaksh.py
@@ -15,7 +15,7 @@ from project_detail import NAME, PATH
CUR_DIR = os.getcwd()
SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
PARENT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, os.pardir))
-TEMPLATE_DIR = path.join(PARENT_DIR, 'templates')
+TEMPLATE_DIR = path.join(PARENT_DIR, 'demo_templates')
def main():
#Parse command-line to obtain the arguments and/or options
@@ -111,7 +111,7 @@ def run_demo(project_name, top_dir):
def run_server():
try:
- from testapp.exam import code_server
+ from yaksh import code_server
code_server.main()
except Exception as e:
print("Error: {0}\nExiting Vimarsh code server".format(e))
diff --git a/testapp/yaksh_app/settings.py b/yaksh/settings.py
index 9039250..4b1828e 100644
--- a/testapp/yaksh_app/settings.py
+++ b/yaksh/settings.py
@@ -1,5 +1,5 @@
"""
-settings for yaksh_app app.
+settings for yaksh app.
"""
# The ports the code server should run on. This will run one separate
# server for each port listed in the following list.
diff --git a/testapp/yaksh_app/static/yaksh_app/css/autotaggit.css b/yaksh/static/yaksh/css/autotaggit.css
index ed856ce..ed856ce 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/autotaggit.css
+++ b/yaksh/static/yaksh/css/autotaggit.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/base.css b/yaksh/static/yaksh/css/base.css
index 3570098..3570098 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/base.css
+++ b/yaksh/static/yaksh/css/base.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/gradeuser.css b/yaksh/static/yaksh/css/gradeuser.css
index 07b1079..07b1079 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/gradeuser.css
+++ b/yaksh/static/yaksh/css/gradeuser.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/login.css b/yaksh/static/yaksh/css/login.css
index a10cbaa..a10cbaa 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/login.css
+++ b/yaksh/static/yaksh/css/login.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/monitor.css b/yaksh/static/yaksh/css/monitor.css
index b16c8b3..b16c8b3 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/monitor.css
+++ b/yaksh/static/yaksh/css/monitor.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/question.css b/yaksh/static/yaksh/css/question.css
index 4bf5913..4bf5913 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/question.css
+++ b/yaksh/static/yaksh/css/question.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/question_paper_creation.css b/yaksh/static/yaksh/css/question_paper_creation.css
index c915320..c915320 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/question_paper_creation.css
+++ b/yaksh/static/yaksh/css/question_paper_creation.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/question_quiz.css b/yaksh/static/yaksh/css/question_quiz.css
index ee249d4..ee249d4 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/question_quiz.css
+++ b/yaksh/static/yaksh/css/question_quiz.css
diff --git a/testapp/yaksh_app/static/yaksh_app/css/showusers.css b/yaksh/static/yaksh/css/showusers.css
index 66a3746..66a3746 100644
--- a/testapp/yaksh_app/static/yaksh_app/css/showusers.css
+++ b/yaksh/static/yaksh/css/showusers.css
diff --git a/testapp/yaksh_app/static/yaksh_app/js/add_question.js b/yaksh/static/yaksh/js/add_question.js
index 946c139..946c139 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/add_question.js
+++ b/yaksh/static/yaksh/js/add_question.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/add_questionpaper.js b/yaksh/static/yaksh/js/add_questionpaper.js
index 6185dd5..6185dd5 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/add_questionpaper.js
+++ b/yaksh/static/yaksh/js/add_questionpaper.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/add_quiz.js b/yaksh/static/yaksh/js/add_quiz.js
index 184881c..184881c 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/add_quiz.js
+++ b/yaksh/static/yaksh/js/add_quiz.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/bootstrap-modal.js b/yaksh/static/yaksh/js/bootstrap-modal.js
index b328217..b328217 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/bootstrap-modal.js
+++ b/yaksh/static/yaksh/js/bootstrap-modal.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/bootstrap-tabs.js b/yaksh/static/yaksh/js/bootstrap-tabs.js
index a3c7ee1..a3c7ee1 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/bootstrap-tabs.js
+++ b/yaksh/static/yaksh/js/bootstrap-tabs.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/edit_question.js b/yaksh/static/yaksh/js/edit_question.js
index 7a0f56d..7a0f56d 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/edit_question.js
+++ b/yaksh/static/yaksh/js/edit_question.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/edit_quiz.js b/yaksh/static/yaksh/js/edit_quiz.js
index ce6dac7..ce6dac7 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/edit_quiz.js
+++ b/yaksh/static/yaksh/js/edit_quiz.js
diff --git a/testapp/exam/static/exam/js/jquery-1.4.2.min.js b/yaksh/static/yaksh/js/jquery-1.4.2.min.js
index 48a88b8..48a88b8 100644
--- a/testapp/exam/static/exam/js/jquery-1.4.2.min.js
+++ b/yaksh/static/yaksh/js/jquery-1.4.2.min.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/min.js b/yaksh/static/yaksh/js/min.js
index b1ae21d..b1ae21d 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/min.js
+++ b/yaksh/static/yaksh/js/min.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/question.js b/yaksh/static/yaksh/js/question.js
index 75baf76..75baf76 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/question.js
+++ b/yaksh/static/yaksh/js/question.js
diff --git a/testapp/exam/static/exam/js/question_filter.js b/yaksh/static/yaksh/js/question_filter.js
index 065b06b..065b06b 100644
--- a/testapp/exam/static/exam/js/question_filter.js
+++ b/yaksh/static/yaksh/js/question_filter.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/question_paper_creation.js b/yaksh/static/yaksh/js/question_paper_creation.js
index a144540..a144540 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/question_paper_creation.js
+++ b/yaksh/static/yaksh/js/question_paper_creation.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/show_question.js b/yaksh/static/yaksh/js/show_question.js
index e3ed1cc..e3ed1cc 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/show_question.js
+++ b/yaksh/static/yaksh/js/show_question.js
diff --git a/testapp/yaksh_app/static/yaksh_app/js/show_quiz.js b/yaksh/static/yaksh/js/show_quiz.js
index c58feaa..c58feaa 100644
--- a/testapp/yaksh_app/static/yaksh_app/js/show_quiz.js
+++ b/yaksh/static/yaksh/js/show_quiz.js
diff --git a/testapp/yaksh_app/templates/404.html b/yaksh/templates/404.html
index 7d33dd3..7d33dd3 100644
--- a/testapp/yaksh_app/templates/404.html
+++ b/yaksh/templates/404.html
diff --git a/testapp/yaksh_app/templates/500.html b/yaksh/templates/500.html
index d02721f..d02721f 100644
--- a/testapp/yaksh_app/templates/500.html
+++ b/yaksh/templates/500.html
diff --git a/testapp/yaksh_app/templates/base.html b/yaksh/templates/base.html
index 7b91978..5284a77 100644
--- a/testapp/yaksh_app/templates/base.html
+++ b/yaksh/templates/base.html
@@ -14,7 +14,7 @@
<meta name="author" content="">
{% endblock %}
- <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/base.css" type="text/css" />
+ <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/base.css" type="text/css" />
{% block css %}
{% endblock %}
diff --git a/testapp/yaksh_app/templates/manage.html b/yaksh/templates/manage.html
index a5b4cf3..ca2ac65 100644
--- a/testapp/yaksh_app/templates/manage.html
+++ b/yaksh/templates/manage.html
@@ -11,8 +11,8 @@
<meta name="author" content="">
{% endblock %}
- <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/base.css" type="text/css" />
- <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/manage.css" type="text/css" />
+ <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/base.css" type="text/css" />
+ <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/manage.css" type="text/css" />
{% block css %}
{% endblock %}
diff --git a/testapp/yaksh_app/templates/user.html b/yaksh/templates/user.html
index db2dc9e..00151d2 100644
--- a/testapp/yaksh_app/templates/user.html
+++ b/yaksh/templates/user.html
@@ -14,7 +14,7 @@
<meta name="author" content="">
{% endblock %}
- <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/base.css" type="text/css" />
+ <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/base.css" type="text/css" />
{% block css %}
{% endblock %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/add_question.html b/yaksh/templates/yaksh/add_question.html
index 4b2d097..b896081 100644
--- a/testapp/yaksh_app/templates/yaksh_app/add_question.html
+++ b/yaksh/templates/yaksh/add_question.html
@@ -4,13 +4,13 @@
{% block subtitle %}Add Question{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/autotaggit.css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/autotaggit.css" />
{% endblock %}
{% block script %}
-<script type="text/javascript" src="{{ URL_ROOT }}/static/yaksh_app/js/jquery-1.4.2.min.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/add_question.js"></script>
+<script type="text/javascript" src="{{ URL_ROOT }}/static/yaksh/js/jquery-1.4.2.min.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/add_question.js"></script>
{% endblock %}
{% block onload %} onload='javascript:textareaformat();' {% endblock %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/add_questionpaper.html b/yaksh/templates/yaksh/add_questionpaper.html
index 049abbe..eaa96bc 100644
--- a/testapp/yaksh_app/templates/yaksh_app/add_questionpaper.html
+++ b/yaksh/templates/yaksh/add_questionpaper.html
@@ -4,12 +4,12 @@
{% block subtitle %}Design Question Paper{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/autotaggit.css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/autotaggit.css" />
{% endblock %}
{% block script %}
-<script src="/static/yaksh_app/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/add_questionpaper.js"></script>
+<script src="/static/yaksh/js/jquery-1.4.2.min.js" type="text/javascript"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/add_questionpaper.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/add_quiz.html b/yaksh/templates/yaksh/add_quiz.html
index ded8e9b..e78023d 100644
--- a/testapp/yaksh_app/templates/yaksh_app/add_quiz.html
+++ b/yaksh/templates/yaksh/add_quiz.html
@@ -4,10 +4,10 @@
{% block subtitle %}Add Quiz{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
{% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/add_quiz.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/add_quiz.js"></script>
{% endblock %}
{% block onload %} onload="javascript:test();" {% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/ajax_marks.html b/yaksh/templates/yaksh/ajax_marks.html
index 716bb88..716bb88 100644
--- a/testapp/yaksh_app/templates/yaksh_app/ajax_marks.html
+++ b/yaksh/templates/yaksh/ajax_marks.html
diff --git a/testapp/exam/templates/exam/ajax_question_filter.html b/yaksh/templates/yaksh/ajax_question_filter.html
index 11bf660..11bf660 100644
--- a/testapp/exam/templates/exam/ajax_question_filter.html
+++ b/yaksh/templates/yaksh/ajax_question_filter.html
diff --git a/testapp/yaksh_app/templates/yaksh_app/ajax_questions.html b/yaksh/templates/yaksh/ajax_questions.html
index e343f9b..e343f9b 100644
--- a/testapp/yaksh_app/templates/yaksh_app/ajax_questions.html
+++ b/yaksh/templates/yaksh/ajax_questions.html
diff --git a/testapp/yaksh_app/templates/yaksh_app/automatic_questionpaper.html b/yaksh/templates/yaksh/automatic_questionpaper.html
index f9c222a..b9a4ae0 100644
--- a/testapp/yaksh_app/templates/yaksh_app/automatic_questionpaper.html
+++ b/yaksh/templates/yaksh/automatic_questionpaper.html
@@ -4,8 +4,8 @@
{% block subtitle %}Design Question Paper{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/autotaggit.css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/autotaggit.css" />
<style>
select
{
@@ -14,8 +14,8 @@ select
</style>
{% endblock %}
{% block script %}
-<script src="/static/yaksh_app/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/add_questionpaper.js"></script>
+<script src="/static/yaksh/js/jquery-1.4.2.min.js" type="text/javascript"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/add_questionpaper.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/complete.html b/yaksh/templates/yaksh/complete.html
index 08abe76..08abe76 100644
--- a/testapp/yaksh_app/templates/yaksh_app/complete.html
+++ b/yaksh/templates/yaksh/complete.html
diff --git a/testapp/yaksh_app/templates/yaksh_app/design_questionpaper.html b/yaksh/templates/yaksh/design_questionpaper.html
index 4e24e09..2aa169b 100644
--- a/testapp/yaksh_app/templates/yaksh_app/design_questionpaper.html
+++ b/yaksh/templates/yaksh/design_questionpaper.html
@@ -3,10 +3,10 @@
{% block subtitle %}Design Question Paper{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/base.css" type="text/css" />
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/autotaggit.css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/question_paper_creation.css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/base.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/autotaggit.css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/question_paper_creation.css" />
<style>
select
{
@@ -15,12 +15,12 @@ select
</style>
{% endblock %}
{% block script %}
-<script src="/static/exam/js/jquery-1.4.2.min.js" type="text/javascript"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/bootstrap-tabs.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/add_questionpaper.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/question_paper_creation.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/bootstrap-modal.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/bootstrap-tabs.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/add_questionpaper.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/question_paper_creation.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/bootstrap-modal.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/edit_question.html b/yaksh/templates/yaksh/edit_question.html
index 7aad7de..9a66250 100644
--- a/testapp/yaksh_app/templates/yaksh_app/edit_question.html
+++ b/yaksh/templates/yaksh/edit_question.html
@@ -3,12 +3,12 @@
{% block subtitle %}Edit Question{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/autotaggit.css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/autotaggit.css" />
{% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/edit_question.js"></script>
-<script src="/static/yaksh_app/js/jquery-1.4.2.min.js" type="text/javascript"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/edit_question.js"></script>
+<script src="/static/yaksh/js/jquery-1.4.2.min.js" type="text/javascript"></script>
{% endblock %}
{% block onload %} onload = 'javascript:textareaformat();' {% endblock %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/edit_quiz.html b/yaksh/templates/yaksh/edit_quiz.html
index c8a36e7..fb7df93 100644
--- a/testapp/yaksh_app/templates/yaksh_app/edit_quiz.html
+++ b/yaksh/templates/yaksh/edit_quiz.html
@@ -4,11 +4,11 @@
{% block subtitle %}Edit Quiz(zes){% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
{% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/edit_quiz.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/edit_quiz.js"></script>
{% endblock %}
{% block onload %} onload = 'javascript:form_load();' {% endblock %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/editquestionpaper.html b/yaksh/templates/yaksh/editquestionpaper.html
index 90038b4..2b7b835 100644
--- a/testapp/yaksh_app/templates/yaksh_app/editquestionpaper.html
+++ b/yaksh/templates/yaksh/editquestionpaper.html
@@ -4,7 +4,7 @@
{% block subtitle %}Questions in "{{ papers.quiz.description }}"{% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/show_question.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/show_question.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/grade_user.html b/yaksh/templates/yaksh/grade_user.html
index 1447337..8c094a7 100644
--- a/testapp/yaksh_app/templates/yaksh_app/grade_user.html
+++ b/yaksh/templates/yaksh/grade_user.html
@@ -5,11 +5,11 @@
{% block subtitle %}Grading papers for {{ data.user.get_full_name.title }}{% endblock %}
{% block css %}
- <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/gradeuser.css" type="text/css" />
+ <link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/gradeuser.css" type="text/css" />
{% endblock %}
{% block script %}
-<script src= "{{ URL_ROOT }}/static/yaksh_app/js/edit_question.js"></script>
+<script src= "{{ URL_ROOT }}/static/yaksh/js/edit_question.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/intro.html b/yaksh/templates/yaksh/intro.html
index 592937a..9c5c14d 100644
--- a/testapp/yaksh_app/templates/yaksh_app/intro.html
+++ b/yaksh/templates/yaksh/intro.html
@@ -5,8 +5,21 @@
{% block formtitle %}Important instructions & rules {% endblock %}
{% block content %}
-
-
+ {% if enable_quiz_time or disable_quiz_time %}
+ {% if quiz_expired %}
+ <div class="alert alert-error">
+ This Quiz has expired. You can no longer attempt this Quiz.
+ <br/>
+ </div>
+ {% else %}
+ <div class="alert">
+ You can attempt this Quiz at any time between {{ enable_quiz_time }} and {{ disable_quiz_time }}
+ <br/>
+ You are not allowed to attempt the Quiz before or after this duration
+ <br/>
+ </div>
+ {% endif %}
+ {% endif %}
<p> Welcome <strong>{{user.first_name.title}} {{user.last_name.title}}</strong>, to the programming quiz! </p>
<p>
This examination system has been developed with the intention of making you
@@ -27,8 +40,14 @@
</ul>
<p> We hope you enjoy taking this exam !!!</p>
- <form action="{{URL_ROOT}}/exam/start/{{ attempt_num }}/{{ paper_id }}/" method="post" align="center">
+ <form action="{{URL_ROOT}}/exam/quizzes/" method="post" align="center">
{% csrf_token %}
- <center><button class="btn" type="submit" name="start">Start Exam!</button></center>
+ <center><button class="btn" name="home">Home</button></center>
</form>
+ {% if not quiz_expired %}
+ <form action="{{URL_ROOT}}/exam/start/{{ attempt_num }}/{{ paper_id }}/" method="post" align="center">
+ {% csrf_token %}
+ <center><button class="btn" type="submit" name="start">Start Exam!</button></center>
+ </form>
+ {% endif %}
{% endblock content %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/login.html b/yaksh/templates/yaksh/login.html
index 341d7a7..dfeac1e 100644
--- a/testapp/yaksh_app/templates/yaksh_app/login.html
+++ b/yaksh/templates/yaksh/login.html
@@ -4,7 +4,7 @@
{% block pagetitle %} Online Test {% endblock %}
{% block formtitle %}Login{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/login.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/login.css" type="text/css" />
{% endblock %}
{% block content %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/manual_questionpaper.html b/yaksh/templates/yaksh/manual_questionpaper.html
index 66c83ed..86bfd67 100644
--- a/testapp/yaksh_app/templates/yaksh_app/manual_questionpaper.html
+++ b/yaksh/templates/yaksh/manual_questionpaper.html
@@ -4,8 +4,8 @@
{% block subtitle %}Design Question Paper{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
-<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh_app/css/autotaggit.css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/autotaggit.css" />
<style>
select
{
@@ -14,9 +14,8 @@ select
</style>
{% endblock %}
{% block script %}
-<script src="/static/exam/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/add_questionpaper.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/jquery-1.4.2.min.js" type="text/javascript"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/add_questionpaper.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/monitor.html b/yaksh/templates/yaksh/monitor.html
index 261dffd..52695cb 100644
--- a/testapp/yaksh_app/templates/yaksh_app/monitor.html
+++ b/yaksh/templates/yaksh/monitor.html
@@ -5,7 +5,7 @@
{% block meta %} <meta http-equiv="refresh" content="30"/> {% endblock meta %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
{% endblock %}
{% block subtitle %}
{% if not quizzes and not quiz %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/question.html b/yaksh/templates/yaksh/question.html
index 8b43fff..e532513 100644
--- a/testapp/yaksh_app/templates/yaksh_app/question.html
+++ b/yaksh/templates/yaksh/question.html
@@ -5,14 +5,14 @@
{% block title %} Answer question {% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question.css" type="text/css" />
{% endblock %}
{% block script %}
-<script src="/static/yaksh_app/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/question.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/bootstrap-modal.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/jquery-1.4.2.min.js" type="text/javascript"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/question.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/bootstrap-modal.js"></script>
<script>
var time_left = {{ time_left }}
diff --git a/testapp/yaksh_app/templates/yaksh_app/quit.html b/yaksh/templates/yaksh/quit.html
index 91bce64..91bce64 100644
--- a/testapp/yaksh_app/templates/yaksh_app/quit.html
+++ b/yaksh/templates/yaksh/quit.html
diff --git a/testapp/yaksh_app/templates/yaksh_app/quizlist.html b/yaksh/templates/yaksh/quizlist.html
index 9b1fd73..9b1fd73 100644
--- a/testapp/yaksh_app/templates/yaksh_app/quizlist.html
+++ b/yaksh/templates/yaksh/quizlist.html
diff --git a/testapp/yaksh_app/templates/yaksh_app/quizzes_user.html b/yaksh/templates/yaksh/quizzes_user.html
index 19618ec..fbd50ce 100644
--- a/testapp/yaksh_app/templates/yaksh_app/quizzes_user.html
+++ b/yaksh/templates/yaksh/quizzes_user.html
@@ -4,12 +4,12 @@
{% block subtitle %}Hello {{ user.first_name }}, welcome to your dashboard !{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
{% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/bootstrap-alert.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/quizzes_user.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/bootstrap-alert.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/quizzes_user.js"></script>
{% endblock %}
@@ -26,9 +26,15 @@
<th>Pre requisite quiz</th>
{% for paper in quizzes %}
<tr>
- <td>
- <a href="{{ URL_ROOT }}/exam/intro/{{paper.id}}">{{ paper.quiz.description }}</a><br>
- </td>
+ {% if paper in unexpired_quizzes %}
+ <td>
+ <a href="{{ URL_ROOT }}/exam/intro/{{paper.id}}">{{ paper.quiz.description }}</a><br>
+ </td>
+ {% else %}
+ <td>
+ {{ paper.quiz.description }} <span class="label important">Expired</span><br>
+ </td>
+ {% endif %}
<td>
{% if paper.quiz.prerequisite %}
You have to pass {{ paper.quiz.prerequisite.description }} for taking {{ paper.quiz.description }}
diff --git a/testapp/yaksh_app/templates/yaksh_app/register.html b/yaksh/templates/yaksh/register.html
index 5ff79cc..5ff79cc 100644
--- a/testapp/yaksh_app/templates/yaksh_app/register.html
+++ b/yaksh/templates/yaksh/register.html
diff --git a/testapp/yaksh_app/templates/yaksh_app/results_user.html b/yaksh/templates/yaksh/results_user.html
index fa8284e..0f35c0d 100644
--- a/testapp/yaksh_app/templates/yaksh_app/results_user.html
+++ b/yaksh/templates/yaksh/results_user.html
@@ -4,7 +4,7 @@
{% block subtitle %}Results{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/question_quiz.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/show_quiz.html b/yaksh/templates/yaksh/show_quiz.html
index a3c1c44..2cd4e11 100644
--- a/testapp/yaksh_app/templates/yaksh_app/show_quiz.html
+++ b/yaksh/templates/yaksh/show_quiz.html
@@ -3,7 +3,7 @@
{% block title %} Quiz List {% endblock title %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/show_quiz.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/show_quiz.js"></script>
{% endblock %}
{% block subtitle %} Quiz List {% endblock %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/showquestionpapers.html b/yaksh/templates/yaksh/showquestionpapers.html
index 2a04717..e705ce7 100644
--- a/testapp/yaksh_app/templates/yaksh_app/showquestionpapers.html
+++ b/yaksh/templates/yaksh/showquestionpapers.html
@@ -4,7 +4,7 @@
{% block subtitle %}List of Question Papers {% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/show_question.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/show_question.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/showquestions.html b/yaksh/templates/yaksh/showquestions.html
index 0c8f9a4..6222d6d 100644
--- a/testapp/yaksh_app/templates/yaksh_app/showquestions.html
+++ b/yaksh/templates/yaksh/showquestions.html
@@ -4,9 +4,9 @@
{% block subtitle %}List of Questions {% endblock %}
{% block script %}
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/min.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/show_question.js"></script>
-<script src="{{ URL_ROOT }}/static/yaksh_app/js/question_filter.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/min.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/show_question.js"></script>
+<script src="{{ URL_ROOT }}/static/yaksh/js/question_filter.js"></script>
{% endblock %}
{% block manage %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/showusers.html b/yaksh/templates/yaksh/showusers.html
index 7b2bb6d..ae91076 100644
--- a/testapp/yaksh_app/templates/yaksh_app/showusers.html
+++ b/yaksh/templates/yaksh/showusers.html
@@ -6,7 +6,7 @@ List of Users
{% endblock %}
{% block css %}
-<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh_app/css/showusers.css" type="text/css" />
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/showusers.css" type="text/css" />
{% endblock css %}
diff --git a/testapp/yaksh_app/templates/yaksh_app/user_data.html b/yaksh/templates/yaksh/user_data.html
index 61a3a97..61a3a97 100644
--- a/testapp/yaksh_app/templates/yaksh_app/user_data.html
+++ b/yaksh/templates/yaksh/user_data.html
diff --git a/testapp/yaksh_app/tests.py b/yaksh/tests.py
index fd6f6a9..77ac56f 100644
--- a/testapp/yaksh_app/tests.py
+++ b/yaksh/tests.py
@@ -1,5 +1,5 @@
from django.utils import unittest
-from testapp.yaksh_app.models import User, Profile, Question, Quiz, QuestionPaper,\
+from yaksh.models import User, Profile, Question, Quiz, QuestionPaper,\
QuestionSet, AnswerPaper, Answer, TestCase
import datetime, json
diff --git a/testapp/yaksh_app/urls.py b/yaksh/urls.py
index d096a61..a9f7a98 100644
--- a/testapp/yaksh_app/urls.py
+++ b/yaksh/urls.py
@@ -1,6 +1,6 @@
from django.conf.urls import patterns, url
-urlpatterns = patterns('testapp.yaksh_app.views',
+urlpatterns = patterns('yaksh.views',
url(r'^$', 'index'),
url(r'^login/$', 'user_login'),
url(r'^quizzes/$', 'quizlist_user'),
diff --git a/testapp/yaksh_app/views.py b/yaksh/views.py
index f6666e6..41ce1bb 100644
--- a/testapp/yaksh_app/views.py
+++ b/yaksh/views.py
@@ -16,14 +16,14 @@ from taggit.models import Tag
from itertools import chain
import json
# Local imports.
-from testapp.yaksh_app.models import Quiz, Question, QuestionPaper, QuestionSet
-from testapp.yaksh_app.models import Profile, Answer, AnswerPaper, User, TestCase
-from testapp.yaksh_app.forms import UserRegisterForm, UserLoginForm, QuizForm,\
+from yaksh.models import Quiz, Question, QuestionPaper, QuestionSet
+from yaksh.models import Profile, Answer, AnswerPaper, User, TestCase
+from yaksh.forms import UserRegisterForm, UserLoginForm, QuizForm,\
QuestionForm, RandomQuestionForm, TestCaseFormSet,\
QuestionFilterForm
-from testapp.yaksh_app.xmlrpc_clients import code_server
+from yaksh.xmlrpc_clients import code_server
from settings import URL_ROOT
-from testapp.yaksh_app.models import AssignmentUpload
+from yaksh.models import AssignmentUpload
# The directory where user data can be saved.
OUTPUT_DIR = abspath(join(dirname(__file__), 'output'))
@@ -128,11 +128,11 @@ def user_register(request):
login(request, new_user)
return my_redirect("/exam/start/")
else:
- return my_render_to_response('yaksh_app/register.html', {'form': form},
+ return my_render_to_response('yaksh/register.html', {'form': form},
context_instance=ci)
else:
form = UserRegisterForm()
- return my_render_to_response('yaksh_app/register.html', {'form': form},
+ return my_render_to_response('yaksh/register.html', {'form': form},
context_instance=ci)
@@ -141,23 +141,28 @@ def quizlist_user(request):
user = request.user
avail_quizzes = list(QuestionPaper.objects.filter(quiz__active=True))
user_answerpapers = AnswerPaper.objects.filter(user=user)
- quizzes_taken = user_answerpapers
pre_requisites = []
- context = {}
+ enabled_quizzes = []
+ disabled_quizzes = []
+ unexpired_quizzes = []
- if 'cannot_attempt' in request.GET:
- context['cannot_attempt'] = True
+ for paper in avail_quizzes:
+ quiz_enable_time = paper.quiz.start_date_time
+ quiz_disable_time = paper.quiz.end_date_time
+ if quiz_enable_time <= datetime.datetime.now() <= quiz_disable_time:
+ unexpired_quizzes.append(paper)
- if user_answerpapers.count() == 0:
- context['quizzes'] = avail_quizzes
- context['user'] = user
- context['quizzes_taken'] = None
- return my_render_to_response("yaksh_app/quizzes_user.html", context)
+ cannot_attempt = True if 'cannot_attempt' in request.GET else False
+ quizzes_taken = None if user_answerpapers.count() == 0 else user_answerpapers
- context['quizzes'] = avail_quizzes
- context['user'] = user
- context['quizzes_taken'] = quizzes_taken
- return my_render_to_response("yaksh_app/quizzes_user.html", context)
+ context = {'cannot_attempt': cannot_attempt,
+ 'quizzes': avail_quizzes,
+ 'user': user,
+ 'quizzes_taken': quizzes_taken,
+ 'unexpired_quizzes': unexpired_quizzes
+ }
+
+ return my_render_to_response("yaksh/quizzes_user.html", context)
def intro(request, questionpaper_id):
@@ -167,6 +172,12 @@ def intro(request, questionpaper_id):
quest_paper = QuestionPaper.objects.get(id=questionpaper_id)
attempt_number = quest_paper.quiz.attempts_allowed
time_lag = quest_paper.quiz.time_between_attempts
+ quiz_enable_time = quest_paper.quiz.start_date_time
+ quiz_disable_time = quest_paper.quiz.end_date_time
+
+ quiz_expired = False if quiz_enable_time <= datetime.datetime.now() \
+ <= quiz_disable_time else True
+
if quest_paper.quiz.prerequisite:
try:
pre_quest = QuestionPaper.objects.get(
@@ -185,27 +196,11 @@ def intro(request, questionpaper_id):
attempted_papers = AnswerPaper.objects.filter(question_paper=quest_paper,
user=user)
already_attempted = attempted_papers.count()
- if already_attempted == 0:
- context = {'user': user, 'paper_id': questionpaper_id,\
- 'attempt_num': already_attempted + 1}
- return my_render_to_response('yaksh_app/intro.html', context,
- context_instance=ci)
-
- if already_attempted == attempt_number:
- inprogress, previous_attempt = _check_previous_attempt(attempted_papers,
- already_attempted)
- if inprogress:
- return show_question(request,
- previous_attempt.current_question(),
- previous_attempt.attempt_number,
- previous_attempt.question_paper.id)
- else:
- return my_redirect("/exam/quizzes")
-
+ inprogress, previous_attempt, next_attempt = _check_previous_attempt(attempted_papers,
+ already_attempted,
+ attempt_number)
- if already_attempted < attempt_number or attempt_number < 0:
- inprogress, previous_attempt = _check_previous_attempt(attempted_papers,
- already_attempted)
+ if previous_attempt:
if inprogress:
return show_question(request,
previous_attempt.current_question(),
@@ -213,30 +208,51 @@ def intro(request, questionpaper_id):
previous_attempt.question_paper.id)
days_after_attempt = (datetime.datetime.today() - \
previous_attempt.start_time).days
- if days_after_attempt >= time_lag:
- context = {'user': user, 'paper_id': questionpaper_id,\
- 'attempt_num': already_attempted + 1}
- return my_render_to_response('yaksh_app/intro.html', context,
- context_instance=ci)
+
+ if next_attempt:
+ if days_after_attempt >= time_lag:
+ context = {'user': user,
+ 'paper_id': questionpaper_id,
+ 'attempt_num': already_attempted + 1,
+ 'enable_quiz_time': quiz_enable_time,
+ 'disable_quiz_time': quiz_disable_time,
+ 'quiz_expired': quiz_expired
+ }
+ return my_render_to_response('yaksh/intro.html', context,
+ context_instance=ci)
else:
return my_redirect("/exam/quizzes/")
+
else:
- return my_redirect("/exam/quizzes/")
-
-
-def _check_previous_attempt(attempted_papers, already_attempted):
- previous_attempt = attempted_papers[already_attempted-1]
- previous_attempt_day = previous_attempt.start_time
- today = datetime.datetime.today()
- if previous_attempt.status == 'inprogress':
- end_time = previous_attempt.end_time
- quiz_time = previous_attempt.question_paper.quiz.duration*60
- if quiz_time > (today-previous_attempt_day).seconds:
- return True, previous_attempt
- else:
- return False, previous_attempt
+ context = {'user': user,
+ 'paper_id': questionpaper_id,
+ 'attempt_num': already_attempted + 1,
+ 'enable_quiz_time': quiz_enable_time,
+ 'disable_quiz_time': quiz_disable_time,
+ 'quiz_expired': quiz_expired
+ }
+ return my_render_to_response('yaksh/intro.html', context,
+ context_instance=ci)
+
+
+def _check_previous_attempt(attempted_papers, already_attempted, attempt_number):
+ next_attempt = False if already_attempted == attempt_number else True
+ if already_attempted == 0:
+ return False, None, next_attempt
else:
- return False, previous_attempt
+ previous_attempt = attempted_papers[already_attempted-1]
+ previous_attempt_day = previous_attempt.start_time
+ today = datetime.datetime.today()
+ if previous_attempt.status == 'inprogress':
+ end_time = previous_attempt.end_time
+ quiz_time = previous_attempt.question_paper.quiz.duration*60
+ if quiz_time > (today-previous_attempt_day).seconds:
+ return True, previous_attempt, next_attempt
+ else:
+ return False, previous_attempt, next_attempt
+ else:
+ return False, previous_attempt, next_attempt
+
def results_user(request):
"""Show list of Results of Quizzes that is taken by logged-in user."""
@@ -251,7 +267,7 @@ def results_user(request):
max_marks, percentage
quiz_marks.append(temp)
context = {'papers': quiz_marks}
- return my_render_to_response("yaksh_app/results_user.html", context)
+ return my_render_to_response("yaksh/results_user.html", context)
def edit_quiz(request):
@@ -262,6 +278,9 @@ def edit_quiz(request):
raise Http404('You are not allowed to view this page!')
quiz_list = request.POST.getlist('quizzes')
start_date = request.POST.getlist('start_date')
+ start_time = request.POST.getlist('start_time')
+ end_date = request.POST.getlist('end_date')
+ end_time = request.POST.getlist('end_time')
duration = request.POST.getlist('duration')
active = request.POST.getlist('active')
description = request.POST.getlist('description')
@@ -271,7 +290,10 @@ def edit_quiz(request):
for j, quiz_id in enumerate(quiz_list):
quiz = Quiz.objects.get(id=quiz_id)
- quiz.start_date = start_date[j]
+ quiz.start_date_time = datetime.datetime.combine(start_date[j],
+ start_time[j])
+ quiz.end_date_time = datetime.datetime.combine(end_date[j],
+ end_time[j])
quiz.duration = duration[j]
quiz.active = active[j]
quiz.description = description[j]
@@ -353,14 +375,14 @@ def add_question(request, question_id=None):
if test_case_formset.is_valid():
test_case_formset.save()
else:
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
return my_redirect("/exam/manage/questions")
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
@@ -394,21 +416,21 @@ def add_question(request, question_id=None):
for i in test_case_instance:
i.save()
else:
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
return my_redirect("/exam/manage/questions")
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
else:
test_case_formset = add_or_delete_test_form(request.POST, form.save(commit=False))
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
@@ -418,7 +440,7 @@ def add_question(request, question_id=None):
if question_id is None:
form = QuestionForm()
test_case_formset = TestCaseFormSet(prefix='test', instance=Question())
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
@@ -447,7 +469,7 @@ def add_question(request, question_id=None):
test_case_formset = TestCaseFormSet(prefix='test',
instance=d)
- return my_render_to_response('yaksh_app/add_question.html',
+ return my_render_to_response('yaksh/add_question.html',
{'form': form,
'formset': test_case_formset},
context_instance=ci)
@@ -471,7 +493,12 @@ def add_quiz(request, quiz_id=None):
return my_redirect("/exam/manage/designquestionpaper")
else:
d = Quiz.objects.get(id=quiz_id)
- d.start_date = form['start_date'].data
+ sd = datetime.datetime.strptime(form['start_date'].data, '%Y-%m-%d').date()
+ st = datetime.datetime.strptime(form['start_time'].data, "%H:%M:%S").time()
+ ed = datetime.datetime.strptime(form['end_date'].data, '%Y-%m-%d').date()
+ et = datetime.datetime.strptime(form['end_time'].data, "%H:%M:%S").time()
+ d.start_date_time = datetime.datetime.combine(sd, st)
+ d.end_date_time = datetime.datetime.combine(ed, et)
d.duration = form['duration'].data
d.active = form['active'].data
d.description = form['description'].data
@@ -484,19 +511,22 @@ def add_quiz(request, quiz_id=None):
quiz = Quiz.objects.get(id=quiz_id)
return my_redirect("/exam/manage/showquiz")
else:
- return my_render_to_response('yaksh_app/add_quiz.html',
+ return my_render_to_response('yaksh/add_quiz.html',
{'form': form},
context_instance=ci)
else:
if quiz_id is None:
form = QuizForm()
- return my_render_to_response('yaksh_app/add_quiz.html',
+ return my_render_to_response('yaksh/add_quiz.html',
{'form': form},
context_instance=ci)
else:
d = Quiz.objects.get(id=quiz_id)
form = QuizForm()
- form.initial['start_date'] = d.start_date
+ form.initial['start_date'] = d.start_date_time.date()
+ form.initial['start_time'] = d.start_date_time.time()
+ form.initial['end_date'] = d.end_date_time.date()
+ form.initial['end_time'] = d.end_date_time.time()
form.initial['duration'] = d.duration
form.initial['description'] = d.description
form.initial['active'] = d.active
@@ -505,7 +535,7 @@ def add_quiz(request, quiz_id=None):
form.initial['prerequisite'] = d.prerequisite_id
form.initial['attempts_allowed'] = d.attempts_allowed
form.initial['time_between_attempts'] = d.time_between_attempts
- return my_render_to_response('yaksh_app/add_quiz.html',
+ return my_render_to_response('yaksh/add_quiz.html',
{'form': form},
context_instance=ci)
@@ -527,19 +557,19 @@ def show_all_questionpapers(request, questionpaper_id=None):
q_paper.questions.remove(Question.objects.get(id=i))
question_paper = QuestionPaper.objects.all()
context = {'papers': question_paper}
- return my_render_to_response('yaksh_app/showquestionpapers.html', context,
+ return my_render_to_response('yaksh/showquestionpapers.html', context,
context_instance=ci)
if questionpaper_id is None:
qu_papers = QuestionPaper.objects.all()
context = {'papers': qu_papers}
- return my_render_to_response('yaksh_app/showquestionpapers.html', context,
+ return my_render_to_response('yaksh/showquestionpapers.html', context,
context_instance=ci)
else:
qu_papers = QuestionPaper.objects.get(id=questionpaper_id)
quiz = qu_papers.quiz
questions = qu_papers.questions.all()
context = {'papers': {'quiz': quiz, 'questions': questions}}
- return my_render_to_response('yaksh_app/editquestionpaper.html', context,
+ return my_render_to_response('yaksh/editquestionpaper.html', context,
context_instance=ci)
@@ -585,12 +615,12 @@ def automatic_questionpaper(request, questionpaper_id=None):
'tags': tags,
'msg': msg}}
return my_render_to_response(
- 'yaksh_app/automatic_questionpaper.html', context,
+ 'yaksh/automatic_questionpaper.html', context,
context_instance=ci)
else:
tags = Tag.objects.all()
context = {'data': {'tags': tags}}
- return my_render_to_response('yaksh_app/automatic_questionpaper.html',
+ return my_render_to_response('yaksh/automatic_questionpaper.html',
context, context_instance=ci)
else:
@@ -607,7 +637,7 @@ def automatic_questionpaper(request, questionpaper_id=None):
for quest in questions:
q = Question.objects.get(id=quest)
quest_paper.questions.add(q)
- return my_redirect('/yaksh_app/manage/showquiz')
+ return my_redirect('/yaksh/manage/showquiz')
else:
no_questions = int(request.POST.get('num_questions'))
fetched_questions = fetch_questions(request)
@@ -625,12 +655,12 @@ def automatic_questionpaper(request, questionpaper_id=None):
'tags': tags,
'msg': msg}}
return my_render_to_response(
- 'yaksh_app/automatic_questionpaper.html', context,
+ 'yaksh/automatic_questionpaper.html', context,
context_instance=ci)
else:
tags = Tag.objects.all()
context = {'data': {'tags': tags}}
- return my_render_to_response('yaksh_app/automatic_questionpaper.html',
+ return my_render_to_response('yaksh/automatic_questionpaper.html',
context, context_instance=ci)
@@ -666,13 +696,13 @@ def manual_questionpaper(request, questionpaper_id=None):
tags = Tag.objects.all()
context = {'data': {'questions': fetched_questions,
'tags': tags, 'msg': msg}}
- return my_render_to_response('yaksh_app/manual_questionpaper.html',
+ return my_render_to_response('yaksh/manual_questionpaper.html',
context,
context_instance=ci)
else:
tags = Tag.objects.all()
context = {'data': {'tags': tags}}
- return my_render_to_response('yaksh_app/manual_questionpaper.html',
+ return my_render_to_response('yaksh/manual_questionpaper.html',
context, context_instance=ci)
else:
@@ -699,13 +729,13 @@ def manual_questionpaper(request, questionpaper_id=None):
tags = Tag.objects.all()
context = {'data': {'questions': fetched_questions,
'tags': tags, 'msg': msg}}
- return my_render_to_response('yaksh_app/manual_questionpaper.html',
+ return my_render_to_response('yaksh/manual_questionpaper.html',
context,
context_instance=ci)
else:
tags = Tag.objects.all()
context = {'data': {'tags': tags}}
- return my_render_to_response('yaksh_app/manual_questionpaper.html',
+ return my_render_to_response('yaksh/manual_questionpaper.html',
context, context_instance=ci)
@@ -749,12 +779,12 @@ def user_login(request):
return my_redirect('/exam/login/')
else:
context = {"form": form}
- return my_render_to_response('yaksh_app/login.html', context,
+ return my_render_to_response('yaksh/login.html', context,
context_instance=ci)
else:
form = UserLoginForm()
context = {"form": form}
- return my_render_to_response('yaksh_app/login.html', context,
+ return my_render_to_response('yaksh/login.html', context,
context_instance=ci)
@@ -792,7 +822,6 @@ def start(request, attempt_num=None, questionpaper_id=None):
user_dir = get_user_dir(user)
return start(request, attempt_num, questionpaper_id)
-
def get_questions(paper):
'''
Takes answerpaper as an argument. Returns the total questions as
@@ -857,7 +886,7 @@ def question(request, q_id, attempt_num, questionpaper_id, success_msg=None):
if skipped_answer:
context['last_attempt'] = skipped_answer[0].answer
ci = RequestContext(request)
- return my_render_to_response('yaksh_app/question.html', context,
+ return my_render_to_response('yaksh/question.html', context,
context_instance=ci)
@@ -990,7 +1019,7 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
'to_attempt': to_attempt, 'submitted': submitted}
ci = RequestContext(request)
- return my_render_to_response('yaksh_app/question.html', context,
+ return my_render_to_response('yaksh/question.html', context,
context_instance=ci)
else:
if time_left <= 0:
@@ -1008,7 +1037,7 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
'to_attempt': to_attempt, 'submitted': submitted}
ci = RequestContext(request)
- return my_render_to_response('yaksh_app/question.html', context,
+ return my_render_to_response('yaksh/question.html', context,
context_instance=ci)
else:
next_q = paper.completed_question(question.id)
@@ -1076,7 +1105,7 @@ def quit(request, attempt_num=None, questionpaper_id=None):
context = {'id': questionpaper_id, 'attempt_num': attempt_num,
'unattempted': unattempted_questions,
'submitted': submitted_questions}
- return my_render_to_response('yaksh_app/quit.html', context,
+ return my_render_to_response('yaksh/quit.html', context,
context_instance=RequestContext(request))
@@ -1088,7 +1117,7 @@ def complete(request, reason=None, attempt_num=None, questionpaper_id=None):
logout(request)
message = reason or "You are successfully logged out."
context = {'message': message}
- return my_render_to_response('yaksh_app/complete.html', context)
+ return my_render_to_response('yaksh/complete.html', context)
else:
unattempted_questions, submitted_questions = get_question_labels(request,
attempt_num, questionpaper_id)
@@ -1110,13 +1139,13 @@ def complete(request, reason=None, attempt_num=None, questionpaper_id=None):
Thank You !",
'unattempted': unattempted_questions,
'submitted': submitted_questions}
- return my_render_to_response('yaksh_app/complete.html', context)
+ return my_render_to_response('yaksh/complete.html', context)
else:
message = reason or "You are successfully logged out"
context = {'message': message,
'unattempted': unattempted_questions,
'submitted': submitted_questions}
- return my_render_to_response('yaksh_app/complete.html', context)
+ return my_render_to_response('yaksh/complete.html', context)
no = False
message = reason or 'The quiz has been completed. Thank you.'
if user.groups.filter(name='moderator').count() > 0:
@@ -1146,7 +1175,7 @@ def monitor(request, questionpaper_id=None):
context = {'papers': [],
'quiz': None,
'quizzes': q_paper}
- return my_render_to_response('yaksh_app/monitor.html', context,
+ return my_render_to_response('yaksh/monitor.html', context,
context_instance=ci)
# quiz_id is not None.
try:
@@ -1159,7 +1188,7 @@ def monitor(request, questionpaper_id=None):
total=Sum('answers__marks')).order_by('-total')
context = {'papers': papers, 'quiz': q_paper, 'quizzes': None}
- return my_render_to_response('yaksh_app/monitor.html', context,
+ return my_render_to_response('yaksh/monitor.html', context,
context_instance=ci)
@@ -1191,7 +1220,7 @@ def show_all_users(request):
user = User.objects.filter(username__contains="")
questionpaper = AnswerPaper.objects.all()
context = {'question': questionpaper}
- return my_render_to_response('yaksh_app/showusers.html', context,
+ return my_render_to_response('yaksh/showusers.html', context,
context_instance=RequestContext(request))
@@ -1212,7 +1241,7 @@ def show_all_quiz(request):
context = {'papers': [],
'quiz': None,
'quizzes': quizzes}
- return my_render_to_response('yaksh_app/show_quiz.html', context,
+ return my_render_to_response('yaksh/show_quiz.html', context,
context_instance=ci)
else:
for i in data:
@@ -1221,7 +1250,7 @@ def show_all_quiz(request):
context = {'papers': [],
'quiz': None,
'quizzes': quizzes}
- return my_render_to_response('yaksh_app/show_quiz.html', context,
+ return my_render_to_response('yaksh/show_quiz.html', context,
context_instance=ci)
elif request.method == 'POST' and request.POST.get('edit') == 'edit':
@@ -1230,7 +1259,10 @@ def show_all_quiz(request):
for j in data:
d = Quiz.objects.get(id=j)
form = QuizForm()
- form.initial['start_date'] = d.start_date
+ form.initial['start_date'] = d.start_date_time.date()
+ form.initial['start_time'] = d.start_date_time.time()
+ form.initial['end_date'] = d.end_date_time.date()
+ form.initial['end_time'] = d.end_date_time.time()
form.initial['duration'] = d.duration
form.initial['active'] = d.active
form.initial['description'] = d.description
@@ -1238,7 +1270,7 @@ def show_all_quiz(request):
form.initial['language'] = d.language
form.initial['prerequisite'] = d.prerequisite_id
forms.append(form)
- return my_render_to_response('yaksh_app/edit_quiz.html',
+ return my_render_to_response('yaksh/edit_quiz.html',
{'forms': forms, 'data': data},
context_instance=ci)
else:
@@ -1246,7 +1278,7 @@ def show_all_quiz(request):
context = {'papers': [],
'quiz': None,
'quizzes': quizzes}
- return my_render_to_response('yaksh_app/show_quiz.html', context,
+ return my_render_to_response('yaksh/show_quiz.html', context,
context_instance=ci)
@@ -1270,7 +1302,7 @@ def ajax_questions_filter(request):
questions = list(Question.objects.filter(**filter_dict))
- return my_render_to_response('exam/ajax_question_filter.html',
+ return my_render_to_response('yaksh/ajax_question_filter.html',
{'questions': questions})
@@ -1292,7 +1324,7 @@ def show_all_questions(request):
'questions': questions,
'form': form
}
- return my_render_to_response('exam/showquestions.html', context,
+ return my_render_to_response('yaksh/showquestions.html', context,
context_instance=ci)
else:
for i in data:
@@ -1304,7 +1336,7 @@ def show_all_questions(request):
'questions': questions,
'form': form
}
- return my_render_to_response('exam/showquestions.html', context,
+ return my_render_to_response('yaksh/showquestions.html', context,
context_instance=ci)
elif request.method == 'POST' and request.POST.get('edit') == 'edit':
data = request.POST.getlist('question')
@@ -1337,7 +1369,7 @@ def show_all_questions(request):
formsets.append(test_case_formset)
data_list = zip(forms, formsets)
- return my_render_to_response('yaksh_app/edit_question.html',
+ return my_render_to_response('yaksh/edit_question.html',
{'data': data,
'data_list': data_list},
context_instance=ci)
@@ -1349,7 +1381,7 @@ def show_all_questions(request):
'questions': questions,
'form': form
}
- return my_render_to_response('exam/showquestions.html', context,
+ return my_render_to_response('yaksh/showquestions.html', context,
context_instance=ci)
@@ -1363,7 +1395,7 @@ def user_data(request, username):
data = get_user_data(username)
context = {'data': data}
- return my_render_to_response('yaksh_app/user_data.html', context,
+ return my_render_to_response('yaksh/user_data.html', context,
context_instance=RequestContext(request))
@@ -1390,11 +1422,11 @@ def grade_user(request, username):
paper.save()
context = {'data': data}
- return my_render_to_response('yaksh_app/user_data.html', context,
+ return my_render_to_response('yaksh/user_data.html', context,
context_instance=ci)
else:
context = {'data': data}
- return my_render_to_response('yaksh_app/grade_user.html', context,
+ return my_render_to_response('yaksh/grade_user.html', context,
context_instance=ci)
@@ -1407,7 +1439,7 @@ def ajax_questionpaper(request, query):
question_type = request.POST.get('question_type')
questions = Question.objects.filter(type=question_type)
marks = questions.values_list('points').distinct()
- return my_render_to_response('yaksh_app/ajax_marks.html', {'marks': marks})
+ return my_render_to_response('yaksh/ajax_marks.html', {'marks': marks})
elif query == 'questions':
question_type = request.POST['question_type']
marks_selected = request.POST['marks']
@@ -1420,7 +1452,7 @@ def ajax_questionpaper(request, query):
points=marks_selected))
questions = [question for question in questions \
if not str(question.id) in question_list]
- return my_render_to_response('yaksh_app/ajax_questions.html',
+ return my_render_to_response('yaksh/ajax_questions.html',
{'questions': questions})
@@ -1466,5 +1498,5 @@ def design_questionpaper(request):
else:
form = RandomQuestionForm()
context = {'form': form}
- return my_render_to_response('yaksh_app/design_questionpaper.html',
+ return my_render_to_response('yaksh/design_questionpaper.html',
context, context_instance=ci)
diff --git a/testapp/yaksh_app/xmlrpc_clients.py b/yaksh/xmlrpc_clients.py
index 3a3c0c6..3a3c0c6 100644
--- a/testapp/yaksh_app/xmlrpc_clients.py
+++ b/yaksh/xmlrpc_clients.py