2
0

utils.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*global _, converse_utils */
  2. const u = converse_utils;
  3. window.renderAvatars = function (el) {
  4. el = el || document;
  5. const canvasses = el.querySelectorAll('canvas.chat-msg__avatar');
  6. _.each(canvasses, (canvas_el) => {
  7. const avatar_url = canvas_el.getAttribute('data-avatar');
  8. if (!avatar_url) {
  9. return;
  10. }
  11. const ctx = canvas_el.getContext('2d');
  12. const img = new Image();
  13. img.onload = function () {
  14. const canvas = ctx.canvas ;
  15. const hRatio = canvas.width / img.width ;
  16. const vRatio = canvas.height / img.height ;
  17. const ratio = Math.min ( hRatio, vRatio );
  18. const centerShift_x = ( canvas.width - img.width*ratio ) / 2;
  19. const centerShift_y = ( canvas.height - img.height*ratio ) / 2;
  20. ctx.clearRect(0,0,canvas.width, canvas.height);
  21. ctx.drawImage(img, 0,0, img.width, img.height, centerShift_x,centerShift_y,img.width*ratio, img.height*ratio);
  22. };
  23. img.src = avatar_url;
  24. });
  25. }
  26. function toggleSpoilerMessage (ev) {
  27. if (ev && ev.preventDefault) {
  28. ev.preventDefault();
  29. }
  30. const toggle_el = ev.target,
  31. icon_el = toggle_el.firstElementChild;
  32. u.slideToggleElement(
  33. toggle_el.parentElement.parentElement.querySelector('.spoiler')
  34. );
  35. if (toggle_el.getAttribute("data-toggle-state") == "closed") {
  36. toggle_el.textContent = 'Show less';
  37. icon_el.classList.remove("fa-eye");
  38. icon_el.classList.add("fa-eye-slash");
  39. toggle_el.insertAdjacentElement('afterBegin', icon_el);
  40. toggle_el.setAttribute("data-toggle-state", "open");
  41. } else {
  42. toggle_el.textContent = 'Show more';
  43. icon_el.classList.remove("fa-eye-slash");
  44. icon_el.classList.add("fa-eye");
  45. toggle_el.insertAdjacentElement('afterBegin', icon_el);
  46. toggle_el.setAttribute("data-toggle-state", "closed");
  47. }
  48. }
  49. window.initSpoilers = function () {
  50. const spoilers = document.querySelectorAll('.spoiler-toggle');
  51. _.each(spoilers, (spoiler_el) => {
  52. spoiler_el.addEventListener('click', toggleSpoilerMessage);
  53. });
  54. }