| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /**
- * Description or Responsability
- *
- * @namespace LUNGO.Sugar
- * @class Growl
- *
- * @author Javier Jimenez Villar <javi@tapquo.com> || @soyjavi
- */
- LUNGO.Sugar.Growl = (function(lng, undefined) {
- var _options = [];
- var SELECTOR = {
- BODY: 'body',
- GROWL: '.growl',
- MODAL: '.growl .modal',
- NOTIFY: '.growl .notify',
- MODAL_HREF: '.growl .modal a'
- }
- var CSS_CLASS = {
- VISIBLE: 'visible',
- SHOW: 'show',
- HIDE: 'hide',
- WORKING: 'working',
- INPUT: 'input'
- }
- var CALLBACK_HIDE = 'LUNGO.Sugar.Growl.hide()';
- var MARKUP_GROWL = '<div class="growl"><div class="modal"></div><div class="notify"></div></div>';
- var show = function(title, icon, animate, seconds, callback) {
- _showGrowlModal(true);
-
- var modal = $(SELECTOR.MODAL);
- modal.removeClass(CSS_CLASS.SHOW);
- modal.removeClass(CSS_CLASS.INPUT);
- modal.html('<span class="big icon ' + icon + '"></span><strong>' + title + '<strong>');
- _animate(modal, animate);
- modal.show().addClass(CSS_CLASS.SHOW);
- _auto_hide(seconds, callback);
- };
- var hide = function() {
- _hide_children();
- setTimeout(function() {
- $(SELECTOR.GROWL).hide();
- }, 100);
- };
- var notify = function(title, description, icon, type, seconds, callback) {
- _showGrowlModal(false);
- var notify = $(SELECTOR.NOTIFY);
- if (type) {
- notify.addClass(type);
- }
- notify.html('<span class="icon ' + icon + '"></span><strong>' + title + '</strong><br/><em>' + description + '</strong>');
- setTimeout(function() {
- notify.addClass(CSS_CLASS.SHOW);
- }, 300);
- _auto_hide(seconds, callback);
- };
- var option = function(title, options) {
- _showGrowlModal(true);
- _options = options;
- $(SELECTOR.MODAL).removeClass(CSS_CLASS.WORKING).removeClass(CSS_CLASS.SHOW);
-
- var buttons = _createButtons(options);
- $(SELECTOR.MODAL).addClass('input').html('<span class="title">' + title + '</span>' + buttons);
- $('.growl .modal').show().addClass('show');
- };
- var _init = function() {
- //TODO: Append stylesheet (.less)
- $(SELECTOR.BODY).append(MARKUP_GROWL);
- _subscribeEvents();
- };
- var _showGrowlModal = function(modal) {
- var growl = $(SELECTOR.GROWL);
- if (!growl.is(CSS_CLASS.VISIBLE)) {
- growl.show();
- }
- if (modal) {
- growl.addClass('modal');
- }
- };
- var _animate = function(element, animate) {
- if (animate) {
- element.addClass(CSS_CLASS.WORKING);
- }
- else {
- element.removeClass(CSS_CLASS.WORKING);
- }
- };
- var _createButtons = function(options) {
- var buttons = '';
- for (var i = 0, len = options.length; i < len; i++) {
- buttons += _option_button(options[i].color, 'growl_option_' + i, options[i].icon, options[i].name);
- };
- buttons += _option_button('red', undefined, 'cancel', 'Cancel');
- return buttons;
- };
- var _option_button = function(color, id, icon, label) {
- id = (id !== undefined) ? 'id="' + id + '"' : '';
- return '<a href="#" ' + id + ' class="button ' + color + '"><span class="icon ' + icon + '"></span>' + label + '</a>';
- };
- var _auto_hide = function(seconds, callback) {
- if (seconds != undefined && seconds != 0) {
- if (callback === undefined) {
- callback = CALLBACK_HIDE;
- }
- setTimeout(callback, seconds * 1000);
- }
- };
- var _hide_children = function() {
- _hide_child(SELECTOR.MODAL);
- _hide_child(SELECTOR.NOTIFY);
- };
- var _hide_child = function(selector) {
- var child = $(selector);
- if (child.hasClass(CSS_CLASS.SHOW)) {
- child.removeClass(CSS_CLASS.SHOW);
- //child.removeClass(CSS_CLASS.INPUT).html('');
- }
- };
- var _subscribeEvents = function() {
- //BINDING EVENT
- //CF.app.EVENTS.touch
- $(SELECTOR.NOTIFY).bind('click', function() {
- $(SELECTOR.NOTIFY).removeClass(CSS_CLASS.SHOW);
- });
- $('.growl .modal a').live('click', function(event) {
- if ($(this).attr('id') !== ''){
- id = $(this).attr('id').replace(/growl_option_/g, '');
- setTimeout(_options[id].callback, 100);
- } else {
- event.preventDefault();
- hide();
- return false;
- }
- });
- };
- _init();
- return {
- show: show,
- hide: hide,
- notify: notify,
- option: option
- }
- })(LUNGO);
|