added ajax request to client side
This commit is contained in:
parent
eb02b99f22
commit
6614bf8c26
9 changed files with 118 additions and 27 deletions
|
@ -1 +1 @@
|
||||||
vcpby-elearning
|
tkupek-elearning
|
|
@ -10,23 +10,7 @@
|
||||||
<ConfirmationsSetting value="0" id="Add" />
|
<ConfirmationsSetting value="0" id="Add" />
|
||||||
<ConfirmationsSetting value="0" id="Remove" />
|
<ConfirmationsSetting value="0" id="Remove" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="false" assert-keyword="true" jdk-15="true" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
<component name="masterDetails">
|
|
||||||
<states>
|
|
||||||
<state key="ProjectJDKs.UI">
|
|
||||||
<settings>
|
|
||||||
<last-edited>Python 2.7.6 (/usr/bin/python2.7)</last-edited>
|
|
||||||
<splitter-proportions>
|
|
||||||
<option name="proportions">
|
|
||||||
<list>
|
|
||||||
<option value="0.2" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</splitter-proportions>
|
|
||||||
</settings>
|
|
||||||
</state>
|
|
||||||
</states>
|
|
||||||
</component>
|
|
||||||
</project>
|
</project>
|
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from tkupek_elearning.elearning.models import Option, Setting, Question
|
from tkupek_elearning.elearning.models import Option, Setting, Question, UserAnswer, User
|
||||||
|
|
||||||
|
|
||||||
class OptionInline(admin.TabularInline):
|
class OptionInline(admin.TabularInline):
|
||||||
|
@ -13,4 +13,6 @@ class QuestionAdmin(admin.ModelAdmin):
|
||||||
]
|
]
|
||||||
|
|
||||||
admin.site.register(Question, QuestionAdmin)
|
admin.site.register(Question, QuestionAdmin)
|
||||||
admin.site.register(Setting)
|
admin.site.register(Setting),
|
||||||
|
admin.site.register(UserAnswer),
|
||||||
|
admin.site.register(User)
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models.signals import post_init, pre_init
|
||||||
|
|
||||||
|
|
||||||
class Setting(models.Model):
|
class Setting(models.Model):
|
||||||
|
@ -31,3 +34,20 @@ class Option(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.text
|
return self.text
|
||||||
|
|
||||||
|
|
||||||
|
class User(models.Model):
|
||||||
|
token = models.CharField(max_length=32, null=True)
|
||||||
|
name = models.CharField(max_length=100, null=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class UserAnswer(models.Model):
|
||||||
|
user = models.ForeignKey(User, on_delete=models.CASCADE, null=False)
|
||||||
|
questionId = models.ForeignKey(Question, on_delete=models.CASCADE, null=False)
|
||||||
|
answers = models.ForeignKey(Option, on_delete=models.CASCADE, null=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = (('user', 'questionId'),)
|
|
@ -7,3 +7,60 @@ function toggle_solution(id)
|
||||||
element.className = "show";
|
element.className = "show";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_answer(id) {
|
||||||
|
|
||||||
|
var answerRequest=new ajaxRequest()
|
||||||
|
answerRequest.onreadystatechange=function(){
|
||||||
|
if (answerRequest.readyState==4){
|
||||||
|
if (answerRequest.status==200 || window.location.href.indexOf("http")==-1){
|
||||||
|
alert(answerRequest.responseText);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
alert("An error has occured making the request");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var questionId=encodeURIComponent(id)
|
||||||
|
var token=encodeURIComponent("1ea6de64cf5a11e5ada41c6f6525891e")
|
||||||
|
var answers=encodeURIComponent(getCheckboxAnswers(id))
|
||||||
|
answerRequest.open("GET", "api?id="+questionId+"&token="+token+"&answers="+answers, true)
|
||||||
|
answerRequest.send(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCheckboxAnswers(id) {
|
||||||
|
|
||||||
|
var answers = "";
|
||||||
|
|
||||||
|
var elements = document.getElementsByName("checkbox_" + id);
|
||||||
|
for(var i = 0; i < elements.length; i++) {
|
||||||
|
if(elements[i].checked) {
|
||||||
|
answers += elements[i].value + "_";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(answers != "") {
|
||||||
|
answers = answers.substring(0, answers.length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return answers;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ajaxRequest(){
|
||||||
|
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
|
||||||
|
if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
|
||||||
|
for (var i=0; i<activexmodes.length; i++){
|
||||||
|
try{
|
||||||
|
return new ActiveXObject(activexmodes[i])
|
||||||
|
}
|
||||||
|
catch(e){
|
||||||
|
//suppress error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
|
||||||
|
return new XMLHttpRequest()
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
}
|
|
@ -27,11 +27,11 @@
|
||||||
{% for option in options %}
|
{% for option in options %}
|
||||||
|
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" name="option" value="{{ option.id }}">
|
<input name="checkbox_{{ question.id }}" type="checkbox" value="{{ option.id }}">
|
||||||
{{ option.text }}
|
{{ option.text }}
|
||||||
</label>
|
</label>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<button class="margin10" type="button" id="showSolution" onmouseup="toggle_solution({{ question.id }})">{{ settings.button_solution }}</button>
|
<button class="margin10" type="button" id="showSolution" onmousedown="get_answer({{ question.id }})" onmouseup="toggle_solution({{ question.id }})">{{ settings.button_solution }}</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<p id="explanation_{{ question.id }}" class="hide">{{ question.explanation }}</p>
|
<p id="explanation_{{ question.id }}" class="hide">{{ question.explanation }}</p>
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
|
|
||||||
from tkupek_elearning.elearning.models import Setting, Question, Option
|
from tkupek_elearning.elearning.models import Setting, Question, Option, UserAnswer, User
|
||||||
|
|
||||||
#import pdb
|
import pdb
|
||||||
|
|
||||||
def home(request):
|
def home(request):
|
||||||
|
|
||||||
|
@ -17,3 +18,29 @@ def home(request):
|
||||||
questions_options[question] = options
|
questions_options[question] = options
|
||||||
|
|
||||||
return render_to_response('index.html', {'settings': settings, 'questions_options': questions_options})
|
return render_to_response('index.html', {'settings': settings, 'questions_options': questions_options})
|
||||||
|
|
||||||
|
|
||||||
|
def getAnswer(request):
|
||||||
|
|
||||||
|
# if request.method == 'GET':
|
||||||
|
# pdb.set_trace()
|
||||||
|
# request_questionId = request.GET.get('id')
|
||||||
|
# request_answers = request.GET.get('answers')
|
||||||
|
# request_userToken = request.GET.get('user')
|
||||||
|
#
|
||||||
|
# question = Question.objects.filter(questionId=request_questionId)
|
||||||
|
# user = User.objects.filter(token=request_userToken)
|
||||||
|
#
|
||||||
|
# userAnswer = UserAnswer.objects.filter(questionId=question.id, user=user.token)
|
||||||
|
# if not userAnswer:
|
||||||
|
# userAnswer = UserAnswer()
|
||||||
|
# userAnswer.questionId = question
|
||||||
|
# userAnswer.user = user
|
||||||
|
# userAnswer.answers = ""
|
||||||
|
# userAnswer.save()
|
||||||
|
# else:
|
||||||
|
# return HttpResponse('error:alreadyAnswered');
|
||||||
|
#
|
||||||
|
# options = Option.objects.filter(question=question.id)
|
||||||
|
#
|
||||||
|
# return HttpResponse(options)
|
||||||
|
|
|
@ -20,5 +20,6 @@ import tkupek_elearning.elearning.views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^admin/', admin.site.urls),
|
url(r'^admin/', admin.site.urls),
|
||||||
url(r'start', tkupek_elearning.elearning.views.home)
|
url(r'start', tkupek_elearning.elearning.views.home),
|
||||||
|
url(r'api', tkupek_elearning.elearning.views.getAnswer)
|
||||||
]
|
]
|
Loading…
Reference in a new issue