PageHeader.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const Spacer = require('./Spacer.js');
  2. const theme = require('../theme.js');
  3. /**
  4. * @typedef {Object} PageHeaderProps
  5. * @property {string} [message]
  6. * @property {string} title
  7. * @property {string} [topOffset]
  8. */
  9. /**
  10. * The header of the overlay.
  11. * @param {Document} document
  12. * @param {HTMLElement} root
  13. * @param {PageHeaderProps} props
  14. * @returns {void}
  15. */
  16. function PageHeader(document, root, props) {
  17. const pageHeaderContainer = document.createElement('div');
  18. pageHeaderContainer.style.background = '#' + theme.dimgrey;
  19. pageHeaderContainer.style.boxShadow = '0 1px 4px rgba(0, 0, 0, 0.3)';
  20. pageHeaderContainer.style.color = '#' + theme.white;
  21. pageHeaderContainer.style.left = '0';
  22. pageHeaderContainer.style.right = '0';
  23. pageHeaderContainer.style.padding = '1rem 1.5rem';
  24. pageHeaderContainer.style.paddingLeft = 'max(1.5rem, env(safe-area-inset-left))';
  25. pageHeaderContainer.style.paddingRight = 'max(1.5rem, env(safe-area-inset-right))';
  26. pageHeaderContainer.style.position = 'fixed';
  27. pageHeaderContainer.style.top = props.topOffset || '0';
  28. const title = document.createElement('h3');
  29. title.innerText = props.title;
  30. title.style.color = '#' + theme.red;
  31. title.style.fontSize = '1.125rem';
  32. title.style.lineHeight = '1.3';
  33. title.style.margin = '0';
  34. pageHeaderContainer.appendChild(title);
  35. if (props.message) {
  36. title.style.margin = '0 0 0.5rem';
  37. const message = document.createElement('span');
  38. message.innerText = props.message;
  39. message.style.color = '#' + theme.white;
  40. message.style.wordBreak = 'break-word';
  41. pageHeaderContainer.appendChild(message);
  42. }
  43. root.appendChild(pageHeaderContainer);
  44. // This has to run after appending elements to root
  45. // because we need to actual mounted height.
  46. Spacer(document, root, {
  47. space: pageHeaderContainer.offsetHeight.toString(10),
  48. });
  49. }
  50. module.exports = PageHeader;