initial commit
This commit is contained in:
commit
a75b9063aa
|
|
@ -0,0 +1,2 @@
|
||||||
|
.discourse-site
|
||||||
|
HELP
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"name": "discourse-search-banner",
|
||||||
|
"about_url": null,
|
||||||
|
"license_url": null,
|
||||||
|
"component": true,
|
||||||
|
"assets": {},
|
||||||
|
"color_schemes": {}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
@import "common/foundation/mixins";
|
||||||
|
|
||||||
|
$max-width: 600px;
|
||||||
|
|
||||||
|
.display-search-banner {
|
||||||
|
#main-outlet {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-search-banner {
|
||||||
|
padding-top: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-search-banner-wrap {
|
||||||
|
@if $background-image != "none" {
|
||||||
|
background-image: url($background-image);
|
||||||
|
} @else {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
@if $tile-background_image == "true" {
|
||||||
|
background-size: auto;
|
||||||
|
} @else {
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
padding: 2.5em 0 3em;
|
||||||
|
margin: 1em auto;
|
||||||
|
@include breakpoint(tablet) {
|
||||||
|
padding: 1em 8px 2em;
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: $max-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-menu {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
input[type="text"] {
|
||||||
|
margin: 0;
|
||||||
|
width: 100%;
|
||||||
|
padding-right: 4em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
.searching {
|
||||||
|
// spinner
|
||||||
|
top: 0.5em;
|
||||||
|
right: 2.25em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: $font-up-6;
|
||||||
|
line-height: $line-height-medium;
|
||||||
|
@include breakpoint(tablet) {
|
||||||
|
font-size: $font-up-4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
p {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-icon {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2;
|
||||||
|
order: 2;
|
||||||
|
right: 0;
|
||||||
|
background: transparent;
|
||||||
|
.discourse-no-touch & {
|
||||||
|
&:hover {
|
||||||
|
background: transparent;
|
||||||
|
.d-icon {
|
||||||
|
color: $primary-high;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-context,
|
||||||
|
.results {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: $max-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-context {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 10;
|
||||||
|
right: 0;
|
||||||
|
top: 2.67em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results {
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: $secondary;
|
||||||
|
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
|
||||||
|
position: absolute;
|
||||||
|
width: $max-width;
|
||||||
|
z-index: 9;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
left: 0;
|
||||||
|
top: 1.9em;
|
||||||
|
right: 0;
|
||||||
|
padding: 2em 1em 1em 1em;
|
||||||
|
@include breakpoint(mobile-extra-large) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-widget {
|
||||||
|
div.discourse-tags {
|
||||||
|
font-size: $font-down-1;
|
||||||
|
}
|
||||||
|
li a.widget-link {
|
||||||
|
display: block;
|
||||||
|
padding: 0.25em 0.5em;
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
background-color: $highlight-medium;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
<script type="text/discourse-plugin" version="0.8">
|
||||||
|
api.registerConnectorClass('below-site-header', '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.only_show_on_homepage) {
|
||||||
|
var showBannerHere = home
|
||||||
|
} else {
|
||||||
|
var showBannerHere = topMenuRoutes.indexOf(url) > -1 || home
|
||||||
|
}
|
||||||
|
if (showBannerHere){
|
||||||
|
component.set('displaySearchBanner', true);
|
||||||
|
$('html').addClass('display-search-banner');
|
||||||
|
} else {
|
||||||
|
component.set('displaySearchBanner', 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 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}}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
en:
|
||||||
|
search_banner:
|
||||||
|
headline: "Welcome to our community"
|
||||||
|
subhead: "We're happy to have you here. If you need help, please search before you post."
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
.search-widget {
|
||||||
|
.search-link {
|
||||||
|
.badge-category {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-search-banner-wrap .results {
|
||||||
|
padding: 2em 0.5em 0.5em;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
only_show_on_homepage:
|
||||||
|
default: false
|
||||||
|
description: When unchecked the banner will show on all pages listed in the <a href="/admin/site_settings/category/all_results?filter=top_menu">top menu site setting</a>
|
||||||
|
|
||||||
|
background_image:
|
||||||
|
type: string
|
||||||
|
default: none
|
||||||
|
description: Enter an image url
|
||||||
|
|
||||||
|
tile_background_image: false
|
||||||
Loading…
Reference in New Issue