header.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. export default class HeaderConfigurer {
  2. constructor(crowi) {
  3. this.crowi = crowi;
  4. this.injectRevisionHeadClass = this.injectRevisionHeadClass.bind(this);
  5. this.combineRules = this.combineRules.bind(this);
  6. }
  7. configure(md) {
  8. const rules = md.renderer.rules;
  9. const headingOpenOrg = rules.heading_open;
  10. // combine rule and set
  11. rules.heading_open = this.combineRules(this.injectRevisionHeadClass, headingOpenOrg);
  12. }
  13. /**
  14. * Inject 'revision-head' class
  15. */
  16. injectRevisionHeadClass(tokens, idx, options, env, slf) {
  17. if (tokens[idx].map && tokens[idx].level === 0) {
  18. tokens[idx].attrJoin('class', 'revision-head');
  19. }
  20. return slf.renderToken(tokens, idx, options, env, slf);
  21. }
  22. combineRules(rule1, rule2) {
  23. return (tokens, idx, options, env, slf) => {
  24. if (rule1 != null) {
  25. rule1(tokens, idx, options, env, slf);
  26. }
  27. if (rule2 != null) {
  28. rule2(tokens, idx, options, env, slf);
  29. }
  30. return slf.renderToken(tokens, idx, options, env, slf);
  31. }
  32. }
  33. }