1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
from dajax.core import Dajax
from django.utils import simplejson
from dajaxice.decorators import dajaxice_register
from dajaxice.utils import deserialize_form
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.template.loader import render_to_string
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.db.models import Q
from website.models import TextbookCompanionPreference,\
TextbookCompanionProposal, TextbookCompanionChapter,\
TextbookCompanionExample, TextbookCompanionExampleFiles,\
TextbookCompanionExampleDependency, TextbookCompanionDependencyFiles
from website.forms import BugForm
from soc.config import UPLOADS_PATH
@dajaxice_register
def books(request, category_id):
dajax = Dajax()
context = {}
if category_id:
ids = TextbookCompanionProposal.objects.using('scilab')\
.filter(proposal_status=3).values('id')
books = TextbookCompanionPreference.objects.using('scilab')\
.filter(category=category_id).filter(approval_status=1)\
.filter(proposal_id__in=ids).order_by('book')
context = {
'books': books
}
books = render_to_string('website/templates/ajax-books.html', context)
dajax.assign('#books-wrapper', 'innerHTML', books)
return dajax.json()
@dajaxice_register
def chapters(request, book_id):
dajax = Dajax()
context = {}
if book_id:
chapters = TextbookCompanionChapter.objects.using('scilab')\
.filter(preference_id=book_id).order_by('number')
context = {
'chapters': chapters
}
chapters = render_to_string('website/templates/ajax-chapters.html', context)
dajax.assign('#chapters-wrapper', 'innerHTML', chapters)
return dajax.json()
@dajaxice_register
def examples(request, chapter_id):
dajax = Dajax()
context = {}
if chapter_id:
examples = TextbookCompanionExample.objects.using('scilab')\
.filter(chapter_id=chapter_id).order_by('number')
context = {
'examples': examples
}
examples = render_to_string('website/templates/ajax-examples.html', context)
dajax.assign('#examples-wrapper', 'innerHTML', examples)
return dajax.json()
@dajaxice_register
def code(request, example_id):
example = TextbookCompanionExampleFiles.objects.using('scilab')\
.get(example_id=example_id, filetype='S')
example_path = UPLOADS_PATH + '/' + example.filepath
f = open(example_path)
code = f.read()
f.close()
return simplejson.dumps({'code': code})
@dajaxice_register
def execute(request, token, code, book_id, chapter_id, example_id):
dependency_exists = TextbookCompanionExampleDependency.objects.using('scilab')\
.filter(example_id=example_id).exists()
data = scilab_run(code, token, book_id, dependency_exists)
return simplejson.dumps(data)
@dajaxice_register
def contributor(request, book_id):
dajax = Dajax()
preference = TextbookCompanionPreference.objects.using('scilab')\
.get(id=book_id)
proposal = TextbookCompanionProposal.objects.using('scilab')\
.get(id=preference.proposal_id)
context = {
"preference": preference,
"proposal": proposal,
}
contributor = render_to_string('website/templates/ajax-contributor.html', context)
dajax.assign('#databox', 'innerHTML', contributor)
return dajax.json()
@dajaxice_register
def node(request, key):
dajax = Dajax()
data = render_to_string("website/templates/node-{0}.html".format(key))
dajax.assign('#databox', 'innerHTML', data)
return dajax.json()
@dajaxice_register
def bug_form(request):
dajax = Dajax()
context = {}
form = BugForm()
context['form'] = BugForm()
context.update(csrf(request))
form = render_to_string('website/templates/bug-form.html', context)
dajax.assign('#bug-form-wrapper', 'innerHTML', form)
return dajax.json()
@dajaxice_register
def bug_form_submit(request, form):
dajax = Dajax()
form = BugForm(deserialize_form(form))
if form.is_valid():
dajax.remove_css_class('#bug-form input', 'error')
dajax.remove_css_class('#bug-form select', 'error')
dajax.remove_css_class('#bug-form textarea', 'error')
dajax.remove('.error-message')
dajax.alert('Forms valid')
else:
dajax.remove_css_class('#bug-form input', 'error')
dajax.remove_css_class('#bug-form select', 'error')
dajax.remove_css_class('#bug-form textarea', 'error')
dajax.remove('.error-message')
for error in form.errors:
dajax.add_css_class('#id_{0}'.format(error), 'error')
for field in form:
for error in field.errors:
message = '<div class="error-message">* {0}</div>'.format(error)
dajax.append('#id_{0}_wrapper'.format(field.name), 'innerHTML', message)
# non field errors
if form.non_field_errors():
message = '<div class="error-message"><small>{0}</small></div>'.format(form.non_field_errors())
dajax.append('#non-field-errors', 'innerHTML', message)
return dajax.json()
|