src/pyams_skin/resources/js/myams-widgets.js
changeset 566 a1707c607eec
parent 565 318533413200
child 567 bca1726b1d85
--- a/src/pyams_skin/resources/js/myams-widgets.js	Sun Jul 19 02:02:20 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,829 +0,0 @@
-/*
- * MyAMS extensions for widgets handling
- * Version 0.1.0
- * ©2014 Thierry Florac <tflorac@ulthar.net>
- */
-
-(function($, globals) {
-
-	'use strict';
-
-	/* Private functions */
-	function checkValue(value) {
-		if (value < 10) {
-			value = '0' + value;
-		}
-		return value;
-	}
-
-	function getPastTimeStamp(value, options) {
-		var date = new Date(value);
-		var month = checkValue(date.getMonth() + 1);
-		var day = checkValue(date.getDate());
-		var year = checkValue(date.getFullYear());
-		var hours = checkValue(date.getHours());
-		var minutes = checkValue(date.getMinutes());
-		var seconds = checkValue(date.getSeconds());
-		return options.timestampFormat.replace(/%d%/g, day)
-			.replace(/%m%/g, month)
-			.replace(/%y%/g, year)
-			.replace(/%h%/g, hours)
-			.replace(/%i%/g, minutes)
-			.replace(/%s%/g, seconds);
-	}
-
-
-	var ams = globals.MyAMS;
-
-
-	function Widget(element, options) {
-		this.widget = element;
-		this.options = $.extend({}, MyAMSWidget.defaults, options);
-		this.grid = this.widget.parents(this.options.grid);
-		this.hasGrid = this.grid.exists();
-		this.gridId = this.grid.attr('id');
-		this.controls = this.options.controls;
-		this.toggleClass = this.options.toggleClass.split('|');
-		this.editClass = this.options.editClass.split('|');
-		this.fullscreenClass = this.options.fullscreenClass.split('|');
-		this.customClass = this.options.customClass.split('|');
-		this.init();
-	}
-
-	Widget.prototype = {
-
-		init: function() {
-			var self = this;
-			var widget;
-
-			if (self.options.rtl === true) {
-				$('body').addClass('rtl');
-			}
-			self.grid.each(function() {
-				$(this).addClass('sortable-grid');
-			});
-			self._getSettings();
-			if (self.hasGrid && self.storage) {
-
-				var key;
-				if (self.position) {
-					var position = JSON.parse(self.position);
-					for (key in position.grid) {
-						if (!position.grid.hasOwnProperty(key)) {
-							continue;
-						}
-						var changeOrder = self.grid.find(self.options.subgrid + '.sortable-grid').eq(key);
-						for (var key2 in position.grid[key].section) {
-							if (!position.grid[key].section.hasOwnProperty(key2)) {
-								continue;
-							}
-							changeOrder.append($('#' + position.grid[key].section[key2].id));
-						}
-					}
-				}
-				if (self.settings) {
-					var settings = JSON.parse(self.settings);
-					for (key in settings.widget) {
-						if (!settings.widget.hasOwnProperty(key)) {
-							continue;
-						}
-						widget = settings.widget[key];
-						if (!widget.id) {
-							continue;
-						}
-						var mywidget = $('#' + widget.id);
-						if (!mywidget.exists()) {
-							continue;
-						}
-						if (widget.style) {
-							mywidget.removeClassPrefix('ams-widget-color-')
-								.addClass(widget.style)
-								.attr('data-widget-attstyle', widget.style);
-						}
-						if (widget.hidden === 1) {
-							mywidget.hide(1);
-						} else {
-							mywidget.show(1)
-								.removeAttr('data-widget-hidden');
-						}
-						if (widget.collapsed === 1) {
-							mywidget.addClass('ams-widget-collapsed')
-								.children('div')
-								.hide(1);
-						}
-						var title = mywidget.children('header').children('h2');
-						if (title.text() !== widget.title) {
-							title.text(widget.title);
-						}
-					}
-				}
-			}
-			widget = self.widget;
-			var data = widget.data();
-			var data_options = {
-				grid: data.amsWidgetGrid,
-				subgrid: data.amsWudgetSubgrid,
-				widgets: data.amsWidgetWidgets,
-				controls: data.amsWidgetControls,
-				storage: data.amsWidgetStorage,
-				deleteSettingsKey: data.amsWidgetDeleteSettingsKey,
-				deletePositionKey: data.amsWidgetDeletePositionKey,
-				sortable: data.amsWidgetSortable,
-				hiddenButtons: data.amsWidgetHiddenButtons,
-				toggleButton: data.amsWidgetToggleButton,
-				toggleClass: data.amsWidgetToggleClass,
-				onToggle: ams.getFunctionByName(data.amsWidgetToggleCallback),
-				deleteButton: data.amsWidgetDeleteButton,
-				deleteClass: data.amsWidgetDeleteClass,
-				onDelete: ams.getFunctionByName(data.amsWidgetDeleteCallback),
-				editButton: data.amsWidgetEditButton,
-				editPlaceholder: data.amsWidgetEditPlaceholder,
-				editClass: data.amsWidgetEditClass,
-				onEdit: ams.getFunctionByName(data.amsWidgetEditCallback),
-				fullscreenButton: data.amsWidgetFullscreenButton,
-				fullscreenClass: data.amsWidgetFullscreenClass,
-				fullscreenDiff: data.amsWidgetFullscreenDiff,
-				onFullscreen: ams.getFunctionByName(data.amsWidgetFullscreenCallback),
-				customButton: data.amsWidgetCustomButton,
-				customClass: data.amsWidgetCustomClass,
-				customStart: ams.getFunctionByName(data.amsWidgetCustomStartCallback),
-				customEnd: ams.getFunctionByName(data.amsWidgetCustomEndCallback),
-				buttonsOrder: data.amsWidgetButtonsOrder,
-				opacity: data.amsWidgetOpacity,
-				dragHandle: data.amsWidgetDragHandle,
-				placeholderClass: data.amsWidgetPlaceholderClass,
-				indicator: data.amsWidgetIndicator,
-				indicatorTime: data.amsWidgetIndicatorTime,
-				ajax: data.amsWidgetAjax,
-				timestampPlaceholder: data.amsWidgetTimestampPlaceholder,
-				timestampFormat: data.amsWidgetTimestampFormat,
-				refreshButton: data.amsWidgetRefreshButton,
-				refreshClass: data.amsWidgetRefreshClass,
-				errorLabel: data.amsWidgetErrorLabel,
-				updatedLabel: data.amsWidgetUpdatedLabel,
-				refreshLabel: data.amsWidgetRefreshLabel,
-				deleteLabel: data.amsWidgetDeleteLabel,
-				afterLoad: ams.getFunctionByName(data.amsWidgetAfterLoadCallback),
-				rtl: data.amsWidgetRtl,
-				onChange: ams.getFunctionByName(data.amsWidgetChangeCallback),
-				onSave: ams.getFunctionByName(data.amsWidgetSaveCallback),
-				ajax_nav: ams.ajax_nav
-			};
-			var widgetOptions = $.extend({}, self.options, data_options);
-			var header = widget.children('header');
-			if (!header.parent().attr('role')) {
-
-				var customBtn,
-					deleteBtn,
-					editBtn,
-					fullscreenBtn,
-					toggleBtn,
-					refreshBtn;
-				if (data.widgetHidden === true) {
-					widget.hide();
-				}
-				if (data.widgetCollapsed === true) {
-					widget.addClass('ams-widget-collapsed')
-						.children('div').hide();
-				}
-				if (widgetOptions.customButton &&
-					(data.widgetCustombutton === undefined) &&
-					(self.customClass[0].length !== 0)) {
-					customBtn = '<a href="#" class="button-icon ams-widget-custom-btn"><i class="' + self.customClass[0] + '"></i></a>';
-				} else {
-					customBtn = "";
-				}
-				if (widgetOptions.deleteButton && (data.widgetDeleteButton === undefined)) {
-					deleteBtn = '<a href="#" class="button-icon ams-widget-delete-btn hint" title="' + MyAMSWidget.i18n.DELETE_BTN + '" data-ams-hint-gravity="se">' +
-						'<i class="' + widgetOptions.deleteClass + '"></i></a>';
-				} else {
-					deleteBtn = "";
-				}
-				if (widgetOptions.editButton && (data.widgetEditButton === undefined)) {
-					var editClass = widgetOptions.editClass.split('|')[0];
-					editBtn = '<a href="#" class="button-icon ams-widget-edit-btn hint" title="' + MyAMSWidget.i18n.EDIT_BTN + '" data-ams-hint-gravity="se">' +
-						'<i class="' + editClass + '"></i></a>';
-				} else {
-					editBtn = "";
-				}
-				if (widgetOptions.fullscreenButton && (data.widgetFullscreenButton === undefined)) {
-					var fullscreenClass = widgetOptions.fullscreenClass.split('|')[0];
-					fullscreenBtn = '<a href="#" class="button-icon ams-widget-fullscreen-btn hint" title="' + MyAMSWidget.i18n.FULLSCREEN_BTN + '" data-ams-hint-gravity="se">' +
-						'<i class="' + fullscreenClass + '"></i></a>';
-				} else {
-					fullscreenBtn = "";
-				}
-				if (widgetOptions.toggleButton && (data.widgetToggleButton === undefined)) {
-					var toggleClass = widgetOptions.toggleClass.split('|');
-					var toggleSettings;
-					if ((widget.dataWidgetCollapsed === true) ||
-						widget.hasClass('ams-widget-collapsed')) {
-						toggleSettings = toggleClass[1];
-					} else {
-						toggleSettings = toggleClass[0];
-					}
-					toggleBtn = '<a href="#" class="button-icon ams-widget-toggle-btn hint" title="' + MyAMSWidget.i18n.COLLAPSE_BTN + '" data-ams-hint-gravity="se">' +
-						'<i class="' + toggleSettings + '"></i></a>';
-				} else {
-					toggleBtn = "";
-				}
-				if (widgetOptions.refreshButton &&
-					(data.widgetRefreshButton === undefined) &&
-					data.widgetLoad) {
-					refreshBtn = '<a href="#" class="button-icon ams-widget-refresh-btn hint" title="' + MyAMSWidget.i18n.REFRESH_BTN + '" data-loading-text="&nbsp;&nbsp;' + MyAMSWidget.i18n.LOADING_MSG + '&nbsp;" data-ams-hint-gravity="se">' +
-						'<i class="' + widgetOptions.refreshClass + '"></i></a>';
-				} else {
-					refreshBtn = "";
-				}
-				var buttons = widgetOptions.buttonsOrder.replace(/%refresh%/, refreshBtn)
-					.replace(/%custom%/, customBtn)
-					.replace(/%edit%/, editBtn)
-					.replace(/%toggle%/, toggleBtn)
-					.replace(/%fullscreen%/, fullscreenBtn)
-					.replace(/%delete%/, deleteBtn);
-				if (refreshBtn || customBtn || editBtn || toggleBtn || fullscreenBtn || deleteBtn) {
-					header.prepend('<div class="ams-widget-ctrls">' + buttons + '</div>');
-				}
-				if (widgetOptions.sortable && (data.widgetSortable === undefined)) {
-					widget.addClass('ams-widget-sortable');
-				}
-				var placeholder = widget.find(widgetOptions.editPlaceholder);
-				if (placeholder.length > 0) {
-					placeholder.find('input').val($.trim(header.children('h2').text()));
-				}
-				header.append('<span class="ams-widget-loader"><i class="fa fa-refresh fa-spin"></i></span>');
-				widget.attr('role', 'widget')
-					.children('div').attr('role', 'content')
-					.prev('header').attr('role', 'heading')
-					.children('div').attr('role', 'menu');
-				ams.plugins && ams.plugins.enabled.hint && ams.plugins.enabled.hint(header);
-			}
-			widget.data('widget-options', widgetOptions);
-			if (self.options.hiddenButtons) {
-				$(self.controls).hide();
-			}
-			widget.find("[data-widget-load]").each(function() {
-				var item = $(this),
-					header = item.children(),
-					path = item.data('widget-load'),
-					reloadTime = item.data('widget-refresh') * 1000,
-					loader = header;
-				if (item.find('.ams-widget-ajax-placeholder').length <= 0) {
-					item.children('widget-body').append('<div class="ams-widget-ajax-placeholder">' + self.options.loadingLabel + "</div>");
-					if (reloadTime > 0) {
-						self.loadAjaxFile(item, path, header);
-						setInterval(function() {
-							self._loadAjaxFile(item, path, header);
-						}, reloadTime);
-					} else {
-						self._loadAjaxFile(item, path, header);
-					}
-				}
-			});
-			if (self.options.hiddenButtons) {
-				self.widget.children('header').hover(function() {
-					$(this).children(self.controls).stop(true, true).fadeTo(100, 1);
-				}, function() {
-					$(this).children(self.controls).stop(true, true).fadeTo(100, 0);
-				});
-			}
-			self._setClickEvents();
-			$(self.options.deleteSettingsKey).on(self.clickEvent, this, function(e) {
-				if (self.storage && globals.confirm) {
-					var cleared = globals.confirm(self.options.settingsKeyLabel);
-					if (cleared) {
-						self.storage.removeItem(self.settingsKey);
-					}
-				}
-				e.preventDefault();
-			});
-			$(self.options.deletePositionKey).on(self.clickEvent, this, function(e) {
-				if (self.storage && globals.confirm) {
-					var cleared = globals.confirm(self.options.positionKeyLabel);
-					if (cleared) {
-						self.storage.removeItem(self.positionKey);
-					}
-				}
-				e.preventDefault();
-			});
-			if (self.storage) {
-				if (self.settingsKey === null || self.settingsKey.length < 1) {
-					self._saveWidgetSettings();
-				}
-				if (self.positionKey === null || self.positionKey.length < 1) {
-					self._saveWidgetPosition();
-				}
-			}
-			self.grid.data('ams-widgets-loaded', true);
-		},
-
-		destroy: function() {
-			var self = this;
-			self.widgets.off('click', self._setClickEvents());
-			self.element.removeData('AMSWidget');
-		},
-
-		_getSettings: function() {
-			var self = this;
-			if (!self.hasGrid || !self.gridId) {
-				self.storage = null;
-			} else {
-				switch (self.options.storage) {
-					case 'local':
-						self.storage = localStorage;
-						break;
-					case 'session':
-						self.storage = sessionStorage;
-						break;
-					default:
-						self.storage = null;
-				}
-			}
-			var use_storage = (self.storage !== null) && function() {
-				var result,
-					uid = +new Date();
-				try {
-					self.storage.setItem(uid, uid);
-					result = parseInt(self.storage.getItem(uid)) === uid;
-					self.storage.removeItem(uid);
-					return result;
-				} catch (e) {
-				}
-			}();
-			if (use_storage) {
-				self.settingsKey = "AMS_settings_" + location.pathname + location.hash + "_" + self.gridId;
-				self.settings = self.storage.getItem(self.settingsKey);
-				self.positionKey = "AMS_position_" + location.pathname + location.hash + "_" + self.gridId;
-				self.position = self.storage.getItem(self.positionKey);
-			}
-			if (("ontouchstart" in globals) ||
-				globals.DocumentTouch && globals.document instanceof globals.DocumentTouch) {
-				self.clickEvent = "touchstart";
-			} else {
-				self.clickEvent = "click";
-			}
-		},
-
-		_runLoaderWidget: function(widget) {
-			var self = this;
-			if (self.options.indicator) {
-				widget.find('.ams-widget-loader')
-					.stop(true, true)
-					.fadeIn(100)
-					.delay(self.options.indicatorTime)
-					.fadeOut(100);
-			}
-		},
-
-		_loadAjaxFile: function(url, widget, loader) {
-			ams.skin && ams.skin.loadURL(url, widget.find('.widget-body'));
-		},
-
-		_saveWidgetSettings: function() {
-			var self = this;
-			self._getSettings();
-			if (self.storage) {
-				var gridSettings = [];
-				self.grid.find(self.options.widgets).each(function() {
-					var widget = $(this);
-					var widgetSettings = {};
-					widgetSettings.id = widget.attr('id');
-					widgetSettings.style = widget.attr('data-widget-attstyle');
-					widgetSettings.title = widget.children('header').children('h2').text();
-					widgetSettings.hidden = widget.is(':hidden') ? 1 : 0;
-					widgetSettings.collapsed = widget.hasClass('ams-widget-collapsed') ? 1 : 0;
-					gridSettings.push(widgetSettings);
-				});
-				var gridSettingsStr = JSON.stringify({widget: gridSettings});
-				if (self.settings !== gridSettingsStr) {
-					self.storage.setItem(self.settingsKey, gridSettingsStr);
-				}
-				if (typeof (self.options.onSave) === 'function') {
-					self.options.onSave.call(this, null, gridSettings);
-				}
-			}
-		},
-
-		_saveWidgetPosition: function() {
-			var self = this;
-			self._getSettings();
-			if (self.storage) {
-				var gridPosition = [];
-				self.grid.find(self.options.subgrid + ".sortable-grid").each(function() {
-					var subgridPosition = [];
-					$(this).children(self.options.widgets).each(function() {
-						var subObj = {};
-						subObj.id = $(this).attr("id");
-						subgridPosition.push(subObj);
-					});
-					var out = {section: subgridPosition};
-					gridPosition.push(out);
-				});
-				var gridPositionStr = JSON.stringify({grid: gridPosition});
-				if (self.position !== gridPositionStr) {
-					self.storage.setItem(self.positionKey, gridPositionStr);
-				}
-				if (typeof (self.options.onSave) === 'function') {
-					self.options.onSave.call(this, null, gridPosition);
-				}
-			}
-		},
-
-		_setClickEvents: function() {
-
-			function setFullscreenHeight() {
-				var mode = $('#ams-widget-fullscreen-mode');
-				if (mode.length > 0) {
-					var widgets = mode.find(self.options.widgets);
-					var windowHeight = $(window).height();
-					var headerHeight = widgets.children('header')
-						.height();
-					widgets.children('div')
-						.height(windowHeight - headerHeight - 15);
-				}
-			}
-
-			var self = this;
-			self._getSettings();
-
-			// Toggle button
-			self.widget.on(self.clickEvent, '.ams-widget-toggle-btn', function(e) {
-				e.preventDefault();
-				var button = $(this);
-				var widget = button.parents(self.options.widgets).first();
-				var widgetOptions = widget.data('widget-options');
-				var toggleClass = widgetOptions.toggleClass.split('|');
-				self._runLoaderWidget(widget);
-				var canToggle = true;
-				if (widget.hasClass('ams-widget-collapsed')) {
-					if (widgetOptions.onToggle) {
-						canToggle = widgetOptions.onToggle.call(this, widget, 'expand');
-					}
-					if (canToggle !== false) {
-						button.children().removeClass(toggleClass[1])
-							.addClass(toggleClass[0]);
-						widget.removeClass('ams-widget-collapsed')
-							.children('[role=content]').slideDown(widgetOptions.toggleSpeed, function() {
-							self._saveWidgetSettings();
-						});
-					}
-				} else {
-					if (widgetOptions.onToggle) {
-						canToggle = widgetOptions.onToggle.call(this, widget, 'collapse');
-					}
-					if (canToggle !== false) {
-						button.children().removeClass(toggleClass[0])
-							.addClass(toggleClass[1]);
-						widget.addClass('ams-widget-collapsed')
-							.children('[role=content]').slideUp(widgetOptions.toggleSpeed, function() {
-							self._saveWidgetSettings();
-						});
-					}
-				}
-			});
-			self.widget.on('dblclick', 'header', function(e) {
-				$('.ams-widget-toggle-btn', this).click();
-			});
-
-			// Fullscreen button
-			self.widget.on(self.clickEvent, '.ams-widget-fullscreen-btn', function(e) {
-				e.preventDefault();
-				var button = $(this);
-				var widget = button.parents(self.options.widgets);
-				var widgetOptions = widget.data('widget-options');
-				var fullscreenClass = widgetOptions.fullscreenClass.split('|');
-				var content = widget.children('div');
-				self._runLoaderWidget(widget);
-				if ($('#ams-widget-fullscreen-mode').length > 0) {
-					$('.nooverflow').removeClass('nooverflow');
-					widget.unwrap('<div>')
-						.children('div')
-						.removeAttr('style')
-						.end()
-						.find('.ams-widget-fullscreen-btn')
-						.children()
-						.removeClass(fullscreenClass[1])
-						.addClass(fullscreenClass[0])
-						.parents(self.controls)
-						.children('a')
-						.show();
-					if (content.hasClass('ams-widget-visible')) {
-						content.hide()
-							.removeClass('ams-widget-visible');
-					}
-				} else {
-					$('body').addClass('nooverflow');
-					widget.wrap('<div id="ams-widget-fullscreen-mode"></div>')
-						.parent()
-						.find('.ams-widget-fullscreen-btn')
-						.children()
-						.removeClass(fullscreenClass[0])
-						.addClass(fullscreenClass[1])
-						.parents(self.controls)
-						.children('a:not(.ams-widget-fullscreen-btn)')
-						.hide();
-					if (content.is(':hidden')) {
-						content.show()
-							.addClass('ams-widget-visible');
-					}
-				}
-				setFullscreenHeight();
-				if (typeof (widgetOptions.onFullscreen) === 'function') {
-					widgetOptions.onFullscreen.call(this, widget);
-				}
-			});
-			$(window).resize(function() {
-				setFullscreenHeight();
-			});
-
-			// Edit button
-			self.widget.on(self.clickEvent, '.ams-widget-edit-btn', function(e) {
-				e.preventDefault();
-				var button = $(this);
-				var widget = button.parents(self.options.widgets);
-				var widgetOptions = widget.data('widget-options');
-				var editClass = widgetOptions.editClass.split('|');
-				self._runLoaderWidget(widget);
-				var placeholder = widget.find(widgetOptions.editPlaceholder);
-				if (placeholder.is(':visible')) {
-					button.children()
-						.removeClass(editClass[1])
-						.addClass(editClass[0]);
-					placeholder.slideUp(widgetOptions.editSpeed, function() {
-						self._saveWidgetSettings();
-					});
-				} else {
-					button.children()
-						.removeClass(editClass[0])
-						.addClass(editClass[1]);
-					placeholder.slideDown(widgetOptions.editSpeed);
-				}
-				if (typeof (widgetOptions.onEdit) === 'function') {
-					widgetOptions.onEdit.call(this, widget);
-				}
-			});
-			$(self.options.editPlaceholder).find('input').keyup(function() {
-				$(this).parents(self.options.widgets)
-					.children('header')
-					.children('h2')
-					.text($(this).val());
-			});
-
-			// Custom button
-			self.widget.on(self.clickEvent, '.ams-widget-custom-btn', function(e) {
-				e.preventDefault();
-				var button = $(this);
-				var widget = button.parents(self.options.widgets);
-				var widgetOptions = widget.data('widget-options');
-				var customClass = widgetOptions.customClass.split('|');
-				self._runLoaderWidget(widget);
-				if (button.children('.' + customClass[0]).length > 0) {
-					button.children()
-						.removeClass(customClass[0])
-						.addClass(customClass[1]);
-					if (typeof (widgetOptions.customStart) === 'function') {
-						widgetOptions.customStart.call(this, widget);
-					}
-				} else {
-					button.children('.' + customClass[1])
-						.addClass(customClass[0]);
-					if (typeof (widgetOptions.customEnd) === 'function') {
-						widgetOptions.customEnd.call(this, widget);
-					}
-				}
-				self._saveWidgetSettings();
-			});
-
-			// Delete button
-			self.widget.on(self.clickEvent, '.ams-widget-delete-btn', function(e) {
-				e.preventDefault();
-				var button = $(this);
-				var widget = button.parents(self.options.widgets);
-				var widgetOptions = widget.data('widget-options');
-				var wId = widget.attr('id');
-				var title = widget.children('header').children('h2').text();
-				ams.ajax && ams.ajax.check(MyAMS.notify,
-										   ams.baseURL + 'myams-notify' + (ams.devmode ? '.js' : '.min.js'),
-										   function() {
-											   ams.notify.messageBox({
-																		 title: '<i class="fa fa-times" style="color: #ed1c24;"></i> ' + widgetOptions.deleteLabel + ' "' + title + '"',
-																		 content: MyAMSWidget.i18n.DELETE_MSG,
-																		 buttons: "[" + ams.i18n.BTN_OK + "][" + ams.i18n.BTN_CANCEL + "]"
-																	 }, function(buttonPressed) {
-												   if (buttonPressed === ams.i18n.BTN_OK) {
-													   self._runLoaderWidget(widget);
-													   $('#' + wId).fadeOut(widgetOptions.deleteSpeed, function() {
-														   button.remove();
-														   if (typeof (widgetOptions.onDelete) === 'function') {
-															   widgetOptions.onDelete.call(this, widget);
-														   }
-													   });
-												   }
-											   });
-										   });
-			});
-
-			// Refresh button
-			self.widget.on(self.clickEvent, '.ams-widget-refresh-btn', function(e) {
-				e.preventDefault();
-				var button = $(this);
-				var widget = button.parents(self.options.widgets);
-				var path = widget.data('widget-load');
-				var loader = widget.children();
-				button.button('loading');
-				loader.addClass('widget-body-ajax-loading');
-				setTimeout(function() {
-					button.button('reset');
-					loader.removeClass('widget-body-ajax-loading');
-					self._loadAjaxFile(widget, path, loader);
-				}, 1000);
-			});
-		}
-	};
-
-
-	var MyAMSWidget = {
-
-		i18n: $.extend({
-						   SETTINGS_KEY_LABEL: "Reset settings?",
-						   POSITION_KEY_LABEL: "Reset position?",
-						   TIMESTAMP_FORMAT: "Last update: %d%/%m%/%y% %h%:%i%:%s",
-						   ERROR_LABEL: "An error occured: ",
-						   UPDATED_LABEL: "Last update: ",
-						   REFRESH_LABEL: "Refresh",
-						   EDIT_BTN: "Edit title",
-						   DELETE_BTN: "Delete",
-						   DELETE_LABEL: "Remove component: ",
-						   DELETE_MSG: "WARNING: this action can't be undone!",
-						   FULLSCREEN_BTN: "Fullscreen",
-						   COLLAPSE_BTN: "Collapse",
-						   REFRESH_BTN: "Reload content",
-						   LOADING_MSG: "Loading..."
-					   }, ams.plugins.i18n.widgets),
-
-		initWidgetsGrid: function(grid) {
-			if (!grid.exists()) {
-				return;
-			}
-			var options = $('.ams-widget:first', grid).data('AMSWidget').options;
-			if (options.sortable && $.ui) {
-				var sortItem = grid.find('.sortable-grid').not("[data-widget-excludegrid]");
-				sortItem.sortable({
-									  items: sortItem.find('.ams-widget-sortable'),
-									  connectWith: sortItem,
-									  placeholder: options.placeholderClass,
-									  cursor: 'move',
-									  revert: true,
-									  opacity: options.opacity,
-									  delay: 200,
-									  cancel: '.button-icon, #ams-widget-fullscreen-mode >div',
-									  zIndex: 10000,
-									  handle: options.dragHandle,
-									  forcePlaceholderSize: true,
-									  forceHelperSize: true,
-									  update: function(event, ui) {
-										  var widget = ui.item.data('AMSWidget');
-										  widget._runLoaderWidget(widget.widget);
-										  widget._saveWidgetPosition();
-										  if (typeof (options.onChange) === 'function') {
-											  options.onChange.call(this, ui.item);
-										  }
-									  }
-								  });
-			}
-		}
-	};
-
-	MyAMSWidget.defaults = {
-		grid: '.ams-widget-grid',
-		subgrid: 'section',
-		widgets: '.ams-widget',
-		controls: '.ams-widget-ctrls',
-		storage: 'local',
-		deleteSettingsKey: '',
-		settingsKeyLabel: MyAMSWidget.i18n.SETTINGS_KEY_LABEL,
-		deletePositionKey: '',
-		positionKeyLabel: MyAMSWidget.i18n.POSITION_KEY_LABEL,
-		sortable: false,
-		hiddenButtons: false,
-		// Toggle button
-		toggleButton: false,
-		toggleClass: 'fa fa-minus|fa fa-plus',
-		toggleSpeed: 200,
-		onToggle: null,
-		// Delete button
-		deleteButton: false,
-		deleteClass: 'fa fa-times',
-		deleteSpeed: 200,
-		onDelete: null,
-		// Edit button
-		editButton: false,
-		editPlaceholder: '.ams-widget-editbox',
-		editClass: 'fa fa-cog|fa fa-save',
-		editSpeed: 200,
-		onEdit: null,
-		// Fullscreen button
-		fullscreenButton: false,
-		fullscreenClass: 'fa fa-expand|fa fa-compress',
-		fullscreenDiff: 3,
-		onFullscreen: null,
-		// Custom button
-		customButton: false,
-		customClass: 'folder-10|next-10',
-		customStart: null,
-		customEnd: null,
-		// Buttons order
-		buttonsOrder: '%refresh% %custom% %edit% %toggle% %fullscreen% %delete%',
-		opacity: 1.0,
-		dragHandle: '> header',
-		placeholderClass: 'ams-widget-placeholder',
-		indicator: true,
-		indicatorTime: 600,
-		ajax: true,
-		timestampPlaceholder: '.ams-widget-timestamp',
-		timestampFormat: MyAMSWidget.i18n.TIMESTAMP_FORMAT,
-		refreshButton: true,
-		refreshButtonClass: 'fa fa-refresh',
-		errorLabel: MyAMSWidget.i18n.ERROR_LABEL,
-		updatedLabel: MyAMSWidget.i18n.UPDATED_LABEL,
-		refreshLabel: MyAMSWidget.i18n.REFRESH_LABEL,
-		deleteLabel: MyAMSWidget.i18n.DELETE_LABEL,
-		afterLoad: null,
-		rtl: false,
-		onChange: null,
-		onSave: null,
-		ajax_nav: ams.ajax_nav
-	};
-
-	globals.MyAMSWidget = MyAMSWidget;
-
-
-	$.fn.extend({
-
-					MyAMSWidget: function(options) {
-						return this.each(function() {
-							var widget = $(this);
-							var data = widget.data('AMSWidget');
-							if (!data) {
-								var grid = widget.parents(options.grid || MyAMSWidget.defaults.grid);
-								var grid_options = {};
-								if (grid.exists()) {
-									var grid_data = grid.data();
-									grid_options = {
-										grid: grid_data.amsWidgetGrid,
-										subgrid: grid_data.amsWidgetSubgrid,
-										controls: grid_data.amsWidgetControls,
-										storage: grid_data.amsWidgetStorage,
-										deleteSettingsKey: grid_data.amsWidgetDeleteSettingsKey,
-										deletePositionKey: grid_data.amsWidgetDeletePositionKey,
-										sortable: grid_data.amsWidgetSortable,
-										hiddenButtons: grid_data.amsWidgetHiddenButtons,
-										toggleButton: grid_data.amsWidgetToggleButton,
-										toggleClass: grid_data.amsWidgetToggleClass,
-										onToggle: ams.getFunctionByName(grid_data.amsWidgetToggleCallback),
-										deleteButton: grid_data.amsWidgetDeleteButton,
-										deleteClass: grid_data.amsWidgetDeleteClass,
-										onDelete: ams.getFunctionByName(grid_data.amsWidgetDeleteCallback),
-										editButton: grid_data.amsWidgetEditButton,
-										editPlaceholder: grid_data.amsWidgetEditPlaceholder,
-										editClass: grid_data.amsWidgetEditClass,
-										onEdit: ams.getFunctionByName(grid_data.amsWidgetEditCallback),
-										fullscreenButton: grid_data.amsWidgetFullscreenButton,
-										fullscreenClass: grid_data.amsWidgetFullscreenClass,
-										fullscreenDiff: grid_data.amsWidgetFullscreenDiff,
-										onFullscreen: ams.getFunctionByName(grid_data.amsWidgetFullscreenCallback),
-										customButton: grid_data.amsWidgetCustomButton,
-										customClass: grid_data.amsWidgetCustomClass,
-										customStart: ams.getFunctionByName(grid_data.amsWidgetCustomStartCallback),
-										customEnd: ams.getFunctionByName(grid_data.amsWidgetCustomStartCallback),
-										buttonsOrder: grid_data.amsWidgetButtonsOrder,
-										opacity: grid_data.amsWidgetOpacity,
-										dragHandle: grid_data.amsWidgetDragHandle,
-										placeholderClass: grid_data.amsWidgetPlaceholderClass,
-										indicator: grid_data.amsWidgetIndicator,
-										indicatorTime: grid_data.amsWidgetIndicatorTime,
-										ajax: grid_data.amsWidgetAjax,
-										timestampPlaceholder: grid_data.amsWidgetTimestampPlaceholder,
-										timestampFormat: grid_data.amsWidgetTimestampFormat,
-										refreshButton: grid_data.amsWidgetRefreshButton,
-										refreshClass: grid_data.amsWidgetRefreshClass,
-										errorLabel: grid_data.amsWidgetErrorLabel,
-										updatedLabel: grid_data.amsWidgetUpdatedLabel,
-										refreshLabel: grid_data.amsWidgetRefreshLabel,
-										deleteLabel: grid_data.amsWidgetDeleteLabel,
-										afterLoad: ams.getFunctionByName(grid_data.amsWidgetAfterLoadCallback),
-										rtl: grid_data.amsWidgetRtl,
-										onChange: ams.getFunctionByName(grid_data.amsWidgetChangeCallback),
-										onSave: ams.getFunctionByName(grid_data.amsWidgetSaveCallback),
-										ajax_nav: ams.ajax_nav
-									};
-								}
-								var settings = $.fn.extend({}, grid_options, widget.data('ams-widget-options') || {}, options);
-								widget.data('AMSWidget', new Widget(widget, settings));
-							}
-						});
-					}
-
-				});
-
-})(jQuery, this);