summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJayaram R Pai2014-09-11 00:02:57 +0530
committerJayaram R Pai2014-09-11 00:02:57 +0530
commit961133f4a76fa5e56c74f3521a96109d23855e5a (patch)
tree4ffb9fbba127a8fb74e46be305ca32421803f5b4
parent523bc7d9c6e6632f51ad98534806a937b3600557 (diff)
downloadscilab-on-cloud-961133f4a76fa5e56c74f3521a96109d23855e5a.tar.gz
scilab-on-cloud-961133f4a76fa5e56c74f3521a96109d23855e5a.tar.bz2
scilab-on-cloud-961133f4a76fa5e56c74f3521a96109d23855e5a.zip
added report bug form
-rw-r--r--static/website/css/main.css27
-rw-r--r--static/website/js/cloud.js19
-rw-r--r--static/website/templates/bug-form.html27
-rw-r--r--static/website/templates/index.html5
-rw-r--r--website/ajax.py40
-rw-r--r--website/forms.py37
-rw-r--r--website/views.py1
7 files changed, 153 insertions, 3 deletions
diff --git a/static/website/css/main.css b/static/website/css/main.css
index aa27771..2447338 100644
--- a/static/website/css/main.css
+++ b/static/website/css/main.css
@@ -134,7 +134,8 @@ body, html {
display: block;
}
#plotbox-wrapper,
-#databox-wrapper {
+#databox-wrapper,
+#bug-form-wrapper {
padding: 35px;
background: #ffffff;
-webkit-box-shadow: 0 0 10px #ffffff;
@@ -170,3 +171,27 @@ table td {
padding: 5px 10px;
border: 1px solid #cccccc;
}
+.error {
+ border: 2px solid tomato !important;
+}
+#bug-form {
+ width: 400px;
+}
+#bug-form .wrapper {
+ margin-bottom: 15px;
+}
+#bug-form input[type=text],
+#bug-form select,
+#bug-form textarea{
+ width: 80%;
+ max-width: none;
+ margin-bottom: 0;
+}
+#bug-form #id_email_wrapper {
+ display: none;
+}
+#bug-form #non-field-errors .error-message{
+ border: 1px solid tomato;
+ width: 80%;
+ padding: 5px;
+}
diff --git a/static/website/js/cloud.js b/static/website/js/cloud.js
index 6ec1ba5..33dd209 100644
--- a/static/website/js/cloud.js
+++ b/static/website/js/cloud.js
@@ -177,4 +177,23 @@ $(document).ready(function() {
}, {key: $(this).data("key")});
e.preventDefault();
});
+
+
+ /* Bug form handling */
+ $(document).on("click", "#bug", function(e) {
+ Dajaxice.website.bug_form(function(data){
+ Dajax.process(data);
+ $("#bug-form-wrapper").lightbox_me({centered: false});
+ });
+ e.preventDefault();
+ });
+
+ $(document).on("click", "#bug-form-submit", function(e){
+ Dajaxice.website.bug_form_submit(Dajax.process, {form: $("#bug-form").serialize(true)});
+ e.preventDefault();
+ });
+
+ $(document).on("click", "#bug-form #id_notify", function() {
+ $("#id_email_wrapper").toggle(this.checked);
+ });
});
diff --git a/static/website/templates/bug-form.html b/static/website/templates/bug-form.html
new file mode 100644
index 0000000..d27911a
--- /dev/null
+++ b/static/website/templates/bug-form.html
@@ -0,0 +1,27 @@
+<form id="bug-form" action="" method="POST" accept-charset="utf-8"> {% csrf_token %}
+ {{ form.example }}
+ <div id="non-field-errors">
+ </div>
+ <div id="id_issue_wrapper" class="wrapper">
+ <label>Type of issue:</label>
+ {{ form.issue }}
+ </div>
+
+ <div id="id_description_wrapper" class="wrapper">
+ <label>Description:</label>
+ {{ form.description }}
+ </div>
+
+ <div id="id_notify_wrapper" class="wrapper">
+ <label>{{ form.notify }} I want to be notified.</label>
+ </div>
+
+ <div id="id_email_wrapper" class="wrapper">
+ <span id="email-wrapper">
+ {{ form.email.errors }}
+ <label>Email:</label>
+ {{ form.email }}
+ </span>
+ </div>
+ <input type="submit" id="bug-form-submit">
+</form>
diff --git a/static/website/templates/index.html b/static/website/templates/index.html
index bf15ea4..88abbf8 100644
--- a/static/website/templates/index.html
+++ b/static/website/templates/index.html
@@ -91,7 +91,7 @@
<textarea id="result"></textarea>
</div> <!-- /#output -->
<a id="bug" class="button">Report bug / Give Feedback</a>
-
+
<div id="credits">
<small>
Disclaimer: Scilab is a trademark of Inria
@@ -113,6 +113,9 @@
<div id="databox"></div>
</div> <!-- /#databox-wrapper -->
+ <div id="bug-form-wrapper">
+ </div> <!-- /#databox-wrapper -->
+
<script src="{% static 'website/js/jquery-1.10.2.min.js' %}"></script>
<script src="{% static '/static/dajax/jquery.dajax.core.js' %}"></script>
<script src="{% static 'website/js/codemirror.js'%}"></script>
diff --git a/website/ajax.py b/website/ajax.py
index 0e8fd9a..4d57740 100644
--- a/website/ajax.py
+++ b/website/ajax.py
@@ -1,6 +1,7 @@
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
@@ -14,6 +15,7 @@ from website.models import TextbookCompanionPreference,\
TextbookCompanionProposal, TextbookCompanionChapter,\
TextbookCompanionExample, TextbookCompanionExampleFiles,\
TextbookCompanionExampleDependency, TextbookCompanionDependencyFiles
+from website.forms import BugForm
@dajaxice_register
def books(request, category_id):
@@ -102,3 +104,41 @@ def node(request, key):
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()
diff --git a/website/forms.py b/website/forms.py
new file mode 100644
index 0000000..0fdd426
--- /dev/null
+++ b/website/forms.py
@@ -0,0 +1,37 @@
+from django import forms
+from django.core.validators import validate_email
+
+issues = (
+ ('', '-- Select Type of issue --'),
+ (1, 'Blank Code / Incorrect code'),
+ (2, 'Output error'),
+ (3, 'Execution error'),
+ (4, 'Missing example(s)'),
+ (6, 'Blank output'),
+ (7, 'Any other / General'),
+)
+
+
+class BugForm(forms.Form):
+ example = forms.CharField(widget=forms.HiddenInput(), required=False)
+ issue = forms.CharField(widget=forms.Select(choices=issues))
+ description = forms.CharField(widget=forms.Textarea)
+ notify = forms.BooleanField(required=False)
+ email = forms.CharField(required=False)
+
+ def clean_email(self):
+ email = self.cleaned_data.get('email', None)
+ notify = self.cleaned_data.get('notify', None)
+ if notify and not email:
+ raise forms.ValidationError('Email id is required if you want to be notified.')
+ elif notify:
+ validate_email(email)
+
+ def clean(self):
+ issue = self.cleaned_data.get('issue', None)
+ example = self.cleaned_data.get('example', None)
+ if (issue and int(issue) != 7) and (not example):
+ raise forms.ValidationError("""
+ Please select book, chapter and example.
+ Or select the *Any other/General* issue type.
+ """)
diff --git a/website/views.py b/website/views.py
index f06ce27..b99d0c4 100644
--- a/website/views.py
+++ b/website/views.py
@@ -3,5 +3,4 @@ from django.core.context_processors import csrf
def index(request):
context = {}
- context.update(csrf(request))
return render(request, 'website/templates/index.html', context)