From b023ef01af6c0475633598b6fb6f1e87e640c6e6 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Fri, 28 Mar 2014 14:18:42 -0400 Subject: [PATCH] moving widgets and variables code out of ajaxify --- public/src/ajaxify.js | 96 ++---------------------------------- public/src/app.js | 2 +- public/src/forum/category.js | 2 +- public/src/variables.js | 41 +++++++++++++++ public/src/widgets.js | 59 ++++++++++++++++++++++ src/meta.js | 2 + 6 files changed, 107 insertions(+), 95 deletions(-) create mode 100644 public/src/variables.js create mode 100644 public/src/widgets.js diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index bc9cce1882..ba7f038a59 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -1,6 +1,6 @@ "use strict"; -var ajaxify = {}; +var ajaxify = ajaxify || {}; (function () { /*global app, templates, utils, socket, translator, config, RELATIVE_PATH*/ @@ -13,6 +13,7 @@ var ajaxify = {}; apiXHR = null; var events = []; + ajaxify.register_events = function (new_page_events) { for (var i = 0, ii = events.length; i < ii; i++) { socket.removeAllListeners(events[i]); // optimize this to user removeListener(event, listener) instead. @@ -95,7 +96,7 @@ var ajaxify = {}; app.processPage(); - ajaxify.renderWidgets(tpl_url, url, function(err) { + ajaxify.widgets.render(tpl_url, url, function(err) { $('#content, #footer').stop(true, true).removeClass('ajaxifying'); ajaxify.initialLoad = false; @@ -234,97 +235,6 @@ var ajaxify = {}; } }; - ajaxify.variables = (function() { - var parsedVariables = {}; - - return { - set: function(key, value) { - parsedVariables[key] = value; - }, - get: function(key) { - return parsedVariables[key]; - }, - flush: function() { - parsedVariables = {}; - }, - parse: function() { - $('#content [template-variable]').each(function(index, element) { - var value = null; - - switch ($(element).attr('template-type')) { - case 'boolean': - value = ($(element).val() === 'true' || $(element).val() === '1') ? true : false; - break; - case 'int': - case 'integer': - value = parseInt($(element).val()); - break; - default: - value = $(element).val(); - break; - } - - ajaxify.variables.set($(element).attr('template-variable'), value); - }); - } - }; - })(); - - ajaxify.repositionNoWidgets = function() { - $('body [no-widget-class]').each(function() { - var $this = $(this); - $this.removeClass(); - $this.addClass($this.attr('no-widget-class')); - }); - }; - - ajaxify.renderWidgets = function(tpl_url, url, callback) { - var widgetLocations = [], numLocations; - - $('#content [widget-area]').each(function() { - widgetLocations.push($(this).attr('widget-area')); - }); - - numLocations = widgetLocations.length; - - if (!numLocations) { - ajaxify.repositionNoWidgets(); - } - - function renderWidgets(location) { - var area = $('#content [widget-area="' + location + '"]'); - - socket.emit('widgets.render', {template: tpl_url + '.tpl', url: url, location: location}, function(err, renderedWidgets) { - if (area.html()) { - area.html(templates.parse(area.html(), {widgets: renderedWidgets})) - .removeClass('hidden'); - - if (!renderedWidgets.length) { - ajaxify.repositionNoWidgets(); - } - } - - $('#content [widget-area] img:not(.user-img)').addClass('img-responsive'); - checkCallback(); - }); - } - - function checkCallback() { - numLocations--; - if (numLocations < 0 && callback) { - callback(); - } - } - - for (var i in widgetLocations) { - if (widgetLocations.hasOwnProperty(i)) { - renderWidgets(widgetLocations[i]); - } - } - - checkCallback(); - }; - $('document').ready(function () { if (!window.history || !window.history.pushState) { return; // no ajaxification for old browsers diff --git a/public/src/app.js b/public/src/app.js index 840b77cf73..3d2b78c6bd 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -682,7 +682,7 @@ var socket, ajaxify.variables.parse(); app.processPage(); - ajaxify.renderWidgets(tpl_url, url); + ajaxify.widgets.render(tpl_url, url); ajaxify.loadScript(tpl_url, function() { $(window).trigger('action:ajaxify.end', { diff --git a/public/src/forum/category.js b/public/src/forum/category.js index 328d63e22e..fdcfe3ec90 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -180,7 +180,7 @@ define(['composer', 'forum/pagination'], function(composer, pagination) { var noTopicsWarning = $('#category-no-topics'); if (noTopicsWarning.length) { noTopicsWarning.remove(); - ajaxify.renderWidgets('category', window.location.pathname.slice(1)); + ajaxify.widgets.render('category', window.location.pathname.slice(1)); } if (numTopics > 0) { diff --git a/public/src/variables.js b/public/src/variables.js new file mode 100644 index 0000000000..6a7a3aa70d --- /dev/null +++ b/public/src/variables.js @@ -0,0 +1,41 @@ +"use strict"; +/*global ajaxify*/ + +(function(ajaxify) { + var parsedVariables = {}; + + ajaxify.variables = {}; + + ajaxify.variables.set = function(key, value) { + parsedVariables[key] = value; + }; + + ajaxify.variables.get = function(key) { + return parsedVariables[key]; + }; + + ajaxify.variables.flush = function() { + parsedVariables = {}; + }; + + ajaxify.variables.parse = function() { + $('#content [template-variable]').each(function(index, element) { + var value = null; + + switch ($(element).attr('template-type')) { + case 'boolean': + value = ($(element).val() === 'true' || $(element).val() === '1') ? true : false; + break; + case 'int': + case 'integer': + value = parseInt($(element).val()); + break; + default: + value = $(element).val(); + break; + } + + ajaxify.variables.set($(element).attr('template-variable'), value); + }); + }; +}(ajaxify || {})); \ No newline at end of file diff --git a/public/src/widgets.js b/public/src/widgets.js new file mode 100644 index 0000000000..1764fed843 --- /dev/null +++ b/public/src/widgets.js @@ -0,0 +1,59 @@ +"use strict"; +/*global ajaxify, socket, templates*/ + +(function(ajaxify) { + ajaxify.widgets.reposition = function() { + $('body [no-widget-class]').each(function() { + var $this = $(this); + $this.removeClass(); + $this.addClass($this.attr('no-widget-class')); + }); + }; + + ajaxify.widgets.render = function(tpl_url, url, callback) { + var widgetLocations = [], numLocations; + + $('#content [widget-area]').each(function() { + widgetLocations.push($(this).attr('widget-area')); + }); + + numLocations = widgetLocations.length; + + if (!numLocations) { + ajaxify.widgets.reposition(); + } + + function renderWidgets(location) { + var area = $('#content [widget-area="' + location + '"]'); + + socket.emit('widgets.render', {template: tpl_url + '.tpl', url: url, location: location}, function(err, renderedWidgets) { + if (area.html()) { + area.html(templates.parse(area.html(), {widgets: renderedWidgets})) + .removeClass('hidden'); + + if (!renderedWidgets.length) { + ajaxify.widgets.reposition(); + } + } + + $('#content [widget-area] img:not(.user-img)').addClass('img-responsive'); + checkCallback(); + }); + } + + function checkCallback() { + numLocations--; + if (numLocations < 0 && callback) { + callback(); + } + } + + for (var i in widgetLocations) { + if (widgetLocations.hasOwnProperty(i)) { + renderWidgets(widgetLocations[i]); + } + } + + checkCallback(); + }; +}(ajaxify || {})); \ No newline at end of file diff --git a/src/meta.js b/src/meta.js index 587efde202..b6991b3b72 100644 --- a/src/meta.js +++ b/src/meta.js @@ -243,6 +243,8 @@ var fs = require('fs'), 'src/app.js', 'src/templates.js', 'src/ajaxify.js', + 'src/variables.js', + 'src/widgets.js', 'src/translator.js', 'src/overrides.js', 'src/utils.js'