ES6: Mega update of controllers

This commit is contained in:
Robin Ward 2014-08-12 19:04:36 -04:00
parent 1c9ccc6eb1
commit 0adfeb1cff
66 changed files with 239 additions and 344 deletions
app/assets/javascripts
lib/es6_module_transpiler/tilt
plugins/poll/assets/javascripts/controllers
test/javascripts/controllers

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for agreeing with a flag.
@class AdminAgreeFlagController import ObjectController from 'discourse/controllers/object';
@extends Discourse.Controller
@namespace Discourse export default ObjectController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
needs: ["adminFlags"], needs: ["adminFlags"],

@ -1,14 +1,16 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This is the itemController for `Discourse.AdminBadgesController`. Its main purpose This is the itemController for `Discourse.AdminBadgesController`. Its main purpose
is to indicate which badge was selected. is to indicate which badge was selected.
@class AdminBadgeController @class AdminBadgeController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
/** /**
Whether this badge has been selected. Whether this badge has been selected.

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for deleting a flag.
@class AdminDeleteFlagController import ObjectController from 'discourse/controllers/object';
@extends Discourse.Controller
@namespace Discourse export default ObjectController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
needs: ["adminFlags"], needs: ["adminFlags"],

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller supports email functionality.
@class AdminEmailIndexController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
/** /**
Is the "send test email" button disabled? Is the "send test email" button disabled?

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This controller previews an email digest This controller previews an email digest
@class AdminEmailPreviewDigestController @class AdminEmailPreviewDigestController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
actions: { actions: {
refresh: function() { refresh: function() {

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller supports email logs functionality.
@class AdminEmailSentController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
filterEmailLogs: Discourse.debounce(function() { filterEmailLogs: Discourse.debounce(function() {
var self = this; var self = this;

@ -1,13 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller supports email logs functionality.
@class AdminEmailSkippedController
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
export default DiscourseController.extend({
filterEmailLogs: Discourse.debounce(function() { filterEmailLogs: Discourse.debounce(function() {
var self = this; var self = this;
Discourse.EmailLog.findAll(this.get("filter")).then(function(logs) { Discourse.EmailLog.findAll(this.get("filter")).then(function(logs) {

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller is used for editing site content
@class AdminSiteContentEditController export default DiscourseController.extend({
@extends Ember.ObjectController
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
saveDisabled: function() { saveDisabled: function() {
if (this.get('saving')) { return true; } if (this.get('saving')) { return true; }

@ -1,10 +1,5 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for viewing the details of a staff action log record.
@class AdminStaffActionLogDetailsController import ObjectController from 'discourse/controllers/object';
@extends Discourse.Controller
@namespace Discourse export default ObjectController.extend(ModalFunctionality);
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality);

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for suspending a user.
@class AdminSuspendUserController import ObjectController from 'discourse/controllers/object';
@extends Discourse.Controller
@namespace Discourse export default ObjectController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
submitDisabled: function() { submitDisabled: function() {
return (!this.get('reason') || this.get('reason').length < 1); return (!this.get('reason') || this.get('reason').length < 1);

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
A controller related to viewing a user in the admin section A controller related to viewing a user in the admin section
@class AdminUserIndexController @class AdminUserIndexController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
editingTitle: false, editingTitle: false,
originalPrimaryGroupId: null, originalPrimaryGroupId: null,
availableGroups: null, availableGroups: null,

@ -1,10 +1,12 @@
import ObjectController from 'discourse/controllers/object';
/** /**
The top-level controller for user pages in admin. The top-level controller for user pages in admin.
Ember assertion says that this class needs to be defined even if it's empty. Ember assertion says that this class needs to be defined even if it's empty.
@class AdminUserController @class AdminUserController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(); export default ObjectController.extend();

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
A base admin controller that has access to the Discourse properties.
@class AdminController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
showBadges: function() { showBadges: function() {
return this.get('currentUser.admin') && Discourse.SiteSettings.enable_badges; return this.get('currentUser.admin') && Discourse.SiteSettings.enable_badges;
}.property() }.property()

@ -1,4 +1,8 @@
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
export default ObjectController.extend(ModalFunctionality, {
previousSelected: Ember.computed.equal('selectedTab', 'previous'), previousSelected: Ember.computed.equal('selectedTab', 'previous'),
newSelected: Ember.computed.equal('selectedTab', 'new'), newSelected: Ember.computed.equal('selectedTab', 'new'),

@ -1,13 +1,3 @@
/**
The modal for viewing the details of a staff action log record
for when a site customization is deleted.
@class DeleteSiteCustomizationDetailsController
@extends Discourse.Controller
@namespace Discourse
@uses Discourse.ModalFunctionality
@module Discourse
**/
import ChangeSiteCustomizationDetailsController from "admin/controllers/change-site-customization-details"; import ChangeSiteCustomizationDetailsController from "admin/controllers/change-site-customization-details";
export default ChangeSiteCustomizationDetailsController.extend({ export default ChangeSiteCustomizationDetailsController.extend({

@ -1,22 +1,15 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for selecting an avatar
@class AvatarSelectorController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
selectedUploadId: function(){ selectedUploadId: function(){
switch(this.get("selected")){ switch(this.get("selected")){
case "system": case "system":
return this.get("system_avatar_upload_id"); return this.get("system_avatar_upload_id");
break;
case "gravatar": case "gravatar":
return this.get("gravatar_avatar_upload_id"); return this.get("gravatar_avatar_upload_id");
break;
default: default:
return this.get("custom_avatar_upload_id"); return this.get("custom_avatar_upload_id");
} }

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
Controller for showing a particular badge. Controller for showing a particular badge.
@class BadgesShowController @class BadgesShowController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
actions: { actions: {
loadMore: function() { loadMore: function() {

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
Modal related to changing the ownership of posts Modal related to changing the ownership of posts
@class ChangeOwnerController @class ChangeOwnerController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.SelectedPostsCount, Discourse.ModalFunctionality, { export default ObjectController.extend(Discourse.SelectedPostsCount, ModalFunctionality, {
needs: ['topic'], needs: ['topic'],
topicController: Em.computed.alias('controllers.topic'), topicController: Em.computed.alias('controllers.topic'),

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller supports composing new posts and topics.
@class ComposerController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
needs: ['modal', 'topic', 'composer-messages'], needs: ['modal', 'topic', 'composer-messages'],
replyAsNewTopicDraft: Em.computed.equal('model.draftKey', Discourse.Composer.REPLY_AS_NEW_TOPIC_KEY), replyAsNewTopicDraft: Em.computed.equal('model.draftKey', Discourse.Composer.REPLY_AS_NEW_TOPIC_KEY),

@ -1,10 +0,0 @@
/**
A base controller for Discourse that includes Presence support.
@class Controller
@extends Ember.Controller
@namespace Discourse
@uses Discourse.Presence
@module Discourse
**/
Discourse.Controller = Ember.Controller.extend(Discourse.Presence, Discourse.HasCurrentUser);

@ -0,0 +1 @@
export default Ember.Controller.extend(Discourse.Presence, Discourse.HasCurrentUser);

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for creating accounts
@class CreateAccountController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
uniqueUsernameValidation: null, uniqueUsernameValidation: null,
globalNicknameExists: false, globalNicknameExists: false,
complete: false, complete: false,

@ -1,4 +1,6 @@
export default Discourse.Controller.extend({ import DiscourseController from 'discourse/controllers/controller';
export default DiscourseController.extend({
needs: ['discovery/topics'], needs: ['discovery/topics'],
queryParams: ['order', 'ascending', 'status', 'state', 'search'], queryParams: ['order', 'ascending', 'status', 'state', 'search'],
order: Em.computed.alias('controllers.discovery/topics.order'), order: Em.computed.alias('controllers.discovery/topics.order'),

@ -1,4 +1,6 @@
export default Discourse.ObjectController.extend({ import ObjectController from 'discourse/controllers/object';
export default ObjectController.extend({
loading: false, loading: false,
loadingSpinner: false, loadingSpinner: false,
scheduledSpinner: null, scheduledSpinner: null,

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
Modal for editing / creating a category Modal for editing / creating a category
@class EditCategoryController @class EditCategoryController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { export default ObjectController.extend(ModalFunctionality, {
foregroundColors: ['FFFFFF', '000000'], foregroundColors: ['FFFFFF', '000000'],
categoryUploadUrl: '/category/uploads', categoryUploadUrl: '/category/uploads',

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
Modal related to auto closing of topics Modal related to auto closing of topics
@class EditTopicAutoCloseController @class EditTopicAutoCloseController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { export default ObjectController.extend(ModalFunctionality, {
auto_close_valid: true, auto_close_valid: true,
auto_close_invalid: Em.computed.not('auto_close_valid'), auto_close_invalid: Em.computed.not('auto_close_valid'),

@ -1,3 +1,5 @@
import ObjectController from 'discourse/controllers/object';
var ButtonBackBright = { var ButtonBackBright = {
classes: "btn-primary", classes: "btn-primary",
@ -24,11 +26,11 @@ var ButtonBackBright = {
The controller for the nice error page The controller for the nice error page
@class ExceptionController @class ExceptionController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
thrown: null, thrown: null,
lastTransition: null, lastTransition: null,

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
Supports logic for flags in the modal Supports logic for flags in the modal
@class FlagActionTypeController @class FlagActionTypeController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
needs: ['flag'], needs: ['flag'],
message: Em.computed.alias('controllers.flag.message'), message: Em.computed.alias('controllers.flag.message'),

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
This controller supports actions related to flagging This controller supports actions related to flagging
@class FlagController @class FlagController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { export default ObjectController.extend(ModalFunctionality, {
onShow: function() { onShow: function() {
this.set('selected', null); this.set('selected', null);

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for when the user has forgotten their password
@class ForgotPasswordController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
// You need a value in the field to submit it. // You need a value in the field to submit it.
submitDisabled: function() { submitDisabled: function() {

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
The basic controller for a group The basic controller for a group
@class GroupController @class GroupController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
counts: null, counts: null,
// It would be nice if bootstrap marked action lists as selected when their links // It would be nice if bootstrap marked action lists as selected when their links

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller supports actions on the site header
@class HeaderController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
topic: null, topic: null,
showExtraInfo: null, showExtraInfo: null,
notifications: null, notifications: null,

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
This controller handles displaying of history This controller handles displaying of history
@class HistoryController @class HistoryController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, { export default ObjectController.extend(ModalFunctionality, {
loading: false, loading: false,
viewMode: "side_by_side", viewMode: "side_by_side",
revisionsTextKey: "post.revisions.controls.comparing_previous_to_current_out_of_total", revisionsTextKey: "post.revisions.controls.comparing_previous_to_current_out_of_total",

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for inviting a user to a private topic
@class InvitePrivateController import ObjectController from 'discourse/controllers/object';
@extends Discourse.Controller
@namespace Discourse export default ObjectController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
modalClass: 'invite', modalClass: 'invite',
isAdmin: function(){ isAdmin: function(){

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for inviting a user to a topic
@class InviteController import ObjectController from 'discourse/controllers/object';
@extends Discourse.Controller
@namespace Discourse export default ObjectController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
needs: ['user-invited'], needs: ['user-invited'],
// If this isn't defined, it will proxy to the user model on the preferences // If this isn't defined, it will proxy to the user model on the preferences

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
This controller is used to display the Keyboard Shortcuts Help Modal
@class KeyboardShortcutsHelpController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
needs: ['modal'], needs: ['modal'],
onShow: function() { onShow: function() {

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
This controller supports actions related to flagging
@class LoginController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
needs: ['modal', 'createAccount', 'application'], needs: ['modal', 'createAccount', 'application'],
authenticate: null, authenticate: null,
loggingIn: false, loggingIn: false,

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
Modal related to merging of topics Modal related to merging of topics
@class MergeTopicController @class MergeTopicController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.SelectedPostsCount, Discourse.ModalFunctionality, { export default ObjectController.extend(Discourse.SelectedPostsCount, ModalFunctionality, {
needs: ['topic'], needs: ['topic'],
topicController: Em.computed.alias('controllers.topic'), topicController: Em.computed.alias('controllers.topic'),

@ -1,9 +1,3 @@
/** import DiscourseController from 'discourse/controllers/controller';
Related to showing a modal and its title.
@class ModalController export default DiscourseController.extend({});
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({});

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
Handles the controller for the default navigation within discovery.
@class NavigationDefaultController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
categories: function() { categories: function() {
return Discourse.Category.list(); return Discourse.Category.list();
}.property(), }.property(),

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
Modal displayed to a user when they are not active yet.
@class NotActivatedController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
emailSent: false, emailSent: false,
actions: { actions: {

@ -1,4 +1,6 @@
export default Discourse.ObjectController.extend({ import ObjectController from 'discourse/controllers/object';
export default ObjectController.extend({
scope: function () { scope: function () {
return "notifications." + Discourse.Site.currentProp("notificationLookup")[this.get("notification_type")]; return "notifications." + Discourse.Site.currentProp("notificationLookup")[this.get("notification_type")];

@ -0,0 +1 @@
export default Ember.ObjectController.extend(Discourse.Presence, Discourse.HasCurrentUser);

@ -1,12 +0,0 @@
/**
A custom object controller for Discourse
@class ObjectController
@extends Ember.ObjectController
@namespace Discourse
@uses Discourse.Presence
@module Discourse
**/
Discourse.ObjectController = Ember.ObjectController.extend(Discourse.Presence, Discourse.HasCurrentUser);

@ -1,4 +1,6 @@
export default Discourse.ObjectController.extend({ import ObjectController from 'discourse/controllers/object';
export default ObjectController.extend({
needs: ['topic'], needs: ['topic'],
visible: false, visible: false,
user: null, user: null,

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This controller supports actions related to updating one's preferences This controller supports actions related to updating one's preferences
@class PreferencesController @class PreferencesController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
allowAvatarUpload: Discourse.computed.setting('allow_uploaded_avatars'), allowAvatarUpload: Discourse.computed.setting('allow_uploaded_avatars'),
allowUserLocale: Discourse.computed.setting('allow_user_locale'), allowUserLocale: Discourse.computed.setting('allow_user_locale'),

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This controller supports actions related to updating your "About Me" bio This controller supports actions related to updating your "About Me" bio
@class PreferencesAboutController @class PreferencesAboutController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
saving: false, saving: false,
saveButtonText: function() { saveButtonText: function() {

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This controller supports actions related to updating one's email address This controller supports actions related to updating one's email address
@class PreferencesEmailController @class PreferencesEmailController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
taken: false, taken: false,
saving: false, saving: false,
error: false, error: false,

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This controller supports actions related to updating one's username This controller supports actions related to updating one's username
@class PreferencesUsernameController @class PreferencesUsernameController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
taken: false, taken: false,
saving: false, saving: false,
error: false, error: false,

@ -1,14 +1,8 @@
import DiscourseController from 'discourse/controllers/controller';
/*global assetPath:true */ /*global assetPath:true */
/** export default DiscourseController.extend({
This controller supports the pop up quote button
@class QuoteButtonController
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
needs: ['topic', 'composer'], needs: ['topic', 'composer'],
init: function() { init: function() {

@ -1,11 +1,3 @@
/**
Support for searching
@class SearchController
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Em.ArrayController.extend(Discourse.Presence, { export default Em.ArrayController.extend(Discourse.Presence, {
contextChanged: function(){ contextChanged: function(){

@ -1,12 +1,6 @@
/** import DiscourseController from 'discourse/controllers/controller';
This controller supports the "share" link controls
@class ShareController export default DiscourseController.extend({
@extends Discourse.Controller
@namespace Discourse
@module Discourse
**/
export default Discourse.Controller.extend({
needs: ['topic'], needs: ['topic'],
// Close the share controller // Close the share controller

@ -1,13 +1,17 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
import ObjectController from 'discourse/controllers/object';
/** /**
Modal related to auto closing of topics Modal related to auto closing of topics
@class SplitTopicController @class SplitTopicController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend(Discourse.SelectedPostsCount, Discourse.ModalFunctionality, { export default ObjectController.extend(Discourse.SelectedPostsCount, ModalFunctionality, {
needs: ['topic'], needs: ['topic'],
topicController: Em.computed.alias('controllers.topic'), topicController: Em.computed.alias('controllers.topic'),

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
This controller supports the admin menu on topics This controller supports the admin menu on topics
@class TopicAdminMenuController @class TopicAdminMenuController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
menuVisible: false, menuVisible: false,
needs: ['modal'], needs: ['modal'],

@ -1,13 +1,15 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
/** /**
Modal for performing bulk actions on topics Modal for performing bulk actions on topics
@class TopicBulkActionsController @class TopicBulkActionsController
@extends Ember.ArrayController @extends Ember.ArrayController
@namespace Discourse @namespace Discourse
@uses Discourse.ModalFunctionality @uses ModalFunctionality
@module Discourse @module Discourse
**/ **/
export default Ember.ArrayController.extend(Discourse.ModalFunctionality, { export default Ember.ArrayController.extend(ModalFunctionality, {
needs: ['discovery/topics'], needs: ['discovery/topics'],
onShow: function() { onShow: function() {

@ -1,8 +1,10 @@
import ObjectController from 'discourse/controllers/object';
/** /**
Handles displaying of a topic as a list item Handles displaying of a topic as a list item
@class TopicListItemController @class TopicListItemController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/

@ -1,4 +1,6 @@
export default Discourse.ObjectController.extend(Discourse.SelectedPostsCount, { import ObjectController from 'discourse/controllers/object';
export default ObjectController.extend(Discourse.SelectedPostsCount, {
multiSelect: false, multiSelect: false,
needs: ['header', 'modal', 'composer', 'quote-button', 'search', 'topic-progress'], needs: ['header', 'modal', 'composer', 'quote-button', 'search', 'topic-progress'],
allPostsSelected: false, allPostsSelected: false,

@ -1,13 +1,8 @@
/** import ModalFunctionality from 'discourse/mixins/modal-functionality';
The modal for upload a file to a post
@class UploadSelectorController import DiscourseController from 'discourse/controllers/controller';
@extends Discourse.Controller
@namespace Discourse export default DiscourseController.extend(ModalFunctionality, {
@uses Discourse.ModalFunctionality
@module Discourse
**/
export default Discourse.Controller.extend(Discourse.ModalFunctionality, {
remote: Em.computed.not("local"), remote: Em.computed.not("local"),
local: false, local: false,
showMore: false, showMore: false,

@ -1,12 +1,14 @@
import ObjectController from 'discourse/controllers/object';
/** /**
Lists of topics on a user's page. Lists of topics on a user's page.
@class UserTopicsListController @class UserTopicsListController
@extends Discourse.ObjectController @extends ObjectController
@namespace Discourse @namespace Discourse
@module Discourse @module Discourse
**/ **/
export default Discourse.ObjectController.extend({ export default ObjectController.extend({
hideCategory: false, hideCategory: false,
showParticipants: false, showParticipants: false,

@ -1,4 +1,6 @@
export default Discourse.ObjectController.extend({ import ObjectController from 'discourse/controllers/object';
export default ObjectController.extend({
viewingSelf: function() { viewingSelf: function() {
return this.get('content.username') === Discourse.User.currentProp('username'); return this.get('content.username') === Discourse.User.currentProp('username');

@ -0,0 +1,10 @@
export default Em.Mixin.create({
needs: ['modal'],
flash: function(message, messageClass) {
this.set('flashMessage', Em.Object.create({
message: message,
messageClass: messageClass
}));
}
});

@ -1,29 +0,0 @@
/**
This mixin provides functionality to modal controllers
@class Discourse.ModalFunctionality
@extends Ember.Mixin
@namespace Discourse
@module Discourse
**/
Discourse.ModalFunctionality = Em.Mixin.create({
needs: ['modal'],
/**
Flash a message at the top of the modal
@method blank
@param {String} message I18n name of the message
@param {String} messageClass CSS class to apply
@return {Boolean}
**/
flash: function(message, messageClass) {
this.set('flashMessage', Em.Object.create({
message: message,
messageClass: messageClass
}));
}
});

@ -20,7 +20,7 @@
//= require ./discourse/models/composer //= require ./discourse/models/composer
//= require ./discourse/models/topic //= require ./discourse/models/topic
//= require ./discourse/controllers/controller //= require ./discourse/controllers/controller
//= require ./discourse/controllers/object_controller //= require ./discourse/controllers/object
//= require ./discourse/controllers/navigation/default //= require ./discourse/controllers/navigation/default
//= require ./discourse/views/modal_body_view //= require ./discourse/views/modal_body_view
//= require ./discourse/views/flag //= require ./discourse/views/flag

@ -70,7 +70,7 @@ module Tilt
# For backwards compatibility with plugins, for now export the Global format too. # For backwards compatibility with plugins, for now export the Global format too.
# We should eventually have an upgrade system for plugins to use ES6 or some other # We should eventually have an upgrade system for plugins to use ES6 or some other
# resolve based API. # resolve based API.
if ENV['DISCOURSE_NO_CONSTANTS'].nil? && scope.logical_path =~ /(discourse|admin)\/(controllers|components|views|routes)\/(.*)/ if ENV['DISCOURSE_NO_CONSTANTS'].nil? && scope.logical_path =~ /(discourse|admin)\/(controllers|components|views|routes|mixins)\/(.*)/
type = Regexp.last_match[2] type = Regexp.last_match[2]
file_name = Regexp.last_match[3].gsub(/[\-\/]/, '_') file_name = Regexp.last_match[3].gsub(/[\-\/]/, '_')
class_name = file_name.classify class_name = file_name.classify
@ -82,7 +82,13 @@ module Tilt
require_name = module_name(scope.root_path, scope.logical_path) require_name = module_name(scope.root_path, scope.logical_path)
if require_name !~ /\-test$/ if require_name !~ /\-test$/
@output << "\n\nDiscourse.#{class_name}#{type.classify} = require('#{require_name}').default;\n" result = "#{class_name}#{type.classify}"
# HAX
result = "Controller" if result == "ControllerController"
result.gsub!(/Mixin$/, '')
@output << "\n\nDiscourse.#{result} = require('#{require_name}').default;\n"
end end
end end

@ -1,4 +1,6 @@
export default Discourse.Controller.extend({ import DiscourseController from 'discourse/controllers/controller';
export default DiscourseController.extend({
poll: null, poll: null,
showResults: Em.computed.oneWay('poll.closed'), showResults: Em.computed.oneWay('poll.closed'),
disableRadio: Em.computed.any('poll.closed', 'loading'), disableRadio: Em.computed.any('poll.closed', 'loading'),

@ -1,6 +1,8 @@
module("Discourse.Controller"); import DiscourseController from 'discourse/controllers/controller';
module("DiscourseController");
test("includes mixins", function() { test("includes mixins", function() {
ok(Discourse.Presence.detect(Discourse.Controller.create()), "Discourse.Presence"); ok(Discourse.Presence.detect(DiscourseController.create()), "Discourse.Presence");
ok(Discourse.HasCurrentUser.detect(Discourse.Controller.create()), "Discourse.HasCurrentUser"); ok(Discourse.HasCurrentUser.detect(DiscourseController.create()), "Discourse.HasCurrentUser");
}); });