Code Editor

TsgcHTMLComponent_CodeEditor : un éditeur de code pour pages web, construit sur CodeMirror 6. Il colore SQL, JSON, JavaScript, HTML, CSS, XML, Markdown, Python et Pascal, replie les blocs, recherche et remplace, complète le SQL avec les tables et les colonnes de votre schéma et signale les erreurs JSON pendant la saisie. Son texte est envoyé avec le formulaire comme un textarea, en Delphi, C++ Builder et .NET.

TsgcHTMLComponent_CodeEditor

Définissez le Language et placez son HTML dans un formulaire. Le texte vit dans un <textarea> que le formulaire envoie comme n'importe quel autre champ, de sorte que l'éditeur n'a besoin d'aucun code propre et fonctionne encore comme un simple textarea sans JavaScript. L'événement facultatif OnChange envoie le texte au serveur pendant que l'utilisateur tape.

Classe du composant

TsgcHTMLComponent_CodeEditor, un éditeur de code dont le texte est un champ de formulaire envoyé

Rendu

Un éditeur CodeMirror 6 au-dessus d'un <textarea>. La bibliothèque est intégrée aux ressources du composant et servie par le moteur sous /codemirror.min.js, sans CDN

Langages

Delphi, C++ Builder, .NET

Un éditeur SQL dans un formulaire, un JSON vérifié sur le serveur

SQLSchema donne à la complétion les tables et les colonnes de votre base de données. À l'envoi, GetValueFromRequest lit le texte de l'éditeur et ValidateJSONValue vérifie le JSON avant que vous ne le stockiez.

uses
  sgcHTML_Component_CodeEditor;

// a SQL editor in a form
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>';

// a JSON settings editor that grows with the text
oSettings := TsgcHTMLComponent_CodeEditor.Create(Self);
oSettings.Name := 'settings';
oSettings.Language := celJSON;
oSettings.CSSHeight := 'auto';
oSettings.CSSMaxHeight := '400px';
oSettings.Value := LoadSettings;

// the post of the settings form
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;
@* a SQL editor and a JSON editor in one form *@
<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;

// a SQL editor in a form
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;

// a JSON settings editor that grows with the text
var settings = new TsgcHTMLComponent_CodeEditor();
settings.Name = "settings";
settings.Language = TsgcHTMLCodeEditorLanguage.celJSON;
settings.CSSHeight = "auto";
settings.CSSMaxHeight = "400px";
settings.Value = LoadSettings();

// the post of the settings form
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>";
}

Ce que vos utilisateurs obtiennent

L'éditeur d'un IDE de bureau dans une page web, et un champ que vos formulaires envoient sans code propre.

Dix langages

Language sélectionne SQL, JSON, JavaScript, HTML avec son CSS et son JavaScript intégrés, CSS, XML, Markdown, Python, Pascal ou texte brut. Chaque langage est coloré, SQL ajoute la complétion et JSON ajoute une vérification de la syntaxe.

Complétion SQL et dialectes

SQLDialect sélectionne les mots-clés, les types, les fonctions et la citation des identifiants de SQL standard, PostgreSQL, MySQL, Microsoft SQL Server (T-SQL) ou SQLite. SQLSchema liste vos tables et colonnes, et SQLSchemaGrid ajoute les colonnes d'une Grid comme une table de plus. Tapez un nom de table et un point pour voir ses colonnes, ou appuyez sur Ctrl+Espace.

Vérification de la syntaxe JSON

Avec ValidateJSON, l'éditeur signale les erreurs de syntaxe JSON pendant la saisie, et la liste d'erreurs indique ce qui ne va pas. Sur le serveur, ValidateJSONValue vérifie le texte envoyé et renvoie l'erreur, de sorte qu'un fichier de paramètres cassé n'atteint jamais votre stockage.

Rechercher, remplacer et aller à la ligne

Ctrl+F ouvre le panneau de recherche et de remplacement en haut de l'éditeur, avec les options de casse, d'expression régulière et de mot entier, remplacer et tout remplacer. F3 et Maj+F3 trouvent l'occurrence suivante et la précédente, et Ctrl+Alt+G va à une ligne.

Repli et édition

Numéros de ligne, ligne active en surbrillance et gouttière de repli, chacun activé ou désactivé avec LineNumbers, HighlightActiveLine et FoldGutter. Ctrl+Maj+[ et Ctrl+Maj+] replient et déplient le bloc au curseur, Tab indente de TabSize espaces, et Ctrl+Z et Ctrl+Y annulent et rétablissent. WordWrap replie les longues lignes.

Fonctionne dans n'importe quel formulaire

