stage 2: text field counter
authorJan Szejko <janek37@gmail.com>
Thu, 3 Jan 2019 13:27:19 +0000 (14:27 +0100)
committerJan Szejko <janek37@gmail.com>
Thu, 3 Jan 2019 13:27:19 +0000 (14:27 +0100)
edumed/settings/static.py
edumed/static/css/form.css
edumed/static/css/form.scss
stage2/forms.py
stage2/static/js/checktext.js [new file with mode: 0644]
stage2/templates/stage2/participant.html

index 19a69ca..743d593 100644 (file)
@@ -42,6 +42,7 @@ PIPELINE_JS = {
             'js/formset.js',
             'fnpdjango/annoy/annoy.js',
             'js/checkfile.js',
+            'js/checktext.js',
         ),
         'output_filename': 'compressed/base.js',
     },
index ac11db0..f08e003 100644 (file)
@@ -16,3 +16,9 @@
   padding: 0 0 0 1em;
   margin: 0;
   color: red; }
+.submit-form .counter {
+  font-size: small; }
+.submit-form .negative {
+  color: red; }
+
+/*# sourceMappingURL=form.css.map */
index 8ef87de..8860cf8 100755 (executable)
         margin: 0;
         color: red;
     }
+    .counter {
+        font-size: small;
+    }
+    .negative {
+        color: red;
+    }
 }
index 09beefe..8317504 100644 (file)
@@ -56,11 +56,12 @@ class AssignmentFieldForm(forms.Form):
         self.type = options['type']
         self.fields['assignment_id'].initial = answer.assignment.id
         max_length = options.get('max_length')
+        if options.get('widget') == 'area':
+            self.fields['value'].widget = forms.Textarea(attrs={'cols': 80, 'rows': 25})
         if max_length:
             self.fields['value'].validators.append(validators.MaxLengthValidator(int(max_length)))
             self.fields['value'].label += u' (maks. %s znaków)' % max_length
-        if options.get('widget') == 'area':
-            self.fields['value'].widget = forms.Textarea(attrs={'cols': 80, 'rows': 25})
+            self.fields['value'].widget.attrs['data-max-length'] = max_length
         if self.type == 'options':
             option_set = FieldOptionSet.objects.get(name=options['option_set'])
             self.fields['value'].widget = forms.Select(choices=option_set.choices(answer))
diff --git a/stage2/static/js/checktext.js b/stage2/static/js/checktext.js
new file mode 100644 (file)
index 0000000..d589f15
--- /dev/null
@@ -0,0 +1,14 @@
+$(function() {
+    "use strict";
+    var textarea = $("*[data-max-length]");
+    textarea.before('<p class="counter">Pozostało: <span id="count"></span></p>');
+    function updateCount(){
+        var max_chars = this.getAttribute('data-max-length');
+        var $this = $(this);
+        var remaining = max_chars - $this.val().length;
+        $("#count").text(remaining);
+        $this.prev().toggleClass('negative', remaining < 0);
+    }
+    textarea.on('input', updateCount);
+    textarea.trigger('input');
+});
index a2a1bc2..49ac2af 100644 (file)
@@ -14,7 +14,7 @@
       <h2>{{ assignment.title }} (do {{ assignment.deadline }})</h2>
     {% endif %}
     <a href="{{ assignment.content_url }}"><strong>Zobacz treść zadania</strong></a>
-    <form method="POST" action="" enctype="multipart/form-data">
+    <form method="POST" action="" enctype="multipart/form-data" class="submit-form">
       {% csrf_token %}
       {% for form, attachment in assignment.attachment_forms %}
         {{ form.assignment_id }}