April 19, 2011

Alıntı (erdem):

>

Bunun dışında bir xml dökümanı da, xml elemanlarından oluşur. Örneğin herhangi bir xml dökümanını açtığımızda gördüğümüz yazım şeklini de xml dökümanı mı sağlasın.

Sanırım belgenin başına gelen "name space" gibi satırlar da var. Ama onun dışında ben de aynı fikirdeyim: XML belgesi tek elemandan oluşur.

Alıntı:

>

Bunun dışında bir html elemanı sınıfına ihtiyaç var mı. Bir html belgesi de html elemanlarından oluşur. Ama onun içine yazılabilecek etiketler bellidir. Örneğin yazamayız.

Bence o mutlak değişmezleri (invariant'ları) her tür kendisi halledebilir. Ayrıca nitelikleri serbestçe veremiyor olmak yararlı olur. Örneğin Form'da radyo düğmeleri varsa, onlar teker teker kopuk olarak değil, Form.radioButtons() üye işlevi ile verilebilir. Çünkü bütün radyo düğmeleri yanılmıyorsam aynı değişken ismini kullanırlar:

class Form
{
   void radioButtons(string var, Button[] buttons);

gibi... Kafamda tam oturmuş değil ama güvenli bir çatı olabilmesi için HTML elemanları oluşturulurken yapılabilecek yanlışlıklara izin vermemeye çalışıyoruz.

Alıntı:

>

Bir de iki tür eleman var. gibi yazabileceğimiz elemanlar. Bir de tek bir etiketle yazdığımız elemanlar '' gibi. Daha sonra örneğin bir form da bir html elemanı olduğu için bu şekilde gerçeklemesini yapabiliriz sanırım.

XmlElement çıktının nasıl olacağına kendi toString() işlevinde karar verebilir. Veya yanılmıyorsam aslında '' da yasal, değil mi? Öyleyse bu konunun fazla önceliği yok.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

Alıntı (Kadir Can):

>
>         auto result = new XmlElement("input","type",type,name)
> ```

> Sizce ne durumda?
>

Bir de sanırım yapmak istediğimiz bu:

'<input type="text" name="giriş" />'

Bunu biraz kısaltarak yazdım. Aslında bununla eşit :)

'<input type="text" name="giriş" ></ input>'

Ama program şu şekilde çıktı üretiyor:

'<form><input type="text">giriş</input></form>'

Hatta daha yaygın kullanımını düşünürsek şu şekilde kullanabilmeliyiz:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

O zaman diğer form elemanlarını da XmlElement sınıfından türetip kullanabiliriz.

class TextField : XmlElement {

   string label_;
   string name_;

   this () {
       super("input", "type", "text");
   }

   this (string label, string name="") {
       label_ = label;
       name_ = name;
       attributes_["name"] ~= name;
       super("input", "type", "text");

   }

}

gene gönderme düğmesi 'Button' da aynı şekilde olabilir. Sonra form düğme, şifre giriş kutusu vs.. gibi bu elementlere sahip olabilir.

O zaman bu şekilde kullanabiliyoruz:

   auto e = new Form();

   auto c = new TextField("","deneme");

   e.addElement(c);

   writeln(e);

Hatta form elemanının bir 'TextField textfield_;' alanı mı olsun.

Bir de bu etiketi yazdırmak için bir numara bulmamız lazım :)

Elemanları yazdır kısmına bir kontrol ekleyip eğer eleman 'TextField' ise elemandan önce etiketi mi yazsın. Buradaki First Name etiketi gibi.


First name: <input type="text" name="firstname" />

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 19, 2011

Nasıl? Bende jeton düşmedi daha? :) Ben de 'dan bahsediyorum. Web sayfalarına form eklenebiliyorsa, onun adı Form olsun. Demek istediğim o.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 19, 2011

Daha önce sorulduğu için ben özellikle Form üzerinde durdum. Tabii ki ötekiler de yapılmalı.

HtmlElement diye tek sınıf bütün HTML elemanlarına uymaz gibi geliyor. Sanırım bazıları fazla özel. Örneğin Form'un POST veya GET gibi çeşitleri var ama diğer HTML elemanlarında böyle bir şey yok.

Yani "br" HTML elemanı oluşturup sonra ona addAttribute("method", "POST") diyememeliyiz. Kütüphanemiz buna izin vermemeli.

HtmlElement diye bir sınıfta da bunu kısıtlayabiliriz ama ancak çalışma zamanında olabilir... addAttribute() dendiğinde, HtmlElement içindeki tag'e bakar ve ancak "form" ise izin verir. Olabilir... Ama daha iyisi, tür güvenliği yoluyla buna zaten izin vermemek olmalı. Örneğin "br" elemanının addAttribute() diye bir işlevi bile olmamalı. (Acaba "br"nin nitelikleri olabiliyor mu?)

Yanlış programlamaya kalktığımız an derleme hatası almalıyız.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

En son hali şu:
Başka değişikliklere ihtiyaç var mı?
helper.d;

import std.stdio;
import std.string;
class XmlElement{
   string tag;
   string[string] attributes;
   string content;
   XmlElement[] elements;

   this(string tag_) {
       tag = tag_;
   }

   @property setAttributes(string[string] attributes_){
       attributes = attributes_;
   }

   @property setContent(string content_){
       content=content_;
   }

   void addElement(XmlElement element ){
       elements ~= element;
   }

   override string toString () {
       string result;
       result ~= "<"~tag;
       foreach ( key , value ; attributes ) {
           result ~= format(" %s=\"%s\"",key,value);
       }
       result ~= ">"~content;
       foreach (element ; elements ){
           result ~= element.toString();
       }
       result ~= "</"~tag~">";
       result ~= "\n";
   return result;
   }
}

/*void main(){
   auto link = new XmlElement("a");
   auto a = ["href":"www.google.com.tr"];
   auto b = "Google";
   link.setAttributes(a);
   link.setContent(b);
   writeln(link);
}
*/

htmlForm.d;

import std.stdio;
import helper;

enum method { get , post };

class HtmlForm : XmlElement {

   this( method type){
       super("form");
       final switch( type ){
           case type.get : setAttributes(["method":"GET"]); break;
           case type.post : setAttributes(["method":"POST"]); break;
       }
   }

}

void main(){
   auto form = new HtmlForm(method.get);
   writeln(form);
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

Alıntı (acehreli):

>

Yine daha önceki düşünceme devam ediyorum: eğer TextField olabilmek için label ve isim şartsa, ikisi de kurucu parametresi olarak gelmeli. (Erdem name'i seçime bağlı bırakmış; öyle de kullanılabiliyor herhalde. (?))

Hımm. Bu değerleri almak için onlara isim verilmesi gerektiğini bilmiyordum. O zaman verebiliriz. Ben kullanıcı uzun uzun yazmaktan erinir diye düşündüm. Ya da belki program verir diye. Örneğin textfield1, textfield2 .. gibi

Evet 'name''i kullanmamak hata ya da uyarı vermiyor ama dediğiniz gibi kullanmak en iyisi galiba.

http://validator.w3.org/check

Burdan denedim ama çok ilginç bir şey dikkatimi çekti. Örneğin 'form' için 'action' niteliği tanımlanmak zorunda. Yoksa hata veriyor.

Alıntı (acehreli):

>

Alıntı:

>

Bir de bu etiketi yazdırmak için bir numara bulmamız lazım :)

Hatta bu örneklerdeki gibi serbest metin değil de bir resim bile olabiliyor sanırım. O zaman bence formun içeriği aslında oldukça serbest. Kullanıcılarımız istedikleri elemanları istedikleri sırada addElement() ile eklesinler ve XmlElement'ın yazdırma kodu normal işleyişi ile yazdırsın.

Öyle olur, değil mi?

Bence gayet güzel olur :)

Evet bahsettiğiniz gibi ekleme kısmı da şu an oldukça esnek. Ama ben kullanıcılar nasıl eklesinler onu bilmiyorum. Örneğin gene sizin yazdığınız (http://ddili.org/forum/thread/456) bir örnekteki yazım şekli oldukça güzel.

En iyisi siz kütüphaneyi program içinden nasıl kullanmak istediğimizi yazın. Biz Kadir Can'la kodunu yazmaya çalışalım :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

Teşekkür ederim.

Artık yeni işlevlere yelken alma zamanı :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

Ben de beğendim. Gayet güzel ve okunaklı olmuş :)

Ayrıca kurucu işlevde enum ve switch case ifadesinden faydalanman da gayet şık.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2011

Textfield'den başka sırada daha* Password Field*, Radio Buttons, Checkboxes ve* Submit Button* var.

Ben şu sayfayı kullanıyorum yazarken. Böylece nasıl kullanıldığını görmüş oluyorum:

http://www.w3schools.com/html/html_forms.asp

Benim de udumu elime alma zamanı :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]