1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- window.pixlfed = {};
- window.pixlfed.config = {
- domain: process.env.MIX_APP_DOMAIN,
- }
- pixlfed.autoSizeIFrame = function(el) {
- console.log(el.contentDocument);
- el.style.height = el.contentDocument.body.scrollHeight +'px';
- }
- pixlfed.polyfill = function() {
- [].forEach.call(document.querySelectorAll('div.pixelfed-embed'), function(el) {
- pixlfed.loadIFrame(el);
- });
- }
- pixlfed.loadIFrame = function(el) {
- let permalink = el.getAttribute('data-pixlfed-permalink');
- let parser = document.createElement('a');
- parser.href = permalink;
- if(el.getAttribute('loaded') == 'true') {
- return;
- }
- if(pixlfed.config.domain !== parser.host) {
- el.setAttribute('loaded', 'true');
- console.error('Invalid embed permalink')
- return;
- }
- let css = 'background: white; max-width: 540px; width: calc(100% - 2px); border-radius: 3px; border: 1px solid rgb(219, 219, 219); box-shadow: none; display: block; margin: 0px 0px 12px; min-width: 326px; padding: 0px;';
- let iframe = document.createElement('iframe');
- iframe.onload = function() {
- pixlfed.autoSizeIFrame(iframe);
- }
- iframe.setAttribute('allowtransparency', 'true');
- iframe.setAttribute('frameborder', '0');
- iframe.setAttribute('scrolling', 'no');
- iframe.setAttribute('src', permalink);
- iframe.setAttribute('style', css);
- iframe.setAttribute('loaded', 'true');
- el.replaceWith(iframe);
- }
- pixlfed.run = function() {
- var lazyFrames = [].slice.call(document.querySelectorAll("div.pixelfed-embed"));
- if ("IntersectionObserver" in window) {
- let lazyFrameObserver = new IntersectionObserver(function(entries, observer) {
- entries.forEach(function(entry) {
- if (entry.isIntersecting) {
- if(entry.target.getAttribute('loaded') !== 'true') {
- pixlfed.loadIFrame(entry.target);
- }
- }
- });
- });
- lazyFrames.forEach(function(lazyFrame) {
- lazyFrameObserver.observe(lazyFrame);
- });
- } else {
- pixlfed.polyfill();
- }
- }
- pixlfed.run();
|