123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- (function ($) {
- 'use strict';
- Drupal.behaviors.betterMessages = {
- attach: function (context, settings) {
- var betterMessages = settings.better_messages;
- var message_box = $('#better-messages-default.better-messages-overlay', context).once('better-messages');
- if (message_box.length > 0) {
- /* jQuery UI Enhancements */
- if (betterMessages.jquery_ui.draggable == '1') {
- message_box.draggable();
- }
- if (betterMessages.jquery_ui.resizable == '1') {
- message_box.resizable();
- }
- /* Functions to determine the popin/popout animation */
- betterMessages.open = function () {
- var method = 'fadeIn';
- switch (betterMessages.popin.effect) {
- case 'fadeIn':
- case 'slideDown':
- method = betterMessages.popin.effect;
- break;
- }
- message_box[method](betterMessages.popin.duration);
- };
- betterMessages.close = function () {
- var method = 'fadeOut';
- switch (betterMessages.popout.effect) {
- case 'fadeOut':
- break;
- case 'slideUp':
- method = betterMessages.popout.effect;
- break;
- }
- message_box[method](betterMessages.popout.duration);
- };
- /* Function to determine closing count */
- betterMessages.countDownClose = function (seconds) {
- if (!message_box.hasClass('better-messages-has-errors') || !betterMessages.disable_autoclose) {
- if (seconds > 0) {
- seconds--;
- if (betterMessages.show_countdown == '1') {
- $('.better-messages-timer', message_box).text(Drupal.t('Closing in !seconds seconds', {'!seconds': seconds}));
- }
- if (seconds > 0) {
- betterMessages.countDown = setTimeout(function () {
- betterMessages.countDownClose(seconds);
- }, 1000);
- }
- else {
- betterMessages.close();
- }
- }
- }
- };
- if (betterMessages.width) {
- message_box.css('width', betterMessages.width);
- }
- /* Determine Popup Message position */
- var vertical = betterMessages.vertical;
- var horizontal = betterMessages.horizontal;
- var cssPosition = {};
- switch (betterMessages.position) {
- case 'center':
- vertical = ($(window).height() - message_box.height()) / 2;
- horizontal = ($(window).width() - message_box.width()) / 2;
- cssPosition = {top: vertical + 'px', left: horizontal + 'px'};
- break;
- case 'tl':
- cssPosition = {top: vertical + 'px', left: horizontal + 'px'};
- break;
- case 'tr':
- cssPosition = {top: vertical + 'px', right: horizontal + 'px'};
- break;
- case 'bl':
- cssPosition = {bottom: vertical + 'px', left: horizontal + 'px'};
- break;
- case 'br':
- cssPosition = {bottom: vertical + 'px', right: horizontal + 'px'};
- break;
- }
- message_box.css(cssPosition);
- /* Here we control closing and opening effects and controls */
- setTimeout(function () {
- betterMessages.open();
- }, betterMessages.opendelay * 1000);
- if (betterMessages.autoclose != 0) {
- betterMessages.countDownClose(betterMessages.autoclose);
- }
- if (betterMessages.hover_autoclose == '1') {
- message_box.hover(function () {
- clearTimeout(betterMessages.countDown);
- $('.better-messages-timer', message_box).fadeOut('slow');
- });
- }
- $('.better-messages-close', message_box).click(function (event) {
- betterMessages.close();
- event.preventDefault();
- });
- /* Esc key handler for closing the message. This doesn't work on Safari or Chrome
- See the issue here: http://code.google.com/p/chromium/issues/detail?id=14635
- */
- $(document).keypress(function (e) {
- if (e.keyCode == 27) {
- betterMessages.close();
- return e.preventDefault();
- }
- });
- }
- }
- };
- })(jQuery);
|