/**
* Kendo UI v2016.1.112 (http://www.telerik.com/kendo-ui)
* Copyright 2016 Telerik AD. All rights reserved.
*
* Kendo UI commercial licenses may be obtained at
* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete
* If you do not own a commercial license, this file shall be governed by the trial license terms.
*/
(function (f, define) {
define('kendo.notification', [
'kendo.core',
'kendo.popup'
], f);
}(function () {
var __meta__ = {
id: 'notification',
name: 'Notification',
category: 'web',
description: 'The Notification widget displays user alerts.',
depends: [
'core',
'popup'
]
};
(function ($, undefined) {
var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, extend = $.extend, setTimeout = window.setTimeout, CLICK = 'click', SHOW = 'show', HIDE = 'hide', KNOTIFICATION = 'k-notification', KICLOSE = '.k-notification-wrap .k-i-close', INFO = 'info', SUCCESS = 'success', WARNING = 'warning', ERROR = 'error', TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', UP = 'up', NS = '.kendoNotification', WRAPPER = '
', TEMPLATE = '' + '#=typeIcon#' + '#=content#' + 'Hide' + '
';
var Notification = Widget.extend({
init: function (element, options) {
var that = this;
Widget.fn.init.call(that, element, options);
options = that.options;
if (!options.appendTo || !$(options.appendTo).is(element)) {
that.element.hide();
}
that._compileTemplates(options.templates);
that._guid = '_' + kendo.guid();
that._isRtl = kendo.support.isRtl(element);
that._compileStacking(options.stacking, options.position.top, options.position.left);
kendo.notify(that);
},
events: [
SHOW,
HIDE
],
options: {
name: 'Notification',
position: {
pinned: true,
top: null,
left: null,
bottom: 20,
right: 20
},
stacking: 'default',
hideOnClick: true,
button: false,
allowHideAfter: 0,
autoHideAfter: 5000,
appendTo: null,
width: null,
height: null,
templates: [],
animation: {
open: {
effects: 'fade:in',
duration: 300
},
close: {
effects: 'fade:out',
duration: 600,
hide: true
}
}
},
_compileTemplates: function (templates) {
var that = this;
var kendoTemplate = kendo.template;
that._compiled = {};
$.each(templates, function (key, value) {
that._compiled[value.type] = kendoTemplate(value.template || $('#' + value.templateId).html());
});
that._defaultCompiled = kendoTemplate(TEMPLATE);
},
_getCompiled: function (type) {
var that = this;
var defaultCompiled = that._defaultCompiled;
return type ? that._compiled[type] || defaultCompiled : defaultCompiled;
},
_compileStacking: function (stacking, top, left) {
var that = this, paddings = {
paddingTop: 0,
paddingRight: 0,
paddingBottom: 0,
paddingLeft: 0
}, horizontalAlignment = left !== null ? LEFT : RIGHT, origin, position;
switch (stacking) {
case 'down':
origin = BOTTOM + ' ' + horizontalAlignment;
position = TOP + ' ' + horizontalAlignment;
delete paddings.paddingBottom;
break;
case RIGHT:
origin = TOP + ' ' + RIGHT;
position = TOP + ' ' + LEFT;
delete paddings.paddingRight;
break;
case LEFT:
origin = TOP + ' ' + LEFT;
position = TOP + ' ' + RIGHT;
delete paddings.paddingLeft;
break;
case UP:
origin = TOP + ' ' + horizontalAlignment;
position = BOTTOM + ' ' + horizontalAlignment;
delete paddings.paddingTop;
break;
default:
if (top !== null) {
origin = BOTTOM + ' ' + horizontalAlignment;
position = TOP + ' ' + horizontalAlignment;
delete paddings.paddingBottom;
} else {
origin = TOP + ' ' + horizontalAlignment;
position = BOTTOM + ' ' + horizontalAlignment;
delete paddings.paddingTop;
}
break;
}
that._popupOrigin = origin;
that._popupPosition = position;
that._popupPaddings = paddings;
},
_attachPopupEvents: function (options, popup) {
var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0, closeIcon;
function attachClick(target) {
target.on(CLICK + NS, function () {
that._hidePopup(popup);
});
}
if (popup.options.anchor !== document.body && popup.options.origin.indexOf(RIGHT) > 0) {
popup.bind('open', function () {
var shadows = kendo.getShadows(popup.element);
setTimeout(function () {
popup.wrapper.css('left', parseFloat(popup.wrapper.css('left')) + shadows.left + shadows.right);
});
});
}
if (options.hideOnClick) {
popup.bind('activate', function () {
if (attachDelay) {
setTimeout(function () {
attachClick(popup.element);
}, allowHideAfter);
} else {
attachClick(popup.element);
}
});
} else if (options.button) {
closeIcon = popup.element.find(KICLOSE);
if (attachDelay) {
setTimeout(function () {
attachClick(closeIcon);
}, allowHideAfter);
} else {
attachClick(closeIcon);
}
}
},
_showPopup: function (wrapper, options) {
var that = this, autoHideAfter = options.autoHideAfter, x = options.position.left, y = options.position.top, popup, openPopup;
openPopup = $('.' + that._guid + ':not(.k-hiding)').last();
popup = new kendo.ui.Popup(wrapper, {
anchor: openPopup[0] ? openPopup : document.body,
origin: that._popupOrigin,
position: that._popupPosition,
animation: options.animation,
modal: true,
collision: '',
isRtl: that._isRtl,
close: function () {
that._triggerHide(this.element);
},
deactivate: function (e) {
e.sender.element.off(NS);
e.sender.element.find(KICLOSE).off(NS);
e.sender.destroy();
}
});
that._attachPopupEvents(options, popup);
if (openPopup[0]) {
popup.open();
} else {
if (x === null) {
x = $(window).width() - wrapper.width() - options.position.right;
}
if (y === null) {
y = $(window).height() - wrapper.height() - options.position.bottom;
}
popup.open(x, y);
}
popup.wrapper.addClass(that._guid).css(extend({ margin: 0 }, that._popupPaddings));
if (options.position.pinned) {
popup.wrapper.css('position', 'fixed');
if (openPopup[0]) {
that._togglePin(popup.wrapper, true);
}
} else if (!openPopup[0]) {
that._togglePin(popup.wrapper, false);
}
if (autoHideAfter > 0) {
setTimeout(function () {
that._hidePopup(popup);
}, autoHideAfter);
}
},
_hidePopup: function (popup) {
popup.wrapper.addClass('k-hiding');
popup.close();
},
_togglePin: function (wrapper, pin) {
var win = $(window), sign = pin ? -1 : 1;
wrapper.css({
top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),
left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()
});
},
_attachStaticEvents: function (options, wrapper) {
var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;
function attachClick(target) {
target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));
}
if (options.hideOnClick) {
if (attachDelay) {
setTimeout(function () {
attachClick(wrapper);
}, allowHideAfter);
} else {
attachClick(wrapper);
}
} else if (options.button) {
if (attachDelay) {
setTimeout(function () {
attachClick(wrapper.find(KICLOSE));
}, allowHideAfter);
} else {
attachClick(wrapper.find(KICLOSE));
}
}
},
_showStatic: function (wrapper, options) {
var that = this, autoHideAfter = options.autoHideAfter, animation = options.animation, insertionMethod = options.stacking == UP || options.stacking == LEFT ? 'prependTo' : 'appendTo';
wrapper.addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);
that._attachStaticEvents(options, wrapper);
if (autoHideAfter > 0) {
setTimeout(function () {
that._hideStatic(wrapper);
}, autoHideAfter);
}
},
_hideStatic: function (wrapper) {
wrapper.kendoAnimate(extend(this.options.animation.close || false, {
complete: function () {
wrapper.off(NS).find(KICLOSE).off(NS);
wrapper.remove();
}
}));
this._triggerHide(wrapper);
},
_triggerHide: function (element) {
this.trigger(HIDE, { element: element });
this.angular('cleanup', function () {
return { elements: element };
});
},
show: function (content, type) {
var that = this, options = that.options, wrapper = $(WRAPPER), args, defaultArgs;
if (!type) {
type = INFO;
}
if (content !== null && content !== undefined && content !== '') {
if (kendo.isFunction(content)) {
content = content();
}
defaultArgs = {
typeIcon: type,
content: ''
};
if ($.isPlainObject(content)) {
args = extend(defaultArgs, content);
} else {
args = extend(defaultArgs, { content: content });
}
wrapper.addClass(KNOTIFICATION + '-' + type).toggleClass(KNOTIFICATION + '-button', options.button).attr('data-role', 'alert').css({
width: options.width,
height: options.height
}).append(that._getCompiled(type)(args));
that.angular('compile', function () {
return {
elements: wrapper,
data: [{ dataItem: args }]
};
});
if ($(options.appendTo)[0]) {
that._showStatic(wrapper, options);
} else {
that._showPopup(wrapper, options);
}
that.trigger(SHOW, { element: wrapper });
}
return that;
},
info: function (content) {
return this.show(content, INFO);
},
success: function (content) {
return this.show(content, SUCCESS);
},
warning: function (content) {
return this.show(content, WARNING);
},
error: function (content) {
return this.show(content, ERROR);
},
hide: function () {
var that = this, openedNotifications = that.getNotifications();
if (that.options.appendTo) {
openedNotifications.each(function (idx, element) {
that._hideStatic($(element));
});
} else {
openedNotifications.each(function (idx, element) {
var popup = $(element).data('kendoPopup');
if (popup) {
that._hidePopup(popup);
}
});
}
return that;
},
getNotifications: function () {
var that = this, guidElements = $('.' + that._guid);
if (that.options.appendTo) {
return guidElements;
} else {
return guidElements.children('.' + KNOTIFICATION);
}
},
setOptions: function (newOptions) {
var that = this, options;
Widget.fn.setOptions.call(that, newOptions);
options = that.options;
if (newOptions.templates !== undefined) {
that._compileTemplates(options.templates);
}
if (newOptions.stacking !== undefined || newOptions.position !== undefined) {
that._compileStacking(options.stacking, options.position.top, options.position.left);
}
},
destroy: function () {
Widget.fn.destroy.call(this);
this.getNotifications().off(NS).find(KICLOSE).off(NS);
}
});
kendo.ui.plugin(Notification);
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));