From 98355a1eea0926d221ffe8dde088ca125f92cf13 Mon Sep 17 00:00:00 2001 From: Luis Felipe Risch <lfr20@inf.ufpr.br> Date: Tue, 29 Jun 2021 10:34:32 -0300 Subject: [PATCH] implementing accessibility --- src/App.css | 7 + src/App.js | 281 ++++++++++--------- src/Components/Acessibility/ContrastBar.css | 79 ++++++ src/Components/Acessibility/ContrastBar.js | 109 +++++++ src/Components/ActivityListItem.js | 11 +- src/Components/Dropdown.js | 7 +- src/Components/MenuBar.js | 18 +- src/Components/Notifications.js | 13 +- src/Store.js | 296 ++++++++++---------- src/env.js | 2 +- src/img/OffContrastIcon.png | Bin 0 -> 17242 bytes src/img/OnContrastIcon.png | Bin 0 -> 17257 bytes 12 files changed, 520 insertions(+), 303 deletions(-) create mode 100644 src/Components/Acessibility/ContrastBar.css create mode 100644 src/Components/Acessibility/ContrastBar.js create mode 100644 src/img/OffContrastIcon.png create mode 100644 src/img/OnContrastIcon.png diff --git a/src/App.css b/src/App.css index c8cb4a80..8f1f8e1d 100644 --- a/src/App.css +++ b/src/App.css @@ -16,3 +16,10 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ +.ContrastBackColor { + background-color: black !important; +} + +.ContrastTextColor { + color: yellow !important; +} diff --git a/src/App.js b/src/App.js index b5a80b2f..479005ee 100644 --- a/src/App.js +++ b/src/App.js @@ -53,6 +53,7 @@ import FormationMaterialPage from "./Pages/FormationMaterialPage.js"; import FormationMaterialIframe from "./Pages/FormationMaterialIframe.js"; import MaterialPage from "./Pages/MaterialPage"; import PageNotFound from "./Pages/PageNotFound.js"; +import ContrastBar from './Components/Acessibility/ContrastBar'; import NoteVariables from "./Admin/Pages/Pages/SubPages/NoteVariables"; import Institution from "./Admin/Pages/Pages/SubPages/Institutions"; @@ -94,6 +95,7 @@ import CreateRole from "./Admin/Components/Components/Inputs/CreateRole"; import BlockedUser from "./Admin/Pages/Pages/SubPages/BlockedUsers"; import AppBarAdmin from './Admin/Components/Components/AppBar' import createBrowserHistory from 'history/createBrowserHistory' +import './App.css'; export default function App() { // eslint-disable-next-line @@ -155,20 +157,20 @@ export default function App() { const AdminTemplate = (props) => { if (CheckUserPermission()) return ( - <div style={{ backgroundColor: " #D3D3D3" }}> - <AppBarAdmin /> - <div style={{ padding: "2em" }}> - {props.inner} - </div> + <div style={{ backgroundColor: " #D3D3D3" }}> + <AppBarAdmin /> + <div style={{ padding: "2em" }}> + {props.inner} </div> - ) + </div> + ) else return ( <div style={{ backgroundColor: " #D3D3D3" }}> - <div style={{ padding: "2em" }}> - <Unauthorized /> - </div> + <div style={{ padding: "2em" }}> + <Unauthorized /> </div> + </div> ) } @@ -176,6 +178,7 @@ export default function App() { // add piwik later // history={piwik.connectToHistory(customHistory)} <BrowserRouter> + <ContrastBar /> <Header /> <div style={{ @@ -224,234 +227,234 @@ export default function App() { <Route path="/topico" component={FormationMaterialPage} /> <Route path="/iframe-colecao" component={FormationMaterialIframe} /> <Route path="/material-formacao" component={MaterialPage} /> - - <Route - path="/admin/home" - exact={true} + + <Route + path="/admin/home" + exact={true} render={() => { - return <AdminTemplate inner={<Inframe/>}/> - }} + return <AdminTemplate inner={<Inframe />} /> + }} /> - <Route - path="/admin/institutions" + <Route + path="/admin/institutions" render={() => { - return <AdminTemplate inner={<Institution />}/> - }} + return <AdminTemplate inner={<Institution />} /> + }} /> - <Route - path="/admin/institution" + <Route + path="/admin/institution" render={() => { - return <AdminTemplate inner={<InstitutionCard />}/> - }} + return <AdminTemplate inner={<InstitutionCard />} /> + }} /> <Route path="/admin/institutionEdit" render={() => { - return <AdminTemplate inner={<InstitutionsInput />}/> + return <AdminTemplate inner={<InstitutionsInput />} /> }} /> <Route path="/admin/InstitutionCreate" render={() => { - return <AdminTemplate inner={<CreateInstitution />}/> + return <AdminTemplate inner={<CreateInstitution />} /> }} /> - <Route - path="/admin/noteVars" + <Route + path="/admin/noteVars" render={() => { - return <AdminTemplate inner={<NoteVariables />}/> - }} + return <AdminTemplate inner={<NoteVariables />} /> + }} /> - <Route - path="/admin/noteVar" + <Route + path="/admin/noteVar" render={() => { - return <AdminTemplate inner={<NoteVarCard />}/> - }} + return <AdminTemplate inner={<NoteVarCard />} /> + }} /> - <Route - path="/admin/noteVarEdit" + <Route + path="/admin/noteVarEdit" render={() => { - return <AdminTemplate inner={<NoteVarInputs />}/> - }} + return <AdminTemplate inner={<NoteVarInputs />} /> + }} /> - <Route - path="/admin/languages" + <Route + path="/admin/languages" render={() => { - return <AdminTemplate inner={<Languages />}/> - }} + return <AdminTemplate inner={<Languages />} /> + }} /> - <Route - path="/admin/languageEdit" + <Route + path="/admin/languageEdit" render={() => { - return <AdminTemplate inner={<EditLanguage />}/> - }} + return <AdminTemplate inner={<EditLanguage />} /> + }} /> - <Route - path="/admin/languageCreate" + <Route + path="/admin/languageCreate" render={() => { - return <AdminTemplate inner={<CreateLanguage />}/> - }} + return <AdminTemplate inner={<CreateLanguage />} /> + }} /> <Route path="/admin/CommunityQuestions" render={() => { - return <AdminTemplate inner={<CommunityQuestions />}/> + return <AdminTemplate inner={<CommunityQuestions />} /> }} /> <Route path="/admin/CommunityQuestion" render={() => { - return <AdminTemplate inner={<CommunityCard />}/> + return <AdminTemplate inner={<CommunityCard />} /> }} /> - <Route - path="/admin/Collections" + <Route + path="/admin/Collections" render={() => { - return <AdminTemplate inner={<Collections />}/> - }} + return <AdminTemplate inner={<Collections />} /> + }} /> - <Route - path="/admin/Collection" + <Route + path="/admin/Collection" render={() => { - return <AdminTemplate inner={<CollectionCard />}/> - }} + return <AdminTemplate inner={<CollectionCard />} /> + }} /> <Route path="/admin/EditCollection" render={() => { - return <AdminTemplate inner={<EditCollection />}/> + return <AdminTemplate inner={<EditCollection />} /> }} /> - <Route - path="/admin/Ratings" + <Route + path="/admin/Ratings" render={() => { - return <AdminTemplate inner={<Ratings />}/> - }} + return <AdminTemplate inner={<Ratings />} /> + }} /> - <Route - path="/admin/Rating" + <Route + path="/admin/Rating" render={() => { - return <AdminTemplate inner={<RatingCard />}/> - }} + return <AdminTemplate inner={<RatingCard />} /> + }} /> - <Route - path="/admin/EditRating" + <Route + path="/admin/EditRating" render={() => { - return <AdminTemplate inner={<EditRating />}/> - }} + return <AdminTemplate inner={<EditRating />} /> + }} /> - <Route - path="/admin/CreateRating" + <Route + path="/admin/CreateRating" render={() => { - return <AdminTemplate inner={<CreateRating />}/> - }} + return <AdminTemplate inner={<CreateRating />} /> + }} /> - <Route - path="/admin/Questions" + <Route + path="/admin/Questions" render={() => { - return <AdminTemplate inner={<Questions />}/> - }} + return <AdminTemplate inner={<Questions />} /> + }} /> - <Route - path="/admin/CreateQuestion" + <Route + path="/admin/CreateQuestion" render={() => { - return <AdminTemplate inner={<CreateQuestions />}/> - }} + return <AdminTemplate inner={<CreateQuestions />} /> + }} /> - <Route - path="/admin/activities" + <Route + path="/admin/activities" render={() => { - return <AdminTemplate inner={<Activity />}/> - }} + return <AdminTemplate inner={<Activity />} /> + }} /> - <Route - path="/admin/activity" + <Route + path="/admin/activity" render={() => { - return <AdminTemplate inner={<ActivityCard />}/> - }} + return <AdminTemplate inner={<ActivityCard />} /> + }} /> <Route path="/admin/learningObjects" render={() => { - return <AdminTemplate inner={<EducationalObject />}/> - }} + return <AdminTemplate inner={<EducationalObject />} /> + }} /> <Route path="/admin/learningObject" render={() => { - return <AdminTemplate inner={<EducationalObjectCard />}/> - }} + return <AdminTemplate inner={<EducationalObjectCard />} /> + }} /> <Route path="/admin/learningObjectEdit" render={() => { - return <AdminTemplate inner={<EducationalObjectEdit />}/> - }} + return <AdminTemplate inner={<EducationalObjectEdit />} /> + }} /> - <Route - path="/admin/complaints" + <Route + path="/admin/complaints" render={() => { - return <AdminTemplate inner={<Complaints />}/> - }} + return <AdminTemplate inner={<Complaints />} /> + }} /> - <Route - path="/admin/complaint" + <Route + path="/admin/complaint" render={() => { - return <AdminTemplate inner={<ComplaintCard />}/> - }} + return <AdminTemplate inner={<ComplaintCard />} /> + }} /> <Route path="/admin/users/teacher_requests" render={() => { - return <AdminTemplate inner={<AproveTeacher />}/> + return <AdminTemplate inner={<AproveTeacher />} /> }} /> - <Route - path="/admin/usersList" + <Route + path="/admin/usersList" render={() => { - return <AdminTemplate inner={<UserList />}/> - }} + return <AdminTemplate inner={<UserList />} /> + }} /> - <Route - path="/admin/user" + <Route + path="/admin/user" render={() => { - return <AdminTemplate inner={<UserCard />}/> - }} + return <AdminTemplate inner={<UserCard />} /> + }} /> - <Route - path="/admin/EditUser" + <Route + path="/admin/EditUser" render={() => { - return <AdminTemplate inner={<EditUser />}/> - }} + return <AdminTemplate inner={<EditUser />} /> + }} /> - <Route - path="/admin/permissions" + <Route + path="/admin/permissions" render={() => { - return <AdminTemplate inner={<UserPermissions />}/> - }} + return <AdminTemplate inner={<UserPermissions />} /> + }} /> - <Route - path="/admin/EditPermissions" + <Route + path="/admin/EditPermissions" render={() => { - return <AdminTemplate inner={<EditRole />}/> - }} + return <AdminTemplate inner={<EditRole />} /> + }} /> - <Route - path="/admin/CreateRole" + <Route + path="/admin/CreateRole" render={() => { - return <AdminTemplate inner={<CreateRole />}/> - }} + return <AdminTemplate inner={<CreateRole />} /> + }} /> - <Route - path="/admin/BlockedUsers" + <Route + path="/admin/BlockedUsers" render={() => { - return <AdminTemplate inner={<BlockedUser />}/> - }} + return <AdminTemplate inner={<BlockedUser />} /> + }} /> - <Route - path="/admin/sendEmail" + <Route + path="/admin/sendEmail" render={() => { - return <AdminTemplate inner={<SendEmail />}/> - }} + return <AdminTemplate inner={<SendEmail />} /> + }} /> <Route path='*' component={PageNotFound} /> diff --git a/src/Components/Acessibility/ContrastBar.css b/src/Components/Acessibility/ContrastBar.css new file mode 100644 index 00000000..278dbe0d --- /dev/null +++ b/src/Components/Acessibility/ContrastBar.css @@ -0,0 +1,79 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + + +.contrastButton{ + border: none; + padding: 0; + background: none; + background-color: white; +} +.contrastButton:active { + border: none; + padding: 0; + background: none; + background-color: white; +} +.bar{ + background-color: white; + width: 100%; + height: 18px; +} + +.Contrastbar{ + background-color: black; + width: 100%; + height: 18px; + border-bottom: 1px solid white; +} + +.text{ + color: grey; + cursor: pointer; + width: 140px; + font-size: 13px; + padding-left: 10px; + padding-right: 10px; + text-align: center; + vertical-align: middle; + overflow: auto; +} + +.Contrasttext{ + color: yellow; + text-decoration: underline; + cursor: pointer; + width: 140px; + font-size: 13px; + padding-left: 10px; + padding-right: 10px; + text-align: center; + vertical-align: middle; +} + +.textRight { + float:right; + height:100%; + display: flex; + font-size: 13px; +} +.textLeft { + float:left; + height:100%; + font-size: 13px; +} \ No newline at end of file diff --git a/src/Components/Acessibility/ContrastBar.js b/src/Components/Acessibility/ContrastBar.js new file mode 100644 index 00000000..88040c98 --- /dev/null +++ b/src/Components/Acessibility/ContrastBar.js @@ -0,0 +1,109 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + +import React from 'react'; +import './ContrastBar.css'; +import ContrastImageOn from '../../img/OnContrastIcon.png'; +import ContrastImageOff from '../../img/OffContrastIcon.png'; +import { Store } from '../../Store'; + +/** + * Bar allowing for the toggle of the high contrast mode on the page. + */ +function ContrastBar() { + /* eslint-disable */ + + // Hook to set contrast context + const { state, dispatch } = React.useContext(Store); + + + const setContrastAction = (newContrast) => { + console.log(newContrast) + return dispatch({ + type: 'SET_CONTRAST', + payload: newContrast + }) + } + + const setFontSizeAction = (newFontSize) => { + return dispatch({ + type: 'SET_FONT_SIZE', + payload: newFontSize + }) + } + + React.useEffect(() => { }, [state]); + + const toggleContrast = () => { + var status = (state.contrast === '' ? 'Contrast' : '') + setContrastAction(status) + } + const incrementFontSize = () => { + document.getElementsByTagName("body")[0].style.fontSize = (parseInt(state.fontSize, 10) + 1) + "px"; + setFontSizeAction(parseInt(state.fontSize, 10) + 1); + } + const decrementFontSize = () => { + document.getElementsByTagName("body")[0].style.fontSize = (parseInt(state.fontSize, 10) - 1) + "px"; + setFontSizeAction(parseInt(state.fontSize, 10) - 1); + } + const defaultFontSize = () => { + setFontSizeAction(15); + document.getElementsByTagName("body")[0].style.fontSize = "15px"; + } + + return ( + <React.Fragment> + <div className={`${state.contrast}bar`}> + <div className='textLeft hide-on-small-and-down'> + <a className={`${state.contrast}text`} accessKey="1" href="#conteudo" title="Ir para o conteúdo alt + 1"> + Conteúdo 1 + </a> + <a className={`${state.contrast}text`} accessKey="2" href="#menu" title="Ir para o menu alt + 2"> + Menu 2 + </a> + <a className={`${state.contrast}text`} accessKey="3" href="#rodape" title="Ir para o rodapé alt + 3"> + Rodapé 3 + </a> + </div> + <div className='textRight'> + <div> + <a className={`${state.contrast}text`} onClick={incrementFontSize} title="Aumentar tamanho da fonte"> + A+ + </a> + <a className={`${state.contrast}text`} onClick={decrementFontSize} title="Diminuir tamanho da fonte"> + A- + </a> + <a className={`${state.contrast}text`} onClick={defaultFontSize} title="Restaurar tamanho da fonte"> + A + </a> + </div> + <div onClick={toggleContrast}> + <a className={`${state.contrast}text`} title="Ativar modo de alto contraste"> + <img src={state.contrast === '' ? ContrastImageOff : ContrastImageOn} style={{ marginRight: 5 }} alt="ContrastIcon" width="11" height="11" /> + Contraste + </a> + </div> + + </div> + </div> + </React.Fragment> + ); + +} + +export default ContrastBar; \ No newline at end of file diff --git a/src/Components/ActivityListItem.js b/src/Components/ActivityListItem.js index 0d249401..3a3eb3bd 100644 --- a/src/Components/ActivityListItem.js +++ b/src/Components/ActivityListItem.js @@ -115,7 +115,7 @@ export default function ActivityListItem(props) { }, []) return ( - <StyledListItem onMenuBar={props.onMenuBar}> + <StyledListItem onMenuBar={props.onMenuBar} contrast={props.contrast}> { !props.onMenuBar && <> @@ -138,10 +138,10 @@ export default function ActivityListItem(props) { } secondary={ <div> - + <span> <Link to={{ - pathname: props.ownerHref, + pathname: props.ownerHref, state: '0', }} className="owner-name-a" >{props.ownerName}</Link> {activity.text} <Link to={props.recipientHref} className="recipient-name-a">{props.recipientName}</Link> {activity.text2} </span> @@ -167,8 +167,9 @@ const StyledListItem = styled(ListItem)` .time-ago-span { font-size : 12px; - font-family : 'Lato', medium; - color : #787380; + font-family : 'Lato', medium; + color: ${props => props.contrast === '' ? "#787380" : "yellow"}; + color : #787380; } .owner-name-a { diff --git a/src/Components/Dropdown.js b/src/Components/Dropdown.js index cc064489..ed252132 100644 --- a/src/Components/Dropdown.js +++ b/src/Components/Dropdown.js @@ -73,10 +73,10 @@ export default function PositionedPopper(props) { {({ TransitionProps }) => ( <Fade {...TransitionProps} timeout={350}> <Paper> - <MenuList> + <MenuList className={`${state.contrast}BackColor`}> { props.items.map((item) => - <Link onClick={handleItemClicked} style={{ textDecoration: "none", color: "black" }} key={`${item.name}_${new Date().toString()}`} to={item.href} ><MenuItem>{item.name}</MenuItem></Link> + <Link onClick={handleItemClicked} className={`${state.contrast}TextColor`} style={{ textDecoration: "none", color: "black" }} key={`${item.name}_${new Date().toString()}`} to={item.href} ><MenuItem>{item.name}</MenuItem></Link> ) } </MenuList> @@ -85,7 +85,8 @@ export default function PositionedPopper(props) { )} </Popper> <Button - style={{ textTransform: "none", fontSize: "14px" }} + className={`${state.contrast}TextColor`} + style={{ textTransform: "none" }} aria-controls="menu-list-grow" aria-haspopup="true" onClick={handleClick('bottom')} diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index c79d52b6..436cf2d7 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -158,18 +158,18 @@ export default function MenuBar(props) { const minhaArea = buildMyAreaTabs() return ( - <ContainerStyled fluid={true} > + <ContainerStyled fluid={true} className={`${state.contrast}BackColor`}> <Left> <Link to="/"> <ImageStyled src={logo} alt="Plataforma Integrada" /> </Link> <Dropdown name="Sobre" items={menuSobre} /> <Dropdown name="Ajuda" items={menuAjuda} /> <a href="http://educacaoconectada.mec.gov.br/" rel="noopener noreferrer" target="_blank" > - <ButtonStyled >Educação Conectada</ButtonStyled> + <ButtonStyled className={`${state.contrast}TextColor`} >Educação Conectada</ButtonStyled> </a> {/*<Link to="/loja"> <ButtonStyled>Lojinha</ButtonStyled> </Link>*/} - <ButtonStyled onClick={props.openSearchBar} ><IconSearchStyled />Buscar</ButtonStyled> + <ButtonStyled className={`${state.contrast}TextColor`} onClick={props.openSearchBar} ><IconSearchStyled className={`${state.contrast}TextColor`} />Buscar</ButtonStyled> </Left> <Right> @@ -179,9 +179,9 @@ export default function MenuBar(props) { <> <div style={{ boxSizing: "border-box" }}> <Link to="/termos-publicar-recurso"> - <ButtonPublicarRecurso> - <CloudUploadIcon style={{ color: "white", marginLeft: "0" }} /> - <span style={{ color: "#fff", textAlign: "center", alignSelf: "center", fontWeight: "500" }} > + <ButtonPublicarRecurso className={`${state.contrast}BackColor`}> + <CloudUploadIcon className={`${state.contrast}TextColor`} style={{ color: "white", marginLeft: "0" }} /> + <span className={`${state.contrast}TextColor`} style={{ color: "#fff", textAlign: "center", alignSelf: "center", fontWeight: "500" }} > PUBLICAR RECURSO </span> </ButtonPublicarRecurso> @@ -198,9 +198,9 @@ export default function MenuBar(props) { ) : ( <React.Fragment> - <ButtonPubRecursoStyled onClick={props.openLogin}>PUBLICAR RECURSO?</ButtonPubRecursoStyled> - <ButtonStyled onClick={props.openLogin}><ExitToAppIcon style={{ color: "#00bcd4" }} />Entrar</ButtonStyled> - <ButtonStyled onClick={props.openSignUp}>Cadastre-<span style={{textTransform: 'lowercase'}}>se</span></ButtonStyled> + <ButtonPubRecursoStyled className={`${state.contrast}TextColor`} onClick={props.openLogin}>PUBLICAR RECURSO?</ButtonPubRecursoStyled> + <ButtonStyled className={`${state.contrast}TextColor`} onClick={props.openLogin}><ExitToAppIcon className={`${state.contrast}TextColor`} style={{ color: "#00bcd4" }} />Entrar</ButtonStyled> + <ButtonStyled className={`${state.contrast}TextColor`} onClick={props.openSignUp}>Cadastre-<span style={{ textTransform: 'lowercase' }}>se</span></ButtonStyled> </React.Fragment> ) } diff --git a/src/Components/Notifications.js b/src/Components/Notifications.js index c8fbe2ae..16c50713 100644 --- a/src/Components/Notifications.js +++ b/src/Components/Notifications.js @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useContext } from 'react'; import NotificationsIcon from '@material-ui/icons/Notifications'; import { Button } from '@material-ui/core'; import Badge from '@material-ui/core/Badge'; @@ -28,6 +28,7 @@ import { withStyles } from '@material-ui/core/styles'; import { Link } from 'react-router-dom' import { getRecipientHref } from './Activities/getRecipientHref.js' import SnackBar from '../Components/SnackbarComponent' +import { Store } from '../Store'; const StyledBadge = styled(Badge)` .MuiBadge-dot-45{ @@ -75,6 +76,7 @@ const StyledMenu = withStyles({ export default function Notification(props) { const [anchorEl, setAnchorEl] = React.useState(null); + const { state } = useContext(Store); const [notifications, setNotifications] = useState([]); const [snack, setSnack] = useState({ open: false, @@ -187,7 +189,7 @@ export default function Notification(props) { /> <StyledNotificationButton onClick={handleClick}> <StyledBadge badgeContent={1} color="secondary" variant="dot" overlap="circle" className="badge"> - <StyledNotificationsIcon /> + <StyledNotificationsIcon className={`${state.contrast}TextColor`} /> </StyledBadge> </StyledNotificationButton> <StyledMenu @@ -196,8 +198,9 @@ export default function Notification(props) { keepMounted open={Boolean(anchorEl)} onClose={handleClose} + contrast={state.contrast} > - <ContainerDiv> + <ContainerDiv contrast={state.contrast}> <div className="cabecalho"> <span style={{ fontSize: "15px" }}>NOTIFICAÇÕES •</span> <span className="cabecalho-marcar" onClick={handleClickNotification}>Marcar todas como lidas</span> @@ -206,6 +209,7 @@ export default function Notification(props) { notifications.map((notification) => (notification.viewed === false) && <ActivityListItem + contrast={state.contrast} onMenuBar={true} avatar={notification.owner.avatar ? apiDomain + notification.owner.avatar : null} activity={notification.activity} @@ -247,11 +251,12 @@ const ContainerDiv = styled.div` overflow-y : scroll; padding : 5px 5px 5px 5px; min-width : 160px; - background-color : #f1f1f1; + background-color: ${props => props.contrast === '' ? "#f1f1f1" : "black"}; .cabecalho { border-bottom : 1px solid #dadada; padding : 10px 15px; + color: ${props => props.contrast === '' ? "black" : "yellow"}; .cabecalho-marcar { font-family: Lato,bold; diff --git a/src/Store.js b/src/Store.js index 0cb5c033..6b8598b6 100644 --- a/src/Store.js +++ b/src/Store.js @@ -21,158 +21,170 @@ import React from 'react' export const Store = React.createContext() const initialState = { - searchOpen: false, - userIsLoggedIn : false, - userAgreedToPublicationTerms: false, - userAgreedToPublicationPermissions: false, - modalColaborarPlataformaOpen : false, - search: { - query: '*', - class: 'LearningObject' - }, - windowSize: { - width: 0, - height: 0 -}, - currentUser: { - askTeacherQuestion : false, - id : '', - name : '', - email : '', - avatar : '', - cover : '', - uid : '', - follows_count : 0, - collections_count : 0, - submitter_request : 'default', - roles : [] - } + searchOpen: false, + userIsLoggedIn: false, + userAgreedToPublicationTerms: false, + userAgreedToPublicationPermissions: false, + modalColaborarPlataformaOpen: false, + search: { + query: '*', + class: 'LearningObject' + }, + windowSize: { + width: 0, + height: 0 + }, + currentUser: { + askTeacherQuestion: false, + id: '', + name: '', + email: '', + avatar: '', + cover: '', + uid: '', + follows_count: 0, + collections_count: 0, + submitter_request: 'default', + roles: [] + }, + contrast: '', + fontSize: 15, } function reducer(state, action) { - switch (action.type){ - case 'SAVE_SEARCH': - return { - ...state, - search: action.newSearch - } - case 'HANDLE_SEARCH_BAR': - return { - ...state, - searchOpen: action.opened - } - case 'WINDOW_SIZE': - return { - ...state, - windowSize: action.innerWindow - } - case 'USER_LOGGED_IN': - if (action.login.avatar_file_name) { - Object.defineProperty(action.login, 'avatar', - Object.getOwnPropertyDescriptor(action.login, 'avatar_file_name')); - delete action.login['avatar_file_name']; - } - if (action.login.cover_file_name) { - Object.defineProperty(action.login, 'cover', - Object.getOwnPropertyDescriptor(action.login, 'cover_file_name')); - delete action.login['cover_file_name']; - } - return { - ...state, - userIsLoggedIn:action.userLoggedIn, - currentUser:action.login + switch (action.type) { + case 'SET_CONTRAST': + return { + ...state, + contrast: action.payload + }; + case 'SET_FONT_SIZE': + return { + ...state, + fontSize: action.payload + }; + case 'SAVE_SEARCH': + return { + ...state, + search: action.newSearch + } + case 'HANDLE_SEARCH_BAR': + return { + ...state, + searchOpen: action.opened + } + case 'WINDOW_SIZE': + return { + ...state, + windowSize: action.innerWindow + } + case 'USER_LOGGED_IN': + if (action.login.avatar_file_name) { + Object.defineProperty(action.login, 'avatar', + Object.getOwnPropertyDescriptor(action.login, 'avatar_file_name')); + delete action.login['avatar_file_name']; + } + if (action.login.cover_file_name) { + Object.defineProperty(action.login, 'cover', + Object.getOwnPropertyDescriptor(action.login, 'cover_file_name')); + delete action.login['cover_file_name']; + } + return { + ...state, + userIsLoggedIn: action.userLoggedIn, + currentUser: action.login + } + case 'USER_SIGNED_UP': + return { + ...state, + userIsLoggedIn: action.userLoggedIn, + currentUser: action.user + } + case 'USER_LOGGED_OUT': + localStorage.clear() + return { + ...state, + userIsLoggedIn: action.userLoggedOut, + currentUser: { + askTeacherQuestion: false, + id: '', + name: '', + email: '', + avatar_file_name: '', + cover_file_name: '', + uid: '', + follows_count: 0, + collections_count: 0, + submitter_request: 'default', + roles: [] + }, + userAgreedToPublicationTerms: false, + userAgreedToPublicationPermissions: false + } + case 'USER_AGREED_TO_PUBLICATION_TERMS': + return { + ...state, + userAgreedToPublicationTerms: action.userAgreement + } + case 'USER_AGREED_TO_PUBLICATION_PERMISSIONS': + return { + ...state, + userAgreedToPublicationPermissions: action.userAgreement + } + case 'USER_ACCESSED_USER_PAGE': + return { + ...state, + currentUser: action.set + } + case 'USER_CHANGED_COVER': + return { + ...state, + currentUser: action.currUser + } + case 'USER_DELETED_ACCOUNT': + localStorage.clear() + return { + ...state, + userIsLoggedIn: false, + currentUser: { + askTeacherQuestion: false, + id: '', + name: '', + email: '', + avatar_file_name: '', + cover_file_name: '', + uid: '', + follows_count: 0, + collections_count: 0, + submitter_request: 'default', + roles: [] + }, + } + case 'TOGGLE_MODAL_COLABORAR_PLATAFORMA': + return { + ...state, + modalColaborarPlataformaOpen: action.modalColaborarPlataformaOpen + } + case 'GET_USER': + return { + ...state, + currentUser: action.user + } + case 'USER_UPDATED_EMAIL': + return { + ...state, + currentUser: action.currUser + } + default: + return state } - case 'USER_SIGNED_UP': - return { - ...state, - userIsLoggedIn:action.userLoggedIn, - currentUser:action.user - } - case 'USER_LOGGED_OUT': - localStorage.clear() - return { - ...state, - userIsLoggedIn:action.userLoggedOut, - currentUser:{ - askTeacherQuestion : false, - id : '', - name : '', - email : '', - avatar_file_name : '', - cover_file_name : '', - uid : '', - follows_count : 0, - collections_count : 0, - submitter_request : 'default', - roles : [] - }, - userAgreedToPublicationTerms: false, - userAgreedToPublicationPermissions: false - } - case 'USER_AGREED_TO_PUBLICATION_TERMS': - return { - ...state, - userAgreedToPublicationTerms: action.userAgreement - } - case 'USER_AGREED_TO_PUBLICATION_PERMISSIONS': - return { - ...state, - userAgreedToPublicationPermissions : action.userAgreement - } - case 'USER_ACCESSED_USER_PAGE': - return { - ...state, - currentUser : action.set - } - case 'USER_CHANGED_COVER': - return { - ...state, - currentUser : action.currUser - } - case 'USER_DELETED_ACCOUNT': - localStorage.clear() - return { - ...state, - userIsLoggedIn:false, - currentUser: { - askTeacherQuestion : false, - id : '', - name : '', - email : '', - avatar_file_name : '', - cover_file_name : '', - uid : '', - follows_count : 0, - collections_count : 0, - submitter_request : 'default', - roles : [] - }, - } - case 'TOGGLE_MODAL_COLABORAR_PLATAFORMA': - return { - ...state, - modalColaborarPlataformaOpen : action.modalColaborarPlataformaOpen - } - case 'GET_USER': - return { - ...state, - currentUser:action.user - } - case 'USER_UPDATED_EMAIL': - return { - ...state, - currentUser : action.currUser - } - default: - return state - } } export function StoreProvider(props) { const [state, dispatch] = React.useReducer(reducer, initialState); - const value = { state, dispatch }; + const value = { state, dispatch }; return ( <Store.Provider value={value}> {props.children} diff --git a/src/env.js b/src/env.js index 7284c427..95815e96 100644 --- a/src/env.js +++ b/src/env.js @@ -17,7 +17,7 @@ You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -var apiDomain = 'https://api.portalmectest.c3sl.ufpr.br', +var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion; diff --git a/src/img/OffContrastIcon.png b/src/img/OffContrastIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..f44e653f9499dec5cfc293de994c1081ff9c64ec GIT binary patch literal 17242 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 literal 0 HcmV?d00001 diff --git a/src/img/OnContrastIcon.png b/src/img/OnContrastIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae2fd847b997f007110cfb4d85930f639714ab5 GIT binary patch literal 17257 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 Hl+XkK1V%$3 literal 0 HcmV?d00001 -- GitLab