2026-08-26 11:24:13 +00:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Sozsoft.Platform.Editors;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// ListForm alanlarinin DevExtreme editor options JSON'unu uretir.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// Buradaki metotlar hazir bir baslangic dondurur; uzerine
|
|
|
|
|
|
/// <see cref="EditorOptionsBuilder"/> metotlariyla ekleme yapilabilir ve sonuc
|
|
|
|
|
|
/// string'e ortuk donustugu icin dogrudan atanabilir:
|
|
|
|
|
|
///
|
|
|
|
|
|
/// <code>
|
|
|
|
|
|
/// EditorOptions = EditorOptions.ShowClearButton(),
|
|
|
|
|
|
/// EditorOptions = EditorOptions.Number(4).ShowClearButton(),
|
|
|
|
|
|
/// EditorOptions = EditorOptions.Multiline(60).Placeholder("Aciklama"),
|
|
|
|
|
|
/// EditorOptions = EditorOptions.New().Flag("acceptCustomValue", true),
|
|
|
|
|
|
/// </code>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static class EditorOptions
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>Bos baslangic; secenekler elle eklenir.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder New() => new EditorOptionsBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Alan pasif: kullanici degistiremez.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Disabled() => New().Disabled();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Alan salt okunur: deger gorunur ve gonderilir, degistirilemez.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder ReadOnly() => New().ReadOnly();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Temizleme (x) dugmesi.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder ShowClearButton() => New().ShowClearButton();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Cok satirli metin alani icin yukseklik.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Multiline(int height) => New().Height(height);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Sabit ondalikli sayi: bicim, maske davranisi ve artir/azalt dugmeleri.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Number(int precision = 2)
|
|
|
|
|
|
=> New().FixedPointFormat(precision).UseMaskBehavior().ShowSpinButtons();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Yuzde alani.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Percent()
|
|
|
|
|
|
=> New().Format("#0.##'%'").UseMaskBehavior().ShowSpinButtons();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Tarih alani (gun/ay/yil).</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Date()
|
|
|
|
|
|
=> New().Format("dd/MM/yyyy").DisplayFormat("dd/MM/yyyy");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Tarih + saat alani.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder DateTime()
|
|
|
|
|
|
=> New().Format("dd/MM/yyyy HH:mm").DisplayFormat("dd/MM/yyyy HH:mm");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Listeden secilen saat alani.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Time(int intervalMinutes = 5)
|
|
|
|
|
|
=> New()
|
|
|
|
|
|
.Text("type", "time")
|
|
|
|
|
|
.Text("pickerType", "list")
|
|
|
|
|
|
.DisplayFormat("HH:mm")
|
|
|
|
|
|
.DateSerializationFormat("yyyy-MM-ddTHH:mm:ss")
|
|
|
|
|
|
.Number("interval", intervalMinutes)
|
|
|
|
|
|
.Width("100%");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Telefon alani: global bicim, maske ve ornek deger.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Phone(string invalidMessage = "Lütfen geçerli bir telefon numarası girin")
|
|
|
|
|
|
=> New()
|
|
|
|
|
|
.Format("phoneGlobal")
|
|
|
|
|
|
.Mask("(000) 000-0000", invalidMessage)
|
|
|
|
|
|
.Raw("maskRules", "{\"X\":\"[0-9]\"}")
|
|
|
|
|
|
.Placeholder("(555) 123-4567");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Kaydirma cubugu; degeri ipucu olarak gosterir.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder Slider()
|
|
|
|
|
|
=> New().Raw("tooltip", "{\"enabled\":true}");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Gorsel yukleme alani.</summary>
|
|
|
|
|
|
public static EditorOptionsBuilder ImageUpload(bool multiple = true, int width = 80, int height = 80)
|
|
|
|
|
|
=> New().Width(width).Height(height).Flag("multiple", multiple);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>Zengin metin (HTML) editoru; tam arac cubugu ile.</summary>
|
2026-09-28 09:28:56 +00:00
|
|
|
|
/// <remarks>
|
|
|
|
|
|
/// <c>height</c> verilirse editor sabitlenir ve icerik kaydirilir; <c>min-height</c> ise
|
|
|
|
|
|
/// en az yuksekligi korurken yeni satirlarla buyumesine izin verir.
|
|
|
|
|
|
/// </remarks>
|
|
|
|
|
|
public static EditorOptionsBuilder Html(int minHeight = 200)
|
2026-08-26 11:24:13 +00:00
|
|
|
|
=> New()
|
|
|
|
|
|
.Raw("mediaResizing", "{\"enabled\":true}")
|
|
|
|
|
|
.Raw("imageUpload", "{\"tabs\":[\"file\",\"url\"],\"fileUploadMode\":\"base64\"}")
|
|
|
|
|
|
.Raw("toolbar", "{\"multiline\":true,\"items\":[" + string.Join(",", HtmlToolbarItems()) + "]}")
|
|
|
|
|
|
.Flag("encodeHtml", true)
|
2026-09-28 09:28:56 +00:00
|
|
|
|
.Raw("elementAttr", "{\"style\":\"min-height:" + EditorJson.Number(minHeight) + "px\"}");
|
2026-08-26 11:24:13 +00:00
|
|
|
|
|
|
|
|
|
|
private static IEnumerable<string> HtmlToolbarItems()
|
|
|
|
|
|
{
|
|
|
|
|
|
var fontSizes = new[] { "8pt", "10pt", "12pt", "14pt", "18pt", "24pt", "36pt" };
|
|
|
|
|
|
var fontFamilies = new[]
|
|
|
|
|
|
{
|
|
|
|
|
|
"Arial", "Courier New", "Georgia", "Impact",
|
|
|
|
|
|
"Lucida Console", "Tahoma", "Times New Roman", "Verdana"
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
yield return Item("undo");
|
|
|
|
|
|
yield return Item("redo");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Picker("size", fontSizes, "Font size");
|
|
|
|
|
|
yield return Picker("font", fontFamilies, "Font family");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("bold");
|
|
|
|
|
|
yield return Item("italic");
|
|
|
|
|
|
yield return Item("strike");
|
|
|
|
|
|
yield return Item("underline");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("alignLeft");
|
|
|
|
|
|
yield return Item("alignCenter");
|
|
|
|
|
|
yield return Item("alignRight");
|
|
|
|
|
|
yield return Item("alignJustify");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("orderedList");
|
|
|
|
|
|
yield return Item("bulletList");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return "{\"name\":\"header\",\"acceptedValues\":[false,1,2,3,4,5]}";
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("color");
|
|
|
|
|
|
yield return Item("background");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("link");
|
|
|
|
|
|
yield return Item("image");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("clear");
|
|
|
|
|
|
yield return Item("codeBlock");
|
|
|
|
|
|
yield return Item("blockquote");
|
|
|
|
|
|
yield return Item("separator");
|
|
|
|
|
|
yield return Item("insertTable");
|
|
|
|
|
|
yield return Item("deleteTable");
|
|
|
|
|
|
yield return Item("insertRowAbove");
|
|
|
|
|
|
yield return Item("insertRowBelow");
|
|
|
|
|
|
yield return Item("deleteRow");
|
|
|
|
|
|
yield return Item("insertColumnLeft");
|
|
|
|
|
|
yield return Item("insertColumnRight");
|
|
|
|
|
|
yield return Item("deleteColumn");
|
|
|
|
|
|
yield return Item("cellProperties");
|
|
|
|
|
|
yield return Item("tableProperties");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static string Item(string name) => "{\"name\":" + EditorJson.Quote(name) + "}";
|
|
|
|
|
|
|
|
|
|
|
|
private static string Picker(string name, IEnumerable<string> values, string ariaLabel)
|
|
|
|
|
|
=> "{\"name\":" + EditorJson.Quote(name) +
|
|
|
|
|
|
",\"acceptedValues\":[" + string.Join(",", values.Select(EditorJson.Quote)) + "]" +
|
|
|
|
|
|
",\"options\":{\"inputAttr\":{\"aria-label\":" + EditorJson.Quote(ariaLabel) + "}}}";
|
|
|
|
|
|
}
|