Просмотр исходного кода

Merge pull request #2541 from weseek/imprv/gw-3126-apply-smoothScroll-to-wikiHeader

Imprv/gw 3126 apply smooth scroll to wiki header
Kaori Tokashiki 5 лет назад
Родитель
Сommit
31c853426f
1 измененных файлов с 12 добавлено и 2 удалено
  1. 12 2
      src/client/js/components/Page/RevisionRenderer.jsx

+ 12 - 2
src/client/js/components/Page/RevisionRenderer.jsx

@@ -4,10 +4,13 @@ import PropTypes from 'prop-types';
 import { withUnstatedContainers } from '../UnstatedUtils';
 import AppContainer from '../../services/AppContainer';
 import PageContainer from '../../services/PageContainer';
+import NavigationContainer from '../../services/NavigationContainer';
 import GrowiRenderer from '../../util/GrowiRenderer';
 
 import RevisionBody from './RevisionBody';
 
+const WIKI_HEADER_LINK = 120;
+
 class RevisionRenderer extends React.PureComponent {
 
   constructor(props) {
@@ -44,6 +47,13 @@ class RevisionRenderer extends React.PureComponent {
       return;
     }
 
+    const HeaderLink = document.getElementsByClassName('revision-head-link');
+    const HeaderLinkArray = Array.from(HeaderLink);
+    HeaderLinkArray.forEach(link => link.addEventListener('click', (e) => {
+      e.preventDefault();
+      this.props.navigationContainer.smoothScrollIntoView(link, WIKI_HEADER_LINK);
+    }));
+
     const { interceptorManager } = this.props.appContainer;
 
     interceptorManager.process('postRenderHtml', this.currentRenderingContext);
@@ -115,12 +125,12 @@ class RevisionRenderer extends React.PureComponent {
 /**
  * Wrapper component for using unstated
  */
-const RevisionRendererWrapper = withUnstatedContainers(RevisionRenderer, [AppContainer, PageContainer]);
+const RevisionRendererWrapper = withUnstatedContainers(RevisionRenderer, [AppContainer, PageContainer, NavigationContainer]);
 
 RevisionRenderer.propTypes = {
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
-
+  navigationContainer: PropTypes.instanceOf(NavigationContainer).isRequired,
   growiRenderer: PropTypes.instanceOf(GrowiRenderer).isRequired,
   markdown: PropTypes.string.isRequired,
   highlightKeywords: PropTypes.string,