user.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /**
  2. * @fileOverview
  3. *
  4. * 用户登录控制
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('topbar/user', function(minder) {
  10. var eve = minder.getUI('eve');
  11. var currentUser;
  12. var $userPanel = $('<div class="user-panel"></div>').appendTo('#panel');
  13. var $tip = $('<span class="loading-tip"></span>')
  14. .text(minder.getLang('ui.checklogin'))
  15. .appendTo($userPanel);
  16. /* 登录按钮 */
  17. var $loginButton = new FUI.Button({
  18. label: minder.getLang('ui.login'),
  19. text: minder.getLang('ui.login'),
  20. className: 'login-button'
  21. }).appendTo($userPanel[0]).hide();
  22. /* 用户按钮 */
  23. var $userButton = new FUI.Button({
  24. icon: {
  25. // 1px 透明图
  26. img: 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='
  27. },
  28. className: 'user-button'
  29. }).appendTo($userPanel[0]).hide();
  30. /* 用户菜单 */
  31. var $userMenu = new FUI.PopupMenu({
  32. id: 'user-menu'
  33. }).appendTo(document.getElementById('content-wrapper')).positionTo($userButton);
  34. var menu = $userMenu.getMenuWidget().show();
  35. ['userinfo', 'gotonetdisk', 'fui-spliter', 'switchuser', 'logout'].forEach(function(name) {
  36. menu.appendItem(new FUI.Item({
  37. label: minder.getLang('ui.' + name),
  38. className: name,
  39. value: name
  40. }));
  41. });
  42. $userButton.on('click', function() {
  43. $userMenu.open();
  44. var $dom = $($userMenu.getElement());
  45. var $button = $($userButton.getElement());
  46. $dom.offset({
  47. left: $button.offset().left - $dom.outerWidth() + $button.outerWidth() - 10,
  48. top: $button.offset().top + $button.outerHeight()
  49. });
  50. });
  51. menu.on('select', function(e, info) {
  52. switch (info.value) {
  53. case 'userinfo':
  54. window.open('http://i.baidu.com');
  55. break;
  56. case 'gotonetdisk':
  57. window.open('http://pan.baidu.com/disk/home#path=/apps/kityminder');
  58. break;
  59. case 'switchuser':
  60. switchUser();
  61. break;
  62. case 'logout':
  63. logout();
  64. break;
  65. }
  66. menu.clearSelect();
  67. $userMenu.hide();
  68. });
  69. minder.on('uiready', function() {
  70. fio.user.check().then(check)['catch'](function(error) {
  71. $loginButton.show();
  72. $userButton.hide();
  73. $tip.hide();
  74. });
  75. });
  76. $loginButton.on('click', login);
  77. $('#content-wrapper').delegate('.login-button', 'click', login);
  78. function check(user) {
  79. if (user) {
  80. $userButton.setLabel(user.username);
  81. $userButton.getIconWidget().setImage(user.smallImage);
  82. $userButton.show();
  83. $loginButton.hide();
  84. fio.user.fire('login', user);
  85. } else {
  86. if (window.location.href.indexOf('nocheck') == -1) {
  87. return login();
  88. } else {
  89. $loginButton.show();
  90. }
  91. }
  92. $tip.hide();
  93. currentUser = user;
  94. }
  95. function logout() {
  96. fio.user.logout();
  97. $loginButton.show();
  98. $userButton.hide();
  99. fio.user.fire('logout');
  100. window.location.href = window.location.href.split('edit.html')[0] + 'index.html'; // refresh
  101. }
  102. function login() {
  103. $loginButton.setLabel(minder.getLang('ui.loggingin'));
  104. fio.user.login({
  105. remember: 7 * 24 * 60 * 60 // remember 7 days
  106. });
  107. }
  108. function switchUser() {
  109. fio.user.login({
  110. remember: 7 * 24 * 60 * 60, // remember 7 days
  111. force: true
  112. });
  113. }
  114. function requireLogin($element) {
  115. var $login_tip = $('<p class="login-tip"></p>')
  116. .html(minder.getLang('ui.requirelogin'));
  117. $element.append($login_tip);
  118. fio.user.on('login', function() {
  119. $element.removeClass('login-required');
  120. });
  121. fio.user.on('logout', function() {
  122. $element.addClass('login-required');
  123. });
  124. }
  125. return {
  126. getCurrent: function() {
  127. return currentUser;
  128. },
  129. loginLink: function() {
  130. return $('<a></a>').click(login);
  131. },
  132. requireLogin: requireLogin
  133. };
  134. });