summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-12-02 19:38:30 -0300
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-12-02 19:38:30 -0300
commit73626327cee9ab1345083c890244d94617932e6b (patch)
treea7b7775947ebbb5d9b53a0151724f16f0c300cc1
parent2beea9c14053b0f57d037a25fc1d9e565501d605 (diff)
downloadaskbot-73626327cee9ab1345083c890244d94617932e6b.tar.gz
askbot-73626327cee9ab1345083c890244d94617932e6b.tar.bz2
askbot-73626327cee9ab1345083c890244d94617932e6b.zip
made register forms submittable only once
-rw-r--r--askbot/media/js/utils.js32
-rw-r--r--askbot/templates/authopenid/complete.html33
-rw-r--r--askbot/templates/authopenid/signup_with_password.html12
-rw-r--r--askbot/templates/macros.html10
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 %}