aboutsummaryrefslogtreecommitdiffhomepage
path: root/main/app/sprinkles/account/assets/userfrosting/js/pages/register.js
blob: 4539d9b118818f262a71652defd7440ae9748c1b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
 * Page-specific Javascript file.  Should generally be included as a separate asset bundle in your page template.
 * example: {{ assets.js('js/pages/sign-in-or-register') | raw }}
 *
 * This script depends on validation rules specified in pages/partials/page.js.twig.
 *
 * Target page: account/register
 */
$(document).ready(function () {
    // TOS modal
    $(this).find('.js-show-tos').click(function () {
        $("body").ufModal({
            sourceUrl: site.uri.public + "/modals/account/tos",
            msgTarget: $("#alerts-page")
        });
    });

    // Auto-generate username when name is filled in
    var autoGenerate = true;
    $("#register").find('input[name=first_name], input[name=last_name]').on('input change', function () {
        if (!autoGenerate) {
            return;
        }

        var form = $("#register");

        var firstName = form.find('input[name=first_name]').val().trim();
        var lastName = form.find('input[name=last_name]').val().trim();

        if (!firstName && !lastName) {
            return;
        }

        var userName = getSlug(firstName + ' ' + lastName, {
            separator: '.'
        });
        // Set slug
        form.find('input[name=user_name]').val(userName);
    });

    // Autovalidate username field on a delay
    var timer;
    $("#register").find('input[name=first_name], input[name=last_name], input[name=user_name]').on('input change', function () {
        clearTimeout(timer); // Clear the timer so we don't end up with dupes.
        timer = setTimeout(function () { // assign timer a new timeout
            $("#register").find('input[name=user_name]').valid();
        }, 50);
    });

    // Enable/disable username suggestions in registration page
    $("#register").find('#form-register-username-suggest').on('click', function (e) {
        e.preventDefault();
        var form = $("#register");
        $.getJSON(site.uri.public + '/account/suggest-username')
            .done(function (data) {
                // Set suggestion
                form.find('input[name=user_name]').val(data.user_name);
            });
    });

    // Turn off autogenerate when someone enters stuff manually in user_name
    $("#register").find('input[name=user_name]').on('input', function () {
        autoGenerate = false;
    });

    // Add remote rule for checking usernames on the fly
    var registrationValidators = $.extend(
        true,               // deep extend
        page.validators.register,
        {
            rules: {
                user_name: {
                    remote: {
                        url: site.uri.public + '/account/check-username',
                        dataType: 'text'
                    }
                }
            }
        }
    );

    // Handles form submission
    $("#register").ufForm({
        validators: registrationValidators,
        msgTarget: $("#alerts-page"),
        keyupDelay: 500
    }).on("submitSuccess.ufForm", function () {
        window.location.reload();
    }).on("submitError.ufForm", function () {
        // Reload captcha
        $("#captcha").captcha();
    });
});