Migrate poll plugin to use components
This commit is contained in:
+14
-5
@@ -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() {
|
||||
@@ -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;
|
||||
|
||||
@@ -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")
|
||||
});
|
||||
Reference in New Issue
Block a user