summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2008-08-19 11:24:01 +0000
committerJay Freeman (saurik) <saurik@saurik.com>2010-09-30 07:08:24 +0000
commit7d2ac47f3369cf198f78970363f0f31bd3cd44ee (patch)
tree440a777ee279b5055ba4714942a1352217bf68f9
parenta954357579aa1fc2d03610d97d30a09156af7276 (diff)
Added custom depictions and better webview support.
-rw-r--r--Cydia.app/menes/menes.js16
-rw-r--r--Cydia.app/menes/style.css8
-rw-r--r--Cydia.app/package.html79
-rw-r--r--Cydia.app/package.js30
-rw-r--r--Cydia.mm103
-rw-r--r--UICaboodle/BrowserView.h2
-rw-r--r--makefile4
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 @@
<script type="text/javascript" src="menes/menes.js"></script>
<script type="text/javascript" src="package.js"></script>
<base target="_blank"/>
+
+ <script type="text/javascript">
+ var count = -1;
+ var loaded = function() {
+ if (count++ != 0)
+ return;
+ $("#depiction-load").remove();
+ $.each($("#depiction-src"), function (node) {
+ node.style.display = "block";
+ });
+ }
+
+ var remove = function() {
+ $(".description").display("block");
+ $(".depiction").remove();
+ }
+ </script>
+
+ <style>
+ body {
+ background: #c8c8c8 url(menes/pinstripes.png);
+ }
+
+ #remove {
+ margin-top: 7px;
+ text-align: center;
+ }
+
+ #indicator {
+ left: 20px;
+ position: relative;
+ top: -5px;
+ }
+
+ #notice {
+ margin-bottom: -14px;
+ overflow: hidden;
+ width: 320px;
+ }
+
+ #remove > a {
+ color: #335588;
+ text-decoration: none;
+ }
+
+ #upper-bar {
+ margin-bottom: 0;
+ margin-top: 10px;
+ }
+
+ #lower-bar {
+ margin-bottom: 10px;
+ margin-top: 0;
+ }
+ </style>
</head><body><div class="page">
<div class="dialog">
<div class="panel">
@@ -23,17 +78,35 @@
</a>
</fieldset>
+<div id="notice" class="notice"><iframe
+ id="notice-src"
+ frameborder="0"
+ width="320"
+ height="0"
+ target="_top"
+></iframe></div>
+
+<div id="remove" class="depiction">
+ <a href="javascript:remove()">Remove Custom Depiction</a>
+</div>
+
+<hr id="upper-bar" class="depiction"/>
+
<div style="width: 320px; overflow: hidden" class="depiction"><iframe
id="depiction-src"
frameborder="0"
- width="300"
+ width="320"
+ height="0"
target="_top"
+ onLoad="loaded()"
></iframe></div>
+<hr id="lower-bar" class="depiction"/>
+
<fieldset class="description">
<div id="description"></div>
- <a id="homepage-href">
+ <a class="homepage" id="homepage-href">
<label>More Information</label>
</a>
</fieldset>
@@ -85,7 +158,7 @@
<label class="source">Source Infomation</label>
<fieldset class="source">
<div><label id="source-name"></label></div>
- <div id="source-description"></div>
+ <div class="source-description" id="source-description"></div>
</fieldset>
</div>
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, "<br/>");
- $("#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, "<br/>");
+ $("#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 <CoreGraphics/CoreGraphics.h>
#include <GraphicsServices/GraphicsServices.h>
#include <Foundation/Foundation.h>
+
#include <WebCore/DOMHTML.h>
+#import <QuartzCore/CALayer.h>
#import <UIKit/UIActionSheet.h>
#import <UIKit/UIAnimator.h>
@@ -80,9 +82,12 @@
#import <UIKit/UIWindow.h>
#import <UIKit/UIView-Geometry.h>
+#import <UIKit/UIView-Gestures.h>
#import <UIKit/UIView-Hierarchy.h>
#import <UIKit/UIView-Rendering.h>
+#import <UIKit/UIWebDocumentView-Forms.h>
+
#import <UIKit/NSString-UIStringDrawing.h>
// 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