From 3c07bc1966c85de3351602c4e8798fa507c40e49 Mon Sep 17 00:00:00 2001 From: Marcin Aman Date: Thu, 30 Jul 2020 15:05:06 +0200 Subject: Create navigation search component --- .run/it-basic_dokka.run.xml | 24 ------- core/src/main/kotlin/pages/RendererSpecificPage.kt | 5 ++ plugins/base/build.gradle.kts | 1 + .../main/components/navigationPaneSearch/clear.svg | 3 + .../navigationPaneSearch/navigationPaneSearch.scss | 37 +++++++++++ .../navigationPaneSearch/navigationPaneSearch.tsx | 73 ++++++++++++++++++++++ plugins/base/frontend/src/main/components/root.tsx | 9 +++ .../main/components/search/dokkaFuzzyFilter.tsx | 18 +++++- .../src/main/components/search/search.scss | 14 +---- .../frontend/src/main/components/search/search.tsx | 1 + .../frontend/src/main/components/search/types.ts | 1 - plugins/base/frontend/src/main/scss/index.scss | 3 + .../src/main/kotlin/renderers/DefaultRenderer.kt | 4 ++ .../src/main/kotlin/renderers/html/HtmlRenderer.kt | 3 + .../main/kotlin/renderers/html/NavigationPage.kt | 2 +- .../kotlin/renderers/html/htmlPreprocessors.kt | 59 ++++++++++++----- 16 files changed, 202 insertions(+), 55 deletions(-) delete mode 100644 .run/it-basic_dokka.run.xml create mode 100644 plugins/base/frontend/src/main/components/navigationPaneSearch/clear.svg create mode 100644 plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.scss create mode 100644 plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.tsx diff --git a/.run/it-basic_dokka.run.xml b/.run/it-basic_dokka.run.xml deleted file mode 100644 index b5547317..00000000 --- a/.run/it-basic_dokka.run.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - true - - - - \ No newline at end of file diff --git a/core/src/main/kotlin/pages/RendererSpecificPage.kt b/core/src/main/kotlin/pages/RendererSpecificPage.kt index 85e6d530..d7f4491a 100644 --- a/core/src/main/kotlin/pages/RendererSpecificPage.kt +++ b/core/src/main/kotlin/pages/RendererSpecificPage.kt @@ -1,8 +1,12 @@ package org.jetbrains.dokka.pages +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.model.DisplaySourceSet import org.jetbrains.dokka.renderers.Renderer import kotlin.reflect.KClass +typealias LocationResolver = (DRI, Set) -> String + interface RendererSpecificPage : PageNode { val strategy: RenderingStrategy } @@ -29,6 +33,7 @@ sealed class RenderingStrategy { class Callback(val instructions: Renderer.(PageNode) -> String): RenderingStrategy() data class Copy(val from: String) : RenderingStrategy() data class Write(val text: String) : RenderingStrategy() + data class LocationResolvableWrite(val contentToResolve: (LocationResolver) -> String) : RenderingStrategy() object DoNothing : RenderingStrategy() companion object { diff --git a/plugins/base/build.gradle.kts b/plugins/base/build.gradle.kts index a7807223..9ffecbd7 100644 --- a/plugins/base/build.gradle.kts +++ b/plugins/base/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { api(project(":kotlin-analysis")) implementation("org.jsoup:jsoup:1.12.1") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.11.1") testImplementation(project(":test-tools")) testImplementation(project(":plugins:base:test-utils")) diff --git a/plugins/base/frontend/src/main/components/navigationPaneSearch/clear.svg b/plugins/base/frontend/src/main/components/navigationPaneSearch/clear.svg new file mode 100644 index 00000000..ad6a2026 --- /dev/null +++ b/plugins/base/frontend/src/main/components/navigationPaneSearch/clear.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.scss b/plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.scss new file mode 100644 index 00000000..b5714ca4 --- /dev/null +++ b/plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.scss @@ -0,0 +1,37 @@ +@import "src/main/scss/index.scss"; + +$defaultHeight: 40px; + +div#paneSearch { + + width: 248px; + margin: 0 auto; + + input#navigation-pane-search { + background: $white; + border: 1px solid $grey-border; + box-sizing: border-box; + border-radius: 4px; + padding: 8px; + height: $defaultHeight; + } + + .navigation-pane-search { + width: 100% !important; + padding-top: 16px; + } + + div.paneSearchInputWrapper { + position: relative; + span.paneSearchInputClearIcon { + position: absolute; + top: calc(50% + 2px); //Just to include a border + right: 8px; + cursor: pointer; + } + } +} + +.navigation-pane-popup { + margin-top: 1.2em; +} \ No newline at end of file diff --git a/plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.tsx b/plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.tsx new file mode 100644 index 00000000..3174b023 --- /dev/null +++ b/plugins/base/frontend/src/main/components/navigationPaneSearch/navigationPaneSearch.tsx @@ -0,0 +1,73 @@ +import React, { useCallback, useState, useEffect } from 'react'; +import {Select, List } from '@jetbrains/ring-ui'; +import { DokkaFuzzyFilterComponent } from '../search/dokkaFuzzyFilter'; +import { IWindow, Option } from '../search/types'; +import './navigationPaneSearch.scss'; +import ClearIcon from 'react-svg-loader!./clear.svg'; + +export const NavigationPaneSearch = () => { + const defaultWidth = 300 + + const [navigationList, setNavigationList] = useState([]); + const [selected, onSelected] = useState