Code Editor

TsgcHTMLComponent_CodeEditor: CodeMirror 6 をベースにした、Web ページ向けのコードエディターです。SQL、JSON、JavaScript、HTML、CSS、XML、Markdown、Python、Pascal を構文ハイライトし、ブロックを折りたたみ、検索と置換を行い、スキーマのテーブルと列で SQL を補完し、入力中に JSON のエラーを示します。テキストは textarea のようにフォームと一緒に送信されます。Delphi、C++ Builder、.NET で利用できます。

TsgcHTMLComponent_CodeEditor

Language を設定し、その HTML をフォームの中に置きます。テキストは <textarea> に保持され、フォームが他のフィールドと同様に送信するため、エディターに独自のコードは不要で、JavaScript がなくても通常の textarea として動作します。省略可能な OnChange イベントは、ユーザーの入力中にテキストをサーバーへ送信します。

コンポーネントクラス

TsgcHTMLComponent_CodeEditor、テキストが送信されるフォームフィールドになるコードエディターです

レンダリング内容

<textarea> 上の CodeMirror 6 エディターです。ライブラリはコンポーネントのリソースに埋め込まれ、エンジンが /codemirror.min.js として配信するため、CDN は不要です

ファミリー

フォーム & 入力

言語

Delphi, C++ Builder, .NET

フォーム内の SQL エディターと、サーバーで検証する JSON

SQLSchema は補完にデータベースのテーブルと列を与えます。送信時には、GetValueFromRequest がエディターのテキストを読み取り、ValidateJSONValue が保存する前に JSON を検証します。

uses
  sgcHTML_Component_CodeEditor;

// フォーム内の SQL エディター
oSQL := TsgcHTMLComponent_CodeEditor.Create(Self);
oSQL.Name := 'query';
oSQL.Language := celSQL;
oSQL.SQLDialect := cesPostgreSQL;
oSQL.SQLSchema.Add('customers=id,name,email,country');
oSQL.SQLSchema.Add('orders=id,customer_id,total,created_at');
oSQL.Placeholder := 'SELECT ...';
oSQL.CSSHeight := '240px';
oSQL.Required := True;
sHtml := '<form method="post" action="/report">' + oSQL.HTML +
  '<button type="submit" class="btn btn-primary mt-2">Run</button></form>';

// テキストに合わせて伸びる JSON 設定エディター
oSettings := TsgcHTMLComponent_CodeEditor.Create(Self);
oSettings.Name := 'settings';
oSettings.Language := celJSON;
oSettings.CSSHeight := 'auto';
oSettings.CSSMaxHeight := '400px';
oSettings.Value := LoadSettings;

// 設定フォームの送信
procedure TForm1.SaveSettingsPost(const aParams: TStrings; var aResponse: string);
var
  vJSON, vError: string;
begin
  vJSON := oSettings.GetValueFromRequest(aParams);
  if oSettings.ValidateJSONValue(vJSON, vError) then
  begin
    SaveSettings(vJSON);
    aResponse := '<div class="alert alert-success">Saved</div>';
  end
  else
    aResponse := '<div class="alert alert-danger">' + sgcHTMLEncode(vError) + '</div>';
end;
@* 1 つのフォームに SQL エディターと JSON エディター *@
<form method="post">
  <label for="query_input" class="form-label">Query</label>
  <sgc-code-editor name="query" language="sql" sql-dialect="postgresql"
                   sql-schema="customers=id,name,email;orders=id,customer_id,total"
                   value="@Model.Query" css-height="240px" required="true" />
  <sgc-code-editor name="settings" language="json" css-height="auto"
                   css-max-height="400px" value="@Model.Settings"
                   on-change="Model.SettingsChanged" />
  <button type="submit" class="btn btn-primary mt-2">Save</button>
</form>
using esegece.sgcWebSockets;

