Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 79 additions & 70 deletions src/components/Layouts/NavBar.jsx
Original file line number Diff line number Diff line change
@@ -1,94 +1,103 @@
import { useEffect, useState } from 'react';
import '../../styles/NavBar.css'; // Nous allons ajouter des styles pour la transition
import '../../styles/NavBar.css';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faArrowsUpToLine, faBook, faBug, faCode, faComment, faCopyright, faPager, faUsers } from '@fortawesome/free-solid-svg-icons';
import { faBook, faBug, faCode, faComment, faCopyright, faUsers, faBars, faXmark } from '@fortawesome/free-solid-svg-icons';
import { useTranslation } from 'react-i18next';
import LanguageSelector from '../common/LanguageSelector';

const NavBar = () => {
const [helpMenuOpen, setHelpMenuOpen] = useState(false);
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const { t } = useTranslation();

const toggleHelpMenu = () => {
setHelpMenuOpen(!helpMenuOpen);
};

useEffect(() => {
const closeHelpMenu = (event) => {
if (helpMenuOpen && !event.target.closest('.help-menu')) {
const closeMenus = (event) => {
if (!event.target.closest('.help-menu') && !event.target.closest('.help-icon')) {
setHelpMenuOpen(false);
}
};

window.addEventListener('mousedown', closeHelpMenu);

return () => {
window.removeEventListener('mousedown', closeHelpMenu);
if (!event.target.closest('.mobile-menu') && !event.target.closest('.mobile-toggle')) {
setMobileMenuOpen(false);
}
};
}, [helpMenuOpen]);

window.addEventListener('mousedown', closeMenus);
return () => window.removeEventListener('mousedown', closeMenus);
}, []);

return (
<nav className='fixed top-0 left-0 right-0 shadow-md z-50'>
<div className='flex items-center justify-between bg-blue-800 h-16 px-6 py-2'>
<a href='/'>
<div className='text-white text-xl font-bold'>
Emi <span className=' font-light max-md:hidden'>{t('nav.subtitle')}</span>
</div>
<nav className='fixed top-0 left-0 right-0 shadow-md z-50 bg-blue-800'>
<div className='flex items-center justify-between h-16 px-4 md:px-6'>
{/* Logo */}
<a href='/' className='text-white text-xl font-bold'>
Emi <span className='font-light hidden md:inline'>{t('nav.subtitle')}</span>
</a>

<div className='flex items-center justify-between gap-4'>
<ul className='flex items-center justify-center gap-4 text-white'>
<li>
<a href='/page-views' className=' text-white underline'>
<span className='max-md:hidden'>{t('nav.pageViews')}</span>
<span className='hidden max-md:block'>
<FontAwesomeIcon icon={faPager} style={{ color: '#ffffff' }} />
</span>
</a>
</li>
<li>
<a href='/top-africa' className=' text-white underline'>
<span className='max-md:hidden'>{t('nav.topAfrica')}</span>
<span className='hidden max-md:block'>
<FontAwesomeIcon icon={faArrowsUpToLine} style={{ color: '#ffffff' }} />
</span>
</a>
</li>
</ul>
{/* Desktop Menu */}
<div className='hidden md:flex items-center gap-4'>
<a href='/page-views' className='text-white underline'>
{t('nav.pageViews')}
</a>
<a href='/top-africa' className='text-white underline'>
{t('nav.topAfrica')}
</a>
<LanguageSelector />
<div>
<button onClick={toggleHelpMenu} className='help-icon'>
{t('common.help')} ▼
</button>
{helpMenuOpen && (
<div className='help-menu absolute shadow-2xl right-1 rounded-xl bg-white'>
<a href='https://meta.wikimedia.org/wiki/Emi_Solution' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faBook} /> {t('common.documentation')}
</a>
<a href='https://github.com/kaliacad/mostvisitedarticle' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faCode} /> {t('common.viewSource')}
</a>
<a href='https://github.com/kaliacad/mostvisitedarticle/issues' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faBug} /> {t('common.reportIssue')}
</a>
<a
href='https://meta.wikimedia.org/w/index.php?title=Talk:Emi_Solution&action=edit&redlink=1'
className='footer-link'
target='_blank'
>
<FontAwesomeIcon icon={faComment} /> {t('common.feedback')}
</a>
<a href='https://github.com/kaliacad.org/' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faUsers} /> {t('common.developedBy')}
</a>
<a href='https://kaliacademy.org/' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faCopyright} /> {t('common.kaliAcademy')}
</a>
</div>
)}
</div>
<button onClick={() => setHelpMenuOpen(!helpMenuOpen)} className='help-icon text-white'>
{t('common.help')} ▼
</button>
</div>

{/* Mobile Toggle */}
<button className='md:hidden text-white text-xl mobile-toggle' onClick={() => setMobileMenuOpen(!mobileMenuOpen)}>
<FontAwesomeIcon icon={mobileMenuOpen ? faXmark : faBars} />
</button>
</div>

