Make it easy to test enabling formal delegate protocols
[WebKit-https.git] / Source / WebKit / mac / WebView / WebView.h
1 /*
2  * Copyright (C) 2003, 2004, 2005, 2006 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
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  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #import <Foundation/Foundation.h>
30
31 #if !TARGET_OS_IPHONE
32 #import <AppKit/AppKit.h>
33 #else
34 #import <WebKitLegacy/WAKAppKitStubs.h>
35 #import <WebKitLegacy/WAKView.h>
36 #if !defined(IBAction)
37 #define IBAction void
38 #endif
39 #endif
40
41 @class DOMCSSStyleDeclaration;
42 @class DOMDocument;
43 @class DOMElement;
44 @class DOMNode;
45 @class DOMRange;
46
47 @class WebArchive;
48 @class WebBackForwardList;
49 @class WebDataSource;
50 @class WebFrame;
51 @class WebFrameView;
52 @class WebHistoryItem;
53 @class WebPreferences;
54 @class WebScriptObject;
55 @class WebViewPrivate;
56
57 // Element dictionary keys
58 extern NSString *WebElementDOMNodeKey;          // DOMNode of the element
59 extern NSString *WebElementFrameKey;            // WebFrame of the element
60 extern NSString *WebElementImageAltStringKey;   // NSString of the ALT attribute of the image element
61 extern NSString *WebElementImageKey;            // NSImage of the image element
62 extern NSString *WebElementImageRectKey;        // NSValue of an NSRect, the rect of the image element
63 extern NSString *WebElementImageURLKey;         // NSURL of the image element
64 extern NSString *WebElementIsSelectedKey;       // NSNumber of BOOL indicating whether the element is selected or not 
65 extern NSString *WebElementLinkURLKey;          // NSURL of the link if the element is within an anchor
66 extern NSString *WebElementLinkTargetFrameKey;  // WebFrame of the target of the anchor
67 extern NSString *WebElementLinkTitleKey;        // NSString of the title of the anchor
68 extern NSString *WebElementLinkLabelKey;        // NSString of the text within the anchor
69
70 /*
71     @discussion Notifications sent by WebView to mark the progress of loads.
72     @constant WebViewProgressStartedNotification Posted whenever a load begins in the WebView, including
73     a load that is initiated in a subframe.  After receiving this notification zero or more
74     WebViewProgressEstimateChangedNotifications will be sent.  The userInfo will be nil.
75     @constant WebViewProgressEstimateChangedNotification Posted whenever the value of
76     estimatedProgress changes.  The userInfo will be nil.
77     @constant WebViewProgressFinishedNotification Posted when the load for a WebView has finished.
78     The userInfo will be nil.
79 */
80 extern NSString *WebViewProgressStartedNotification;
81 extern NSString *WebViewProgressEstimateChangedNotification;
82 #if !TARGET_OS_IPHONE
83 extern NSString *WebViewProgressFinishedNotification;
84 #endif
85
86 /*!
87     @class WebView
88     WebView manages the interaction between WebFrameViews and WebDataSources.  Modification
89     of the policies and behavior of the WebKit is largely managed by WebViews and their
90     delegates.
91     
92     <p>
93     Typical usage:
94     </p>
95     <pre>
96     WebView *webView;
97     WebFrame *mainFrame;
98     
99     webView  = [[WebView alloc] initWithFrame: NSMakeRect (0,0,640,480)];
100     mainFrame = [webView mainFrame];
101     [mainFrame loadRequest:request];
102     </pre>
103     
104     WebViews have the following delegates:  WebUIDelegate, WebResourceLoadDelegate,
105     WebFrameLoadDelegate, and WebPolicyDelegate.
106     
107     WebKit depends on the WebView's WebUIDelegate for all window
108     related management, including opening new windows and controlling the user interface
109     elements in those windows.
110     
111     WebResourceLoadDelegate is used to monitor the progress of resources as they are
112     loaded.  This delegate may be used to present users with a progress monitor.
113     
114     The WebFrameLoadDelegate receives messages when the URL in a WebFrame is
115     changed.
116     
117     WebView's WebPolicyDelegate can make determinations about how
118     content should be handled, based on the resource's URL and MIME type.
119 */
120 @interface WebView : NSView
121 {
122 @private
123     WebViewPrivate *_private;
124 }
125
126 /*!
127     @method canShowMIMEType:
128     @abstract Checks if the WebKit can show content of a certain MIME type.
129     @param MIMEType The MIME type to check.
130     @result YES if the WebKit can show content with MIMEtype.
131 */
132 + (BOOL)canShowMIMEType:(NSString *)MIMEType;
133
134
135 /*!
136      @method canShowMIMETypeAsHTML:
137      @abstract Checks if the the MIME type is a type that the WebKit will interpret as HTML.
138      @param MIMEType The MIME type to check.
139      @result YES if the MIMEtype in an HTML type.
140 */
141 + (BOOL)canShowMIMETypeAsHTML:(NSString *)MIMEType;
142
143 /*!
144     @method MIMETypesShownAsHTML
145     @result Returns an array of NSStrings that describe the MIME types
146     WebKit will attempt to render as HTML.
147 */
148 + (NSArray *)MIMETypesShownAsHTML;
149
150 /*!
151     @method setMIMETypesShownAsHTML:
152     @discussion Sets the array of NSString MIME types that WebKit will
153     attempt to render as HTML.  Typically you will retrieve the built-in
154     array using MIMETypesShownAsHTML and add additional MIME types to that
155     array.
156 */
157 + (void)setMIMETypesShownAsHTML:(NSArray *)MIMETypes;
158
159 #if !TARGET_OS_IPHONE
160 /*!
161     @method URLFromPasteboard:
162     @abstract Returns a URL from a pasteboard
163     @param pasteboard The pasteboard with a URL
164     @result A URL if the pasteboard has one. Nil if it does not.
165     @discussion This method differs than NSURL's URLFromPasteboard method in that it tries multiple pasteboard types
166     including NSURLPboardType to find a URL on the pasteboard.
167 */
168 + (NSURL *)URLFromPasteboard:(NSPasteboard *)pasteboard;
169
170 /*!
171     @method URLTitleFromPasteboard:
172     @abstract Returns a URL title from a pasteboard
173     @param pasteboard The pasteboard with a URL title
174     @result A URL title if the pasteboard has one. Nil if it does not.
175     @discussion This method returns a title that refers a URL on the pasteboard. An example of this is the link label
176     which is the text inside the anchor tag.
177 */
178 + (NSString *)URLTitleFromPasteboard:(NSPasteboard *)pasteboard;
179 #endif
180
181 /*!
182     @method registerURLSchemeAsLocal:
183     @abstract Adds the scheme to the list of schemes to be treated as local.
184     @param scheme The scheme to register
185 */
186 + (void)registerURLSchemeAsLocal:(NSString *)scheme;
187
188 /*!
189     @method initWithFrame:frameName:groupName:
190     @abstract The designated initializer for WebView.
191     @discussion Initialize a WebView with the supplied parameters. This method will 
192     create a main WebFrame with the view. Passing a top level frame name is useful if you
193     handle a targetted frame navigation that would normally open a window in some other 
194     way that still ends up creating a new WebView.
195     @param frame The frame used to create the view.
196     @param frameName The name to use for the top level frame. May be nil.
197     @param groupName The name of the webView set to which this webView will be added.  May be nil.
198     @result Returns an initialized WebView.
199 */
200 - (instancetype)initWithFrame:(NSRect)frame frameName:(NSString *)frameName groupName:(NSString *)groupName;
201
202 /*!
203     @method close
204     @abstract Closes the receiver, unloading its web page and canceling any pending loads.
205     Once the receiver has closed, it will no longer respond to requests or fire delegate methods.
206     (However, the -close method itself may fire delegate methods.)
207     @discussion A garbage collected application is required to call close when the receiver is no longer needed.
208     The close method will be called automatically when the window or hostWindow closes and shouldCloseWithWindow returns YES.
209     A non-garbage collected application can still call close, providing a convenient way to prevent receiver
210     from doing any more loading and firing any future delegate methods.
211 */
212 - (void)close;
213
214 /*!
215     @property shouldCloseWithWindow
216     @abstract Whether the receiver closes when either it's window or hostWindow closes.
217     @discussion Defaults to YES in garbage collected applications, otherwise NO to maintain backwards compatibility.
218 */
219 @property (nonatomic) BOOL shouldCloseWithWindow;
220
221 /*!
222     @property UIDelegate
223     @abstract The WebView's WebUIDelegate.
224 */
225 #ifdef WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS
226 @property (nonatomic, assign) id <WebUIDelegate> UIDelegate;
227 #else
228 @property (nonatomic, assign) id UIDelegate;
229 #endif
230
231 /*!
232     @property resourceLoadDelegate
233     @abstract The WebView's WebResourceLoadDelegate.
234 */
235 #ifdef WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS
236 @property (nonatomic, assign) id <WebResourceLoadDelegate> resourceLoadDelegate;
237 #else
238 @property (nonatomic, assign) id resourceLoadDelegate;
239 #endif
240
241 /*!
242     @property downloadDelegate
243     @abstract The WebView's WebDownloadDelegate.
244 */
245 #ifdef WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS
246 @property (nonatomic, assign) id <WebDownloadDelegate> downloadDelegate;
247 #else
248 @property (nonatomic, assign) id downloadDelegate;
249 #endif
250
251 /*!
252     @property frameLoadDelegate
253     @abstract The WebView's WebFrameLoadDelegate delegate.
254 */
255 #ifdef WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS
256 @property (nonatomic, assign) id <WebFrameLoadDelegate> frameLoadDelegate;
257 #else
258 @property (nonatomic, assign) id frameLoadDelegate;
259 #endif
260
261 /*!
262     @property policyDelegate
263     @abstract The WebView's WebPolicyDelegate.
264 */
265 #ifdef WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS
266 @property (nonatomic, assign) id <WebPolicyDelegate> policyDelegate;
267 #else
268 @property (nonatomic, assign) id policyDelegate;
269 #endif
270
271 /*!
272     @property mainFrame
273     @abstract The top level frame.
274     @discussion Note that even documents that are not framesets will have a mainFrame.
275 */
276 @property (nonatomic, readonly, strong) WebFrame *mainFrame;
277
278 /*!
279     @property selectedFrame
280     @abstract The frame that has the active selection.
281     @discussion Returns the frame that contains the first responder, if any. Otherwise returns the
282     frame that contains a non-zero-length selection, if any. Returns nil if no frame meets these criteria.
283 */
284 @property (nonatomic, readonly, strong) WebFrame *selectedFrame;
285
286 /*!
287     @property backForwardList
288     @abstract The backforward list for this WebView.
289 */    
290 @property (nonatomic, readonly, strong) WebBackForwardList *backForwardList;
291
292 /*!
293     @method setMaintainsBackForwardList:
294     @abstract Enable or disable the use of a backforward list for this webView.
295     @param flag Turns use of the back forward list on or off
296 */    
297 - (void)setMaintainsBackForwardList:(BOOL)flag;
298
299 /*!
300     @method goBack
301     @abstract Go back to the previous URL in the backforward list.
302     @result YES if able to go back in the backforward list, NO otherwise.
303 */    
304 - (BOOL)goBack;
305
306 /*!
307     @method goForward
308     @abstract Go forward to the next URL in the backforward list.
309     @result YES if able to go forward in the backforward list, NO otherwise.
310 */    
311 - (BOOL)goForward;
312
313 /*!
314     @method goToBackForwardItem:
315     @abstract Go back or forward to an item in the backforward list.
316     @result YES if able to go to the item, NO otherwise.
317 */    
318 - (BOOL)goToBackForwardItem:(WebHistoryItem *)item;
319
320 /*!
321     @property textSizeMultiplier
322     @abstract The text size multipler.
323 */    
324 @property (nonatomic) float textSizeMultiplier;
325
326 /*!
327     @property applicationNameForUserAgent
328     @abstract The name of the application as used in the user-agent string.
329 */
330 @property (nonatomic, copy) NSString *applicationNameForUserAgent;
331
332 /*!
333     @method setCustomUserAgent:
334     @abstract Set the user agent. 
335     @discussion .
336     @param userAgentString The user agent description
337 */
338
339 /*!
340     @property customUserAgent
341     @abstract The custom user-agent string or nil if no custom user-agent string has been set.
342     @discussion Setting this means that the webView should use this user-agent string
343  instead of constructing a user-agent string for each URL. Setting it to nil
344  causes the webView to construct the user-agent string for each URL
345  for best results rendering web pages
346 */
347 @property (nonatomic, copy) NSString *customUserAgent;
348
349 /*!
350     @method userAgentForURL:
351     @abstract Get the appropriate user-agent string for a particular URL.
352     @param URL The URL.
353     @result The user-agent string for the supplied URL.
354 */
355 - (NSString *)userAgentForURL:(NSURL *)URL;
356
357
358 /*!
359     @property supportsTextEncoding
360     @abstract If the document view of the current web page can support different text encodings.
361 */
362 @property (nonatomic, readonly) BOOL supportsTextEncoding;
363
364 /*!
365     @property customTextEncodingName
366     @abstract The custom text encoding name or nil if no custom text encoding name has been set.
367     @discussion Make the page display with a different text encoding; stops any load in progress.
368     The text encoding passed in overrides the normal text encoding smarts including
369     what's specified in a web page's header or HTTP response.
370     The text encoding automatically goes back to the default when the top level frame
371     changes to a new location.
372     Setting the text encoding name to nil makes the webView use default encoding rules.
373
374 */
375 @property (nonatomic, copy) NSString *customTextEncodingName;
376
377 /*!
378     @method mediaStyle
379     @abstract The media style for the WebView.
380     @discussion The mediaStyle will override the normal value
381     of the CSS media property. Setting the value to nil will restore the normal value. The value will be nil unless explicitly set.
382 */
383 @property (nonatomic, copy) NSString *mediaStyle;
384
385 /*!
386     @method stringByEvaluatingJavaScriptFromString:
387     @param script The text of the JavaScript.
388     @result The result of the script, converted to a string, or nil for failure.
389 */
390 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
391
392 /*!
393     @property windowScriptObject
394     @abstract A WebScriptObject that represents the
395     window object from the script environment.
396 */
397 @property (nonatomic, readonly, strong) WebScriptObject *windowScriptObject;
398
399 /*!
400     @property preferences
401     @abstract The preferences used by this WebView.
402     @discussion This method will return [WebPreferences standardPreferences] if no
403     other instance of WebPreferences has been set.
404 */
405 @property (nonatomic, strong) WebPreferences *preferences;
406
407 /*!
408     @property preferencesIdentifier
409     @abstract The WebPreferences key prefix.
410     @discussion If the WebPreferences for this WebView are stored in the user defaults database, this string will be used as a key prefix.
411 */
412 @property (nonatomic, copy) NSString *preferencesIdentifier;
413
414 /*!
415     @property hostWindow
416     @abstract The host window for the web view.
417     @discussion Parts of WebKit (such as plug-ins and JavaScript) depend on a window to function
418     properly. Set a host window so these parts continue to function even when the web view is
419     not in an actual window.
420 */
421 @property (nonatomic, strong) NSWindow *hostWindow;
422
423 /*!
424     @method searchFor:direction:caseSensitive:
425     @abstract Searches a document view for a string and highlights the string if it is found.
426     Starts the search from the current selection.  Will search across all frames.
427     @param string The string to search for.
428     @param forward YES to search forward, NO to seach backwards.
429     @param caseFlag YES to for case-sensitive search, NO for case-insensitive search.
430     @result YES if found, NO if not found.
431 */
432 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag;
433
434 /*!
435     @method registerViewClass:representationClass:forMIMEType:
436     @discussion Register classes that implement WebDocumentView and WebDocumentRepresentation respectively.
437     A document class may register for a primary MIME type by excluding
438     a subtype, i.e. "video/" will match the document class with
439     all video types.  More specific matching takes precedence
440     over general matching.
441     @param viewClass The WebDocumentView class to use to render data for a given MIME type.
442     @param representationClass The WebDocumentRepresentation class to use to represent data of the given MIME type.
443     @param MIMEType The MIME type to represent with an object of the given class.
444 */
445 + (void)registerViewClass:(Class)viewClass representationClass:(Class)representationClass forMIMEType:(NSString *)MIMEType;
446
447 /*!
448     @property groupName
449     @abstract The group name for this WebView.
450     @discussion JavaScript may access named frames within the same group.
451 */
452 @property (nonatomic, copy) NSString *groupName;
453
454 /*!
455     @property estimatedProgress
456     @discussion An estimate of the percent complete for a document load.  This
457     value will range from 0 to 1.0 and, once a load completes, will remain at 1.0 
458     until a new load starts, at which point it will be reset to 0.  The value is an
459     estimate based on the total number of bytes expected to be received
460     for a document, including all it's possible subresources.  For more accurate progress
461     indication it is recommended that you implement a WebFrameLoadDelegate and a
462     WebResourceLoadDelegate.
463 */
464 @property (nonatomic, readonly) double estimatedProgress;
465
466 /*!
467     @property loading
468     @abstract Whether there are any pending loads in this WebView.
469 */
470 @property (nonatomic, getter=isLoading, readonly) BOOL loading;
471
472 /*!
473     @method elementAtPoint:
474     @param point A point in the coordinates of the WebView
475     @result An element dictionary describing the point
476 */
477 - (NSDictionary *)elementAtPoint:(NSPoint)point;
478
479 #if !TARGET_OS_IPHONE
480 /*!
481     @property pasteboardTypesForSelection
482     @abstract The pasteboard types that the WebView can use for the current selection
483 */
484 @property (nonatomic, readonly, copy) NSArray *pasteboardTypesForSelection;
485
486 /*!
487     @method writeSelectionWithPasteboardTypes:toPasteboard:
488     @abstract Writes the current selection to the pasteboard
489     @param types The types that WebView will write to the pasteboard
490     @param pasteboard The pasteboard to write to
491 */
492 - (void)writeSelectionWithPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard;
493
494 /*!
495     @method pasteboardTypesForElement:
496     @abstract Returns the pasteboard types that WebView can use for an element
497     @param element The element
498 */
499 - (NSArray *)pasteboardTypesForElement:(NSDictionary *)element;
500
501 /*!
502     @method writeElement:withPasteboardTypes:toPasteboard:
503     @abstract Writes an element to the pasteboard
504     @param element The element to write to the pasteboard
505     @param types The types that WebView will write to the pasteboard
506     @param pasteboard The pasteboard to write to
507 */
508 - (void)writeElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard;
509
510 /*!
511     @method moveDragCaretToPoint:
512     @param point A point in the coordinates of the WebView
513     @discussion This method moves the caret that shows where something being dragged will be dropped. It may cause the WebView to scroll
514     to make the new position of the drag caret visible.
515 */
516 - (void)moveDragCaretToPoint:(NSPoint)point;
517
518 /*!
519     @method removeDragCaret
520     @abstract Removes the drag caret from the WebView
521 */
522 - (void)removeDragCaret;
523 #endif /* !TARGET_OS_IPHONE */
524
525 /*!
526     @property drawsBackground
527     @abstract Whether the receiver draws a default white background when the loaded page has no background specified.
528 */
529 @property (nonatomic) BOOL drawsBackground;
530
531 /*!
532     @method shouldUpdateWhileOffscreen
533     @abstract Whether the WebView is always updated even when it is not in a window that is currently visible.
534     @discussion If set to NO, then whenever the web view is not in a visible window, updates to the web page will not necessarily be rendered in the view.
535     However, when the window is made visible, the view will be updated automatically. Not updating while hidden can improve performance. If set to is YES,
536     hidden web views are always updated. This is the default.
537 */
538 @property (nonatomic) BOOL shouldUpdateWhileOffscreen;
539
540 /*!
541     @property mainFrameURL
542     @abstract The main frame's current URL.
543 */
544 @property (nonatomic, copy) NSString *mainFrameURL;
545
546 /*!
547     @property mainFrameDocument
548     @abstract The main frame's DOMDocument.
549 */
550 @property (nonatomic, readonly, strong) DOMDocument *mainFrameDocument;
551
552 /*!
553     @property mainFrameTitle
554     @abstract The main frame's title if any, otherwise an empty string.
555 */
556 @property (nonatomic, readonly, copy) NSString *mainFrameTitle;
557
558 #if TARGET_OS_IPHONE
559 /*!
560     @method mainFrameIconURL
561     @discussion The methods returns the URL of the site icon for the current page loaded in the mainFrame.
562     @result Returns the URL of the main frame's icon if any, otherwise nil.
563 */
564 - (NSURL *)mainFrameIconURL;
565 #else
566 /*!
567     @property mainFrameIcon
568     @abstract The site icon for the current page loaded in the mainFrame, or nil.
569 */
570 @property (nonatomic, readonly, strong) NSImage *mainFrameIcon;
571 #endif
572
573 @end
574
575 #if TARGET_OS_IPHONE
576 @interface WebView (WebIBActions)
577 #else
578 @interface WebView (WebIBActions) <NSUserInterfaceValidations>
579 #endif
580 - (IBAction)takeStringURLFrom:(id)sender;
581 - (IBAction)stopLoading:(id)sender;
582 - (IBAction)reload:(id)sender;
583 - (IBAction)reloadFromOrigin:(id)sender;
584 @property (nonatomic, readonly) BOOL canGoBack;
585 - (IBAction)goBack:(id)sender;
586 @property (nonatomic, readonly) BOOL canGoForward;
587 - (IBAction)goForward:(id)sender;
588 @property (nonatomic, readonly) BOOL canMakeTextLarger;
589 - (IBAction)makeTextLarger:(id)sender;
590 @property (nonatomic, readonly) BOOL canMakeTextSmaller;
591 - (IBAction)makeTextSmaller:(id)sender;
592 @property (nonatomic, readonly) BOOL canMakeTextStandardSize;
593 - (IBAction)makeTextStandardSize:(id)sender;
594 #if !TARGET_OS_IPHONE
595 - (IBAction)toggleContinuousSpellChecking:(id)sender;
596 - (IBAction)toggleSmartInsertDelete:(id)sender;
597 #endif
598 #if TARGET_OS_IPHONE
599 - (void)stopLoadingAndClear;
600 #endif
601 @end
602
603
604 // WebView editing support
605
606 extern NSString * const WebViewDidBeginEditingNotification;
607 extern NSString * const WebViewDidChangeNotification;
608 extern NSString * const WebViewDidEndEditingNotification;
609 extern NSString * const WebViewDidChangeTypingStyleNotification;
610 extern NSString * const WebViewDidChangeSelectionNotification;
611
612 @interface WebView (WebViewCSS)
613 - (DOMCSSStyleDeclaration *)computedStyleForElement:(DOMElement *)element pseudoElement:(NSString *)pseudoElement;
614 @end
615
616 @interface WebView (WebViewEditing)
617 - (DOMRange *)editableDOMRangeForPoint:(NSPoint)point;
618 - (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity;
619 @property (nonatomic, readonly, strong) DOMRange *selectedDOMRange;
620 @property (nonatomic, readonly) NSSelectionAffinity selectionAffinity;
621 @property (nonatomic, readonly) BOOL maintainsInactiveSelection;
622 @property (nonatomic, getter=isEditable) BOOL editable;
623 @property (nonatomic, strong) DOMCSSStyleDeclaration *typingStyle;
624 @property (nonatomic) BOOL smartInsertDeleteEnabled;
625 @property (nonatomic, getter=isContinuousSpellCheckingEnabled) BOOL continuousSpellCheckingEnabled;
626 #if !TARGET_OS_IPHONE
627 @property (nonatomic, readonly) NSInteger spellCheckerDocumentTag;
628 #endif
629 @property (nonatomic, readonly, strong) NSUndoManager *undoManager;
630 @property (nonatomic, strong) id editingDelegate;
631 - (DOMCSSStyleDeclaration *)styleDeclarationWithText:(NSString *)text;
632 @end
633
634 @interface WebView (WebViewUndoableEditing)
635 - (void)replaceSelectionWithNode:(DOMNode *)node; 
636 - (void)replaceSelectionWithText:(NSString *)text;    
637 - (void)replaceSelectionWithMarkupString:(NSString *)markupString;
638 - (void)replaceSelectionWithArchive:(WebArchive *)archive;
639 - (void)deleteSelection;    
640 - (void)applyStyle:(DOMCSSStyleDeclaration *)style;
641 @end
642
643 @interface WebView (WebViewEditingActions)
644
645 - (void)copy:(id)sender;
646 - (void)cut:(id)sender;
647 - (void)paste:(id)sender;
648 - (void)copyFont:(id)sender;
649 - (void)pasteFont:(id)sender;
650 - (void)delete:(id)sender;
651 - (void)pasteAsPlainText:(id)sender;
652 - (void)pasteAsRichText:(id)sender;
653
654 - (void)changeFont:(id)sender;
655 - (void)changeAttributes:(id)sender;
656 - (void)changeDocumentBackgroundColor:(id)sender;
657 - (void)changeColor:(id)sender;
658
659 - (void)alignCenter:(id)sender;
660 - (void)alignJustified:(id)sender;
661 - (void)alignLeft:(id)sender;
662 - (void)alignRight:(id)sender;
663
664 - (void)checkSpelling:(id)sender;
665 - (void)showGuessPanel:(id)sender;
666 - (void)performFindPanelAction:(id)sender;
667
668 - (void)startSpeaking:(id)sender;
669 - (void)stopSpeaking:(id)sender;
670
671 - (void)moveToBeginningOfSentence:(id)sender;
672 - (void)moveToBeginningOfSentenceAndModifySelection:(id)sender;
673 - (void)moveToEndOfSentence:(id)sender;
674 - (void)moveToEndOfSentenceAndModifySelection:(id)sender;
675 - (void)selectSentence:(id)sender;
676
677 - (void)overWrite:(id)sender;
678
679 #if TARGET_OS_IPHONE
680 - (void)clearText:(id)sender;
681 - (void)insertDictationPhrases:(NSArray *)dictationPhrases metadata:(id)metadata;
682 - (void)toggleBold:(id)sender;
683 - (void)toggleItalic:(id)sender;
684 - (void)toggleUnderline:(id)sender;
685 #endif
686
687 /* 
688 The following methods are declared in NSResponder.h.
689 WebView overrides each method in this list, providing
690 a custom implementation for each.
691     
692 - (void)capitalizeWord:(id)sender;
693 - (void)centerSelectionInVisibleArea:(id)sender;
694 - (void)changeCaseOfLetter:(id)sender;
695 - (void)complete:(id)sender;
696 - (void)deleteBackward:(id)sender;
697 - (void)deleteBackwardByDecomposingPreviousCharacter:(id)sender;
698 - (void)deleteForward:(id)sender;
699 - (void)deleteToBeginningOfLine:(id)sender;
700 - (void)deleteToBeginningOfParagraph:(id)sender;
701 - (void)deleteToEndOfLine:(id)sender;
702 - (void)deleteToEndOfParagraph:(id)sender;
703 - (void)deleteWordBackward:(id)sender;
704 - (void)deleteWordForward:(id)sender;
705 - (void)indent:(id)sender;
706 - (void)insertBacktab:(id)sender;
707 - (void)insertNewline:(id)sender;
708 - (void)insertParagraphSeparator:(id)sender;
709 - (void)insertTab:(id)sender;
710 - (void)lowercaseWord:(id)sender;
711 - (void)moveBackward:(id)sender;
712 - (void)moveBackwardAndModifySelection:(id)sender;
713 - (void)moveDown:(id)sender;
714 - (void)moveDownAndModifySelection:(id)sender;
715 - (void)moveForward:(id)sender;
716 - (void)moveForwardAndModifySelection:(id)sender;
717 - (void)moveLeft:(id)sender;
718 - (void)moveLeftAndModifySelection:(id)sender;
719 - (void)moveRight:(id)sender;
720 - (void)moveRightAndModifySelection:(id)sender;
721 - (void)moveToBeginningOfDocument:(id)sender;
722 - (void)moveToBeginningOfDocumentAndModifySelection:(id)sender;
723 - (void)moveToBeginningOfLine:(id)sender;
724 - (void)moveToBeginningOfLineAndModifySelection:(id)sender;
725 - (void)moveToBeginningOfParagraph:(id)sender;
726 - (void)moveToBeginningOfParagraphAndModifySelection:(id)sender;
727 - (void)moveToEndOfDocument:(id)sender;
728 - (void)moveToEndOfDocumentAndModifySelection:(id)sender;
729 - (void)moveToEndOfLine:(id)sender;
730 - (void)moveToEndOfLineAndModifySelection:(id)sender;
731 - (void)moveToEndOfParagraph:(id)sender;
732 - (void)moveToEndOfParagraphAndModifySelection:(id)sender;
733 - (void)moveUp:(id)sender;
734 - (void)moveUpAndModifySelection:(id)sender;
735 - (void)moveWordBackward:(id)sender;
736 - (void)moveWordBackwardAndModifySelection:(id)sender;
737 - (void)moveWordForward:(id)sender;
738 - (void)moveWordForwardAndModifySelection:(id)sender;
739 - (void)moveWordLeft:(id)sender;
740 - (void)moveWordLeftAndModifySelection:(id)sender;
741 - (void)moveWordRight:(id)sender;
742 - (void)moveWordRightAndModifySelection:(id)sender;
743 - (void)pageDown:(id)sender;
744 - (void)pageUp:(id)sender;
745 - (void)scrollLineDown:(id)sender;
746 - (void)scrollLineUp:(id)sender;
747 - (void)scrollPageDown:(id)sender;
748 - (void)scrollPageUp:(id)sender;
749 - (void)selectAll:(id)sender;
750 - (void)selectLine:(id)sender;
751 - (void)selectParagraph:(id)sender;
752 - (void)selectWord:(id)sender;
753 - (void)uppercaseWord:(id)sender;
754 */
755  
756 @end
757
758 #if TARGET_OS_IPHONE
759
760 @interface WebView (WebViewIOS)
761 + (void)enableWebThread;
762 + (void)garbageCollectNow;
763 + (void)purgeInactiveFontData;
764 + (void)drainLayerPool;
765 + (void)discardAllCompiledCode;
766 + (void)registerForMemoryNotifications;
767 + (void)releaseFastMallocMemoryOnCurrentThread;
768 + (BOOL)isCharacterSmartReplaceExempt:(unichar)character isPreviousCharacter:(BOOL)b;
769
770 /*!
771  * @method willEnterBackgroundWithCompletionHandler:
772  * @discussion This is invoked when the app gets a did enter background
773  * notification. It frees up caches on the web thread and invokes the handler
774  * block on the main thread when done.
775  *
776  * @param handler The block to invoke on the main thread once the cleanup is
777  * done.
778  */
779 + (void)willEnterBackgroundWithCompletionHandler:(void(^)(void))handler;
780
781 /*!
782  * @method updateLayoutIgnorePendingStyleSheets:
783  * @discussion This method forces the page to layout even if there are external
784  * pending style sheets.
785  */
786 - (void)updateLayoutIgnorePendingStyleSheets;
787 @end
788
789 @interface NSObject (WebViewClassDelegate)
790 - (BOOL)viewClass:(Class *)vClass andRepresentationClass:(Class *)rClass forMIMEType:(NSString *)MIMEType;
791 @end
792
793 #endif /* TARGET_OS_IPHONE */