AdminMarkDownContainer.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 AdminMarkDownContainer extends Container {
  7. constructor(appContainer) {
  8. super();
  9. this.appContainer = appContainer;
  10. this.dummyIsEnabledLinebreaks = 0;
  11. this.dummyIsEnabledLinebreaksForError = 1;
  12. this.state = {
  13. retrieveError: null,
  14. // set dummy value tile for using suspense
  15. isEnabledLinebreaks: this.dummyIsEnabledLinebreaks,
  16. isEnabledLinebreaksInComments: false,
  17. pageBreakSeparator: 1,
  18. pageBreakCustomSeparator: '',
  19. isEnabledXss: false,
  20. xssOption: 1,
  21. tagWhiteList: '',
  22. attrWhiteList: '',
  23. };
  24. this.switchEnableXss = this.switchEnableXss.bind(this);
  25. }
  26. /**
  27. * Workaround for the mangling in production build to break constructor.name
  28. */
  29. static getClassName() {
  30. return 'AdminMarkDownContainer';
  31. }
  32. /**
  33. * retrieve markdown data
  34. */
  35. async retrieveMarkdownData() {
  36. const response = await this.appContainer.apiv3.get('/markdown-setting/');
  37. const { markdownParams } = response.data;
  38. this.setState({
  39. isEnabledLinebreaks: markdownParams.isEnabledLinebreaks,
  40. isEnabledLinebreaksInComments: markdownParams.isEnabledLinebreaksInComments,
  41. pageBreakSeparator: markdownParams.pageBreakSeparator,
  42. pageBreakCustomSeparator: markdownParams.pageBreakCustomSeparator || '',
  43. isEnabledXss: markdownParams.isEnabledXss,
  44. xssOption: markdownParams.xssOption,
  45. tagWhiteList: markdownParams.tagWhiteList || '',
  46. attrWhiteList: markdownParams.attrWhiteList || '',
  47. });
  48. }
  49. /**
  50. * Switch PageBreakSeparator
  51. */
  52. switchPageBreakSeparator(pageBreakSeparator) {
  53. this.setState({ pageBreakSeparator });
  54. }
  55. /**
  56. * Set PageBreakCustomSeparator
  57. */
  58. setPageBreakCustomSeparator(pageBreakCustomSeparator) {
  59. this.setState({ pageBreakCustomSeparator });
  60. }
  61. /**
  62. * Switch enableXss
  63. */
  64. switchEnableXss() {
  65. if (this.state.isEnabledXss) {
  66. this.setState({ xssOption: null });
  67. }
  68. this.setState({ isEnabledXss: !this.state.isEnabledXss });
  69. }
  70. /**
  71. * Update LineBreak Setting
  72. */
  73. async updateLineBreakSetting() {
  74. const response = await this.appContainer.apiv3.put('/markdown-setting/lineBreak', {
  75. isEnabledLinebreaks: this.state.isEnabledLinebreaks,
  76. isEnabledLinebreaksInComments: this.state.isEnabledLinebreaksInComments,
  77. });
  78. return response;
  79. }
  80. /**
  81. * Update Xss Setting
  82. */
  83. async updateXssSetting() {
  84. let { tagWhiteList, attrWhiteList } = this.state;
  85. tagWhiteList = Array.isArray(tagWhiteList) ? tagWhiteList : tagWhiteList.split(',');
  86. attrWhiteList = Array.isArray(attrWhiteList) ? attrWhiteList : attrWhiteList.split(',');
  87. const response = await this.appContainer.apiv3.put('/markdown-setting/xss', {
  88. isEnabledXss: this.state.isEnabledXss,
  89. xssOption: this.state.xssOption,
  90. tagWhiteList,
  91. attrWhiteList,
  92. });
  93. return response;
  94. }
  95. /**
  96. * Update Presentation Setting
  97. */
  98. async updatePresentationSetting() {
  99. const response = await this.appContainer.apiv3.put('/markdown-setting/presentation', {
  100. pageBreakSeparator: this.state.pageBreakSeparator,
  101. pageBreakCustomSeparator: this.state.pageBreakCustomSeparator,
  102. });
  103. this.setState({
  104. pageBreakSeparator: response.data.presentationParams.pageBreakSeparator,
  105. pageBreakCustomSeparator: response.data.presentationParams.pageBreakCustomSeparator,
  106. });
  107. return response;
  108. }
  109. }