DEV: Move JS/HBS into dedicated files
This introduces no functional changes, it simply copies the js and templates into their own files, and applies prettier formatting.
This commit is contained in:
parent
5bb68c3dcc
commit
4422ee24d3
|
|
@ -1,223 +0,0 @@
|
|||
<script type="text/discourse-plugin" version="0.8">
|
||||
const enableConnectorName = settings.plugin_outlet;
|
||||
const disableConnectorName = enableConnectorName === 'above-main-container' ? 'below-site-header' : 'above-main-container';
|
||||
|
||||
api.registerConnectorClass(disableConnectorName, 'search-banner', {
|
||||
shouldRender() { return false }
|
||||
});
|
||||
|
||||
api.registerConnectorClass(enableConnectorName, 'search-banner', {
|
||||
setupComponent(args, component) {
|
||||
var topMenuRoutes = Discourse.SiteSettings.top_menu.split('|').map(function(route) {return '/' + route});
|
||||
var homeRoute = topMenuRoutes[0];
|
||||
|
||||
api.onPageChange((url, title) => {
|
||||
var home = url === "/" || url.match(/^\/\?/) || url === homeRoute
|
||||
if(settings.show_on === "homepage") {
|
||||
var showBannerHere = home
|
||||
} else if (settings.show_on === "top_menu"){
|
||||
var showBannerHere = topMenuRoutes.indexOf(url) > -1 || home
|
||||
} else {
|
||||
var showBannerHere = url.match(/.*/) && !url.match(/search.*/) && !url.match(/admin.*/)
|
||||
}
|
||||
if (showBannerHere) {
|
||||
component.set('displaySearchBanner', true);
|
||||
$('html').addClass('display-search-banner');
|
||||
} else {
|
||||
component.set('displaySearchBanner', false);
|
||||
$('html').removeClass('display-search-banner');
|
||||
}
|
||||
|
||||
if(settings.show_for === "everyone") {
|
||||
component.set('show_for', true);
|
||||
} else if(settings.show_for === "logged_out" && !api.getCurrentUser()) {
|
||||
component.set('show_for', true);
|
||||
} else if(settings.show_for === "logged_in" && api.getCurrentUser()) {
|
||||
component.set('show_for', true);
|
||||
} else {
|
||||
component.set('show_for', false);
|
||||
$('html').removeClass('display-search-banner');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/discourse-plugin" version="0.8">
|
||||
api.registerConnectorClass('above-main-container', 'search-banner-above-main', {
|
||||
setupComponent(args, component) {
|
||||
var topMenuRoutes = Discourse.SiteSettings.top_menu.split('|').map(function(route) {return '/' + route});
|
||||
var homeRoute = topMenuRoutes[0];
|
||||
|
||||
api.onPageChange((url, title) => {
|
||||
var home = url === "/" || url.match(/^\/\?/) || url === homeRoute
|
||||
if(settings.show_on === "homepage") {
|
||||
var showBannerHere = home
|
||||
} else if (settings.show_on === "top_menu"){
|
||||
var showBannerHere = topMenuRoutes.indexOf(url) > -1 || home
|
||||
} else {
|
||||
var showBannerHere = url.match(/.*/) && !url.match(/search.*/) && !url.match(/admin.*/)
|
||||
}
|
||||
if (showBannerHere){
|
||||
component.set('displaySearchBanner', true);
|
||||
$('html').addClass('display-search-banner');
|
||||
} else {
|
||||
component.set('displaySearchBanner', false);
|
||||
$('html').removeClass('display-search-banner');
|
||||
}
|
||||
|
||||
if(settings.show_for === "everyone") {
|
||||
component.set('show_for', true);
|
||||
} else if(settings.show_for === "logged_out" && !api.getCurrentUser()) {
|
||||
component.set('show_for', true);
|
||||
} else if(settings.show_for === "logged_in" && api.getCurrentUser()) {
|
||||
component.set('show_for', true);
|
||||
} else {
|
||||
component.set('show_for', false);
|
||||
$('html').removeClass('display-search-banner');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/discourse-plugin" version="0.8">
|
||||
// Simplified version of header search theme component
|
||||
const searchMenuWidget = api.container.factoryFor('widget:search-menu');
|
||||
const corePanelContents = searchMenuWidget.class.prototype['panelContents'];
|
||||
api.reopenWidget('search-menu', {
|
||||
buildKey: function(attrs) {
|
||||
let type = attrs.formFactor || 'menu'
|
||||
return `search-${type}`
|
||||
},
|
||||
defaultState: function(attrs) {
|
||||
return {
|
||||
formFactor: attrs.formFactor || 'menu',
|
||||
showHeaderResults: false
|
||||
}
|
||||
},
|
||||
html: function() {
|
||||
if (this.state.formFactor === 'widget') {
|
||||
return this.panelContents();
|
||||
} else {
|
||||
return this.attach('menu-panel', {
|
||||
maxWidth: 500,
|
||||
contents: () => this.panelContents()
|
||||
});
|
||||
}
|
||||
},
|
||||
clickOutside() {
|
||||
if (!this.vnode.hooks['widget-mouse-down-outside']) {
|
||||
return this.mouseDownOutside();
|
||||
}
|
||||
},
|
||||
mouseDownOutside() {
|
||||
const formFactor = this.state.formFactor;
|
||||
if (formFactor === 'menu') {
|
||||
return this.sendWidgetAction('toggleSearchMenu');
|
||||
} else {
|
||||
this.state.showHeaderResults = false;
|
||||
this.scheduleRerender();
|
||||
}
|
||||
},
|
||||
click: function() {
|
||||
const formFactor = this.state.formFactor;
|
||||
if (formFactor === 'widget') {
|
||||
this.showResults();
|
||||
}
|
||||
},
|
||||
showResults: function() {
|
||||
this.state.showHeaderResults = true;
|
||||
this.scheduleRerender();
|
||||
},
|
||||
linkClickedEvent: function() {
|
||||
const formFactor = this.state.formFactor;
|
||||
if (formFactor === 'widget') {
|
||||
$('#search-term').val('');
|
||||
$('.search-placeholder').css('visibility', 'visible');
|
||||
this.state.showHeaderResults = false;
|
||||
this.scheduleRerender();
|
||||
}
|
||||
},
|
||||
panelContents: function() {
|
||||
const formFactor = this.state.formFactor;
|
||||
let showHeaderResults = this.state.showHeaderResults == null || this.state.showHeaderResults === true;
|
||||
let contents = [];
|
||||
|
||||
if (formFactor === 'widget') {
|
||||
contents.push(this.attach('button', {
|
||||
icon: 'search',
|
||||
className: 'search-icon',
|
||||
action: 'showResults'
|
||||
}));
|
||||
}
|
||||
|
||||
contents = contents.concat(...corePanelContents.call(this));
|
||||
let results = contents.find(w => w.name == 'search-menu-results');
|
||||
if (results && results.attrs.results) {
|
||||
$('.search-menu.search-header').addClass('has-results');
|
||||
} else {
|
||||
$('.search-menu.search-header').removeClass('has-results');
|
||||
}
|
||||
if (formFactor === 'menu' || showHeaderResults) {
|
||||
return contents;
|
||||
} else {
|
||||
return contents.filter((widget) => {
|
||||
return widget.name != 'search-menu-results' && widget.name != 'search-context';
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
api.createWidget("search-widget", {
|
||||
tagName: "div.search-widget",
|
||||
});
|
||||
api.decorateWidget('search-widget:after', function(helper) {
|
||||
const searchWidget = helper.widget,
|
||||
appController = helper.register.lookup('controller:application'),
|
||||
searchMenuVisible = searchWidget.state.searchVisible;
|
||||
if (!searchMenuVisible && !searchWidget.attrs.topic) {
|
||||
return helper.attach('search-menu', {
|
||||
contextEnabled: searchWidget.state.contextEnabled,
|
||||
formFactor: 'widget'
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script
|
||||
type="text/x-handlebars"
|
||||
data-template-name="/connectors/below-site-header/search-banner"
|
||||
>
|
||||
|
||||
{{#if show_for}}
|
||||
{{#if displaySearchBanner}}
|
||||
<div class="custom-search-banner" >
|
||||
<div class="wrap custom-search-banner-wrap">
|
||||
<h1>{{theme-i18n "search_banner.headline"}}</h1>
|
||||
<p>{{theme-i18n "search_banner.subhead"}}</p>
|
||||
{{mount-widget widget="search-widget"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{/if}}
|
||||
</script>
|
||||
|
||||
<script
|
||||
type="text/x-handlebars"
|
||||
data-template-name="/connectors/above-main-container/search-banner"
|
||||
>
|
||||
|
||||
{{#if show_for}}
|
||||
{{#if displaySearchBanner}}
|
||||
<div class="custom-search-banner" >
|
||||
<div class="wrap custom-search-banner-wrap">
|
||||
<h1>{{theme-i18n "search_banner.headline"}}</h1>
|
||||
<p>{{theme-i18n "search_banner.subhead"}}</p>
|
||||
{{mount-widget widget="search-widget"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{/if}}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,220 @@
|
|||
import { apiInitializer } from "discourse/lib/api";
|
||||
|
||||
export default apiInitializer("0.8", (api) => {
|
||||
const enableConnectorName = settings.plugin_outlet;
|
||||
const disableConnectorName =
|
||||
enableConnectorName === "above-main-container"
|
||||
? "below-site-header"
|
||||
: "above-main-container";
|
||||
|
||||
api.registerConnectorClass(disableConnectorName, "search-banner", {
|
||||
shouldRender() {
|
||||
return false;
|
||||
},
|
||||
});
|
||||
|
||||
api.registerConnectorClass(enableConnectorName, "search-banner", {
|
||||
setupComponent(args, component) {
|
||||
var topMenuRoutes = Discourse.SiteSettings.top_menu
|
||||
.split("|")
|
||||
.map(function (route) {
|
||||
return "/" + route;
|
||||
});
|
||||
var homeRoute = topMenuRoutes[0];
|
||||
|
||||
api.onPageChange((url, title) => {
|
||||
var home = url === "/" || url.match(/^\/\?/) || url === homeRoute;
|
||||
if (settings.show_on === "homepage") {
|
||||
var showBannerHere = home;
|
||||
} else if (settings.show_on === "top_menu") {
|
||||
var showBannerHere = topMenuRoutes.indexOf(url) > -1 || home;
|
||||
} else {
|
||||
var showBannerHere =
|
||||
url.match(/.*/) && !url.match(/search.*/) && !url.match(/admin.*/);
|
||||
}
|
||||
if (showBannerHere) {
|
||||
component.set("displaySearchBanner", true);
|
||||
$("html").addClass("display-search-banner");
|
||||
} else {
|
||||
component.set("displaySearchBanner", false);
|
||||
$("html").removeClass("display-search-banner");
|
||||
}
|
||||
|
||||
if (settings.show_for === "everyone") {
|
||||
component.set("show_for", true);
|
||||
} else if (
|
||||
settings.show_for === "logged_out" &&
|
||||
!api.getCurrentUser()
|
||||
) {
|
||||
component.set("show_for", true);
|
||||
} else if (settings.show_for === "logged_in" && api.getCurrentUser()) {
|
||||
component.set("show_for", true);
|
||||
} else {
|
||||
component.set("show_for", false);
|
||||
$("html").removeClass("display-search-banner");
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
api.registerConnectorClass(
|
||||
"above-main-container",
|
||||
"search-banner-above-main",
|
||||
{
|
||||
setupComponent(args, component) {
|
||||
var topMenuRoutes = Discourse.SiteSettings.top_menu
|
||||
.split("|")
|
||||
.map(function (route) {
|
||||
return "/" + route;
|
||||
});
|
||||
var homeRoute = topMenuRoutes[0];
|
||||
|
||||
api.onPageChange((url, title) => {
|
||||
var home = url === "/" || url.match(/^\/\?/) || url === homeRoute;
|
||||
if (settings.show_on === "homepage") {
|
||||
var showBannerHere = home;
|
||||
} else if (settings.show_on === "top_menu") {
|
||||
var showBannerHere = topMenuRoutes.indexOf(url) > -1 || home;
|
||||
} else {
|
||||
var showBannerHere =
|
||||
url.match(/.*/) &&
|
||||
!url.match(/search.*/) &&
|
||||
!url.match(/admin.*/);
|
||||
}
|
||||
if (showBannerHere) {
|
||||
component.set("displaySearchBanner", true);
|
||||
$("html").addClass("display-search-banner");
|
||||
} else {
|
||||
component.set("displaySearchBanner", false);
|
||||
$("html").removeClass("display-search-banner");
|
||||
}
|
||||
|
||||
if (settings.show_for === "everyone") {
|
||||
component.set("show_for", true);
|
||||
} else if (
|
||||
settings.show_for === "logged_out" &&
|
||||
!api.getCurrentUser()
|
||||
) {
|
||||
component.set("show_for", true);
|
||||
} else if (
|
||||
settings.show_for === "logged_in" &&
|
||||
api.getCurrentUser()
|
||||
) {
|
||||
component.set("show_for", true);
|
||||
} else {
|
||||
component.set("show_for", false);
|
||||
$("html").removeClass("display-search-banner");
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// Simplified version of header search theme component
|
||||
const searchMenuWidget = api.container.factoryFor("widget:search-menu");
|
||||
const corePanelContents = searchMenuWidget.class.prototype["panelContents"];
|
||||
api.reopenWidget("search-menu", {
|
||||
buildKey: function (attrs) {
|
||||
let type = attrs.formFactor || "menu";
|
||||
return `search-${type}`;
|
||||
},
|
||||
defaultState: function (attrs) {
|
||||
return {
|
||||
formFactor: attrs.formFactor || "menu",
|
||||
showHeaderResults: false,
|
||||
};
|
||||
},
|
||||
html: function () {
|
||||
if (this.state.formFactor === "widget") {
|
||||
return this.panelContents();
|
||||
} else {
|
||||
return this.attach("menu-panel", {
|
||||
maxWidth: 500,
|
||||
contents: () => this.panelContents(),
|
||||
});
|
||||
}
|
||||
},
|
||||
clickOutside() {
|
||||
if (!this.vnode.hooks["widget-mouse-down-outside"]) {
|
||||
return this.mouseDownOutside();
|
||||
}
|
||||
},
|
||||
mouseDownOutside() {
|
||||
const formFactor = this.state.formFactor;
|
||||
if (formFactor === "menu") {
|
||||
return this.sendWidgetAction("toggleSearchMenu");
|
||||
} else {
|
||||
this.state.showHeaderResults = false;
|
||||
this.scheduleRerender();
|
||||
}
|
||||
},
|
||||
click: function () {
|
||||
const formFactor = this.state.formFactor;
|
||||
if (formFactor === "widget") {
|
||||
this.showResults();
|
||||
}
|
||||
},
|
||||
showResults: function () {
|
||||
this.state.showHeaderResults = true;
|
||||
this.scheduleRerender();
|
||||
},
|
||||
linkClickedEvent: function () {
|
||||
const formFactor = this.state.formFactor;
|
||||
if (formFactor === "widget") {
|
||||
$("#search-term").val("");
|
||||
$(".search-placeholder").css("visibility", "visible");
|
||||
this.state.showHeaderResults = false;
|
||||
this.scheduleRerender();
|
||||
}
|
||||
},
|
||||
panelContents: function () {
|
||||
const formFactor = this.state.formFactor;
|
||||
let showHeaderResults =
|
||||
this.state.showHeaderResults == null ||
|
||||
this.state.showHeaderResults === true;
|
||||
let contents = [];
|
||||
|
||||
if (formFactor === "widget") {
|
||||
contents.push(
|
||||
this.attach("button", {
|
||||
icon: "search",
|
||||
className: "search-icon",
|
||||
action: "showResults",
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
contents = contents.concat(...corePanelContents.call(this));
|
||||
let results = contents.find((w) => w.name == "search-menu-results");
|
||||
if (results && results.attrs.results) {
|
||||
$(".search-menu.search-header").addClass("has-results");
|
||||
} else {
|
||||
$(".search-menu.search-header").removeClass("has-results");
|
||||
}
|
||||
if (formFactor === "menu" || showHeaderResults) {
|
||||
return contents;
|
||||
} else {
|
||||
return contents.filter((widget) => {
|
||||
return (
|
||||
widget.name != "search-menu-results" &&
|
||||
widget.name != "search-context"
|
||||
);
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
api.createWidget("search-widget", {
|
||||
tagName: "div.search-widget",
|
||||
});
|
||||
api.decorateWidget("search-widget:after", function (helper) {
|
||||
const searchWidget = helper.widget,
|
||||
appController = helper.register.lookup("controller:application"),
|
||||
searchMenuVisible = searchWidget.state.searchVisible;
|
||||
if (!searchMenuVisible && !searchWidget.attrs.topic) {
|
||||
return helper.attach("search-menu", {
|
||||
contextEnabled: searchWidget.state.contextEnabled,
|
||||
formFactor: "widget",
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{{#if show_for}}
|
||||
{{#if displaySearchBanner}}
|
||||
<div class="custom-search-banner" >
|
||||
<div class="wrap custom-search-banner-wrap">
|
||||
<h1>{{theme-i18n "search_banner.headline"}}</h1>
|
||||
<p>{{theme-i18n "search_banner.subhead"}}</p>
|
||||
{{mount-widget widget="search-widget"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{{#if show_for}}
|
||||
{{#if displaySearchBanner}}
|
||||
<div class="custom-search-banner" >
|
||||
<div class="wrap custom-search-banner-wrap">
|
||||
<h1>{{theme-i18n "search_banner.headline"}}</h1>
|
||||
<p>{{theme-i18n "search_banner.subhead"}}</p>
|
||||
{{mount-widget widget="search-widget"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
Loading…
Reference in New Issue