WhiteListInput.jsx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import PropTypes from 'prop-types';
  4. import { defaultSchema as sanitizeDefaultSchema } from 'rehype-sanitize';
  5. import AdminMarkDownContainer from '~/client/services/AdminMarkDownContainer';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. class WhiteListInput extends React.Component {
  8. constructor(props) {
  9. super(props);
  10. this.tagWhiteList = React.createRef();
  11. this.attrWhiteList = React.createRef();
  12. this.tags = sanitizeDefaultSchema.tagNames;
  13. this.attrs = JSON.stringify(sanitizeDefaultSchema.attributes);
  14. this.onClickRecommendTagButton = this.onClickRecommendTagButton.bind(this);
  15. this.onClickRecommendAttrButton = this.onClickRecommendAttrButton.bind(this);
  16. }
  17. onClickRecommendTagButton() {
  18. // this.tagWhiteList.current.value = this.tags;
  19. // this.props.adminMarkDownContainer.setState({ tagWhiteList: this.tags });
  20. }
  21. onClickRecommendAttrButton() {
  22. // this.attrWhiteList.current.value = this.attrs;
  23. // this.props.adminMarkDownContainer.setState({ attrWhiteList: this.attrs });
  24. }
  25. render() {
  26. const { t, adminMarkDownContainer } = this.props;
  27. return (
  28. <>
  29. <div className="mt-4">
  30. <div className="d-flex justify-content-between">
  31. {t('markdown_settings.xss_options.tag_names')}
  32. <p id="btn-import-tags" className="btn btn-sm btn-primary mb-0 disabled" onClick={this.onClickRecommendTagButton}>
  33. {t('markdown_settings.xss_options.import_recommended', { target: 'Tags' })}
  34. </p>
  35. </div>
  36. <textarea
  37. disabled
  38. className="form-control xss-list"
  39. name="recommendedTags"
  40. rows="6"
  41. cols="40"
  42. ref={this.tagWhiteList}
  43. defaultValue={adminMarkDownContainer.state.tagWhiteList}
  44. onChange={(e) => { adminMarkDownContainer.setState({ tagWhiteList: e.target.value }) }}
  45. />
  46. </div>
  47. <div className="mt-4">
  48. <div className="d-flex justify-content-between">
  49. {t('markdown_settings.xss_options.tag_attributes')}
  50. <p id="btn-import-tags" className="btn btn-sm btn-primary mb-0 disabled" onClick={this.onClickRecommendAttrButton}>
  51. {t('markdown_settings.xss_options.import_recommended', { target: 'Attrs' })}
  52. </p>
  53. </div>
  54. <textarea
  55. disabled
  56. className="form-control xss-list"
  57. name="recommendedAttrs"
  58. rows="6"
  59. cols="40"
  60. ref={this.attrWhiteList}
  61. defaultValue={adminMarkDownContainer.state.attrWhiteList}
  62. onChange={(e) => { adminMarkDownContainer.setState({ attrWhiteList: e.target.value }) }}
  63. />
  64. </div>
  65. </>
  66. );
  67. }
  68. }
  69. WhiteListInput.propTypes = {
  70. t: PropTypes.func.isRequired, // i18next
  71. adminMarkDownContainer: PropTypes.instanceOf(AdminMarkDownContainer).isRequired,
  72. };
  73. const PresentationFormWrapperFC = (props) => {
  74. const { t } = useTranslation('admin');
  75. return <WhiteListInput t={t} {...props} />;
  76. };
  77. const WhiteListWrapper = withUnstatedContainers(PresentationFormWrapperFC, [AdminMarkDownContainer]);
  78. export default WhiteListWrapper;