import React from 'react'; import PropTypes from 'prop-types'; import { Modal, ModalBody, Nav, NavItem, NavLink, TabContent, TabPane, } from 'reactstrap'; import { withTranslation } from 'react-i18next'; import PageListIcon from './Icons/PageListIcon'; import TimeLineIcon from './Icons/TimeLineIcon'; import RecentChangesIcon from './Icons/RecentChangesIcon'; import AttachmentIcon from './Icons/AttachmentIcon'; import { withUnstatedContainers } from './UnstatedUtils'; import PageAccessoriesContainer from '../services/PageAccessoriesContainer'; import PageAttachment from './PageAttachment'; const PageAccessoriesModal = (props) => { const { t, pageAccessoriesContainer } = props; const { switchActiveTab } = pageAccessoriesContainer; const { activeTab } = pageAccessoriesContainer.state; function closeModalHandler() { if (props.onClose == null) { return; } props.onClose(); } const menu = document.getElementsByClassName('nav'); // 上部に持ってきた // Values are set. // Might make this dynamic for px, %, pt, em function getPercentage(min, max) { return min / max * 100; } // Not using reduce, because IE8 doesn't supprt it function getArraySum(arr) { let sum = 0; [].forEach.call(arr, (el, index) => { sum += el; }); return sum; } function navSlider(menu, callback) { const menuWidth = menu.offsetWidth; // We only want the
  • tags const navTabs = document.querySelectorAll('li.nav-link'); console.log(navTabs); if (menu.length > 0) { const marginLeft = []; // Loop through nav children i.e li [].forEach.call(navTabs, (el, index) => { // Dynamic width/margin calculation for hr const width = getPercentage(el.offsetWidth, menuWidth); let tempMarginLeft = 0; // We don't want to modify first elements positioning if (index !== 0) { tempMarginLeft = getArraySum(marginLeft); } // Set mouse event hover/click callback(el, width, tempMarginLeft); /* We store it in array because the later accumulated value is used for positioning */ marginLeft.push(width); }); } } if (menu) { // CLICK const menuSliderClick = document.getElementById('nav_slide_click'); if (menuSliderClick) { navSlider(menu[1], (el, width, tempMarginLeft) => { el.onclick = () => { menuSliderClick.style.width = `${width}%`; menuSliderClick.style.marginLeft = `${tempMarginLeft}%`; }; }); } } // endif return ( {pageAccessoriesContainer.state.activeComponents.has('attachment') && } ); }; /** * Wrapper component for using unstated */ const PageAccessoriesModalWrapper = withUnstatedContainers(PageAccessoriesModal, [PageAccessoriesContainer]); PageAccessoriesModal.propTypes = { t: PropTypes.func.isRequired, // i18next // pageContainer: PropTypes.instanceOf(PageContainer).isRequired, pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired, isOpen: PropTypes.bool.isRequired, onClose: PropTypes.func, }; export default withTranslation()(PageAccessoriesModalWrapper);