diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-12-02 19:38:30 -0300 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-12-02 19:38:30 -0300 |
commit | 73626327cee9ab1345083c890244d94617932e6b (patch) | |
tree | a7b7775947ebbb5d9b53a0151724f16f0c300cc1 | |
parent | 2beea9c14053b0f57d037a25fc1d9e565501d605 (diff) | |
download | askbot-73626327cee9ab1345083c890244d94617932e6b.tar.gz askbot-73626327cee9ab1345083c890244d94617932e6b.tar.bz2 askbot-73626327cee9ab1345083c890244d94617932e6b.zip |
made register forms submittable only once
-rw-r--r-- | askbot/media/js/utils.js | 32 | ||||
-rw-r--r-- | askbot/templates/authopenid/complete.html | 33 | ||||
-rw-r--r-- | askbot/templates/authopenid/signup_with_password.html | 12 | ||||
-rw-r--r-- | askbot/templates/macros.html | 10 |
4 files changed, 74 insertions, 13 deletions
diff --git a/askbot/media/js/utils.js b/askbot/media/js/utils.js index 2534fb21..2ae1510c 100644 --- a/askbot/media/js/utils.js +++ b/askbot/media/js/utils.js @@ -369,6 +369,38 @@ WrappedElement.prototype.dispose = function(){ }; /** + * @contsructor + * a form helper that disables submit button + * after it is submitted the first time + * to prevent double submits + */ +var OneShotForm = function() { + WrappedElement.call(this); + this._submitBtn = undefined; +}; +inherits(OneShotForm, WrappedElement); + +OneShotForm.prototype.setSubmitButton = function(button) { + this._submitBtn = button; +}; + +OneShotForm.prototype.decorate = function(element) { + this._element = element; + var me = this; + var button = this._submitBtn; + var disabler = function(evt) { + if (element.data('submitted') === true) { + evt.preventDefault(); + } else { + element.data('submitted', true); + button.addClass('disabled'); + return true; + } + }; + element.submit(disabler); +}; + +/** * @constructor * Widget is a Wrapped element with state */ diff --git a/askbot/templates/authopenid/complete.html b/askbot/templates/authopenid/complete.html index c9afedee..835fd72f 100644 --- a/askbot/templates/authopenid/complete.html +++ b/askbot/templates/authopenid/complete.html @@ -1,4 +1,5 @@ {% extends "one_column_body.html" %} +{% import "macros.html" as macros %} <!-- complete.html --> {# views calling this template: @@ -28,13 +29,18 @@ parameters: </ul> {% endif %} <div class="login"> - {% if login_type=='openid' %} - <form name="fregister" action="{% url user_register %}" method="POST">{% csrf_token %} - {% elif login_type=='facebook' %} - <form name="fregister" action="" method="POST">{% csrf_token %} - {% else %} - <form name="fregister" action="{{ default_form_action }}" method="POST">{% csrf_token %} - {% endif %} + <form + id="register-form" + name="fregister" + {% if login_type=='openid' %} + action="{% url user_register %}" + {% elif login_type=='facebook' %} + action="" + {% else %} + action="{{ default_form_action }}" + {% endif %} + method="POST" + >{% csrf_token %} {{ openid_register_form.next }} <div class="form-row-vertical"> <label for="id_username"> @@ -56,8 +62,19 @@ anyone, must be valid</i>) {% endif %} {{ openid_register_form.email }} </div> - <div class="submit-row"><input type="submit" class="submit" name="bnewaccount" value="{% trans %}Signup{% endtrans %}"/></div> + <div class="submit-row"> + <input + id="register-button" + type="submit" + class="submit" + name="bnewaccount" + value="{% trans %}Signup{% endtrans %}" + /> + </div> </form> </div> {% endblock %} <!-- end complete.html --> +{% block endjs %} + {{ macros.one_shot_form_js(form='#register-form', submit_button='#register-button') }} +{% endblock %} diff --git a/askbot/templates/authopenid/signup_with_password.html b/askbot/templates/authopenid/signup_with_password.html index e5a8f633..32bf781b 100644 --- a/askbot/templates/authopenid/signup_with_password.html +++ b/askbot/templates/authopenid/signup_with_password.html @@ -1,5 +1,6 @@ {% extends "one_column_body.html" %} {% import "authopenid/authopenid_macros.html" as login_macros %} +{% import "macros.html" as main_macros %} <!--signup.html--> {% block title %}{% spaceless %}{% trans %}Signup{% endtrans %}{% endspaceless %}{% endblock %} {% block forestyle %} @@ -29,7 +30,7 @@ password here. However</span>, please keep in mind that we also support simply reuse your external login (e.g. Gmail or AOL) without ever sharing your login details with anyone and having to remember yet another password.{% endtrans %}</p--> {%endif%} -<form action="{% url user_signup_with_password %}" method="post" accept-charset="utf-8">{% csrf_token %} +<form id="signup-form" action="{% url user_signup_with_password %}" method="post" accept-charset="utf-8">{% csrf_token %} {{form.login_provider}} <ul class="form-horizontal-rows"> <li><label for="usename_id">{{form.username.label}}</label>{{form.username}}{{form.username.errors}}</li> @@ -41,7 +42,7 @@ your login details with anyone and having to remember yet another password.{% en <p class="signup_p">{% trans %}Please read and type in the two words below to help us prevent automated account creation.{% endtrans %}</p> {{form.recaptcha}} {% endif %} - <div class="submit-row"><input type="submit" class="submit" value="{% trans %}Signup{% endtrans %}" /> + <div class="submit-row"><input id="signup-button" type="submit" class="submit" value="{% trans %}Signup{% endtrans %}" /> {% if settings.PASSWORD_REGISTER_SHOW_PROVIDER_BUTTONS == False %} <strong>{% trans %}or{% endtrans %} <a href="{{ settings.LOGIN_URL }}">{% trans %}return to OpenID login{% endtrans %}</a></strong> @@ -49,7 +50,8 @@ your login details with anyone and having to remember yet another password.{% en </div> </form> {% endblock %} -{%block endjs%} -{%include "authopenid/providers_javascript.html" %} -{%endblock%} +{% block endjs %} + {% include "authopenid/providers_javascript.html" %} + {{ main_macros.one_shot_form_js(form="#signup-form", submit_button="#signup_button") }} +{% endblock %} <!--end signup.html--> diff --git a/askbot/templates/macros.html b/askbot/templates/macros.html index 8e578dec..55113377 100644 --- a/askbot/templates/macros.html +++ b/askbot/templates/macros.html @@ -780,3 +780,13 @@ answer {% if answer.accepted() %}accepted-answer{% endif %} {% if answer.author_ {{datetime_object.replace(microsecond=0)|add_tz_offset}} </abbr> {%- endmacro -%} + +{% macro one_shot_form_js(form=None, submit_button=None) %} + <script type="text/javascript"> + (function() { + var form = new OneShotForm(); + form.setSubmitButton($("{{submit_button}}")); + form.decorate($("{{form}}")); + })(); + </script> +{% endmacro %} |