// フォーム内の SQL エディター
var sql = new TsgcHTMLComponent_CodeEditor();
sql.Name = "query";
sql.Language = TsgcHTMLCodeEditorLanguage.celSQL;
sql.SQLDialect = TsgcHTMLCodeEditorSQLDialect.cesPostgreSQL;
sql.SQLSchema.Add("customers=id,name,email,country");
sql.SQLSchema.Add("orders=id,customer_id,total,created_at");
sql.CSSHeight = "240px";
sql.Required = true;

// テキストに合わせて伸びる JSON 設定エディター
var settings = new TsgcHTMLComponent_CodeEditor();
settings.Name = "settings";
settings.Language = TsgcHTMLCodeEditorLanguage.celJSON;
settings.CSSHeight = "auto";
settings.CSSMaxHeight = "400px";
settings.Value = LoadSettings();

// 設定フォームの送信
string SaveSettingsPost(IReadOnlyList<string> fields)
{
    string json = settings.GetValueFromRequest(fields);
    if (settings.ValidateJSONValue(json, out string error))
    {
        SaveSettings(json);
        return "<div class=\"alert alert-success\">Saved</div>";
    }
    return "<div class=\"alert alert-danger\">" + WebUtility.HtmlEncode(error) + "</div>";
}

ユーザーが得られるもの

デスクトップ IDE のエディターを Web ページの中に、そしてフォームが独自のコードなしで送信するフィールドとして。

10 種類の言語

Language は、SQL、JSON、JavaScript、CSS と JavaScript を埋め込んだ HTML、CSS、XML、Markdown、Python、Pascal、またはプレーンテキストを選びます。どの言語も構文ハイライトされ、SQL は補完、JSON は構文チェックが加わります。

SQL 補完とダイアレクト

SQLDialect は、標準 SQL、PostgreSQL、MySQL、Microsoft SQL Server (T-SQL)、SQLite のキーワード、型、関数、識別子の引用符を選びます。SQLSchema はテーブルと列を列挙し、SQLSchemaGrid は Grid の列をもう 1 つのテーブルとして追加します。テーブル名とドットを入力するか、Ctrl+Space を押すと、その列が表示されます。

JSON 構文チェック

ValidateJSON を使うと、エディターはユーザーの入力中に JSON の構文エラーを示し、エラーリストに問題点が表示されます。サーバーでは ValidateJSONValue が送信されたテキストを検証してエラーを返すため、壊れた設定ファイルがストアに届くことはありません。

検索、置換、行へ移動

Ctrl+F はエディターの上部に検索と置換のパネルを開き、大文字小文字の区別、正規表現、単語単位のオプション、置換、すべて置換があります。F3 と Shift+F3 は次と前の一致を検索し、Ctrl+Alt+G は指定した行へ移動します。

折りたたみと編集

行番号、強調表示されたアクティブ行、折りたたみガターは、それぞれ LineNumbers、HighlightActiveLine、FoldGutter でオンとオフを切り替えます。Ctrl+Shift+[ と Ctrl+Shift+] はカーソル位置のブロックを折りたたみと展開し、Tab は TabSize 個のスペースでインデントし、Ctrl+Z と Ctrl+Y は元に戻すとやり直しです。WordWrap は長い行を折り返します。

あらゆるフォームで動作

エディターはすべての変更を textarea にコピーして input イベントを発生させるため、フォームは現在のテキストを送信し、フォームライブラリも変更を認識します。ラベルをクリックすると、フォーカスがエディターに移ります。Required を使うと、エディターが空の間は、ブラウザーと Form の検証がフォームを送信しません。

ライトとダーク

Theme の cetAuto はページの data-bs-theme に従い、ダークのときは CodeMirror の One Dark テーマを使い、テーマが切り替わると直ちに色を変えます。cetLight と cetDark は色を固定します。CSSHeight は固定の高さを設定するか、auto にして CSSMinHeight と CSSMaxHeight の間でテキストに合わせて伸びます。

アクセシビリティ

textarea と編集領域は AriaLabel、またはロケールの「コードエディタ」というアクセシブル名を共有し、読み取り専用と必須を通知します。エディター内では Tab がインデントになるため、Esc の後に Tab を押すとフォーカスが外へ移ります。macOS では Ctrl の代わりに Cmd を使います。

