|
@@ -14,7 +14,7 @@ uses
|
|
|
cxButtons, dxSkinscxPCPainter,
|
|
|
dxBarBuiltInMenu, cxPC, System.ImageList, Vcl.ImgList, cxCheckBox, cxImageList,
|
|
|
SynEdit, SynHighlighterJSON, SynEditHighlighter, SynHighlighterIni,
|
|
|
- SynHighlighterXML;
|
|
|
+ SynHighlighterXML, SynHighlighterHtml;
|
|
|
|
|
|
type
|
|
|
TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
|
|
@@ -103,6 +103,8 @@ type
|
|
|
pmnuFormatXML: TdxBarButton;
|
|
|
pmnuCompactXML: TdxBarButton;
|
|
|
pmnuBiggerEditor: TdxBarButton;
|
|
|
+ btnPasteFullURL: TcxButton;
|
|
|
+ SynHTMLSyn: TSynHTMLSyn;
|
|
|
procedure FormShow(Sender: TObject);
|
|
|
procedure FormCreate(Sender: TObject);
|
|
|
procedure FormDestroy(Sender: TObject);
|
|
@@ -152,6 +154,20 @@ type
|
|
|
procedure pmnuCompactXMLClick(Sender: TObject);
|
|
|
procedure comboPostContentTypePropertiesChange(Sender: TObject);
|
|
|
procedure pmnuBiggerEditorClick(Sender: TObject);
|
|
|
+ procedure EditorContentKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+ procedure edtFullURLPropertiesChange(Sender: TObject);
|
|
|
+ procedure btnPasteFullURLClick(Sender: TObject);
|
|
|
+ procedure EditorResponseHeadersKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+ procedure EditorURLParamsKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+ procedure EditorExtraHeadersKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+ procedure EditorPostDataKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+ procedure EditorEnter(Sender: TObject);
|
|
|
+ procedure EditorExit(Sender: TObject);
|
|
|
private
|
|
|
FProjectConfig: TJSONConfig;
|
|
|
FActiveProject: string;
|
|
@@ -186,8 +202,8 @@ implementation
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
-uses System.NetEncoding, System.UITypes, _EncryptStr, JsonDataObjects, Clipbrd, IdGlobal, System.IOUtils, uRwXmlDOM,
|
|
|
- _frmBiggerEditor;
|
|
|
+uses System.NetEncoding, System.UITypes, _EncryptStr, JsonDataObjects, IdGlobal, System.IOUtils, uRwXmlDOM,
|
|
|
+ _frmBiggerEditor, IdUri;
|
|
|
|
|
|
procedure TfrmMain.tbbtnRunClick(Sender: TObject);
|
|
|
begin
|
|
@@ -208,59 +224,6 @@ end;
|
|
|
|
|
|
procedure TfrmMain.UpdateEditor(const AText: string);
|
|
|
begin
|
|
|
- if ActiveEditor = EditorContent then
|
|
|
- begin
|
|
|
- if Pos('application/json', HTTP.Response.ContentType) > 0 then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := SynJSONSyn;
|
|
|
- end
|
|
|
- else
|
|
|
- if Pos('text/xml', HTTP.Response.ContentType) > 0 then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := SynXMLSyn;
|
|
|
- end
|
|
|
- else
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := nil;
|
|
|
- end;
|
|
|
- end
|
|
|
- else
|
|
|
- if ActiveEditor = EditorURLParams then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := SynIniSyn;
|
|
|
- end
|
|
|
- else
|
|
|
- if ActiveEditor = EditorExtraHeaders then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := SynIniSyn;
|
|
|
- end
|
|
|
- else
|
|
|
- if ActiveEditor = EditorPostData then
|
|
|
- begin
|
|
|
- if Pos('application/json', comboPostContentType.Text) > 0 then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := SynJSONSyn;
|
|
|
- end
|
|
|
- else
|
|
|
- if Pos('text/xml', comboPostContentType.Text) > 0 then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := SynXMLSyn;
|
|
|
- end
|
|
|
- else
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := nil;
|
|
|
- end;
|
|
|
- end
|
|
|
- else
|
|
|
- if ActiveEditor = EditorResponseHeaders then
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := nil;
|
|
|
- end
|
|
|
- else
|
|
|
- begin
|
|
|
- ActiveEditor.Highlighter := nil;
|
|
|
- end;
|
|
|
-
|
|
|
ActiveEditor.Lines.Text := AText;
|
|
|
end;
|
|
|
|
|
@@ -373,9 +336,17 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TfrmMain.btnPasteFullURLClick(Sender: TObject);
|
|
|
+begin
|
|
|
+ edtFullURL.Clear;
|
|
|
+ edtFullURL.SetFocus;
|
|
|
+ edtFullURL.PasteFromClipboard;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TfrmMain.btnCopyFullURLClick(Sender: TObject);
|
|
|
begin
|
|
|
- Clipboard.SetTextBuf(PChar(edtFullURL.Text));
|
|
|
+ edtFullURL.SelectAll;
|
|
|
+ edtFullURL.CopyToClipboard;
|
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.btnCopyPresetClick(Sender: TObject);
|
|
@@ -422,8 +393,24 @@ end;
|
|
|
|
|
|
procedure TfrmMain.comboPostContentTypePropertiesChange(Sender: TObject);
|
|
|
begin
|
|
|
- ActiveEditor := EditorPostData;
|
|
|
- UpdateEditor(EditorPostData.Lines.Text);
|
|
|
+ if Pos('application/json', comboPostContentType.Text) > 0 then
|
|
|
+ begin
|
|
|
+ EditorPostData.Highlighter := SynJSONSyn;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ if Pos('text/xml', comboPostContentType.Text) > 0 then
|
|
|
+ begin
|
|
|
+ EditorPostData.Highlighter := SynXMLSyn;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ if Pos('text/html', comboPostContentType.Text) > 0 then
|
|
|
+ begin
|
|
|
+ EditorPostData.Highlighter := SynHTMLSyn;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ EditorPostData.Highlighter := nil;
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.comboPresetsPropertiesChange(Sender: TObject);
|
|
@@ -440,6 +427,7 @@ end;
|
|
|
procedure TfrmMain.pmnuBiggerEditorClick(Sender: TObject);
|
|
|
begin
|
|
|
frmBiggerEditor.ShowModal;
|
|
|
+ UpdateFullURL;
|
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.pmnuCompactJsonClick(Sender: TObject);
|
|
@@ -454,6 +442,7 @@ begin
|
|
|
if ActiveEditor.Lines[0][1] = '{' then
|
|
|
begin
|
|
|
jo := TJsonObject.Create;
|
|
|
+ Screen.Cursor := crHourGlass;
|
|
|
try
|
|
|
try
|
|
|
jo.FromJSON(ActiveEditor.Lines.Text);
|
|
@@ -465,6 +454,7 @@ begin
|
|
|
end;
|
|
|
UpdateEditor(jo.ToJSON(True));
|
|
|
finally
|
|
|
+ Screen.Cursor := crDefault;
|
|
|
jo.Free;
|
|
|
end;
|
|
|
end
|
|
@@ -472,6 +462,7 @@ begin
|
|
|
if ActiveEditor.Lines[0][1] = '[' then
|
|
|
begin
|
|
|
ja := TJsonArray.Create;
|
|
|
+ Screen.Cursor := crHourGlass;
|
|
|
try
|
|
|
try
|
|
|
ja.FromJSON(ActiveEditor.Lines.Text);
|
|
@@ -483,6 +474,7 @@ begin
|
|
|
end;
|
|
|
UpdateEditor(ja.ToJSON(True));
|
|
|
finally
|
|
|
+ Screen.Cursor := crDefault;
|
|
|
ja.Free;
|
|
|
end;
|
|
|
end;
|
|
@@ -600,6 +592,26 @@ begin
|
|
|
btnSave.Enabled := not FIsTempProjectLoaded;
|
|
|
end;
|
|
|
|
|
|
+procedure TfrmMain.EditorEnter(Sender: TObject);
|
|
|
+begin
|
|
|
+ (Sender as TSynEdit).ActiveLineColor := $00E6FFFA;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TfrmMain.EditorExit(Sender: TObject);
|
|
|
+begin
|
|
|
+ (Sender as TSynEdit).ActiveLineColor := clNone;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TfrmMain.EditorContentKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+begin
|
|
|
+ if Key = vkF11 then
|
|
|
+ begin
|
|
|
+ ActiveEditor := EditorContent;
|
|
|
+ pmnuBiggerEditorClick(Sender);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TfrmMain.EditorContentMouseUp(Sender: TObject; Button: TMouseButton;
|
|
|
Shift: TShiftState; X, Y: Integer);
|
|
|
begin
|
|
@@ -610,6 +622,16 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TfrmMain.EditorExtraHeadersKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+begin
|
|
|
+ if Key = vkF11 then
|
|
|
+ begin
|
|
|
+ ActiveEditor := EditorExtraHeaders;
|
|
|
+ pmnuBiggerEditorClick(Sender);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TfrmMain.EditorExtraHeadersMouseUp(Sender: TObject;
|
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
|
begin
|
|
@@ -620,6 +642,16 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TfrmMain.EditorResponseHeadersKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+begin
|
|
|
+ if Key = vkF11 then
|
|
|
+ begin
|
|
|
+ ActiveEditor := EditorResponseHeaders;
|
|
|
+ pmnuBiggerEditorClick(Sender);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TfrmMain.EditorResponseHeadersMouseUp(Sender: TObject; Button: TMouseButton;
|
|
|
Shift: TShiftState; X, Y: Integer);
|
|
|
begin
|
|
@@ -630,6 +662,16 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TfrmMain.EditorPostDataKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+begin
|
|
|
+ if Key = vkF11 then
|
|
|
+ begin
|
|
|
+ ActiveEditor := EditorPostData;
|
|
|
+ pmnuBiggerEditorClick(Sender);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TfrmMain.EditorPostDataMouseUp(Sender: TObject; Button: TMouseButton;
|
|
|
Shift: TShiftState; X, Y: Integer);
|
|
|
begin
|
|
@@ -645,6 +687,16 @@ begin
|
|
|
UpdateFullURL;
|
|
|
end;
|
|
|
|
|
|
+procedure TfrmMain.EditorURLParamsKeyUp(Sender: TObject; var Key: Word;
|
|
|
+ Shift: TShiftState);
|
|
|
+begin
|
|
|
+ if Key = vkF11 then
|
|
|
+ begin
|
|
|
+ ActiveEditor := EditorURLParams;
|
|
|
+ pmnuBiggerEditorClick(Sender);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TfrmMain.EditorURLParamsMouseUp(Sender: TObject; Button: TMouseButton;
|
|
|
Shift: TShiftState; X, Y: Integer);
|
|
|
begin
|
|
@@ -657,7 +709,26 @@ end;
|
|
|
|
|
|
procedure TfrmMain.edtBaseURLPropertiesChange(Sender: TObject);
|
|
|
begin
|
|
|
- UpdateFullURL;
|
|
|
+ if edtBaseURL.Focused then
|
|
|
+ begin
|
|
|
+ UpdateFullURL;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TfrmMain.edtFullURLPropertiesChange(Sender: TObject);
|
|
|
+var
|
|
|
+ uri: TIdURI;
|
|
|
+begin
|
|
|
+ if edtFullURL.Focused then
|
|
|
+ begin
|
|
|
+ uri := TIdURI.Create(edtFullURL.Text);
|
|
|
+ try
|
|
|
+ EditorURLParams.Lines.Text := StringReplace(uri.Params, '&', #13#10, [rfReplaceAll]);
|
|
|
+ edtBaseURL.Text := StringReplace(edtFullURL.Text, '?' + uri.Params, '', [rfReplaceAll]);
|
|
|
+ finally
|
|
|
+ uri.Free;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
@@ -946,6 +1017,15 @@ begin
|
|
|
pmnuFormatXML.Visible := ivNever;
|
|
|
pmnuCompactXML.Visible := ivNever;
|
|
|
end;
|
|
|
+
|
|
|
+ if ActiveEditor = frmBiggerEditor.EditorBiggerEditor then
|
|
|
+ begin
|
|
|
+ pmnuBiggerEditor.Visible := ivNever;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ pmnuBiggerEditor.Visible := ivAlways;
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.pmnuFormatJsonContentClick(Sender: TObject);
|
|
@@ -960,6 +1040,7 @@ begin
|
|
|
if ActiveEditor.Lines[0][1] = '{' then
|
|
|
begin
|
|
|
jo := TJsonObject.Create;
|
|
|
+ Screen.Cursor := crHourGlass;
|
|
|
try
|
|
|
try
|
|
|
jo.FromJSON(ActiveEditor.Lines.Text);
|
|
@@ -971,6 +1052,7 @@ begin
|
|
|
end;
|
|
|
UpdateEditor(jo.ToJSON(False));
|
|
|
finally
|
|
|
+ Screen.Cursor := crDefault;
|
|
|
jo.Free;
|
|
|
end;
|
|
|
end
|
|
@@ -978,6 +1060,7 @@ begin
|
|
|
if ActiveEditor.Lines[0][1] = '[' then
|
|
|
begin
|
|
|
ja := TJsonArray.Create;
|
|
|
+ Screen.Cursor := crHourGlass;
|
|
|
try
|
|
|
try
|
|
|
ja.FromJSON(ActiveEditor.Lines.Text);
|
|
@@ -989,6 +1072,7 @@ begin
|
|
|
end;
|
|
|
UpdateEditor(ja.ToJSON(False));
|
|
|
finally
|
|
|
+ Screen.Cursor := crDefault;
|
|
|
ja.Free;
|
|
|
end;
|
|
|
end;
|
|
@@ -1067,6 +1151,29 @@ begin
|
|
|
DoGETRequest(mtDELETE);
|
|
|
end;
|
|
|
finally
|
|
|
+
|
|
|
+ if Pos('application/json', HTTP.Response.ContentType) > 0 then
|
|
|
+ begin
|
|
|
+ EditorContent.Highlighter := SynJSONSyn;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ if Pos('text/xml', HTTP.Response.ContentType) > 0 then
|
|
|
+ begin
|
|
|
+ EditorContent.Highlighter := SynXMLSyn;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ if Pos('text/html', HTTP.Response.ContentType) > 0 then
|
|
|
+ begin
|
|
|
+ EditorContent.Highlighter := SynHTMLSyn;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ EditorContent.Highlighter := nil;
|
|
|
+ end;
|
|
|
+
|
|
|
+ EditorContent.SetFocus;
|
|
|
+
|
|
|
+
|
|
|
dxStatusBar.Panels[1].Text := FormatFloat('Response Time: 0, ms', GetTickCount - tick);
|
|
|
dxStatusBar.Panels[2].Text := 'Response Code: ' + HTTP.ResponseCode.ToString;
|
|
|
Screen.Cursor := crDefault;
|