Fixed:
[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 DOMDocument (WebDOMDocumentOperationsPrivate)
79
80 - (DOMRange *)_documentRange
81 {
82     DOMRange *range = [self createRange];
83     DOMElement *documentElement = [self documentElement];
84     [range setStartBefore:documentElement];
85     [range setStartAfter:documentElement];
86     return range;
87 }
88
89 @end
90
91 @implementation DOMRange (WebDOMRangeOperations)
92
93 - (WebBridge *)_bridge
94 {
95     return [[self startContainer] _bridge];
96 }
97
98 - (WebArchive *)webArchive
99 {
100     WebBridge *bridge = [self _bridge];
101     NSArray *nodes;
102     NSString *markupString = [bridge markupStringFromRange:self nodes:&nodes];
103     return [[[bridge webFrame] dataSource] _archiveWithMarkupString:markupString nodes:nodes];
104 }
105
106 - (NSString *)markupString
107 {               
108     return [[self _bridge] markupStringFromRange:self nodes:nil];
109 }
110
111 @end
112
113 @implementation DOMHTMLBodyElement (WebDOMHTMLBodyElementOperationsPrivate)
114
115 - (NSArray *)_subresourceURLs
116 {
117     return [self _URLsFromSelectors:@selector(background), nil];
118 }
119
120 @end
121
122 @implementation DOMHTMLInputElement (WebDOMHTMLInputElementOperationsPrivate)
123
124 - (NSArray *)_subresourceURLs
125 {
126     return [self _URLsFromSelectors:@selector(src), nil];
127 }
128
129 @end
130
131 @implementation DOMHTMLLinkElement (WebDOMHTMLLinkElementOperationsPrivate)
132
133 - (NSArray *)_subresourceURLs
134 {
135     NSString *rel = [self rel];
136     if ([rel _web_isCaseInsensitiveEqualToString:@"stylesheet"] || [rel _web_isCaseInsensitiveEqualToString:@"icon"]) {
137         return [self _URLsFromSelectors:@selector(href), nil];
138     }
139     return nil;
140 }
141
142 @end
143
144 @implementation DOMHTMLScriptElement (WebDOMHTMLScriptElementOperationsPrivate)
145
146 - (NSArray *)_subresourceURLs
147 {
148     return [self _URLsFromSelectors:@selector(src), nil];
149 }
150
151 @end
152
153 @implementation DOMHTMLImageElement (WebDOMHTMLImageElementOperationsPrivate)
154
155 - (NSArray *)_subresourceURLs
156 {
157     SEL useMapSelector = [[self useMap] hasPrefix:@"#"] ? nil : @selector(useMap);
158     return [self _URLsFromSelectors:@selector(src), useMapSelector, nil];
159 }
160
161 @end
162
163 @implementation DOMHTMLEmbedElement (WebDOMHTMLEmbedElementOperationsPrivate)
164
165 - (NSArray *)_subresourceURLs
166 {
167     return [self _URLsFromSelectors:@selector(src), nil];
168 }
169
170 @end
171
172 @implementation DOMHTMLObjectElement (WebDOMHTMLObjectElementOperationsPrivate)
173
174 - (NSArray *)_subresourceURLs
175 {
176     SEL useMapSelector = [[self useMap] hasPrefix:@"#"] ? nil : @selector(useMap);
177     return [self _URLsFromSelectors:@selector(data), useMapSelector, nil];
178 }
179
180 @end
181
182 @implementation DOMHTMLParamElement (WebDOMHTMLParamElementOperationsPrivate)
183
184 - (NSArray *)_subresourceURLs
185 {
186     NSString *name = [self name];
187     if ([name _web_isCaseInsensitiveEqualToString:@"data"] ||
188         [name _web_isCaseInsensitiveEqualToString:@"movie"] ||
189         [name _web_isCaseInsensitiveEqualToString:@"src"]) {
190         return [self _URLsFromSelectors:@selector(value), nil];
191     }
192     return nil;
193 }
194
195 @end
196
197 @implementation DOMHTMLTableElement (WebDOMHTMLTableElementOperationsPrivate)
198
199 - (NSString *)_web_background
200 {
201     return [self getAttribute:@"background"];
202 }
203
204 - (NSArray *)_subresourceURLs
205 {
206     return [self _URLsFromSelectors:@selector(_web_background), nil];
207 }
208
209 @end
210
211 @implementation DOMHTMLTableCellElement (WebDOMHTMLTableCellElementOperationsPrivate)
212
213 - (NSString *)_web_background
214 {
215     return [self getAttribute:@"background"];
216 }
217
218 - (NSArray *)_subresourceURLs
219 {
220     return [self _URLsFromSelectors:@selector(_web_background), nil];
221 }
222
223 @end
224
225 @implementation DOMHTMLFrameElement (WebDOMHTMLFrameElementOperations)
226
227 - (WebFrame *)contentFrame
228 {
229     return [[self contentDocument] webFrame];
230 }
231
232 @end
233
234 @implementation DOMHTMLIFrameElement (WebDOMHTMLIFrameElementOperations)
235
236 - (WebFrame *)contentFrame
237 {
238     return [[self contentDocument] webFrame];
239 }
240
241 @end
242
243 @implementation DOMHTMLObjectElement (WebDOMHTMLObjectElementOperations)
244
245 - (WebFrame *)contentFrame
246 {
247     return [[self contentDocument] webFrame];
248 }
249
250 @end