_H<NSString> title_;
_H<NSMutableSet> loading_;
+ _H<NSMutableSet> registered_;
+ _H<NSTimer> timer_;
+
// XXX: NSString * or UIImage *
_H<NSObject> custom_;
_H<NSString> style_;
- (void) setScrollAlwaysBounceVertical:(bool)value;
- (void) setScrollIndicatorStyle:(UIScrollViewIndicatorStyle)style;
+- (void) registerFrame:(WebFrame *)frame;
+
@end
#endif//CyteKit_WebViewController_H
- (void) _setAllowsMessaging:(BOOL)allows;
@end
+@interface WebFrame (Cydia)
+- (void) cydia$updateHeight;
+@end
+
@implementation WebFrame (Cydia)
- (NSString *) description {
return [NSString stringWithFormat:@"<%s: %p, %@>", class_getName([self class]), self, [[[([self provisionalDataSource] ?: [self dataSource]) request] URL] absoluteString]];
}
+- (void) cydia$updateHeight {
+ [[[self frameElement] style]
+ setProperty:@"height"
+ value:[NSString stringWithFormat:@"%dpx",
+ [[[self DOMDocument] body] scrollHeight]]
+ priority:nil];
+}
+
@end
/* Indirect Delegate {{{ */
style_ = nil;
function_ = nil;
+ [registered_ removeAllObjects];
+ timer_ = nil;
+
allowsNavigationAction_ = true;
[self setHidesNavigationBar:NO];
allowsNavigationAction_ = true;
loading_ = [NSMutableSet setWithCapacity:5];
+ registered_ = [NSMutableSet setWithCapacity:5];
indirect_ = [[[IndirectDelegate alloc] initWithDelegate:self] autorelease];
reloaditem_ = [[[UIBarButtonItem alloc]
[self dispatchEvent:@"CydiaViewDidDisappear"];
}
+- (void) updateHeights:(NSTimer *)timer {
+ for (WebFrame *frame in (id) registered_)
+ [frame cydia$updateHeight];
+}
+
+- (void) registerFrame:(WebFrame *)frame {
+ [registered_ addObject:frame];
+
+ if (timer_ == nil)
+ timer_ = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(updateHeights:) userInfo:nil repeats:YES];
+}
+
@end
--- /dev/null
+<html><head>
+</head><body>
+ <script type="text/javascript">
+ document.write();
+ </script>
+</body></html>
#include <QuartzCore/CALayer.h>
#include <WebCore/WebCoreThread.h>
+#include <WebKit/DOMHTMLIFrameElement.h>
#include <algorithm>
#include <iomanip>
return @"popViewController";
else if (selector == @selector(refreshSources))
return @"refreshSources";
+ else if (selector == @selector(registerFrame:))
+ return @"registerFrame";
else if (selector == @selector(removeButton))
return @"removeButton";
else if (selector == @selector(saveConfig))
return [Values_ allKeys];
} }
+- (void) registerFrame:(DOMHTMLIFrameElement *)iframe {
+ WebFrame *frame([iframe contentFrame]);
+ [indirect_ registerFrame:frame];
+}
+
- (void) _setShowPromoted:(NSNumber *)value {
[Metadata_ setObject:value forKey:@"ShowPromoted"];
Changed_ = true;
#include <UIKit/UIKit.h>
// }}}
// #import <*> {{{
+#import <WebKit/DOMHTMLIFrameElement.h>
#import <WebKit/WebFrame.h>
#import <WebKit/WebPreferences.h>
// }}}
@property(nonatomic,readonly) CGFloat scale;
@end
+@interface DOMHTMLIFrameElement (IDL)
+- (WebFrame *) contentFrame;
+@end
+
// extern *; {{{
extern CFStringRef const kGSDisplayIdentifiersCapability;
extern float const UIWebViewGrowsAndShrinksToFitHeight;