mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 19:29:34 +08:00
REFACTOR: Allow helpers to access site settings
Since `Discourse.SiteSettings` is removed, helpers can now include and call `helperContext().siteSettings` to get access to the settings without using a global variable.
This commit is contained in:
@ -45,6 +45,17 @@ export function registerHelpers(registry) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _helperContext;
|
||||||
|
export function createHelperContext(siteSettings) {
|
||||||
|
_helperContext = {
|
||||||
|
siteSettings
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function helperContext() {
|
||||||
|
return _helperContext;
|
||||||
|
}
|
||||||
|
|
||||||
function resolveParams(ctx, options) {
|
function resolveParams(ctx, options) {
|
||||||
let params = {};
|
let params = {};
|
||||||
const hash = options.hash;
|
const hash = options.hash;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import getURL from "discourse-common/lib/get-url";
|
import getURL from "discourse-common/lib/get-url";
|
||||||
import I18n from "I18n";
|
import I18n from "I18n";
|
||||||
import { get } from "@ember/object";
|
import { get } from "@ember/object";
|
||||||
import { registerUnbound } from "discourse-common/lib/helpers";
|
import { helperContext, registerUnbound } from "discourse-common/lib/helpers";
|
||||||
import { isRTL } from "discourse/lib/text-direction";
|
import { isRTL } from "discourse/lib/text-direction";
|
||||||
import { iconHTML } from "discourse-common/lib/icon-library";
|
import { iconHTML } from "discourse-common/lib/icon-library";
|
||||||
import Category from "discourse/models/category";
|
import Category from "discourse/models/category";
|
||||||
@ -39,18 +39,19 @@ export function addExtraIconRenderer(renderer) {
|
|||||||
@param {Number} [opts.depth] Current category depth, used for limiting recursive calls
|
@param {Number} [opts.depth] Current category depth, used for limiting recursive calls
|
||||||
**/
|
**/
|
||||||
export function categoryBadgeHTML(category, opts) {
|
export function categoryBadgeHTML(category, opts) {
|
||||||
|
let siteSettings = helperContext().siteSettings;
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!category ||
|
!category ||
|
||||||
(!opts.allowUncategorized &&
|
(!opts.allowUncategorized &&
|
||||||
get(category, "id") === Site.currentProp("uncategorized_category_id") &&
|
get(category, "id") === Site.currentProp("uncategorized_category_id") &&
|
||||||
Discourse.SiteSettings.suppress_uncategorized_badge)
|
siteSettings.suppress_uncategorized_badge)
|
||||||
)
|
)
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
const depth = (opts.depth || 1) + 1;
|
const depth = (opts.depth || 1) + 1;
|
||||||
if (opts.recursive && depth <= Discourse.SiteSettings.max_category_nesting) {
|
if (opts.recursive && depth <= siteSettings.max_category_nesting) {
|
||||||
const parentCategory = Category.findById(category.parent_category_id);
|
const parentCategory = Category.findById(category.parent_category_id);
|
||||||
opts.depth = depth;
|
opts.depth = depth;
|
||||||
return categoryBadgeHTML(parentCategory, opts) + _renderer(category, opts);
|
return categoryBadgeHTML(parentCategory, opts) + _renderer(category, opts);
|
||||||
@ -118,8 +119,9 @@ function defaultCategoryLinkRenderer(category, opts) {
|
|||||||
parentCat = Category.findById(get(category, "parent_category_id"));
|
parentCat = Category.findById(get(category, "parent_category_id"));
|
||||||
}
|
}
|
||||||
|
|
||||||
const categoryStyle =
|
let siteSettings = helperContext().siteSettings;
|
||||||
opts.categoryStyle || Discourse.SiteSettings.category_style;
|
|
||||||
|
const categoryStyle = opts.categoryStyle || siteSettings.category_style;
|
||||||
if (categoryStyle !== "none") {
|
if (categoryStyle !== "none") {
|
||||||
if (parentCat && parentCat !== category) {
|
if (parentCat && parentCat !== category) {
|
||||||
html += categoryStripe(
|
html += categoryStripe(
|
||||||
@ -150,7 +152,7 @@ function defaultCategoryLinkRenderer(category, opts) {
|
|||||||
|
|
||||||
let categoryName = escapeExpression(get(category, "name"));
|
let categoryName = escapeExpression(get(category, "name"));
|
||||||
|
|
||||||
if (Discourse.SiteSettings.support_mixed_text_direction) {
|
if (siteSettings.support_mixed_text_direction) {
|
||||||
categoryDir = isRTL(categoryName) ? 'dir="rtl"' : 'dir="ltr"';
|
categoryDir = isRTL(categoryName) ? 'dir="rtl"' : 'dir="ltr"';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { registerUnbound } from "discourse-common/lib/helpers";
|
import { registerUnbound, helperContext } from "discourse-common/lib/helpers";
|
||||||
|
|
||||||
function daysSinceEpoch(dt) {
|
function daysSinceEpoch(dt) {
|
||||||
// 1000 * 60 * 60 * 24 = days since epoch
|
// 1000 * 60 * 60 * 24 = days since epoch
|
||||||
@ -6,23 +6,24 @@ function daysSinceEpoch(dt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
registerUnbound("cold-age-class", function(dt, params) {
|
registerUnbound("cold-age-class", function(dt, params) {
|
||||||
var className = params["class"] || "age";
|
let className = params["class"] || "age";
|
||||||
|
|
||||||
if (!dt) {
|
if (!dt) {
|
||||||
return className;
|
return className;
|
||||||
}
|
}
|
||||||
|
|
||||||
var startDate = params.startDate || new Date();
|
let startDate = params.startDate || new Date();
|
||||||
|
|
||||||
// Show heat on age
|
// Show heat on age
|
||||||
var nowDays = daysSinceEpoch(startDate),
|
let nowDays = daysSinceEpoch(startDate),
|
||||||
epochDays = daysSinceEpoch(new Date(dt));
|
epochDays = daysSinceEpoch(new Date(dt));
|
||||||
|
|
||||||
if (nowDays - epochDays > Discourse.SiteSettings.cold_age_days_high)
|
let siteSettings = helperContext().siteSettings;
|
||||||
|
if (nowDays - epochDays > siteSettings.cold_age_days_high)
|
||||||
return className + " coldmap-high";
|
return className + " coldmap-high";
|
||||||
if (nowDays - epochDays > Discourse.SiteSettings.cold_age_days_medium)
|
if (nowDays - epochDays > siteSettings.cold_age_days_medium)
|
||||||
return className + " coldmap-med";
|
return className + " coldmap-med";
|
||||||
if (nowDays - epochDays > Discourse.SiteSettings.cold_age_days_low)
|
if (nowDays - epochDays > siteSettings.cold_age_days_low)
|
||||||
return className + " coldmap-low";
|
return className + " coldmap-low";
|
||||||
|
|
||||||
return className;
|
return className;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { registerUnbound } from "discourse-common/lib/helpers";
|
import { registerUnbound, helperContext } from "discourse-common/lib/helpers";
|
||||||
import { isRTL } from "discourse/lib/text-direction";
|
import { isRTL } from "discourse/lib/text-direction";
|
||||||
import { htmlSafe } from "@ember/template";
|
import { htmlSafe } from "@ember/template";
|
||||||
|
|
||||||
function setDir(text) {
|
function setDir(text) {
|
||||||
let content = text ? text : "";
|
let content = text ? text : "";
|
||||||
if (content && Discourse.SiteSettings.support_mixed_text_direction) {
|
let siteSettings = helperContext().siteSettings;
|
||||||
|
if (content && siteSettings.support_mixed_text_direction) {
|
||||||
let textDir = isRTL(content) ? "rtl" : "ltr";
|
let textDir = isRTL(content) ? "rtl" : "ltr";
|
||||||
return `<span dir="${textDir}">${content}</span>`;
|
return `<span dir="${textDir}">${content}</span>`;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import { registerHelpers } from "discourse-common/lib/helpers";
|
import {
|
||||||
|
registerHelpers,
|
||||||
|
createHelperContext
|
||||||
|
} from "discourse-common/lib/helpers";
|
||||||
import RawHandlebars from "discourse-common/lib/raw-handlebars";
|
import RawHandlebars from "discourse-common/lib/raw-handlebars";
|
||||||
import { registerRawHelpers } from "discourse-common/lib/raw-handlebars-helpers";
|
import { registerRawHelpers } from "discourse-common/lib/raw-handlebars-helpers";
|
||||||
import Handlebars from "handlebars";
|
import Handlebars from "handlebars";
|
||||||
@ -12,6 +15,8 @@ export function autoLoadModules(container, registry) {
|
|||||||
requirejs(entry, null, null, true);
|
requirejs(entry, null, null, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
let siteSettings = container.lookup("site-settings:main");
|
||||||
|
createHelperContext(siteSettings);
|
||||||
registerHelpers(registry);
|
registerHelpers(registry);
|
||||||
registerRawHelpers(RawHandlebars, Handlebars);
|
registerRawHelpers(RawHandlebars, Handlebars);
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,7 @@ export default function(name, opts) {
|
|||||||
this.registry.injection("component", "site", "site:main");
|
this.registry.injection("component", "site", "site:main");
|
||||||
|
|
||||||
this.siteSettings = currentSettings();
|
this.siteSettings = currentSettings();
|
||||||
|
autoLoadModules(this.container, this.registry);
|
||||||
autoLoadModules(this.registry, this.registry);
|
|
||||||
|
|
||||||
const store = createStore();
|
const store = createStore();
|
||||||
if (!opts.anonymous) {
|
if (!opts.anonymous) {
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
//= require jquery.magnific-popup.min.js
|
//= require jquery.magnific-popup.min.js
|
||||||
|
|
||||||
let resetSettings = require("helpers/site-settings").resetSettings;
|
let resetSettings = require("helpers/site-settings").resetSettings;
|
||||||
|
let createHelperContext = require("discourse-common/lib/helpers")
|
||||||
|
.createHelperContext;
|
||||||
|
|
||||||
const buildResolver = require("discourse-common/resolver").buildResolver;
|
const buildResolver = require("discourse-common/resolver").buildResolver;
|
||||||
window.setResolver(buildResolver("discourse").create({ namespace: Discourse }));
|
window.setResolver(buildResolver("discourse").create({ namespace: Discourse }));
|
||||||
@ -106,7 +108,7 @@ function resetSite(siteSettings, extras) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QUnit.testStart(function(ctx) {
|
QUnit.testStart(function(ctx) {
|
||||||
resetSettings();
|
let settings = resetSettings();
|
||||||
server = createPretender.default;
|
server = createPretender.default;
|
||||||
createPretender.applyDefaultHandlers(server);
|
createPretender.applyDefaultHandlers(server);
|
||||||
server.handlers = [];
|
server.handlers = [];
|
||||||
@ -152,8 +154,6 @@ QUnit.testStart(function(ctx) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
resetSettings();
|
|
||||||
|
|
||||||
let getURL = require("discourse-common/lib/get-url");
|
let getURL = require("discourse-common/lib/get-url");
|
||||||
getURL.setupURL(null, "http://localhost:3000", "");
|
getURL.setupURL(null, "http://localhost:3000", "");
|
||||||
getURL.setupS3CDN(null, null);
|
getURL.setupS3CDN(null, null);
|
||||||
@ -162,7 +162,8 @@ QUnit.testStart(function(ctx) {
|
|||||||
let Session = require("discourse/models/session").default;
|
let Session = require("discourse/models/session").default;
|
||||||
Session.resetCurrent();
|
Session.resetCurrent();
|
||||||
User.resetCurrent();
|
User.resetCurrent();
|
||||||
resetSite(Discourse.SiteSettings);
|
resetSite(settings);
|
||||||
|
createHelperContext(settings);
|
||||||
|
|
||||||
_DiscourseURL.redirectedTo = null;
|
_DiscourseURL.redirectedTo = null;
|
||||||
_DiscourseURL.redirectTo = function(url) {
|
_DiscourseURL.redirectTo = function(url) {
|
||||||
|
Reference in New Issue
Block a user