message-text.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { __ } from 'i18n/index.js';
  2. import { getOOBURLMarkup } from 'utils/html.js';
  3. import { html } from 'lit';
  4. /**
  5. * @param {import('../message').default} el
  6. */
  7. function tplEditedIcon(el) {
  8. const i18n_edited = __('This message has been edited');
  9. return html`<converse-icon
  10. title="${i18n_edited}"
  11. class="fa fa-edit chat-msg__edit-modal"
  12. @click=${el.showMessageVersionsModal}
  13. size="1em"
  14. ></converse-icon>`;
  15. }
  16. function tplCheckmark() {
  17. return html`<converse-icon
  18. size="0.75em"
  19. color="var(--chat-color)"
  20. class="fa fa-check chat-msg__receipt"
  21. ></converse-icon>`;
  22. }
  23. /**
  24. * @param {import('../message').default} el
  25. */
  26. export default (el) => {
  27. const i18n_show = __('Show more');
  28. const is_groupchat_message = el.model.get('type') === 'groupchat';
  29. const i18n_show_less = __('Show less');
  30. const error_text = el.model.get('error_text') || el.model.get('error');
  31. const i18n_error = `${__('Message delivery failed.')}\n${error_text}`;
  32. const tplSpoilerHint = html`
  33. <div class="chat-msg__spoiler-hint">
  34. <span class="spoiler-hint">${el.model.get('spoiler_hint')}</span>
  35. <a class="badge badge-info spoiler-toggle" href="#" @click=${el.toggleSpoilerMessage}>
  36. <converse-icon
  37. size="1em"
  38. color="var(--background-color)"
  39. class="fa ${el.model.get('is_spoiler_visible') ? 'fa-eye-slash' : 'fa-eye'}"
  40. ></converse-icon>
  41. ${el.model.get('is_spoiler_visible') ? i18n_show_less : i18n_show}
  42. </a>
  43. </div>
  44. `;
  45. const spoiler_classes = el.model.get('is_spoiler')
  46. ? `spoiler ${el.model.get('is_spoiler_visible') ? '' : 'hidden'}`
  47. : '';
  48. const text = el.model.getMessageText();
  49. const show_oob = el.model.get('oob_url') && text !== el.model.get('oob_url');
  50. return html`
  51. ${el.model.get('is_spoiler') ? tplSpoilerHint : ''}
  52. ${el.model.get('subject') ? html`<div class="chat-msg__subject">${el.model.get('subject')}</div>` : ''}
  53. <span class="chat-msg__body--wrapper ${error_text ? 'error' : ''}">
  54. <converse-chat-message-body
  55. class="chat-msg__text ${el.model.get('is_only_emojis')
  56. ? 'chat-msg__text--larger'
  57. : ''} ${spoiler_classes}"
  58. .model="${el.model}"
  59. hide_url_previews=${el.model.get('hide_url_previews')}
  60. ?is_me_message=${el.model.isMeCommand()}
  61. text="${text}"
  62. ></converse-chat-message-body>
  63. ${el.model.get('received') && !el.model.isMeCommand() && !is_groupchat_message ? tplCheckmark() : ''}
  64. ${el.model.get('edited') ? tplEditedIcon(el) : ''}
  65. </span>
  66. ${show_oob ? html`<div class="chat-msg__media">${getOOBURLMarkup(el.model.get('oob_url'))}</div>` : ''}
  67. ${error_text ? html`<div class="chat-msg__error">${i18n_error}</div>` : ''}
  68. `;
  69. };