主なプロパティ、メソッド、イベント

最もよく使うメンバーです。

Value と送信されるフィールド

Value はエディターのテキストです。textarea は FieldName で送信され、なければコンポーネントの Name、それもなければ code (GetFieldName) で送信されます。サーバーでは GetValueFromRequest が送信されたテキストを返し、LoadFromRequest がそれから Value を設定します。フォームの送信では、ブラウザーの textarea の規則どおり、改行は CRLF で送られます。

OnChange

OnChange(Sender, aValue, aResponse) は、ユーザーの入力が止まってから ChangeDelay ミリ秒 (既定は 500) 後に、HTMXEngine のコンポーネントイベント、または ActionURL と DispatchComponentEvent を使う独自のルートを通じてテキストを受け取ります。ブラウザーはハンドラーが割り当てられていて、エディターが ReadOnly でない間だけ送信し、返された HTML は、その要素に hx-swap-oob="true" が付いていれば htmx が差し替えます。

JavaScript API

window.sgcHTMLCodeEditor は get(id)、setValue(id, text)、focus(id)、scan(node) を提供します。htmx が差し込んだコンテンツ内のエディターは作成され、htmx が削除したエディターは破棄され、独自のコードは不要です。

ページごとに 1 つのライブラリ

CodeMirror 6 はコンポーネントのリソースに埋め込まれ、エンジンが /codemirror.min.js として配信します。ブラウザーは、エディターがあるページでのみ、エディターの数に関係なくページごとに 1 回読み込みます。読み込めない場合、ページのすべてのエディターは通常の textarea のままで、フォームは引き続きそれを送信します。CodeMirror は MIT ライセンスで公開されています。

ローカライズ

検索と置換のパネル、行へ移動のプロンプト、折りたたみマーカー、補完リスト、JSON のエラーは、ライブラリが提供する 17 言語のロケールからテキストを取得します。

制限

OnChange はテキスト全体をサーバーイベントエンドポイントに送信し、そのボディの上限は 64 KB です。小さなテキストに使用し、大きなテキストはフォームの送信から読み取ってください。1 つのコンポーネントがすべてのユーザーに対応します。送信されたテキストは GetValueFromRequest で読み取り、OnChange の中でコンポーネントを変更しないでください。

ASP.NET Core

Razor ビューでは、<sgc-code-editor> Tag Helper がエディターをレンダリングします。最初のレンダリングでエンジンと名前ごとに 1 つのコンポーネントが作成され、レンダリングのたびに属性からプロパティが再設定されます。name は必須で、Tag Helper には SQLSchemaGrid に対応する属性がないため、グリッドの列は sql-schema に列挙してください。

デモ

Demos\60.HTML\01.RunTime\30.CodeEditor は sgc Admin Console で、ポート 8132 のサーバーです。スキーマ補完付きの SQL コンソールがサーバーでクエリを実行して Grid に表示し、JSON 設定はサーバーで検証されてすべてのブラウザーにライブで適用され、読み取り専用のスニペットビューアもあります。デザイン時、Lazarus、.NET の各バージョンも同様の内容です。

さらに詳しく

オンラインで試すeSeGeCe デモサーバーでライブ動作する コードエディター デモをご覧ください。
オンラインヘルプこのコンポーネントの完全な API リファレンスと使い方ガイドです。
Rich Editor コンポーネント書式付きテキストのための WYSIWYG エディターで、同じようにフォームと一緒に送信されます。
すべての sgcHTML コンポーネント80 以上のコンポーネントの機能マトリックスをすべてご覧いただけます。
無料体験版のダウンロード30 日間の体験版には 60.HTML のデモプロジェクトが含まれます。
価格完全なソースコード付きの Single、Team、Site ライセンス。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

始める準備はできましたか?

無料体験版をダウンロードして、Delphi、C++ Builder、.NET で Web UI の構築を始めましょう。