better_messages.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. (function ($) {
  2. 'use strict';
  3. Drupal.behaviors.betterMessages = {
  4. attach: function (context, settings) {
  5. var betterMessages = settings.better_messages;
  6. var message_box = $('#better-messages-default.better-messages-overlay', context).once('better-messages');
  7. if (message_box.length > 0) {
  8. /* jQuery UI Enhancements */
  9. if (betterMessages.jquery_ui.draggable == '1') {
  10. message_box.draggable();
  11. }
  12. if (betterMessages.jquery_ui.resizable == '1') {
  13. message_box.resizable();
  14. }
  15. /* Functions to determine the popin/popout animation */
  16. betterMessages.open = function () {
  17. var method = 'fadeIn';
  18. switch (betterMessages.popin.effect) {
  19. case 'fadeIn':
  20. case 'slideDown':
  21. method = betterMessages.popin.effect;
  22. break;
  23. }
  24. message_box[method](betterMessages.popin.duration);
  25. };
  26. betterMessages.close = function () {
  27. var method = 'fadeOut';
  28. switch (betterMessages.popout.effect) {
  29. case 'fadeOut':
  30. break;
  31. case 'slideUp':
  32. method = betterMessages.popout.effect;
  33. break;
  34. }
  35. message_box[method](betterMessages.popout.duration);
  36. };
  37. /* Function to determine closing count */
  38. betterMessages.countDownClose = function (seconds) {
  39. if (!message_box.hasClass('better-messages-has-errors') || !betterMessages.disable_autoclose) {
  40. if (seconds > 0) {
  41. seconds--;
  42. if (betterMessages.show_countdown == '1') {
  43. $('.better-messages-timer', message_box).text(Drupal.t('Closing in !seconds seconds', {'!seconds': seconds}));
  44. }
  45. if (seconds > 0) {
  46. betterMessages.countDown = setTimeout(function () {
  47. betterMessages.countDownClose(seconds);
  48. }, 1000);
  49. }
  50. else {
  51. betterMessages.close();
  52. }
  53. }
  54. }
  55. };
  56. if (betterMessages.width) {
  57. message_box.css('width', betterMessages.width);
  58. }
  59. /* Determine Popup Message position */
  60. var vertical = betterMessages.vertical;
  61. var horizontal = betterMessages.horizontal;
  62. var cssPosition = {};
  63. switch (betterMessages.position) {
  64. case 'center':
  65. vertical = ($(window).height() - message_box.height()) / 2;
  66. horizontal = ($(window).width() - message_box.width()) / 2;
  67. cssPosition = {top: vertical + 'px', left: horizontal + 'px'};
  68. break;
  69. case 'tl':
  70. cssPosition = {top: vertical + 'px', left: horizontal + 'px'};
  71. break;
  72. case 'tr':
  73. cssPosition = {top: vertical + 'px', right: horizontal + 'px'};
  74. break;
  75. case 'bl':
  76. cssPosition = {bottom: vertical + 'px', left: horizontal + 'px'};
  77. break;
  78. case 'br':
  79. cssPosition = {bottom: vertical + 'px', right: horizontal + 'px'};
  80. break;
  81. }
  82. message_box.css(cssPosition);
  83. /* Here we control closing and opening effects and controls */
  84. setTimeout(function () {
  85. betterMessages.open();
  86. }, betterMessages.opendelay * 1000);
  87. if (betterMessages.autoclose != 0) {
  88. betterMessages.countDownClose(betterMessages.autoclose);
  89. }
  90. if (betterMessages.hover_autoclose == '1') {
  91. message_box.hover(function () {
  92. clearTimeout(betterMessages.countDown);
  93. $('.better-messages-timer', message_box).fadeOut('slow');
  94. });
  95. }
  96. $('.better-messages-close', message_box).click(function (event) {
  97. betterMessages.close();
  98. event.preventDefault();
  99. });
  100. /* Esc key handler for closing the message. This doesn't work on Safari or Chrome
  101. See the issue here: http://code.google.com/p/chromium/issues/detail?id=14635
  102. */
  103. $(document).keypress(function (e) {
  104. if (e.keyCode == 27) {
  105. betterMessages.close();
  106. return e.preventDefault();
  107. }
  108. });
  109. }
  110. }
  111. };
  112. })(jQuery);