diff options
author | Grégoire Aubert <gregoire.aubert@sonarsource.com> | 2019-05-02 15:22:48 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2019-05-06 11:01:16 +0200 |
commit | 1e4bc11f4515f0239d43abe9531bbac3a69cfd00 (patch) | |
tree | 19959a51efa64404fca702165af592d2b969eab6 /server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts | |
parent | 76fcba9729e6927356fb5b98760da0bd21d20f13 (diff) | |
download | sonarqube-1e4bc11f4515f0239d43abe9531bbac3a69cfd00.tar.gz sonarqube-1e4bc11f4515f0239d43abe9531bbac3a69cfd00.zip |
SONAR-11955 Fix travis error 'lodash/flatten' doesn't exist
Diffstat (limited to 'server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts')
-rw-r--r-- | server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts | 94 |
1 files changed, 94 insertions, 0 deletions
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 index 00000000000..963d8a0aedd --- /dev/null +++ b/server/sonar-web/src/main/js/apps/documentation/navTreeUtils.ts @@ -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, '') + ); +} |