L'éditeur copie chaque modification dans son textarea et déclenche un événement input, de sorte qu'un formulaire envoie le texte courant et que les bibliothèques de formulaires voient le changement. Un clic sur son libellé place le focus dans l'éditeur. Avec Required, le navigateur, et la validation d'un Form, n'envoient pas le formulaire tant que l'éditeur est vide.

Clair et sombre

Theme cetAuto suit le data-bs-theme de la page, avec le thème One Dark de CodeMirror lorsqu'il est sombre, et change de couleurs immédiatement quand le thème bascule. cetLight et cetDark fixent les couleurs. CSSHeight définit une hauteur fixe, ou auto pour grandir avec le texte entre CSSMinHeight et CSSMaxHeight.

Accessibilité

Le textarea et la zone d'édition partagent le nom accessible de AriaLabel, ou Éditeur de code issu de la locale, et signalent la lecture seule et le caractère obligatoire. Dans l'éditeur, Tab indente, donc Échap puis Tab sort le focus. Sur macOS, Cmd remplace Ctrl.

Propriétés, méthodes & événements clés

Les membres que vous utiliserez le plus souvent.

Value et le champ envoyé

Value est le texte de l'éditeur. Le textarea est envoyé sous FieldName, sinon sous le Name du composant, sinon sous code (GetFieldName). Sur le serveur, GetValueFromRequest renvoie le texte envoyé et LoadFromRequest en déduit Value. Un envoi de formulaire transmet les sauts de ligne en CRLF, la règle des navigateurs pour un textarea.

OnChange

OnChange(Sender, aValue, aResponse) reçoit le texte ChangeDelay ms (500 par défaut) après que l'utilisateur a cessé de taper, via les événements de composants du HTMXEngine, ou de votre propre route avec ActionURL et DispatchComponentEvent. Le navigateur n'envoie que lorsque le gestionnaire est affecté et que l'éditeur n'est pas ReadOnly, et htmx insère le HTML que vous renvoyez lorsque ses éléments sont marqués hx-swap-oob="true".

API JavaScript

window.sgcHTMLCodeEditor propose get(id), setValue(id, text), focus(id) et scan(node). Les éditeurs présents dans le contenu que htmx insère sont créés, et ceux que htmx retire sont détruits, sans code de votre part.

Une bibliothèque par page

CodeMirror 6 est intégré aux ressources du composant et servi par le moteur sous /codemirror.min.js. Le navigateur le charge une fois par page, seulement sur les pages qui ont un éditeur, quel que soit leur nombre d'éditeurs. S'il ne peut pas se charger, chaque éditeur de la page reste un simple textarea et le formulaire l'envoie quand même. CodeMirror est publié sous licence MIT.

Localisation

Le panneau de recherche et de remplacement, l'invite d'aller à la ligne, les marqueurs de repli, la liste de complétion et les erreurs JSON tirent leurs textes de la locale de la bibliothèque, dans les 17 langues qu'elle fournit.

Limites

OnChange envoie le texte entier via le point de terminaison des événements serveur, dont la limite de corps est de 64 Ko. Utilisez-le pour de petits textes, et lisez les gros textes depuis l'envoi du formulaire. Un composant sert tous les utilisateurs : lisez le texte envoyé avec GetValueFromRequest et ne modifiez pas le composant dans OnChange.

ASP.NET Core

Dans une vue Razor, le Tag Helper <sgc-code-editor> rend l'éditeur. Le premier rendu crée un composant par moteur et par nom, et chaque rendu redéfinit ses propriétés à partir des attributs. name est obligatoire, et le Tag Helper n'a pas d'attribut pour SQLSchemaGrid : listez les colonnes de la grille dans sql-schema.

La démo

Demos\60.HTML\01.RunTime\30.CodeEditor est la sgc Admin Console, un serveur sur le port 8132 : une console SQL avec complétion du schéma qui exécute des requêtes sur le serveur vers une Grid, des paramètres JSON validés sur le serveur et appliqués en direct dans chaque navigateur, et un visualiseur d'extraits en lecture seule. Les versions design time, Lazarus et .NET en sont le miroir.

Continuez l'exploration

Essayer en ligneVoyez-le dans la démo Éditeur de code, en fonctionnement direct sur le serveur de démos d'eSeGeCe.
Aide en ligneRéférence API complète et guide d'utilisation pour ce composant.
Composant Rich EditorL'éditeur WYSIWYG pour le texte mis en forme, envoyé avec le formulaire de la même manière.
Tous les composants sgcHTMLParcourez la matrice complète des fonctionnalités de plus de 80 composants.
Télécharger la version d'essai gratuiteLa version d'essai de 30 jours fournit les projets de démonstration 60.HTML.
TarifsLicences Single, Team et Site avec code source complet.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à démarrer ?

Téléchargez la version d'essai gratuite et commencez à créer des interfaces web en Delphi, C++ Builder et .NET.