diff --git a/src/components/poll.ts b/src/components/poll.ts
index 0b83ed65..f69923d9 100644
--- a/src/components/poll.ts
+++ b/src/components/poll.ts
@@ -1,5 +1,6 @@
-import appPollsManager, { PollResults } from "../lib/appManagers/appPollsManager";
+import appPollsManager, { PollResults, Poll } from "../lib/appManagers/appPollsManager";
import { RichTextProcessor } from "../lib/richtextprocessor";
+import { findUpClassName, $rootScope } from "../lib/utils";
let lineTotalLength = 0;
const tailLength = 9;
@@ -7,13 +8,81 @@ const times = 10;
const fullTime = 340;
const oneTime = fullTime / times;
+let roundPercents = (percents: number[]) => {
+ //console.log('roundPercents before percents:', percents);
+
+ let sum = percents.reduce((acc, p) => acc + Math.round(p), 0);
+ if(sum > 100) {
+ let diff = sum - 100;
+ let length = percents.length;
+ for(let i = 0; i < diff; ++i) {
+ let minIndex = -1, minRemainder = 1;
+ for(let k = 0; k < length; ++k) {
+ let remainder = percents[k] % 1;
+ if(remainder >= 0.5 && remainder < minRemainder) {
+ minRemainder = remainder;
+ minIndex = k;
+ }
+ }
+
+ if(minIndex == -1) {
+ throw new Error('lol chto');
+ }
+
+ percents[minIndex] -= minRemainder;
+ }
+ } else if(sum < 100) {
+ let diff = 100 - sum;
+ let length = percents.length;
+ for(let i = 0; i < diff; ++i) {
+ let minIndex = -1, maxRemainder = 0;
+ for(let k = 0; k < length; ++k) {
+ let remainder = percents[k] % 1;
+ if(remainder < 0.5 && remainder > maxRemainder) {
+ maxRemainder = remainder;
+ minIndex = k;
+ }
+ }
+
+ if(minIndex == -1) {
+ throw new Error('lol chto');
+ }
+
+ percents[minIndex] += 1 - maxRemainder;
+ }
+ }
+
+ //console.log('roundPercents after percents:', percents);
+};
+
+const connectedPolls: {id: string, element: PollElement}[] = [];
+$rootScope.$on('poll_update', (e: CustomEvent) => {
+ let {poll, results} = e.detail as {poll: Poll, results: PollResults};
+
+ for(let connected of connectedPolls) {
+ if(connected.id == poll.id) {
+ let pollElement = connected.element;
+ pollElement.performResults(results, poll.chosenIndex);
+ }
+ }
+});
+
export default class PollElement extends HTMLElement {
private svgLines: SVGSVGElement[];
private numberDivs: HTMLDivElement[];
- private maxOffset = -44.8;
+ private selectedSpan: HTMLSpanElement;
+ private answerDivs: HTMLDivElement[];
+ private votersCountDiv: HTMLDivElement;
+
+ private maxOffset = -46.5;
private maxLength: number;
private maxLengths: number[];
+ private isQuiz = false;
+ private isRetracted = false;
+ private chosenIndex = -1;
+ private percents: number[];
+
constructor() {
super();
// элемент создан
@@ -31,6 +100,8 @@ export default class PollElement extends HTMLElement {
let pollID = this.getAttribute('poll-id');
let {poll, results} = appPollsManager.getPoll(pollID);
+ connectedPolls.push({id: pollID, element: this});
+
console.log('pollElement poll:', poll, results);
let desc = '';
@@ -38,13 +109,18 @@ export default class PollElement extends HTMLElement {
if(poll.pFlags.closed) {
desc = 'Final results';
} else {
- desc = poll.pFlags.public_voters ? 'Public Poll' : 'Anonymous Poll';
+ if(poll.pFlags.quiz) {
+ this.isQuiz = true;
+ }
+
+ let type = this.isQuiz ? 'Quiz' : 'Poll';
+ desc = (poll.pFlags.public_voters ? 'Public' : 'Anonymous') + ' ' + type;
}
}
- let votes = poll.answers.map(answer => {
+ let votes = poll.answers.map((answer, idx) => {
return `
-
+
-