1$(document).ready(function(){
2 var minimisedWidgets = null;
3 if(typeof(Storage) !== "undefined") {
4 minimisedWidgets = JSON.parse(localStorage.getItem("minimisedWidgets"));
5 }
6 if (!minimisedWidgets) {
7 minimisedWidgets = [];
8 }
9 $(".widget-minimise").click(function(e) {
10 e.preventDefault();
11 var obj = $(this);
12 var icon = obj.find('i'),
13 widget = obj.closest('.panel').data('widget');
14 if (icon.hasClass('fa-chevron-up')) {
15 obj.closest('.panel').find('.panel-body').slideUp('fast', function() {
16 icon.removeClass('fa-chevron-up').addClass('fa-chevron-down');
17 packery.shiftLayout();
18 });
19 if (minimisedWidgets.indexOf(widget) == -1) {
20 minimisedWidgets.push(widget);
21 }
22 } else {
23 obj.closest('.panel').find('.panel-body').slideDown('fast', function(e) {
24 icon.removeClass('fa-chevron-down').addClass('fa-chevron-up');
25 packery.fit(this);
26 packery.shiftLayout();
27 });
28 minimisedWidgets.splice(minimisedWidgets.indexOf(widget), 1);
29 }
30 if(typeof(Storage) !== "undefined") {
31 localStorage.setItem("minimisedWidgets", JSON.stringify(minimisedWidgets));
32 }
33 });
34 $(".widget-refresh").click(function(e) {
35 e.preventDefault();
36 var obj = $(this);
37 var icon = obj.find('i');
38 var widget = obj.closest('.panel').data('widget');
39 var panelBody = obj.closest('.panel').find('.panel-body');
40 icon.addClass('fa-spin');
41 refreshWidget(widget, 'refresh=1');
42 });
43 var completedToggle = false;
44 $(".widget-hide").click(function(e) {
45 e.preventDefault();
46 var obj = $(this),
47 widget = obj.closest('.panel').data('widget');
48 completedToggle = true;
49
50 $('#panel' + widget).slideUp('fast', function() {
51 $(this).addClass('hidden');
52 WHMCS.http.jqClient.post(WHMCS.adminUtils.getAdminRouteUrl('/widget/display/toggle/' + widget)).always(function() {
53 $('input[data-widget="' + widget + '"]').iCheck('uncheck');
54 completedToggle = false;
55 });
56 $('.home-widgets-container').masonry().masonry('reloadItems');
57 });
58 });
59
60 $(document).on('ifToggled', '.display-widget', function(event) {
61 var self = $(this),
62 widget = $(this).data('widget'),
63 widgetPanel = $('#panel' + widget);
64
65 if (completedToggle) {
66 return;
67 }
68
69 self.iCheck('disable');
70 if (self.prop('checked')) {
71 if (widgetPanel.hasClass('hidden')) {
72 self.parent('div').parent('label').parent('li').addClass('active');
73 widgetPanel.hide().removeClass('hidden').slideDown('fast', function() {
74 WHMCS.http.jqClient.post(WHMCS.adminUtils.getAdminRouteUrl('/widget/display/toggle/' + widget))
75 .always(function() {
76 $('.home-widgets-container').masonry().masonry('reloadItems');
77 widgetPanel.find('.widget-refresh').click();
78 if ($('#widgetSettingsDropdown').hasClass('open') === false) {
79 $('#widgetSettings').dropdown('toggle');
80 }
81 self.iCheck('enable');
82 });
83 });
84 }
85 } else {
86 if (widgetPanel.hasClass('hidden') === false) {
87 self.parent('div').parent('label').parent('li').removeClass('active');
88 widgetPanel.slideUp('fast', function() {
89 $(this).addClass('hidden');
90 $('.home-widgets-container').masonry().masonry('reloadItems');
91 WHMCS.http.jqClient.post(WHMCS.adminUtils.getAdminRouteUrl('/widget/display/toggle/' + widget), function() {
92 if ($('#widgetSettingsDropdown').hasClass('open') === false) {
93 $('#widgetSettings').dropdown('toggle');
94 }
95 }, 'json').always(function() {
96 self.iCheck('enable');
97 });
98 });
99 }
100 }
101 });
102
103 $('input.display-widget').each(function(){
104 var self = $(this),
105 label = self.next(),
106 label_text = label.text();
107
108 label.remove();
109 self.iCheck({
110 inheritID: true,
111 checkboxClass: 'icheckbox_flat-blue',
112 increaseArea: '20%'
113 });
114 });
115
116 if ($('.home-widgets-container').length) {
117 minimisedWidgets.forEach(function(currentValue) {
118 $('#panel' + currentValue).find('.panel-body').hide().end()
119 .find('i.fa-chevron-up').removeClass('fa-chevron-up').addClass('fa-chevron-down');
120 });
121
122 Packery.prototype.getPositions = function() {
123 return this.items.map(function(item) {
124 return item.element.getAttribute("data-widget")
125 });
126 };
127
128 // init Packery
129 grid = document.querySelector('.home-widgets-container'),
130 packery = new Packery(grid, {
131 itemSelector: '.dashboard-panel-item',
132 columnWidth: '.dashboard-panel-sizer',
133 percentPosition: true
134 });
135
136 packery.stamp(document.querySelector('.dashboard-panel-static-item'));
137
138 // init draggable
139 var items = grid.querySelectorAll('.dashboard-panel-item');
140 for (var i=0; i < items.length; i++) {
141 var itemElem = items[i],
142 draggie = new Draggabilly(itemElem, {handle: '.panel-title'} );
143 packery.bindDraggabillyEvents(draggie);
144 }
145
146 // Listeners
147
148 packery.on('removeComplete', function() {
149 packery.shiftLayout();
150 });
151
152 var isSaving = false;
153 packery.on('dragItemPositioned', function(items) {
154 packery.shiftLayout();
155 if (!$(".home-widgets-container").children("div.dashboard-panel-item").hasClass('is-dragging')){
156 if (!isSaving) {
157 isSaving = true;
158 setTimeout(function () {
159 saveWidgetPosition();
160 }, 1000);
161 }
162 }
163 });
164 }
165
166 function saveWidgetPosition() {
167 WHMCS.http.jqClient.post(WHMCS.adminUtils.getAdminRouteUrl('/widget/order'),
168 {
169 token: csrfToken,
170 order: packery.getPositions()
171 },
172 function(data) {
173 //do nothing
174 },
175 'json'
176 ).always(function() {
177 isSaving = false;
178 packery.shiftLayout();
179 });
180 }
181 //end of $(document).ready
182});
183
184var grid, packery;
185
186function refreshWidget(widgetName, requestString) {
187 var obj = $('.panel[data-widget="' + widgetName + '"]');
188 var panelBody = obj.find('.panel-body');
189 var icon = obj.find('i.fa-sync');
190 panelBody.addClass('panel-loading');
191 var jqxhr = WHMCS.http.jqClient.post(WHMCS.adminUtils.getAdminRouteUrl('/widget/refresh&widget=' + widgetName + '&' + requestString),
192 function(data) {
193 panelBody.html(data.widgetOutput);
194 panelBody.removeClass('panel-loading');
195 }, 'json')
196 .always(function() {
197 icon.removeClass('fa-spin');
198 });
199}
200