Movable Type, name-attributtet og XHTML 1.0 strict

Movable Type 3.2 bruker som standard XHTML 1.0 transitional til malene sine, og da jeg ønsket å gå over til å bruke XHTML 1.0 strict fikk jeg store problemer med ett av attributtene i Individual Entry Archive-malen. Her legger jeg ut en forklaring og løsning på problemet.

Det gjelder funksjonen for «Remember personal info?», eller «Husk meg?» som jeg har valgt å oversette den til, i Individual Entry Archive-malen på linje 112. Der finner vi følgende (problemet er uthevet i rødt):

<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">

Ifølge XHTML 1.0-spesifikasjonen er det ikke lov til å bruke name-attributtet i form-elementet (se også 4.10. The elements with 'id' and 'name' attributes):

W3C

C.8. Fragment Identifiers: Finally, note that XHTML 1.0 has deprecated the name attribute of the a, applet, form, frame, iframe, img, and map elements, and it will be removed from XHTML in subsequent versions.

Vi bytter derfor ut name med id (ikke bytt ut noen andre forekomster av name-attributtet som du blant annet finner i input-elementet), men dessverre så er det ikke så enkelt, for når vi bruker id i stedet for name så fungerer ikke javascriptet vårt lenger. Fordi jeg ikke har noen kompetanse på JavaScript så klarte jeg ikke å løse dette på egenhånd. Jeg oppsøkte derfor den norske Usenet-gruppen for JavaScript og spurte om hjelp, der fikk jeg hjelp av Morten Wang (en ekspert på JavaScript), og han serverte meg løsningen på et sølvfat. Takk skal du ha, Morten! Her følger en trinnvis forklaring på endringene du må gjøre for å få javascriptet til å fungere når du bruker id i form-elementet i stedet for name.

Endringer i Individual Entry Archive-malen:

  1. Linje 26 bytter du ut med: <body onload="individualArchivesOnLoad(commenter_name, 'comments_form')">
  2. Linje 112 bytter du ut med: <form method="post" action="<$MTCGIPath$><$MTCommentScript$>" id="comments_form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
  3. Linje 150 bytter du ut med: id="comment-bake-cookie" name="bakecookie" onclick="if (!this.checked) forgetMe(this.form)" value="1" />

Endringer i Site JavaScript-malen:

  1. Fordi det er så mye som skal endres i javascriptet, så lenker jeg heller til malen min som inneholder endringene, så kan man heller kopiere den, eventuelt kun kopiere endringene fra den. Det er fra og med linje 72 (i den originale malen fra Movable Type) og utover (resten av dokumentet) som er endret. Her er den modifiserte malen jeg bruker: webaksess.no/maler/mt-site.js.

Nå står ikke lenger Movable Types dumme bruk av name-attributtet i form-elementet i veien for at også du kan endre sidene dine til å bli i gyldig XHTML 1.0 strict.

Dette innlegget ble postet i Blogging, Webutvikling. Bokmerk permalenka.

2 svar til Movable Type, name-attributtet og XHTML 1.0 strict

  1. Kyrre Baker sier:

    Ah. Takk for informasjonen. Etter som jeg også bruker XHTML 1.0 måtte jeg jo fjerne name=… og da fungerte jo ikke "husk meg" og jeg tenkte vel strengt tatt ikke over hvorfor.

    Nå skal jeg se om også jeg kan bruke dette oppsettet, og takker for at du postet det.

  2. morten sier:

    For å gjøre det hele litt enklere tok jeg JavaScript-malen fra 3.3b2 og skrev om individualArchivesOnLoad() slik at den fungerer med både id- og name-attributt, og med en standardverdi for identifikatoren dersom den utelates. Det skal derfor bare være å endre name="comments_form" til id="comments_form", bruke den oppdaterte versjonen av JavaScript-malen, og kjøre ivei (det er med andre ord ikke nødvendig å endre onload-attributet for body-elementet.

    Tråden hvor jeg nevner dette på MT-forumet er: http://www.sixapart.com/movabletype/forums/index.php?showtopic=58390

    Den oppdaterte versjonen av malen kan hentes fra: http://www.kakeboksen.org/javascript/site_javascript.tmpl