diff --git a/plugins/poll/app/models/poll.rb b/plugins/poll/app/models/poll.rb
index 1dd0d0b7181..f71de80cb22 100644
--- a/plugins/poll/app/models/poll.rb
+++ b/plugins/poll/app/models/poll.rb
@@ -32,6 +32,11 @@ class Poll < ActiveRecord::Base
everyone: 1,
}
+ enum chart_type: {
+ bar: 0,
+ pie: 1
+ }
+
validates :min, numericality: { allow_nil: true, only_integer: true, greater_than_or_equal_to: 0 }
validates :max, numericality: { allow_nil: true, only_integer: true, greater_than: 0 }
validates :step, numericality: { allow_nil: true, only_integer: true, greater_than: 0 }
diff --git a/plugins/poll/app/serializers/poll_serializer.rb b/plugins/poll/app/serializers/poll_serializer.rb
index e955be9c40f..3d73264d036 100644
--- a/plugins/poll/app/serializers/poll_serializer.rb
+++ b/plugins/poll/app/serializers/poll_serializer.rb
@@ -12,7 +12,8 @@ class PollSerializer < ApplicationSerializer
:options,
:voters,
:close,
- :preloaded_voters
+ :preloaded_voters,
+ :chart_type
def public
true
diff --git a/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js.es6 b/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js.es6
index 76f06ae027d..0bcf1e2c7d1 100644
--- a/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js.es6
+++ b/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js.es6
@@ -2,9 +2,12 @@ import Controller from "@ember/controller";
import {
default as computed,
observes
-} from "ember-addons/ember-computed-decorators";
+} from "discourse-common/utils/decorators";
import EmberObject from "@ember/object";
+export const BAR_CHART_TYPE = "bar";
+export const PIE_CHART_TYPE = "pie";
+
export default Controller.extend({
regularPollType: "regular",
numberPollType: "number",
@@ -14,6 +17,10 @@ export default Controller.extend({
votePollResult: "on_vote",
closedPollResult: "on_close",
staffPollResult: "staff_only",
+ pollChartTypes: [
+ { name: BAR_CHART_TYPE.capitalize(), value: BAR_CHART_TYPE },
+ { name: PIE_CHART_TYPE.capitalize(), value: PIE_CHART_TYPE }
+ ],
init() {
this._super(...arguments);
@@ -38,6 +45,11 @@ export default Controller.extend({
];
},
+ @computed("chartType", "pollType", "numberPollType")
+ isPie(chartType, pollType, numberPollType) {
+ return pollType !== numberPollType && chartType === PIE_CHART_TYPE;
+ },
+
@computed(
"alwaysPollResult",
"votePollResult",
@@ -173,6 +185,7 @@ export default Controller.extend({
"pollMax",
"pollStep",
"autoClose",
+ "chartType",
"date",
"time"
)
@@ -187,6 +200,7 @@ export default Controller.extend({
pollMax,
pollStep,
autoClose,
+ chartType,
date,
time
) {
@@ -212,6 +226,8 @@ export default Controller.extend({
if (pollMax) pollHeader += ` max=${pollMax}`;
if (isNumber) pollHeader += ` step=${step}`;
if (publicPoll) pollHeader += ` public=true`;
+ if (chartType && pollType !== "number")
+ pollHeader += ` chartType=${chartType}`;
if (autoClose) {
let closeDate = moment(
date + " " + time,
@@ -306,6 +322,7 @@ export default Controller.extend({
pollMax: null,
pollStep: 1,
autoClose: false,
+ chartType: BAR_CHART_TYPE,
date: moment()
.add(1, "day")
.format("YYYY-MM-DD"),
diff --git a/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs b/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs
index a23eb84e32f..739e0a40dcd 100644
--- a/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs
+++ b/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs
@@ -17,6 +17,15 @@
valueAttribute="value"}}
+ {{#unless isNumber}}
+
@@ -56,12 +65,14 @@
{{input-tip validation=minNumOfOptionsValidation}}
{{/unless}}
-
-
-
+ {{#unless isPie}}
+
+
+
+ {{/unless}}