diff --git a/plugins/poll/assets/javascripts/controllers/poll.js.es6 b/plugins/poll/assets/javascripts/components/discourse-poll.js.es6 similarity index 89% rename from plugins/poll/assets/javascripts/controllers/poll.js.es6 rename to plugins/poll/assets/javascripts/components/discourse-poll.js.es6 index ba1f840e672..7b3cae9dceb 100644 --- a/plugins/poll/assets/javascripts/controllers/poll.js.es6 +++ b/plugins/poll/assets/javascripts/components/discourse-poll.js.es6 @@ -1,7 +1,16 @@ -import { ajax } from 'discourse/lib/ajax'; import { default as computed, observes } from "ember-addons/ember-computed-decorators"; +import { ajax } from 'discourse/lib/ajax'; + +export default Ember.Component.extend({ + layoutName: 'components/discourse-poll', + classNames: ["poll"], + attributeBindings: ["data-poll-type", "data-poll-name", "data-poll-status", "data-poll-public"], + + "data-poll-type": Ember.computed.alias("poll.type"), + "data-poll-name": Ember.computed.alias("poll.name"), + "data-poll-status": Ember.computed.alias("poll.status"), + "data-poll-public": Ember.computed.alias("poll.public"), -export default Ember.Controller.extend({ isMultiple: Ember.computed.equal("poll.type", "multiple"), isNumber: Ember.computed.equal("poll.type", "number"), isClosed: Ember.computed.equal("poll.status", "closed"), @@ -11,10 +20,10 @@ export default Ember.Controller.extend({ // - poll is closed // - topic is archived // - user wants to see the results - showingResults: Em.computed.or("isClosed", "post.topic.archived", "showResults"), + showingResults: Ember.computed.or("isClosed", "post.topic.archived", "showResults"), - showResultsDisabled: Em.computed.equal("poll.voters", 0), - hideResultsDisabled: Em.computed.or("isClosed", "post.topic.archived"), + showResultsDisabled: Ember.computed.equal("poll.voters", 0), + hideResultsDisabled: Ember.computed.or("isClosed", "post.topic.archived"), @observes("post.polls") _updatePoll() { diff --git a/plugins/poll/assets/javascripts/discourse/templates/poll.hbs b/plugins/poll/assets/javascripts/discourse/templates/components/discourse-poll.hbs similarity index 100% rename from plugins/poll/assets/javascripts/discourse/templates/poll.hbs rename to plugins/poll/assets/javascripts/discourse/templates/components/discourse-poll.hbs diff --git a/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 b/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 index e0d64d3ce74..3141d15397f 100644 --- a/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 +++ b/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 @@ -1,20 +1,10 @@ import { withPluginApi } from 'discourse/lib/plugin-api'; import { observes } from "ember-addons/ember-computed-decorators"; -function createPollView(container, post, poll, vote, publicPoll) { - const controller = container.lookup("controller:poll", { singleton: false }); - const view = container.lookup("view:poll"); - - controller.setProperties({ - model: poll, - vote: vote, - public: publicPoll, - post - }); - - view.set("controller", controller); - - return view; +function createPollComponent(container, post, poll, vote) { + const component = container.lookup("component:discourse-poll"); + component.setProperties({ model: poll, vote, post }); + return component; } let _pollViews; @@ -89,20 +79,18 @@ function initializePolls(api) { const $poll = $(pollElem); const pollName = $poll.data("poll-name"); - const publicPoll = $poll.data("poll-public"); const pollId = `${pollName}-${post.id}`; - const pollView = createPollView( + const pollComponent = createPollComponent( helper.container, post, polls[pollName], - votes[pollName], - publicPoll + votes[pollName] ); $poll.replaceWith($div); - Em.run.schedule('afterRender', () => pollView.renderer.replaceIn(pollView, $div[0])); - postPollViews[pollId] = pollView; + Em.run.schedule('afterRender', () => pollComponent.renderer.replaceIn(pollComponent, $div[0])); + postPollViews[pollId] = pollComponent; }); _pollViews = postPollViews; diff --git a/plugins/poll/assets/javascripts/views/poll.js.es6 b/plugins/poll/assets/javascripts/views/poll.js.es6 deleted file mode 100644 index c9d6e632e34..00000000000 --- a/plugins/poll/assets/javascripts/views/poll.js.es6 +++ /dev/null @@ -1,12 +0,0 @@ -export default Em.View.extend({ - templateName: "poll", - classNames: ["poll"], - attributeBindings: ["data-poll-type", "data-poll-name", "data-poll-status", "data-poll-public"], - - poll: Em.computed.alias("controller.poll"), - - "data-poll-type": Em.computed.alias("poll.type"), - "data-poll-name": Em.computed.alias("poll.name"), - "data-poll-status": Em.computed.alias("poll.status"), - "data-poll-public": Em.computed.alias("poll.public") -}); diff --git a/plugins/poll/test/javascripts/controllers/poll-ui-builder-test.js.es6 b/plugins/poll/test/javascripts/controllers/poll-ui-builder-test.js.es6 index 1e9446d90e5..60c50ca58fa 100644 --- a/plugins/poll/test/javascripts/controllers/poll-ui-builder-test.js.es6 +++ b/plugins/poll/test/javascripts/controllers/poll-ui-builder-test.js.es6 @@ -3,6 +3,9 @@ import { mapRoutes } from 'discourse/mapping-router'; moduleFor("controller:poll-ui-builder", "controller:poll-ui-builder", { setup() { this.registry.register('router:main', mapRoutes()); + this.subject().set('toolbarEvent', { + getText: () => "" + }); }, needs: ['controller:modal'] }); @@ -170,21 +173,13 @@ test("number pollOutput", function() { equal(controller.get("pollOutput"), "[poll type=number min=1 max=20 step=1]\n[/poll]", "it should return the right output"); - controller.set("pollName", 'test'); - - equal(controller.get("pollOutput"), "[poll name=test type=number min=1 max=20 step=1]\n[/poll]", "it should return the right output"); - - controller.set("pollName", ' test poll more '); - - equal(controller.get("pollOutput"), "[poll name=test-poll-more type=number min=1 max=20 step=1]\n[/poll]", "it should return the right output"); - controller.set("pollStep", 2); - equal(controller.get("pollOutput"), "[poll name=test-poll-more type=number min=1 max=20 step=2]\n[/poll]", "it should return the right output"); + equal(controller.get("pollOutput"), "[poll type=number min=1 max=20 step=2]\n[/poll]", "it should return the right output"); controller.set("publicPoll", true); - equal(controller.get("pollOutput"), "[poll name=test-poll-more type=number min=1 max=20 step=2 public=true]\n[/poll]", "it should return the right output"); + equal(controller.get("pollOutput"), "[poll type=number min=1 max=20 step=2 public=true]\n[/poll]", "it should return the right output"); }); test("regular pollOutput", function() { @@ -196,13 +191,9 @@ test("regular pollOutput", function() { equal(controller.get("pollOutput"), "[poll]\n* 1\n* 2\n[/poll]", "it should return the right output"); - controller.set("pollName", "test"); - - equal(controller.get("pollOutput"), "[poll name=test]\n* 1\n* 2\n[/poll]", "it should return the right output"); - controller.set("publicPoll", "true"); - equal(controller.get("pollOutput"), "[poll name=test public=true]\n* 1\n* 2\n[/poll]", "it should return the right output"); + equal(controller.get("pollOutput"), "[poll public=true]\n* 1\n* 2\n[/poll]", "it should return the right output"); }); @@ -220,11 +211,7 @@ test("multiple pollOutput", function() { equal(controller.get("pollOutput"), "[poll type=multiple min=1 max=2]\n* 1\n* 2\n[/poll]", "it should return the right output"); - controller.set("pollName", "test"); - - equal(controller.get("pollOutput"), "[poll name=test type=multiple min=1 max=2]\n* 1\n* 2\n[/poll]", "it should return the right output"); - controller.set("publicPoll", "true"); - equal(controller.get("pollOutput"), "[poll name=test type=multiple min=1 max=2 public=true]\n* 1\n* 2\n[/poll]", "it should return the right output"); + equal(controller.get("pollOutput"), "[poll type=multiple min=1 max=2 public=true]\n* 1\n* 2\n[/poll]", "it should return the right output"); });