{/* Mobile Menu */}
{mobileMenuOpen && (
<div className='mobile-menu md:hidden bg-blue-700 px-4 py-3 space-y-3 text-white'>
<a href='/page-views' className='block underline'>
{t('nav.pageViews')}
</a>
<a href='/top-africa' className='block underline'>
{t('nav.topAfrica')}
</a>

<LanguageSelector />

<button onClick={() => setHelpMenuOpen(!helpMenuOpen)} className='block w-full text-left'>
{t('common.help')} ▼
</button>
</div>
)}

{/* Help Menu */}
{helpMenuOpen && (
<div className='help-menu absolute right-2 mt-2 rounded-xl bg-white shadow-2xl w-56'>
<a href='https://meta.wikimedia.org/wiki/Emi_Solution' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faBook} /> {t('common.documentation')}
</a>
<a href='https://github.com/kaliacad/mostvisitedarticle' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faCode} /> {t('common.viewSource')}
</a>
<a href='https://github.com/kaliacad/mostvisitedarticle/issues' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faBug} /> {t('common.reportIssue')}
</a>
<a
href='https://meta.wikimedia.org/w/index.php?title=Talk:Emi_Solution&action=edit&redlink=1'
className='footer-link'
target='_blank'
>
<FontAwesomeIcon icon={faComment} /> {t('common.feedback')}
</a>
<a href='https://github.com/kaliacad.org/' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faUsers} /> {t('common.developedBy')}
</a>
<a href='https://kaliacademy.org/' className='footer-link' target='_blank'>
<FontAwesomeIcon icon={faCopyright} /> {t('common.kaliAcademy')}
</a>
</div>
)}
</nav>
);
};
Expand Down
55 changes: 24 additions & 31 deletions src/components/Layouts/footer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,30 @@ export function Footer() {
const { t } = useTranslation();

return (
<footer className='footer fixed bottom-0 w-full bg-white max-md:relative max-md:text-center items-center'>
<a href='https://meta.wikimedia.org/wiki/Emi_Solution' className='footer-link max-md:text-xs lg:flex items-center gap-2' target='_blank'>
<FontAwesomeIcon icon={faBook} /> <span className='md:hidden block lg:block lg:text-sm'>{t('footer.documentation')}</span>
</a>
<a
href='https://github.com/kaliacad/mostvisitedarticle'
className='footer-link max-md:text-xs lg:flex items-center gap-2'
target='_blank'
>
<FontAwesomeIcon icon={faCode} /> <span className='md:hidden block lg:block lg:text-sm'>{t('footer.viewSource')}</span>
</a>
<a
href='https://github.com/kaliacad/mostvisitedarticle/issues'
className='footer-link max-md:text-xs lg:flex items-center gap-2'
target='_blank'
>
<FontAwesomeIcon icon={faBug} /> <span className='md:hidden block lg:block lg:text-sm'>{t('footer.reportIssue')}</span>
</a>
<a
href='https://meta.wikimedia.org/w/index.php?title=Talk:Emi_Solution&action=edit&redlink=1'
className='footer-link max-md:text-xs lg:flex items-center gap-2'
target='_blank'
>
<FontAwesomeIcon icon={faComment} /> <span className='md:hidden block lg:block'>{t('footer.feedback')}</span>
</a>
<a href='https://github.com/kaliacad.org/' className='footer-link max-md:text-xs lg:flex items-center gap-2' target='_blank'>
<FontAwesomeIcon icon={faUsers} /> <span className='md:hidden block lg:block lg:text-sm'>{t('footer.developedBy')}</span>
</a>
<a href='https://kaliacademy.org/' className='footer-link max-md:text-xs lg:flex items-center gap-2' target='_blank'>
<FontAwesomeIcon icon={faCopyright} /> <span className='md:hidden block lg:block lg:text-sm'>{t('footer.kaliAcademy')}</span>
</a>
<footer className='bg-white border-t md:fixed md:bottom-0 w-full'>
<div className='max-w-7xl mx-auto px-4 py-3'>
<div className='flex flex-wrap justify-center md:justify-between gap-4 text-sm'>
<FooterLink href='https://meta.wikimedia.org/wiki/Emi_Solution' icon={faBook} label={t('footer.documentation')} />
<FooterLink href='https://github.com/kaliacad/mostvisitedarticle' icon={faCode} label={t('footer.viewSource')} />
<FooterLink href='https://github.com/kaliacad/mostvisitedarticle/issues' icon={faBug} label={t('footer.reportIssue')} />
<FooterLink
href='https://meta.wikimedia.org/w/index.php?title=Talk:Emi_Solution&action=edit&redlink=1'
icon={faComment}
label={t('footer.feedback')}
/>
<FooterLink href='https://github.com/kaliacad.org/' icon={faUsers} label={t('footer.developedBy')} />
<FooterLink href='https://kaliacademy.org/' icon={faCopyright} label={t('footer.kaliAcademy')} />
</div>
</div>
</footer>
);
}

function FooterLink({ href, icon, label }) {
return (
<a href={href} target='_blank' className='flex items-center gap-2 text-gray-700 hover:text-blue-700 transition' rel='noreferrer'>
<FontAwesomeIcon icon={icon} />
<span className='hidden sm:inline'>{label}</span>
</a>
);
}
You are viewing a condensed version of this merge commit. You can view the full changes here.