Merge branch 'master' of git://github.com/280north/cappuccino

This commit is contained in:
Klaas Pieter Annema
2010-05-04 15:55:17 +02:00
9 changed files with 106 additions and 81 deletions
+1 -2
View File
@@ -217,10 +217,9 @@ var CPSplitViewHorizontalImage = nil,
_DOMDividerElements[_drawingDivider].style.backgroundRepeat = "repeat";
CPDOMDisplayServerAppendChild(_DOMElement, _DOMDividerElements[_drawingDivider]);
[self _setupDOMDivider];
}
[self _setupDOMDivider];
CPDOMDisplayServerSetStyleLeftTop(_DOMDividerElements[_drawingDivider], NULL, _CGRectGetMinX(aRect), _CGRectGetMinY(aRect));
CPDOMDisplayServerSetStyleSize(_DOMDividerElements[_drawingDivider], _CGRectGetWidth(aRect), _CGRectGetHeight(aRect));
#endif
+1 -1
View File
@@ -187,7 +187,7 @@ CPWebViewScrollNative = 2;
var win = null;
try { win = [self DOMWindow]; } catch (e) {}
if (win && win.document)
if (win && win.document && win.document.body)
{
var width = win.document.body.scrollWidth,
height = win.document.body.scrollHeight;
+4 -2
View File
@@ -1933,7 +1933,8 @@ CPTexturedBackgroundWindowMask
[keyWindow makeKeyWindow];
else
{
var menuWindow = [CPApp mainMenu]._menuWindow;
var mainMenu = [CPApp mainMenu],
menuWindow = mainMenu ? mainMenu._menuWindow : nil;
for (var i = 0; i < windowCount; i++)
{
var currentWindow = allWindows[i];
@@ -1961,7 +1962,8 @@ CPTexturedBackgroundWindowMask
[mainWindow makeMainWindow];
else
{
var menuWindow = [CPApp mainMenu]._menuWindow;
var mainMenu = [CPApp mainMenu],
menuWindow = mainMenu ? mainMenu._menuWindow : nil;
for (var i = 0; i < windowCount; i++)
{
var currentWindow = allWindows[i];
+14 -14
View File
@@ -37,12 +37,12 @@ var CPCibOwner = @"CPCibOwner";
@implementation CPBundle (CPCibLoading)
+ (void)loadCibFile:(CPString)anAbsolutePath externalNameTable:(CPDictionary)aNameTable
+ (CPCib)loadCibFile:(CPString)anAbsolutePath externalNameTable:(CPDictionary)aNameTable
{
[[[CPCib alloc] initWithContentsOfURL:anAbsolutePath] instantiateCibWithExternalNameTable:aNameTable];
return [[[CPCib alloc] initWithContentsOfURL:anAbsolutePath] instantiateCibWithExternalNameTable:aNameTable];
}
+ (void)loadCibNamed:(CPString)aName owner:(id)anOwner
+ (CPCib)loadCibNamed:(CPString)aName owner:(id)anOwner
{
if (![aName hasSuffix:@".cib"])
aName = [aName stringByAppendingString:@".cib"];
@@ -51,24 +51,24 @@ var CPCibOwner = @"CPCibOwner";
var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle],
path = [bundle pathForResource:aName];
[self loadCibFile:path externalNameTable:[CPDictionary dictionaryWithObject:anOwner forKey:CPCibOwner]];
return [self loadCibFile:path externalNameTable:[CPDictionary dictionaryWithObject:anOwner forKey:CPCibOwner]];
}
- (void)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable
- (CPCib)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable
{
[[[CPCib alloc] initWithContentsOfURL:aFileName] instantiateCibWithExternalNameTable:aNameTable];
return [[[CPCib alloc] initWithContentsOfURL:aFileName] instantiateCibWithExternalNameTable:aNameTable];
}
+ (void)loadCibFile:(CPString)anAbsolutePath externalNameTable:(CPDictionary)aNameTable loadDelegate:aDelegate
+ (CPCib)loadCibFile:(CPString)anAbsolutePath externalNameTable:(CPDictionary)aNameTable loadDelegate:aDelegate
{
[[CPCib alloc]
return ([[CPCib alloc]
initWithContentsOfURL:anAbsolutePath
loadDelegate:[[_CPCibLoadDelegate alloc]
initWithLoadDelegate:aDelegate
externalNameTable:aNameTable]];
externalNameTable:aNameTable]]);
}
+ (void)loadCibNamed:(CPString)aName owner:(id)anOwner loadDelegate:(id)aDelegate
+ (CPCib)loadCibNamed:(CPString)aName owner:(id)anOwner loadDelegate:(id)aDelegate
{
if (![aName hasSuffix:@".cib"])
aName = [aName stringByAppendingString:@".cib"];
@@ -77,17 +77,17 @@ var CPCibOwner = @"CPCibOwner";
var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle],
path = [bundle pathForResource:aName];
[self loadCibFile:path externalNameTable:[CPDictionary dictionaryWithObject:anOwner forKey:CPCibOwner] loadDelegate:aDelegate];
return [self loadCibFile:path externalNameTable:[CPDictionary dictionaryWithObject:anOwner forKey:CPCibOwner] loadDelegate:aDelegate];
}
- (void)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable loadDelegate:(id)aDelegate
- (CPCib)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable loadDelegate:(id)aDelegate
{
[[CPCib alloc]
return ([[CPCib alloc]
initWithCibNamed:aFileName
bundle:self
loadDelegate:[[_CPCibLoadDelegate alloc]
initWithLoadDelegate:aDelegate
externalNameTable:aNameTable]];
externalNameTable:aNameTable]]);
}
@end
+17 -33
View File
@@ -145,10 +145,10 @@
{
var i = 2,
array = [[self alloc] init],
argument;
count = arguments.length;
for (; i < arguments.length && (argument = arguments[i]) != nil; ++i)
array.push(argument);
for (; i < count; ++i)
array.push(arguments[i]);
return array;
}
@@ -229,10 +229,10 @@
{
// The arguments array contains self and _cmd, so the first object is at position 2.
var i = 2,
argument;
count = arguments.length;
for (; i < arguments.length && (argument = arguments[i]) != nil; ++i)
push(argument);
for (; i < count; ++i)
push(arguments[i]);
return self;
}
@@ -278,21 +278,18 @@
/*!
Returns the index of \c anObject in this array.
If the object is \c nil or not in the array,
If the object is not in the array,
returns \c CPNotFound. It first attempts to find
a match using \c -isEqual:, then \c ==.
a match using \c -isEqual:, then \c ===.
@param anObject the object to search for
*/
- (int)indexOfObject:(id)anObject
{
if (anObject === nil)
return CPNotFound;
var i = 0,
count = length;
// Only use -isEqual: if our object is a CPObject.
if (anObject.isa)
if (anObject && anObject.isa)
{
for (; i < count; ++i)
if ([self[i] isEqual:anObject])
@@ -305,7 +302,7 @@
// Last resort, do a straight forward linear O(N) search.
else
for (; i < count; ++i)
if (self[i] == anObject)
if (self[i] === anObject)
return i;
return CPNotFound;
@@ -314,21 +311,18 @@
/*!
Returns the index of \c anObject in the array
within \c aRange. It first attempts to find
a match using \c -isEqual:, then \c ==.
a match using \c -isEqual:, then \c ===.
@param anObject the object to search for
@param aRange the range to search within
@return the index of the object, or \c CPNotFound if it was not found.
*/
- (int)indexOfObject:(id)anObject inRange:(CPRange)aRange
{
if (anObject === nil)
return CPNotFound;
var i = aRange.location,
count = MIN(CPMaxRange(aRange), length);
// Only use isEqual: if our object is a CPObject.
if (anObject.isa)
if (anObject && anObject.isa)
{
for (; i < count; ++i)
if ([self[i] isEqual:anObject])
@@ -337,22 +331,19 @@
// Last resort, do a straight forward linear O(N) search.
else
for (; i < count; ++i)
if (self[i] == anObject)
if (self[i] === anObject)
return i;
return CPNotFound;
}
/*!
Returns the index of \c anObject in the array. The test for equality is done using only \c ==.
Returns the index of \c anObject in the array. The test for equality is done using only \c ===.
@param anObject the object to search for
@return the index of the object in the array. \c CPNotFound if the object is not in the array.
*/
- (int)indexOfObjectIdenticalTo:(id)anObject
{
if (anObject === nil)
return CPNotFound;
// If indexOf exists, use it since it's probably
// faster than anything we can implement.
if (self.indexOf)
@@ -382,9 +373,6 @@
*/
- (int)indexOfObjectIdenticalTo:(id)anObject inRange:(CPRange)aRange
{
if (anObject === nil)
return CPNotFound;
// If indexOf exists, use it since it's probably
// faster than anything we can implement.
if (self.indexOf)
@@ -460,7 +448,7 @@
- (unsigned)_indexOfObject:(id)anObject sortedByFunction:(Function)aFunction context:(id)aContext
{
if (!aFunction || anObject === undefined)
if (!aFunction)
return CPNotFound;
if (length === 0)
@@ -523,7 +511,8 @@
{
var count = [self count];
if (!count) return nil;
if (!count)
return nil;
return self[count - 1];
}
@@ -697,12 +686,7 @@
*/
- (CPArray)arrayByAddingObject:(id)anObject
{
if (anObject === nil || anObject === undefined)
[CPException raise:CPInvalidArgumentException
reason:"arrayByAddingObject: object can't be nil"];
var array = [self copy];
array.push(anObject);
return array;
+15 -2
View File
@@ -157,6 +157,7 @@ var CPRunLoopLastNativeRunLoop = 0;
CPDate _effectiveDate;
CPArray _orderedPerforms;
int _runLoopInsuranceTimer;
}
/*
@@ -267,6 +268,12 @@ var CPRunLoopLastNativeRunLoop = 0;
aTimer._lastNativeRunLoopsForModes = {};
aTimer._lastNativeRunLoopsForModes[aMode] = CPRunLoopLastNativeRunLoop;
if (!_runLoopInsuranceTimer)
_runLoopInsuranceTimer = window.setNativeTimeout(function()
{
[self limitDateForMode:CPDefaultRunLoopMode];
}, 0);
}
/*!
@@ -277,9 +284,15 @@ var CPRunLoopLastNativeRunLoop = 0;
//simple locking to try to prevent concurrent iterating over timers
if (_runLoopLock)
return;
_runLoopLock = YES;
if (_runLoopInsuranceTimer)
{
window.clearNativeTimeout(_runLoopInsuranceTimer);
_runLoopInsuranceTimer = nil;
}
var now = _effectiveDate ? [_effectiveDate laterDate:[CPDate date]] : [CPDate date],
nextFireDate = nil,
nextTimerFireDate = _nextTimerFireDatesForModes[aMode];
+39 -11
View File
@@ -92,15 +92,22 @@ if (!NativeRequest)
GLOBAL(CFHTTPRequest) = function()
{
this._requestHeaders = {};
this._mimeType = null;
this._eventDispatcher = new EventDispatcher(this);
this._nativeRequest = new NativeRequest();
var self = this;
this._nativeRequest.onreadystatechange = function()
this._stateChangeHandler = function()
{
determineAndDispatchHTTPRequestEvents(self);
}
this._nativeRequest.onreadystatechange = this._stateChangeHandler;
if (CFHTTPRequest.AuthenticationDelegate !== nil)
this._eventDispatcher.addEventListener("HTTP403", function(){CFHTTPRequest.AuthenticationDelegate(self)});
}
CFHTTPRequest.UninitializedState = 0;
@@ -109,6 +116,9 @@ CFHTTPRequest.LoadedState = 2;
CFHTTPRequest.InteractiveState = 3;
CFHTTPRequest.CompleteState = 4;
//override to forward all CFHTTPRequest authorization failures to a single function
CFHTTPRequest.AuthenticationDelegate = nil;
CFHTTPRequest.prototype.status = function()
{
try
@@ -177,7 +187,7 @@ CFHTTPRequest.prototype.responseText = function()
CFHTTPRequest.prototype.setRequestHeader = function(/*String*/ aHeader, /*Object*/ aValue)
{
return this._nativeRequest.setRequestHeader(aHeader, aValue);
this._requestHeaders[aHeader] = aValue;
}
CFHTTPRequest.prototype.getResponseHeader = function(/*String*/ aHeader)
@@ -192,17 +202,35 @@ CFHTTPRequest.prototype.getAllResponseHeaders = function()
CFHTTPRequest.prototype.overrideMimeType = function(/*String*/ aMimeType)
{
if ("overrideMimeType" in this._nativeRequest)
return this._nativeRequest.overrideMimeType(aMimeType);
this._mimeType = aMimeType;
}
CFHTTPRequest.prototype.open = function(/*String*/ aMethod, /*String*/ aURL, /*Boolean*/ isAsynchronous, /*String*/ aUser, /*String*/ aPassword)
{
this._URL = aURL;
this._async = isAsynchronous;
this._method = aMethod;
this._user = aUser;
this._password = aPassword;
return this._nativeRequest.open(aMethod, aURL, isAsynchronous, aUser, aPassword);
}
CFHTTPRequest.prototype.send = function(/*Object*/ aBody)
{
delete this._nativeRequest.onreadystatechange;
for (var i in this._requestHeaders)
{
if (this._requestHeaders.hasOwnProperty(i))
this._nativeRequest.setRequestHeader(i, this._requestHeaders[i]);
}
if (this._mimeType && "overrideMimeType" in this._nativeRequest)
this._nativeRequest.overrideMimeType(this._mimeType);
this._nativeRequest.open(this._method, this._URL, this._async, this._user, this._password);
this._nativeRequest.onreadystatechange = this._stateChangeHandler;
try
{
return this._nativeRequest.send(aBody);
@@ -236,20 +264,20 @@ function determineAndDispatchHTTPRequestEvents(/*CFHTTPRequest*/ aRequest)
eventDispatcher.dispatchEvent({ type:"readystatechange", request:aRequest});
var nativeRequest = aRequest._nativeRequest,
readyState = ["uninitialized", "loading", "loaded", "interactive", "complete"][aRequest.readyState()];
readyStates = ["uninitialized", "loading", "loaded", "interactive", "complete"];
eventDispatcher.dispatchEvent({ type:readyState, request:aRequest});
if (readyState === "complete")
if (readyStates[aRequest.readyState()] === "complete")
{
var status = "HTTP" + aRequest.status();
eventDispatcher.dispatchEvent({ type:status, request:aRequest });
var result = aRequest.success() ? "success" : "failure";
eventDispatcher.dispatchEvent({ type:result, request:aRequest });
eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest});
}
else
eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest});
}
function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure)
+14 -15
View File
@@ -21,8 +21,8 @@
- (void)testsInsertObjectsAtIndexes
{
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil],
newAdditions = [CPArray arrayWithObjects:@"a", @"b", nil],
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four"],
newAdditions = [CPArray arrayWithObjects:@"a", @"b"],
indexes = [CPMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:3];
@@ -31,8 +31,8 @@
[self assert:array equals:[@"one", @"a", @"two", @"b", @"three", @"four"]];
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil],
newAdditions = [CPArray arrayWithObjects:@"a", @"b", nil],
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four"],
newAdditions = [CPArray arrayWithObjects:@"a", @"b"],
indexes = [CPMutableIndexSet indexSetWithIndex:5];
[indexes addIndex:4];
@@ -41,8 +41,8 @@
[self assert:array equals:[@"one", @"two", @"three", @"four", @"a", @"b"]];
var array = [CPMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil],
newAdditions = [CPArray arrayWithObjects: @"a", @"b", @"c", nil],
var array = [CPMutableArray arrayWithObjects: @"one", @"two", @"three", @"four"],
newAdditions = [CPArray arrayWithObjects: @"a", @"b", @"c"],
indexes = [CPMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:2];
@@ -53,8 +53,8 @@
[self assert:array equals:[@"one", @"a", @"b", @"two", @"c", @"three", @"four"]];
var array = [CPMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil],
newAdditions = [CPArray arrayWithObjects: @"a", @"b", @"c", nil],
var array = [CPMutableArray arrayWithObjects: @"one", @"two", @"three", @"four"],
newAdditions = [CPArray arrayWithObjects: @"a", @"b", @"c"],
indexes = [CPMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:2];
@@ -64,10 +64,9 @@
[self assert:array equals:[@"one", @"a", @"b", @"two", @"three", @"four", @"c"]];
//
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil],
newAdditions = [CPArray arrayWithObjects:@"a", @"b", nil],
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four"],
newAdditions = [CPArray arrayWithObjects:@"a", @"b"],
indexes = [CPMutableIndexSet indexSetWithIndex:5];
[indexes addIndex:6];
@@ -88,10 +87,10 @@
{
var array = [CPMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil],
indexes = [CPMutableIndexSet indexSetWithIndex: 2];
[array removeObjectsAtIndexes: indexes];
[self assert:array equals:[@"one", @"two", @"four"]];
[self assert:array equals:[@"one", @"two", @"four", nil]];
}
- (void)testIndexOfObjectSortedByFunction
+1 -1
View File
@@ -28,7 +28,7 @@
if (data.length < 10)
{
// reload with data in the query string
window.location.href = [window.location.protocol, "//", window.location.host, window.location.port, window.location.pathname, "?", encodeURIComponent(JSON.stringify(data))].join("");
window.location.href = [window.location.protocol, "//", window.location.host, window.location.pathname, "?", encodeURIComponent(JSON.stringify(data))].join("");
}
else
{