mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-11-03 20:45:58 +01:00 
			
		
		
		
	refactored widgets api call to render all at once rather than one area at a time, closes https://github.com/NodeBB/NodeBB/issues/2062
This commit is contained in:
		@@ -30,60 +30,56 @@
 | 
			
		||||
			ajaxify.widgets.reposition();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		function renderWidgets(location) {
 | 
			
		||||
			var area = $('#content [widget-area="' + location + '"]'),
 | 
			
		||||
				areaData = {
 | 
			
		||||
					location: location,
 | 
			
		||||
					template: template + '.tpl',
 | 
			
		||||
					url: url
 | 
			
		||||
				};
 | 
			
		||||
		function renderWidgets(locations) {
 | 
			
		||||
			var areaDatas = [];
 | 
			
		||||
 | 
			
		||||
			$.get(RELATIVE_PATH + '/api/widgets/render', areaData, function(renderedWidgets) {
 | 
			
		||||
				var html = '';
 | 
			
		||||
			$.get(RELATIVE_PATH + '/api/widgets/render', {
 | 
			
		||||
				locations: locations,
 | 
			
		||||
				template: template + '.tpl',
 | 
			
		||||
				url: url
 | 
			
		||||
			}, function(renderedAreas) {
 | 
			
		||||
				for (var x=0; x<renderedAreas.length; ++x) {
 | 
			
		||||
					var renderedWidgets = renderedAreas[x].widgets,
 | 
			
		||||
						location = renderedAreas[x].location,
 | 
			
		||||
						html = '';
 | 
			
		||||
 | 
			
		||||
				for (var i=0; i<renderedWidgets.length; ++i) {
 | 
			
		||||
					html += templates.parse(renderedWidgets[i].html, {});
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (!area.length && window.location.pathname.indexOf('/admin') === -1 && renderedWidgets.length) {
 | 
			
		||||
					if (location === 'footer' && !$('#content [widget-area="footer"]').length) {
 | 
			
		||||
						$('#content').append($('<div class="col-xs-12"><div widget-area="footer"></div></div>'));
 | 
			
		||||
					} else if (location === 'sidebar' && !$('#content [widget-area="sidebar"]').length) {
 | 
			
		||||
						$('#content > *').wrapAll($('<div class="col-lg-9 col-xs-12"></div>'));
 | 
			
		||||
						$('#content').append($('<div class="col-lg-3 col-xs-12"><div widget-area="sidebar"></div></div>'));
 | 
			
		||||
					} else if (location === 'header' && !$('#content [widget-area="header"]').length) {
 | 
			
		||||
						$('#content').prepend($('<div class="col-xs-12"><div widget-area="header"></div></div>'));
 | 
			
		||||
					for (var i=0; i<renderedWidgets.length; ++i) {
 | 
			
		||||
						html += templates.parse(renderedWidgets[i].html, {});
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					area = $('#content [widget-area="' + location + '"]');
 | 
			
		||||
					var area = $('#content [widget-area="' + location + '"]');
 | 
			
		||||
 | 
			
		||||
					if (!area.length && window.location.pathname.indexOf('/admin') === -1 && renderedWidgets.length) {
 | 
			
		||||
						if (location === 'footer' && !$('#content [widget-area="footer"]').length) {
 | 
			
		||||
							$('#content').append($('<div class="col-xs-12"><div widget-area="footer"></div></div>'));
 | 
			
		||||
						} else if (location === 'sidebar' && !$('#content [widget-area="sidebar"]').length) {
 | 
			
		||||
							$('#content > *').wrapAll($('<div class="col-lg-9 col-xs-12"></div>'));
 | 
			
		||||
							$('#content').append($('<div class="col-lg-3 col-xs-12"><div widget-area="sidebar"></div></div>'));
 | 
			
		||||
						} else if (location === 'header' && !$('#content [widget-area="header"]').length) {
 | 
			
		||||
							$('#content').prepend($('<div class="col-xs-12"><div widget-area="header"></div></div>'));
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						area = $('#content [widget-area="' + location + '"]');
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					area.html(html);
 | 
			
		||||
 | 
			
		||||
					if (!renderedWidgets.length) {
 | 
			
		||||
						area.addClass('hidden');
 | 
			
		||||
						ajaxify.widgets.reposition(location);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					$('#content [widget-area] img:not(.user-img)').addClass('img-responsive');	
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				area.html(html);
 | 
			
		||||
 | 
			
		||||
				if (!renderedWidgets.length) {
 | 
			
		||||
					area.addClass('hidden');
 | 
			
		||||
					ajaxify.widgets.reposition(location);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				$('#content [widget-area] img:not(.user-img)').addClass('img-responsive');
 | 
			
		||||
				checkCallback();
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		function checkCallback() {
 | 
			
		||||
			numLocations--;
 | 
			
		||||
			if (numLocations < 0) {
 | 
			
		||||
				
 | 
			
		||||
				$(window).trigger('action:widgets.loaded', {});
 | 
			
		||||
				
 | 
			
		||||
				if (typeof callback === 'function') {
 | 
			
		||||
					callback();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (var i=0; i<widgetLocations.length; ++i) {
 | 
			
		||||
			renderWidgets(widgetLocations[i]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		checkCallback();
 | 
			
		||||
		renderWidgets(widgetLocations);
 | 
			
		||||
	};
 | 
			
		||||
}(ajaxify || {}));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user