Files
NodeBB/public/src/widgets.js

102 lines
2.9 KiB
JavaScript
Raw Normal View History

"use strict";
/*global ajaxify, socket, templates*/
(function(ajaxify) {
2014-03-28 15:35:07 -04:00
ajaxify.widgets = {};
2014-04-03 17:27:26 -04:00
ajaxify.widgets.reposition = function(location) {
$('body [no-widget-class]').each(function() {
var $this = $(this);
if ($this.attr('no-widget-target') === location) {
$this.removeClass();
2014-04-03 17:27:26 -04:00
$this.addClass($this.attr('no-widget-class'));
}
});
};
ajaxify.widgets.render = function(tpl_url, url, callback) {
2014-05-28 16:30:16 -04:00
var widgetLocations = ['sidebar', 'footer', 'header'], numLocations;
$('#content [widget-area]').each(function() {
var location = $(this).attr('widget-area');
if ($.inArray(location, widgetLocations) === -1) {
widgetLocations.push(location);
}
});
numLocations = widgetLocations.length;
if (!numLocations) {
ajaxify.widgets.reposition();
}
function renderWidgets(location) {
// remove when https://code.google.com/p/chromium/issues/detail?id=357625 is fixed
try {
var temp = localStorage.getItem('cache:widgets:' + url + ':' + location);
} catch (e) {
var temp = null;
}
2014-05-30 17:38:03 -04:00
var area = $('#content [widget-area="' + location + '"]')
.html(temp);
socket.emit('widgets.render', {template: tpl_url + '.tpl', url: url, location: location}, function(err, renderedWidgets) {
2014-03-28 16:01:33 -04:00
var html = '';
2014-03-28 16:01:33 -04:00
for (var widget in renderedWidgets) {
if (renderedWidgets.hasOwnProperty(widget)) {
2014-03-29 17:16:41 -04:00
html += templates.parse(renderedWidgets[widget].html, {});
}
}
if (!area.length && window.location.pathname.indexOf('/admin') === -1 && renderedWidgets.length) {
if (location === 'footer') {
$('#content').append($('<div class="col-xs-12"><div widget-area="footer"></div></div>'));
} else if (location === 'sidebar') {
$('#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>'));
2014-05-28 16:30:16 -04:00
} else if (location === 'header') {
$('#content').prepend($('<div class="col-xs-12"><div widget-area="header"></div></div>'));
}
area = $('#content [widget-area="' + location + '"]');
}
2014-05-28 16:24:10 -04:00
area.html(html);
// remove when https://code.google.com/p/chromium/issues/detail?id=357625 is fixed
try {
localStorage.setItem('cache:widgets:' + url + ':' + location, html);
} catch (e) {}
2014-03-28 16:01:33 -04:00
if (!renderedWidgets.length) {
2014-05-28 16:24:10 -04:00
area.addClass('hidden');
ajaxify.widgets.reposition(location);
2014-03-28 16:01:33 -04:00
}
$('#content [widget-area] img:not(.user-img)').addClass('img-responsive');
checkCallback();
});
}
function checkCallback() {
numLocations--;
if (numLocations < 0) {
2014-05-26 11:37:50 -04:00
$(window).trigger('action:widgets.loaded', {});
if (typeof callback === 'function') {
callback();
}
}
}
for (var i in widgetLocations) {
if (widgetLocations.hasOwnProperty(i)) {
renderWidgets(widgetLocations[i]);
}
}
checkCallback();
};
2014-04-10 20:31:57 +01:00
}(ajaxify || {}));