src/ztfy/myams/resources/js/myams-widgets.js
changeset 142 0201f1422bd7
parent 62 2f2dadb6b993
child 206 02a40997d8cb
--- a/src/ztfy/myams/resources/js/myams-widgets.js	Tue Nov 17 12:04:26 2015 +0100
+++ b/src/ztfy/myams/resources/js/myams-widgets.js	Tue Nov 17 12:05:38 2015 +0100
@@ -4,12 +4,15 @@
  * ©2014 Thierry Florac <tflorac@ulthar.net>
  */
 
-(function($) {
+(function($, globals) {
+
+	'use strict';
 
 	/* Private functions */
 	function checkValue(value) {
-		if (value < 10)
+		if (value < 10) {
 			value = '0' + value;
+		}
 		return value;
 	}
 
@@ -24,12 +27,15 @@
 		return options.timestampFormat.replace(/%d%/g, day)
 									  .replace(/%m%/g, month)
 									  .replace(/%y%/g, year)
-									  .replace(/%h%/g, hour)
+									  .replace(/%h%/g, hours)
 									  .replace(/%i%/g, minutes)
 									  .replace(/%s%/g, seconds);
 	}
 
 
+	var MyAMS = globals.MyAMS;
+
+
 	function Widget(element, options) {
 		this.widget = element;
 		this.options = $.extend({}, MyAMSWidget.defaults, options);
@@ -44,51 +50,69 @@
 		this.init();
 	}
 
-
 	Widget.prototype = {
 
 		init: function() {
 			var self = this;
-			if (self.options.rtl === true)
+			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 (var key in position.grid) {
+					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)
+						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 (var key in settings.widget) {
-						var widget = settings.widget[key];
+					for (key in settings.widget) {
+						if (!settings.widget.hasOwnProperty(key)) {
+							continue;
+						}
+						widget = settings.widget[key];
 						var widgetId = $('#' + widget.id);
-						if (widget.style)
+						if (widget.style) {
 							widgetId.removeClassPrefix('ams-widget-color-')
 									.addClass(widget.style)
 									.attr('data-widget-attstyle', widget.style);
-						if (widget.hidden == 1)
+						}
+						if (widget.hidden === 1) {
 							widgetId.hide(1);
-						else
+						} else {
 							widgetId.show(1)
 									.removeAttr('data-widget-hidden');
-						if (widget.collapsed == 1)
+						}
+						if (widget.collapsed === 1) {
 							widgetId.addClass('ams-widget-collapsed')
 									.children('div')
 									.hide(1);
+						}
 						var title = widgetId.children('header').children('h2');
-						if (title.text() != widget.title)
+						if (title.text() !== widget.title) {
 							title.text(widget.title);
+						}
 					}
 				}
 			}
-			var widget = self.widget;
+			widget = self.widget;
 			var data = widget.data();
 			var data_options = {
 				grid: data.amsWidgetGrid,
@@ -142,65 +166,85 @@
 			var widgetOptions = $.extend({}, self.options, data_options);
 			var header = widget.children('header');
 			if (!header.parent().attr('role')) {
-				if (data.widgetHidden === true)
+
+				var customBtn,
+					deleteBtn,
+					editBtn,
+					fullscreenBtn,
+					toggleBtn,
+					refreshBtn;
+				if (data.widgetHidden === true) {
 					widget.hide();
-				if (data.widgetCollapsed === true)
+				}
+				if (data.widgetCollapsed === true) {
 					widget.addClass('ams-widget-collapsed')
 						  .children('div').hide();
+				}
 				if (widgetOptions.customButton &&
 					(data.widgetCustombutton === undefined) &&
-					(self.customClass[0].length != 0))
-					var customBtn = '<a href="#" class="button-icon ams-widget-custom-btn"><i class="' + self.customClass[0] + '"></i></a>';
-				else
+					(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))
-					var 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
+				}
+				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];
-					var 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 = '<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];
-					var 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 = '<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'))
-						var toggleSettings = toggleClass[1];
-					else
+						widget.hasClass('ams-widget-collapsed')) {
+						toggleSettings = toggleClass[1];
+					} else {
 						toggleSettings = toggleClass[0];
-					var 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 = '<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)
-					var 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
+					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)
+				if (refreshBtn || customBtn || editBtn || toggleBtn || fullscreenBtn || deleteBtn) {
 					header.prepend('<div class="ams-widget-ctrls">' + buttons + '</div>');
-				if (widgetOptions.sortable && (data.widgetSortable === undefined))
+				}
+				if (widgetOptions.sortable && (data.widgetSortable === undefined)) {
 					widget.addClass('ams-widget-sortable');
+				}
 				var placeholder = widget.find(widgetOptions.editPlaceholder);
-				if (placeholder.length > 0)
+				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')
@@ -209,8 +253,9 @@
 				MyAMS.plugins.enabled.hint(header);
 			}
 			widget.data('widget-options', widgetOptions);
