diff --git a/plugins/poll/assets/javascripts/discourse/components/modal/poll-breakdown.hbs b/plugins/poll/assets/javascripts/discourse/components/modal/poll-breakdown.hbs new file mode 100644 index 00000000000..218405dd995 --- /dev/null +++ b/plugins/poll/assets/javascripts/discourse/components/modal/poll-breakdown.hbs @@ -0,0 +1,76 @@ +{{! template-lint-disable no-invalid-interactive }} + + <:headerBelowTitle> + + + <:body> +
+

+ {{this.title}} +

+ +
{{i18n + "poll.breakdown.votes" + count=this.model.poll.voters + }}
+ + +
+ +
+
+ + + +
+ +
+ {{#each this.charts as |chart|}} + + {{/each}} +
+
+ +
\ No newline at end of file diff --git a/plugins/poll/assets/javascripts/discourse/controllers/poll-breakdown.js b/plugins/poll/assets/javascripts/discourse/components/modal/poll-breakdown.js similarity index 88% rename from plugins/poll/assets/javascripts/discourse/controllers/poll-breakdown.js rename to plugins/poll/assets/javascripts/discourse/components/modal/poll-breakdown.js index ba2e2514e8c..0cd13fa67fa 100644 --- a/plugins/poll/assets/javascripts/discourse/controllers/poll-breakdown.js +++ b/plugins/poll/assets/javascripts/discourse/components/modal/poll-breakdown.js @@ -1,7 +1,6 @@ import { inject as service } from "@ember/service"; -import Controller from "@ember/controller"; +import Component from "@ember/component"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; import { action } from "@ember/object"; import { ajax } from "discourse/lib/ajax"; import { classify } from "@ember/string"; @@ -10,9 +9,7 @@ import { htmlSafe } from "@ember/template"; import loadScript from "discourse/lib/load-script"; import { popupAjaxError } from "discourse/lib/ajax-error"; -export default class PollBreakdownController extends Controller.extend( - ModalFunctionality -) { +export default class PollBreakdownModal extends Component { @service dialog; model = null; @@ -21,6 +18,16 @@ export default class PollBreakdownController extends Controller.extend( highlightedOption = null; displayMode = "percentage"; + init() { + this.set("groupedBy", this.model.groupableUserFields[0]); + loadScript("/javascripts/Chart.min.js") + .then(() => loadScript("/javascripts/chartjs-plugin-datalabels.min.js")) + .then(() => { + this.fetchGroupedPollData(); + }); + super.init(...arguments); + } + @discourseComputed("model.poll.title", "model.post.topic.title") title(pollTitle, topicTitle) { return pollTitle ? htmlSafe(pollTitle) : topicTitle; @@ -44,18 +51,6 @@ export default class PollBreakdownController extends Controller.extend( return options.reduce((sum, option) => sum + option.votes, 0); } - onShow() { - this.set("charts", null); - this.set("displayMode", "percentage"); - this.set("groupedBy", this.model.groupableUserFields[0]); - - loadScript("/javascripts/Chart.min.js") - .then(() => loadScript("/javascripts/chartjs-plugin-datalabels.min.js")) - .then(() => { - this.fetchGroupedPollData(); - }); - } - fetchGroupedPollData() { return ajax("/polls/grouped_poll_results.json", { data: { diff --git a/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs b/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs new file mode 100644 index 00000000000..0955f70b3ff --- /dev/null +++ b/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.hbs @@ -0,0 +1,251 @@ + + <:body> +
+ + {{i18n "poll.ui_builder.poll_type.regular"}} + + + + {{i18n "poll.ui_builder.poll_type.multiple"}} + + + {{#if this.showNumber}} + + {{i18n "poll.ui_builder.poll_type.number"}} + + {{/if}} +
+ + {{#if this.showAdvanced}} +
+ + +
+ {{/if}} + + {{#unless this.isNumber}} +
+ {{#if this.showAdvanced}} + +