Merge pull request #11 from bessl/patch-2
[gitphp.git] / js / modules / loginpopup.js
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
 * GitPHP javascript login popup
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2012 Christopher Han
 * @package GitPHP
 * @subpackage Javascript
 */
 
define(['jquery', 'modules/geturl', 'modules/resources', 'qtip'], function($, url, resources) {
  return function(element) {
    $(element).qtip({
      content: {
        text: function(api) {
          var container = $(document.createElement('div'));
          var loginError = $(document.createElement('div')).addClass('loginError').addClass('error').css('padding-top', '0px');
          var loginDiv = $(document.createElement('div')).addClass('loginForm');
          var loginForm = $(document.createElement('form'))
 
          container.append(loginDiv);
          loginDiv.append(loginForm);
          loginForm.append(loginError);
 
          var usernameDiv = $(document.createElement('div')).addClass('field');
          var usernameLabel = $(document.createElement('label')).attr('for', 'username').text(resources.UsernameLabel);
          var usernameField = $(document.createElement('input')).attr('type', 'text').attr('name', 'username').attr('id', 'username');
          usernameDiv.append(usernameLabel);
          usernameDiv.append(usernameField);
          loginForm.append(usernameDiv);
 
          var passwordDiv = $(document.createElement('div')).addClass('field');
          var passwordLabel = $(document.createElement('label')).attr('for', 'password').text(resources.PasswordLabel);
          var passwordField = $(document.createElement('input')).attr('type', 'password').attr('name', 'password').attr('id', 'password');
          passwordDiv.append(passwordLabel);
          passwordDiv.append(passwordField);
          loginForm.append(passwordDiv);
 
          var loginDiv = $(document.createElement('div')).addClass('submit');
          var loginButton = $(document.createElement('input')).attr('type', 'submit').attr('value', resources.Login);
          loginDiv.append(loginButton);
          loginForm.append(loginDiv);
 
          loginForm.bind('submit', function(event) {
            var username = $('input[name=username]', this).val();
            var password = $('input[name=password]', this).val();
            var errorContainer = $('.loginError', this);
            if (!username) {
              errorContainer.text(resources.UsernameIsRequired);
              return false;
            }
            if (!password) {
              errorContainer.text(resources.PasswordIsRequired);
              return false;
            }
            errorContainer.text('');
            var inputs = $('input', this);
            $.ajax({
              url: url + '?a=login&o=js',
              data: {
                a: 'login',
                o: 'js',
                username: username,
                password: password
              },
              type: 'post',
              dataType: 'json',
              success: function(data, status, jqXHR) {
                if (data) {
                  if (data.success === true) {
                    window.location.reload();
                  } else if (data.message) {
                    errorContainer.text(data.message);
                  } else {
                    errorContainer.text(resources.AnErrorOccurredWhileLoggingIn);
                  }
                } else {
                  errorContainer.text(resources.AnErrorOccurredWhileLoggingIn);
                }
              },
              error: function(jqXHR, message) {
                  errorContainer.text(resources.AnErrorOccurredWhileLoggingIn);
              },
              beforeSend: function() {
                inputs.attr('disabled', 'disabled');
              },
              complete: function() {
                inputs.removeAttr('disabled');
              }
            });
 
            return false;
          });
 
          return container;
        },
        title: {
          text: resources.LoginTitle,
          button: true
        }
      },
      position: {
        my: 'center',
        at: 'center',
        target: $(window)
      },
      show: {
        event: 'click',
        modal: {
          on: true
        }
      },
      hide: {
        event: false
      },
      style: {
        classes: 'ui-tooltip-light ui-tooltip-shadow'
      },
      events: {
        visible: function(event, api) {
          $('input[name=username]', this).focus();
        }
      }
    });
    $(element).click(function(event) {
      return false;
    });
  };
});
 
comments