{"version":3,"file":"virtual_main.js","sources":["theme-22/virtual:init-settings","theme-22/virtual:theme","theme-22/discourse/components/sidebar-user-field-toggle.gjs","theme-22/discourse/components/sidebar-user-field-toggles.gjs","theme-22/discourse/api-initializers/theme-initializer.js","theme-22/virtual:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(22, {\n  \"user_field_settings\": [\n    {\n      \"id\": \"8\",\n      \"label\": \"NSFW\",\n      \"title\": \"Enable/disable NSFW mode\",\n      \"emphasize\": \"both\",\n      \"svg_enabled\": \"toggle-on\",\n      \"svg_disabled\": \"toggle-off\"\n    }\n  ],\n  \"svg_icons\": \"toggle-on|toggle-off\"\n});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(22);\n\nexport function themePrefix(key) {\n  return `theme_translations.22.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport DButton from \"discourse/components/d-button\";\n\nexport default class SidebarUserFieldToggle extends Component {\n  get className() {\n    const classNames = [\n      \"sidebar-footer-actions-button\",\n      \"sidebar-user-field-toggle-button\",\n      `toggle-field-${this.args.field}`,\n    ];\n    switch (this.args.emphasize) {\n      case \"enabled\": {\n        if (this.status) {\n          classNames.push(\"emphasized\");\n        }\n        break;\n      }\n      case \"disabled\": {\n        if (!this.status) {\n          classNames.push(\"emphasized\");\n        }\n        break;\n      }\n      case \"both\": {\n        classNames.push(\"emphasized\");\n      }\n    }\n    return classNames.join(\" \");\n  }\n\n  get icon() {\n    return this.args.status ? this.args.iconEnabled : this.args.iconDisabled;\n  }\n\n  @action\n  updateStatus() {\n    this.args.updateStatus(this.args.field, !this.args.status);\n  }\n\n  <template>\n    <DButton\n      class={{this.className}}\n      @translatedLabel={{@label}}\n      @translatedTitle={{@title}}\n      @action={{this.updateStatus}}\n      @icon={{this.icon}}\n    />\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { ajax } from \"discourse/lib/ajax\";\nimport { popupAjaxError } from \"discourse/lib/ajax-error\";\nimport { userPath } from \"discourse/lib/url\";\nimport SidebarUserFieldToggle from \"./sidebar-user-field-toggle\";\n\nfunction to_boolean(x) {\n  if (x === \"false\") {\n    return false;\n  }\n  return Boolean(x);\n}\n\nexport default class SidebarUserFieldToggles extends Component {\n  @service currentUser;\n  @service appEvents;\n  @service siteSettings;\n\n  @tracked toggles = [];\n\n  constructor() {\n    super(...arguments);\n    const source =\n      this.currentUser?.custom_fields ||\n      JSON.parse(\n        window.localStorage.getItem(\"anon_sidebar_user_fields\") || \"{}\"\n      );\n    this.toggles = settings.user_field_settings.map((x) => ({\n      ...x,\n      status:\n        to_boolean(source[`user_field_${x.id}`]) || to_boolean(source[x.id]),\n    }));\n    if (this.currentUser != null) {\n      window.localStorage.removeItem(\"anon_sidebar_user_fields\");\n    }\n  }\n\n  intoUserFields() {\n    return Object.fromEntries(\n      this.toggles.map((t) => [t.id, String(t.status)])\n    );\n  }\n\n  // 兼容性\n  sendOldApiEvent() {\n    // Use `api.onAppEvent(\"sidebar_user_fields_toggled\", (e) => { ... });`\n    // to handle button toggle event\n    this.appEvents.trigger(\"sidebar_user_fields_toggled\", {\n      user_fields: this.intoUserFields(),\n    });\n  }\n\n  @action\n  updateStatus(field, status) {\n    this.toggles = this.toggles.map((toggle) => {\n      if (toggle.id === field) {\n        return { ...toggle, status };\n      }\n      return toggle;\n    });\n\n    if (this.currentUser != null) {\n      ajax(userPath(`${this.currentUser.username_lower}.json`), {\n        data: {\n          user_fields: {\n            [field]: status,\n          },\n        },\n        type: \"PUT\",\n      })\n        .then((res) => {\n          this.currentUser.set(\"user_fields\", res.user.user_fields);\n          // Use `api.onAppEvent(\"sidebar_user_fields_updated\", (user) => { ... });`\n          // to handle user_field change event\n          this.appEvents.trigger(\"sidebar_user_fields_updated\", res.user);\n        })\n        .catch(popupAjaxError);\n    } else {\n      window.localStorage.setItem(\n        \"anon_sidebar_user_fields\",\n        JSON.stringify(this.intoUserFields())\n      );\n    }\n\n    this.sendOldApiEvent();\n    this.appEvents.trigger(\"sidebar_user_fields.toggled\", [field, status]);\n  }\n\n  <template>\n    <div class=\"sidebar-user-field-toggles\">\n      {{#each this.toggles as |toggle|}}\n        <SidebarUserFieldToggle\n          @status={{toggle.status}}\n          @field={{toggle.id}}\n          @label={{toggle.label}}\n          @title={{toggle.title}}\n          @iconEnabled={{toggle.svg_enabled}}\n          @iconDisabled={{toggle.svg_disabled}}\n          @emphasize={{toggle.emphasize}}\n          @updateStatus={{this.updateStatus}}\n        />\n      {{/each}}\n    </div>\n  </template>\n}\n","import { apiInitializer } from \"discourse/lib/api\";\nimport SidebarUserFieldToggles from \"../components/sidebar-user-field-toggles\";\n\nexport default apiInitializer((api) => {\n  api.renderInOutlet(\"sidebar-footer-actions\", SidebarUserFieldToggles);\n\n  // 为了兼容性……\n  const source =\n    api.getCurrentUser()?.custom_fields ||\n    JSON.parse(window.localStorage.getItem(\"anon_sidebar_user_fields\") || \"{}\");\n\n  api.container\n    .lookup(\"service:appEvents\")\n    .trigger(\"sidebar_user_fields_toggled\", {\n      user_fields: Object.fromEntries(\n        settings.user_field_settings.map((x) => [\n          x.id,\n          source[`user_field_${x.id}`] || source[x.id],\n        ])\n      ),\n    });\n});\n","import \"virtual:init-settings\";\n\nconst themeCompatModules = {};\nimport * as Mod1 from \"./discourse/api-initializers/theme-initializer\";\nthemeCompatModules[\"discourse/api-initializers/theme-initializer\"] = Mod1;\n\nimport * as Mod2 from \"./discourse/components/sidebar-user-field-toggle\";\nthemeCompatModules[\"discourse/components/sidebar-user-field-toggle\"] = Mod2;\n\nimport * as Mod3 from \"./discourse/components/sidebar-user-field-toggles\";\nthemeCompatModules[\"discourse/components/sidebar-user-field-toggles\"] = Mod3;\n\nexport default themeCompatModules;\n"],"names":["registerSettings","user_field_settings","id","label","title","emphasize","svg_enabled","svg_disabled","svg_icons","settings","getObjectForTheme","SidebarUserFieldToggle","Component","className","classNames","this","args","field","status","push","join","icon","iconEnabled","iconDisabled","updateStatus","static","dt7948","n","prototype","action","setComponentTemplate","createTemplateFactory","block","moduleName","scope","DButton","isStrictMode","to_boolean","x","Boolean","SidebarUserFieldToggles","g","service","currentUser","i","appEvents","siteSettings","tracked","toggles","constructor","super","arguments","source","custom_fields","JSON","parse","window","localStorage","getItem","map","removeItem","intoUserFields","Object","fromEntries","t","String","sendOldApiEvent","trigger","user_fields","toggle","ajax","userPath","username_lower","data","type","then","res","set","user","catch","popupAjaxError","setItem","stringify","themeInitializer","apiInitializer","api","renderInOutlet","getCurrentUser","container","lookup","themeCompatModules","Mod1","Mod2","Mod3"],"mappings":";AAEAA,EAAiB,GAAI,CACnBC,oBAAuB,CACrB,CACEC,GAAM,IACNC,MAAS,OACTC,MAAS,2BACTC,UAAa,OACbC,YAAe,YACfC,aAAgB,eAGpBC,UAAa;ACXR,MAAMC,EAAWC,EAAkB;ACE3B,MAAMC,UAA+BC,EAClD,aAAIC,GACF,MAAMC,EAAa,CACjB,gCACA,mCACA,gBAAgBC,KAAKC,KAAKC;AAE5B,OAAQF,KAAKC,KAAKX,WAChB,IAAK,UACCU,KAAKG,QACPJ,EAAWK,KAAK;AAElB;AAEF,IAAK,WACEJ,KAAKG,QACRJ,EAAWK,KAAK;AAElB;AAEF,IAAK,OACHL,EAAWK,KAAK,cAGpB,OAAOL,EAAWM,KAAK,IACzB,CAEA,QAAIC,GACF,OAAON,KAAKC,KAAKE,OAASH,KAAKC,KAAKM,YAAcP,KAAKC,KAAKO,YAC9D,CAGAC,YAAAA,GACET,KAAKC,KAAKQ,aAAaT,KAAKC,KAAKC,OAAQF,KAAKC,KAAKE,OACrD,CAAAO,cAAAC,OAAAC,EAAAZ,KAAAa,0BAHCC;AAAAJ,SAAA,KAAAK,EAAAC,EAAA,CAAA7B,GAAA,KAAA8B,MAAA,+NAAAC,WAAA,+DAAAC,MAAAA,KAAAC,GAAAC,cAAA,IAaDrB,MAbC;AC1BH,SAASsB,EAAWC,GAClB,MAAU,UAANA,GAGGC,QAAQD,EACjB,CAEe,MAAME,UAAgC5B,EAAAa,cAAAC,OAAAe,EAAA1B,KAAAa,yBAClDc;AAAAC,GAAA,MAAAjB,OAAAkB,qBAAA,EAAA;AAAAnB,cAAAC,OAAAe,EAAA1B,KAAAa,uBACAc;AAAAG,GAAA,MAAAnB,OAAAkB,mBAAA,EAAA;AAAAnB,cAAAC,OAAAe,EAAA1B,KAAAa,0BACAc;AAAAI,GAAA,MAAApB,OAAAkB,sBAAA,EAAA;AAAAnB,cAAAC,OAAAe,EAAA1B,KAAAa,qBAEAmB,GAAA,WAAA,MAAkB,EAAE;AAAAC,GAAA,MAAAtB,OAAAkB,iBAAA,EAAA;AAErBK,WAAAA,GACEC,SAASC;AACT,MAAMC,EACJrC,KAAK4B,aAAaU,eAClBC,KAAKC,MACHC,OAAOC,aAAaC,QAAQ,6BAA+B;AAE/D3C,KAAKiC,QAAUvC,EAASR,oBAAoB0D,IAAKrB,IAAA,IAC5CA,EACHpB,OACEmB,EAAWe,EAAO,cAAcd,EAAEpC,QAAUmC,EAAWe,EAAOd,EAAEpC,QAE5C,MAApBa,KAAK4B,aACPa,OAAOC,aAAaG,WAAW,2BAEnC,CAEAC,cAAAA,GACE,OAAOC,OAAOC,YACZhD,KAAKiC,QAAQW,IAAKK,GAAM,CAACA,EAAE9D,GAAI+D,OAAOD,EAAE9C,UAE5C,CAGAgD,eAAAA,GAGEnD,KAAK8B,UAAUsB,QAAQ,8BAA+B,CACpDC,YAAarD,KAAK8C,kBAEtB,CAGArC,YAAAA,CAAaP,EAAOC,GAClBH,KAAKiC,QAAUjC,KAAKiC,QAAQW,IAAKU,GAC3BA,EAAOnE,KAAOe,EACT,IAAKoD,EAAQnD,UAEfmD,GAGe,MAApBtD,KAAK4B,YACP2B,EAAKC,EAAS,GAAGxD,KAAK4B,YAAY6B,uBAAwB,CACxDC,KAAM,CACJL,YAAa,CACXnD,CAACA,GAAQC,IAGbwD,KAAM,QAELC,KAAMC,IACL7D,KAAK4B,YAAYkC,IAAI,cAAeD,EAAIE,KAAKV,aAG7CrD,KAAK8B,UAAUsB,QAAQ,8BAA+BS,EAAIE,QAE3DC,MAAMC,GAETxB,OAAOC,aAAawB,QAClB,2BACA3B,KAAK4B,UAAUnE,KAAK8C,mBAIxB9C,KAAKmD,kBACLnD,KAAK8B,UAAUsB,QAAQ,8BAA+B,CAAClD,EAAOC,GAChE,CAAAO,cAAAC,OAAAC,EAAAZ,KAAAa,0BAlCCC;AAAAJ,SAAA,KAAAK,EAAAC,EAAA,CAAA7B,GAAA,KAAA8B,MAAA,shBAAAC,WAAA,gEAAAC,MAAAA,KAAAvB,GAAAyB,cAAA,IAmDDrB,MAnDC,mDCpDHoE,EAAeC,EAAgBC,IAC7BA,EAAIC,eAAe,yBAA0B9C;AAG7C,MAAMY,EACJiC,EAAIE,kBAAkBlC,eACtBC,KAAKC,MAAMC,OAAOC,aAAaC,QAAQ,6BAA+B;AAExE2B,EAAIG,UACDC,OAAO,qBACPtB,QAAQ,8BAA+B,CACtCC,YAAaN,OAAOC,YAClBtD,EAASR,oBAAoB0D,IAAKrB,GAAM,CACtCA,EAAEpC,GACFkD,EAAO,cAAcd,EAAEpC,OAASkD,EAAOd,EAAEpC;ACf9C,MAACwF,EAAqB,CAAA;AAE3BA,EAAmB,gDAAkDC,EAGrED,EAAmB,kDAAoDE,EAGvEF,EAAmB,mDAAqDG;"}