]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11955 Fix travis error 'lodash/flatten' doesn't exist
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Thu, 2 May 2019 13:22:48 +0000 (15:22 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 6 May 2019 09:01:16 +0000 (11:01 +0200)
server/sonar-web/src/main/js/apps/documentation/components/Menu.tsx
server/sonar-web/src/main/js/apps/documentation/components/MenuBlock.tsx
server/sonar-web/src/main/js/apps/documentation/components/MenuItem.tsx
server/sonar-web/src/main/js/apps/documentation/components/SearchResults.tsx
server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts [new file with mode: 0644]

index 188eba9e078b7134aea574a2c4d31abd147ab028..07e5c42e5ea286306313a3039b04109fd0ebd238 100644 (file)
  */
 import * as React from 'react';
 import { DocNavigationItem } from 'Docs/@types/types';
+import MenuBlock from './MenuBlock';
+import { MenuItem } from './MenuItem';
+import { MenuExternalLink } from './MenuExternalLink';
 import {
   isDocsNavigationBlock,
   isDocsNavigationExternalLink,
   getOpenChainFromPath
-} from 'Docs/components/navTreeUtils';
-import MenuBlock from './MenuBlock';
-import { MenuItem } from './MenuItem';
-import { MenuExternalLink } from './MenuExternalLink';
+} from '../navTreeUtils';
 import { DocumentationEntry, getNodeFromUrl } from '../utils';
 
 interface Props {
index 0a350e98ce3bc0f55d82c187be3268dfc9d13b6e..8b3f500ead47375a65e97f3b7de0a3a21225eade 100644 (file)
 import * as React from 'react';
 import * as classNames from 'classnames';
 import { DocsNavigationBlock, DocNavigationItem } from 'Docs/@types/types';
-import { isDocsNavigationBlock } from 'Docs/components/navTreeUtils';
 import { MenuItem } from './MenuItem';
+import { isDocsNavigationBlock } from '../navTreeUtils';
+import { DocumentationEntry, getNodeFromUrl } from '../utils';
 import OpenCloseIcon from '../../../components/icons-components/OpenCloseIcon';
 import { ButtonLink } from '../../../components/ui/buttons';
-import { DocumentationEntry, getNodeFromUrl } from '../utils';
 
 interface Props {
   block: DocsNavigationBlock;
index 61a82f4ca0a45cd76decf4b3449d19268f19f0fb..688175c0dc8e1380a0a6f3664c01f1fe94c0a102 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import * as classNames from 'classnames';
 import { Link } from 'react-router';
-import { testPathAgainstUrl } from 'Docs/components/navTreeUtils';
+import { testPathAgainstUrl } from '../navTreeUtils';
 import { DocumentationEntry } from '../utils';
 
 interface Props {
index 70756e20ab04e8a78f141a9c92326ca5a65752bc..909a80e912337c607a398753038adb20f4ce654a 100644 (file)
@@ -20,9 +20,9 @@
 import * as React from 'react';
 import lunr, { LunrBuilder, LunrIndex, LunrToken } from 'lunr';
 import { sortBy } from 'lodash';
-import { getUrlsList } from 'Docs/components/navTreeUtils';
 import { DocNavigationItem } from 'Docs/@types/types';
 import SearchResultEntry, { SearchResult } from './SearchResultEntry';
+import { getUrlsList } from '../navTreeUtils';
 import { DocumentationEntry } from '../utils';
 
 interface Props {
diff --git a/server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts b/server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts
new file mode 100644 (file)
index 0000000..963d8a0
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import { flatten } from 'lodash';
+import {
+  DocNavigationItem,
+  DocsNavigationBlock,
+  DocsNavigationExternalLink
+} from 'Docs/@types/types';
+import NavigationTree from 'Docs/../static/SonarQubeNavigationTree.json';
+
+export function getNavTree() {
+  return NavigationTree as DocNavigationItem[];
+}
+
+export function getUrlsList(navTree: DocNavigationItem[]): string[] {
+  return flatten(
+    navTree.map(leaf => {
+      if (isDocsNavigationBlock(leaf)) {
+        return getUrlsList(leaf.children);
+      }
+      if (isDocsNavigationExternalLink(leaf)) {
+        return [leaf.url];
+      }
+      return [leaf];
+    })
+  );
+}
+
+export function getOpenChainFromPath(pathname: string, navTree: DocNavigationItem[]) {
+  let chain: DocNavigationItem[] = [];
+
+  let found = false;
+  const walk = (leaf: DocNavigationItem, parents: DocNavigationItem[] = []) => {
+    if (found) {
+      return;
+    }
+
+    parents = parents.concat(leaf);
+
+    if (isDocsNavigationBlock(leaf)) {
+      leaf.children.forEach(child => {
+        if (typeof child === 'string' && testPathAgainstUrl(child, pathname)) {
+          chain = parents.concat(child);
+          found = true;
+        } else {
+          walk(child, parents);
+        }
+      });
+    } else if (typeof leaf === 'string' && testPathAgainstUrl(leaf, pathname)) {
+      chain = parents;
+      found = true;
+    }
+  };
+
+  navTree.forEach(leaf => walk(leaf));
+
+  return chain;
+}
+
+export function isDocsNavigationBlock(leaf?: DocNavigationItem): leaf is DocsNavigationBlock {
+  return typeof leaf === 'object' && (leaf as DocsNavigationBlock).children !== undefined;
+}
+
+export function isDocsNavigationExternalLink(
+  leaf?: DocNavigationItem
+): leaf is DocsNavigationExternalLink {
+  return typeof leaf === 'object' && (leaf as DocsNavigationExternalLink).url !== undefined;
+}
+
+export function testPathAgainstUrl(path: string, url: string) {
+  const leadingRegEx = /^\//;
+  const trailingRegEx = /\/$/;
+  return (
+    path.replace(leadingRegEx, '').replace(trailingRegEx, '') ===
+    url.replace(leadingRegEx, '').replace(trailingRegEx, '')
+  );
+}