79 lines
3.2 KiB
JavaScript
79 lines
3.2 KiB
JavaScript
import Session from 'discourse/models/session';
|
|
import KeyValueStore from 'discourse/lib/key-value-store';
|
|
import AppEvents from 'discourse/lib/app-events';
|
|
import Store from 'discourse/models/store';
|
|
import DiscourseURL from 'discourse/lib/url';
|
|
import DiscourseLocation from 'discourse/lib/discourse-location';
|
|
import SearchService from 'discourse/services/search';
|
|
import { startTracking, default as TopicTrackingState } from 'discourse/models/topic-tracking-state';
|
|
import ScreenTrack from 'discourse/lib/screen-track';
|
|
|
|
const ALL_TARGETS = ['controller', 'component', 'route', 'model', 'adapter'];
|
|
|
|
export default {
|
|
name: "inject-discourse-objects",
|
|
|
|
initialize(container, app) {
|
|
const appEvents = AppEvents.create();
|
|
app.register('app-events:main', appEvents, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'appEvents', 'app-events:main'));
|
|
DiscourseURL.appEvents = appEvents;
|
|
|
|
// backwards compatibility: remove when plugins have updated
|
|
app.register('store:main', Store);
|
|
|
|
app.register('service:store', Store);
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'store', 'service:store'));
|
|
|
|
const messageBus = window.MessageBus;
|
|
app.register('message-bus:main', messageBus, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'messageBus', 'message-bus:main'));
|
|
|
|
const currentUser = Discourse.User.current();
|
|
app.register('current-user:main', currentUser, { instantiate: false });
|
|
|
|
const topicTrackingState = TopicTrackingState.create({ messageBus, currentUser });
|
|
app.register('topic-tracking-state:main', topicTrackingState, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'topicTrackingState', 'topic-tracking-state:main'));
|
|
|
|
const site = Discourse.Site.current();
|
|
app.register('site:main', site, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'site', 'site:main'));
|
|
|
|
const siteSettings = Discourse.SiteSettings;
|
|
app.register('site-settings:main', siteSettings, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'siteSettings', 'site-settings:main'));
|
|
|
|
app.register('search-service:main', SearchService);
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'searchService', 'search-service:main'));
|
|
|
|
const session = Session.current();
|
|
app.register('session:main', session, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'session', 'session:main'));
|
|
|
|
const screenTrack = new ScreenTrack(
|
|
topicTrackingState,
|
|
siteSettings,
|
|
session,
|
|
currentUser
|
|
);
|
|
|
|
app.register('screen-track:main', screenTrack, { instantiate: false });
|
|
['component', 'route'].forEach(t => app.inject(t, 'screenTrack', 'screen-track:main'));
|
|
|
|
if (currentUser) {
|
|
['component', 'route', 'controller'].forEach(t => {
|
|
app.inject(t, 'currentUser', 'current-user:main');
|
|
});
|
|
}
|
|
|
|
app.register('location:discourse-location', DiscourseLocation);
|
|
|
|
const keyValueStore = new KeyValueStore("discourse_");
|
|
app.register('key-value-store:main', keyValueStore, { instantiate: false });
|
|
ALL_TARGETS.forEach(t => app.inject(t, 'keyValueStore', 'key-value-store:main'));
|
|
|
|
startTracking(topicTrackingState);
|
|
}
|
|
};
|