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}} +
+ + {{combo-box content=pollChartTypes + value=chartType + valueAttribute="value"}} +
+ {{/unless}} + {{#if showMinMax}}
@@ -56,12 +65,14 @@ {{input-tip validation=minNumOfOptionsValidation}} {{/unless}} -
- -
+ {{#unless isPie}} +
+ +
+ {{/unless}}