-const perf = require('./performance');
+import ready from './ready';
-function onDomContentLoaded(callback) {
- if (document.readyState !== 'loading') {
- callback();
- } else {
- document.addEventListener('DOMContentLoaded', callback);
- }
-}
+const perf = require('./performance');
function main() {
perf.start('main()');
}
}
- onDomContentLoaded(() => {
+ ready(() => {
const mountNode = document.getElementById('mastodon');
const props = JSON.parse(mountNode.getAttribute('data-props'));
--- /dev/null
+export default function ready(loaded) {
+ if (['interactive', 'complete'].includes(document.readyState)) {
+ loaded();
+ } else {
+ document.addEventListener('DOMContentLoaded', loaded);
+ }
+}
--- /dev/null
+import TimelineContainer from '../mastodon/containers/timeline_container';
+import React from 'react';
+import ReactDOM from 'react-dom';
+import loadPolyfills from '../mastodon/load_polyfills';
+import ready from '../mastodon/ready';
+
+require.context('../images/', true);
+
+function loaded() {
+ const mountNode = document.getElementById('mastodon-timeline');
+
+ if (mountNode !== null) {
+ const props = JSON.parse(mountNode.getAttribute('data-props'));
+ ReactDOM.render(<TimelineContainer {...props} />, mountNode);
+ }
+}
+
+function main() {
+ ready(loaded);
+}
+
+loadPolyfills().then(main).catch(error => {
+ console.error(error);
+});
import emojify from '../mastodon/emoji';
import { getLocale } from '../mastodon/locales';
import loadPolyfills from '../mastodon/load_polyfills';
-import TimelineContainer from '../mastodon/containers/timeline_container';
-import React from 'react';
-import ReactDOM from 'react-dom';
+import ready from '../mastodon/ready';
require.context('../images/', true);
const datetime = new Date(content.getAttribute('datetime'));
content.textContent = relativeFormat.format(datetime);;
});
-
- const mountNode = document.getElementById('mastodon-timeline');
-
- if (mountNode !== null) {
- const props = JSON.parse(mountNode.getAttribute('data-props'));
- ReactDOM.render(<TimelineContainer {...props} />, mountNode);
- }
}
function main() {
- if (['interactive', 'complete'].includes(document.readyState)) {
- loaded();
- } else {
- document.addEventListener('DOMContentLoaded', loaded);
- }
+ ready(loaded);
delegate(document, '.video-player video', 'click', ({ target }) => {
if (target.paused) {
-- content_for :header_tags do
- %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
- = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
-
- content_for :page_title do
= site_hostname
- content_for :header_tags do
+ %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
+ = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous'
+
%meta{ property: 'og:site_name', content: site_title }/
%meta{ property: 'og:url', content: about_url }/
%meta{ property: 'og:type', content: 'website' }/