//Author : @arboshiki /** * Generates random string of n length. * String contains only letters and numbers * * @param {int} n * @returns {String} */ Math.randomString = function (n) { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < n; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; }; var Lobibox = Lobibox || {}; (function () { var LobiboxNotify = function (type, options) { //------------------------------------------------------------------------------ //----------------PROTOTYPE VARIABLES------------------------------------------- //------------------------------------------------------------------------------ this.$type = null; this.$options = null; this.$el = null; //------------------------------------------------------------------------------ //-----------------PRIVATE VARIABLES-------------------------------------------- //------------------------------------------------------------------------------ var me = this; //------------------------------------------------------------------------------ //-----------------PRIVATE FUNCTIONS-------------------------------------------- //------------------------------------------------------------------------------ var _processInput = function (options) { if (options.size === 'mini' || options.size === 'large') { options = $.extend({}, Lobibox.notify.OPTIONS[options.size], options); } options = $.extend({}, Lobibox.notify.OPTIONS[me.$type], Lobibox.notify.DEFAULTS, options); if (options.size !== 'mini' && options.title === true) { options.title = Lobibox.notify.OPTIONS[me.$type].title; } else if (options.size === 'mini' && options.title === true) { options.title = false; } if (options.icon === true) { options.icon = Lobibox.notify.OPTIONS.icons[options.iconSource][me.$type]; } if (options.sound === true) { options.sound = Lobibox.notify.OPTIONS[me.$type].sound; } if (options.sound) { options.sound = options.soundPath + options.sound + options.soundExt; } return options; }; var _init = function () { // Create notification var $notify = _createNotify(); if (me.$options.size === 'mini'){ $notify.addClass('notify-mini'); } if (typeof me.$options.position === 'string'){ var $wrapper = _createNotifyWrapper(); _appendInWrapper($notify, $wrapper); if ($wrapper.hasClass('center')){ $wrapper.css('margin-left', '-'+($wrapper.width()/2)+"px"); } } else { $('body').append($notify); $notify.css({ 'position': 'fixed', left: me.$options.position.left, top: me.$options.position.top, }) } me.$el = $notify; if (me.$options.sound) { var snd = new Audio(me.$options.sound); // buffers automatically when created snd.play(); } if (me.$options.rounded){ me.$el.addClass('rounded'); } }; var _appendInWrapper = function ($el, $wrapper) { if (me.$options.size === 'normal') { if ($wrapper.hasClass('bottom')){ $wrapper.prepend($el); } else { $wrapper.append($el); } } else if (me.$options.size === 'mini') { if ($wrapper.hasClass('bottom')){ $wrapper.prepend($el); } else { $wrapper.append($el); } } else if (me.$options.size === 'large') { var tabPane = _createTabPane().append($el); var $li = _createTabControl(tabPane.attr('id')); $wrapper.find('.lb-notify-wrapper').append(tabPane); $wrapper.find('.lb-notify-tabs').append($li); _activateTab($li); $li.find('>a').click(function () { _activateTab($li); }); } }; var _activateTab = function ($li) { $li.closest('.lb-notify-tabs').find('>li').removeClass('active'); $li.addClass('active'); var $current = $($li.find('>a').attr('href')); $current.closest('.lb-notify-wrapper').find('>.lb-tab-pane').removeClass('active'); $current.addClass('active') }; var _createTabControl = function (tabPaneId) { var $li = $('
', { 'class': Lobibox.notify.OPTIONS[me.$type]['class'] }); $('', { 'href': '#' + tabPaneId }).append('') .appendTo($li); return $li; }; var _createTabPane = function () { return $('', { 'class': 'lb-tab-pane', 'id': Math.randomString(10) }) }; var _createNotifyWrapper = function () { var selector = (me.$options.size === 'large' ? '.lobibox-notify-wrapper-large' : '.lobibox-notify-wrapper') + "." + me.$options.position.replace(/\s/gi, '.'), $wrapper; //var classes = me.$options.position.split(" "); $wrapper = $(selector); if ($wrapper.length === 0) { $wrapper = $('') .addClass(selector.replace(/\./g, ' ').trim()) .appendTo($('body')); if (me.$options.size === 'large') { $wrapper.append($('