* Add missing icons to set
* Revert FA5 revert
This reverts commit 42572ff
* use new SVG syntax in locales
* Noscript page changes (remove login button, center "powered by" footer text)
* Cast wider net for SVG icons in settings
- include any _icon setting for SVG registry (offers better support for plugin settings)
- let themes store multiple pipe-delimited icons in a setting
- also replaces broken onebox image icon with SVG reference in cooked post processor
* interpolate icons in locales
* Fix composer whisper icon alignment
* Add support for stacked icons
* SECURITY: enforce hostname to match discourse hostname
This ensures that the hostname rails uses for various helpers always matches
the Discourse hostname
* load SVG sprite with pre-initializers
* FIX: enable caching on SVG sprites
* PERF: use JSONP for SVG sprites so they are served from CDN
This avoids needing to deal with CORS for loading of the SVG
Note, added the svg- prefix to the filename so we can quickly tell in
dev tools what the file is
* Add missing SVG sprite JSONP script to CSP
* Upgrade to FA 5.5.0
* Add support for all FA4.7 icons
- adds complete frontend and backend for renamed FA4.7 icons
- improves performance of SvgSprite.bundle and SvgSprite.all_icons
* Fix group avatar flair preview
- adds an endpoint at /svg-sprites/search/:keyword
- adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset
* Remove FA 4.7 font files
58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
import { h } from "virtual-dom";
|
|
import { renderIcon } from "discourse-common/lib/icon-library";
|
|
|
|
const _decorators = [];
|
|
|
|
export function addFeaturedLinkMetaDecorator(decorator) {
|
|
_decorators.push(decorator);
|
|
}
|
|
|
|
export function extractLinkMeta(topic) {
|
|
const href = topic.get("featured_link");
|
|
const target = Discourse.User.currentProp("external_links_in_new_tab")
|
|
? "_blank"
|
|
: "";
|
|
|
|
if (!href) {
|
|
return;
|
|
}
|
|
|
|
const meta = {
|
|
target: target,
|
|
href,
|
|
domain: topic.get("featured_link_root_domain"),
|
|
rel: "nofollow"
|
|
};
|
|
|
|
if (_decorators.length) {
|
|
_decorators.forEach(cb => cb(meta));
|
|
}
|
|
|
|
return meta;
|
|
}
|
|
|
|
export default function renderTopicFeaturedLink(topic) {
|
|
const meta = extractLinkMeta(topic);
|
|
if (meta) {
|
|
return `<a class="topic-featured-link" rel="${meta.rel}" target="${
|
|
meta.target
|
|
}" href="${meta.href}">${renderIcon("string", "external-link-alt")} ${
|
|
meta.domain
|
|
}</a>`;
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
export function topicFeaturedLinkNode(topic) {
|
|
const meta = extractLinkMeta(topic);
|
|
if (meta) {
|
|
return h(
|
|
"a.topic-featured-link",
|
|
{
|
|
attributes: { href: meta.href, rel: meta.rel, target: meta.target }
|
|
},
|
|
[renderIcon("node", "external-link-alt"), meta.domain]
|
|
);
|
|
}
|
|
}
|