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