AdminMarkDownContainer.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { Container } from 'unstated';
  2. import { apiv3Get, apiv3Put } from '../util/apiv3-client';
  3. /**
  4. * Service container for admin markdown setting page (MarkDownSetting.jsx)
  5. * @extends {Container} unstated Container
  6. */
  7. export default class AdminMarkDownContainer extends Container {
  8. constructor(appContainer) {
  9. super();
  10. this.appContainer = appContainer;
  11. this.dummyIsEnabledLinebreaks = 0;
  12. this.dummyIsEnabledLinebreaksForError = 1;
  13. this.state = {
  14. retrieveError: null,
  15. // set dummy value tile for using suspense
  16. isEnabledLinebreaks: this.dummyIsEnabledLinebreaks,
  17. isEnabledLinebreaksInComments: false,
  18. adminPreferredIndentSize: 4,
  19. isIndentSizeForced: false,
  20. pageBreakSeparator: 1,
  21. pageBreakCustomSeparator: '',
  22. isEnabledXss: false,
  23. xssOption: 1,
  24. tagWhiteList: '',
  25. attrWhiteList: '',
  26. };
  27. this.switchEnableXss = this.switchEnableXss.bind(this);
  28. this.setAdminPreferredIndentSize = this.setAdminPreferredIndentSize.bind(this);
  29. }
  30. /**
  31. * Workaround for the mangling in production build to break constructor.name
  32. */
  33. static getClassName() {
  34. return 'AdminMarkDownContainer';
  35. }
  36. /**
  37. * retrieve markdown data
  38. */
  39. async retrieveMarkdownData() {
  40. const response = await apiv3Get('/markdown-setting/');
  41. const { markdownParams } = response.data;
  42. this.setState({
  43. isEnabledLinebreaks: markdownParams.isEnabledLinebreaks,
  44. isEnabledLinebreaksInComments: markdownParams.isEnabledLinebreaksInComments,
  45. adminPreferredIndentSize: markdownParams.adminPreferredIndentSize,
  46. isIndentSizeForced: markdownParams.isIndentSizeForced,
  47. pageBreakSeparator: markdownParams.pageBreakSeparator,
  48. pageBreakCustomSeparator: markdownParams.pageBreakCustomSeparator || '',
  49. isEnabledXss: markdownParams.isEnabledXss,
  50. xssOption: markdownParams.xssOption,
  51. tagWhiteList: markdownParams.tagWhiteList || '',
  52. attrWhiteList: markdownParams.attrWhiteList || '',
  53. });
  54. }
  55. setAdminPreferredIndentSize(adminPreferredIndentSize) {
  56. this.setState({ adminPreferredIndentSize });
  57. }
  58. /**
  59. * Switch PageBreakSeparator
  60. */
  61. switchPageBreakSeparator(pageBreakSeparator) {
  62. this.setState({ pageBreakSeparator });
  63. }
  64. /**
  65. * Set PageBreakCustomSeparator
  66. */
  67. setPageBreakCustomSeparator(pageBreakCustomSeparator) {
  68. this.setState({ pageBreakCustomSeparator });
  69. }
  70. /**
  71. * Switch enableXss
  72. */
  73. switchEnableXss() {
  74. if (this.state.isEnabledXss) {
  75. this.setState({ xssOption: null });
  76. }
  77. this.setState({ isEnabledXss: !this.state.isEnabledXss });
  78. }
  79. /**
  80. * Update LineBreak Setting
  81. */
  82. async updateLineBreakSetting() {
  83. const response = await apiv3Put('/markdown-setting/lineBreak', {
  84. isEnabledLinebreaks: this.state.isEnabledLinebreaks,
  85. isEnabledLinebreaksInComments: this.state.isEnabledLinebreaksInComments,
  86. });
  87. return response;
  88. }
  89. /**
  90. * Update
  91. */
  92. async updateIndentSetting() {
  93. const response = await apiv3Put('/markdown-setting/indent', {
  94. adminPreferredIndentSize: this.state.adminPreferredIndentSize,
  95. isIndentSizeForced: this.state.isIndentSizeForced,
  96. });
  97. return response;
  98. }
  99. /**
  100. * Update Xss Setting
  101. */
  102. async updateXssSetting() {
  103. let { tagWhiteList, attrWhiteList } = this.state;
  104. tagWhiteList = Array.isArray(tagWhiteList) ? tagWhiteList : tagWhiteList.split(',');
  105. attrWhiteList = Array.isArray(attrWhiteList) ? attrWhiteList : attrWhiteList.split(',');
  106. const response = await apiv3Put('/markdown-setting/xss', {
  107. isEnabledXss: this.state.isEnabledXss,
  108. xssOption: this.state.xssOption,
  109. tagWhiteList,
  110. attrWhiteList,
  111. });
  112. return response;
  113. }
  114. /**
  115. * Update Presentation Setting
  116. */
  117. async updatePresentationSetting() {
  118. const response = await apiv3Put('/markdown-setting/presentation', {
  119. pageBreakSeparator: this.state.pageBreakSeparator,
  120. pageBreakCustomSeparator: this.state.pageBreakCustomSeparator,
  121. });
  122. this.setState({
  123. pageBreakSeparator: response.data.presentationParams.pageBreakSeparator,
  124. pageBreakCustomSeparator: response.data.presentationParams.pageBreakCustomSeparator,
  125. });
  126. return response;
  127. }
  128. }