This commit is contained in:
TsXor 2023-10-18 21:10:38 +02:00 committed by GitHub
commit ad153137ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 110 additions and 4 deletions

2
js/dist/admin.js vendored
View File

@ -1,2 +1,2 @@
(()=>{var a={n:e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},d:(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o:(a,e)=>Object.prototype.hasOwnProperty.call(a,e),r:a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})}},e={};(()=>{"use strict";a.r(e);const t=flarum.core.compat["admin/app"];var r=a.n(t);r().initializers.add("blomstra-search",(function(){var a=new Map;["arabic","armenian","basque","bengali","brazilian","bulgarian","catalan","cjk","czech","danish","dutch","english","estonian","finnish","french","galician","german","greek","hindi","hungarian","indonesian","irish","italian","latvian","lithuanian","norwegian","persian","portuguese","romanian","russian","sorani","spanish","swedish","turkish","thai"].forEach((function(e){a.set(e,e)})),r().extensionData.for("blomstra-search").registerSetting({setting:"blomstra-search.elastic-endpoint",label:r().translator.trans("blomstra-search.admin.elastic-endpoint"),type:"input"}).registerSetting({setting:"blomstra-search.elastic-username",label:r().translator.trans("blomstra-search.admin.elastic-username"),type:"input"}).registerSetting({setting:"blomstra-search.elastic-password",label:r().translator.trans("blomstra-search.admin.elastic-password"),type:"password"}).registerSetting({setting:"blomstra-search.elastic-index",label:r().translator.trans("blomstra-search.admin.elastic-index"),default:"flarum",type:"input"}).registerSetting({setting:"blomstra-search.analyzer-language",label:r().translator.trans("blomstra-search.admin.analyzer.label"),help:r().translator.trans("blomstra-search.admin.analyzer.help"),type:"select",options:Object.fromEntries(a.entries()),default:"english"}).registerSetting({setting:"blomstra-search.elastic-index",label:r().translator.trans("blomstra-search.admin.elastic-index"),default:"flarum",type:"input"}).registerSetting({setting:"blomstra-search.search-discussion-subjects",label:r().translator.trans("blomstra-search.admin.search-discussion-subjects"),type:"switch"}).registerSetting({setting:"blomstra-search.search-post-bodies",label:r().translator.trans("blomstra-search.admin.search-post-bodies"),type:"switch"})}))})(),module.exports=e})();
(()=>{var t={n:e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a}),a},d:(e,a)=>{for(var s in a)t.o(a,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:a[s]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e);const a=flarum.core.compat["admin/app"];var s=t.n(a);const n=flarum.core.compat["common/extend"],r=flarum.core.compat["admin/components/AdminPage"];var i=t.n(r);function o(t,e){if(null==t)return{};var a,s,n={},r=Object.keys(t);for(s=0;s<r.length;s++)a=r[s],e.indexOf(a)>=0||(n[a]=t[a]);return n}const l=flarum.core.compat["common/utils/Stream"];var c=t.n(l);const u=flarum.core.compat["common/utils/classList"];var p=t.n(u);const d=flarum.core.compat["common/utils/withAttr"];var b=t.n(d);const g=flarum.core.compat["common/components/Select"];var h=t.n(g);const f=flarum.core.compat["admin/utils/generateElementId"];var y=t.n(f),v=["setting","help","label"],S=["default","options","inputDescription","className"];function x(t,e,a){return e()||t()}function j(t){var e=t,a=[y()(),y()(),y()()],s=a[0],n=a[1],r=a[2],i=e.setting,l=e.help,u=e.label,d=o(e,v),g=d.default,f=d.options,j=d.inputDescription,O=d.className,w=o(d,S),z=this.settings[i];if(!z.upstreams){var N=z()||g,k=c()(),P=c()(),D=[k,P];(z=c().combine(x,D)).upstreams=D,Object.keys(f).indexOf(N)>-1?(k(N),P("")):(k(g),P(N)),this.settings[i]=z}var M=z.upstreams,_=M[0],E=M[1],T=m(h(),Object.assign({className:O,id:s,"aria-describedby":r,value:_(),options:f,onchange:_},w)),A=m("input",Object.assign({className:p()("FormControl",O),id:n,type:"text",onchange:b()("value",E),value:E()},w));return m("div",{className:"Form-group"},u&&m("label",{for:s},u),m("div",{id:r,className:"helpText"},l),T,j&&m("label",{style:{"padding-top":"10px"},for:n},j),A)}function O(){(0,n.extend)(i().prototype,"customSettingComponents",(function(t){t.add("select-or-input",j.bind(this))}))}s().initializers.add("blomstra-search",(function(){O();var t=new Map;["arabic","armenian","basque","bengali","brazilian","bulgarian","catalan","cjk","czech","danish","dutch","english","estonian","finnish","french","galician","german","greek","hindi","hungarian","indonesian","irish","italian","latvian","lithuanian","norwegian","persian","portuguese","romanian","russian","sorani","spanish","swedish","turkish","thai"].forEach((function(e){t.set(e,e)})),s().extensionData.for("blomstra-search").registerSetting({setting:"blomstra-search.elastic-endpoint",label:s().translator.trans("blomstra-search.admin.elastic-endpoint"),type:"input"}).registerSetting({setting:"blomstra-search.elastic-username",label:s().translator.trans("blomstra-search.admin.elastic-username"),type:"input"}).registerSetting({setting:"blomstra-search.elastic-password",label:s().translator.trans("blomstra-search.admin.elastic-password"),type:"password"}).registerSetting({setting:"blomstra-search.elastic-index",label:s().translator.trans("blomstra-search.admin.elastic-index"),default:"flarum",type:"input"}).registerSetting({setting:"blomstra-search.analyzer-language",label:s().translator.trans("blomstra-search.admin.analyzer.label"),help:s().translator.trans("blomstra-search.admin.analyzer.help"),type:"select-or-input",options:Object.fromEntries(t.entries()),inputDescription:s().translator.trans("blomstra-search.admin.analyzer.custom"),default:"english"}).registerSetting({setting:"blomstra-search.elastic-index",label:s().translator.trans("blomstra-search.admin.elastic-index"),default:"flarum",type:"input"}).registerSetting({setting:"blomstra-search.search-discussion-subjects",label:s().translator.trans("blomstra-search.admin.search-discussion-subjects"),type:"switch"}).registerSetting({setting:"blomstra-search.search-post-bodies",label:s().translator.trans("blomstra-search.admin.search-post-bodies"),type:"switch"})}))})(),module.exports=e})();
//# sourceMappingURL=admin.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,92 @@
import type Mithril from 'mithril';
import Stream from 'flarum/common/utils/Stream';
import classList from 'flarum/common/utils/classList';
import withAttr from 'flarum/common/utils/withAttr';
import AdminPage, { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage';
import Select from 'flarum/common/components/Select';
import generateElementId from 'flarum/admin/utils/generateElementId';
// forgive me, but this interface is just what its name implies
interface SelectOrInputSettingComponentOptionsWithoutType extends CommonSettingsItemOptions {
options: { [value: string]: Mithril.Children };
inputDescription: string;
default: string;
}
export interface SelectOrInputSettingComponentOptions extends SelectOrInputSettingComponentOptionsWithoutType {
type: 'select-or-input';
}
interface StreamWithUpstream<T> extends Stream<T> {
upstreams?: Array<Stream<unknown>>;
}
function mergeSelectOrInput(
selectStream: Stream<string>, inputStream: Stream<string>,
changed: Array<Stream<unknown>>
) {
return inputStream() || selectStream();
}
export default function (this: AdminPage, _entry: CommonSettingsItemOptions) {
// do this cast because function signature is restricted
const entry = _entry as SelectOrInputSettingComponentOptionsWithoutType;
const [selectId, inputId, helpTextId] = [generateElementId(), generateElementId(), generateElementId()];
const { setting, help, label, ...componentAttrs } = entry;
const { default: defaultValue, options, inputDescription, className, ...otherAttrs } = componentAttrs;
let settingStream = this.settings[setting] as StreamWithUpstream<string>;
if (!settingStream.upstreams) {
let value = settingStream() || defaultValue;
let selectStream = Stream();
let inputStream = Stream();
let upstreams = [selectStream, inputStream]
settingStream = Stream.combine(mergeSelectOrInput, upstreams);
settingStream.upstreams = upstreams;
let useSelect = Object.keys(options).indexOf(value) > -1;
if (useSelect) {
selectStream(value);
inputStream('');
} else {
selectStream(defaultValue);
inputStream(value);
}
this.settings[setting] = settingStream;
}
let [selectStream, inputStream] = settingStream.upstreams!;
let selectElement = (
<Select
className={className}
id={selectId}
aria-describedby={helpTextId}
value={selectStream()}
options={options}
onchange={selectStream}
{...otherAttrs}
/>
);
let inputElement = (
<input
className={classList('FormControl', className)}
id={inputId}
type='text'
onchange={withAttr('value', inputStream)}
value={inputStream()}
{...otherAttrs}
/>
);
return (
<div className="Form-group">
{label && <label for={selectId}>{label}</label>}
<div id={helpTextId} className="helpText">{help}</div>
{selectElement}
{inputDescription && <label style={{'padding-top': '10px'}} for={inputId}>{inputDescription}</label>}
{inputElement}
</div>
);
}

View File

@ -0,0 +1,9 @@
import { extend } from 'flarum/common/extend';
import AdminPage, { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage';
import buildSelectOrInput from './ConfigToComponents/buildSelectOrInput';
export default function() {
extend(AdminPage.prototype, 'customSettingComponents', function (items) {
items.add('select-or-input', buildSelectOrInput.bind(this));
})
}

View File

@ -1,6 +1,9 @@
import app from 'flarum/admin/app';
import extendCustomSettingComponents from './extendCustomSettingComponents';
app.initializers.add('blomstra-search', () => {
extendCustomSettingComponents();
const languages = new Map();
[
'arabic',
@ -69,8 +72,9 @@ app.initializers.add('blomstra-search', () => {
setting: 'blomstra-search.analyzer-language',
label: app.translator.trans('blomstra-search.admin.analyzer.label'),
help: app.translator.trans('blomstra-search.admin.analyzer.help'),
type: 'select',
type: 'select-or-input',
options: Object.fromEntries(languages.entries()),
inputDescription: app.translator.trans('blomstra-search.admin.analyzer.custom'),
default: 'english',
})
.registerSetting({

View File

@ -9,6 +9,7 @@ blomstra-search:
help: |
The analyzer makes search understand stop words and undertakes language
specific improvements for indexing.
custom: Use custom analyzer
search-discussion-subjects: Search inside discussion titles
search-post-bodies: Search inside comments
match-sentences: Match search term against full sentence