Browse Source

Require any modules after loading polyfill in entry points (#4231)

app/javascript/mastodon/main.js delayed the execution of modules,
but other entry points didn't. That leads to failure in executing
modules, which requires those polyfills.

Strictly enforce the rule to require any modules after loading
polyfill in entry points.
pull/4/head
Akihiko Odaki 6 years ago
committed by Eugen Rochko
parent
commit
b11ac88692
4 changed files with 45 additions and 46 deletions
  1. +5
    -6
      app/javascript/mastodon/main.js
  2. +4
    -4
      app/javascript/packs/about.js
  3. +3
    -2
      app/javascript/packs/application.js
  4. +33
    -34
      app/javascript/packs/public.js

+ 5
- 6
app/javascript/mastodon/main.js View File

@ -1,12 +1,14 @@
import * as OfflinePluginRuntime from 'offline-plugin/runtime';
import * as WebPushSubscription from './web_push_subscription';
import Mastodon from 'mastodon/containers/mastodon';
import React from 'react';
import ReactDOM from 'react-dom';
import ready from './ready';
const perf = require('./performance');
function main() {
perf.start('main()');
const Mastodon = require('mastodon/containers/mastodon').default;
const React = require('react');
const ReactDOM = require('react-dom');
if (window.history && history.replaceState) {
const { pathname, search, hash } = window.location;
@ -23,9 +25,6 @@ function main() {
ReactDOM.render(<Mastodon {...props} />, mountNode);
if (process.env.NODE_ENV === 'production') {
// avoid offline in dev mode because it's harder to debug
const OfflinePluginRuntime = require('offline-plugin/runtime');
const WebPushSubscription = require('./web_push_subscription');
OfflinePluginRuntime.install();
WebPushSubscription.register();
}

+ 4
- 4
app/javascript/packs/about.js View File

@ -1,12 +1,11 @@
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 TimelineContainer = require('../mastodon/containers/timeline_container').default;
const React = require('react');
const ReactDOM = require('react-dom');
const mountNode = document.getElementById('mastodon-timeline');
if (mountNode !== null) {
@ -16,6 +15,7 @@ function loaded() {
}
function main() {
const ready = require('../mastodon/ready').default;
ready(loaded);
}

+ 3
- 2
app/javascript/packs/application.js View File

@ -1,6 +1,7 @@
import main from '../mastodon/main';
import loadPolyfills from '../mastodon/load_polyfills';
loadPolyfills().then(main).catch(e => {
loadPolyfills().then(() => {
require('../mastodon/main').default();
}).catch(e => {
console.error(e);
});

+ 33
- 34
app/javascript/packs/public.js View File

@ -1,44 +1,43 @@
import { length } from 'stringz';
import IntlRelativeFormat from 'intl-relativeformat';
import { delegate } from 'rails-ujs';
import emojify from '../mastodon/emoji';
import { getLocale } from '../mastodon/locales';
import loadPolyfills from '../mastodon/load_polyfills';
import ready from '../mastodon/ready';
const { localeData } = getLocale();
localeData.forEach(IntlRelativeFormat.__addLocaleData);
function main() {
const { length } = require('stringz');
const IntlRelativeFormat = require('intl-relativeformat').default;
const { delegate } = require('rails-ujs');
const emojify = require('../mastodon/emoji').default;
const { getLocale } = require('../mastodon/locales');
const ready = require('../mastodon/ready').default;
function loaded() {
const locale = document.documentElement.lang;
const dateTimeFormat = new Intl.DateTimeFormat(locale, {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
});
const relativeFormat = new IntlRelativeFormat(locale);
const { localeData } = getLocale();
localeData.forEach(IntlRelativeFormat.__addLocaleData);
[].forEach.call(document.querySelectorAll('.emojify'), (content) => {
content.innerHTML = emojify(content.innerHTML);
});
ready(() => {
const locale = document.documentElement.lang;
const dateTimeFormat = new Intl.DateTimeFormat(locale, {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
});
const relativeFormat = new IntlRelativeFormat(locale);
[].forEach.call(document.querySelectorAll('time.formatted'), (content) => {
const datetime = new Date(content.getAttribute('datetime'));
const formattedDate = dateTimeFormat.format(datetime);
content.title = formattedDate;
content.textContent = formattedDate;
});
[].forEach.call(document.querySelectorAll('.emojify'), (content) => {
content.innerHTML = emojify(content.innerHTML);
});
[].forEach.call(document.querySelectorAll('time.time-ago'), (content) => {
const datetime = new Date(content.getAttribute('datetime'));
content.textContent = relativeFormat.format(datetime);;
});
}
[].forEach.call(document.querySelectorAll('time.formatted'), (content) => {
const datetime = new Date(content.getAttribute('datetime'));
const formattedDate = dateTimeFormat.format(datetime);
content.title = formattedDate;
content.textContent = formattedDate;
});
function main() {
ready(loaded);
[].forEach.call(document.querySelectorAll('time.time-ago'), (content) => {
const datetime = new Date(content.getAttribute('datetime'));
content.textContent = relativeFormat.format(datetime);;
});
});
delegate(document, '.video-player video', 'click', ({ target }) => {
if (target.paused) {

Loading…
Cancel
Save