77import gr .sqlbrowserfx .utils .JavaFXUtils ;
88import javafx .scene .control .ContextMenu ;
99import javafx .scene .control .MenuItem ;
10+ import javafx .scene .control .SeparatorMenuItem ;
1011import javafx .scene .input .Clipboard ;
1112import javafx .scene .input .ClipboardContent ;
1213import javafx .scene .input .KeyCode ;
@@ -77,8 +78,16 @@ public class ChatGptWebView extends BorderPane implements ContextMenuOwner, Inpu
7778 btn.click();
7879 })();
7980 """ ;
80-
81- private final WebView webView = new WebView ();;
81+
82+ private final String getLastCodeJs = """
83+ (function() {
84+ const codeElements = document.querySelectorAll('code');
85+ const lastCode = codeElements[codeElements.length - 1];
86+ return lastCode.textContent;
87+ })();
88+ """ ;
89+
90+ private final WebView webView = new WebView ();
8291
8392 public ChatGptWebView () {
8493 var webEngine = webView .getEngine ();
@@ -92,6 +101,7 @@ public ChatGptWebView() {
92101
93102 this .setContextMenu ();
94103 this .setInputMap ();
104+
95105 this .setCenter (webView );
96106 }
97107
@@ -152,6 +162,10 @@ private void clickAskButton() {
152162 this .getEngine ().executeScript (this .clickAskButtonJs );
153163 }
154164
165+ public String getAiGeneratedCode () {
166+ return (String ) this .getEngine ().executeScript (this .getLastCodeJs );
167+ }
168+
155169 private void copySelectedTextToClipoboard () {
156170 var text = (String ) webView .getEngine ().executeScript (this .selectedTextJs );
157171 var clipboard = Clipboard .getSystemClipboard ();
@@ -160,15 +174,26 @@ private void copySelectedTextToClipoboard() {
160174 clipboard .setContent (content );
161175 }
162176
177+ private void copyLastCodeBlockToClipboard () {
178+ var text = (String ) webView .getEngine ().executeScript (this .getLastCodeJs );
179+ var clipboard = Clipboard .getSystemClipboard ();
180+ var content = new ClipboardContent ();
181+ content .putString (text );
182+ clipboard .setContent (content );
183+ }
184+
163185 @ Override
164186 public ContextMenu createContextMenu () {
165187 var copySelectedHtmlText = new MenuItem ("Copy Selected Text" , JavaFXUtils .createIcon ("/icons/copy.png" ));
166188 copySelectedHtmlText .setOnAction (copyAction -> this .copySelectedTextToClipoboard ());
167189
190+ var copyLastCodeBlock = new MenuItem ("Copy Last Code Block" , JavaFXUtils .createIcon ("/icons/var.png" ));
191+ copyLastCodeBlock .setOnAction (copyAction -> this .copyLastCodeBlockToClipboard ());
192+
168193 var refresh = new MenuItem ("Refresh" , JavaFXUtils .createIcon ("/icons/refresh.png" ));
169194 refresh .setOnAction (copyAction -> this .getEngine ().reload ());
170195
171- return new ContextMenu (copySelectedHtmlText , refresh );
196+ return new ContextMenu (copySelectedHtmlText , copyLastCodeBlock , new SeparatorMenuItem (), refresh );
172197 }
173198
174199}
0 commit comments