You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
import './public-path'; |
|
import { createRoot } from 'react-dom/client'; |
|
|
|
import { afterInitialRender } from 'mastodon/../hooks/useRenderSignal'; |
|
|
|
import { start } from '../mastodon/common'; |
|
import { Status } from '../mastodon/features/standalone/status'; |
|
import { loadPolyfills } from '../mastodon/polyfills'; |
|
import ready from '../mastodon/ready'; |
|
|
|
start(); |
|
|
|
function loaded() { |
|
const mountNode = document.getElementById('mastodon-status'); |
|
|
|
if (mountNode) { |
|
const attr = mountNode.getAttribute('data-props'); |
|
|
|
if (!attr) return; |
|
|
|
const props = JSON.parse(attr) as { id: string; locale: string }; |
|
const root = createRoot(mountNode); |
|
|
|
root.render(<Status {...props} />); |
|
} |
|
} |
|
|
|
function main() { |
|
ready(loaded).catch((error: unknown) => { |
|
console.error(error); |
|
}); |
|
} |
|
|
|
loadPolyfills() |
|
.then(main) |
|
.catch((error: unknown) => { |
|
console.error(error); |
|
}); |
|
|
|
interface SetHeightMessage { |
|
type: 'setHeight'; |
|
id: string; |
|
height: number; |
|
} |
|
|
|
function isSetHeightMessage(data: unknown): data is SetHeightMessage { |
|
if ( |
|
data && |
|
typeof data === 'object' && |
|
'type' in data && |
|
data.type === 'setHeight' |
|
) |
|
return true; |
|
else return false; |
|
} |
|
|
|
window.addEventListener('message', (e) => { |
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- typings are not correct, it can be null in very rare cases |
|
if (!e.data || !isSetHeightMessage(e.data) || !window.parent) return; |
|
|
|
const data = e.data; |
|
|
|
// We use a timeout to allow for the React page to render before calculating the height |
|
afterInitialRender(() => { |
|
window.parent.postMessage( |
|
{ |
|
type: 'setHeight', |
|
id: data.id, |
|
height: document.getElementsByTagName('html')[0]?.scrollHeight, |
|
}, |
|
'*', |
|
); |
|
}); |
|
});
|
|
|