-			if (self.options.hiddenButtons)
+			if (self.options.hiddenButtons) {
 				$(self.controls).hide();
+			}
 			widget.find("[data-widget-load]").each(function() {
 				var item = $(this),
 					header = item.children(),
@@ -224,8 +269,9 @@
 						setInterval(function() {
 							self._loadAjaxFile(item, path, header);
 						}, reloadTime);
-					} else
+					} else {
 						self._loadAjaxFile(item, path, header);
+					}
 				}
 			});
 			if (self.options.hiddenButtons) {
@@ -237,26 +283,30 @@
 			}
 			self._setClickEvents();
 			$(self.options.deleteSettingsKey).on(self.clickEvent, this, function(e) {
-				if (self.storage) {
-					var cleared = confirm(self.options.settingsKeyLabel);
-					if (cleared)
+				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) {
-					var cleared = confirm(self.options.positionKeyLabel);
-					if (cleared)
+				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)
+				if (self.settingsKey === null || self.settingsKey.length < 1) {
 					self._saveWidgetSettings();
-				if (self.positionKey === null || self.positionKey.length < 1)
+				}
+				if (self.positionKey === null || self.positionKey.length < 1) {
 					self._saveWidgetPosition();
+				}
 			}
 			self.grid.data('ams-widgets-loaded', true);
 		},
@@ -269,9 +319,9 @@
 
 		_getSettings: function() {
 			var self = this;
-			if (!self.hasGrid || !self.gridId)
+			if (!self.hasGrid || !self.gridId) {
 				self.storage = null;
-			else {
+			} else {
 				switch (self.options.storage) {
 					case 'local':
 						self.storage = localStorage;
@@ -283,14 +333,14 @@
 						self.storage = null;
 				}
 			}
-			var use_storage = (self.storage != null) && function() {
+			var use_storage = (self.storage !== null) && function() {
 				var result,
-					uid = +new Date;
+					uid = +new Date();
 				try {
 					self.storage.setItem(uid, uid);
-					result = self.storage.getItem(uid) == uid;
+					result = self.storage.getItem(uid) === uid;
 					self.storage.removeItem(uid);
-					return result
+					return result;
 				} catch (e) {}
 			}();
 			if (use_storage) {
@@ -299,21 +349,23 @@
 				self.positionKey = "AMS_position_" + location.pathname + location.hash + "_" + self.gridId;
 				self.position = self.storage.getItem(self.positionKey);
 			}
-			if (("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch) {
-				self.clickEvent = "touchstart"
+			if (("ontouchstart" in globals) ||
+				globals.DocumentTouch && globals.document instanceof globals.DocumentTouch) {
+				self.clickEvent = "touchstart";
 			} else {
-				self.clickEvent = "click"
+				self.clickEvent = "click";
 			}
 		},
 
 		_runLoaderWidget: function(widget) {
 			var self = this;
-			if (self.options.indicator)
+			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) {
@@ -336,10 +388,12 @@
 					gridSettings.push(widgetSettings);
 				});
 				var gridSettingsStr = JSON.stringify({widget: gridSettings});
-				if (self.settings != gridSettingsStr)
+				if (self.settings !== gridSettingsStr) {
 					self.storage.setItem(self.settingsKey, gridSettingsStr);
-				if (typeof(self.options.onSave) == 'function')
+				}
+				if (typeof(self.options.onSave) === 'function') {
 					self.options.onSave.call(this, null, gridSettings);
+				}
 			}
 		},
 
@@ -353,24 +407,27 @@
 					$(this).children(self.options.widgets).each(function () {
 						var subObj = {};
 						subObj.id = $(this).attr("id");
-						subgridPosition.push(subObj)
+						subgridPosition.push(subObj);
 					});
 					var out = {section: subgridPosition};
-					gridPosition.push(out)
+					gridPosition.push(out);
 				});
 				var gridPositionStr = JSON.stringify({grid: gridPosition});
