loginpopup.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. * GitPHP javascript login popup
  3. *
  4. * @author Christopher Han <xiphux@gmail.com>
  5. * @copyright Copyright (c) 2012 Christopher Han
  6. * @package GitPHP
  7. * @subpackage Javascript
  8. */
  9. define(['jquery', 'modules/geturl', 'modules/resources', 'qtip'], function($, url, resources) {
  10. return function(element) {
  11. $(element).qtip({
  12. content: {
  13. text: function(api) {
  14. var container = $(document.createElement('div'));
  15. var loginError = $(document.createElement('div')).addClass('loginError').addClass('error').css('padding-top', '0px');
  16. var loginDiv = $(document.createElement('div')).addClass('loginForm');
  17. var loginForm = $(document.createElement('form'))
  18. container.append(loginDiv);
  19. loginDiv.append(loginForm);
  20. loginForm.append(loginError);
  21. var usernameDiv = $(document.createElement('div')).addClass('field');
  22. var usernameLabel = $(document.createElement('label')).attr('for', 'username').text(resources.UsernameLabel);
  23. var usernameField = $(document.createElement('input')).attr('type', 'text').attr('name', 'username').attr('id', 'username');
  24. usernameDiv.append(usernameLabel);
  25. usernameDiv.append(usernameField);
  26. loginForm.append(usernameDiv);
  27. var passwordDiv = $(document.createElement('div')).addClass('field');
  28. var passwordLabel = $(document.createElement('label')).attr('for', 'password').text(resources.PasswordLabel);
  29. var passwordField = $(document.createElement('input')).attr('type', 'password').attr('name', 'password').attr('id', 'password');
  30. passwordDiv.append(passwordLabel);
  31. passwordDiv.append(passwordField);
  32. loginForm.append(passwordDiv);
  33. var loginDiv = $(document.createElement('div')).addClass('submit');
  34. var loginButton = $(document.createElement('input')).attr('type', 'submit').attr('value', resources.Login);
  35. loginDiv.append(loginButton);
  36. loginForm.append(loginDiv);
  37. loginForm.bind('submit', function(event) {
  38. var username = $('input[name=username]', this).val();
  39. var password = $('input[name=password]', this).val();
  40. var errorContainer = $('.loginError', this);
  41. if (!username) {
  42. errorContainer.text(resources.UsernameIsRequired);
  43. return false;
  44. }
  45. if (!password) {
  46. errorContainer.text(resources.PasswordIsRequired);
  47. return false;
  48. }
  49. errorContainer.text('');
  50. var inputs = $('input', this);
  51. $.ajax({
  52. url: url + '?a=login&o=js',
  53. data: {
  54. a: 'login',
  55. o: 'js',
  56. username: username,
  57. password: password
  58. },
  59. type: 'post',
  60. dataType: 'json',
  61. success: function(data, status, jqXHR) {
  62. if (data) {
  63. if (data.success === true) {
  64. window.location.reload();
  65. } else if (data.message) {
  66. errorContainer.text(data.message);
  67. } else {
  68. errorContainer.text(resources.AnErrorOccurredWhileLoggingIn);
  69. }
  70. } else {
  71. errorContainer.text(resources.AnErrorOccurredWhileLoggingIn);
  72. }
  73. },
  74. error: function(jqXHR, message) {
  75. errorContainer.text(resources.AnErrorOccurredWhileLoggingIn);
  76. },
  77. beforeSend: function() {
  78. inputs.attr('disabled', 'disabled');
  79. },
  80. complete: function() {
  81. inputs.removeAttr('disabled');
  82. }
  83. });
  84. return false;
  85. });
  86. return container;
  87. },
  88. title: {
  89. text: resources.LoginTitle,
  90. button: true
  91. }
  92. },
  93. position: {
  94. my: 'center',
  95. at: 'center',
  96. target: $(window)
  97. },
  98. show: {
  99. event: 'click',
  100. modal: {
  101. on: true
  102. }
  103. },
  104. hide: {
  105. event: false
  106. },
  107. style: {
  108. classes: 'ui-tooltip-light ui-tooltip-shadow'
  109. },
  110. events: {
  111. visible: function(event, api) {
  112. $('input[name=username]', this).focus();
  113. }
  114. }
  115. });
  116. $(element).click(function(event) {
  117. return false;
  118. });
  119. };
  120. });