diff --git a/js/dist/admin.js b/js/dist/admin.js index f956f0f..0cc2ff1 100644 --- a/js/dist/admin.js +++ b/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var t={n:e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a}),a},d:(e,a)=>{for(var n in a)t.o(a,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:a[n]})},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 n=t.n(a);const s=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,n,s={},r=Object.keys(t);for(n=0;n=0||(s[a]=t[a]);return s}function l(t,e){return l=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},l(t,e)}const c=flarum.core.compat["common/utils/classList"];var u=t.n(c);const h=flarum.core.compat["common/Component"];var p=t.n(h);const d=flarum.core.compat["common/components/Select"];var b=t.n(d);const g=flarum.core.compat["common/components/Checkbox"];var f=t.n(g),v=["class","className","onchange","options","value","disabled","selectAttrs","rawTextInputAttrs"],y=["class","className"],x=function(t){var e,a;function n(){return t.apply(this,arguments)||this}a=t,(e=n).prototype=Object.create(a.prototype),e.prototype.constructor=e,l(e,a);var s=n.prototype;return s.onCheckboxChange=function(t,e){this.attrs.value=t?"":void 0,this.attrs.onchange(this.attrs.value),m.redraw()},s.onSelectChange=function(t){this.attrs.value=t,this.attrs.onchange(t)},s.onInputChange=function(t){var e=t.target.value;this.attrs.value=e,this.attrs.onchange(e)},s.view=function(t){var e,a,n,s=this.attrs,r=s.class,i=s.className,l=(s.onchange,s.options),c=s.value,h=s.disabled,p=s.selectAttrs,d=s.rawTextInputAttrs,g=o(s,v),x=Object.keys(l);void 0===c?(n=x[0],this.attrs.value=n,a=!1):(n=c,a=!(x.indexOf(n)>-1));var O=null!=d?d:{},S=O.class,k=O.className,j=o(O,y);return m("div",Object.assign({className:u()("SelectOrInput",i,r)},g),null!=(e=this.attrs.checkboxDescription)?e:"",m("div",{style:"display: inline-block;"},m(f(),{state:a,onchange:this.onCheckboxChange.bind(this)})),m("div",{style:"display: inline-block;"},a?m("input",Object.assign({className:u()("FormControl",k,S),type:"text",onchange:this.onInputChange.bind(this),disabled:h,value:n},j)):m(b(),Object.assign({options:l,onchange:this.onSelectChange.bind(this),disabled:h,value:n},p))))},n}(p());const O=flarum.core.compat["admin/utils/generateElementId"];var S=t.n(O),k=["setting","help","label"],j=["default","options","checkboxDescription"];function w(t){var e,a=t,s=[S()(),S()()],r=s[0],i=s[1],l=a.setting,c=a.help,u=a.label,h=o(a,k),p=h.default,d=h.options,b=h.checkboxDescription,g=o(h,j),f=this.settings[l],v=f();return f.mark||(f.mark=!0,v||(n().data.settings[l]=p,f(p),v=f())),e=m(x,Object.assign({id:r,"aria-describedby":i,value:v,options:d,onchange:f,checkboxDescription:b},g)),m("div",{className:"Form-group"},u&&m("label",{for:r},u),m("div",{id:i,className:"helpText"},c),e)}function C(){(0,s.extend)(i().prototype,"customSettingComponents",(function(t){t.add("select-or-input",w.bind(this))}))}n().initializers.add("blomstra-search",(function(){C();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)})),n().extensionData.for("blomstra-search").registerSetting({setting:"blomstra-search.elastic-endpoint",label:n().translator.trans("blomstra-search.admin.elastic-endpoint"),type:"input"}).registerSetting({setting:"blomstra-search.elastic-username",label:n().translator.trans("blomstra-search.admin.elastic-username"),type:"input"}).registerSetting({setting:"blomstra-search.elastic-password",label:n().translator.trans("blomstra-search.admin.elastic-password"),type:"password"}).registerSetting({setting:"blomstra-search.elastic-index",label:n().translator.trans("blomstra-search.admin.elastic-index"),default:"flarum",type:"input"}).registerSetting({setting:"blomstra-search.analyzer-language",label:n().translator.trans("blomstra-search.admin.analyzer.label"),help:n().translator.trans("blomstra-search.admin.analyzer.help"),type:"select-or-input",options:Object.fromEntries(t.entries()),checkboxDescription:n().translator.trans("blomstra-search.admin.analyzer.custom"),default:"english"}).registerSetting({setting:"blomstra-search.elastic-index",label:n().translator.trans("blomstra-search.admin.elastic-index"),default:"flarum",type:"input"}).registerSetting({setting:"blomstra-search.search-discussion-subjects",label:n().translator.trans("blomstra-search.admin.search-discussion-subjects"),type:"switch"}).registerSetting({setting:"blomstra-search.search-post-bodies",label:n().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=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 \ No newline at end of file diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index 89ba30b..59e0b60 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@blomstra/search/webpack/bootstrap","webpack://@blomstra/search/webpack/runtime/compat get default export","webpack://@blomstra/search/webpack/runtime/define property getters","webpack://@blomstra/search/webpack/runtime/hasOwnProperty shorthand","webpack://@blomstra/search/webpack/runtime/make namespace object","webpack://@blomstra/search/external root \"flarum.core.compat['admin/app']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/extend']\"","webpack://@blomstra/search/external root \"flarum.core.compat['admin/components/AdminPage']\"","webpack://@blomstra/search/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@blomstra/search/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@blomstra/search/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/Component']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/components/Select']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/components/Checkbox']\"","webpack://@blomstra/search/./src/common/Components/SelectOrInput.tsx","webpack://@blomstra/search/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@blomstra/search/external root \"flarum.core.compat['admin/utils/generateElementId']\"","webpack://@blomstra/search/./src/admin/ConfigToComponents/buildSelectOrInput.tsx","webpack://@blomstra/search/./src/admin/extendCustomSettingComponents.ts","webpack://@blomstra/search/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/AdminPage'];","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Select'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Checkbox'];","import Mithril from 'mithril';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport Component, { ComponentAttrs } from 'flarum/common/Component';\r\nimport Select from 'flarum/common/components/Select';\r\nimport Checkbox, { ICheckboxAttrs } from 'flarum/common/components/Checkbox';\r\n\r\ntype visibility = 'visible' | 'hidden';\r\n\r\ninterface ISelectAttrs extends ComponentAttrs {\r\n options: { [k: string]: Mithril.Children };\r\n onchange: (value: string) => void;\r\n value?: string;\r\n disabled?: boolean;\r\n wrapperAttrs?: ComponentAttrs;\r\n}\r\n\r\ninterface ISubSelectAttrs extends ComponentAttrs {\r\n wrapperAttrs?: ComponentAttrs;\r\n}\r\n\r\nexport interface ISelectOrInputAttrs<\r\n SelectAttrs extends ISubSelectAttrs = ISubSelectAttrs\r\n> extends ComponentAttrs {\r\n onchange: (value: string) => void;\r\n options: { [k: string]: Mithril.Children };\r\n value?: string;\r\n disabled?: boolean;\r\n checkboxDescription?: string;\r\n selectAttrs?: SelectAttrs;\r\n rawTextInputAttrs?: ComponentAttrs;\r\n}\r\n\r\n// when value is `undefined`, choose the first item of select\r\n// when value is in select, use value as value of select\r\n// otherwise, use value as value of input\r\nexport default class SelectOrInput extends Component { \r\n private onCheckboxChange(checked: boolean, component: Checkbox) {\r\n this.attrs.value = checked ? '' : undefined;\r\n this.attrs.onchange(this.attrs.value!);\r\n m.redraw();\r\n }\r\n private onSelectChange(value: string) {\r\n this.attrs.value = value;\r\n this.attrs.onchange(value);\r\n }\r\n private onInputChange(event: Event) {\r\n const value = (event.target as HTMLInputElement).value;\r\n this.attrs.value = value;\r\n this.attrs.onchange(value);\r\n }\r\n \r\n view(vnode: Mithril.Vnode) {\r\n const {\r\n class: _class,\r\n className,\r\n onchange,\r\n options,\r\n value: _value,\r\n disabled,\r\n selectAttrs,\r\n rawTextInputAttrs,\r\n ...domAttrs\r\n } = this.attrs;\r\n\r\n var useinput: boolean; var value: string;\r\n const selectOptionValues = Object.keys(options);\r\n\r\n if (typeof _value === 'undefined') {\r\n value = selectOptionValues[0];\r\n this.attrs.value = value;\r\n useinput = false;\r\n } else {\r\n value = _value;\r\n useinput = !(selectOptionValues.indexOf(value!) > -1);\r\n }\r\n\r\n const {\r\n class: inputClass,\r\n className: inputClassName,\r\n ...otherInputAttrs\r\n } = rawTextInputAttrs ?? {};\r\n\r\n return (\r\n \r\n {this.attrs.checkboxDescription ?? ''}\r\n
\r\n \r\n
\r\n
\r\n {!useinput\r\n ? \r\n : \r\n }\r\n
\r\n \r\n );\r\n }\r\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/utils/generateElementId'];","import type Mithril from 'mithril';\r\nimport type Stream from 'mithril/stream';\r\nimport app from 'flarum/admin/app';\r\nimport AdminPage, { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage';\r\nimport SelectOrInput from \"../../common/Components/SelectOrInput\";\r\nimport generateElementId from 'flarum/admin/utils/generateElementId';\r\n\r\n// forgive me, but this interface is just what its name implies\r\ninterface SelectOrInputSettingComponentOptionsWithoutType extends CommonSettingsItemOptions {\r\n options: { [value: string]: Mithril.Children };\r\n checkboxDescription: string;\r\n default: string;\r\n}\r\n\r\nexport interface SelectOrInputSettingComponentOptions extends SelectOrInputSettingComponentOptionsWithoutType {\r\n type: 'select-or-input';\r\n}\r\n\r\ninterface StreamWithMark extends Stream {\r\n mark?: true;\r\n}\r\n\r\nexport default function (this: AdminPage, _entry: CommonSettingsItemOptions) {\r\n // do this cast because function signature is restricted\r\n const entry = _entry as SelectOrInputSettingComponentOptionsWithoutType;\r\n const [inputId, helpTextId] = [generateElementId(), generateElementId()];\r\n const { setting, help, label, ...componentAttrs } = entry;\r\n const { default: defaultValue, options, checkboxDescription, ...otherAttrs } = componentAttrs;\r\n \r\n let settingElement: Mithril.Children;\r\n // Trick: add a marker property to the AdminPage's setting stream,\r\n // which contructs and destructs with AdminPage so that default is\r\n // only loaded when the page is created.\r\n // Default should only be loaded once in a page because when checkbox\r\n // is checked, SelectOrInput will set its value to empty string so that\r\n // it becomes an empty input. If default is loaded every time when value\r\n // is falsy, SelectOrInput will not work properly.\r\n const settingStream = this.settings[setting] as StreamWithMark;\r\n let value = settingStream();\r\n if (!settingStream.mark) {\r\n settingStream.mark = true;\r\n if (!value) {\r\n app.data.settings[setting] = defaultValue;\r\n settingStream(defaultValue);\r\n value = settingStream();\r\n }\r\n }\r\n\r\n settingElement = (\r\n \r\n );\r\n\r\n return (\r\n
\r\n {label && }\r\n
{help}
\r\n {settingElement}\r\n
\r\n );\r\n}\r\n","import { extend } from 'flarum/common/extend';\r\nimport AdminPage, { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage';\r\nimport buildSelectOrInput from './ConfigToComponents/buildSelectOrInput';\r\n\r\nexport default function() {\r\n extend(AdminPage.prototype, 'customSettingComponents', function (items) {\r\n items.add('select-or-input', buildSelectOrInput.bind(this));\r\n })\r\n}","import app from 'flarum/admin/app';\r\nimport extendCustomSettingComponents from './extendCustomSettingComponents';\r\n\r\napp.initializers.add('blomstra-search', () => {\r\n extendCustomSettingComponents();\r\n\r\n const languages = new Map();\r\n [\r\n 'arabic',\r\n 'armenian',\r\n 'basque',\r\n 'bengali',\r\n 'brazilian',\r\n 'bulgarian',\r\n 'catalan',\r\n 'cjk',\r\n 'czech',\r\n 'danish',\r\n 'dutch',\r\n 'english',\r\n 'estonian',\r\n 'finnish',\r\n 'french',\r\n 'galician',\r\n 'german',\r\n 'greek',\r\n 'hindi',\r\n 'hungarian',\r\n 'indonesian',\r\n 'irish',\r\n 'italian',\r\n 'latvian',\r\n 'lithuanian',\r\n 'norwegian',\r\n 'persian',\r\n 'portuguese',\r\n 'romanian',\r\n 'russian',\r\n 'sorani',\r\n 'spanish',\r\n 'swedish',\r\n 'turkish',\r\n 'thai',\r\n ].forEach((language) => {\r\n languages.set(language, language);\r\n });\r\n\r\n app.extensionData\r\n .for('blomstra-search')\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-endpoint',\r\n label: app.translator.trans('blomstra-search.admin.elastic-endpoint'),\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-username',\r\n label: app.translator.trans('blomstra-search.admin.elastic-username'),\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-password',\r\n label: app.translator.trans('blomstra-search.admin.elastic-password'),\r\n type: 'password',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-index',\r\n label: app.translator.trans('blomstra-search.admin.elastic-index'),\r\n default: 'flarum',\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.analyzer-language',\r\n label: app.translator.trans('blomstra-search.admin.analyzer.label'),\r\n help: app.translator.trans('blomstra-search.admin.analyzer.help'),\r\n type: 'select-or-input',\r\n options: Object.fromEntries(languages.entries()),\r\n checkboxDescription: app.translator.trans('blomstra-search.admin.analyzer.custom'),\r\n default: 'english',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-index',\r\n label: app.translator.trans('blomstra-search.admin.elastic-index'),\r\n default: 'flarum',\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.search-discussion-subjects',\r\n label: app.translator.trans('blomstra-search.admin.search-discussion-subjects'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.search-post-bodies',\r\n label: app.translator.trans('blomstra-search.admin.search-post-bodies'),\r\n type: 'switch',\r\n });\r\n});\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_objectWithoutPropertiesLoose","source","excluded","i","target","sourceKeys","keys","length","indexOf","_setPrototypeOf","p","setPrototypeOf","__proto__","SelectOrInput","subClass","superClass","create","constructor","onCheckboxChange","checked","component","this","attrs","undefined","onchange","m","redraw","onSelectChange","onInputChange","event","view","vnode","useinput","_class","className","options","_value","disabled","selectAttrs","rawTextInputAttrs","domAttrs","selectOptionValues","inputClass","inputClassName","otherInputAttrs","classList","checkboxDescription","style","state","bind","type","Component","_entry","settingElement","entry","generateElementId","inputId","helpTextId","setting","help","label","componentAttrs","defaultValue","otherAttrs","settingStream","settings","mark","app","id","for","extend","AdminPage","items","add","buildSelectOrInput","extendCustomSettingComponents","languages","Map","forEach","language","set","registerSetting","default","fromEntries","entries"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@blomstra/search/webpack/bootstrap","webpack://@blomstra/search/webpack/runtime/compat get default export","webpack://@blomstra/search/webpack/runtime/define property getters","webpack://@blomstra/search/webpack/runtime/hasOwnProperty shorthand","webpack://@blomstra/search/webpack/runtime/make namespace object","webpack://@blomstra/search/external root \"flarum.core.compat['admin/app']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/extend']\"","webpack://@blomstra/search/external root \"flarum.core.compat['admin/components/AdminPage']\"","webpack://@blomstra/search/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@blomstra/search/external root \"flarum.core.compat['common/utils/Stream']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/utils/withAttr']\"","webpack://@blomstra/search/external root \"flarum.core.compat['common/components/Select']\"","webpack://@blomstra/search/external root \"flarum.core.compat['admin/utils/generateElementId']\"","webpack://@blomstra/search/./src/admin/ConfigToComponents/buildSelectOrInput.tsx","webpack://@blomstra/search/./src/admin/extendCustomSettingComponents.ts","webpack://@blomstra/search/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/AdminPage'];","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/Stream'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/withAttr'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Select'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/utils/generateElementId'];","import type Mithril from 'mithril';\r\nimport Stream from 'flarum/common/utils/Stream';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport withAttr from 'flarum/common/utils/withAttr';\r\nimport AdminPage, { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage';\r\nimport Select from 'flarum/common/components/Select';\r\nimport generateElementId from 'flarum/admin/utils/generateElementId';\r\n\r\n// forgive me, but this interface is just what its name implies\r\ninterface SelectOrInputSettingComponentOptionsWithoutType extends CommonSettingsItemOptions {\r\n options: { [value: string]: Mithril.Children };\r\n inputDescription: string;\r\n default: string;\r\n}\r\n\r\nexport interface SelectOrInputSettingComponentOptions extends SelectOrInputSettingComponentOptionsWithoutType {\r\n type: 'select-or-input';\r\n}\r\n\r\ninterface StreamWithUpstream extends Stream {\r\n upstreams?: Array>;\r\n}\r\n\r\nfunction mergeSelectOrInput(\r\n selectStream: Stream, inputStream: Stream,\r\n changed: Array>\r\n) {\r\n return inputStream() || selectStream();\r\n}\r\n\r\nexport default function (this: AdminPage, _entry: CommonSettingsItemOptions) {\r\n // do this cast because function signature is restricted\r\n const entry = _entry as SelectOrInputSettingComponentOptionsWithoutType;\r\n const [selectId, inputId, helpTextId] = [generateElementId(), generateElementId(), generateElementId()];\r\n const { setting, help, label, ...componentAttrs } = entry;\r\n const { default: defaultValue, options, inputDescription, className, ...otherAttrs } = componentAttrs;\r\n\r\n let settingStream = this.settings[setting] as StreamWithUpstream;\r\n \r\n if (!settingStream.upstreams) {\r\n let value = settingStream() || defaultValue;\r\n let selectStream = Stream();\r\n let inputStream = Stream();\r\n let upstreams = [selectStream, inputStream]\r\n settingStream = Stream.combine(mergeSelectOrInput, upstreams);\r\n settingStream.upstreams = upstreams;\r\n let useSelect = Object.keys(options).indexOf(value) > -1;\r\n if (useSelect) {\r\n selectStream(value);\r\n inputStream('');\r\n } else {\r\n selectStream(defaultValue);\r\n inputStream(value);\r\n }\r\n this.settings[setting] = settingStream;\r\n }\r\n\r\n let [selectStream, inputStream] = settingStream.upstreams!;\r\n\r\n let selectElement = (\r\n \r\n );\r\n\r\n let inputElement = (\r\n \r\n );\r\n\r\n return (\r\n
\r\n {label && }\r\n
{help}
\r\n {selectElement}\r\n {inputDescription && }\r\n {inputElement}\r\n
\r\n );\r\n}\r\n","import { extend } from 'flarum/common/extend';\r\nimport AdminPage, { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage';\r\nimport buildSelectOrInput from './ConfigToComponents/buildSelectOrInput';\r\n\r\nexport default function() {\r\n extend(AdminPage.prototype, 'customSettingComponents', function (items) {\r\n items.add('select-or-input', buildSelectOrInput.bind(this));\r\n })\r\n}","import app from 'flarum/admin/app';\r\nimport extendCustomSettingComponents from './extendCustomSettingComponents';\r\n\r\napp.initializers.add('blomstra-search', () => {\r\n extendCustomSettingComponents();\r\n\r\n const languages = new Map();\r\n [\r\n 'arabic',\r\n 'armenian',\r\n 'basque',\r\n 'bengali',\r\n 'brazilian',\r\n 'bulgarian',\r\n 'catalan',\r\n 'cjk',\r\n 'czech',\r\n 'danish',\r\n 'dutch',\r\n 'english',\r\n 'estonian',\r\n 'finnish',\r\n 'french',\r\n 'galician',\r\n 'german',\r\n 'greek',\r\n 'hindi',\r\n 'hungarian',\r\n 'indonesian',\r\n 'irish',\r\n 'italian',\r\n 'latvian',\r\n 'lithuanian',\r\n 'norwegian',\r\n 'persian',\r\n 'portuguese',\r\n 'romanian',\r\n 'russian',\r\n 'sorani',\r\n 'spanish',\r\n 'swedish',\r\n 'turkish',\r\n 'thai',\r\n ].forEach((language) => {\r\n languages.set(language, language);\r\n });\r\n\r\n app.extensionData\r\n .for('blomstra-search')\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-endpoint',\r\n label: app.translator.trans('blomstra-search.admin.elastic-endpoint'),\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-username',\r\n label: app.translator.trans('blomstra-search.admin.elastic-username'),\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-password',\r\n label: app.translator.trans('blomstra-search.admin.elastic-password'),\r\n type: 'password',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-index',\r\n label: app.translator.trans('blomstra-search.admin.elastic-index'),\r\n default: 'flarum',\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.analyzer-language',\r\n label: app.translator.trans('blomstra-search.admin.analyzer.label'),\r\n help: app.translator.trans('blomstra-search.admin.analyzer.help'),\r\n type: 'select-or-input',\r\n options: Object.fromEntries(languages.entries()),\r\n inputDescription: app.translator.trans('blomstra-search.admin.analyzer.custom'),\r\n default: 'english',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.elastic-index',\r\n label: app.translator.trans('blomstra-search.admin.elastic-index'),\r\n default: 'flarum',\r\n type: 'input',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.search-discussion-subjects',\r\n label: app.translator.trans('blomstra-search.admin.search-discussion-subjects'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'blomstra-search.search-post-bodies',\r\n label: app.translator.trans('blomstra-search.admin.search-post-bodies'),\r\n type: 'switch',\r\n });\r\n});\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_objectWithoutPropertiesLoose","source","excluded","i","target","sourceKeys","keys","length","indexOf","mergeSelectOrInput","selectStream","inputStream","changed","_entry","entry","generateElementId","selectId","inputId","helpTextId","setting","help","label","componentAttrs","defaultValue","options","inputDescription","className","otherAttrs","settingStream","this","settings","upstreams","Stream","selectElement","id","onchange","inputElement","classList","type","withAttr","for","style","extend","AdminPage","items","add","buildSelectOrInput","bind","app","extendCustomSettingComponents","languages","Map","forEach","language","set","registerSetting","default","fromEntries","entries"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/admin/ConfigToComponents/buildSelectOrInput.tsx b/js/src/admin/ConfigToComponents/buildSelectOrInput.tsx index 5a776f8..b063f7c 100644 --- a/js/src/admin/ConfigToComponents/buildSelectOrInput.tsx +++ b/js/src/admin/ConfigToComponents/buildSelectOrInput.tsx @@ -1,14 +1,15 @@ import type Mithril from 'mithril'; -import type Stream from 'mithril/stream'; -import app from 'flarum/admin/app'; +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 SelectOrInput from "../../common/Components/SelectOrInput"; +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 }; - checkboxDescription: string; + inputDescription: string; default: string; } @@ -16,53 +17,76 @@ export interface SelectOrInputSettingComponentOptions extends SelectOrInputSetti type: 'select-or-input'; } -interface StreamWithMark extends Stream { - mark?: true; +interface StreamWithUpstream extends Stream { + upstreams?: Array>; +} + +function mergeSelectOrInput( + selectStream: Stream, inputStream: Stream, + changed: Array> +) { + return inputStream() || selectStream(); } export default function (this: AdminPage, _entry: CommonSettingsItemOptions) { // do this cast because function signature is restricted const entry = _entry as SelectOrInputSettingComponentOptionsWithoutType; - const [inputId, helpTextId] = [generateElementId(), generateElementId()]; + const [selectId, inputId, helpTextId] = [generateElementId(), generateElementId(), generateElementId()]; const { setting, help, label, ...componentAttrs } = entry; - const { default: defaultValue, options, checkboxDescription, ...otherAttrs } = componentAttrs; + const { default: defaultValue, options, inputDescription, className, ...otherAttrs } = componentAttrs; + + let settingStream = this.settings[setting] as StreamWithUpstream; - let settingElement: Mithril.Children; - // Trick: add a marker property to the AdminPage's setting stream, - // which contructs and destructs with AdminPage so that default is - // only loaded when the page is created. - // Default should only be loaded once in a page because when checkbox - // is checked, SelectOrInput will set its value to empty string so that - // it becomes an empty input. If default is loaded every time when value - // is falsy, SelectOrInput will not work properly. - const settingStream = this.settings[setting] as StreamWithMark; - let value = settingStream(); - if (!settingStream.mark) { - settingStream.mark = true; - if (!value) { - app.data.settings[setting] = defaultValue; - settingStream(defaultValue); - value = settingStream(); + 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; } - settingElement = ( - + ); + + let inputElement = ( + ); return (
- {label && } + {label && }
{help}
- {settingElement} + {selectElement} + {inputDescription && } + {inputElement}
); } diff --git a/js/src/admin/index.ts b/js/src/admin/index.ts index b43808b..3332c1f 100644 --- a/js/src/admin/index.ts +++ b/js/src/admin/index.ts @@ -74,7 +74,7 @@ app.initializers.add('blomstra-search', () => { help: app.translator.trans('blomstra-search.admin.analyzer.help'), type: 'select-or-input', options: Object.fromEntries(languages.entries()), - checkboxDescription: app.translator.trans('blomstra-search.admin.analyzer.custom'), + inputDescription: app.translator.trans('blomstra-search.admin.analyzer.custom'), default: 'english', }) .registerSetting({ diff --git a/js/src/common/Components/SelectOrInput.tsx b/js/src/common/Components/SelectOrInput.tsx deleted file mode 100644 index 6b594f0..0000000 --- a/js/src/common/Components/SelectOrInput.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import Mithril from 'mithril'; -import classList from 'flarum/common/utils/classList'; -import Component, { ComponentAttrs } from 'flarum/common/Component'; -import Select from 'flarum/common/components/Select'; -import Checkbox, { ICheckboxAttrs } from 'flarum/common/components/Checkbox'; - -type visibility = 'visible' | 'hidden'; - -interface ISelectAttrs extends ComponentAttrs { - options: { [k: string]: Mithril.Children }; - onchange: (value: string) => void; - value?: string; - disabled?: boolean; - wrapperAttrs?: ComponentAttrs; -} - -interface ISubSelectAttrs extends ComponentAttrs { - wrapperAttrs?: ComponentAttrs; -} - -export interface ISelectOrInputAttrs< - SelectAttrs extends ISubSelectAttrs = ISubSelectAttrs -> extends ComponentAttrs { - onchange: (value: string) => void; - options: { [k: string]: Mithril.Children }; - value?: string; - disabled?: boolean; - checkboxDescription?: string; - selectAttrs?: SelectAttrs; - rawTextInputAttrs?: ComponentAttrs; -} - -// when value is `undefined`, choose the first item of select -// when value is in select, use value as value of select -// otherwise, use value as value of input -export default class SelectOrInput extends Component { - private onCheckboxChange(checked: boolean, component: Checkbox) { - this.attrs.value = checked ? '' : undefined; - this.attrs.onchange(this.attrs.value!); - m.redraw(); - } - private onSelectChange(value: string) { - this.attrs.value = value; - this.attrs.onchange(value); - } - private onInputChange(event: Event) { - const value = (event.target as HTMLInputElement).value; - this.attrs.value = value; - this.attrs.onchange(value); - } - - view(vnode: Mithril.Vnode) { - const { - class: _class, - className, - onchange, - options, - value: _value, - disabled, - selectAttrs, - rawTextInputAttrs, - ...domAttrs - } = this.attrs; - - var useinput: boolean; var value: string; - const selectOptionValues = Object.keys(options); - - if (typeof _value === 'undefined') { - value = selectOptionValues[0]; - this.attrs.value = value; - useinput = false; - } else { - value = _value; - useinput = !(selectOptionValues.indexOf(value!) > -1); - } - - const { - class: inputClass, - className: inputClassName, - ...otherInputAttrs - } = rawTextInputAttrs ?? {}; - - return ( -
- {this.attrs.checkboxDescription ?? ''} -
- -
-
- {!useinput - ? - } -
-
- ); - } -} \ No newline at end of file