embedResize.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. (function () {
  2. var embedElement = document.querySelector(
  3. ".embed-wrapper, .tweet-embed, .embed-video",
  4. );
  5. if (!embedElement) return;
  6. // Video play state for overlay (hidden while playing, visible on hover/pause)
  7. var video = embedElement.querySelector("video");
  8. if (video) {
  9. video.onplay = function () {
  10. embedElement.classList.add("video-playing");
  11. };
  12. video.onpause = video.onended = function () {
  13. embedElement.classList.remove("video-playing");
  14. };
  15. }
  16. var lastHeight = 0;
  17. function sendHeight() {
  18. var currentHeight = embedElement.offsetHeight;
  19. if (currentHeight !== lastHeight && currentHeight > 0) {
  20. lastHeight = currentHeight;
  21. window.parent.postMessage(
  22. ["resizeIframe", { h: currentHeight, url: location.href }],
  23. "*",
  24. );
  25. }
  26. }
  27. // Respond to height requests from parent via MessageChannel
  28. window.addEventListener("message", function (event) {
  29. if (event.source === window.parent && event.ports && event.ports[0]) {
  30. event.ports[0].postMessage(embedElement.offsetHeight);
  31. }
  32. });
  33. window.addEventListener("load", sendHeight);
  34. new ResizeObserver(sendHeight).observe(embedElement);
  35. // Expose for embedTweet.js
  36. window._nitterSendHeight = sendHeight;
  37. })();