From 7d2ac47f3369cf198f78970363f0f31bd3cd44ee Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Tue, 19 Aug 2008 11:24:01 +0000 Subject: Added custom depictions and better webview support. --- Cydia.app/menes/menes.js | 16 +++++-- Cydia.app/menes/style.css | 8 +++- Cydia.app/package.html | 79 +++++++++++++++++++++++++++++++++-- Cydia.app/package.js | 30 +++++++------- Cydia.mm | 103 +++++++++++++++++++++++++++++++++++++--------- UICaboodle/BrowserView.h | 2 + makefile | 4 ++ 7 files changed, 201 insertions(+), 41 deletions(-) diff --git a/Cydia.app/menes/menes.js b/Cydia.app/menes/menes.js index 64ec5d0..f0070bc 100644 --- a/Cydia.app/menes/menes.js +++ b/Cydia.app/menes/menes.js @@ -27,9 +27,10 @@ var $ = function (arg, doc) { if (arg.charAt(0) == '#') { var node = doc.getElementById(arg.substring(1)); return $(node == null ? [] : [node]); - } else if (arg.charAt(0) == '.') - return new $(doc.getElementsByClassName(arg.substring(1))); - else + } else if (arg.charAt(0) == '.') { + var nodes = doc.getElementsByClassName(arg.substring(1)); + return $(nodes == null ? [] : nodes); + } else return $([doc]).descendants(arg); } else { _assert(doc == undefined); @@ -184,6 +185,15 @@ $.inject = function (a, b) { }; $.inject({ + display: { + get: function (node) { + return node.style.display; + }, + set: function (node, value) { + node.style.display = value; + } + }, + html: { get: function (node) { return node.innerHTML; diff --git a/Cydia.app/menes/style.css b/Cydia.app/menes/style.css index ffae721..e5e2264 100644 --- a/Cydia.app/menes/style.css +++ b/Cydia.app/menes/style.css @@ -44,7 +44,7 @@ body { } hr { - margin-top: 10px; + margin: 0; } .dialog > .panel { @@ -155,7 +155,7 @@ strong { } .dialog > .panel > fieldset > div > p { - margin-top: .5em; + margin: 11px 0; text-align: center; } @@ -163,6 +163,10 @@ strong { margin-top: 0; } +.dialog > .panel > fieldset > div > p:last-child { + margin-bottom: 0; +} + .dialog > .panel > fieldset > a { background: 275px 11px no-repeat url(listArrow.png); color: inherit; diff --git a/Cydia.app/package.html b/Cydia.app/package.html index c545802..c5acc6a 100644 --- a/Cydia.app/package.html +++ b/Cydia.app/package.html @@ -7,6 +7,61 @@ + + + +
@@ -23,17 +78,35 @@ +
+ + + +
+
+
+
- +
@@ -85,7 +158,7 @@
-
+
diff --git a/Cydia.app/package.js b/Cydia.app/package.js index aec8141..0dfa6dc 100644 --- a/Cydia.app/package.js +++ b/Cydia.app/package.js @@ -5,10 +5,10 @@ "name": "Allen Porter", "address": "allen.porter@gmail.com" }, - "depiction": "http://planet-iphones.com/repository/info/chromium1.3.php", + //"depiction": "http://planet-iphones.com/repository/info/chromium1.3.php", + "depiction": "http://cydia.saurik.com/terminal.html", "description": "this is a sample description", - //"homepage": "http://cydia.saurik.com/terminal.html", - "homepage": "http://planet-iphones.com/repository/info/chromium1.3.php", + "homepage": "http://cydia.saurik.com/terminal.html", "installed": "286u-4", "id": "mobileterminal", "section": "Terminal Support", @@ -39,21 +39,23 @@ $(function () { $("#author-href").href("mailto:" + author.address + "?subject=" + regarding); } + $("#notice-src").src("http://cydia.saurik.com/notice/" + encodeURIComponent(id) + ".html"); + var depiction = package.depiction; - if (depiction != null) { - $(".description").remove(); - $("#depiction-src").src(depiction); - } else { + if (depiction == null) $(".depiction").remove(); - - var description = package.description; - if (description == null) - description = package.tagline; - else - description = description.replace(/\n/g, "
"); - $("#description").html(description); + else { + $(".description").display("none"); + $("#depiction-src").src(depiction); } + var description = package.description; + if (description == null) + description = package.tagline; + else + description = description.replace(/\n/g, "
"); + $("#description").html(description); + var homepage = package.homepage; if (homepage == null) $(".homepage").remove(); diff --git a/Cydia.mm b/Cydia.mm index fccb591..b8cf993 100644 --- a/Cydia.mm +++ b/Cydia.mm @@ -42,7 +42,9 @@ #include #include #include + #include +#import #import #import @@ -80,9 +82,12 @@ #import #import +#import #import #import +#import + #import // XXX: remove @@ -144,6 +149,10 @@ extern "C" { #import "UICaboodle.h" /* }}} */ +@interface WebView (Cydia) +- (void) _setLayoutInterval:(float)interval; +@end + /* iPhoneOS 2.0 Compatibility {{{ */ #ifdef __OBJC2__ @interface UICGColor : NSObject { @@ -461,6 +470,7 @@ static CGColor Red_; static CGColor White_; static CGColor Gray_; +static NSString *App_; static NSString *Home_; static BOOL Sounds_Keyboard_; @@ -1082,6 +1092,7 @@ NSString *Scour(const char *field, const char *begin, const char *end) { - (BOOL) upgradableAndEssential:(BOOL)essential; - (BOOL) essential; - (BOOL) broken; +- (BOOL) unfiltered; - (BOOL) visible; - (BOOL) half; @@ -1116,8 +1127,8 @@ NSString *Scour(const char *field, const char *begin, const char *end) { - (void) install; - (void) remove; -- (NSNumber *) isVisiblySearchedForBy:(NSString *)search; -- (NSNumber *) isInstalledAndVisible:(NSNumber *)number; +- (NSNumber *) isUnfilteredAndSearchedForBy:(NSString *)search; +- (NSNumber *) isInstalledAndUnfiltered:(NSNumber *)number; - (NSNumber *) isVisiblyUninstalledInSection:(NSString *)section; - (NSNumber *) isVisibleInSource:(Source *)source; @@ -1342,9 +1353,13 @@ NSString *Scour(const char *field, const char *begin, const char *end) { return [database_ cache][iterator_].InstBroken(); } -- (BOOL) visible { +- (BOOL) unfiltered { NSString *section = [self section]; - return [self hasSupportingRole] && (section == nil || isSectionVisible(section)); + return section == nil || isSectionVisible(section); +} + +- (BOOL) visible { + return [self hasSupportingRole] && [self unfiltered]; } - (BOOL) half { @@ -1585,15 +1600,15 @@ NSString *Scour(const char *field, const char *begin, const char *end) { [database_ cache]->MarkDelete(iterator_, true); } -- (NSNumber *) isVisiblySearchedForBy:(NSString *)search { +- (NSNumber *) isUnfilteredAndSearchedForBy:(NSString *)search { return [NSNumber numberWithBool:( - [self valid] && [self visible] && [self matches:search] + [self unfiltered] && [self matches:search] )]; } -- (NSNumber *) isInstalledAndVisible:(NSNumber *)number { +- (NSNumber *) isInstalledAndUnfiltered:(NSNumber *)number { return [NSNumber numberWithBool:( - (![number boolValue] || [self visible]) && [self installed] != nil + (![number boolValue] || [self unfiltered]) && [self installed] != nil )]; } @@ -1601,7 +1616,7 @@ NSString *Scour(const char *field, const char *begin, const char *end) { NSString *section = [self section]; return [NSNumber numberWithBool:( - [self valid] && [self visible] && + [self visible] && [self installed] == nil && ( name == nil || section == nil && [name length] == 0 || @@ -2914,7 +2929,7 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString if (NSString *icon = [package icon]) icon_ = [UIImage imageAtPath:[icon substringFromIndex:6]]; if (icon_ == nil) if (NSString *section = [package section]) - icon_ = [UIImage applicationImageNamed:[NSString stringWithFormat:@"Sections/%@.png", Simplify(section)]]; + icon_ = [UIImage imageAtPath:[NSString stringWithFormat:@"%@/Sections/%@.png", App_, Simplify(section)]]; /*if (icon_ == nil) if (NSString *icon = [source defaultIcon]) icon_ = [UIImage imageAtPath:[icon substringFromIndex:6]];*/ if (icon_ == nil) @@ -3299,6 +3314,13 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString [sheet dismiss]; } +#include "internals.h" + +- (void) webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { + [[frame windowObject] evaluateWebScript:@"document.base.target = '_top'"]; + return [super webView:sender didFinishLoadForFrame:frame]; +} + - (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame { [window setValue:package_ forKey:@"package"]; } @@ -3514,7 +3536,7 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString for (size_t i(0); i != [packages count]; ++i) { Package *package([packages objectAtIndex:i]); - if ([[package performSelector:filter_ withObject:object_] boolValue]) + if ([package valid] && [[package performSelector:filter_ withObject:object_] boolValue]) [packages_ addObject:package]; } @@ -4036,7 +4058,7 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString initWithBook:book database:database title:nil - filter:@selector(isInstalledAndVisible:) + filter:@selector(isInstalledAndUnfiltered:) with:[NSNumber numberWithBool:YES] ]; @@ -4360,7 +4382,7 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString NSString *href = [webview mainFrameURL]; [urls_ addObject:[NSURL URLWithString:href]]; - CGRect webrect = [scroller_ frame]; + CGRect webrect = [scroller_ bounds]; webrect.size.height = 0; [webview_ setFrame:webrect]; } @@ -4373,10 +4395,31 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString } } +- (BOOL) webView:(WebView *)sender shouldScrollToPoint:(struct CGPoint)point forFrame:(WebFrame *)frame { + _trace(); + return [webview_ webView:sender shouldScrollToPoint:point forFrame:frame]; +} + +- (void) webView:(WebView *)sender didReceiveViewportArguments:(id)arguments forFrame:(WebFrame *)frame { + return [webview_ webView:sender didReceiveViewportArguments:arguments forFrame:frame]; +} + +- (void) webView:(WebView *)sender needsScrollNotifications:(id)notifications forFrame:(WebFrame *)frame { + return [webview_ webView:sender needsScrollNotifications:notifications forFrame:frame]; +} + +- (void) webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame { + return [webview_ webView:sender didCommitLoadForFrame:frame]; +} + +- (void) webView:(WebView *)sender didReceiveDocTypeForFrame:(WebFrame *)frame { + return [webview_ webView:sender didReceiveDocTypeForFrame:frame]; +} + - (void) webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { - if ([frame parentFrame] != nil) - return; - [self _finishLoading]; + if ([frame parentFrame] == nil) + [self _finishLoading]; + return [webview_ webView:sender didFinishLoadForFrame:frame]; } - (void) webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame { @@ -4417,11 +4460,26 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString webview_ = [[UIWebView alloc] initWithFrame:webrect]; [scroller_ addSubview:webview_]; - [webview_ setTilingEnabled:YES]; [webview_ setTileSize:CGSizeMake(webrect.size.width, 500)]; + + [webview_ setTilingEnabled:YES]; + [webview_ setTileMinificationFilter:kCAFilterNearest]; [webview_ setAutoresizes:YES]; + + [webview_ setViewportSize:CGSizeMake(980, -1) forDocumentTypes:0x10]; + [webview_ setViewportSize:CGSizeMake(320, -1) forDocumentTypes:0x2]; + [webview_ setViewportSize:CGSizeMake(320, -1) forDocumentTypes:0x8]; + + [webview_ _setDocumentType:0x4]; + + [webview_ setZoomsFocusedFormControl:YES]; + [webview_ setContentsPosition:7]; + [webview_ setEnabledGestures:0xa]; + [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x4]; + [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x7]; [webview_ setDelegate:self]; - //[webview_ setEnabledGestures:2]; + [webview_ setGestureDelegate:self]; + [webview_ setSmoothsFonts:YES]; CGSize indsize = [UIProgressIndicator defaultSizeForStyle:kUIProgressIndicatorStyleMediumWhite]; indicator_ = [[UIProgressIndicator alloc] initWithFrame:CGRectMake(281, 42, indsize.width, indsize.height)]; @@ -4439,10 +4497,16 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString [webview setResourceLoadDelegate:self]; [webview setUIDelegate:self]; + //[webview _setLayoutInterval:0.5]; + urls_ = [[NSMutableArray alloc] initWithCapacity:16]; } return self; } +- (void) didFinishGesturesInView:(UIView *)view forEvent:(id)event { + [webview_ redrawScaledDocument]; +} + - (void) _rightButtonClicked { reloading_ = true; [self reloadURL]; @@ -5056,7 +5120,7 @@ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString initWithBook:book database:database title:nil - filter:@selector(isVisiblySearchedForBy:) + filter:@selector(isUnfilteredAndSearchedForBy:) with:nil ]; @@ -6094,6 +6158,7 @@ int main(int argc, char *argv[]) { bootstrap_ = argc > 1 && strcmp(argv[1], "--bootstrap") == 0; + App_ = [[NSBundle mainBundle] bundlePath]; Home_ = NSHomeDirectory(); { diff --git a/UICaboodle/BrowserView.h b/UICaboodle/BrowserView.h index 7c6cc50..caafaa5 100644 --- a/UICaboodle/BrowserView.h +++ b/UICaboodle/BrowserView.h @@ -37,4 +37,6 @@ - (id) initWithBook:(RVBook *)book database:(Database *)database; +- (void) webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; + @end diff --git a/makefile b/makefile index dc82734..6763d1d 100644 --- a/makefile +++ b/makefile @@ -6,6 +6,10 @@ endif frameworks := +ifneq ($(wildcard $(PKG_ROOT)/System/Library/*Frameworks/QuartzCore.framework),) +frameworks += -framework QuartzCore +endif + ifneq ($(wildcard $(PKG_ROOT)/System/Library/*Frameworks/LayerKit.framework),) frameworks += -framework LayerKit endif -- cgit v1.2.3