preloadStore, so plugins can stuff HTML in there when overriding a whole template doesn't make sense.
108 lines
3.1 KiB
JavaScript
108 lines
3.1 KiB
JavaScript
/**
|
|
Helpers to build HTML strings as well as custom fragments.
|
|
|
|
@class HTML
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
|
|
var customizations = {};
|
|
|
|
Discourse.HTML = {
|
|
|
|
/**
|
|
Return a custom fragment of HTML by key. It can be registered via a plugin
|
|
using `setCustomHTML(key, html)`. This is used by a handlebars helper to find
|
|
the HTML content it wants. It will also check the `PreloadStore` for any server
|
|
side preloaded HTML.
|
|
|
|
@method getCustomHTML
|
|
@param {String} key to lookup
|
|
**/
|
|
getCustomHTML: function(key) {
|
|
var c = customizations[key];
|
|
if (c) {
|
|
return new Handlebars.SafeString(c);
|
|
}
|
|
|
|
var html = PreloadStore.get("customHTML");
|
|
if (html && html[key] && html[key].length) {
|
|
return new Handlebars.SafeString(html[key]);
|
|
}
|
|
},
|
|
|
|
/**
|
|
Set a fragment of HTML by key. It can then be looked up with `getCustomHTML(key)`.
|
|
|
|
@method setCustomHTML
|
|
@param {String} key to store the html
|
|
@param {String} html fragment to store
|
|
**/
|
|
setCustomHTML: function(key, html) {
|
|
customizations[key] = html;
|
|
},
|
|
|
|
/**
|
|
Returns the CSS styles for a category
|
|
|
|
@method categoryStyle
|
|
@param {Discourse.Category} category the category whose link we want
|
|
**/
|
|
categoryStyle: function(category) {
|
|
var color = Em.get(category, 'color'),
|
|
textColor = Em.get(category, 'text_color');
|
|
|
|
if (!color && !textColor) { return; }
|
|
|
|
// Add the custom style if we need to
|
|
var style = "";
|
|
if (color) { style += "background-color: #" + color + "; "; }
|
|
if (textColor) { style += "color: #" + textColor + "; "; }
|
|
return style;
|
|
},
|
|
|
|
/**
|
|
Create a badge-like category link
|
|
|
|
@method categoryLink
|
|
@param {Discourse.Category} category the category whose link we want
|
|
@param {Object} opts The options for the category link
|
|
@param {Boolean} opts.allowUncategorized Whether we allow rendering of the uncategorized category
|
|
@returns {String} the html category badge
|
|
**/
|
|
categoryLink: function(category, opts) {
|
|
opts = opts || {};
|
|
|
|
if ((!category) ||
|
|
(!opts.allowUncategorized &&
|
|
Em.get(category, 'id') === Discourse.Site.currentProp("uncategorized_category_id") &&
|
|
Discourse.SiteSettings.suppress_uncategorized_badge
|
|
)
|
|
) return "";
|
|
|
|
var name = Em.get(category, 'name'),
|
|
description = Em.get(category, 'description'),
|
|
restricted = Em.get(category, 'read_restricted'),
|
|
html = "<a href=\"" + Discourse.getURL("/category/") + Discourse.Category.slugFor(category) + "\" ";
|
|
|
|
html += "data-drop-close=\"true\" class=\"badge-category" + (restricted ? ' restricted' : '' ) + "\" ";
|
|
|
|
// Add description if we have it
|
|
if (description) html += "title=\"" + Handlebars.Utils.escapeExpression(description) + "\" ";
|
|
|
|
var categoryStyle = Discourse.HTML.categoryStyle(category);
|
|
if (categoryStyle) {
|
|
html += "style=\"" + categoryStyle + "\" ";
|
|
}
|
|
|
|
if (restricted) {
|
|
html += "><div><i class='fa fa-group'></i> " + name + "</div></a>";
|
|
} else {
|
|
html += ">" + name + "</a>";
|
|
}
|
|
|
|
return html;
|
|
}
|
|
|
|
};
|