From 2188925bab741bcb45bab13261c5ca89719b7a04 Mon Sep 17 00:00:00 2001 From: Rodney Ewing Date: Thu, 27 Jun 2013 11:18:31 -0700 Subject: [PATCH] javascript limit validation --- mediagoblin/static/js/file_size.js | 45 +++++++++++++++++++ mediagoblin/submit/forms.py | 5 ++- mediagoblin/submit/views.py | 11 +++-- .../templates/mediagoblin/submit/start.html | 5 +++ 4 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 mediagoblin/static/js/file_size.js diff --git a/mediagoblin/static/js/file_size.js b/mediagoblin/static/js/file_size.js new file mode 100644 index 00000000..2238ef89 --- /dev/null +++ b/mediagoblin/static/js/file_size.js @@ -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 . + */ + +$(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('

Sorry, the file size is too big.

'); + } + else if (document.getElementById('file_size_error')) { + $('#file_size_error').hide(); + } + + if (upload_limit) { + if ( uploaded + file_size >= upload_limit) { + $('#file').after('

Sorry, uploading this file will put you over your upload limit.

'); + } + else if (document.getElementById('upload_limit_error')) { + $('#upload_limit_error').hide(); + console.log(file_size >= max_file_size); + } + } + }; +}); diff --git a/mediagoblin/submit/forms.py b/mediagoblin/submit/forms.py index 0a3b4e4d..e2264645 100644 --- a/mediagoblin/submit/forms.py +++ b/mediagoblin/submit/forms.py @@ -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) diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py index d07065a6..3b853697 100644 --- a/mediagoblin/submit/views.py +++ b/mediagoblin/submit/views.py @@ -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.')) diff --git a/mediagoblin/templates/mediagoblin/submit/start.html b/mediagoblin/templates/mediagoblin/submit/start.html index aa390f56..d335d742 100644 --- a/mediagoblin/templates/mediagoblin/submit/start.html +++ b/mediagoblin/templates/mediagoblin/submit/start.html @@ -19,6 +19,11 @@ {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} +{% block mediagoblin_head %} + +{% endblock %} + {% block title -%} {% trans %}Add your media{% endtrans %} — {{ super() }} {%- endblock %} -- 2.25.1