mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
Use presentable name explained
Use same logic in the built-in plugin keymap as in helpmanager Encode URL only once Work in progress Make sure the keymap parameter is added for offline help app as well (cherry picked from commit b0e605dcedea573bb46393c78cc30fa312fd1ecc) IJ-MR-144854 GitOrigin-RevId: 2a0582a3e4d150d3bb292d1b99229931261981f2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
507ae5bd17
commit
5700cd171d
@@ -52,7 +52,8 @@ public class HelpManagerImpl extends HelpManager {
|
|||||||
activeKeymap = activeKeymap.getParent();
|
activeKeymap = activeKeymap.getParent();
|
||||||
}
|
}
|
||||||
if (activeKeymap != null) {
|
if (activeKeymap != null) {
|
||||||
url = url.addParameters(Map.of("keymap", activeKeymap.getName()));
|
//We need to use the presentable name here because that's what is stored on the docs side
|
||||||
|
url = url.addParameters(Map.of("keymap", activeKeymap.getPresentableName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return IdeUrlTrackingParametersProvider.getInstance().augmentUrl(url.toExternalForm());
|
return IdeUrlTrackingParametersProvider.getInstance().augmentUrl(url.toExternalForm());
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import com.intellij.openapi.application.ApplicationInfo
|
|||||||
import com.intellij.openapi.application.ApplicationNamesInfo
|
import com.intellij.openapi.application.ApplicationNamesInfo
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.help.HelpManager
|
import com.intellij.openapi.help.HelpManager
|
||||||
|
import com.intellij.openapi.keymap.Keymap
|
||||||
|
import com.intellij.openapi.keymap.ex.KeymapManagerEx
|
||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import com.intellij.util.PlatformUtils
|
import com.intellij.util.PlatformUtils
|
||||||
import com.jetbrains.builtInHelp.settings.SettingsPage
|
import com.jetbrains.builtInHelp.settings.SettingsPage
|
||||||
@@ -26,14 +28,20 @@ class BuiltInHelpManager : HelpManager() {
|
|||||||
|
|
||||||
override fun invokeHelp(helpId: String?) {
|
override fun invokeHelp(helpId: String?) {
|
||||||
|
|
||||||
val helpIdToUse = helpId ?: "top"
|
val helpIdToUse = URLEncoder.encode(helpId, StandardCharsets.UTF_8) ?: "top"
|
||||||
logWillOpenHelpId(helpIdToUse)
|
logWillOpenHelpId(helpIdToUse)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
var activeKeymap: Keymap? = KeymapManagerEx.getInstanceEx().getActiveKeymap()
|
||||||
|
if (true == activeKeymap?.canModify())
|
||||||
|
activeKeymap = activeKeymap.parent
|
||||||
|
|
||||||
|
val activeKeymapParam = if (activeKeymap == null) "" else "&keymap=${URLEncoder.encode(activeKeymap.presentableName, StandardCharsets.UTF_8)}"
|
||||||
|
|
||||||
var url = "http://127.0.0.1:${BuiltInServerOptions.getInstance().effectiveBuiltInServerPort}/help/?${
|
var url = "http://127.0.0.1:${BuiltInServerOptions.getInstance().effectiveBuiltInServerPort}/help/?${
|
||||||
URLEncoder.encode(
|
helpIdToUse
|
||||||
helpIdToUse, StandardCharsets.UTF_8)
|
}$activeKeymapParam"
|
||||||
}"
|
|
||||||
val tryOpenWebSite = java.lang.Boolean.valueOf(Utils.getStoredValue(
|
val tryOpenWebSite = java.lang.Boolean.valueOf(Utils.getStoredValue(
|
||||||
SettingsPage.OPEN_HELP_FROM_WEB, "true"))
|
SettingsPage.OPEN_HELP_FROM_WEB, "true"))
|
||||||
|
|
||||||
@@ -62,22 +70,19 @@ class BuiltInHelpManager : HelpManager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val info = ApplicationInfo.getInstance()
|
val info = ApplicationInfo.getInstance()
|
||||||
val productVersion = info.majorVersion + "." + info.minorVersion.substringBefore(".")
|
val productVersion = info.shortVersion
|
||||||
|
|
||||||
var baseUrl = Utils.getStoredValue(SettingsPage.OPEN_HELP_BASE_URL,
|
var baseUrl = Utils.getStoredValue(SettingsPage.OPEN_HELP_BASE_URL,
|
||||||
Utils.BASE_HELP_URL)
|
Utils.BASE_HELP_URL)
|
||||||
|
|
||||||
if (!baseUrl.endsWith("/")) baseUrl += "/"
|
if (!baseUrl.endsWith("/")) baseUrl += "/"
|
||||||
|
|
||||||
url = "${baseUrl}help/$productWebPath/$productVersion/?${
|
url = "${baseUrl}help/$productWebPath/$productVersion/?${helpIdToUse}"
|
||||||
URLEncoder.encode(
|
|
||||||
helpIdToUse, StandardCharsets.UTF_8)
|
|
||||||
}"
|
|
||||||
|
|
||||||
if (PlatformUtils.isJetBrainsProduct() && baseUrl == Utils.BASE_HELP_URL) {
|
if (PlatformUtils.isJetBrainsProduct() && baseUrl == Utils.BASE_HELP_URL) {
|
||||||
val productCode = info.build.productCode
|
val productCode = info.build.productCode
|
||||||
if (!StringUtil.isEmpty(productCode)) {
|
if (!StringUtil.isEmpty(productCode)) {
|
||||||
url += "&utm_source=from_product&utm_medium=help_link&utm_campaign=$productCode&utm_content=$productVersion"
|
url += "&utm_source=from_product&utm_medium=help_link&utm_campaign=$productCode&utm_content=$productVersion$activeKeymapParam"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,7 +98,6 @@ class BuiltInHelpManager : HelpManager() {
|
|||||||
else {
|
else {
|
||||||
BrowserLauncher.instance.browse(url, browser)
|
BrowserLauncher.instance.browse(url, browser)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (e: URISyntaxException) {
|
catch (e: URISyntaxException) {
|
||||||
LOG.error("Help id '$helpIdToUse' produced an invalid URL.", e)
|
LOG.error("Help id '$helpIdToUse' produced an invalid URL.", e)
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import io.netty.channel.ChannelHandlerContext
|
|||||||
import io.netty.handler.codec.http.*
|
import io.netty.handler.codec.http.*
|
||||||
import org.jetbrains.builtInWebServer.BuiltInServerOptions
|
import org.jetbrains.builtInWebServer.BuiltInServerOptions
|
||||||
import org.jetbrains.io.send
|
import org.jetbrains.io.send
|
||||||
|
import java.net.URLEncoder
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
import javax.xml.bind.JAXBContext
|
import javax.xml.bind.JAXBContext
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@@ -24,7 +26,7 @@ class HelpContentRequestHandler : HelpRequestHandlerBase() {
|
|||||||
override fun process(
|
override fun process(
|
||||||
urlDecoder: QueryStringDecoder,
|
urlDecoder: QueryStringDecoder,
|
||||||
request: FullHttpRequest,
|
request: FullHttpRequest,
|
||||||
context: ChannelHandlerContext
|
context: ChannelHandlerContext,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
for (name: String in urlDecoder.parameters().keys) {
|
for (name: String in urlDecoder.parameters().keys) {
|
||||||
val param = urlDecoder.parameters()[name]
|
val param = urlDecoder.parameters()[name]
|
||||||
@@ -39,15 +41,21 @@ class HelpContentRequestHandler : HelpRequestHandlerBase() {
|
|||||||
mapStream
|
mapStream
|
||||||
) as HelpMap
|
) as HelpMap
|
||||||
|
|
||||||
val response = DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.TEMPORARY_REDIRECT)
|
val response = DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.PERMANENT_REDIRECT)
|
||||||
|
|
||||||
|
var location = "http://127.0.0.1:${BuiltInServerOptions.getInstance().effectiveBuiltInServerPort}/help/${
|
||||||
|
map.getUrlForId(
|
||||||
|
name
|
||||||
|
)
|
||||||
|
}"
|
||||||
|
|
||||||
|
if (urlDecoder.parameters().containsKey("keymap")) location += "?keymap=${URLEncoder.encode(urlDecoder.parameters()["keymap"]!![0], StandardCharsets.UTF_8)}"
|
||||||
|
|
||||||
response.headers().add(
|
response.headers().add(
|
||||||
"Location",
|
"Location",
|
||||||
"http://127.0.0.1:${BuiltInServerOptions.getInstance().effectiveBuiltInServerPort}/help/${
|
location
|
||||||
map.getUrlForId(
|
|
||||||
name
|
|
||||||
)
|
|
||||||
}"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
context.channel().writeAndFlush(response).addListener(ChannelFutureListener.CLOSE)
|
context.channel().writeAndFlush(response).addListener(ChannelFutureListener.CLOSE)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user