REFACTOR: Replace Ember.controller.inject with import

Puts it more in line with updated ember code
This commit is contained in:
Robin Ward 2019-10-29 13:13:31 -04:00
parent 0a499966e9
commit a99c705c21
53 changed files with 122 additions and 67 deletions

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { setting, i18n } from "discourse/lib/computed";
export default Controller.extend({
adminBackups: Ember.inject.controller(),
adminBackups: inject(),
status: Ember.computed.alias("adminBackups.model"),
uploadLabel: i18n("admin.backups.upload.label"),
backupLocation: setting("backup_location"),

View File

@ -1,6 +1,7 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
export default Controller.extend({
adminBackups: Ember.inject.controller(),
adminBackups: inject(),
status: Ember.computed.alias("adminBackups.model"),
init() {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content";
@ -5,7 +6,7 @@ import { propertyNotEqual } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(bufferedProperty("model"), {
adminBadges: Ember.inject.controller(),
adminBadges: inject(),
saving: false,
savingStatus: "",

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
@ -16,7 +17,7 @@ function staticReport(reportType) {
export default Controller.extend(PeriodComputationMixin, {
isLoading: false,
dashboardFetchedAt: null,
exceptionController: Ember.inject.controller("exception"),
exceptionController: inject("exception"),
logSearchQueriesEnabled: setting("log_search_queries"),
basePath: Discourse.BaseUri,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
@ -9,7 +10,7 @@ const PROBLEMS_CHECK_MINUTES = 1;
export default Controller.extend({
isLoading: false,
dashboardFetchedAt: null,
exceptionController: Ember.inject.controller("exception"),
exceptionController: inject("exception"),
showVersionChecks: setting("version_checks"),
@computed("problems.length")

View File

@ -1,9 +1,10 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({
categoryNameKey: null,
adminSiteSettings: Ember.inject.controller(),
adminSiteSettings: inject(),
@computed("adminSiteSettings.visibleSiteSettings", "categoryNameKey")
category(categories, nameKey) {

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import GrantBadgeController from "discourse/mixins/grant-badge-controller";
import { popupAjaxError } from "discourse/lib/ajax-error";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(GrantBadgeController, {
adminUser: Ember.inject.controller(),
adminUser: inject(),
user: Ember.computed.alias("adminUser.model"),
userBadges: Ember.computed.alias("model"),
allBadges: Ember.computed.alias("badges"),

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import WatchedWord from "admin/models/watched-word";
@ -7,7 +8,7 @@ import showModal from "discourse/lib/show-modal";
export default Controller.extend({
actionNameKey: null,
adminWatchedWords: Ember.inject.controller(),
adminWatchedWords: inject(),
showWordsList: Ember.computed.or(
"adminWatchedWords.filtered",
"adminWatchedWords.showWords"

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { extractDomainFromUrl } from "discourse/lib/utilities";
@ -5,7 +6,7 @@ import computed from "ember-addons/ember-computed-decorators";
import InputValidation from "discourse/models/input-validation";
export default Controller.extend({
adminWebHooks: Ember.inject.controller(),
adminWebHooks: inject(),
eventTypes: Ember.computed.alias("adminWebHooks.eventTypes"),
defaultEventTypes: Ember.computed.alias("adminWebHooks.defaultEventTypes"),
contentTypes: Ember.computed.alias("adminWebHooks.contentTypes"),

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import { ajax } from "discourse/lib/ajax";
@ -54,7 +55,7 @@ const SCSS_VARIABLE_NAMES = [
];
export default Controller.extend(ModalFunctionality, {
adminCustomizeThemesShow: Ember.inject.controller(),
adminCustomizeThemesShow: inject(),
uploadUrl: "/admin/themes/upload_asset",

View File

@ -1,8 +1,9 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
export default Controller.extend(ModalFunctionality, {
adminCustomizeColors: Ember.inject.controller(),
adminCustomizeColors: inject(),
actions: {
selectBase() {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import { ajax } from "discourse/lib/ajax";
@ -17,7 +18,7 @@ export default Controller.extend(ModalFunctionality, {
remote: Ember.computed.equal("selection", "remote"),
create: Ember.computed.equal("selection", "create"),
selection: "popular",
adminCustomizeThemes: Ember.inject.controller(),
adminCustomizeThemes: inject(),
loading: false,
keyGenUrl: "/admin/themes/generate_key_pair",
importUrl: "/admin/themes/import",
@ -27,7 +28,7 @@ export default Controller.extend(ModalFunctionality, {
uploadUrl: null,
urlPlaceholder: "https://github.com/discourse/sample_theme",
advancedVisible: false,
themesController: Ember.inject.controller("adminCustomizeThemes"),
themesController: inject("adminCustomizeThemes"),
selectedType: Ember.computed.alias("themesController.currentTab"),
component: Ember.computed.equal("selectedType", COMPONENTS),

View File

@ -1,8 +1,9 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
export default Controller.extend(ModalFunctionality, {
adminBackupsLogs: Ember.inject.controller(),
adminBackupsLogs: inject(),
actions: {
startBackupWithUploads() {

View File

@ -7,7 +7,10 @@ var define, requirejs;
EMBER_MODULES = {
jquery: { default: $ },
"@ember/component": { default: Ember.Component },
"@ember/controller": { default: Ember.Controller },
"@ember/controller": {
default: Ember.Controller,
inject: Ember.inject.controller
},
"@ember/object": { default: Ember.Object },
"@ember/routing/route": { default: Ember.Route }
};

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import ModalFunctionality from "discourse/mixins/modal-functionality";
@ -5,7 +6,7 @@ import { extractError } from "discourse/lib/ajax-error";
import { changeEmail } from "discourse/lib/user-activation";
export default Controller.extend(ModalFunctionality, {
login: Ember.inject.controller(),
login: inject(),
currentEmail: null,
newEmail: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import Badge from "discourse/models/badge";
import UserBadge from "discourse/models/user-badge";
@ -10,7 +11,7 @@ export default Controller.extend({
queryParams: ["username"],
noMoreBadges: false,
userBadges: null,
application: Ember.inject.controller(),
application: inject(),
hiddenSetTitle: true,
@computed("userBadgesAll")

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import { topicLevels } from "discourse/lib/notification-levels";
// Support for changing the notification level of various topics
export default Controller.extend({
topicBulkActions: Ember.inject.controller(),
topicBulkActions: inject(),
notificationLevelId: null,
@computed

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import DiscourseURL from "discourse/lib/url";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(ModalFunctionality, {
topicController: Ember.inject.controller("topic"),
topicController: inject("topic"),
saving: false,
new_user: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import computed from "ember-addons/ember-computed-decorators";
@ -6,7 +7,7 @@ import Topic from "discourse/models/topic";
// Modal related to changing the timestamp of posts
export default Controller.extend(ModalFunctionality, {
topicController: Ember.inject.controller("topic"),
topicController: inject("topic"),
saving: false,
date: "",
time: "",

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import DiscourseURL from "discourse/lib/url";
import Quote from "discourse/lib/quote";
@ -76,7 +77,7 @@ export function addPopupMenuOptionsCallback(callback) {
}
export default Controller.extend({
topicController: Ember.inject.controller("topic"),
topicController: inject("topic"),
router: Ember.inject.service(),
checkedMessages: false,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import ModalFunctionality from "discourse/mixins/modal-functionality";
@ -22,7 +23,7 @@ export default Controller.extend(
NameValidation,
UserFieldsValidation,
{
login: Ember.inject.controller(),
login: inject(),
complete: false,
accountChallenge: 0,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import DiscourseNavigation from "discourse/components/d-navigation";
@ -17,7 +18,7 @@ export const queryParams = {
// Basic controller options
const controllerOpts = {
discoveryTopics: Ember.inject.controller("discovery/topics"),
discoveryTopics: inject("discovery/topics"),
queryParams: Object.keys(queryParams)
};

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import DiscourseURL from "discourse/lib/url";
export default Controller.extend({
discoveryTopics: Ember.inject.controller("discovery/topics"),
navigationCategory: Ember.inject.controller("navigation/category"),
application: Ember.inject.controller(),
discoveryTopics: inject("discovery/topics"),
navigationCategory: inject("navigation/category"),
application: inject(),
loading: false,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import computed from "ember-addons/ember-computed-decorators";
import DiscoveryController from "discourse/controllers/discovery";
@ -9,7 +10,7 @@ const subcategoryStyleComponentNames = {
};
export default DiscoveryController.extend({
discovery: Ember.inject.controller(),
discovery: inject(),
// this makes sure the composer isn't scoping to a specific category
category: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import DiscoveryController from "discourse/controllers/discovery";
import { queryParams } from "discourse/controllers/discovery-sortable";
import BulkTopicSelection from "discourse/mixins/bulk-topic-selection";
@ -8,8 +9,8 @@ import TopicList from "discourse/models/topic-list";
import computed from "ember-addons/ember-computed-decorators";
const controllerOpts = {
discovery: Ember.inject.controller(),
discoveryTopics: Ember.inject.controller("discovery/topics"),
discovery: inject(),
discoveryTopics: inject("discovery/topics"),
period: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import ModalFunctionality from "discourse/mixins/modal-functionality";
@ -6,7 +7,7 @@ import computed from "ember-addons/ember-computed-decorators";
import InputValidation from "discourse/models/input-validation";
export default Controller.extend(ModalFunctionality, {
topicController: Ember.inject.controller("topic"),
topicController: inject("topic"),
loading: true,
pinnedInCategoryCount: 0,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import {
@ -26,8 +27,8 @@ const SortOrders = [
const PAGE_LIMIT = 10;
export default Controller.extend({
application: Ember.inject.controller(),
composer: Ember.inject.controller(),
application: inject(),
composer: inject(),
bulkSelectEnabled: null,
loading: false,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import { extractError } from "discourse/lib/ajax-error";
@ -7,7 +8,7 @@ import Badge from "discourse/models/badge";
import UserBadge from "discourse/models/user-badge";
export default Controller.extend(ModalFunctionality, GrantBadgeController, {
topicController: Ember.inject.controller("topic"),
topicController: inject("topic"),
loading: true,
saving: false,
selectedBadgeId: null,

View File

@ -1,11 +1,12 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { observes } from "ember-addons/ember-computed-decorators";
import { fmt } from "discourse/lib/computed";
export default Controller.extend({
group: Ember.inject.controller(),
groupActivity: Ember.inject.controller(),
application: Ember.inject.controller(),
group: inject(),
groupActivity: inject(),
application: inject(),
canLoadMore: true,
loading: false,
emptyText: fmt("type", "groups.empty.%@"),

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error";
import Group from "discourse/models/group";
@ -18,7 +19,7 @@ export default Controller.extend({
showActions: false,
filter: null,
filterInput: null,
application: Ember.inject.controller(),
application: inject(),
@observes("filterInput")
_setFilter: debounce(function() {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import {
default as computed,
@ -5,10 +6,10 @@ import {
} from "ember-addons/ember-computed-decorators";
export default Controller.extend({
group: Ember.inject.controller(),
group: inject(),
loading: false,
offset: 0,
application: Ember.inject.controller(),
application: inject(),
init() {
this._super(...arguments);

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
@ -17,7 +18,7 @@ export default Controller.extend({
offset: null,
filter: null,
filterInput: null,
application: Ember.inject.controller(),
application: inject(),
@observes("filterInput")
_setFilter: debounce(function() {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators";
@ -11,7 +12,7 @@ const Tab = Ember.Object.extend({
});
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
counts: null,
showing: "members",
destroying: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import debounce from "discourse/lib/debounce";
import {
@ -6,7 +7,7 @@ import {
} from "ember-addons/ember-computed-decorators";
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
queryParams: ["order", "asc", "filter", "type"],
order: null,
asc: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import ModalFunctionality from "discourse/mixins/modal-functionality";
@ -21,9 +22,9 @@ const AuthErrors = [
];
export default Controller.extend(ModalFunctionality, {
createAccount: Ember.inject.controller(),
forgotPassword: Ember.inject.controller(),
application: Ember.inject.controller(),
createAccount: inject(),
forgotPassword: inject(),
application: inject(),
loggingIn: false,
loggedIn: false,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import { movePosts, mergeTopic } from "discourse/models/topic";
@ -37,7 +38,7 @@ export default Controller.extend(ModalFunctionality, {
];
},
topicController: Ember.inject.controller("topic"),
topicController: inject("topic"),
selectedPostsCount: Ember.computed.alias(
"topicController.selectedPostsCount"
),

View File

@ -1,8 +1,9 @@
import { inject } from '@ember/controller';
import NavigationDefaultController from "discourse/controllers/navigation/default";
import computed from "ember-addons/ember-computed-decorators";
export default NavigationDefaultController.extend({
discoveryCategories: Ember.inject.controller("discovery/categories"),
discoveryCategories: inject("discovery/categories"),
@computed("discoveryCategories.model", "discoveryCategories.model.draft")
draft() {

View File

@ -1,9 +1,10 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({
discovery: Ember.inject.controller(),
discoveryTopics: Ember.inject.controller("discovery/topics"),
discovery: inject(),
discoveryTopics: inject("discovery/topics"),
@computed("discoveryTopics.model", "discoveryTopics.model.draft")
draft: function() {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import PreferencesTabController from "discourse/mixins/preferences-tab-controller";
import { setDefaultHomepage } from "discourse/lib/utilities";
@ -52,7 +53,7 @@ export default Controller.extend(PreferencesTabController, {
return attrs;
},
preferencesController: Ember.inject.controller("preferences"),
preferencesController: inject("preferences"),
@computed()
isiPad() {

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
import { userPath } from "discourse/lib/url";
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
showLoginButton: Ember.computed.equal("model.path", "login"),

View File

@ -1,6 +1,7 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
export default Controller.extend({
tagGroups: Ember.inject.controller(),
tagGroups: inject(),
actions: {
save() {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import {
default as computed,
@ -50,7 +51,7 @@ if (customNavItemHref) {
}
export default Controller.extend(BulkTopicSelection, {
application: Ember.inject.controller(),
application: inject(),
tag: null,
additionalTags: null,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import Composer from "discourse/models/composer";
@ -35,8 +36,8 @@ export function registerCustomPostMessageCallback(type, callback) {
}
export default Controller.extend(bufferedProperty("model"), {
composer: Ember.inject.controller(),
application: Ember.inject.controller(),
composer: inject(),
application: inject(),
multiSelect: false,
selectedPostIds: null,
editingTopic: false,

View File

@ -1,10 +1,11 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { exportUserArchive } from "discourse/lib/export-csv";
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
router: Ember.inject.service(),
user: Ember.inject.controller(),
user: inject(),
userActionType: null,
canDownloadPosts: Ember.computed.alias("user.viewingSelf"),

View File

@ -1,6 +1,7 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
export default Controller.extend({
user: Ember.inject.controller(),
user: inject(),
username: Ember.computed.alias("user.model.username_lower"),
sortedBadges: Ember.computed.sort("model", "badgeSortOrder"),

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import {
default as DiscourseURL,
@ -6,7 +7,7 @@ import {
} from "discourse/lib/url";
export default Controller.extend({
topic: Ember.inject.controller(),
topic: inject(),
router: Ember.inject.service(),
actions: {

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import {
@ -6,7 +7,7 @@ import {
} from "ember-addons/ember-computed-decorators";
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
@observes("model.canLoadMore")
_showFooter() {

View File

@ -1,6 +1,7 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
_showFooter: function() {
this.set("application.showFooter", !this.get("model.canLoadMore"));

View File

@ -1,11 +1,12 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import Topic from "discourse/models/topic";
export default Controller.extend({
router: Ember.inject.service(),
userTopicsList: Ember.inject.controller("user-topics-list"),
user: Ember.inject.controller(),
userTopicsList: inject("user-topics-list"),
user: inject(),
pmView: false,
viewingSelf: Ember.computed.alias("user.viewingSelf"),

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import { durationTiny } from "discourse/lib/formatter";
@ -6,7 +7,7 @@ import { durationTiny } from "discourse/lib/formatter";
const MAX_BADGES = 6;
export default Controller.extend({
userController: Ember.inject.controller("user"),
userController: inject("user"),
user: Ember.computed.alias("userController.model"),
@computed("model.badges.length")

View File

@ -1,9 +1,10 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
// Lists of topics on a user's page.
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
hideCategory: false,
showPosters: false,

View File

@ -1,3 +1,4 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import CanCheckEmails from "discourse/mixins/can-check-emails";
import computed from "ember-addons/ember-computed-decorators";
@ -8,7 +9,7 @@ import { prioritizeNameInUx } from "discourse/lib/settings";
export default Controller.extend(CanCheckEmails, {
indexStream: false,
router: Ember.inject.service(),
userNotifications: Ember.inject.controller("user-notifications"),
userNotifications: inject("user-notifications"),
currentPath: Ember.computed.alias("router._router.currentPath"),
adminTools: optionalService(),

View File

@ -1,8 +1,9 @@
import { inject } from '@ember/controller';
import Controller from "@ember/controller";
import debounce from "discourse/lib/debounce";
export default Controller.extend({
application: Ember.inject.controller(),
application: inject(),
queryParams: ["period", "order", "asc", "name", "group", "exclude_usernames"],
period: "weekly",
order: "likes_received",