ee96d59f580783e227d52b0902bad47747b355d3
[WebKit-https.git] / WebKit / DOM.subproj / WebDOMOperations.m
1 /*
2     WebDOMOperations.m
3     Copyright 2004, Apple, Inc. All rights reserved.
4 */
5
6 #import <WebKit/WebDOMOperationsPrivate.h>
7
8 #import <WebKit/DOMExtensions.h>
9 #import <WebKit/DOMHTML.h>
10 #import <WebKit/WebAssertions.h>
11 #import <WebKit/WebBridge.h>
12 #import <WebKit/WebDataSourcePrivate.h>
13 #import <WebKit/WebFramePrivate.h>
14
15 #import <Foundation/NSString_NSURLExtras.h>
16
17 @implementation DOMNode (WebDOMNodeOperations)
18
19 - (WebBridge *)_bridge
20 {
21     return (WebBridge *)[WebBridge bridgeForDOMDocument:[self ownerDocument]];
22 }
23
24 - (WebArchive *)webArchive
25 {
26     WebBridge *bridge = [self _bridge];
27     NSArray *nodes;
28     NSString *markupString = [bridge markupStringFromNode:self nodes:&nodes];
29     return [[[bridge webFrame] dataSource] _archiveWithMarkupString:markupString nodes:nodes];
30 }
31
32 - (NSString *)markupString
33 {
34     return [[self _bridge] markupStringFromNode:self nodes:nil];
35 }
36
37 - (NSArray *)_URLsFromSelectors:(SEL)firstSel, ...
38 {
39     NSMutableArray *URLs = [NSMutableArray array];
40     
41     va_list args;
42     va_start(args, firstSel);
43     
44     SEL selector = firstSel;
45     do {
46         NSString *string = [self performSelector:selector];
47         if ([string length] > 0) {
48             [URLs addObject:[[self ownerDocument] URLWithAttributeString:string]];
49         }
50     } while ((selector = va_arg(args, SEL)) != nil);
51     
52     va_end(args);
53     
54     return URLs;
55 }
56
57 - (NSArray *)_subresourceURLs
58 {
59     return nil;
60 }
61
62 @end
63
64 @implementation DOMDocument (WebDOMDocumentOperations)
65
66 - (WebFrame *)webFrame
67 {
68     return [[self _bridge] webFrame];
69 }
70
71 - (NSURL *)URLWithAttributeString:(NSString *)string
72 {
73     return [[self _bridge] URLWithRelativeString:string];
74 }
75
76 @end
77
78 @implementation DOMRange (WebDOMRangeOperations)
79
80 - (WebBridge *)_bridge
81 {
82     return [[self startContainer] _bridge];
83 }
84
85 - (WebArchive *)webArchive
86 {
87     WebBridge *bridge = [self _bridge];
88     NSArray *nodes;
89     NSString *markupString = [bridge markupStringFromRange:self nodes:&nodes];
90     return [[[bridge webFrame] dataSource] _archiveWithMarkupString:markupString nodes:nodes];
91 }
92
93 - (NSString *)markupString
94 {               
95     return [[self _bridge] markupStringFromRange:self nodes:nil];
96 }
97
98 @end
99
100 @implementation DOMHTMLBodyElement (WebDOMHTMLBodyElementOperationsPrivate)
101
102 - (NSArray *)_subresourceURLs
103 {
104     return [self _URLsFromSelectors:@selector(background), nil];
105 }
106
107 @end
108
109 @implementation DOMHTMLInputElement (WebDOMHTMLInputElementOperationsPrivate)
110
111 - (NSArray *)_subresourceURLs
112 {
113     return [self _URLsFromSelectors:@selector(src), nil];
114 }
115
116 @end
117
118 @implementation DOMHTMLLinkElement (WebDOMHTMLLinkElementOperationsPrivate)
119
120 - (NSArray *)_subresourceURLs
121 {
122     NSString *rel = [self rel];
123     if ([rel _web_isCaseInsensitiveEqualToString:@"stylesheet"] || [rel _web_isCaseInsensitiveEqualToString:@"icon"]) {
124         return [self _URLsFromSelectors:@selector(href), nil];
125     }
126     return nil;
127 }
128
129 @end
130
131 @implementation DOMHTMLScriptElement (WebDOMHTMLScriptElementOperationsPrivate)
132
133 - (NSArray *)_subresourceURLs
134 {
135     return [self _URLsFromSelectors:@selector(src), nil];
136 }
137
138 @end
139
140 @implementation DOMHTMLImageElement (WebDOMHTMLImageElementOperationsPrivate)
141
142 - (NSArray *)_subresourceURLs
143 {
144     SEL useMapSelector = [[self useMap] hasPrefix:@"#"] ? nil : @selector(useMap);
145     return [self _URLsFromSelectors:@selector(src), useMapSelector, nil];
146 }
147
148 @end
149
150 @implementation DOMHTMLEmbedElement (WebDOMHTMLEmbedElementOperationsPrivate)
151
152 - (NSArray *)_subresourceURLs
153 {
154     return [self _URLsFromSelectors:@selector(src), nil];
155 }
156
157 @end
158
159 @implementation DOMHTMLObjectElement (WebDOMHTMLObjectElementOperationsPrivate)
160
161 - (NSArray *)_subresourceURLs
162 {
163     SEL useMapSelector = [[self useMap] hasPrefix:@"#"] ? nil : @selector(useMap);
164     return [self _URLsFromSelectors:@selector(data), useMapSelector, nil];
165 }
166
167 @end
168
169 @implementation DOMHTMLParamElement (WebDOMHTMLParamElementOperationsPrivate)
170
171 - (NSArray *)_subresourceURLs
172 {
173     NSString *name = [self name];
174     if ([name _web_isCaseInsensitiveEqualToString:@"data"] ||
175         [name _web_isCaseInsensitiveEqualToString:@"movie"] ||
176         [name _web_isCaseInsensitiveEqualToString:@"src"]) {
177         return [self _URLsFromSelectors:@selector(value), nil];
178     }
179     return nil;
180 }
181
182 @end
183
184 @implementation DOMHTMLTableElement (WebDOMHTMLTableElementOperationsPrivate)
185
186 - (NSString *)_web_background
187 {
188     return [self getAttribute:@"background"];
189 }
190
191 - (NSArray *)_subresourceURLs
192 {
193     return [self _URLsFromSelectors:@selector(_web_background), nil];
194 }
195
196 @end
197
198 @implementation DOMHTMLTableCellElement (WebDOMHTMLTableCellElementOperationsPrivate)
199
200 - (NSString *)_web_background
201 {
202     return [self getAttribute:@"background"];
203 }
204
205 - (NSArray *)_subresourceURLs
206 {
207     return [self _URLsFromSelectors:@selector(_web_background), nil];
208 }
209
210 @end
211
212 @implementation DOMHTMLFrameElement (WebDOMHTMLFrameElementOperations)
213
214 - (WebFrame *)contentFrame
215 {
216     return [[self contentDocument] webFrame];
217 }
218
219 @end
220
221 @implementation DOMHTMLIFrameElement (WebDOMHTMLIFrameElementOperations)
222
223 - (WebFrame *)contentFrame
224 {
225     return [[self contentDocument] webFrame];
226 }
227
228 @end
229
230 @implementation DOMHTMLObjectElement (WebDOMHTMLObjectElementOperations)
231
232 - (WebFrame *)contentFrame
233 {
234     return [[self contentDocument] webFrame];
235 }
236
237 @end