diff --git a/bigbluebutton-html5/imports/ui/components/polling/component.jsx b/bigbluebutton-html5/imports/ui/components/polling/component.jsx
index d2324e9f54..9bbca9e5c6 100644
--- a/bigbluebutton-html5/imports/ui/components/polling/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/polling/component.jsx
@@ -1,13 +1,10 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import Button from '/imports/ui/components/button/component';
import injectWbResizeEvent from '/imports/ui/components/presentation/resize-wrapper/component';
import { defineMessages, injectIntl } from 'react-intl';
-import cx from 'classnames';
import { Meteor } from 'meteor/meteor';
-import { styles } from './styles.scss';
+import Styled from './styles';
import AudioService from '/imports/ui/components/audio/service';
-import Checkbox from '/imports/ui/components/checkbox/component';
const MAX_INPUT_CHARS = Meteor.settings.public.poll.maxTypedAnswerLength;
@@ -113,7 +110,7 @@ class Polling extends Component {
}
}
- renderButtonAnswers(pollAnswerStyles) {
+ renderButtonAnswers() {
const {
isMeteorConnected,
intl,
@@ -131,7 +128,7 @@ class Polling extends Component {
if (!poll) return null;
- const { answers, question, pollType } = poll;
+ const { stackOptions, answers, question, pollType } = poll;
const defaultPoll = isDefaultPoll(pollType);
return (
@@ -141,12 +138,12 @@ class Polling extends Component {
{
question.length === 0 && (
-
+
{intl.formatMessage(intlMessages.pollingTitleLabel)}
-
+
)
}
-
+
{answers.map((pollAnswer) => {
const formattedMessageIndex = pollAnswer.key.toLowerCase();
let label = pollAnswer.key;
@@ -155,13 +152,9 @@ class Polling extends Component {
}
return (
-
-
- );
- })}
-
+
+
+ );
+ })}
+
)
}
{
poll.pollType === pollTypes.Response
&& (
-
{question.length === 0
&& (
-
+
{intl.formatMessage(intlMessages.pollingTitleLabel)}
-
+
)}
-
+
{poll.answers.map((pollAnswer) => {
const formattedMessageIndex = pollAnswer.key.toLowerCase();
let label = pollAnswer.key;
@@ -256,39 +241,33 @@ class Polling extends Component {
}
return (
-
- this.handleCheckboxChange(poll.pollId, pollAnswer.id)}
checked={checkedAnswers.includes(pollAnswer.id)}
- className={styles.checkbox}
ariaLabelledBy={`pollAnswerLabel${pollAnswer.key}`}
ariaDescribedBy={`pollAnswerDesc${pollAnswer.key}`}
/>
|
-
+
-
+
{intl.formatMessage(intlMessages.pollAnswerDesc, { 0: label })}
-
- |
-
+
+
+
);
})}
-
+
-
+ {poll.isMultipleResponse ? this.renderCheckboxAnswers() : this.renderButtonAnswers()}
+
+
);
}
}
diff --git a/bigbluebutton-html5/imports/ui/components/polling/styles.js b/bigbluebutton-html5/imports/ui/components/polling/styles.js
new file mode 100644
index 0000000000..3146f7c6db
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/polling/styles.js
@@ -0,0 +1,236 @@
+import styled from 'styled-components';
+import Checkbox from '/imports/ui/components/checkbox/component';
+import {
+ mdPaddingY,
+ smPaddingY,
+ jumboPaddingY,
+ smPaddingX,
+ borderRadius,
+ pollWidth,
+ pollSmMargin,
+ overlayIndex,
+ overlayOpacity,
+ pollIndex,
+ lgPaddingY,
+ pollBottomOffset,
+ jumboPaddingX,
+ pollColAmount,
+ borderSize,
+} from '/imports/ui/stylesheets/styled-components/general';
+import {
+ fontSizeSmall,
+ fontSizeBase,
+ fontSizeLarge,
+} from '/imports/ui/stylesheets/styled-components/typography';
+import {
+ colorText,
+ colorBlueLight,
+ colorGrayLighter,
+ colorOffWhite,
+ colorGrayDark,
+ colorWhite,
+ colorPrimary,
+} from '/imports/ui/stylesheets/styled-components/palette';
+import { hasPhoneDimentions } from '/imports/ui/stylesheets/styled-components/breakpoints';
+import Button from '/imports/ui/components/button/component';
+
+const PollingTitle = styled.div`
+ white-space: nowrap;
+ padding-bottom: ${mdPaddingY};
+ padding-top: ${mdPaddingY};
+ font-size: ${fontSizeSmall};
+`;
+
+const PollButtonWrapper = styled.div`
+ text-align: center;
+ padding: ${smPaddingY};
+ width: 100%;
+`;
+
+const PollingButton = styled(Button)`
+ width: 100%;
+ max-width: 9em;
+
+ @media ${hasPhoneDimentions} {
+ max-width: none;
+ }
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+`;
+
+const Hidden = styled.div`
+ display: none;
+`;
+
+const TypedResponseWrapper = styled.div`
+ margin: ${jumboPaddingY} .5rem .5rem .5rem;
+ display: flex;
+ flex-flow: column;
+`;
+
+const TypedResponseInput = styled.input`
+ &:focus {
+ outline: none;
+ border-radius: ${borderSize};
+ box-shadow: 0 0 0 ${borderSize} ${colorBlueLight}, inset 0 0 0 1px ${colorPrimary};
+ }
+
+ color: ${colorText};
+ -webkit-appearance: none;
+ padding: calc(${smPaddingY} * 2.5) calc(${smPaddingX} * 1.25);
+ border-radius: ${borderRadius};
+ font-size: ${fontSizeBase};
+ border: 1px solid ${colorGrayLighter};
+ box-shadow: 0 0 0 1px ${colorGrayLighter};
+ margin-bottom: 1rem;
+`;
+
+const SubmitVoteButton = styled(Button)`
+ font-size: ${fontSizeBase};
+`;
+
+const PollingSecret = styled.div`
+ font-size: ${fontSizeSmall};
+ max-width: ${pollWidth};
+`;
+
+const MultipleResponseAnswersTable = styled.table`
+ margin-left: auto;
+ margin-right: auto;
+`;
+
+const PollingCheckbox = styled(Checkbox)`
+ display: inline-block;
+ margin-right: ${pollSmMargin};
+`;
+
+const CheckboxContainer = styled.tr`
+ margin-bottom: ${pollSmMargin};
+`;
+
+const MultipleResponseAnswersTableAnswerText = styled.td`
+ text-align: left;
+`;
+
+const Overlay = styled.div`
+ position: absolute;
+ height: 100vh;
+ width: 100vw;
+ z-index: ${overlayIndex};
+ pointer-events: none;
+
+ @media ${hasPhoneDimentions} {
+ pointer-events: auto;
+ background-color: rgba(0, 0, 0, ${overlayOpacity});
+ }
+`;
+
+const QHeader = styled.span`
+ text-align: left;
+ position: relative;
+ left: ${smPaddingY};
+`;
+
+const QTitle = styled.div`
+ font-size: ${fontSizeSmall};
+`;
+
+const QText = styled.div`
+ color: ${colorText};
+ word-break: break-word;
+ white-space: pre-wrap;
+ font-size: ${fontSizeLarge};
+ max-width: ${pollWidth};
+ padding-right: ${smPaddingX};
+`;
+
+const PollingContainer = styled.div`
+ pointer-events:auto;
+ min-width: ${pollWidth};
+ position: absolute;
+
+ z-index: ${pollIndex};
+ border: 1px solid ${colorOffWhite};
+ border-radius: ${borderRadius};
+ box-shadow: ${colorGrayDark} 0px 0px ${lgPaddingY};
+ align-items: center;
+ text-align: center;
+ font-weight: 600;
+ padding: ${mdPaddingY};
+ background-color: ${colorWhite};
+ bottom: ${pollBottomOffset};
+ right: ${jumboPaddingX};
+
+ [dir="rtl"] & {
+ left: ${jumboPaddingX};
+ right: auto;
+ }
+
+ @media ${hasPhoneDimentions} {
+ bottom: auto;
+ right: auto;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ max-height: 95%;
+ overflow-y: auto;
+
+ [dir="rtl"] & {
+ left: 50%;
+ }
+ }
+
+ ${({ autoWidth }) => autoWidth && `
+ width: auto;
+ `}
+`;
+
+const PollingAnswers = styled.div`
+ display: grid;
+ grid-template-columns: repeat(${pollColAmount}, 1fr);
+
+ @media ${hasPhoneDimentions} {
+ grid-template-columns: repeat(1, 1fr);
+
+ & div button {
+ grid-column: 1;
+ }
+ }
+
+ z-index: 1;
+
+ ${({ removeColumns }) => removeColumns && `
+ grid-template-columns: auto;
+ `}
+
+ ${({ stacked }) => stacked && `
+ grid-template-columns: repeat(1, 1fr);
+
+ & div button {
+ max-width: none !important;
+ }
+ `}
+
+`;
+
+export default {
+ PollingTitle,
+ PollButtonWrapper,
+ PollingButton,
+ Hidden,
+ TypedResponseWrapper,
+ TypedResponseInput,
+ SubmitVoteButton,
+ PollingSecret,
+ MultipleResponseAnswersTable,
+ PollingCheckbox,
+ CheckboxContainer,
+ MultipleResponseAnswersTableAnswerText,
+ Overlay,
+ QHeader,
+ QTitle,
+ QText,
+ PollingContainer,
+ PollingAnswers,
+};
diff --git a/bigbluebutton-html5/imports/ui/components/polling/styles.scss b/bigbluebutton-html5/imports/ui/components/polling/styles.scss
deleted file mode 100644
index b79791e6bb..0000000000
--- a/bigbluebutton-html5/imports/ui/components/polling/styles.scss
+++ /dev/null
@@ -1,185 +0,0 @@
-@import "/imports/ui/stylesheets/mixins/focus";
-@import "../../stylesheets/variables/breakpoints";
-
-:root {
- --col-amount: 2;
- --max-btn-width: 9em;
- --overlayIndex: 9999;
- --overlayOpacity: 0.349;
- --poll-index: 1016;
- --poll-width: 18rem;
- --poll-bottom-offset: 4.5rem;
-}
-
-.overlay {
- position: absolute;
- height: 100vh;
- width: 100vw;
- z-index: var(--overlayIndex);
- pointer-events: none;
-
- @include mq($hasPhoneDimentions) {
- pointer-events: auto;
- background-color: rgba(0, 0, 0, var(--overlayOpacity));
- }
-}
-
-.pollingContainer {
- pointer-events:auto;
- min-width: var(--poll-width);
- position: absolute;
-
- z-index: var(--poll-index);
- border: 1px solid var(--color-off-white);
- border-radius: var(--border-radius);
- box-shadow: var(--color-gray-dark) 0px 0px var(--lg-padding-y);
- align-items: center;
- text-align: center;
- font-weight: 600;
- padding: var(--md-padding-y);
- background-color: var(--color-white);
- bottom: var(--poll-bottom-offset);
- right: var(--jumbo-padding-x);
-
- [dir="rtl"] & {
- left: var(--jumbo-padding-x);
- right: auto;
- }
-
- @include mq($hasPhoneDimentions) {
- bottom: auto;
- right: auto;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- max-height: 95%;
- overflow-y: auto;
-
- [dir="rtl"] & {
- left: 50%;
- }
- }
-}
-
-.pollingTitle {
- white-space: nowrap;
- padding-bottom: var(--md-padding-y);
- padding-top: var(--md-padding-y);
- font-size: var(--font-size-small);
-}
-
-.pollButtonWrapper {
- text-align: center;
- padding: var(--sm-padding-y);
- width: 100%;
-}
-
-.pollingButton {
- width: 100%;
- max-width: var(--max-btn-width);
-
- @include mq($hasPhoneDimentions) {
- max-width: none;
- }
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.pollingAnswers {
- display: grid;
- grid-template-columns: repeat(var(--col-amount), 1fr);
-
- @include mq($hasPhoneDimentions) {
- grid-template-columns: repeat(1, 1fr);
-
- .pollButtonWrapper button {
- grid-column: 1;
- }
- }
-
- z-index: 1;
-}
-
-.stacked {
- grid-template-columns: repeat(1, 1fr);
-
- .pollButtonWrapper button {
- max-width: none !important;
- }
-}
-
-.removeColumns {
- grid-template-columns: auto;
-}
-
-.autoWidth {
- width: auto;
-}
-
-.hidden {
- display: none;
-}
-
-.checkbox {
- display: inline-block;
- margin-right: var(--poll-sm-margin);
-}
-
-.checkboxContainer {
- margin-bottom: var(--poll-sm-margin);
-}
-
-.qHeader {
- text-align: left;
- position: relative;
- left: var(--sm-padding-y);
-}
-
-.qTitle {
- font-size: var(--font-size-small);
-}
-
-.qText {
- color: var(--color-text);
- word-break: break-word;
- white-space: pre-wrap;
- font-size: var(--font-size-large);
- max-width: var(--poll-width);
- padding-right: var(--sm-padding-x);
-}
-
-.typedResponseWrapper {
- margin: var(--jumbo-padding-y) .5rem .5rem .5rem;
- display: flex;
- flex-flow: column;
-}
-
-.submitVoteBtn {
- font-size: var(--font-size-base);
-}
-
-.typedResponseInput {
- @include inputFocus(var(--color-blue-light));
- color: var(--color-text);
- -webkit-appearance: none;
- padding: calc(var(--sm-padding-y) * 2.5) calc(var(--sm-padding-x) * 1.25);
- border-radius: var(--border-radius);
- font-size: var(--font-size-base);
- border: 1px solid var(--color-gray-lighter);
- box-shadow: 0 0 0 1px var(--color-gray-lighter);
- margin-bottom: 1rem;
-}
-
-.multipleResponseAnswersTable {
- margin-left: auto;
- margin-right: auto;
-}
-
-.multipleResponseAnswersTableAnswerText {
- text-align: left;
-}
-.pollingSecret {
- font-size: var(--font-size-small);
- max-width: var(--poll-width);
-}
diff --git a/bigbluebutton-html5/imports/ui/stylesheets/styled-components/breakpoints.js b/bigbluebutton-html5/imports/ui/stylesheets/styled-components/breakpoints.js
index 4a7a1663bb..b9aea5153a 100644
--- a/bigbluebutton-html5/imports/ui/stylesheets/styled-components/breakpoints.js
+++ b/bigbluebutton-html5/imports/ui/stylesheets/styled-components/breakpoints.js
@@ -3,6 +3,7 @@ const mediumOnly = 'only screen and (min-width: 40.063em) and (max-width: 64em)'
const mediumUp = 'only screen and (min-width: 40.063em)';
const landscape = "only screen and (orientation: landscape)";
const phoneLandscape = 'only screen and (max-width: 480px) and (orientation: landscape)';
+const hasPhoneDimentions = 'only screen and (max-height: 479px), only screen and (max-width: 479px)';
export {
smallOnly,
@@ -10,4 +11,5 @@ export {
mediumUp,
landscape,
phoneLandscape,
+ hasPhoneDimentions,
};
diff --git a/bigbluebutton-html5/imports/ui/stylesheets/styled-components/general.js b/bigbluebutton-html5/imports/ui/stylesheets/styled-components/general.js
index 9fce0ecfbf..d812d4930b 100644
--- a/bigbluebutton-html5/imports/ui/stylesheets/styled-components/general.js
+++ b/bigbluebutton-html5/imports/ui/stylesheets/styled-components/general.js
@@ -9,6 +9,7 @@ const mdPaddingX = '1rem';
const lgPaddingX = '1.25rem';
const lgPaddingY = '0.6rem';
const jumboPaddingY = '1.5rem';
+const jumboPaddingX = '3.025rem';
const whiteboardToolbarPadding = '.5rem';
const minModalHeight = '20rem';
@@ -47,6 +48,12 @@ const pollSmMargin = '0.3125rem';
const pollMdMargin = '0.7rem';
const pollResultWidth = '15rem';
const pollInputHeight = '2.5rem';
+const pollWidth = '18rem';
+const overlayIndex = '9999';
+const overlayOpacity = '0.349';
+const pollIndex = '1016';
+const pollBottomOffset = '4.5rem';
+const pollColAmount = '2';
export {
borderSizeSmall,
@@ -60,6 +67,7 @@ export {
lgPaddingX,
lgPaddingY,
jumboPaddingY,
+ jumboPaddingX,
whiteboardToolbarPadding,
minModalHeight,
descriptionMargin,
@@ -94,4 +102,10 @@ export {
pollMdMargin,
pollResultWidth,
pollInputHeight,
+ pollWidth,
+ overlayIndex,
+ overlayOpacity,
+ pollIndex,
+ pollBottomOffset,
+ pollColAmount,
};