Move the legacy WebKit API into WebKitLegacy.framework and move it inside WebKit...
[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 @property (nonatomic, assign) id UIDelegate;
226
227 /*!
228     @property resourceLoadDelegate
229     @abstract The WebView's WebResourceLoadDelegate.
230 */
231 @property (nonatomic, assign) id resourceLoadDelegate;
232
233 /*!
234     @property downloadDelegate
235     @abstract The WebView's WebDownloadDelegate.
236 */
237 @property (nonatomic, assign) id downloadDelegate;
238
239 /*!
240     @property frameLoadDelegate
241     @abstract The WebView's WebFrameLoadDelegate delegate.
242 */
243 @property (nonatomic, assign) id frameLoadDelegate;
244
245 /*!
246     @property policyDelegate
247     @abstract The WebView's WebPolicyDelegate.
248 */
249 @property (nonatomic, assign) id policyDelegate;
250
251 /*!
252     @property mainFrame
253     @abstract The top level frame.
254     @discussion Note that even documents that are not framesets will have a mainFrame.
255 */
256 @property (nonatomic, readonly, strong) WebFrame *mainFrame;
257
258 /*!
259     @property selectedFrame
260     @abstract The frame that has the active selection.
261     @discussion Returns the frame that contains the first responder, if any. Otherwise returns the
262     frame that contains a non-zero-length selection, if any. Returns nil if no frame meets these criteria.
263 */
264 @property (nonatomic, readonly, strong) WebFrame *selectedFrame;
265
266 /*!
267     @property backForwardList
268     @abstract The backforward list for this WebView.
269 */    
270 @property (nonatomic, readonly, strong) WebBackForwardList *backForwardList;
271
272 /*!
273     @method setMaintainsBackForwardList:
274     @abstract Enable or disable the use of a backforward list for this webView.
275     @param flag Turns use of the back forward list on or off
276 */    
277 - (void)setMaintainsBackForwardList:(BOOL)flag;
278
279 /*!
280     @method goBack
281     @abstract Go back to the previous URL in the backforward list.
282     @result YES if able to go back in the backforward list, NO otherwise.
283 */    
284 - (BOOL)goBack;
285
286 /*!
287     @method goForward
288     @abstract Go forward to the next URL in the backforward list.
289     @result YES if able to go forward in the backforward list, NO otherwise.
290 */    
291 - (BOOL)goForward;
292
293 /*!
294     @method goToBackForwardItem:
295     @abstract Go back or forward to an item in the backforward list.
296     @result YES if able to go to the item, NO otherwise.
297 */    
298 - (BOOL)goToBackForwardItem:(WebHistoryItem *)item;
299
300 /*!
301     @property textSizeMultiplier
302     @abstract The text size multipler.
303 */    
304 @property (nonatomic) float textSizeMultiplier;
305
306 /*!
307     @property applicationNameForUserAgent
308     @abstract The name of the application as used in the user-agent string.
309 */
310 @property (nonatomic, copy) NSString *applicationNameForUserAgent;
311
312 /*!
313     @method setCustomUserAgent:
314     @abstract Set the user agent. 
315     @discussion .
316     @param userAgentString The user agent description
317 */
318
319 /*!
320     @property customUserAgent
321     @abstract The custom user-agent string or nil if no custom user-agent string has been set.
322     @discussion Setting this means that the webView should use this user-agent string
323  instead of constructing a user-agent string for each URL. Setting it to nil
324  causes the webView to construct the user-agent string for each URL
325  for best results rendering web pages
326 */
327 @property (nonatomic, copy) NSString *customUserAgent;
328
329 /*!
330     @method userAgentForURL:
331     @abstract Get the appropriate user-agent string for a particular URL.
332     @param URL The URL.
333     @result The user-agent string for the supplied URL.
334 */
335 - (NSString *)userAgentForURL:(NSURL *)URL;
336
337
338 /*!
339     @property supportsTextEncoding
340     @abstract If the document view of the current web page can support different text encodings.
341 */
342 @property (nonatomic, readonly) BOOL supportsTextEncoding;
343
344 /*!
345     @property customTextEncodingName
346     @abstract The custom text encoding name or nil if no custom text encoding name has been set.
347     @discussion Make the page display with a different text encoding; stops any load in progress.
348     The text encoding passed in overrides the normal text encoding smarts including
349     what's specified in a web page's header or HTTP response.
350     The text encoding automatically goes back to the default when the top level frame
351     changes to a new location.
352     Setting the text encoding name to nil makes the webView use default encoding rules.
353
354 */
355 @property (nonatomic, copy) NSString *customTextEncodingName;
356
357 /*!
358     @method mediaStyle
359     @abstract The media style for the WebView.
360     @discussion The mediaStyle will override the normal value
361     of the CSS media property. Setting the value to nil will restore the normal value. The value will be nil unless explicitly set.
362 */
363 @property (nonatomic, copy) NSString *mediaStyle;
364
365 /*!
366     @method stringByEvaluatingJavaScriptFromString:
367     @param script The text of the JavaScript.
368     @result The result of the script, converted to a string, or nil for failure.
369 */
370 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
371
372 /*!
373     @property windowScriptObject
374     @abstract A WebScriptObject that represents the
375     window object from the script environment.
376 */
377 @property (nonatomic, readonly, strong) WebScriptObject *windowScriptObject;
378
379 /*!
380     @property preferences
381     @abstract The preferences used by this WebView.
382     @discussion This method will return [WebPreferences standardPreferences] if no
383     other instance of WebPreferences has been set.
384 */
385 @property (nonatomic, strong) WebPreferences *preferences;
386
387 /*!
388     @property preferencesIdentifier
389     @abstract The WebPreferences key prefix.
390     @discussion If the WebPreferences for this WebView are stored in the user defaults database, this string will be used as a key prefix.
391 */
392 @property (nonatomic, copy) NSString *preferencesIdentifier;
393
394 /*!
395     @property hostWindow
396     @abstract The host window for the web view.
397     @discussion Parts of WebKit (such as plug-ins and JavaScript) depend on a window to function
398     properly. Set a host window so these parts continue to function even when the web view is
399     not in an actual window.
400 */
401 @property (nonatomic, strong) NSWindow *hostWindow;
402
403 /*!
404     @method searchFor:direction:caseSensitive:
405     @abstract Searches a document view for a string and highlights the string if it is found.
406     Starts the search from the current selection.  Will search across all frames.
407     @param string The string to search for.
408     @param forward YES to search forward, NO to seach backwards.
409     @param caseFlag YES to for case-sensitive search, NO for case-insensitive search.
410     @result YES if found, NO if not found.
411 */
412 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag;
413
414 /*!
415     @method registerViewClass:representationClass:forMIMEType:
416     @discussion Register classes that implement WebDocumentView and WebDocumentRepresentation respectively.
417     A document class may register for a primary MIME type by excluding
418     a subtype, i.e. "video/" will match the document class with
419     all video types.  More specific matching takes precedence
420     over general matching.
421     @param viewClass The WebDocumentView class to use to render data for a given MIME type.
422     @param representationClass The WebDocumentRepresentation class to use to represent data of the given MIME type.
423     @param MIMEType The MIME type to represent with an object of the given class.
424 */
425 + (void)registerViewClass:(Class)viewClass representationClass:(Class)representationClass forMIMEType:(NSString *)MIMEType;
426
427 /*!
428     @property groupName
429     @abstract The group name for this WebView.
430     @discussion JavaScript may access named frames within the same group.
431 */
432 @property (nonatomic, copy) NSString *groupName;
433
434 /*!
435     @property estimatedProgress
436     @discussion An estimate of the percent complete for a document load.  This
437     value will range from 0 to 1.0 and, once a load completes, will remain at 1.0 
438     until a new load starts, at which point it will be reset to 0.  The value is an
439     estimate based on the total number of bytes expected to be received
440     for a document, including all it's possible subresources.  For more accurate progress
441     indication it is recommended that you implement a WebFrameLoadDelegate and a
442     WebResourceLoadDelegate.
443 */
444 @property (nonatomic, readonly) double estimatedProgress;
445
446 /*!
447     @property loading
448     @abstract Whether there are any pending loads in this WebView.
449 */
450 @property (nonatomic, getter=isLoading, readonly) BOOL loading;
451
452 /*!
453     @method elementAtPoint:
454     @param point A point in the coordinates of the WebView
455     @result An element dictionary describing the point
456 */
457 - (NSDictionary *)elementAtPoint:(NSPoint)point;
458
459 #if !TARGET_OS_IPHONE
460 /*!
461     @property pasteboardTypesForSelection
462     @abstract The pasteboard types that the WebView can use for the current selection
463 */
464 @property (nonatomic, readonly, copy) NSArray *pasteboardTypesForSelection;
465
466 /*!
467     @method writeSelectionWithPasteboardTypes:toPasteboard:
468     @abstract Writes the current selection to the pasteboard
469     @param types The types that WebView will write to the pasteboard
470     @param pasteboard The pasteboard to write to
471 */
472 - (void)writeSelectionWithPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard;
473
474 /*!
475     @method pasteboardTypesForElement:
476     @abstract Returns the pasteboard types that WebView can use for an element
477     @param element The element
478 */
479 - (NSArray *)pasteboardTypesForElement:(NSDictionary *)element;
480
481 /*!
482     @method writeElement:withPasteboardTypes:toPasteboard:
483     @abstract Writes an element to the pasteboard
484     @param element The element to write to the pasteboard
485     @param types The types that WebView will write to the pasteboard
486     @param pasteboard The pasteboard to write to
487 */
488 - (void)writeElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard;
489
490 /*!
491     @method moveDragCaretToPoint:
492     @param point A point in the coordinates of the WebView
493     @discussion This method moves the caret that shows where something being dragged will be dropped. It may cause the WebView to scroll
494     to make the new position of the drag caret visible.
495 */
496 - (void)moveDragCaretToPoint:(NSPoint)point;
497
498 /*!
499     @method removeDragCaret
500     @abstract Removes the drag caret from the WebView
501 */
502 - (void)removeDragCaret;
503 #endif /* !TARGET_OS_IPHONE */
504
505 /*!
506     @property drawsBackground
507     @abstract Whether the receiver draws a default white background when the loaded page has no background specified.
508 */
509 @property (nonatomic) BOOL drawsBackground;
510
511 /*!
512     @method shouldUpdateWhileOffscreen
513     @abstract Whether the WebView is always updated even when it is not in a window that is currently visible.
514     @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.
515     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,
516     hidden web views are always updated. This is the default.
517 */
518 @property (nonatomic) BOOL shouldUpdateWhileOffscreen;
519
520 /*!
521     @property mainFrameURL
522     @abstract The main frame's current URL.
523 */
524 @property (nonatomic, copy) NSString *mainFrameURL;
525
526 /*!
527     @property mainFrameDocument
528     @abstract The main frame's DOMDocument.
529 */
530 @property (nonatomic, readonly, strong) DOMDocument *mainFrameDocument;
531
532 /*!
533     @property mainFrameTitle
534     @abstract The main frame's title if any, otherwise an empty string.
535 */
536 @property (nonatomic, readonly, copy) NSString *mainFrameTitle;
537
538 #if TARGET_OS_IPHONE
539 /*!
540     @method mainFrameIconURL
541     @discussion The methods returns the URL of the site icon for the current page loaded in the mainFrame.
542     @result Returns the URL of the main frame's icon if any, otherwise nil.
543 */
544 - (NSURL *)mainFrameIconURL;
545 #else
546 /*!
547     @property mainFrameIcon
548     @abstract The site icon for the current page loaded in the mainFrame, or nil.
549 */
550 @property (nonatomic, readonly, strong) NSImage *mainFrameIcon;
551 #endif
552
553 @end
554
555 #if TARGET_OS_IPHONE
556 @interface WebView (WebIBActions)
557 #else
558 @interface WebView (WebIBActions) <NSUserInterfaceValidations>
559 #endif
560 - (IBAction)takeStringURLFrom:(id)sender;
561 - (IBAction)stopLoading:(id)sender;
562 - (IBAction)reload:(id)sender;
563 - (IBAction)reloadFromOrigin:(id)sender;
564 @property (nonatomic, readonly) BOOL canGoBack;
565 - (IBAction)goBack:(id)sender;
566 @property (nonatomic, readonly) BOOL canGoForward;
567 - (IBAction)goForward:(id)sender;
568 @property (nonatomic, readonly) BOOL canMakeTextLarger;
569 - (IBAction)makeTextLarger:(id)sender;
570 @property (nonatomic, readonly) BOOL canMakeTextSmaller;
571 - (IBAction)makeTextSmaller:(id)sender;
572 @property (nonatomic, readonly) BOOL canMakeTextStandardSize;
573 - (IBAction)makeTextStandardSize:(id)sender;
574 #if !TARGET_OS_IPHONE
575 - (IBAction)toggleContinuousSpellChecking:(id)sender;
576 - (IBAction)toggleSmartInsertDelete:(id)sender;
577 #endif
578 #if TARGET_OS_IPHONE
579 - (void)stopLoadingAndClear;
580 #endif
581 @end
582
583
584 // WebView editing support
585
586 extern NSString * const WebViewDidBeginEditingNotification;
587 extern NSString * const WebViewDidChangeNotification;
588 extern NSString * const WebViewDidEndEditingNotification;
589 extern NSString * const WebViewDidChangeTypingStyleNotification;
590 extern NSString * const WebViewDidChangeSelectionNotification;
591
592 @interface WebView (WebViewCSS)
593 - (DOMCSSStyleDeclaration *)computedStyleForElement:(DOMElement *)element pseudoElement:(NSString *)pseudoElement;
594 @end
595
596 @interface WebView (WebViewEditing)
597 - (DOMRange *)editableDOMRangeForPoint:(NSPoint)point;
598 - (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity;
599 @property (nonatomic, readonly, strong) DOMRange *selectedDOMRange;
600 @property (nonatomic, readonly) NSSelectionAffinity selectionAffinity;
601 @property (nonatomic, readonly) BOOL maintainsInactiveSelection;
602 @property (nonatomic, getter=isEditable) BOOL editable;
603 @property (nonatomic, strong) DOMCSSStyleDeclaration *typingStyle;
604 @property (nonatomic) BOOL smartInsertDeleteEnabled;
605 @property (nonatomic, getter=isContinuousSpellCheckingEnabled) BOOL continuousSpellCheckingEnabled;
606 #if !TARGET_OS_IPHONE
607 @property (nonatomic, readonly) NSInteger spellCheckerDocumentTag;
608 #endif
609 @property (nonatomic, readonly, strong) NSUndoManager *undoManager;
610 @property (nonatomic, strong) id editingDelegate;
611 - (DOMCSSStyleDeclaration *)styleDeclarationWithText:(NSString *)text;
612 @end
613
614 @interface WebView (WebViewUndoableEditing)
615 - (void)replaceSelectionWithNode:(DOMNode *)node; 
616 - (void)replaceSelectionWithText:(NSString *)text;    
617 - (void)replaceSelectionWithMarkupString:(NSString *)markupString;
618 - (void)replaceSelectionWithArchive:(WebArchive *)archive;
619 - (void)deleteSelection;    
620 - (void)applyStyle:(DOMCSSStyleDeclaration *)style;
621 @end
622
623 @interface WebView (WebViewEditingActions)
624
625 - (void)copy:(id)sender;
626 - (void)cut:(id)sender;
627 - (void)paste:(id)sender;
628 - (void)copyFont:(id)sender;
629 - (void)pasteFont:(id)sender;
630 - (void)delete:(id)sender;
631 - (void)pasteAsPlainText:(id)sender;
632 - (void)pasteAsRichText:(id)sender;
633
634 - (void)changeFont:(id)sender;
635 - (void)changeAttributes:(id)sender;
636 - (void)changeDocumentBackgroundColor:(id)sender;
637 - (void)changeColor:(id)sender;
638
639 - (void)alignCenter:(id)sender;
640 - (void)alignJustified:(id)sender;
641 - (void)alignLeft:(id)sender;
642 - (void)alignRight:(id)sender;
643
644 - (void)checkSpelling:(id)sender;
645 - (void)showGuessPanel:(id)sender;
646 - (void)performFindPanelAction:(id)sender;
647
648 - (void)startSpeaking:(id)sender;
649 - (void)stopSpeaking:(id)sender;
650
651 - (void)moveToBeginningOfSentence:(id)sender;
652 - (void)moveToBeginningOfSentenceAndModifySelection:(id)sender;
653 - (void)moveToEndOfSentence:(id)sender;
654 - (void)moveToEndOfSentenceAndModifySelection:(id)sender;
655 - (void)selectSentence:(id)sender;
656
657 - (void)overWrite:(id)sender;
658
659 #if TARGET_OS_IPHONE
660 - (void)clearText:(id)sender;
661 - (void)insertDictationPhrases:(NSArray *)dictationPhrases metadata:(id)metadata;
662 - (void)toggleBold:(id)sender;
663 - (void)toggleItalic:(id)sender;
664 - (void)toggleUnderline:(id)sender;
665 #endif
666
667 /* 
668 The following methods are declared in NSResponder.h.
669 WebView overrides each method in this list, providing
670 a custom implementation for each.
671     
672 - (void)capitalizeWord:(id)sender;
673 - (void)centerSelectionInVisibleArea:(id)sender;
674 - (void)changeCaseOfLetter:(id)sender;
675 - (void)complete:(id)sender;
676 - (void)deleteBackward:(id)sender;
677 - (void)deleteBackwardByDecomposingPreviousCharacter:(id)sender;
678 - (void)deleteForward:(id)sender;
679 - (void)deleteToBeginningOfLine:(id)sender;
680 - (void)deleteToBeginningOfParagraph:(id)sender;
681 - (void)deleteToEndOfLine:(id)sender;
682 - (void)deleteToEndOfParagraph:(id)sender;
683 - (void)deleteWordBackward:(id)sender;
684 - (void)deleteWordForward:(id)sender;
685 - (void)indent:(id)sender;
686 - (void)insertBacktab:(id)sender;
687 - (void)insertNewline:(id)sender;
688 - (void)insertParagraphSeparator:(id)sender;
689 - (void)insertTab:(id)sender;
690 - (void)lowercaseWord:(id)sender;
691 - (void)moveBackward:(id)sender;
692 - (void)moveBackwardAndModifySelection:(id)sender;
693 - (void)moveDown:(id)sender;
694 - (void)moveDownAndModifySelection:(id)sender;
695 - (void)moveForward:(id)sender;
696 - (void)moveForwardAndModifySelection:(id)sender;
697 - (void)moveLeft:(id)sender;
698 - (void)moveLeftAndModifySelection:(id)sender;
699 - (void)moveRight:(id)sender;
700 - (void)moveRightAndModifySelection:(id)sender;
701 - (void)moveToBeginningOfDocument:(id)sender;
702 - (void)moveToBeginningOfDocumentAndModifySelection:(id)sender;
703 - (void)moveToBeginningOfLine:(id)sender;
704 - (void)moveToBeginningOfLineAndModifySelection:(id)sender;
705 - (void)moveToBeginningOfParagraph:(id)sender;
706 - (void)moveToBeginningOfParagraphAndModifySelection:(id)sender;
707 - (void)moveToEndOfDocument:(id)sender;
708 - (void)moveToEndOfDocumentAndModifySelection:(id)sender;
709 - (void)moveToEndOfLine:(id)sender;
710 - (void)moveToEndOfLineAndModifySelection:(id)sender;
711 - (void)moveToEndOfParagraph:(id)sender;
712 - (void)moveToEndOfParagraphAndModifySelection:(id)sender;
713 - (void)moveUp:(id)sender;
714 - (void)moveUpAndModifySelection:(id)sender;
715 - (void)moveWordBackward:(id)sender;
716 - (void)moveWordBackwardAndModifySelection:(id)sender;
717 - (void)moveWordForward:(id)sender;
718 - (void)moveWordForwardAndModifySelection:(id)sender;
719 - (void)moveWordLeft:(id)sender;
720 - (void)moveWordLeftAndModifySelection:(id)sender;
721 - (void)moveWordRight:(id)sender;
722 - (void)moveWordRightAndModifySelection:(id)sender;
723 - (void)pageDown:(id)sender;
724 - (void)pageUp:(id)sender;
725 - (void)scrollLineDown:(id)sender;
726 - (void)scrollLineUp:(id)sender;
727 - (void)scrollPageDown:(id)sender;
728 - (void)scrollPageUp:(id)sender;
729 - (void)selectAll:(id)sender;
730 - (void)selectLine:(id)sender;
731 - (void)selectParagraph:(id)sender;
732 - (void)selectWord:(id)sender;
733 - (void)uppercaseWord:(id)sender;
734 */
735  
736 @end
737
738 #if TARGET_OS_IPHONE
739
740 @interface WebView (WebViewIOS)
741 + (void)enableWebThread;
742 + (void)garbageCollectNow;
743 + (void)purgeInactiveFontData;
744 + (void)drainLayerPool;
745 + (void)discardAllCompiledCode;
746 + (void)registerForMemoryNotifications;
747 + (void)releaseFastMallocMemoryOnCurrentThread;
748 + (BOOL)isCharacterSmartReplaceExempt:(unichar)character isPreviousCharacter:(BOOL)b;
749
750 /*!
751  * @method willEnterBackgroundWithCompletionHandler:
752  * @discussion This is invoked when the app gets a did enter background
753  * notification. It frees up caches on the web thread and invokes the handler
754  * block on the main thread when done.
755  *
756  * @param handler The block to invoke on the main thread once the cleanup is
757  * done.
758  */
759 + (void)willEnterBackgroundWithCompletionHandler:(void(^)(void))handler;
760
761 /*!
762  * @method updateLayoutIgnorePendingStyleSheets:
763  * @discussion This method forces the page to layout even if there are external
764  * pending style sheets.
765  */
766 - (void)updateLayoutIgnorePendingStyleSheets;
767 @end
768
769 @interface NSObject (WebViewClassDelegate)
770 - (BOOL)viewClass:(Class *)vClass andRepresentationClass:(Class *)rClass forMIMEType:(NSString *)MIMEType;
771 @end
772
773 #endif /* TARGET_OS_IPHONE */