diff -r 00bfb7b29d9e -r 391ad752903e src/pyams_skin/resources/js/myams-widgets.js --- a/src/pyams_skin/resources/js/myams-widgets.js Mon Jan 18 18:41:23 2016 +0100 +++ b/src/pyams_skin/resources/js/myams-widgets.js Mon Jan 18 18:45:59 2016 +0100 @@ -4,12 +4,15 @@ * ©2014 Thierry Florac */ -(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 = ''; - else + (self.customClass[0].length !== 0)) { + customBtn = ''; + } else { customBtn = ""; - if (widgetOptions.deleteButton && (data.widgetDeleteButton === undefined)) - var deleteBtn = '' + - ''; - else + } + if (widgetOptions.deleteButton && (data.widgetDeleteButton === undefined)) { + deleteBtn = '' + + ''; + } else { deleteBtn = ""; + } if (widgetOptions.editButton && (data.widgetEditButton === undefined)) { var editClass = widgetOptions.editClass.split('|')[0]; - var editBtn = '' + - ''; - } else + editBtn = '' + + ''; + } else { editBtn = ""; + } if (widgetOptions.fullscreenButton && (data.widgetFullscreenButton === undefined)) { var fullscreenClass = widgetOptions.fullscreenClass.split('|')[0]; - var fullscreenBtn = '' + - ''; - } else + fullscreenBtn = '' + + ''; + } 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 = '' + - ''; - } else + } + toggleBtn = '' + + ''; + } else { toggleBtn = ""; + } if (widgetOptions.refreshButton && (data.widgetRefreshButton === undefined) && - data.widgetLoad) - var refreshBtn = '' + - ''; - else + data.widgetLoad) { + refreshBtn = '' + + ''; + } 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('
' + buttons + '
'); - 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(''); 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(); @@ -392,8 +449,9 @@ 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('
') @@ -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);