2
0

AdminMarkDownContainer.js 4.0 KB

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