This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/widgets/home-logo.js.es6

88 lines
2.1 KiB
JavaScript

import { createWidget } from "discourse/widgets/widget";
import { h } from "virtual-dom";
import { iconNode } from "discourse-common/lib/icon-library";
import { wantsNewWindow } from "discourse/lib/intercept-click";
import DiscourseURL from "discourse/lib/url";
export default createWidget("home-logo", {
tagName: "div.title",
settings: {
href: Discourse.getURL("/")
},
href() {
const href = this.settings.href;
return typeof href === "function" ? href() : href;
},
logoUrl() {
return this.siteSettings.site_logo_url || "";
},
mobileLogoUrl() {
return this.siteSettings.site_mobile_logo_url || "";
},
smallLogoUrl() {
return this.siteSettings.site_logo_small_url || "";
},
logo() {
const { siteSettings } = this;
const mobileView = this.site.mobileView;
const mobileLogoUrl = this.mobileLogoUrl();
const showMobileLogo = mobileView && mobileLogoUrl.length > 0;
const logoUrl = this.logoUrl();
const title = siteSettings.title;
if (this.attrs.minimized) {
const logoSmallUrl = this.smallLogoUrl();
if (logoSmallUrl.length) {
return h("img#site-logo.logo-small", {
key: "logo-small",
attributes: {
src: Discourse.getURL(logoSmallUrl),
width: 36,
alt: title
}
});
} else {
return iconNode("home");
}
} else if (showMobileLogo) {
return h("img#site-logo.logo-big", {
key: "logo-mobile",
attributes: { src: Discourse.getURL(mobileLogoUrl), alt: title }
});
} else if (logoUrl.length) {
return h("img#site-logo.logo-big", {
key: "logo-big",
attributes: { src: Discourse.getURL(logoUrl), alt: title }
});
} else {
return h("h1#site-text-logo.text-logo", { key: "logo-text" }, title);
}
},
html() {
return h(
"a",
{ attributes: { href: this.href(), "data-auto-route": true } },
this.logo()
);
},
click(e) {
if (wantsNewWindow(e)) {
return false;
}
e.preventDefault();
DiscourseURL.routeToTag($(e.target).closest("a")[0]);
return false;
}
});