mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +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();
|
||||
}
|
||||
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());
|
||||
|
||||
@@ -8,6 +8,8 @@ import com.intellij.openapi.application.ApplicationInfo
|
||||
import com.intellij.openapi.application.ApplicationNamesInfo
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
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.util.PlatformUtils
|
||||
import com.jetbrains.builtInHelp.settings.SettingsPage
|
||||
@@ -26,14 +28,20 @@ class BuiltInHelpManager : HelpManager() {
|
||||
|
||||
override fun invokeHelp(helpId: String?) {
|
||||
|
||||
val helpIdToUse = helpId ?: "top"
|
||||
val helpIdToUse = URLEncoder.encode(helpId, StandardCharsets.UTF_8) ?: "top"
|
||||
logWillOpenHelpId(helpIdToUse)
|
||||
|
||||
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/?${
|
||||
URLEncoder.encode(
|
||||
helpIdToUse, StandardCharsets.UTF_8)
|
||||
}"
|
||||
helpIdToUse
|
||||
}$activeKeymapParam"
|
||||
|
||||
val tryOpenWebSite = java.lang.Boolean.valueOf(Utils.getStoredValue(
|
||||
SettingsPage.OPEN_HELP_FROM_WEB, "true"))
|
||||
|
||||
@@ -62,22 +70,19 @@ class BuiltInHelpManager : HelpManager() {
|
||||
}
|
||||
|
||||
val info = ApplicationInfo.getInstance()
|
||||
val productVersion = info.majorVersion + "." + info.minorVersion.substringBefore(".")
|
||||
val productVersion = info.shortVersion
|
||||
|
||||
var baseUrl = Utils.getStoredValue(SettingsPage.OPEN_HELP_BASE_URL,
|
||||
Utils.BASE_HELP_URL)
|
||||
|
||||
if (!baseUrl.endsWith("/")) baseUrl += "/"
|
||||
|
||||
url = "${baseUrl}help/$productWebPath/$productVersion/?${
|
||||
URLEncoder.encode(
|
||||
helpIdToUse, StandardCharsets.UTF_8)
|
||||
}"
|
||||
url = "${baseUrl}help/$productWebPath/$productVersion/?${helpIdToUse}"
|
||||
|
||||
if (PlatformUtils.isJetBrainsProduct() && baseUrl == Utils.BASE_HELP_URL) {
|
||||
val productCode = info.build.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 {
|
||||
BrowserLauncher.instance.browse(url, browser)
|
||||
}
|
||||
|
||||
}
|
||||
catch (e: URISyntaxException) {
|
||||
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 org.jetbrains.builtInWebServer.BuiltInServerOptions
|
||||
import org.jetbrains.io.send
|
||||
import java.net.URLEncoder
|
||||
import java.nio.charset.StandardCharsets
|
||||
import javax.xml.bind.JAXBContext
|
||||
|
||||
@Suppress("unused")
|
||||
@@ -24,7 +26,7 @@ class HelpContentRequestHandler : HelpRequestHandlerBase() {
|
||||
override fun process(
|
||||
urlDecoder: QueryStringDecoder,
|
||||
request: FullHttpRequest,
|
||||
context: ChannelHandlerContext
|
||||
context: ChannelHandlerContext,
|
||||
): Boolean {
|
||||
for (name: String in urlDecoder.parameters().keys) {
|
||||
val param = urlDecoder.parameters()[name]
|
||||
@@ -39,15 +41,21 @@ class HelpContentRequestHandler : HelpRequestHandlerBase() {
|
||||
mapStream
|
||||
) 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(
|
||||
"Location",
|
||||
"http://127.0.0.1:${BuiltInServerOptions.getInstance().effectiveBuiltInServerPort}/help/${
|
||||
map.getUrlForId(
|
||||
name
|
||||
)
|
||||
}"
|
||||
location
|
||||
)
|
||||
|
||||
context.channel().writeAndFlush(response).addListener(ChannelFutureListener.CLOSE)
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user