MarkDownSettingContainer.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { Container } from 'unstated';
  2. /**
  3. * Service container for admin markdown setting page (MarkDownSetting.jsx)
  4. * @extends {Container} unstated Container
  5. */
  6. export default class MarkDownSettingContainer extends Container {
  7. constructor(appContainer) {
  8. super();
  9. this.appContainer = appContainer;
  10. this.state = {
  11. isEnabledLinebreaks: appContainer.config.isEnabledLinebreaks,
  12. isEnabledLinebreaksInComments: appContainer.config.isEnabledLinebreaksInComments,
  13. pageBreakOption: appContainer.config.pageBreakOption,
  14. customRegularExpression: appContainer.config.customRegularExpression || '',
  15. isEnabledXss: (appContainer.config.xssOption != null),
  16. xssOption: appContainer.config.xssOption,
  17. tagWhiteList: appContainer.config.tagWhiteList || '',
  18. attrWhiteList: appContainer.config.attrWhiteList || '',
  19. };
  20. this.switchEnableXss = this.switchEnableXss.bind(this);
  21. }
  22. /**
  23. * Workaround for the mangling in production build to break constructor.name
  24. */
  25. static getClassName() {
  26. return 'MarkDownSettingContainer';
  27. }
  28. /**
  29. * Switch enableXss
  30. */
  31. switchEnableXss() {
  32. if (this.state.isEnabledXss) {
  33. this.setState({ xssOption: null });
  34. }
  35. this.setState({ isEnabledXss: !this.state.isEnabledXss });
  36. }
  37. /**
  38. * Update LineBreak Setting
  39. */
  40. async updateLineBreakSetting() {
  41. const response = await this.appContainer.apiv3.put('/markdown-setting/lineBreak', {
  42. isEnabledLinebreaks: this.state.isEnabledLinebreaks,
  43. isEnabledLinebreaksInComments: this.state.isEnabledLinebreaksInComments,
  44. });
  45. return response;
  46. }
  47. /**
  48. * Update Xss Setting
  49. */
  50. async updateXssSetting() {
  51. const response = await this.appContainer.apiv3.put('/markdown-setting/xss', {
  52. isEnabledXss: this.state.isEnabledXss,
  53. xssOption: this.state.xssOption,
  54. tagWhiteList: this.state.tagWhiteList,
  55. attrWhiteList: this.state.attrWhiteList,
  56. });
  57. return response;
  58. }
  59. }