b58c83982489cdeb9e3974de0ec9a85989877412
[WebKit-https.git] / WebCore / bindings / objc / DOMHTML.mm
1 /*
2  * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #import "config.h"
27 #import "DOMHTML.h"
28
29 #import "DOMExtensions.h"
30 #import "DOMHTMLInternal.h"
31 #import "DOMInternal.h"
32 #import "DOMPrivate.h"
33 #import "DocumentFragment.h"
34 #import "FoundationExtras.h"
35 #import "FrameView.h"
36 #import "HTMLAppletElement.h"
37 #import "HTMLAreaElement.h"
38 #import "HTMLBRElement.h"
39 #import "HTMLBaseElement.h"
40 #import "HTMLBaseFontElement.h"
41 #import "HTMLBodyElement.h"
42 #import "HTMLButtonElement.h"
43 #import "HTMLDListElement.h"
44 #import "HTMLDirectoryElement.h"
45 #import "HTMLDivElement.h"
46 #import "HTMLDocument.h"
47 #import "HTMLEmbedElement.h"
48 #import "HTMLFieldSetElement.h"
49 #import "HTMLFontElement.h"
50 #import "HTMLFormCollection.h"
51 #import "HTMLFormElement.h"
52 #import "HTMLFrameSetElement.h"
53 #import "HTMLHRElement.h"
54 #import "HTMLHeadElement.h"
55 #import "HTMLHeadingElement.h"
56 #import "HTMLHtmlElement.h"
57 #import "HTMLIFrameElement.h"
58 #import "HTMLImageElement.h"
59 #import "HTMLIsIndexElement.h"
60 #import "HTMLLIElement.h"
61 #import "HTMLLabelElement.h"
62 #import "HTMLLegendElement.h"
63 #import "HTMLLinkElement.h"
64 #import "HTMLMapElement.h"
65 #import "HTMLMenuElement.h"
66 #import "HTMLMetaElement.h"
67 #import "HTMLNames.h"
68 #import "HTMLOListElement.h"
69 #import "HTMLObjectElement.h"
70 #import "HTMLOptGroupElement.h"
71 #import "HTMLOptionElement.h"
72 #import "HTMLOptionsCollection.h"
73 #import "HTMLParagraphElement.h"
74 #import "HTMLParamElement.h"
75 #import "HTMLPreElement.h"
76 #import "HTMLScriptElement.h"
77 #import "HTMLSelectElement.h"
78 #import "HTMLStyleElement.h"
79 #import "HTMLTableCaptionElement.h"
80 #import "HTMLTableCellElement.h"
81 #import "HTMLTableColElement.h"
82 #import "HTMLTableElement.h"
83 #import "HTMLTableRowElement.h"
84 #import "HTMLTableSectionElement.h"
85 #import "HTMLTextAreaElement.h"
86 #import "HTMLTitleElement.h"
87 #import "HTMLUListElement.h"
88 #import "KURL.h"
89 #import "NameNodeList.h"
90 #import "Range.h"
91 #import "RenderTextControl.h"
92 #import "csshelper.h"
93 #import "markup.h"
94
95 using namespace WebCore;
96 using namespace HTMLNames;
97
98 // FIXME: This code should be using the impl methods instead of doing so many get/setAttribute calls.
99 // FIXME: This code should be generated.
100
101
102 //------------------------------------------------------------------------------------------
103 // DOMHTMLCollection
104
105 @implementation DOMHTMLCollection (WebCoreInternal)
106
107 - (id)_initWithCollection:(HTMLCollection *)impl
108 {
109     ASSERT(impl);
110     
111     [super _init];
112     _internal = DOM_cast<DOMObjectInternal*>(impl);
113     impl->ref();
114     addDOMWrapper(self, impl);
115     return self;
116 }
117
118 + (DOMHTMLCollection *)_collectionWith:(HTMLCollection *)impl
119 {
120     if (!impl)
121         return nil;
122     
123     id cachedInstance;
124     cachedInstance = getDOMWrapper(impl);
125     if (cachedInstance)
126         return [[cachedInstance retain] autorelease];
127     
128     return [[[self alloc] _initWithCollection:impl] autorelease];
129 }
130
131 @end
132
133
134 //------------------------------------------------------------------------------------------
135 // DOMHTMLOptionsCollection
136
137 @implementation DOMHTMLOptionsCollection (WebCoreInternal)
138
139 - (id)_initWithOptionsCollection:(HTMLOptionsCollection *)impl
140 {
141     ASSERT(impl);
142     
143     [super _init];
144     _internal = DOM_cast<DOMObjectInternal*>(impl);
145     impl->ref();
146     addDOMWrapper(self, impl);
147     return self;
148 }
149
150 + (DOMHTMLOptionsCollection *)_optionsCollectionWith:(HTMLOptionsCollection *)impl
151 {
152     if (!impl)
153         return nil;
154     
155     id cachedInstance;
156     cachedInstance = getDOMWrapper(impl);
157     if (cachedInstance)
158         return [[cachedInstance retain] autorelease];
159     
160     return [[[self alloc] _initWithOptionsCollection:impl] autorelease];
161 }
162
163 @end
164
165
166 //------------------------------------------------------------------------------------------
167 // DOMHTMLElement
168
169 @implementation DOMHTMLElement (WebCoreInternal)
170
171 + (DOMHTMLElement *)_elementWith:(HTMLElement *)impl
172 {
173     return static_cast<DOMHTMLElement*>([DOMNode _nodeWith:impl]);
174 }
175
176 - (HTMLElement *)_HTMLElement
177 {
178     return static_cast<HTMLElement*>(DOM_cast<Node*>(_internal));
179 }
180
181 @end
182
183
184 //------------------------------------------------------------------------------------------
185 // DOMHTMLDocument
186
187 @implementation DOMHTMLDocument
188
189 - (HTMLDocument *)_HTMLDocument
190 {
191     return static_cast<HTMLDocument*>(DOM_cast<Node*>(_internal));
192 }
193
194 - (NSString *)title
195 {
196     return [self _HTMLDocument]->title();
197 }
198
199 - (void)setTitle:(NSString *)title
200 {
201     [self _HTMLDocument]->setTitle(title);
202 }
203
204 - (NSString *)referrer
205 {
206      return [self _HTMLDocument]->referrer();
207 }
208
209 - (NSString *)domain
210 {
211      return [self _HTMLDocument]->domain();
212 }
213
214 - (NSString *)URL
215 {
216     return [self _HTMLDocument]->URL().getNSString();
217 }
218
219 - (DOMHTMLElement *)body
220 {
221     return [DOMHTMLElement _elementWith:[self _HTMLDocument]->body()];
222 }
223
224 - (DOMHTMLCollection *)images
225 {
226     HTMLCollection *collection = new HTMLCollection([self _HTMLDocument], HTMLCollection::DocImages);
227     return [DOMHTMLCollection _collectionWith:collection];
228 }
229
230 - (DOMHTMLCollection *)applets
231 {
232     HTMLCollection *collection = new HTMLCollection([self _HTMLDocument], HTMLCollection::DocApplets);
233     return [DOMHTMLCollection _collectionWith:collection];
234 }
235
236 - (DOMHTMLCollection *)links
237 {
238     HTMLCollection *collection = new HTMLCollection([self _HTMLDocument], HTMLCollection::DocLinks);
239     return [DOMHTMLCollection _collectionWith:collection];
240 }
241
242 - (DOMHTMLCollection *)forms
243 {
244     HTMLCollection *collection = new HTMLCollection([self _HTMLDocument], HTMLCollection::DocForms);
245     return [DOMHTMLCollection _collectionWith:collection];
246 }
247
248 - (DOMHTMLCollection *)anchors
249 {
250     HTMLCollection *collection = new HTMLCollection([self _HTMLDocument], HTMLCollection::DocAnchors);
251     return [DOMHTMLCollection _collectionWith:collection];
252 }
253
254 - (void)setBody:(DOMHTMLElement *)body
255 {
256     ExceptionCode ec = 0;
257     [self _HTMLDocument]->setBody([body _HTMLElement], ec);
258     raiseOnDOMError(ec);
259 }
260
261 - (NSString *)cookie
262 {
263     return [self _HTMLDocument]->cookie();
264 }
265
266 - (void)setCookie:(NSString *)cookie
267 {
268     [self _HTMLDocument]->setCookie(cookie);
269 }
270
271 - (void)open
272 {
273     [self _HTMLDocument]->open();
274 }
275
276 - (void)close
277 {
278     [self _HTMLDocument]->close();
279 }
280
281 - (void)write:(NSString *)text
282 {
283     [self _HTMLDocument]->write(text);
284 }
285
286 - (void)writeln:(NSString *)text
287 {
288     [self _HTMLDocument]->writeln(text);
289 }
290
291 - (DOMElement *)getElementById:(NSString *)elementId
292 {
293     return [DOMElement _elementWith:[self _HTMLDocument]->getElementById(elementId)];
294 }
295
296 - (DOMNodeList *)getElementsByName:(NSString *)elementName
297 {
298     NameNodeList *nodeList = new NameNodeList([self _HTMLDocument], elementName);
299     return [DOMNodeList _nodeListWith:nodeList];
300 }
301
302 - (DOMDocumentFragment *)createDocumentFragmentWithMarkupString:(NSString *)markupString baseURL:(NSURL *)baseURL
303 {
304     RefPtr<DocumentFragment> fragment = createFragmentFromMarkup([self _document], markupString, [baseURL absoluteString]);
305     return [DOMDocumentFragment _documentFragmentWith:fragment.get()];
306 }
307
308 - (DOMDocumentFragment *)createDocumentFragmentWithText:(NSString *)text
309 {
310     // FIXME: Since this is not a contextual fragment, it won't handle whitespace properly.
311     return [DOMDocumentFragment _documentFragmentWith:createFragmentFromText([self _document]->createRange().get(), text).get()];
312 }
313
314 @end
315
316 @implementation DOMHTMLDocument (WebPrivate)
317
318 - (DOMDocumentFragment *)_createDocumentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString
319 {
320     NSURL *baseURL = KURL([self _document]->completeURL(parseURL(baseURLString)).deprecatedString()).getNSURL();
321     return [self createDocumentFragmentWithMarkupString:markupString baseURL:baseURL];
322 }
323
324 - (DOMDocumentFragment *)_createDocumentFragmentWithText:(NSString *)text
325 {
326     return [self createDocumentFragmentWithText:text];
327 }
328
329 @end
330
331 @implementation DOMHTMLDocument (WebCoreInternal)
332
333 + (DOMHTMLDocument *)_HTMLDocumentWith:(WebCore::HTMLDocument *)impl;
334 {
335     return static_cast<DOMHTMLDocument *>([DOMNode _nodeWith:impl]);
336 }
337
338 @end
339
340 @implementation DOMHTMLHtmlElement
341
342 - (HTMLHtmlElement *)_HTMLHtmlElement
343 {
344     return static_cast<HTMLHtmlElement*>(DOM_cast<Node*>(_internal));
345 }
346
347 - (NSString *)version
348 {
349     return [self _HTMLHtmlElement]->version();
350 }
351
352 - (void)setVersion:(NSString *)version
353 {
354     [self _HTMLHtmlElement]->setVersion(version);
355 }
356
357 @end
358
359 @implementation DOMHTMLHeadElement
360
361 - (HTMLHeadElement *)_headElement
362 {
363     return static_cast<HTMLHeadElement*>(DOM_cast<Node*>(_internal));
364 }
365
366 - (NSString *)profile
367 {
368     return [self _headElement]->profile();
369 }
370
371 - (void)setProfile:(NSString *)profile
372 {
373     [self _headElement]->setProfile(profile);
374 }
375
376 @end
377
378 @implementation DOMHTMLLinkElement
379
380 - (HTMLLinkElement *)_linkElement
381 {
382     return static_cast<HTMLLinkElement*>(DOM_cast<Node*>(_internal));
383 }
384
385 - (BOOL)disabled
386 {
387     return [self _linkElement]->disabled();
388 }
389
390 - (void)setDisabled:(BOOL)disabled
391 {
392     [self _linkElement]->setDisabled(disabled);
393 }
394
395 - (NSString *)charset
396 {
397     return [self _linkElement]->charset();
398 }
399
400 - (void)setCharset:(NSString *)charset
401 {
402     [self _linkElement]->setCharset(charset);
403 }
404
405 - (NSURL *)absoluteLinkURL
406 {
407     return [self _getURLAttribute:@"href"];
408 }
409
410 - (NSString *)href
411 {
412     return [self _linkElement]->href();
413 }
414
415 - (void)setHref:(NSString *)href
416 {
417     [self _linkElement]->href();
418 }
419
420 - (NSString *)hreflang
421 {
422     return [self _linkElement]->hreflang();
423 }
424
425 - (void)setHreflang:(NSString *)hreflang
426 {
427     [self _linkElement]->setHreflang(hreflang);
428 }
429
430 - (NSString *)media
431 {
432     return [self _linkElement]->getAttribute(mediaAttr);
433 }
434
435 - (void)setMedia:(NSString *)media
436 {
437     [self _linkElement]->setAttribute(mediaAttr, media);
438 }
439
440 - (NSString *)rel
441 {
442     return [self _linkElement]->getAttribute(relAttr);
443 }
444
445 - (void)setRel:(NSString *)rel
446 {
447     [self _linkElement]->setAttribute(relAttr, rel);
448 }
449
450 - (NSString *)rev
451 {
452     return [self _linkElement]->getAttribute(revAttr);
453 }
454
455 - (void)setRev:(NSString *)rev
456 {
457     [self _linkElement]->setAttribute(revAttr, rev);
458 }
459
460 - (NSString *)target
461 {
462     return [self _linkElement]->getAttribute(targetAttr);
463 }
464
465 - (void)setTarget:(NSString *)target
466 {
467     [self _linkElement]->setAttribute(targetAttr, target);
468 }
469
470 - (NSString *)type
471 {
472     return [self _linkElement]->getAttribute(typeAttr);
473 }
474
475 - (void)setType:(NSString *)type
476 {
477     [self _linkElement]->setAttribute(typeAttr, type);
478 }
479
480 @end
481
482 @implementation DOMHTMLTitleElement
483
484 - (HTMLTitleElement *)_titleElement
485 {
486     return static_cast<HTMLTitleElement*>(DOM_cast<Node*>(_internal));
487 }
488
489 - (NSString *)text
490 {
491     return [self _titleElement]->getAttribute(textAttr);
492 }
493
494 - (void)setText:(NSString *)text
495 {
496     [self _titleElement]->setAttribute(textAttr, text);
497 }
498
499 @end
500
501 @implementation DOMHTMLMetaElement
502
503 - (HTMLMetaElement *)_metaElement
504 {
505     return static_cast<HTMLMetaElement*>(DOM_cast<Node*>(_internal));
506 }
507
508 - (NSString *)content
509 {
510     return [self _metaElement]->getAttribute(contentAttr);
511 }
512
513 - (void)setContent:(NSString *)content
514 {
515     [self _metaElement]->setAttribute(contentAttr, content);
516 }
517
518 - (NSString *)httpEquiv
519 {
520     return [self _metaElement]->getAttribute(http_equivAttr);
521 }
522
523 - (void)setHttpEquiv:(NSString *)httpEquiv
524 {
525     [self _metaElement]->setAttribute(http_equivAttr, httpEquiv);
526 }
527
528 - (NSString *)name
529 {
530     return [self _metaElement]->getAttribute(nameAttr);
531 }
532
533 - (void)setName:(NSString *)name
534 {
535     [self _metaElement]->setAttribute(nameAttr, name);
536 }
537
538 - (NSString *)scheme
539 {
540     return [self _metaElement]->getAttribute(schemeAttr);
541 }
542
543 - (void)setScheme:(NSString *)scheme
544 {
545     [self _metaElement]->setAttribute(schemeAttr, scheme);
546 }
547
548 @end
549
550 @implementation DOMHTMLBaseElement
551
552 - (HTMLBaseElement *)_baseElement
553 {
554     return static_cast<HTMLBaseElement*>(DOM_cast<Node*>(_internal));
555 }
556
557 - (NSString *)href
558 {
559     return [self _baseElement]->href();
560 }
561
562 - (void)setHref:(NSString *)href
563 {
564     [self _baseElement]->setAttribute(hrefAttr, href);
565 }
566
567 - (NSString *)target
568 {
569     return [self _baseElement]->getAttribute(targetAttr);
570 }
571
572 - (void)setTarget:(NSString *)target
573 {
574     [self _baseElement]->setAttribute(schemeAttr, target);
575 }
576
577 @end
578
579 @implementation DOMHTMLStyleElement
580
581 - (HTMLStyleElement *)_styleElement
582 {
583     return static_cast<HTMLStyleElement*>(DOM_cast<Node*>(_internal));
584 }
585
586 - (BOOL)disabled
587 {
588     return ![self _styleElement]->getAttribute(disabledAttr).isNull();
589 }
590
591 - (void)setDisabled:(BOOL)disabled
592 {
593     [self _styleElement]->setAttribute(disabledAttr, disabled ? "" : 0);
594 }
595
596 - (NSString *)media
597 {
598     return [self _styleElement]->getAttribute(mediaAttr);
599 }
600
601 - (void)setMedia:(NSString *)media
602 {
603     [self _styleElement]->setAttribute(mediaAttr, media);
604 }
605
606 - (NSString *)type
607 {
608     return [self _styleElement]->getAttribute(typeAttr);
609 }
610
611 - (void)setType:(NSString *)type
612 {
613     [self _styleElement]->setAttribute(typeAttr, type);
614 }
615
616 @end
617
618 @implementation DOMHTMLBodyElement
619
620 - (HTMLBodyElement *)_bodyElement
621 {
622     return static_cast<HTMLBodyElement*>(DOM_cast<Node*>(_internal));
623 }
624
625 - (NSString *)aLink
626 {
627     return [self _bodyElement]->getAttribute(alinkAttr);
628 }
629
630 - (void)setALink:(NSString *)aLink
631 {
632     [self _bodyElement]->setAttribute(alinkAttr, aLink);
633 }
634
635 - (NSString *)background
636 {
637     return [self _bodyElement]->getAttribute(backgroundAttr);
638 }
639
640 - (void)setBackground:(NSString *)background
641 {
642     [self _bodyElement]->setAttribute(backgroundAttr, background);
643 }
644
645 - (NSString *)bgColor
646 {
647     return [self _bodyElement]->getAttribute(bgcolorAttr);
648 }
649
650 - (void)setBgColor:(NSString *)bgColor
651 {
652     [self _bodyElement]->setAttribute(bgcolorAttr, bgColor);
653 }
654
655 - (NSString *)link
656 {
657     return [self _bodyElement]->getAttribute(linkAttr);
658 }
659
660 - (void)setLink:(NSString *)link
661 {
662     [self _bodyElement]->setAttribute(linkAttr, link);
663 }
664
665 - (NSString *)text
666 {
667     return [self _bodyElement]->getAttribute(textAttr);
668 }
669
670 - (void)setText:(NSString *)text
671 {
672     [self _bodyElement]->setAttribute(textAttr, text);
673 }
674
675 - (NSString *)vLink
676 {
677     return [self _bodyElement]->getAttribute(vlinkAttr);
678 }
679
680 - (void)setVLink:(NSString *)vLink
681 {
682     [self _bodyElement]->setAttribute(vlinkAttr, vLink);
683 }
684
685 @end
686
687
688 //------------------------------------------------------------------------------------------
689 // DOMHTMLFormElement
690
691 @implementation DOMHTMLFormElement (WebCoreInternal)
692
693 + (DOMHTMLFormElement *)_formElementWith:(HTMLFormElement *)impl
694 {
695     return static_cast<DOMHTMLFormElement*>([DOMNode _nodeWith:impl]);
696 }
697
698 @end
699
700
701 //------------------------------------------------------------------------------------------
702 // DOMHTMLIsIndexElement
703
704 @implementation DOMHTMLIsIndexElement
705
706 - (HTMLIsIndexElement *)_isIndexElement
707 {
708     return static_cast<HTMLIsIndexElement*>(DOM_cast<Node*>(_internal));
709 }
710
711 - (DOMHTMLFormElement *)form
712 {
713     return [DOMHTMLFormElement _formElementWith:[self _isIndexElement]->form()];
714 }
715
716 - (NSString *)prompt
717 {
718     return [self _isIndexElement]->prompt();
719 }
720
721 - (void)setPrompt:(NSString *)prompt
722 {
723     [self _isIndexElement]->setPrompt(prompt);
724 }
725
726 @end
727
728 @implementation DOMHTMLSelectElement
729
730 - (HTMLSelectElement *)_selectElement
731 {
732     return static_cast<HTMLSelectElement*>(DOM_cast<Node*>(_internal));
733 }
734
735 - (NSString *)type
736 {
737     return [self _selectElement]->type();
738 }
739
740 - (int)selectedIndex
741 {
742     return [self _selectElement]->selectedIndex();
743 }
744
745 - (void)setSelectedIndex:(int)selectedIndex
746 {
747     [self _selectElement]->setSelectedIndex(selectedIndex);
748 }
749
750 - (NSString *)value
751 {
752     return [self _selectElement]->value();
753 }
754
755 - (void)setValue:(NSString *)value
756 {
757     String s(value);
758     [self _selectElement]->setValue(s.impl());
759 }
760
761 - (int)length
762 {
763     return [self _selectElement]->length();
764 }
765
766 - (void)setLength:(int)length
767 {
768     // FIXME: Not yet clear what to do about this one.
769     // There's some JavaScript-specific hackery in the JavaScript bindings for this.
770     //[self _selectElement]->setLength(length);
771 }
772
773 - (DOMHTMLFormElement *)form
774 {
775     return [DOMHTMLFormElement _formElementWith:[self _selectElement]->form()];
776 }
777
778 - (DOMHTMLOptionsCollection *)options
779 {
780     return [DOMHTMLOptionsCollection _optionsCollectionWith:[self _selectElement]->options().get()];
781 }
782
783 - (BOOL)disabled
784 {
785     return [self _selectElement]->disabled();
786 }
787
788 - (void)setDisabled:(BOOL)disabled
789 {
790     [self _selectElement]->setDisabled(disabled);
791 }
792
793 - (BOOL)multiple
794 {
795     return [self _selectElement]->multiple();
796 }
797
798 - (void)setMultiple:(BOOL)multiple
799 {
800     [self _selectElement]->setMultiple(multiple);
801 }
802
803 - (NSString *)name
804 {
805     return [self _selectElement]->name();
806 }
807
808 - (void)setName:(NSString *)name
809 {
810     [self _selectElement]->setName(name);
811 }
812
813 - (int)size
814 {
815     return [self _selectElement]->size();
816 }
817
818 - (void)setSize:(int)size
819 {
820     [self _selectElement]->setSize(size);
821 }
822
823 - (int)tabIndex
824 {
825     return [self _selectElement]->tabIndex();
826 }
827
828 - (void)setTabIndex:(int)tabIndex
829 {
830     [self _selectElement]->setTabIndex(tabIndex);
831 }
832
833 - (void)add:(DOMHTMLElement *)element :(DOMHTMLElement *)before
834 {
835     ExceptionCode ec = 0;
836     [self _selectElement]->add([element _HTMLElement], [before _HTMLElement], ec);
837     raiseOnDOMError(ec);
838 }
839
840 - (void)remove:(int)index
841 {
842     [self _selectElement]->remove(index);
843 }
844
845 - (void)blur
846 {
847     [self _selectElement]->blur();
848 }
849
850 - (void)focus
851 {
852     [self _selectElement]->focus();
853 }
854
855 @end
856
857 @implementation DOMHTMLOptGroupElement
858
859 - (HTMLOptGroupElement *)_optGroupElement
860 {
861     return static_cast<HTMLOptGroupElement*>(DOM_cast<Node*>(_internal));
862 }
863
864 - (BOOL)disabled
865 {
866     return [self _optGroupElement]->disabled();
867 }
868
869 - (void)setDisabled:(BOOL)disabled
870 {
871     [self _optGroupElement]->setDisabled(disabled);
872 }
873
874 - (NSString *)label
875 {
876     return [self _optGroupElement]->label();
877 }
878
879 - (void)setLabel:(NSString *)label
880 {
881     [self _optGroupElement]->setLabel(label);
882 }
883
884 @end
885
886 @implementation DOMHTMLOptionElement
887
888 - (HTMLOptionElement *)_optionElement
889 {
890     return static_cast<HTMLOptionElement*>(DOM_cast<Node*>(_internal));
891 }
892
893 - (DOMHTMLFormElement *)form
894 {
895     return [DOMHTMLFormElement _formElementWith:[self _optionElement]->form()];
896 }
897
898 - (BOOL)defaultSelected
899 {
900     return [self _optionElement]->defaultSelected();
901 }
902
903 - (void)setDefaultSelected:(BOOL)defaultSelected
904 {
905     [self _optionElement]->setDefaultSelected(defaultSelected);
906 }
907
908 - (NSString *)text
909 {
910     return [self _optionElement]->text();
911 }
912
913 - (int)index
914 {
915     return [self _optionElement]->index();
916 }
917
918 - (BOOL)disabled
919 {
920     return [self _optionElement]->disabled();
921 }
922
923 - (void)setDisabled:(BOOL)disabled
924 {
925     [self _optionElement]->setDisabled(disabled);
926 }
927
928 - (NSString *)label
929 {
930     return [self _optionElement]->label();
931 }
932
933 - (void)setLabel:(NSString *)label
934 {
935     [self _optionElement]->setLabel(label);
936 }
937
938 - (BOOL)selected
939 {
940     return [self _optionElement]->selected();
941 }
942
943 - (void)setSelected:(BOOL)selected
944 {
945     [self _optionElement]->setSelected(selected);
946 }
947
948 - (NSString *)value
949 {
950     return [self _optionElement]->value();
951 }
952
953 - (void)setValue:(NSString *)value
954 {
955     String string = value;
956     [self _optionElement]->setValue(string.impl());
957 }
958
959 @end
960
961 @implementation DOMHTMLInputElement
962
963 - (HTMLInputElement *)_inputElement
964 {
965     return static_cast<HTMLInputElement*>(DOM_cast<Node*>(_internal));
966 }
967
968 - (NSString *)defaultValue
969 {
970     return [self _inputElement]->defaultValue();
971 }
972
973 - (void)setDefaultValue:(NSString *)defaultValue
974 {
975     [self _inputElement]->setDefaultValue(defaultValue);
976 }
977
978 - (BOOL)defaultChecked
979 {
980     return [self _inputElement]->defaultChecked();
981 }
982
983 - (void)setDefaultChecked:(BOOL)defaultChecked
984 {
985     [self _inputElement]->setDefaultChecked(defaultChecked);
986 }
987
988 - (DOMHTMLFormElement *)form
989 {
990     return [DOMHTMLFormElement _formElementWith:[self _inputElement]->form()];
991 }
992
993 - (NSString *)accept
994 {
995     return [self _inputElement]->accept();
996 }
997
998 - (void)setAccept:(NSString *)accept
999 {
1000     [self _inputElement]->setAccept(accept);
1001 }
1002
1003 - (NSString *)accessKey
1004 {
1005     return [self _inputElement]->accessKey();
1006 }
1007
1008 - (void)setAccessKey:(NSString *)accessKey
1009 {
1010     [self _inputElement]->setAccessKey(accessKey);
1011 }
1012
1013 - (NSString *)align
1014 {
1015     return [self _inputElement]->align();
1016 }
1017
1018 - (void)setAlign:(NSString *)align
1019 {
1020     [self _inputElement]->setAlign(align);
1021 }
1022
1023 - (NSString *)alt
1024 {
1025     return [self _inputElement]->alt();
1026 }
1027
1028 - (NSString *)altDisplayString
1029 {
1030     return [self _inputElement]->alt().replace('\\', [self _element]->document()->backslashAsCurrencySymbol());
1031 }
1032
1033 - (void)setAlt:(NSString *)alt
1034 {
1035     [self _inputElement]->setAlt(alt);
1036 }
1037
1038 - (BOOL)checked
1039 {
1040     return [self _inputElement]->checked();
1041 }
1042
1043 - (void)setChecked:(BOOL)checked
1044 {
1045     return [self _inputElement]->setChecked(checked);
1046 }
1047
1048 - (BOOL)disabled
1049 {
1050     return [self _inputElement]->disabled();
1051 }
1052
1053 - (void)setDisabled:(BOOL)disabled
1054 {
1055     [self _inputElement]->setDisabled(disabled);
1056 }
1057
1058 - (int)maxLength
1059 {
1060     return [self _inputElement]->maxLength();
1061 }
1062
1063 - (void)setMaxLength:(int)maxLength
1064 {
1065     [self _inputElement]->setMaxLength(maxLength);
1066 }
1067
1068 - (NSString *)name
1069 {
1070     return [self _inputElement]->name();
1071 }
1072
1073 - (void)setName:(NSString *)name
1074 {
1075     [self _inputElement]->setName(name);
1076 }
1077
1078 - (BOOL)readOnly
1079 {
1080     return [self _inputElement]->readOnly();
1081 }
1082
1083 - (void)setReadOnly:(BOOL)readOnly
1084 {
1085     [self _inputElement]->setReadOnly(readOnly);
1086 }
1087
1088 - (unsigned)size
1089 {
1090     return [self _inputElement]->size();
1091 }
1092
1093 - (void)setSize:(unsigned)size
1094 {
1095     [self _inputElement]->setSize(size);
1096 }
1097
1098 - (NSURL *)absoluteImageURL
1099 {
1100     if (![self _inputElement]->renderer() || ![self _inputElement]->renderer()->isImage())
1101         return nil;
1102     return [self _getURLAttribute:@"src"];
1103 }
1104
1105 - (NSString *)src
1106 {
1107     return [self _inputElement]->src();
1108 }
1109
1110 - (void)setSrc:(NSString *)src
1111 {
1112     [self _inputElement]->setSrc(src);
1113 }
1114
1115 - (int)tabIndex
1116 {
1117     return [self _inputElement]->tabIndex();
1118 }
1119
1120 - (void)setTabIndex:(int)tabIndex
1121 {
1122     [self _inputElement]->setTabIndex(tabIndex);
1123 }
1124
1125 - (NSString *)type
1126 {
1127     return [self _inputElement]->type();
1128 }
1129
1130 - (void)setType:(NSString *)type
1131 {
1132     [self _inputElement]->setType(type);
1133 }
1134
1135 - (NSString *)useMap
1136 {
1137     return [self _inputElement]->useMap();
1138 }
1139
1140 - (void)setUseMap:(NSString *)useMap
1141 {
1142     [self _inputElement]->setUseMap(useMap);
1143 }
1144
1145 - (NSString *)value
1146 {
1147     return [self _inputElement]->value();
1148 }
1149
1150 - (void)setValue:(NSString *)value
1151 {
1152     [self _inputElement]->setValue(value);
1153 }
1154
1155 - (void)blur
1156 {
1157     [self _inputElement]->blur();
1158 }
1159
1160 - (void)focus
1161 {
1162     [self _inputElement]->focus();
1163 }
1164
1165 - (void)select
1166 {
1167     [self _inputElement]->select();
1168 }
1169
1170 - (void)click
1171 {
1172     [self _inputElement]->click(false);
1173 }
1174
1175 @end
1176
1177 @implementation DOMHTMLTextAreaElement
1178
1179 - (HTMLTextAreaElement *)_textAreaElement
1180 {
1181     return static_cast<HTMLTextAreaElement*>(DOM_cast<Node*>(_internal));
1182 }
1183
1184 - (NSString *)defaultValue
1185 {
1186     return [self _textAreaElement]->defaultValue();
1187 }
1188
1189 - (void)setDefaultValue:(NSString *)defaultValue
1190 {
1191     [self _textAreaElement]->setDefaultValue(defaultValue);
1192 }
1193
1194 - (DOMHTMLFormElement *)form
1195 {
1196     return [DOMHTMLFormElement _formElementWith:[self _textAreaElement]->form()];
1197 }
1198
1199 - (NSString *)accessKey
1200 {
1201     return [self _textAreaElement]->getAttribute(accesskeyAttr);
1202 }
1203
1204 - (void)setAccessKey:(NSString *)accessKey
1205 {
1206     [self _textAreaElement]->setAttribute(accesskeyAttr, accessKey);
1207 }
1208
1209 - (int)cols
1210 {
1211     return [self _textAreaElement]->getAttribute(colsAttr).toInt();
1212 }
1213
1214 - (void)setCols:(int)cols
1215 {
1216     [self _textAreaElement]->setAttribute(colsAttr, String::number(cols));
1217 }
1218
1219 - (BOOL)disabled
1220 {
1221     return [self _textAreaElement]->getAttribute(disabledAttr).isNull();
1222 }
1223
1224 - (void)setDisabled:(BOOL)disabled
1225 {
1226     [self _textAreaElement]->setAttribute(disabledAttr, disabled ? "" : 0);
1227 }
1228
1229 - (NSString *)name
1230 {
1231     return [self _textAreaElement]->name();
1232 }
1233
1234 - (void)setName:(NSString *)name
1235 {
1236     [self _textAreaElement]->setName(name);
1237 }
1238
1239 - (BOOL)readOnly
1240 {
1241     return [self _textAreaElement]->readOnly();
1242 }
1243
1244 - (void)setReadOnly:(BOOL)readOnly
1245 {
1246     [self _textAreaElement]->setReadOnly(readOnly);
1247 }
1248
1249 - (int)rows
1250 {
1251     return [self _textAreaElement]->getAttribute(rowsAttr).toInt();
1252 }
1253
1254 - (void)setRows:(int)rows
1255 {
1256     [self _textAreaElement]->setAttribute(rowsAttr, String::number(rows));
1257 }
1258
1259 - (int)tabIndex
1260 {
1261     return [self _textAreaElement]->tabIndex();
1262 }
1263
1264 - (void)setTabIndex:(int)tabIndex
1265 {
1266     [self _textAreaElement]->setTabIndex(tabIndex);
1267 }
1268
1269 - (NSString *)type
1270 {
1271     return [self _textAreaElement]->type();
1272 }
1273
1274 - (void)setType:(NSString *)type
1275 {
1276     ASSERT_WITH_MESSAGE(0, "not implemented");
1277 }
1278
1279 - (NSString *)value
1280 {
1281     return [self _textAreaElement]->value();
1282 }
1283
1284 - (void)setValue:(NSString *)value
1285 {
1286     [self _textAreaElement]->setValue(value);
1287 }
1288
1289 - (void)blur
1290 {
1291     [self _textAreaElement]->blur();
1292 }
1293
1294 - (void)focus
1295 {
1296     [self _textAreaElement]->focus();
1297 }
1298
1299 - (void)select
1300 {
1301     [self _textAreaElement]->select();
1302 }
1303
1304 @end
1305
1306 @implementation DOMHTMLButtonElement
1307
1308 - (HTMLButtonElement *)_buttonElement
1309 {
1310     return static_cast<HTMLButtonElement*>(DOM_cast<Node*>(_internal));
1311 }
1312
1313 - (DOMHTMLFormElement *)form
1314 {
1315     return [DOMHTMLFormElement _formElementWith:[self _buttonElement]->form()];
1316 }
1317
1318 - (NSString *)accessKey
1319 {
1320     return [self _buttonElement]->getAttribute(accesskeyAttr);
1321 }
1322
1323 - (void)setAccessKey:(NSString *)accessKey
1324 {
1325     [self _buttonElement]->setAttribute(accesskeyAttr, accessKey);
1326 }
1327
1328 - (BOOL)disabled
1329 {
1330     return [self _buttonElement]->getAttribute(disabledAttr).isNull();
1331 }
1332
1333 - (void)setDisabled:(BOOL)disabled
1334 {
1335     [self _buttonElement]->setAttribute(disabledAttr, disabled ? "" : 0);
1336 }
1337
1338 - (NSString *)name
1339 {
1340     return [self _buttonElement]->name();
1341 }
1342
1343 - (void)setName:(NSString *)name
1344 {
1345     [self _buttonElement]->setName(name);
1346 }
1347
1348 - (int)tabIndex
1349 {
1350     return [self _buttonElement]->tabIndex();
1351 }
1352
1353 - (void)setTabIndex:(int)tabIndex
1354 {
1355     [self _buttonElement]->setTabIndex(tabIndex);
1356 }
1357
1358 - (NSString *)type
1359 {
1360     return [self _buttonElement]->type();
1361 }
1362
1363 - (NSString *)value
1364 {
1365     return [self _buttonElement]->getAttribute(valueAttr);
1366 }
1367
1368 - (void)setValue:(NSString *)value
1369 {
1370     [self _buttonElement]->setAttribute(valueAttr, value);
1371 }
1372
1373 @end
1374
1375 @implementation DOMHTMLLabelElement
1376
1377 - (HTMLLabelElement *)_labelElement
1378 {
1379     return static_cast<HTMLLabelElement*>(DOM_cast<Node*>(_internal));
1380 }
1381
1382 - (DOMHTMLFormElement *)form
1383 {
1384     Element *formElement = [self _labelElement]->formElement();
1385     if (!formElement)
1386         return 0;
1387     return [DOMHTMLFormElement _formElementWith:static_cast<HTMLGenericFormElement*>(formElement)->form()];
1388 }
1389
1390 - (NSString *)accessKey
1391 {
1392     return [self _labelElement]->getAttribute(accesskeyAttr);
1393 }
1394
1395 - (void)setAccessKey:(NSString *)accessKey
1396 {
1397     [self _labelElement]->setAttribute(accesskeyAttr, accessKey);
1398 }
1399
1400 - (NSString *)htmlFor
1401 {
1402     return [self _labelElement]->getAttribute(forAttr);
1403 }
1404
1405 - (void)setHtmlFor:(NSString *)htmlFor
1406 {
1407     [self _labelElement]->setAttribute(forAttr, htmlFor);
1408 }
1409
1410 @end
1411
1412 @implementation DOMHTMLFieldSetElement
1413
1414 - (HTMLFieldSetElement *)_fieldSetElement
1415 {
1416     return static_cast<HTMLFieldSetElement*>(DOM_cast<Node*>(_internal));
1417 }
1418
1419 - (DOMHTMLFormElement *)form
1420 {
1421     return [DOMHTMLFormElement _formElementWith:[self _fieldSetElement]->form()];
1422 }
1423
1424 @end
1425
1426 @implementation DOMHTMLLegendElement
1427
1428 - (HTMLLegendElement *)_legendElement
1429 {
1430     return static_cast<HTMLLegendElement*>(DOM_cast<Node*>(_internal));
1431 }
1432
1433 - (DOMHTMLFormElement *)form
1434 {
1435     return [DOMHTMLFormElement _formElementWith:[self _legendElement]->form()];
1436 }
1437
1438 - (NSString *)accessKey
1439 {
1440     return [self _legendElement]->getAttribute(accesskeyAttr);
1441 }
1442
1443 - (void)setAccessKey:(NSString *)accessKey
1444 {
1445     [self _legendElement]->setAttribute(accesskeyAttr, accessKey);
1446 }
1447
1448 - (NSString *)align
1449 {
1450     return [self _legendElement]->getAttribute(alignAttr);
1451 }
1452
1453 - (void)setAlign:(NSString *)align
1454 {
1455     [self _legendElement]->setAttribute(alignAttr, align);
1456 }
1457
1458 @end
1459
1460 @implementation DOMHTMLUListElement
1461
1462 - (HTMLUListElement *)_uListElement
1463 {
1464     return static_cast<HTMLUListElement*>(DOM_cast<Node*>(_internal));
1465 }
1466
1467 - (BOOL)compact
1468 {
1469     return [self _uListElement]->getAttribute(compactAttr).isNull();
1470 }
1471
1472 - (void)setCompact:(BOOL)compact
1473 {
1474     [self _uListElement]->setAttribute(compactAttr, compact ? "" : 0);
1475 }
1476
1477 - (NSString *)type
1478 {
1479     return [self _uListElement]->getAttribute(typeAttr);
1480 }
1481
1482 - (void)setType:(NSString *)type
1483 {
1484     [self _uListElement]->setAttribute(typeAttr, type);
1485 }
1486
1487 @end
1488
1489 @implementation DOMHTMLOListElement
1490
1491 - (HTMLOListElement *)_oListElement
1492 {
1493     return static_cast<HTMLOListElement*>(DOM_cast<Node*>(_internal));
1494 }
1495
1496 - (BOOL)compact
1497 {
1498     return [self _oListElement]->compact();
1499 }
1500
1501 - (void)setCompact:(BOOL)compact
1502 {
1503     [self _oListElement]->setCompact(compact);
1504 }
1505
1506 - (int)start
1507 {
1508     return [self _oListElement]->getAttribute(startAttr).toInt();
1509 }
1510
1511 - (void)setStart:(int)start
1512 {
1513     [self _oListElement]->setAttribute(startAttr, String::number(start));
1514 }
1515
1516 - (NSString *)type
1517 {
1518     return [self _oListElement]->getAttribute(typeAttr);
1519 }
1520
1521 - (void)setType:(NSString *)type
1522 {
1523     [self _oListElement]->setAttribute(typeAttr, type);
1524 }
1525
1526 @end
1527
1528 @implementation DOMHTMLDListElement
1529
1530 - (HTMLDListElement *)_dListElement
1531 {
1532     return static_cast<HTMLDListElement*>(DOM_cast<Node*>(_internal));
1533 }
1534
1535 - (BOOL)compact
1536 {
1537     return [self _dListElement]->getAttribute(compactAttr).isNull();
1538 }
1539
1540 - (void)setCompact:(BOOL)compact
1541 {
1542     [self _dListElement]->setAttribute(compactAttr, compact ? "" : 0);
1543 }
1544
1545 @end
1546
1547 @implementation DOMHTMLDirectoryElement
1548
1549 - (HTMLDirectoryElement *)_directoryListElement
1550 {
1551     return static_cast<HTMLDirectoryElement*>(DOM_cast<Node*>(_internal));
1552 }
1553
1554 - (BOOL)compact
1555 {
1556     return [self _directoryListElement]->getAttribute(compactAttr).isNull();
1557 }
1558
1559 - (void)setCompact:(BOOL)compact
1560 {
1561     [self _directoryListElement]->setAttribute(compactAttr, compact ? "" : 0);
1562 }
1563
1564 @end
1565
1566 @implementation DOMHTMLMenuElement
1567
1568 - (HTMLMenuElement *)_menuListElement
1569 {
1570     return static_cast<HTMLMenuElement*>(DOM_cast<Node*>(_internal));
1571 }
1572
1573 - (BOOL)compact
1574 {
1575     return [self _menuListElement]->getAttribute(compactAttr).isNull();
1576 }
1577
1578 - (void)setCompact:(BOOL)compact
1579 {
1580     [self _menuListElement]->setAttribute(compactAttr, compact ? "" : 0);
1581 }
1582
1583 @end
1584
1585 @implementation DOMHTMLLIElement
1586
1587 - (HTMLLIElement *)_liElement
1588 {
1589     return static_cast<HTMLLIElement*>(DOM_cast<Node*>(_internal));
1590 }
1591
1592 - (NSString *)type
1593 {
1594     return [self _liElement]->type();
1595 }
1596
1597 - (void)setType:(NSString *)type
1598 {
1599     [self _liElement]->setType(type);
1600 }
1601
1602 - (int)value
1603 {
1604     return [self _liElement]->value();
1605 }
1606
1607 - (void)setValue:(int)value
1608 {
1609     [self _liElement]->setValue(value);
1610 }
1611
1612 @end
1613
1614 @implementation DOMHTMLQuoteElement
1615
1616 - (HTMLElement *)_quoteElement
1617 {
1618     return static_cast<HTMLElement*>(DOM_cast<Node*>(_internal));
1619 }
1620
1621 - (NSString *)cite
1622 {
1623     return [self _quoteElement]->getAttribute(citeAttr);
1624 }
1625
1626 - (void)setCite:(NSString *)cite
1627 {
1628     [self _quoteElement]->setAttribute(citeAttr, cite);
1629 }
1630
1631 @end
1632
1633 @implementation DOMHTMLDivElement
1634
1635 - (HTMLDivElement *)_divElement
1636 {
1637     return static_cast<HTMLDivElement*>(DOM_cast<Node*>(_internal));
1638 }
1639
1640 - (NSString *)align
1641 {
1642     return [self _divElement]->getAttribute(alignAttr);
1643 }
1644
1645 - (void)setAlign:(NSString *)align
1646 {
1647     [self _divElement]->setAttribute(alignAttr, align);
1648 }
1649
1650 @end
1651
1652 @implementation DOMHTMLParagraphElement
1653
1654 - (HTMLParagraphElement *)_paragraphElement
1655 {
1656     return static_cast<HTMLParagraphElement*>(DOM_cast<Node*>(_internal));
1657 }
1658
1659 - (NSString *)align
1660 {
1661     return [self _paragraphElement]->getAttribute(alignAttr);
1662 }
1663
1664 - (void)setAlign:(NSString *)align
1665 {
1666     [self _paragraphElement]->setAttribute(alignAttr, align);
1667 }
1668
1669 @end
1670
1671 @implementation DOMHTMLHeadingElement
1672
1673 - (HTMLHeadingElement *)_headingElement
1674 {
1675     return static_cast<HTMLHeadingElement*>(DOM_cast<Node*>(_internal));
1676 }
1677
1678 - (NSString *)align
1679 {
1680     return [self _headingElement]->getAttribute(alignAttr);
1681 }
1682
1683 - (void)setAlign:(NSString *)align
1684 {
1685     [self _headingElement]->setAttribute(alignAttr, align);
1686 }
1687
1688 @end
1689
1690 @implementation DOMHTMLPreElement
1691
1692 - (HTMLPreElement *)_preElement
1693 {
1694     return static_cast<HTMLPreElement*>(DOM_cast<Node*>(_internal));
1695 }
1696
1697 - (int)width
1698 {
1699     return [self _preElement]->getAttribute(widthAttr).toInt();
1700 }
1701
1702 - (void)setWidth:(int)width
1703 {
1704     [self _preElement]->setAttribute(widthAttr, String::number(width));
1705 }
1706
1707 @end
1708
1709 @implementation DOMHTMLBRElement
1710
1711 - (HTMLBRElement *)_BRElement
1712 {
1713     return static_cast<HTMLBRElement*>(DOM_cast<Node*>(_internal));
1714 }
1715
1716 - (NSString *)clear
1717 {
1718     return [self _BRElement]->getAttribute(clearAttr);
1719 }
1720
1721 - (void)setClear:(NSString *)clear
1722 {
1723     [self _BRElement]->setAttribute(clearAttr, clear);
1724 }
1725
1726 @end
1727
1728 @implementation DOMHTMLBaseFontElement
1729
1730 - (HTMLBaseFontElement *)_baseFontElement
1731 {
1732     return static_cast<HTMLBaseFontElement*>(DOM_cast<Node*>(_internal));
1733 }
1734
1735 - (NSString *)color
1736 {
1737     return [self _baseFontElement]->getAttribute(colorAttr);
1738 }
1739
1740 - (void)setColor:(NSString *)color
1741 {
1742     [self _baseFontElement]->setAttribute(colorAttr, color);
1743 }
1744
1745 - (NSString *)face
1746 {
1747     return [self _baseFontElement]->getAttribute(faceAttr);
1748 }
1749
1750 - (void)setFace:(NSString *)face
1751 {
1752     [self _baseFontElement]->setAttribute(faceAttr, face);
1753 }
1754
1755 - (NSString *)size
1756 {
1757     return [self _baseFontElement]->getAttribute(sizeAttr);
1758 }
1759
1760 - (void)setSize:(NSString *)size
1761 {
1762     [self _baseFontElement]->setAttribute(sizeAttr, size);
1763 }
1764
1765 @end
1766
1767 @implementation DOMHTMLFontElement
1768
1769 - (HTMLFontElement *)_fontElement
1770 {
1771     return static_cast<HTMLFontElement*>(DOM_cast<Node*>(_internal));
1772 }
1773
1774 - (NSString *)color
1775 {
1776     return [self _fontElement]->getAttribute(colorAttr);
1777 }
1778
1779 - (void)setColor:(NSString *)color
1780 {
1781     [self _fontElement]->setAttribute(colorAttr, color);
1782 }
1783
1784 - (NSString *)face
1785 {
1786     return [self _fontElement]->getAttribute(faceAttr);
1787 }
1788
1789 - (void)setFace:(NSString *)face
1790 {
1791     [self _fontElement]->setAttribute(faceAttr, face);
1792 }
1793
1794 - (NSString *)size
1795 {
1796     return [self _fontElement]->getAttribute(sizeAttr);
1797 }
1798
1799 - (void)setSize:(NSString *)size
1800 {
1801     [self _fontElement]->setAttribute(sizeAttr, size);
1802 }
1803
1804 @end
1805
1806 @implementation DOMHTMLHRElement
1807
1808 - (HTMLHRElement *)_HRElement
1809 {
1810     return static_cast<HTMLHRElement*>(DOM_cast<Node*>(_internal));
1811 }
1812
1813 - (NSString *)align
1814 {
1815     return [self _HRElement]->getAttribute(alignAttr);
1816 }
1817
1818 - (void)setAlign:(NSString *)align
1819 {
1820     [self _HRElement]->setAttribute(alignAttr, align);
1821 }
1822
1823 - (BOOL)noShade
1824 {
1825     return [self _HRElement]->getAttribute(noshadeAttr).isNull();
1826 }
1827
1828 - (void)setNoShade:(BOOL)noShade
1829 {
1830     [self _HRElement]->setAttribute(noshadeAttr, noShade ? "" : 0);
1831 }
1832
1833 - (NSString *)size
1834 {
1835     return [self _HRElement]->getAttribute(sizeAttr);
1836 }
1837
1838 - (void)setSize:(NSString *)size
1839 {
1840     [self _HRElement]->setAttribute(sizeAttr, size);
1841 }
1842
1843 - (NSString *)width
1844 {
1845     return [self _HRElement]->getAttribute(widthAttr);
1846 }
1847
1848 - (void)setWidth:(NSString *)width
1849 {
1850     [self _HRElement]->setAttribute(widthAttr, width);
1851 }
1852
1853 @end
1854
1855 @implementation DOMHTMLModElement
1856
1857 - (HTMLElement *)_modElement
1858 {
1859     return static_cast<HTMLElement*>(DOM_cast<Node*>(_internal));
1860 }
1861
1862 - (NSString *)cite
1863 {
1864     return [self _modElement]->getAttribute(citeAttr);
1865 }
1866
1867 - (void)setCite:(NSString *)cite
1868 {
1869     [self _modElement]->setAttribute(citeAttr, cite);
1870 }
1871
1872 - (NSString *)dateTime
1873 {
1874     return [self _modElement]->getAttribute(datetimeAttr);
1875 }
1876
1877 - (void)setDateTime:(NSString *)dateTime
1878 {
1879     [self _modElement]->setAttribute(datetimeAttr, dateTime);
1880 }
1881
1882 @end
1883
1884 @implementation DOMHTMLAnchorElement
1885
1886 - (HTMLAnchorElement *)_anchorElement
1887 {
1888     return static_cast<HTMLAnchorElement*>(DOM_cast<Node*>(_internal));
1889 }
1890
1891 - (NSString *)accessKey
1892 {
1893     return [self _anchorElement]->getAttribute(accesskeyAttr);
1894 }
1895
1896 - (void)setAccessKey:(NSString *)accessKey
1897 {
1898     [self _anchorElement]->setAttribute(accesskeyAttr, accessKey);
1899 }
1900
1901 - (NSString *)charset
1902 {
1903     return [self _anchorElement]->getAttribute(charsetAttr);
1904 }
1905
1906 - (void)setCharset:(NSString *)charset
1907 {
1908     [self _anchorElement]->setAttribute(charsetAttr, charset);
1909 }
1910
1911 - (NSString *)coords
1912 {
1913     return [self _anchorElement]->getAttribute(coordsAttr);
1914 }
1915
1916 - (void)setCoords:(NSString *)coords
1917 {
1918     [self _anchorElement]->setAttribute(coordsAttr, coords);
1919 }
1920
1921 - (NSURL *)absoluteLinkURL
1922 {
1923     return [self _getURLAttribute:@"href"];
1924 }
1925
1926 - (NSString *)href
1927 {
1928     return [self _anchorElement]->href();
1929 }
1930
1931 - (void)setHref:(NSString *)href
1932 {
1933     [self _anchorElement]->setAttribute(hrefAttr, href);
1934 }
1935
1936 - (NSString *)hreflang
1937 {
1938     return [self _anchorElement]->hreflang();
1939 }
1940
1941 - (void)setHreflang:(NSString *)hreflang
1942 {
1943     [self _anchorElement]->setHreflang(hreflang);
1944 }
1945
1946 - (NSString *)name
1947 {
1948     return [self _anchorElement]->name();
1949 }
1950
1951 - (void)setName:(NSString *)name
1952 {
1953     [self _anchorElement]->setName(name);
1954 }
1955
1956 - (NSString *)rel
1957 {
1958     return [self _anchorElement]->rel();
1959 }
1960
1961 - (void)setRel:(NSString *)rel
1962 {
1963     [self _anchorElement]->setRel(rel);
1964 }
1965
1966 - (NSString *)rev
1967 {
1968     return [self _anchorElement]->rev();
1969 }
1970
1971 - (void)setRev:(NSString *)rev
1972 {
1973     [self _anchorElement]->setRev(rev);
1974 }
1975
1976 - (NSString *)shape
1977 {
1978     return [self _anchorElement]->shape();
1979 }
1980
1981 - (void)setShape:(NSString *)shape
1982 {
1983     [self _anchorElement]->setShape(shape);
1984 }
1985
1986 - (int)tabIndex
1987 {
1988     return [self _anchorElement]->tabIndex();
1989 }
1990
1991 - (void)setTabIndex:(int)tabIndex
1992 {
1993     [self _anchorElement]->setTabIndex(tabIndex);
1994 }
1995
1996 - (NSString *)target
1997 {
1998     return [self _anchorElement]->getAttribute(targetAttr);
1999 }
2000
2001 - (void)setTarget:(NSString *)target
2002 {
2003     [self _anchorElement]->setAttribute(targetAttr, target);
2004 }
2005
2006 - (NSString *)type
2007 {
2008     return [self _anchorElement]->getAttribute(typeAttr);
2009 }
2010
2011 - (void)setType:(NSString *)type
2012 {
2013     [self _anchorElement]->setAttribute(typeAttr, type);
2014 }
2015
2016 - (void)blur
2017 {
2018     HTMLAnchorElement *impl = [self _anchorElement];
2019     if (impl->document()->focusNode() == impl)
2020         impl->document()->setFocusNode(0);
2021 }
2022
2023 - (void)focus
2024 {
2025     HTMLAnchorElement *impl = [self _anchorElement];
2026     impl->document()->setFocusNode(static_cast<Element*>(impl));
2027 }
2028
2029 @end
2030
2031 @implementation DOMHTMLImageElement
2032
2033 - (HTMLImageElement *)_imageElement
2034 {
2035     return static_cast<HTMLImageElement*>(DOM_cast<Node*>(_internal));
2036 }
2037
2038 - (NSString *)name
2039 {
2040     return [self _imageElement]->getAttribute(nameAttr);
2041 }
2042
2043 - (void)setName:(NSString *)name
2044 {
2045     [self _imageElement]->setAttribute(nameAttr, name);
2046 }
2047
2048 - (NSString *)align
2049 {
2050     return [self _imageElement]->getAttribute(alignAttr);
2051 }
2052
2053 - (void)setAlign:(NSString *)align
2054 {
2055     [self _imageElement]->setAttribute(alignAttr, align);
2056 }
2057
2058 - (NSString *)alt
2059 {
2060     return [self _imageElement]->getAttribute(altAttr);
2061 }
2062
2063 - (NSString *)altDisplayString
2064 {
2065     String alt = [self _imageElement]->getAttribute(altAttr);
2066     return alt.replace('\\', [self _element]->document()->backslashAsCurrencySymbol());
2067 }
2068
2069 - (void)setAlt:(NSString *)alt
2070 {
2071     [self _imageElement]->setAttribute(altAttr, alt);
2072 }
2073
2074 - (NSString *)border
2075 {
2076     return [self _imageElement]->getAttribute(borderAttr);
2077 }
2078
2079 - (void)setBorder:(NSString *)border
2080 {
2081     [self _imageElement]->setAttribute(borderAttr, border);
2082 }
2083
2084 - (int)height
2085 {
2086     return [self _imageElement]->getAttribute(heightAttr).toInt();
2087 }
2088
2089 - (void)setHeight:(int)height
2090 {
2091     [self _imageElement]->setAttribute(heightAttr, String::number(height));
2092 }
2093
2094 - (int)hspace
2095 {
2096     return [self _imageElement]->getAttribute(hspaceAttr).toInt();
2097 }
2098
2099 - (void)setHspace:(int)hspace
2100 {
2101     [self _imageElement]->setAttribute(hspaceAttr, String::number(hspace));
2102 }
2103
2104 - (BOOL)isMap
2105 {
2106     return [self _imageElement]->getAttribute(ismapAttr).isNull();
2107 }
2108
2109 - (void)setIsMap:(BOOL)isMap
2110 {
2111     [self _imageElement]->setAttribute(ismapAttr, isMap ? "" : 0);
2112 }
2113
2114 - (NSString *)longDesc
2115 {
2116     return [self _imageElement]->getAttribute(longdescAttr);
2117 }
2118
2119 - (void)setLongDesc:(NSString *)longDesc
2120 {
2121     [self _imageElement]->setAttribute(longdescAttr, longDesc);
2122 }
2123
2124 - (NSURL *)absoluteImageURL
2125 {
2126     return [self _getURLAttribute:@"src"];
2127 }
2128
2129 - (NSString *)src
2130 {
2131     return [self _imageElement]->src();
2132 }
2133
2134 - (void)setSrc:(NSString *)src
2135 {
2136     [self _imageElement]->setAttribute(srcAttr, src);
2137 }
2138
2139 - (NSString *)useMap
2140 {
2141     return [self _imageElement]->getAttribute(usemapAttr);
2142 }
2143
2144 - (void)setUseMap:(NSString *)useMap
2145 {
2146     [self _imageElement]->setAttribute(usemapAttr, useMap);
2147 }
2148
2149 - (int)vspace
2150 {
2151     return [self _imageElement]->getAttribute(vspaceAttr).toInt();
2152 }
2153
2154 - (void)setVspace:(int)vspace
2155 {
2156     [self _imageElement]->setAttribute(vspaceAttr, String::number(vspace));
2157 }
2158
2159 - (int)width
2160 {
2161     return [self _imageElement]->getAttribute(widthAttr).toInt();
2162 }
2163
2164 - (void)setWidth:(int)width
2165 {
2166     [self _imageElement]->setAttribute(widthAttr, String::number(width));
2167 }
2168
2169 @end
2170
2171 @implementation DOMHTMLObjectElement
2172
2173 - (HTMLObjectElement *)_objectElement
2174 {
2175     return static_cast<HTMLObjectElement*>(DOM_cast<Node*>(_internal));
2176 }
2177
2178 - (DOMHTMLFormElement *)form
2179 {
2180     return [DOMHTMLFormElement _formElementWith:[self _objectElement]->form()];
2181 }
2182
2183 - (NSString *)code
2184 {
2185     return [self _objectElement]->getAttribute(codeAttr);
2186 }
2187
2188 - (void)setCode:(NSString *)code
2189 {
2190     [self _objectElement]->setAttribute(codeAttr, code);
2191 }
2192
2193 - (NSString *)align
2194 {
2195     return [self _objectElement]->getAttribute(alignAttr);
2196 }
2197
2198 - (void)setAlign:(NSString *)align
2199 {
2200     [self _objectElement]->setAttribute(alignAttr, align);
2201 }
2202
2203 - (NSString *)archive
2204 {
2205     return [self _objectElement]->getAttribute(archiveAttr);
2206 }
2207
2208 - (void)setArchive:(NSString *)archive
2209 {
2210     [self _objectElement]->setAttribute(archiveAttr, archive);
2211 }
2212
2213 - (NSString *)border
2214 {
2215     return [self _objectElement]->getAttribute(borderAttr);
2216 }
2217
2218 - (void)setBorder:(NSString *)border
2219 {
2220     [self _objectElement]->setAttribute(borderAttr, border);
2221 }
2222
2223 - (NSString *)codeBase
2224 {
2225     return [self _objectElement]->getAttribute(codebaseAttr);
2226 }
2227
2228 - (void)setCodeBase:(NSString *)codeBase
2229 {
2230     [self _objectElement]->setAttribute(codebaseAttr, codeBase);
2231 }
2232
2233 - (NSString *)codeType
2234 {
2235     return [self _objectElement]->getAttribute(codetypeAttr);
2236 }
2237
2238 - (void)setCodeType:(NSString *)codeType
2239 {
2240     [self _objectElement]->setAttribute(codetypeAttr, codeType);
2241 }
2242
2243 - (NSURL *)absoluteImageURL
2244 {
2245     if (![self _objectElement]->renderer() || ![self _objectElement]->renderer()->isImage())
2246         return nil;
2247     return [self _getURLAttribute:@"data"];
2248 }
2249
2250 - (NSString *)data
2251 {
2252     return [self _objectElement]->getAttribute(dataAttr);
2253 }
2254
2255 - (void)setData:(NSString *)data
2256 {
2257     [self _objectElement]->setAttribute(dataAttr, data);
2258 }
2259
2260 - (BOOL)declare
2261 {
2262     return [self _objectElement]->getAttribute(declareAttr).isNull();
2263 }
2264
2265 - (void)setDeclare:(BOOL)declare
2266 {
2267     [self _objectElement]->setAttribute(declareAttr, declare ? "" : 0);
2268 }
2269
2270 - (NSString *)height
2271 {
2272     return [self _objectElement]->getAttribute(heightAttr);
2273 }
2274
2275 - (void)setHeight:(NSString *)height
2276 {
2277     [self _objectElement]->setAttribute(heightAttr, height);
2278 }
2279
2280 - (int)hspace
2281 {
2282     return [self _objectElement]->getAttribute(hspaceAttr).toInt();
2283 }
2284
2285 - (void)setHspace:(int)hspace
2286 {
2287     [self _objectElement]->setAttribute(hspaceAttr, String::number(hspace));
2288 }
2289
2290 - (NSString *)name
2291 {
2292     return [self _objectElement]->getAttribute(nameAttr);
2293 }
2294
2295 - (void)setName:(NSString *)name
2296 {
2297     [self _objectElement]->setAttribute(nameAttr, name);
2298 }
2299
2300 - (NSString *)standby
2301 {
2302     return [self _objectElement]->getAttribute(standbyAttr);
2303 }
2304
2305 - (void)setStandby:(NSString *)standby
2306 {
2307     [self _objectElement]->setAttribute(standbyAttr, standby);
2308 }
2309
2310 - (int)tabIndex
2311 {
2312     return [self _objectElement]->getAttribute(tabindexAttr).toInt();
2313 }
2314
2315 - (void)setTabIndex:(int)tabIndex
2316 {
2317     [self _objectElement]->setAttribute(tabindexAttr, String::number(tabIndex));
2318 }
2319
2320 - (NSString *)type
2321 {
2322     return [self _objectElement]->getAttribute(typeAttr);
2323 }
2324
2325 - (void)setType:(NSString *)type
2326 {
2327     [self _objectElement]->setAttribute(typeAttr, type);
2328 }
2329
2330 - (NSString *)useMap
2331 {
2332     return [self _objectElement]->getAttribute(usemapAttr);
2333 }
2334
2335 - (void)setUseMap:(NSString *)useMap
2336 {
2337     [self _objectElement]->setAttribute(usemapAttr, useMap);
2338 }
2339
2340 - (int)vspace
2341 {
2342     return [self _objectElement]->getAttribute(vspaceAttr).toInt();
2343 }
2344
2345 - (void)setVspace:(int)vspace
2346 {
2347     [self _objectElement]->setAttribute(vspaceAttr, String::number(vspace));
2348 }
2349
2350 - (NSString *)width
2351 {
2352     return [self _objectElement]->getAttribute(widthAttr);
2353 }
2354
2355 - (void)setWidth:(NSString *)width
2356 {
2357     [self _objectElement]->setAttribute(widthAttr, width);
2358 }
2359
2360 - (DOMDocument *)contentDocument
2361 {
2362     return [DOMDocument _documentWith:[self _objectElement]->contentDocument()];
2363 }
2364
2365 @end
2366
2367 @implementation DOMHTMLParamElement
2368
2369 - (HTMLParamElement *)_paramElement
2370 {
2371     return static_cast<HTMLParamElement*>(DOM_cast<Node*>(_internal));
2372 }
2373
2374 - (NSString *)name
2375 {
2376     return [self _paramElement]->getAttribute(nameAttr);
2377 }
2378
2379 - (void)setName:(NSString *)name
2380 {
2381     [self _paramElement]->setAttribute(nameAttr, name);
2382 }
2383
2384 - (NSString *)type
2385 {
2386     return [self _paramElement]->getAttribute(typeAttr);
2387 }
2388
2389 - (void)setType:(NSString *)type
2390 {
2391     [self _paramElement]->setAttribute(typeAttr, type);
2392 }
2393
2394 - (NSString *)value
2395 {
2396     return [self _paramElement]->getAttribute(valueAttr);
2397 }
2398
2399 - (void)setValue:(NSString *)value
2400 {
2401     [self _paramElement]->setAttribute(valueAttr, value);
2402 }
2403
2404 - (NSString *)valueType
2405 {
2406     return [self _paramElement]->getAttribute(valuetypeAttr);
2407 }
2408
2409 - (void)setValueType:(NSString *)valueType
2410 {
2411     [self _paramElement]->setAttribute(valuetypeAttr, valueType);
2412 }
2413
2414 @end
2415
2416 @implementation DOMHTMLAppletElement
2417
2418 - (HTMLAppletElement *)_appletElement
2419 {
2420     return static_cast<HTMLAppletElement*>(DOM_cast<Node*>(_internal));
2421 }
2422
2423 - (NSString *)align
2424 {
2425     return [self _appletElement]->getAttribute(alignAttr);
2426 }
2427
2428 - (void)setAlign:(NSString *)align
2429 {
2430     [self _appletElement]->setAttribute(alignAttr, align);
2431 }
2432
2433 - (NSString *)alt
2434 {
2435     return [self _appletElement]->getAttribute(altAttr);
2436 }
2437
2438 - (NSString *)altDisplayString
2439 {
2440     String alt = [self _appletElement]->getAttribute(altAttr);
2441     return alt.replace('\\', [self _element]->document()->backslashAsCurrencySymbol());
2442 }
2443
2444 - (void)setAlt:(NSString *)alt
2445 {
2446     [self _appletElement]->setAttribute(altAttr, alt);
2447 }
2448
2449 - (NSString *)archive
2450 {
2451     return [self _appletElement]->getAttribute(archiveAttr);
2452 }
2453
2454 - (void)setArchive:(NSString *)archive
2455 {
2456     [self _appletElement]->setAttribute(archiveAttr, archive);
2457 }
2458
2459 - (NSString *)code
2460 {
2461     return [self _appletElement]->getAttribute(codeAttr);
2462 }
2463
2464 - (void)setCode:(NSString *)code
2465 {
2466     [self _appletElement]->setAttribute(codeAttr, code);
2467 }
2468
2469 - (NSString *)codeBase
2470 {
2471     return [self _appletElement]->getAttribute(codebaseAttr);
2472 }
2473
2474 - (void)setCodeBase:(NSString *)codeBase
2475 {
2476     [self _appletElement]->setAttribute(codebaseAttr, codeBase);
2477 }
2478
2479 - (NSString *)height
2480 {
2481     return [self _appletElement]->getAttribute(heightAttr);
2482 }
2483
2484 - (void)setHeight:(NSString *)height
2485 {
2486     [self _appletElement]->setAttribute(heightAttr, height);
2487 }
2488
2489 - (int)hspace
2490 {
2491     return [self _appletElement]->getAttribute(hspaceAttr).toInt();
2492 }
2493
2494 - (void)setHspace:(int)hspace
2495 {
2496     [self _appletElement]->setAttribute(hspaceAttr, String::number(hspace));
2497 }
2498
2499 - (NSString *)name
2500 {
2501     return [self _appletElement]->getAttribute(nameAttr);
2502 }
2503
2504 - (void)setName:(NSString *)name
2505 {
2506     [self _appletElement]->setAttribute(nameAttr, name);
2507 }
2508
2509 - (NSString *)object
2510 {
2511     return [self _appletElement]->getAttribute(objectAttr);
2512 }
2513
2514 - (void)setObject:(NSString *)object
2515 {
2516     [self _appletElement]->setAttribute(objectAttr, object);
2517 }
2518
2519 - (int)vspace
2520 {
2521     return [self _appletElement]->getAttribute(vspaceAttr).toInt();
2522 }
2523
2524 - (void)setVspace:(int)vspace
2525 {
2526     [self _appletElement]->setAttribute(vspaceAttr, String::number(vspace));
2527 }
2528
2529 - (NSString *)width
2530 {
2531     return [self _appletElement]->getAttribute(widthAttr);
2532 }
2533
2534 - (void)setWidth:(NSString *)width
2535 {
2536     [self _appletElement]->setAttribute(widthAttr, width);
2537 }
2538
2539 @end
2540
2541 @implementation DOMHTMLMapElement
2542
2543 - (HTMLMapElement *)_mapElement
2544 {
2545     return static_cast<HTMLMapElement*>(DOM_cast<Node*>(_internal));
2546 }
2547
2548 - (DOMHTMLCollection *)areas
2549 {
2550     HTMLCollection *collection = new HTMLCollection([self _mapElement], HTMLCollection::MapAreas);
2551     return [DOMHTMLCollection _collectionWith:collection];
2552 }
2553
2554 - (NSString *)name
2555 {
2556     return [self _mapElement]->getAttribute(nameAttr);
2557 }
2558
2559 - (void)setName:(NSString *)name
2560 {
2561     [self _mapElement]->setAttribute(nameAttr, name);
2562 }
2563
2564 @end
2565
2566 @implementation DOMHTMLAreaElement
2567
2568 - (HTMLAreaElement *)_areaElement
2569 {
2570     return static_cast<HTMLAreaElement*>(DOM_cast<Node*>(_internal));
2571 }
2572
2573 - (NSString *)accessKey
2574 {
2575     return [self _areaElement]->getAttribute(accesskeyAttr);
2576 }
2577
2578 - (void)setAccessKey:(NSString *)accessKey
2579 {
2580     [self _areaElement]->setAttribute(accesskeyAttr, accessKey);
2581 }
2582
2583 - (NSString *)alt
2584 {
2585     return [self _areaElement]->getAttribute(altAttr);
2586 }
2587
2588 - (NSString *)altDisplayString
2589 {
2590     String alt = [self _areaElement]->getAttribute(altAttr);
2591     return alt.replace('\\', [self _element]->document()->backslashAsCurrencySymbol());
2592 }
2593
2594 - (void)setAlt:(NSString *)alt
2595 {
2596     [self _areaElement]->setAttribute(altAttr, alt);
2597 }
2598
2599 - (NSString *)coords
2600 {
2601     return [self _areaElement]->getAttribute(coordsAttr);
2602 }
2603
2604 - (void)setCoords:(NSString *)coords
2605 {
2606     [self _areaElement]->setAttribute(coordsAttr, coords);
2607 }
2608
2609 - (NSURL *)absoluteLinkURL
2610 {
2611     return [self _getURLAttribute:@"href"];
2612 }
2613
2614 - (NSString *)href
2615 {
2616     return [self _areaElement]->href();
2617 }
2618
2619 - (void)setHref:(NSString *)href
2620 {
2621     [self _areaElement]->setAttribute(hrefAttr, href);
2622 }
2623
2624 - (BOOL)noHref
2625 {
2626     return [self _areaElement]->getAttribute(nohrefAttr).isNull();
2627 }
2628
2629 - (void)setNoHref:(BOOL)noHref
2630 {
2631     [self _areaElement]->setAttribute(nohrefAttr, noHref ? "" : 0);
2632 }
2633
2634 - (NSString *)shape
2635 {
2636     return [self _areaElement]->getAttribute(shapeAttr);
2637 }
2638
2639 - (void)setShape:(NSString *)shape
2640 {
2641     [self _areaElement]->setAttribute(shapeAttr, shape);
2642 }
2643
2644 - (int)tabIndex
2645 {
2646     return [self _areaElement]->getAttribute(tabindexAttr).toInt();
2647 }
2648
2649 - (void)setTabIndex:(int)tabIndex
2650 {
2651     [self _areaElement]->setAttribute(tabindexAttr, String::number(tabIndex));
2652 }
2653
2654 - (NSString *)target
2655 {
2656     return [self _areaElement]->getAttribute(targetAttr);
2657 }
2658
2659 - (void)setTarget:(NSString *)target
2660 {
2661     [self _areaElement]->setAttribute(targetAttr, target);
2662 }
2663
2664 @end
2665
2666 @implementation DOMHTMLScriptElement
2667
2668 - (HTMLScriptElement *)_scriptElement
2669 {
2670     return static_cast<HTMLScriptElement*>(DOM_cast<Node*>(_internal));
2671 }
2672
2673 - (NSString *)text
2674 {
2675     return [self _scriptElement]->getAttribute(textAttr);
2676 }
2677
2678 - (void)setText:(NSString *)text
2679 {
2680     [self _scriptElement]->setAttribute(textAttr, text);
2681 }
2682
2683 - (NSString *)htmlFor
2684 {
2685     ASSERT_WITH_MESSAGE(0, "not implemented by khtml");
2686     return nil;
2687 }
2688
2689 - (void)setHtmlFor:(NSString *)htmlFor
2690 {
2691     ASSERT_WITH_MESSAGE(0, "not implemented by khtml");
2692 }
2693
2694 - (NSString *)event
2695 {
2696     ASSERT_WITH_MESSAGE(0, "not implemented by khtml");
2697     return nil;
2698 }
2699
2700 - (void)setEvent:(NSString *)event
2701 {
2702     ASSERT_WITH_MESSAGE(0, "not implemented by khtml");
2703 }
2704
2705 - (NSString *)charset
2706 {
2707     return [self _scriptElement]->getAttribute(charsetAttr);
2708 }
2709
2710 - (void)setCharset:(NSString *)charset
2711 {
2712     [self _scriptElement]->setAttribute(charsetAttr, charset);
2713 }
2714
2715 - (BOOL)defer
2716 {
2717     return [self _scriptElement]->getAttribute(deferAttr).isNull();
2718 }
2719
2720 - (void)setDefer:(BOOL)defer
2721 {
2722     [self _scriptElement]->setAttribute(deferAttr, defer ? "" : 0);
2723 }
2724
2725 - (NSString *)src
2726 {
2727     return [self _scriptElement]->getAttribute(srcAttr);
2728 }
2729
2730 - (void)setSrc:(NSString *)src
2731 {
2732     [self _scriptElement]->setAttribute(srcAttr, src);
2733 }
2734
2735 - (NSString *)type
2736 {
2737     return [self _scriptElement]->getAttribute(typeAttr);
2738 }
2739
2740 - (void)setType:(NSString *)type
2741 {
2742     [self _scriptElement]->setAttribute(typeAttr, type);
2743 }
2744
2745 @end
2746
2747 @implementation DOMHTMLTableCaptionElement
2748
2749 - (NSString *)align
2750 {
2751     return [self _tableCaptionElement]->getAttribute(alignAttr);
2752 }
2753
2754 - (void)setAlign:(NSString *)align
2755 {
2756     [self _tableCaptionElement]->setAttribute(alignAttr, align);
2757 }
2758
2759 @end
2760
2761 @implementation DOMHTMLTableCaptionElement (WebCoreInternal)
2762
2763 + (DOMHTMLTableCaptionElement *)_tableCaptionElementWith:(HTMLTableCaptionElement *)impl
2764 {
2765     return static_cast<DOMHTMLTableCaptionElement*>([DOMNode _nodeWith:impl]);
2766 }
2767
2768 - (HTMLTableCaptionElement *)_tableCaptionElement
2769 {
2770     return static_cast<HTMLTableCaptionElement*>(DOM_cast<Node*>(_internal));
2771 }
2772
2773 @end
2774
2775 @implementation DOMHTMLTableSectionElement
2776
2777 - (NSString *)align
2778 {
2779     return [self _tableSectionElement]->getAttribute(alignAttr);
2780 }
2781
2782 - (void)setAlign:(NSString *)align
2783 {
2784     [self _tableSectionElement]->setAttribute(alignAttr, align);
2785 }
2786
2787 - (NSString *)ch
2788 {
2789     return [self _tableSectionElement]->getAttribute(charoffAttr);
2790 }
2791
2792 - (void)setCh:(NSString *)ch
2793 {
2794     [self _tableSectionElement]->setAttribute(charoffAttr, ch);
2795 }
2796
2797 - (NSString *)chOff
2798 {
2799     return [self _tableSectionElement]->getAttribute(charoffAttr);
2800 }
2801
2802 - (void)setChOff:(NSString *)chOff
2803 {
2804     [self _tableSectionElement]->setAttribute(charoffAttr, chOff);
2805 }
2806
2807 - (NSString *)vAlign
2808 {
2809     return [self _tableSectionElement]->getAttribute(valignAttr);
2810 }
2811
2812 - (void)setVAlign:(NSString *)vAlign
2813 {
2814     [self _tableSectionElement]->setAttribute(valignAttr, vAlign);
2815 }
2816
2817 - (DOMHTMLCollection *)rows
2818 {
2819     HTMLCollection *collection = new HTMLCollection([self _tableSectionElement], HTMLCollection::TableRows);
2820     return [DOMHTMLCollection _collectionWith:collection];
2821 }
2822
2823 - (DOMHTMLElement *)insertRow:(int)index
2824 {
2825     ExceptionCode ec = 0;
2826     HTMLElement *impl = [self _tableSectionElement]->insertRow(index, ec);
2827     raiseOnDOMError(ec);
2828     return [DOMHTMLElement _elementWith:impl];
2829 }
2830
2831 - (void)deleteRow:(int)index
2832 {
2833     ExceptionCode ec = 0;
2834     [self _tableSectionElement]->deleteRow(index, ec);
2835     raiseOnDOMError(ec);
2836 }
2837
2838 @end
2839
2840 @implementation DOMHTMLTableSectionElement (WebCoreInternal)
2841
2842 + (DOMHTMLTableSectionElement *)_tableSectionElementWith:(HTMLTableSectionElement *)impl
2843 {
2844     return static_cast<DOMHTMLTableSectionElement*>([DOMNode _nodeWith:impl]);
2845 }
2846
2847 - (HTMLTableSectionElement *)_tableSectionElement
2848 {
2849     return static_cast<HTMLTableSectionElement*>(DOM_cast<Node*>(_internal));
2850 }
2851
2852 @end
2853
2854 @implementation DOMHTMLTableElement
2855
2856 - (DOMHTMLTableCaptionElement *)caption
2857 {
2858     return [DOMHTMLTableCaptionElement _tableCaptionElementWith:[self _tableElement]->caption()];
2859 }
2860
2861 - (void)setCaption:(DOMHTMLTableCaptionElement *)caption
2862 {
2863     [self _tableElement]->setCaption([caption _tableCaptionElement]);
2864 }
2865
2866 - (DOMHTMLTableSectionElement *)tHead
2867 {
2868     return [DOMHTMLTableSectionElement _tableSectionElementWith:[self _tableElement]->tHead()];
2869 }
2870
2871 - (void)setTHead:(DOMHTMLTableSectionElement *)tHead
2872 {
2873     [self _tableElement]->setTHead([tHead _tableSectionElement]);
2874 }
2875
2876 - (DOMHTMLTableSectionElement *)tFoot
2877 {
2878     return [DOMHTMLTableSectionElement _tableSectionElementWith:[self _tableElement]->tFoot()];
2879 }
2880
2881 - (void)setTFoot:(DOMHTMLTableSectionElement *)tFoot
2882 {
2883     [self _tableElement]->setTFoot([tFoot _tableSectionElement]);
2884 }
2885
2886 - (DOMHTMLCollection *)rows
2887 {
2888     HTMLCollection *collection = new HTMLCollection([self _tableElement], HTMLCollection::TableRows);
2889     return [DOMHTMLCollection _collectionWith:collection];
2890 }
2891
2892 - (DOMHTMLCollection *)tBodies
2893 {
2894     HTMLCollection *collection = new HTMLCollection([self _tableElement], HTMLCollection::TableTBodies);
2895     return [DOMHTMLCollection _collectionWith:collection];
2896 }
2897
2898 - (NSString *)align
2899 {
2900     return [self _tableElement]->getAttribute(alignAttr);
2901 }
2902
2903 - (void)setAlign:(NSString *)align
2904 {
2905     [self _tableElement]->setAttribute(alignAttr, align);
2906 }
2907
2908 - (NSString *)bgColor
2909 {
2910     return [self _tableElement]->getAttribute(bgcolorAttr);
2911 }
2912
2913 - (void)setBgColor:(NSString *)bgColor
2914 {
2915     [self _tableElement]->setAttribute(bgcolorAttr, bgColor);
2916 }
2917
2918 - (NSString *)border
2919 {
2920     return [self _tableElement]->getAttribute(borderAttr);
2921 }
2922
2923 - (void)setBorder:(NSString *)border
2924 {
2925     [self _tableElement]->setAttribute(borderAttr, border);
2926 }
2927
2928 - (NSString *)cellPadding
2929 {
2930     return [self _tableElement]->getAttribute(cellpaddingAttr);
2931 }
2932
2933 - (void)setCellPadding:(NSString *)cellPadding
2934 {
2935     [self _tableElement]->setAttribute(cellpaddingAttr, cellPadding);
2936 }
2937
2938 - (NSString *)cellSpacing
2939 {
2940     return [self _tableElement]->getAttribute(cellspacingAttr);
2941 }
2942
2943 - (void)setCellSpacing:(NSString *)cellSpacing
2944 {
2945     [self _tableElement]->setAttribute(cellspacingAttr, cellSpacing);
2946 }
2947
2948 - (NSString *)frameBorders
2949 {
2950     return [self _tableElement]->getAttribute(frameAttr);
2951 }
2952
2953 - (void)setFrameBorders:(NSString *)frameBorders
2954 {
2955     [self _tableElement]->setAttribute(frameAttr, frameBorders);
2956 }
2957
2958 - (NSString *)rules
2959 {
2960     return [self _tableElement]->getAttribute(rulesAttr);
2961 }
2962
2963 - (void)setRules:(NSString *)rules
2964 {
2965     [self _tableElement]->setAttribute(rulesAttr, rules);
2966 }
2967
2968 - (NSString *)summary
2969 {
2970     return [self _tableElement]->getAttribute(summaryAttr);
2971 }
2972
2973 - (void)setSummary:(NSString *)summary
2974 {
2975     [self _tableElement]->setAttribute(summaryAttr, summary);
2976 }
2977
2978 - (NSString *)width
2979 {
2980     return [self _tableElement]->getAttribute(widthAttr);
2981 }
2982
2983 - (void)setWidth:(NSString *)width
2984 {
2985     [self _tableElement]->setAttribute(widthAttr, width);
2986 }
2987
2988 - (DOMHTMLElement *)createTHead
2989 {
2990     HTMLTableSectionElement *impl = static_cast<HTMLTableSectionElement*>([self _tableElement]->createTHead());
2991     return [DOMHTMLTableSectionElement _tableSectionElementWith:impl];
2992 }
2993
2994 - (void)deleteTHead
2995 {
2996     [self _tableElement]->deleteTHead();
2997 }
2998
2999 - (DOMHTMLElement *)createTFoot
3000 {
3001     HTMLTableSectionElement *impl = static_cast<HTMLTableSectionElement*>([self _tableElement]->createTFoot());
3002     return [DOMHTMLTableSectionElement _tableSectionElementWith:impl];
3003 }
3004
3005 - (void)deleteTFoot
3006 {
3007     [self _tableElement]->deleteTFoot();
3008 }
3009
3010 - (DOMHTMLElement *)createCaption
3011 {
3012     HTMLTableCaptionElement *impl = static_cast<HTMLTableCaptionElement*>([self _tableElement]->createCaption());
3013     return [DOMHTMLTableCaptionElement _tableCaptionElementWith:impl];
3014 }
3015
3016 - (void)deleteCaption
3017 {
3018     [self _tableElement]->deleteCaption();
3019 }
3020
3021 - (DOMHTMLElement *)insertRow:(int)index
3022 {
3023     ExceptionCode ec = 0;
3024     HTMLTableElement *impl = static_cast<HTMLTableElement*>([self _tableElement]->insertRow(index, ec));
3025     raiseOnDOMError(ec);
3026     return [DOMHTMLTableElement _tableElementWith:impl];
3027 }
3028
3029 - (void)deleteRow:(int)index
3030 {
3031     ExceptionCode ec = 0;
3032     [self _tableElement]->deleteRow(index, ec);
3033     raiseOnDOMError(ec);
3034 }
3035
3036 @end
3037
3038 @implementation DOMHTMLTableElement (WebCoreInternal)
3039
3040 + (DOMHTMLTableElement *)_tableElementWith:(HTMLTableElement *)impl
3041 {
3042     return static_cast<DOMHTMLTableElement*>([DOMNode _nodeWith:impl]);
3043 }
3044
3045 - (HTMLTableElement *)_tableElement
3046 {
3047     return static_cast<HTMLTableElement*>(DOM_cast<Node*>(_internal));
3048 }
3049
3050 @end
3051
3052 @implementation DOMHTMLTableColElement
3053
3054 - (HTMLTableColElement *)_tableColElement
3055 {
3056     return static_cast<HTMLTableColElement*>(DOM_cast<Node*>(_internal));
3057 }
3058
3059 - (NSString *)align
3060 {
3061     return [self _tableColElement]->getAttribute(alignAttr);
3062 }
3063
3064 - (void)setAlign:(NSString *)align
3065 {
3066     [self _tableColElement]->setAttribute(alignAttr, align);
3067 }
3068
3069 - (NSString *)ch
3070 {
3071     return [self _tableColElement]->getAttribute(charoffAttr);
3072 }
3073
3074 - (void)setCh:(NSString *)ch
3075 {
3076     [self _tableColElement]->setAttribute(charoffAttr, ch);
3077 }
3078
3079 - (NSString *)chOff
3080 {
3081     return [self _tableColElement]->getAttribute(charoffAttr);
3082 }
3083
3084 - (void)setChOff:(NSString *)chOff
3085 {
3086     [self _tableColElement]->setAttribute(charoffAttr, chOff);
3087 }
3088
3089 - (int)span
3090 {
3091     return [self _tableColElement]->getAttribute(spanAttr).toInt();
3092 }
3093
3094 - (void)setSpan:(int)span
3095 {
3096     [self _tableColElement]->setAttribute(spanAttr, String::number(span));
3097 }
3098
3099 - (NSString *)vAlign
3100 {
3101     return [self _tableColElement]->getAttribute(valignAttr);
3102 }
3103
3104 - (void)setVAlign:(NSString *)vAlign
3105 {
3106     [self _tableColElement]->setAttribute(valignAttr, vAlign);
3107 }
3108
3109 - (NSString *)width
3110 {
3111     return [self _tableColElement]->getAttribute(widthAttr);
3112 }
3113
3114 - (void)setWidth:(NSString *)width
3115 {
3116     [self _tableColElement]->setAttribute(widthAttr, width);
3117 }
3118
3119 @end
3120
3121 @implementation DOMHTMLTableRowElement
3122
3123 - (HTMLTableRowElement *)_tableRowElement
3124 {
3125     return static_cast<HTMLTableRowElement*>(DOM_cast<Node*>(_internal));
3126 }
3127
3128 - (int)rowIndex
3129 {
3130     return [self _tableRowElement]->rowIndex();
3131 }
3132
3133 - (int)sectionRowIndex
3134 {
3135     return [self _tableRowElement]->sectionRowIndex();
3136 }
3137
3138 - (DOMHTMLCollection *)cells
3139 {
3140     HTMLCollection *collection = new HTMLCollection([self _tableRowElement], HTMLCollection::TRCells);
3141     return [DOMHTMLCollection _collectionWith:collection];
3142 }
3143
3144 - (NSString *)align
3145 {
3146     return [self _tableRowElement]->getAttribute(alignAttr);
3147 }
3148
3149 - (void)setAlign:(NSString *)align
3150 {
3151     [self _tableRowElement]->setAttribute(alignAttr, align);
3152 }
3153
3154 - (NSString *)bgColor
3155 {
3156     return [self _tableRowElement]->getAttribute(bgcolorAttr);
3157 }
3158
3159 - (void)setBgColor:(NSString *)bgColor
3160 {
3161     [self _tableRowElement]->setAttribute(bgcolorAttr, bgColor);
3162 }
3163
3164 - (NSString *)ch
3165 {
3166     return [self _tableRowElement]->getAttribute(charoffAttr);
3167 }
3168
3169 - (void)setCh:(NSString *)ch
3170 {
3171     [self _tableRowElement]->setAttribute(charoffAttr, ch);
3172 }
3173
3174 - (NSString *)chOff
3175 {
3176     return [self _tableRowElement]->getAttribute(charoffAttr);
3177 }
3178
3179 - (void)setChOff:(NSString *)chOff
3180 {
3181     [self _tableRowElement]->setAttribute(charoffAttr, chOff);
3182 }
3183
3184 - (NSString *)vAlign
3185 {
3186     return [self _tableRowElement]->getAttribute(valignAttr);
3187 }
3188
3189 - (void)setVAlign:(NSString *)vAlign
3190 {
3191     [self _tableRowElement]->setAttribute(valignAttr, vAlign);
3192 }
3193
3194 - (DOMHTMLElement *)insertCell:(int)index
3195 {
3196     ExceptionCode ec = 0;
3197     HTMLTableCellElement *impl = static_cast<HTMLTableCellElement*>([self _tableRowElement]->insertCell(index, ec));
3198     raiseOnDOMError(ec);
3199     return [DOMHTMLTableCellElement _tableCellElementWith:impl];
3200 }
3201
3202 - (void)deleteCell:(int)index
3203 {
3204     ExceptionCode ec = 0;
3205     [self _tableRowElement]->deleteCell(index, ec);
3206     raiseOnDOMError(ec);
3207 }
3208
3209 @end
3210
3211 @implementation DOMHTMLTableCellElement
3212
3213 - (int)cellIndex
3214 {
3215     return [self _tableCellElement]->cellIndex();
3216 }
3217
3218 - (NSString *)abbr
3219 {
3220     return [self _tableCellElement]->getAttribute(abbrAttr);
3221 }
3222
3223 - (void)setAbbr:(NSString *)abbr
3224 {
3225     [self _tableCellElement]->setAttribute(abbrAttr, abbr);
3226 }
3227
3228 - (NSString *)align
3229 {
3230     return [self _tableCellElement]->getAttribute(alignAttr);
3231 }
3232
3233 - (void)setAlign:(NSString *)align
3234 {
3235     [self _tableCellElement]->setAttribute(alignAttr, align);
3236 }
3237
3238 - (NSString *)axis
3239 {
3240     return [self _tableCellElement]->getAttribute(axisAttr);
3241 }
3242
3243 - (void)setAxis:(NSString *)axis
3244 {
3245     [self _tableCellElement]->setAttribute(axisAttr, axis);
3246 }
3247
3248 - (NSString *)bgColor
3249 {
3250     return [self _tableCellElement]->getAttribute(bgcolorAttr);
3251 }
3252
3253 - (void)setBgColor:(NSString *)bgColor
3254 {
3255     [self _tableCellElement]->setAttribute(bgcolorAttr, bgColor);
3256 }
3257
3258 - (NSString *)ch
3259 {
3260     return [self _tableCellElement]->getAttribute(charoffAttr);
3261 }
3262
3263 - (void)setCh:(NSString *)ch
3264 {
3265     [self _tableCellElement]->setAttribute(charoffAttr, ch);
3266 }
3267
3268 - (NSString *)chOff
3269 {
3270     return [self _tableCellElement]->getAttribute(charoffAttr);
3271 }
3272
3273 - (void)setChOff:(NSString *)chOff
3274 {
3275     [self _tableCellElement]->setAttribute(charoffAttr, chOff);
3276 }
3277
3278 - (int)colSpan
3279 {
3280     return [self _tableCellElement]->getAttribute(colspanAttr).toInt();
3281 }
3282
3283 - (void)setColSpan:(int)colSpan
3284 {
3285     [self _tableCellElement]->setAttribute(colspanAttr, String::number(colSpan));
3286 }
3287
3288 - (NSString *)headers
3289 {
3290     return [self _tableCellElement]->getAttribute(headersAttr);
3291 }
3292
3293 - (void)setHeaders:(NSString *)headers
3294 {
3295     [self _tableCellElement]->setAttribute(headersAttr, headers);
3296 }
3297
3298 - (NSString *)height
3299 {
3300     return [self _tableCellElement]->getAttribute(heightAttr);
3301 }
3302
3303 - (void)setHeight:(NSString *)height
3304 {
3305     [self _tableCellElement]->setAttribute(heightAttr, height);
3306 }
3307
3308 - (BOOL)noWrap
3309 {
3310     return [self _tableCellElement]->getAttribute(nowrapAttr).isNull();
3311 }
3312
3313 - (void)setNoWrap:(BOOL)noWrap
3314 {
3315     [self _tableCellElement]->setAttribute(nowrapAttr, noWrap ? "" : 0);
3316 }
3317
3318 - (int)rowSpan
3319 {
3320     return [self _tableCellElement]->getAttribute(rowspanAttr).toInt();
3321 }
3322
3323 - (void)setRowSpan:(int)rowSpan
3324 {
3325     [self _tableCellElement]->setAttribute(rowspanAttr, String::number(rowSpan));
3326 }
3327
3328 - (NSString *)scope
3329 {
3330     return [self _tableCellElement]->getAttribute(scopeAttr);
3331 }
3332
3333 - (void)setScope:(NSString *)scope
3334 {
3335     [self _tableCellElement]->setAttribute(scopeAttr, scope);
3336 }
3337
3338 - (NSString *)vAlign
3339 {
3340     return [self _tableCellElement]->getAttribute(valignAttr);
3341 }
3342
3343 - (void)setVAlign:(NSString *)vAlign
3344 {
3345     [self _tableCellElement]->setAttribute(valignAttr, vAlign);
3346 }
3347
3348 - (NSString *)width
3349 {
3350     return [self _tableCellElement]->getAttribute(widthAttr);
3351 }
3352
3353 - (void)setWidth:(NSString *)width
3354 {
3355     [self _tableCellElement]->setAttribute(widthAttr, width);
3356 }
3357
3358 @end
3359
3360 @implementation DOMHTMLTableCellElement (WebCoreInternal)
3361
3362 + (DOMHTMLTableCellElement *)_tableCellElementWith:(HTMLTableCellElement *)impl
3363 {
3364     return static_cast<DOMHTMLTableCellElement*>([DOMNode _nodeWith:impl]);
3365 }
3366
3367 - (HTMLTableCellElement *)_tableCellElement
3368 {
3369     return static_cast<HTMLTableCellElement*>(DOM_cast<Node*>(_internal));
3370 }
3371
3372 @end
3373
3374 @implementation DOMHTMLFrameSetElement
3375
3376 - (HTMLFrameSetElement *)_frameSetElement
3377 {
3378     return static_cast<HTMLFrameSetElement*>(DOM_cast<Node*>(_internal));
3379 }
3380
3381 - (NSString *)rows
3382 {
3383     return [self _frameSetElement]->getAttribute(rowsAttr);
3384 }
3385
3386 - (void)setRows:(NSString *)rows
3387 {
3388     [self _frameSetElement]->setAttribute(rowsAttr, rows);
3389 }
3390
3391 - (NSString *)cols
3392 {
3393     return [self _frameSetElement]->getAttribute(colsAttr);
3394 }
3395
3396 - (void)setCols:(NSString *)cols
3397 {
3398     [self _frameSetElement]->setAttribute(colsAttr, cols);
3399 }
3400
3401 @end
3402
3403 @implementation DOMHTMLFrameElement
3404
3405 - (HTMLFrameElement *)_frameElement
3406 {
3407     return static_cast<HTMLFrameElement*>(DOM_cast<Node*>(_internal));
3408 }
3409
3410 - (NSString *)frameBorder
3411 {
3412     return [self _frameElement]->getAttribute(frameborderAttr);
3413 }
3414
3415 - (void)setFrameBorder:(NSString *)frameBorder
3416 {
3417     [self _frameElement]->setAttribute(frameborderAttr, frameBorder);
3418 }
3419
3420 - (NSString *)longDesc
3421 {
3422     return [self _frameElement]->getAttribute(longdescAttr);
3423 }
3424
3425 - (void)setLongDesc:(NSString *)longDesc
3426 {
3427     [self _frameElement]->setAttribute(longdescAttr, longDesc);
3428 }
3429
3430 - (NSString *)marginHeight
3431 {
3432     return [self _frameElement]->getAttribute(marginheightAttr);
3433 }
3434
3435 - (void)setMarginHeight:(NSString *)marginHeight
3436 {
3437     [self _frameElement]->setAttribute(marginheightAttr, marginHeight);
3438 }
3439
3440 - (NSString *)marginWidth
3441 {
3442     return [self _frameElement]->getAttribute(marginwidthAttr);
3443 }
3444
3445 - (void)setMarginWidth:(NSString *)marginWidth
3446 {
3447     [self _frameElement]->setAttribute(marginwidthAttr, marginWidth);
3448 }
3449
3450 - (NSString *)name
3451 {
3452     return [self _frameElement]->getAttribute(nameAttr);
3453 }
3454
3455 - (void)setName:(NSString *)name
3456 {
3457     [self _frameElement]->setAttribute(nameAttr, name);
3458 }
3459
3460 - (BOOL)noResize
3461 {
3462     return [self _frameElement]->getAttribute(noresizeAttr).isNull();
3463 }
3464
3465 - (void)setNoResize:(BOOL)noResize
3466 {
3467     [self _frameElement]->setAttribute(noresizeAttr, noResize ? "" : 0);
3468 }
3469
3470 - (NSString *)scrolling
3471 {
3472     return [self _frameElement]->getAttribute(scrollingAttr);
3473 }
3474
3475 - (void)setScrolling:(NSString *)scrolling
3476 {
3477     [self _frameElement]->setAttribute(scrollingAttr, scrolling);
3478 }
3479
3480 - (NSString *)src
3481 {
3482     return [self _frameElement]->getAttribute(srcAttr);
3483 }
3484
3485 - (void)setSrc:(NSString *)src
3486 {
3487     [self _frameElement]->setAttribute(srcAttr, src);
3488 }
3489
3490 - (DOMDocument *)contentDocument
3491 {
3492     return [DOMDocument _documentWith:[self _frameElement]->contentDocument()];
3493 }
3494
3495 @end
3496
3497 @implementation DOMHTMLIFrameElement
3498
3499 - (HTMLIFrameElement *)_IFrameElement
3500 {
3501     return static_cast<HTMLIFrameElement*>(DOM_cast<Node*>(_internal));
3502 }
3503
3504 - (NSString *)align
3505 {
3506     return [self _IFrameElement]->getAttribute(alignAttr);
3507 }
3508
3509 - (void)setAlign:(NSString *)align
3510 {
3511     [self _IFrameElement]->setAttribute(alignAttr, align);
3512 }
3513
3514 - (NSString *)frameBorder
3515 {
3516     return [self _IFrameElement]->getAttribute(frameborderAttr);
3517 }
3518
3519 - (void)setFrameBorder:(NSString *)frameBorder
3520 {
3521     [self _IFrameElement]->setAttribute(frameborderAttr, frameBorder);
3522 }
3523
3524 - (NSString *)height
3525 {
3526     return [self _IFrameElement]->getAttribute(heightAttr);
3527 }
3528
3529 - (void)setHeight:(NSString *)height
3530 {
3531     [self _IFrameElement]->setAttribute(heightAttr, height);
3532 }
3533
3534 - (NSString *)longDesc
3535 {
3536     return [self _IFrameElement]->getAttribute(longdescAttr);
3537 }
3538
3539 - (void)setLongDesc:(NSString *)longDesc
3540 {
3541     [self _IFrameElement]->setAttribute(longdescAttr, longDesc);
3542 }
3543
3544 - (NSString *)marginHeight
3545 {
3546     return [self _IFrameElement]->getAttribute(marginheightAttr);
3547 }
3548
3549 - (void)setMarginHeight:(NSString *)marginHeight
3550 {
3551     [self _IFrameElement]->setAttribute(marginheightAttr, marginHeight);
3552 }
3553
3554 - (NSString *)marginWidth
3555 {
3556     return [self _IFrameElement]->getAttribute(marginwidthAttr);
3557 }
3558
3559 - (void)setMarginWidth:(NSString *)marginWidth
3560 {
3561     [self _IFrameElement]->setAttribute(marginwidthAttr, marginWidth);
3562 }
3563
3564 - (NSString *)name
3565 {
3566     return [self _IFrameElement]->getAttribute(nameAttr);
3567 }
3568
3569 - (void)setName:(NSString *)name
3570 {
3571     [self _IFrameElement]->setAttribute(nameAttr, name);
3572 }
3573
3574 - (BOOL)noResize
3575 {
3576     return [self _IFrameElement]->getAttribute(noresizeAttr).isNull();
3577 }
3578
3579 - (void)setNoResize:(BOOL)noResize
3580 {
3581     [self _IFrameElement]->setAttribute(noresizeAttr, noResize ? "" : 0);
3582 }
3583
3584 - (NSString *)scrolling
3585 {
3586     return [self _IFrameElement]->getAttribute(scrollingAttr);
3587 }
3588
3589 - (void)setScrolling:(NSString *)scrolling
3590 {
3591     [self _IFrameElement]->setAttribute(scrollingAttr, scrolling);
3592 }
3593
3594 - (NSString *)src
3595 {
3596     return [self _IFrameElement]->getAttribute(srcAttr);
3597 }
3598
3599 - (void)setSrc:(NSString *)src
3600 {
3601     [self _IFrameElement]->setAttribute(srcAttr, src);
3602 }
3603
3604 - (NSString *)width
3605 {
3606     return [self _IFrameElement]->getAttribute(widthAttr);
3607 }
3608
3609 - (void)setWidth:(NSString *)width
3610 {
3611     [self _IFrameElement]->setAttribute(widthAttr, width);
3612 }
3613
3614 - (DOMDocument *)contentDocument
3615 {
3616     return [DOMDocument _documentWith:[self _IFrameElement]->contentDocument()];
3617 }
3618
3619 @end
3620
3621 #pragma mark DOM EXTENSIONS
3622
3623 @implementation DOMHTMLEmbedElement
3624
3625 - (HTMLEmbedElement *)_embedElement
3626 {
3627     return static_cast<HTMLEmbedElement*>(DOM_cast<Node*>(_internal));
3628 }
3629
3630 - (NSString *)align
3631 {
3632     return [self _embedElement]->getAttribute(alignAttr);
3633 }
3634
3635 - (void)setAlign:(NSString *)align
3636 {
3637     [self _embedElement]->setAttribute(alignAttr, align);
3638 }
3639
3640 - (int)height
3641 {
3642     return [self _embedElement]->getAttribute(heightAttr).toInt();
3643 }
3644
3645 - (void)setHeight:(int)height
3646 {
3647     [self _embedElement]->setAttribute(heightAttr, String::number(height));
3648 }
3649
3650 - (NSString *)name
3651 {
3652     return [self _embedElement]->getAttribute(nameAttr);
3653 }
3654
3655 - (void)setName:(NSString *)name
3656 {
3657     [self _embedElement]->setAttribute(nameAttr, name);
3658 }
3659
3660 - (NSString *)src
3661 {
3662     return [self _embedElement]->getAttribute(srcAttr);
3663 }
3664
3665 - (void)setSrc:(NSString *)src
3666 {
3667     [self _embedElement]->setAttribute(srcAttr, src);
3668 }
3669
3670 - (NSString *)type
3671 {
3672     return [self _embedElement]->getAttribute(typeAttr);
3673 }
3674
3675 - (void)setType:(NSString *)type
3676 {
3677     [self _embedElement]->setAttribute(typeAttr, type);
3678 }
3679
3680 - (int)width
3681 {
3682     return [self _embedElement]->getAttribute(widthAttr).toInt();
3683 }
3684
3685 - (void)setWidth:(int)width
3686 {
3687     [self _embedElement]->setAttribute(widthAttr, String::number(width));
3688 }
3689
3690 @end
3691
3692 // These #imports and "usings" are used only by viewForElement and should be deleted 
3693 // when that function goes away.
3694 #import "RenderWidget.h"
3695 using WebCore::RenderObject;
3696 using WebCore::RenderWidget;
3697
3698 // This function is used only by the two FormAutoFillTransition categories, and will go away
3699 // as soon as possible.
3700 static NSView *viewForElement(DOMElement *element)
3701 {
3702     RenderObject *renderer = [element _element]->renderer();
3703     if (renderer && renderer->isWidget()) {
3704         Widget *widget = static_cast<const RenderWidget*>(renderer)->widget();
3705         if (widget) {
3706             widget->populate();
3707             return widget->getView();
3708         }
3709     }
3710     return nil;
3711 }
3712
3713 @implementation DOMHTMLInputElement(FormAutoFillTransition)
3714
3715 - (BOOL)_isTextField
3716 {
3717     // We could make this public API as-is, or we could change it into a method that returns whether
3718     // the element is a text field or a button or ... ?
3719     static NSArray *textInputTypes = nil;
3720 #ifndef NDEBUG
3721     static NSArray *nonTextInputTypes = nil;
3722 #endif
3723     
3724     NSString *type = [self type];
3725     
3726     // No type at all is treated as text type
3727     if ([type length] == 0)
3728         return YES;
3729     
3730     if (textInputTypes == nil)
3731         textInputTypes = [[NSSet alloc] initWithObjects:@"text", @"password", @"search", nil];
3732     
3733     BOOL isText = [textInputTypes containsObject:[type lowercaseString]];
3734     
3735 #ifndef NDEBUG
3736     if (nonTextInputTypes == nil)
3737         nonTextInputTypes = [[NSSet alloc] initWithObjects:@"isindex", @"checkbox", @"radio", @"submit", @"reset", @"file", @"hidden", @"image", @"button", @"range", nil];
3738     
3739     // Catch cases where a new input type has been added that's not in these lists.
3740     ASSERT(isText || [nonTextInputTypes containsObject:[type lowercaseString]]);
3741 #endif    
3742     
3743     return isText;
3744 }
3745
3746 - (NSRect)_rectOnScreen
3747 {
3748     // Returns bounding rect of text field, in screen coordinates.
3749     NSView* view = [self _inputElement]->document()->view()->getDocumentView();
3750     NSRect result = [self boundingBox];
3751     result = [view convertRect:result toView:nil];
3752     result.origin = [[view window] convertBaseToScreen:result.origin];
3753     return result;
3754 }
3755
3756 - (void)_replaceCharactersInRange:(NSRange)targetRange withString:(NSString *)replacementString selectingFromIndex:(int)index
3757 {
3758     HTMLInputElement* input = [self _inputElement];
3759     if (input) {
3760         String value = input->value().replace(targetRange.location, targetRange.length, replacementString);
3761         input->setValue(value);
3762         input->setSelectionRange(index, value.length());
3763     }
3764 }
3765
3766 - (NSRange)_selectedRange
3767 {
3768     HTMLInputElement* input = [self _inputElement];
3769     if (input) {
3770         int start = input->selectionStart();
3771         int end = input->selectionEnd();
3772         return NSMakeRange(start, end - start); 
3773     }
3774     return NSMakeRange(NSNotFound, 0);
3775 }    
3776
3777 - (void)_setAutofilled:(BOOL)filled
3778 {
3779     // This notifies the input element that the content has been autofilled
3780     // This allows WebKit to obey the -webkit-autofill pseudo style, which
3781     // changes the background color.
3782     HTMLInputElement* input = [self _inputElement];
3783     if (input)
3784         input->setAutofilled(filled);
3785 }
3786
3787 @end
3788
3789 @implementation DOMHTMLSelectElement(FormAutoFillTransition)
3790
3791 - (void)_activateItemAtIndex:(int)index
3792 {
3793     NSPopUpButton *popUp = (NSPopUpButton *)viewForElement(self);
3794     [popUp selectItemAtIndex:index];
3795     // Must do this to simulate same side effect as if user made the choice
3796     [NSApp sendAction:[popUp action] to:[popUp target] from:popUp];
3797 }
3798
3799 @end