IJP-755 load what's new from jb.com right into editor

GitOrigin-RevId: 2faca6e424af2151336c89e0f62a24631f462431
This commit is contained in:
Dmitry.Krasilschikov
2020-06-17 17:55:33 +03:00
committed by intellij-monorepo-bot
parent 87fd308f5a
commit a5a158d7a6
3 changed files with 61 additions and 20 deletions
@@ -11,7 +11,7 @@ import com.intellij.openapi.util.KeyWithDefaultValue
import com.intellij.openapi.vfs.VirtualFile
class HTMLEditorProvider : FileEditorProvider, DumbAware {
override fun createEditor(project: Project, file: VirtualFile): FileEditor = HTMLFileEditor(file)
override fun createEditor(project: Project, file: VirtualFile): FileEditor = HTMLFileEditor()
override fun accept(project: Project, file: VirtualFile) = file.getUserData(HTML_CONTENT_TYPE)!!
@@ -1,31 +1,60 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.fileEditor.impl
import com.intellij.CommonBundle
import com.intellij.ide.plugins.MultiPanel
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.fileEditor.FileEditorLocation
import com.intellij.openapi.fileEditor.FileEditorState
import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.ui.ScrollPaneFactory
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.UIUtil
import com.intellij.ui.components.JBLoadingPanel
import com.intellij.ui.jcef.JCEFHtmlPanel
import org.cef.browser.CefBrowser
import org.cef.handler.CefLoadHandlerAdapter
import java.awt.BorderLayout
import java.beans.PropertyChangeListener
import javax.swing.JComponent
import javax.swing.JEditorPane
class HTMLFileEditor(private val vFile: VirtualFile) : FileEditor {
private val component: JComponent =
ScrollPaneFactory.createScrollPane(
JEditorPane().also {
it.editorKit = UIUtil.getHTMLEditorKit()
it.text = VfsUtil.loadText(vFile)
it.border = JBUI.Borders.empty(8, 12)
it.isEditable = false
})
class HTMLFileEditor : FileEditor {
private val htmlPanelComponent = JCEFHtmlPanel(null)
private val loadingPanel = JBLoadingPanel(BorderLayout(), this).apply { setLoadingText(CommonBundle.getLoadingTreeNodeText()) }
override fun getComponent(): JComponent = component
override fun getPreferredFocusedComponent() = component
private val multiPanel: MultiPanel = object : MultiPanel() {
override fun create(key: Int) = when (key) {
LOADING_KEY -> loadingPanel
CONTENT_KEY -> htmlPanelComponent.component
else -> throw UnsupportedOperationException("Unknown key")
}
}
var url: String = "about:blank"
set(value) {
field = value
htmlPanelComponent.loadURL(value)
multiPanel.select(CONTENT_KEY, true)
}
init {
htmlPanelComponent.jbCefClient.addLoadHandler(object : CefLoadHandlerAdapter() {
override fun onLoadingStateChange(browser: CefBrowser?, isLoading: Boolean, canGoBack: Boolean, canGoForward: Boolean) {
if (isLoading) {
invokeLater {
loadingPanel.startLoading()
multiPanel.select(LOADING_KEY, true)
}
}
else {
invokeLater {
loadingPanel.stopLoading()
multiPanel.select(CONTENT_KEY, true)
}
}
}
}, htmlPanelComponent.cefBrowser)
}
override fun getComponent() = multiPanel
override fun getPreferredFocusedComponent() = multiPanel
override fun getName() = "HTML Preview"
override fun setState(state: FileEditorState) {}
override fun isModified(): Boolean = false
@@ -36,4 +65,9 @@ class HTMLFileEditor(private val vFile: VirtualFile) : FileEditor {
override fun removePropertyChangeListener(listener: PropertyChangeListener) {}
override fun getCurrentLocation(): FileEditorLocation? = null
override fun dispose() {}
companion object {
const val LOADING_KEY = 1
const val CONTENT_KEY = 0
}
}
@@ -13,8 +13,10 @@ import com.intellij.openapi.application.*;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.application.impl.ApplicationImpl;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.impl.HTMLEditorProvider;
import com.intellij.openapi.fileEditor.impl.HTMLFileEditor;
import com.intellij.openapi.progress.PerformInBackgroundOption;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
@@ -32,6 +34,7 @@ import com.intellij.util.SystemProperties;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.text.DateFormatUtil;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -101,7 +104,11 @@ final class UpdateInfoDialog extends AbstractUpdateDialog {
String title = IdeBundle.message("update.whats.new.file.name", ApplicationInfo.getInstance().getFullVersion());
LightVirtualFile file = new LightVirtualFile(title, myNewBuild.getMessage());
file.putUserData(HTMLEditorProvider.Companion.getHTML_CONTENT_TYPE(), true);
FileEditorManager.getInstance(project).openFile(file, true);
FileEditor[] fileEditors = FileEditorManager.getInstance(project).openFile(file, true);
if (fileEditors.length > 0 && fileEditors[0] instanceof HTMLFileEditor) {
((HTMLFileEditor)fileEditors[0])
.setUrl(myNewBuild.getBlogPost() + "/?var=embed" + (UIUtil.isUnderDarcula() ? "&theme=dark" : ""));
}
close(OK_EXIT_CODE);
}
};