-				if (self.position != gridPositionStr)
+				if (self.position !== gridPositionStr) {
 					self.storage.setItem(self.positionKey, gridPositionStr);
-				if (typeof(self.options.onSave) == 'function')
+				}
+				if (typeof(self.options.onSave) === 'function') {
 					self.options.onSave.call(this, null, gridPosition);
+				}
 			}
 		},
 
 		_setClickEvents: function() {
 
 			function setFullscreenHeight() {
-				if ($('#ams-widget-fullscreen-mode').length > 0) {
-					var widgets = $('#ams-widget-fullscreen-mode').find(self.options.widgets);
+				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();
@@ -386,14 +443,15 @@
 			self.widget.on(self.clickEvent, '.ams-widget-toggle-btn', function(e) {
 				e.preventDefault();
 				var button = $(this);
-				var widget = button.parents(self.options.widgets);
+				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)
+					if (widgetOptions.onToggle) {
 						canToggle = widgetOptions.onToggle.call(this, widget, 'expand');
+					}
 					if (canToggle !== false) {
 						button.children().removeClass(toggleClass[1])
 										 .addClass(toggleClass[0]);
@@ -403,8 +461,9 @@
 							  });
 					}
 				} else {
-					if (widgetOptions.onToggle)
+					if (widgetOptions.onToggle) {
 						canToggle = widgetOptions.onToggle.call(this, widget, 'collapse');
+					}
 					if (canToggle !== false) {
 						button.children().removeClass(toggleClass[0])
 										 .addClass(toggleClass[1]);
@@ -441,9 +500,10 @@
 						  .parents(self.controls)
 						  .children('a')
 						  .show();
-					if (content.hasClass('ams-widget-visible'))
+					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>')
@@ -455,13 +515,15 @@
 						  .parents(self.controls)
 						  .children('a:not(.ams-widget-fullscreen-btn)')
 						  .hide();
-					if (content.is(':hidden'))
+					if (content.is(':hidden')) {
 						content.show()
 							   .addClass('ams-widget-visible');
+					}
 				}
 				setFullscreenHeight();
-				if (typeof(widgetOptions.onFullscreen) == 'function')
+				if (typeof(widgetOptions.onFullscreen) === 'function') {
 					widgetOptions.onFullscreen.call(this, widget);
+				}
 			});
 			$(window).resize(function() {
 				setFullscreenHeight();
@@ -489,8 +551,9 @@
 						  .addClass(editClass[1]);
 					placeholder.slideDown(widgetOptions.editSpeed);
 				}
-				if (typeof(widgetOptions.onEdit) == 'function')
+				if (typeof(widgetOptions.onEdit) === 'function') {
 					widgetOptions.onEdit.call(this, widget);
+				}
 			});
 			$(self.options.editPlaceholder).find('input').keyup(function() {
 				$(this).parents(self.options.widgets)
@@ -511,13 +574,15 @@
 					button.children()
 						  .removeClass(customClass[0])
 						  .addClass(customClass[1]);
-					if (typeof(widgetOptions.customStart) == 'function')
+					if (typeof(widgetOptions.customStart) === 'function') {
 						widgetOptions.customStart.call(this, widget);
+					}
 				} else {
 					button.children('.' + customClass[1])
-						  .addClass(customClass[0]);
-					if (typeof(widgetOptions.customEnd) == 'function')
+							.addClass(customClass[0]);
+					if (typeof(widgetOptions.customEnd) === 'function') {
 						widgetOptions.customEnd.call(this, widget);
+					}
 				}
 				self._saveWidgetSettings();
 			});
@@ -538,12 +603,13 @@
 											content: MyAMSWidget.i18n.DELETE_MSG,
 											buttons: "[" + MyAMS.i18n.BTN_OK + "][" + MyAMS.i18n.BTN_CANCEL + "]"
 										}, function(buttonPressed) {
-											if (buttonPressed == MyAMS.i18n.BTN_OK) {
+											if (buttonPressed === MyAMS.i18n.BTN_OK) {
 												self._runLoaderWidget(widget);
 												$('#' + wId).fadeOut(widgetOptions.deleteSpeed, function() {
 													button.remove();
-													if (typeof(widgetOptions.onDelete) == 'function')
+													if (typeof(widgetOptions.onDelete) === 'function') {
 														widgetOptions.onDelete.call(this, widget);
+													}
 												});
 											}
 										});
@@ -566,10 +632,10 @@
 				}, 1000);
 			});
 		}
-	}
+	};
 
 
-	MyAMSWidget = {
+	var MyAMSWidget = {
 
 		i18n: $.extend({
 			SETTINGS_KEY_LABEL: "Reset settings?",
@@ -589,8 +655,9 @@
 		}, MyAMS.plugins.i18n.widgets),
 
 		initWidgetsGrid: function(grid) {
-			if (!grid.exists())
+			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]");
@@ -611,14 +678,14 @@
 						var widget = ui.item.data('AMSWidget');
 						widget._runLoaderWidget(widget.widget);
 						widget._saveWidgetPosition();
-						if (typeof(options.onChange) == 'function')
+						if (typeof(options.onChange) === 'function') {
 							options.onChange.call(this, ui.item);
+						}
 					}
 				});
 			}
 		}
-	}
-
+	};
 
 	MyAMSWidget.defaults = {
 		grid: '.ams-widget-grid',
@@ -679,7 +746,9 @@
 		onChange : null,
 		onSave : null,
 		ajax_nav : MyAMS.ajax_nav
-	}
+	};
+
+	globals.MyAMSWidget = MyAMSWidget;
 
 
 	$.fn.extend({
@@ -750,4 +819,4 @@
 
 	});
 
-})(jQuery);
+})(jQuery, this);