diff options
author | Jayaram R Pai | 2014-09-11 00:02:57 +0530 |
---|---|---|
committer | Jayaram R Pai | 2014-09-11 00:02:57 +0530 |
commit | 961133f4a76fa5e56c74f3521a96109d23855e5a (patch) | |
tree | 4ffb9fbba127a8fb74e46be305ca32421803f5b4 | |
parent | 523bc7d9c6e6632f51ad98534806a937b3600557 (diff) | |
download | scilab-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.css | 27 | ||||
-rw-r--r-- | static/website/js/cloud.js | 19 | ||||
-rw-r--r-- | static/website/templates/bug-form.html | 27 | ||||
-rw-r--r-- | static/website/templates/index.html | 5 | ||||
-rw-r--r-- | website/ajax.py | 40 | ||||
-rw-r--r-- | website/forms.py | 37 | ||||
-rw-r--r-- | website/views.py | 1 |
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) |