banned-page.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import moment from 'moment';
  2. import React from 'react';
  3. export default class extends React.Component {
  4. getReasonMessage() {
  5. /* jshint ignore:start */
  6. if (this.props.message.html) {
  7. return <div className="lead" dangerouslySetInnerHTML={{
  8. __html: this.props.message.html
  9. }} />;
  10. } else {
  11. return <p className="lead">{this.props.message.plain}</p>;
  12. }
  13. /* jshint ignore:end */
  14. }
  15. getExpirationMessage() {
  16. if (this.props.expires) {
  17. if (this.props.expires.isAfter(moment())) {
  18. /* jshint ignore:start */
  19. let title = interpolate(
  20. gettext("This ban expires on %(expires_on)s."), {
  21. 'expires_on': this.props.expires.format('LL, LT')
  22. }, true);
  23. let message = interpolate(
  24. gettext("This ban expires %(expires_on)s."), {
  25. 'expires_on': this.props.expires.fromNow()
  26. }, true);
  27. return <abbr title={title}>
  28. {message}
  29. </abbr>;
  30. /* jshint ignore:end */
  31. } else {
  32. return gettext("This ban has expired.");
  33. }
  34. } else {
  35. return gettext("This ban is permanent.");
  36. }
  37. }
  38. render() {
  39. /* jshint ignore:start */
  40. return <div className="page page-error page-error-banned">
  41. <div className="container">
  42. <div className="message-panel">
  43. <div className="message-icon">
  44. <span className="material-icon">highlight_off</span>
  45. </div>
  46. <div className="message-body">
  47. {this.getReasonMessage()}
  48. <p className="message-footnote">
  49. {this.getExpirationMessage()}
  50. </p>
  51. </div>
  52. </div>
  53. </div>
  54. </div>;
  55. /* jshint ignore:end */
  56. }
  57. }