diff --git a/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 b/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 index d5a67e3f635..5a154ca745c 100644 --- a/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 +++ b/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 @@ -3,8 +3,6 @@ import LoadMore from "discourse/mixins/load-more"; import UrlRefresh from 'discourse/mixins/url-refresh'; const DiscoveryTopicsListComponent = Ember.Component.extend(UrlRefresh, LoadMore, { - _viaComponent: true, - classNames: ['contents'], eyelineSelector: '.topic-list-item', diff --git a/app/assets/javascripts/discourse/components/load-more.js.es6 b/app/assets/javascripts/discourse/components/load-more.js.es6 index 4b355a5b0aa..ab7591f5e9d 100644 --- a/app/assets/javascripts/discourse/components/load-more.js.es6 +++ b/app/assets/javascripts/discourse/components/load-more.js.es6 @@ -1,8 +1,6 @@ import LoadMore from "discourse/mixins/load-more"; export default Ember.Component.extend(LoadMore, { - _viaComponent: true, - init() { this._super(); this.set('eyelineSelector', this.get('selector')); diff --git a/app/assets/javascripts/discourse/components/user-stream.js.es6 b/app/assets/javascripts/discourse/components/user-stream.js.es6 new file mode 100644 index 00000000000..ad38f8e0405 --- /dev/null +++ b/app/assets/javascripts/discourse/components/user-stream.js.es6 @@ -0,0 +1,24 @@ +import LoadMore from "discourse/mixins/load-more"; + +export default Ember.Component.extend(LoadMore, { + loading: false, + eyelineSelector: '.user-stream .item', + classNames: ['user-stream'], + + _scrollTopOnModelChange: function() { + Em.run.schedule('afterRender', () => $(document).scrollTop(0)); + }.observes('stream.user.id'), + + actions: { + loadMore() { + if (this.get('loading')) { return; } + + this.set('loading', true); + const stream = this.get('stream'); + stream.findItems().then(() => { + this.set('loading', false); + this.get('eyeline').flushRest(); + }); + } + } +}); diff --git a/app/assets/javascripts/discourse/ember/resolver.js.es6 b/app/assets/javascripts/discourse/ember/resolver.js.es6 index d7124c0900f..adf2e0f9227 100644 --- a/app/assets/javascripts/discourse/ember/resolver.js.es6 +++ b/app/assets/javascripts/discourse/ember/resolver.js.es6 @@ -151,11 +151,13 @@ export default Ember.DefaultResolver.extend({ const withoutType = parsedName.fullNameWithoutType, slashedType = withoutType.replace(/\./g, '/'), decamelized = withoutType.decamelize(), + dashed = decamelized.replace(/\./g, '-').replace(/\_/g, '-'), templates = Ember.TEMPLATES; return this._super(parsedName) || templates[slashedType] || templates[withoutType] || + templates[dashed] || templates[decamelized.replace(/\./, '/')] || templates[decamelized.replace(/\_/, '/')] || this.findAdminTemplate(parsedName) || diff --git a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 index f1d31936f87..028570517da 100644 --- a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 +++ b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 @@ -49,7 +49,7 @@ class PluginApi { if (!opts.onlyStream) { decorate(ComposerEditor, 'previewRefreshed', callback); - decorate(this.container.lookupFactory('view:user-stream'), 'didInsertElement', callback); + decorate(this.container.lookupFactory('component:user-stream'), 'didInsertElement', callback); } } diff --git a/app/assets/javascripts/discourse/mixins/load-more.js.es6 b/app/assets/javascripts/discourse/mixins/load-more.js.es6 index 16c8734054d..c422e1cd633 100644 --- a/app/assets/javascripts/discourse/mixins/load-more.js.es6 +++ b/app/assets/javascripts/discourse/mixins/load-more.js.es6 @@ -5,14 +5,6 @@ import { on } from 'ember-addons/ember-computed-decorators'; // Provides the ability to load more items for a view which is scrolled to the bottom. export default Ember.Mixin.create(Ember.ViewTargetActionSupport, Scrolling, { - init() { - this._super(); - if (!this._viaComponent) { - console.warn('Using `LoadMore` as a view mixin is deprecated. Use `{{load-more}}` instead'); - } - - }, - scrolled() { const eyeline = this.get('eyeline'); return eyeline && eyeline.update(); diff --git a/app/assets/javascripts/discourse/templates/group/members.hbs b/app/assets/javascripts/discourse/templates/group-members.hbs similarity index 100% rename from app/assets/javascripts/discourse/templates/group/members.hbs rename to app/assets/javascripts/discourse/templates/group-members.hbs diff --git a/app/assets/javascripts/discourse/templates/user-invited-show.hbs b/app/assets/javascripts/discourse/templates/user-invited-show.hbs index 29c37bcb992..f489c089e7b 100644 --- a/app/assets/javascripts/discourse/templates/user-invited-show.hbs +++ b/app/assets/javascripts/discourse/templates/user-invited-show.hbs @@ -1,100 +1,102 @@ {{#if canInviteToForum}} -
-

{{i18n 'user.invited.title'}}

+ {{#load-more class="paginated-topics-list" selector=".paginated-topics-list .user-invite-list tr" action="loadMore"}} +
+

{{i18n 'user.invited.title'}}

- {{#if model.can_see_invite_details}} -
-
- -
+ {{#if model.can_see_invite_details}} +
+
+ +
-
- {{d-button icon="plus" action="showInvite" label="user.invited.create" class="btn"}} - {{#if canBulkInvite}} - {{resumable-upload target="/invites/upload" success="uploadSuccess" error="uploadError" uploadText=uploadText}} - {{/if}} -
-
- {{/if}} - - {{#if showSearch}} - - {{/if}} - - {{#if model.invites}} - - - {{#if inviteRedeemed}} - - - {{#if model.can_see_invite_details}} - - - - - +
+ {{d-button icon="plus" action="showInvite" label="user.invited.create" class="btn"}} + {{#if canBulkInvite}} + {{resumable-upload target="/invites/upload" success="uploadSuccess" error="uploadError" uploadText=uploadText}} {{/if}} - {{else}} -
- - {{/if}} - - {{#each invite in model.invites}} + + + {{/if}} + + {{#if showSearch}} + + {{/if}} + + {{#if model.invites}} +
{{i18n 'user.invited.user'}}{{i18n 'user.invited.redeemed_at'}}{{i18n 'user.last_seen'}}{{i18n 'user.invited.topics_entered'}}{{i18n 'user.invited.posts_read_count'}}{{i18n 'user.invited.time_read'}}{{i18n 'user.invited.days_visited'}}{{i18n 'user.invited.user'}}{{i18n 'user.invited.sent'}}
- {{#if invite.user}} - - + {{#if inviteRedeemed}} + + {{#if model.can_see_invite_details}} - - - - - + + + + + {{/if}} {{else}} - - - + + {{/if}} - {{/each}} -
- {{#link-to 'user' invite.user}}{{avatar invite.user imageSize="tiny"}}{{/link-to}} - {{#link-to 'user' invite.user}}{{invite.user.username}}{{/link-to}} - {{format-date invite.redeemed_at}}{{i18n 'user.invited.user'}}{{i18n 'user.invited.redeemed_at'}}{{format-date invite.user.last_seen_at}}{{number invite.user.topics_entered}}{{number invite.user.posts_read_count}}{{{unbound invite.user.time_read}}}{{{unbound invite.user.days_visited}}} - / - {{{unbound invite.user.days_since_created}}}{{i18n 'user.last_seen'}}{{i18n 'user.invited.topics_entered'}}{{i18n 'user.invited.posts_read_count'}}{{i18n 'user.invited.time_read'}}{{i18n 'user.invited.days_visited'}}{{unbound invite.email}}{{format-date invite.created_at}} - {{#if invite.expired}} - {{i18n 'user.invited.expired'}} -      - {{/if}} - {{#if invite.rescinded}} - {{i18n 'user.invited.rescinded'}} - {{else}} - {{d-button icon="times" action="rescind" actionParam=invite class="btn" label="user.invited.rescind"}} - {{/if}} -      - {{#if invite.reinvited}} - {{i18n 'user.invited.reinvited'}} - {{else}} - {{d-button icon="refresh" action="reinvite" actionParam=invite class="btn" label="user.invited.reinvite"}} - {{/if}} - {{i18n 'user.invited.user'}}{{i18n 'user.invited.sent'}}
- {{conditional-loading-spinner condition=invitesLoading}} + {{#each invite in model.invites}} + + {{#if invite.user}} + + {{#link-to 'user' invite.user}}{{avatar invite.user imageSize="tiny"}}{{/link-to}} + {{#link-to 'user' invite.user}}{{invite.user.username}}{{/link-to}} + + {{format-date invite.redeemed_at}} + {{#if model.can_see_invite_details}} + {{format-date invite.user.last_seen_at}} + {{number invite.user.topics_entered}} + {{number invite.user.posts_read_count}} + {{{unbound invite.user.time_read}}} + {{{unbound invite.user.days_visited}}} + / + {{{unbound invite.user.days_since_created}}} + {{/if}} + {{else}} + {{unbound invite.email}} + {{format-date invite.created_at}} + + {{#if invite.expired}} + {{i18n 'user.invited.expired'}} +      + {{/if}} + {{#if invite.rescinded}} + {{i18n 'user.invited.rescinded'}} + {{else}} + {{d-button icon="times" action="rescind" actionParam=invite class="btn" label="user.invited.rescind"}} + {{/if}} +      + {{#if invite.reinvited}} + {{i18n 'user.invited.reinvited'}} + {{else}} + {{d-button icon="refresh" action="reinvite" actionParam=invite class="btn" label="user.invited.reinvite"}} + {{/if}} + + {{/if}} + + {{/each}} + + {{conditional-loading-spinner condition=invitesLoading}} - {{else}} -
- {{#if canBulkInvite}} - {{{i18n 'user.invited.bulk_invite.none'}}} - {{else}} - {{i18n 'user.invited.none'}} - {{/if}} -
- {{/if}} -
+ {{else}} +
+ {{#if canBulkInvite}} + {{{i18n 'user.invited.bulk_invite.none'}}} + {{else}} + {{i18n 'user.invited.none'}} + {{/if}} +
+ {{/if}} +
+ {{/load-more}} {{/if}} diff --git a/app/assets/javascripts/discourse/templates/user-topics-list.hbs b/app/assets/javascripts/discourse/templates/user-topics-list.hbs index 9505009d2ef..e1b7a24cef2 100644 --- a/app/assets/javascripts/discourse/templates/user-topics-list.hbs +++ b/app/assets/javascripts/discourse/templates/user-topics-list.hbs @@ -1,9 +1,10 @@ - -{{basic-topic-list topicList=model - hideCategory=hideCategory - showParticipants=showParticipants - showPosters=showPosters - canBulkSelect=canBulkSelect - bulkSelectEnabled=bulkSelectEnabled - selected=selected - postsAction="showTopicEntrance"}} +{{#load-more class="paginated-topics-list" selector=".paginated-topics-list .topic-list tr" action="loadMore"}} + {{basic-topic-list topicList=model + hideCategory=hideCategory + showParticipants=showParticipants + showPosters=showPosters + canBulkSelect=canBulkSelect + bulkSelectEnabled=bulkSelectEnabled + selected=selected + postsAction="showTopicEntrance"}} +{{/load-more}} diff --git a/app/assets/javascripts/discourse/templates/user/posts.hbs b/app/assets/javascripts/discourse/templates/user/posts.hbs index 285824a59f6..3da9819a579 100644 --- a/app/assets/javascripts/discourse/templates/user/posts.hbs +++ b/app/assets/javascripts/discourse/templates/user/posts.hbs @@ -1,28 +1,30 @@ -{{#each p in model.content}} -
-
- -
- {{avatar p imageSize="large" extraClasses="actor" ignoreTitle="true"}} -
-
- - {{format-date p.created_at leaveAgo="true"}} - - - {{unbound p.topic_title}} - - - {{category-link p.category}} - - {{#if p.deleted}} - - {{avatar p.deleted_by imageSize="tiny" extraClasses="actor" ignoreTitle="true"}} {{format-date p.deleted_at leaveAgo="true"}} +{{#user-stream stream=model}} + {{#each p in model.content}} +
+
+ +
+ {{avatar p imageSize="large" extraClasses="actor" ignoreTitle="true"}} +
+
+ + {{format-date p.created_at leaveAgo="true"}} - {{/if}} + + {{unbound p.topic_title}} + + + {{category-link p.category}} + + {{#if p.deleted}} + + {{avatar p.deleted_by imageSize="tiny" extraClasses="actor" ignoreTitle="true"}} {{format-date p.deleted_at leaveAgo="true"}} + + {{/if}} +
+

+ {{{p.excerpt}}} +

-

- {{{p.excerpt}}} -

-
-{{/each}} + {{/each}} +{{/user-stream}} diff --git a/app/assets/javascripts/discourse/templates/user/stream.hbs b/app/assets/javascripts/discourse/templates/user/stream.hbs index c7b3114470a..0a06e728c81 100644 --- a/app/assets/javascripts/discourse/templates/user/stream.hbs +++ b/app/assets/javascripts/discourse/templates/user/stream.hbs @@ -1,3 +1,5 @@ -{{#each model.content as |item|}} - {{stream-item item=item removeBookmark="removeBookmark"}} -{{/each}} +{{#user-stream stream=model}} + {{#each model.content as |item|}} + {{stream-item item=item removeBookmark="removeBookmark"}} + {{/each}} +{{/user-stream}} diff --git a/app/assets/javascripts/discourse/templates/users.hbs b/app/assets/javascripts/discourse/templates/users.hbs index 71aad9499ea..86c791e9e90 100644 --- a/app/assets/javascripts/discourse/templates/users.hbs +++ b/app/assets/javascripts/discourse/templates/users.hbs @@ -1,56 +1,58 @@ -
-
+{{#load-more selector=".directory tbody tr" action="loadMore"}} +
+
+ +
+ {{period-chooser period=period}} + {{text-field value=nameInput placeholderKey="directory.filter_name" class="filter-name"}} +
+ + {{#conditional-loading-spinner condition=model.loading}} + {{#if model.length}} +
{{i18n "directory.total_rows" count=model.totalRows}}
+ + + + + {{directory-toggle field="likes_received" order=order asc=asc icon="heart"}} + {{directory-toggle field="likes_given" order=order asc=asc icon="heart"}} + {{directory-toggle field="topic_count" order=order asc=asc}} + {{directory-toggle field="post_count" order=order asc=asc}} + {{directory-toggle field="topics_entered" order=order asc=asc}} + {{directory-toggle field="posts_read" order=order asc=asc}} + {{directory-toggle field="days_visited" order=order asc=asc}} + {{#if showTimeRead}} + + {{/if}} + + + {{#each ic in model itemController="directory-item"}} + + {{#with ic.model as |it|}} + + + + + + + + + {{#if controller.parentController.showTimeRead}} + + {{/if}} + {{/with}} + + {{/each}} + +
 {{i18n "directory.time_read"}}
{{user-info user=it.user}}{{number it.likes_received}}{{number it.likes_given}}{{number it.topic_count}}{{number it.post_count}}{{number it.topics_entered}}{{number it.posts_read}}{{number it.days_visited}}{{unbound it.time_read}}
+ + {{conditional-loading-spinner condition=model.loadingMore}} + {{else}} +
+

{{i18n "directory.no_results"}}

+ {{/if}} + {{/conditional-loading-spinner}} -
- {{period-chooser period=period}} - {{text-field value=nameInput placeholderKey="directory.filter_name" class="filter-name"}}
- - {{#conditional-loading-spinner condition=model.loading}} - {{#if model.length}} -
{{i18n "directory.total_rows" count=model.totalRows}}
- - - - - {{directory-toggle field="likes_received" order=order asc=asc icon="heart"}} - {{directory-toggle field="likes_given" order=order asc=asc icon="heart"}} - {{directory-toggle field="topic_count" order=order asc=asc}} - {{directory-toggle field="post_count" order=order asc=asc}} - {{directory-toggle field="topics_entered" order=order asc=asc}} - {{directory-toggle field="posts_read" order=order asc=asc}} - {{directory-toggle field="days_visited" order=order asc=asc}} - {{#if showTimeRead}} - - {{/if}} - - - {{#each ic in model itemController="directory-item"}} - - {{#with ic.model as |it|}} - - - - - - - - - {{#if controller.parentController.showTimeRead}} - - {{/if}} - {{/with}} - - {{/each}} - -
 {{i18n "directory.time_read"}}
{{user-info user=it.user}}{{number it.likes_received}}{{number it.likes_given}}{{number it.topic_count}}{{number it.post_count}}{{number it.topics_entered}}{{number it.posts_read}}{{number it.days_visited}}{{unbound it.time_read}}
- - {{conditional-loading-spinner condition=model.loadingMore}} - {{else}} -
-

{{i18n "directory.no_results"}}

- {{/if}} - {{/conditional-loading-spinner}} -
-
+{{/load-more}} diff --git a/app/assets/javascripts/discourse/views/user-activity-stream.js.es6 b/app/assets/javascripts/discourse/views/user-activity-stream.js.es6 deleted file mode 100644 index 86fbaefd8f2..00000000000 --- a/app/assets/javascripts/discourse/views/user-activity-stream.js.es6 +++ /dev/null @@ -1,27 +0,0 @@ -import LoadMore from "discourse/mixins/load-more"; - -export default Ember.View.extend(LoadMore, { - loading: false, - eyelineSelector: '.user-stream .item', - classNames: ['user-stream'], - - _scrollTopOnModelChange: function() { - Em.run.schedule('afterRender', function() { - $(document).scrollTop(0); - }); - }.observes('controller.model.user.id'), - - actions: { - loadMore() { - const self = this; - if (this.get('loading')) { return; } - - this.set('loading', true); - const stream = this.get('controller.model'); - stream.findItems().then(function() { - self.set('loading', false); - self.get('eyeline').flushRest(); - }); - } - } -}); diff --git a/app/assets/javascripts/discourse/views/user-invited-show.js.es6 b/app/assets/javascripts/discourse/views/user-invited-show.js.es6 deleted file mode 100644 index 25ae5e30d61..00000000000 --- a/app/assets/javascripts/discourse/views/user-invited-show.js.es6 +++ /dev/null @@ -1,7 +0,0 @@ -import LoadMore from "discourse/mixins/load-more"; - -export default Ember.View.extend(LoadMore, { - classNames: ['paginated-topics-list'], - eyelineSelector: '.paginated-topics-list .user-invite-list tr', - templateName: 'user-invited-show' -}); diff --git a/app/assets/javascripts/discourse/views/user-posts.js.es6 b/app/assets/javascripts/discourse/views/user-posts.js.es6 deleted file mode 100644 index 6a4d254fcfb..00000000000 --- a/app/assets/javascripts/discourse/views/user-posts.js.es6 +++ /dev/null @@ -1,20 +0,0 @@ -import LoadMore from "discourse/mixins/load-more"; - -export default Ember.View.extend(LoadMore, { - loading: false, - eyelineSelector: ".user-stream .item", - classNames: ["user-stream"], - - actions: { - loadMore: function() { - var self = this; - if (this.get("loading")) { return; } - - var postsStream = this.get("controller.model"); - postsStream.findItems().then(function () { - self.set("loading", false); - self.get("eyeline").flushRest(); - }).catch(function () { }); - } - } -}); diff --git a/app/assets/javascripts/discourse/views/user-stream.js.es6 b/app/assets/javascripts/discourse/views/user-stream.js.es6 deleted file mode 100644 index 86fbaefd8f2..00000000000 --- a/app/assets/javascripts/discourse/views/user-stream.js.es6 +++ /dev/null @@ -1,27 +0,0 @@ -import LoadMore from "discourse/mixins/load-more"; - -export default Ember.View.extend(LoadMore, { - loading: false, - eyelineSelector: '.user-stream .item', - classNames: ['user-stream'], - - _scrollTopOnModelChange: function() { - Em.run.schedule('afterRender', function() { - $(document).scrollTop(0); - }); - }.observes('controller.model.user.id'), - - actions: { - loadMore() { - const self = this; - if (this.get('loading')) { return; } - - this.set('loading', true); - const stream = this.get('controller.model'); - stream.findItems().then(function() { - self.set('loading', false); - self.get('eyeline').flushRest(); - }); - } - } -}); diff --git a/app/assets/javascripts/discourse/views/user-topics-list.js.es6 b/app/assets/javascripts/discourse/views/user-topics-list.js.es6 deleted file mode 100644 index b60d907613f..00000000000 --- a/app/assets/javascripts/discourse/views/user-topics-list.js.es6 +++ /dev/null @@ -1,6 +0,0 @@ -import LoadMore from "discourse/mixins/load-more"; - -export default Ember.View.extend(LoadMore, { - classNames: ['paginated-topics-list'], - eyelineSelector: '.paginated-topics-list .topic-list tr', -}); diff --git a/app/assets/javascripts/discourse/views/users.js.es6 b/app/assets/javascripts/discourse/views/users.js.es6 deleted file mode 100644 index 1af01b74812..00000000000 --- a/app/assets/javascripts/discourse/views/users.js.es6 +++ /dev/null @@ -1,5 +0,0 @@ -import LoadMore from 'discourse/mixins/load-more'; - -export default Ember.View.extend(LoadMore, { - eyelineSelector: '.directory tbody tr' -}); diff --git a/test/javascripts/lib/click-track-test.js.es6 b/test/javascripts/lib/click-track-test.js.es6 index ae571b742a0..2bcfc673e02 100644 --- a/test/javascripts/lib/click-track-test.js.es6 +++ b/test/javascripts/lib/click-track-test.js.es6 @@ -167,7 +167,7 @@ testOpenInANewTab("it opens in a new tab when pressing ctrl", function(clickEven }); testOpenInANewTab("it opens in a new tab on middle click", function(clickEvent) { - clickEvent.which = 2; + clickEvent.button = 2; }); test("tracks via AJAX if we're on the same site", function() {