javascript limit validation
authorRodney Ewing <ewing.rj@gmail.com>
Thu, 27 Jun 2013 18:18:31 +0000 (11:18 -0700)
committerRodney Ewing <ewing.rj@gmail.com>
Mon, 26 Aug 2013 13:33:30 +0000 (06:33 -0700)
mediagoblin/static/js/file_size.js [new file with mode: 0644]
mediagoblin/submit/forms.py
mediagoblin/submit/views.py
mediagoblin/templates/mediagoblin/submit/start.html

diff --git a/mediagoblin/static/js/file_size.js b/mediagoblin/static/js/file_size.js
new file mode 100644 (file)
index 0000000..2238ef8
--- /dev/null
@@ -0,0 +1,45 @@
+/**
+ * GNU MediaGoblin -- federated, autonomous media hosting
+ * Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+$(document).ready(function(){
+    var file = document.getElementById('file');
+    var uploaded = parseInt(document.getElementById('uploaded').value);
+    var upload_limit = parseInt(document.getElementById('upload_limit').value);
+    var max_file_size = parseInt(document.getElementById('max_file_size').value);
+
+    file.onchange = function() {
+        var file_size = file.files[0].size / (1024.0 * 1024);
+
+        if (file_size >= max_file_size) {
+            $('#file').after('<p id="file_size_error" class="form_field_error">Sorry, the file size is too big.</p>'); 
+        }
+        else if (document.getElementById('file_size_error')) {
+            $('#file_size_error').hide();
+        }
+
+        if (upload_limit) {
+            if ( uploaded + file_size >= upload_limit) {
+                $('#file').after('<p id="upload_limit_error" class="form_field_error">Sorry, uploading this file will put you over your upload limit.</p>');
+            }
+            else if (document.getElementById('upload_limit_error')) {
+                $('#upload_limit_error').hide();
+            console.log(file_size >= max_file_size);
+            }
+        }
+    };
+});
index 0a3b4e4da672cf6072848ca9b12d6d79e97236cb..e226464524d2e78abd663b613bfd97060d560532 100644 (file)
@@ -24,7 +24,7 @@ from mediagoblin.tools.licenses import licenses_as_choices
 
 
 def get_submit_start_form(form, **kwargs):
-    max_file_size = mg_globals.app_config.get('max_file_size', None)
+    max_file_size = kwargs.get('max_file_size')
     desc = None
     if max_file_size:
         desc = _('Max file size: {0} mb'.format(max_file_size))
@@ -50,6 +50,9 @@ def get_submit_start_form(form, **kwargs):
             _('License'),
             [wtforms.validators.Optional(),],
             choices=licenses_as_choices())
+        max_file_size = wtforms.HiddenField('')
+        upload_limit = wtforms.HiddenField('')
+        uploaded = wtforms.HiddenField('')
 
     return SubmitStartForm(form, **kwargs)
 
index d07065a6fffb1d7165e738d1bf9aaaa1324df680..3b853697c2db1a0397a85d04fa2e1a1a541076a3 100644 (file)
@@ -57,8 +57,14 @@ def submit_start(request):
         return redirect(request, "mediagoblin.user_pages.user_home",
                         user=request.user.username)
 
-    submit_form = submit_forms.get_submit_start_form(request.form,
-        license=request.user.license_preference)
+    max_file_size = mg_globals.app_config.get('max_file_size', None)
+
+    submit_form = submit_forms.get_submit_start_form(
+        request.form,
+        license=request.user.license_preference,
+        max_file_size=max_file_size,
+        upload_limit=upload_limit,
+        uploaded=user.uploaded)
 
     if request.method == 'POST' and submit_form.validate():
         if not check_file_field(request, 'file'):
@@ -108,7 +114,6 @@ def submit_start(request):
                 error = False
 
                 # Check if file size is over the limit
-                max_file_size = mg_globals.app_config.get('max_file_size', None)
                 if max_file_size and file_size >= max_file_size:
                     submit_form.file.errors.append(
                         _(u'Sorry, the file size is too big.'))
index aa390f56ad779b9504ab49f27c263e7bbe97fff2..d335d7426d46f33bf4eb221d87e2982263b7fb60 100644 (file)
 
 {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
 
+{% block mediagoblin_head %}
+  <script type="text/javascript"
+          src="{{ request.staticdirect('/js/file_size.js') }}"></script>
+{% endblock %}
+
 {% block title -%}
   {% trans %}Add your media{% endtrans %} &mdash; {{ super() }}
 {%- endblock %}