mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-23 02:40:42 +00:00
Merge branch 'refs/heads/master' into fix-issue-2293
This commit is contained in:
@@ -111,6 +111,30 @@ CPCheckBoxImageOffset = 4.0;
|
||||
return startedTracking;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Override methods from CPButton
|
||||
|
||||
- (CGSize)_minimumFrameSize
|
||||
{
|
||||
var size = [super _minimumFrameSize],
|
||||
contentView = [self ephemeralSubviewNamed:@"content-view"];
|
||||
|
||||
if (!contentView && [[self title] length])
|
||||
{
|
||||
var minSize = [self currentValueForThemeAttribute:@"min-size"],
|
||||
maxSize = [self currentValueForThemeAttribute:@"max-size"];
|
||||
|
||||
// Here we always add the min size to the control which is the size of the view of the checkBox
|
||||
size.width += minSize.width + CPCheckBoxImageOffset;
|
||||
|
||||
if (maxSize.width >= 0.0)
|
||||
size.width = MIN(size.width, maxSize.width);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation _CPCheckBoxValueBinder : CPBinder
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
@import "CPImageView.j"
|
||||
@import "CALayer.j"
|
||||
|
||||
|
||||
@class _CPCibCustomResource
|
||||
@class CPDatePicker
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
|
||||
@class CPWebScriptObject
|
||||
|
||||
@typedef DataTransfer
|
||||
|
||||
CPGeneralPboard = @"CPGeneralPboard";
|
||||
CPFontPboard = @"CPFontPboard";
|
||||
CPRulerPboard = @"CPRulerPboard";
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
@import "CPImageView.j"
|
||||
@import "CPResponder.j"
|
||||
@import "CPView.j"
|
||||
@import "CPViewController.j"
|
||||
@import "_CPPopoverWindow.j"
|
||||
|
||||
@protocol CPPopoverDelegate <CPObject>
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
@import "CPControl.j"
|
||||
@import "CPWindow_Constants.j"
|
||||
@import "_CPImageAndTextView.j"
|
||||
@import "CPMenu.j"
|
||||
|
||||
@global CPApp
|
||||
|
||||
|
||||
+5
-2
@@ -22,6 +22,9 @@
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
|
||||
@import "CGGeometry.j"
|
||||
@import "CPColor.j"
|
||||
@import "CPGraphicsContext.j"
|
||||
|
||||
/*!
|
||||
@deprecated
|
||||
@@ -31,9 +34,9 @@
|
||||
*/
|
||||
@implementation CPShadow : CPObject
|
||||
{
|
||||
CGSize _offset @accessors(property=shadowOffset);
|
||||
CGSize _offset @accessors(property=shadowOffset);
|
||||
float _blurRadius @accessors(property=shadowBlurRadius);
|
||||
CPColor _color @accessors(property=shadowColor);
|
||||
CPColor _color @accessors(property=shadowColor);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
@import <Foundation/CPObject.j>
|
||||
@import <Foundation/CPRunLoop.j>
|
||||
|
||||
@typedef HTMLAudioElement
|
||||
|
||||
@protocol CPSoundDelegate <CPObject>
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
@class CPWebScriptObject
|
||||
|
||||
@typedef Window
|
||||
|
||||
// FIXME: implement these where possible:
|
||||
/*
|
||||
CPWebViewDidBeginEditingNotification = "CPWebViewDidBeginEditingNotification";
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
@import "CPCib.j"
|
||||
@import "CPResponder.j"
|
||||
@import "CPViewController.j"
|
||||
@import "CPWindow.j"
|
||||
|
||||
@class CPDocument
|
||||
|
||||
@@ -738,7 +738,7 @@ else if (CPFeatureIsCompatible(CPVMLFeature))
|
||||
else
|
||||
{
|
||||
// I have declared these functions here to make it compile without warnings with the new compiler under rhino.
|
||||
CGContextClearRect = CGContextDrawLinearGradient = CGContextClip = CGContextClipToRect = function() {throw new Error("function is not declared in this environment")}
|
||||
CGContextClearRect = CGContextDrawLinearGradient = CGContextClip = CGContextClipToRect = CGContextDrawImage = function() {throw new Error("function is not declared in this environment")}
|
||||
}
|
||||
/*!
|
||||
@endcond
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.4 KiB |
@@ -2279,6 +2279,8 @@ var themedButtonValues = nil,
|
||||
sliceLastBottomBorderColor = [CPColor colorWithWhite:0.6 alpha:1.0],
|
||||
buttonAddImage = PatternImage(@"rule-editor-button-add-image.png", 20.0, 20.0),
|
||||
buttonRemoveImage = PatternImage(@"rule-editor-button-remove-image.png", 20.0, 20.0),
|
||||
buttonAddHighlightedImage = PatternImage(@"rule-editor-button-add-highlighted-image.png", 20.0, 20.0),
|
||||
buttonRemoveHighlightedImage = PatternImage(@"rule-editor-button-remove-highlighted-image.png", 20.0, 20.0),
|
||||
fontColor = [CPColor colorWithWhite:150 / 255 alpha:1],
|
||||
|
||||
ruleEditorThemedValues =
|
||||
@@ -2292,9 +2294,9 @@ var themedButtonValues = nil,
|
||||
[@"font", [CPFont systemFontOfSize:10.0]],
|
||||
[@"font-color", fontColor],
|
||||
[@"add-image", buttonAddImage, CPThemeStateNormal],
|
||||
[@"add-image", buttonAddImage, CPThemeStateHighlighted],
|
||||
[@"add-image", buttonAddHighlightedImage, CPThemeStateHighlighted],
|
||||
[@"remove-image", buttonRemoveImage, CPThemeStateNormal],
|
||||
[@"remove-image", buttonRemoveImage, CPThemeStateHighlighted],
|
||||
[@"remove-image", buttonRemoveHighlightedImage, CPThemeStateHighlighted],
|
||||
[@"vertical-alignment", CPCenterVerticalTextAlignment],
|
||||
];
|
||||
|
||||
|
||||
@@ -137,22 +137,27 @@ var BKLearnMoreToolbarItemIdentifier = @"BKLearnMoreToolbarItemId
|
||||
|
||||
[theWindow setFullPlatformWindow:YES];
|
||||
[theWindow makeKeyAndOrderFront:self];
|
||||
|
||||
[_themesCollectionView addObserver:self forKeyPath:@"selectionIndexes" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionInitial context:nil];
|
||||
}
|
||||
|
||||
- (void)collectionViewDidChangeSelection:(CPCollectionView)aCollectionView
|
||||
- (void)observeValueForKeyPath:(CPString)keyPath ofObject:(id)object change:(CPDictionary)change context:(void)context
|
||||
{
|
||||
var themeDescriptorClass = _themeDescriptorClasses[[[aCollectionView selectionIndexes] firstIndex]],
|
||||
itemSize = [themeDescriptorClass itemSize];
|
||||
if (object == _themesCollectionView && keyPath == @"selectionIndexes")
|
||||
{
|
||||
var themeDescriptorClass = _themeDescriptorClasses[[[object selectionIndexes] firstIndex]],
|
||||
itemSize = [themeDescriptorClass itemSize];
|
||||
|
||||
// Make room for label and apply a minimum size.
|
||||
itemSize.width = MAX(100.0, itemSize.width + 20.0);
|
||||
itemSize.height = MAX(100.0, itemSize.height + 30.0);
|
||||
// Make room for label and apply a minimum size.
|
||||
itemSize.width = MAX(100.0, itemSize.width + 20.0);
|
||||
itemSize.height = MAX(100.0, itemSize.height + 30.0);
|
||||
|
||||
[_themedObjectsCollectionView setMinItemSize:itemSize];
|
||||
[_themedObjectsCollectionView setMaxItemSize:itemSize];
|
||||
[_themedObjectsCollectionView setMinItemSize:itemSize];
|
||||
[_themedObjectsCollectionView setMaxItemSize:itemSize];
|
||||
|
||||
[_themedObjectsCollectionView setContent:[themeDescriptorClass themedShowcaseObjectTemplates]];
|
||||
[BKShowcaseCell setBackgroundColor:[themeDescriptorClass showcaseBackgroundColor]];
|
||||
[_themedObjectsCollectionView setContent:[themeDescriptorClass themedShowcaseObjectTemplates]];
|
||||
[BKShowcaseCell setBackgroundColor:[themeDescriptorClass showcaseBackgroundColor]];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)hasLearnMoreURL
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
@import "CPObject.j"
|
||||
@import "CPArray.j"
|
||||
|
||||
/*!
|
||||
@class CPInvocation
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPDictionary.j"
|
||||
|
||||
/*!
|
||||
@class CPNotification
|
||||
|
||||
@@ -76,13 +76,12 @@ var CPURLConnectionDelegate = nil;
|
||||
*/
|
||||
@implementation CPURLConnection : CPObject
|
||||
{
|
||||
CPURLRequest _request;
|
||||
CPURLRequest _originalRequest @accessors(readonly, getter=originalRequest);
|
||||
CPURLRequest _request @accessors(readonly, getter=currentRequest);
|
||||
id _delegate;
|
||||
BOOL _isCanceled;
|
||||
BOOL _isLocalFileConnection;
|
||||
|
||||
BOOL _withCredentials @accessors(property=withCredentials);
|
||||
|
||||
HTTPRequest _HTTPRequest;
|
||||
}
|
||||
|
||||
@@ -99,25 +98,12 @@ var CPURLConnectionDelegate = nil;
|
||||
@return the data at the URL or \c nil if there was an error
|
||||
*/
|
||||
+ (CPData)sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse
|
||||
{
|
||||
var cfHTTPRequest = new CFHTTPRequest();
|
||||
|
||||
return [CPURLConnection _sendSynchronousRequest:aRequest returningResponse:aURLResponse withCFHTTPRequest:cfHTTPRequest];
|
||||
}
|
||||
|
||||
+ (CPData)sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse withCredentials:(BOOL)withCredentials
|
||||
{
|
||||
var cfHTTPRequest = new CFHTTPRequest();
|
||||
|
||||
cfHTTPRequest.setWithCredentials(withCredentials);
|
||||
|
||||
return [CPURLConnection _sendSynchronousRequest:aRequest returningResponse:aURLResponse withCFHTTPRequest:cfHTTPRequest];
|
||||
}
|
||||
|
||||
+ (CPData)_sendSynchronousRequest:(CPURLRequest)aRequest returningResponse:(/*{*/CPURLResponse/*}*/)aURLResponse withCFHTTPRequest:(CFHTTPRequest)aCFHTTPRequest
|
||||
{
|
||||
try
|
||||
{
|
||||
var aCFHTTPRequest = new CFHTTPRequest();
|
||||
aCFHTTPRequest.setWithCredentials([aRequest withCredentials]);
|
||||
|
||||
aCFHTTPRequest.open([aRequest HTTPMethod], [[aRequest URL] absoluteString], NO);
|
||||
|
||||
var fields = [aRequest allHTTPHeaderFields],
|
||||
@@ -152,17 +138,6 @@ var CPURLConnectionDelegate = nil;
|
||||
return [[self alloc] initWithRequest:aRequest delegate:aDelegate];
|
||||
}
|
||||
|
||||
//overloaded method that allows user to set _withCredentials
|
||||
+ (CPURLConnection)connectionWithRequest:(CPURLRequest)aRequest delegate:(id)aDelegate withCredentials:(BOOL)withCredentials
|
||||
{
|
||||
var connection = [[self alloc] initWithRequest:aRequest delegate:aDelegate startImmediately:NO];
|
||||
|
||||
[connection setWithCredentials:withCredentials];
|
||||
[connection start];
|
||||
|
||||
return connection;
|
||||
}
|
||||
|
||||
/*
|
||||
Default class initializer. Use one of the class methods instead.
|
||||
@param aRequest contains the URL to contact
|
||||
@@ -177,9 +152,9 @@ var CPURLConnectionDelegate = nil;
|
||||
if (self)
|
||||
{
|
||||
_request = aRequest;
|
||||
_originalRequest = [aRequest copy];
|
||||
_delegate = aDelegate;
|
||||
_isCanceled = NO;
|
||||
_withCredentials = NO;
|
||||
|
||||
var URL = [_request URL],
|
||||
scheme = [URL scheme];
|
||||
@@ -191,6 +166,7 @@ var CPURLConnectionDelegate = nil;
|
||||
(window.location.protocol === "file:" || window.location.protocol === "app:"));
|
||||
|
||||
_HTTPRequest = new CFHTTPRequest();
|
||||
_HTTPRequest.setWithCredentials([aRequest withCredentials]);
|
||||
|
||||
if (shouldStartImmediately)
|
||||
[self start];
|
||||
@@ -219,8 +195,6 @@ var CPURLConnectionDelegate = nil;
|
||||
{
|
||||
_isCanceled = NO;
|
||||
|
||||
_HTTPRequest.setWithCredentials(_withCredentials);
|
||||
|
||||
try
|
||||
{
|
||||
_HTTPRequest.open([_request HTTPMethod], [[_request URL] absoluteString], YES);
|
||||
|
||||
+27
-54
@@ -35,12 +35,14 @@
|
||||
*/
|
||||
@implementation CPURLRequest : CPObject
|
||||
{
|
||||
CPURL _URL;
|
||||
CPURL _URL @accessors(property=URL);
|
||||
|
||||
// FIXME: this should be CPData
|
||||
CPString _HTTPBody;
|
||||
CPString _HTTPMethod;
|
||||
CPDictionary _HTTPHeaderFields;
|
||||
CPString _HTTPBody @accessors(property=HTTPBody);
|
||||
CPString _HTTPMethod @accessors(property=HTTPMethod);
|
||||
BOOL _withCredentials @accessors(property=withCredentials);
|
||||
|
||||
CPDictionary _HTTPHeaderFields @accessors(readonly, getter=allHTTPHeaderFields);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -78,6 +80,7 @@
|
||||
_HTTPBody = @"";
|
||||
_HTTPMethod = @"GET";
|
||||
_HTTPHeaderFields = @{};
|
||||
_withCredentials = NO;
|
||||
|
||||
[self setValue:"Thu, 01 Jan 1970 00:00:00 GMT" forHTTPHeaderField:"If-Modified-Since"];
|
||||
[self setValue:"no-cache" forHTTPHeaderField:"Cache-Control"];
|
||||
@@ -87,14 +90,6 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the request URL
|
||||
*/
|
||||
- (CPURL)URL
|
||||
{
|
||||
return _URL;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the URL for this request.
|
||||
@param aURL the new URL
|
||||
@@ -105,48 +100,6 @@
|
||||
_URL = new CFURL(aURL);
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the HTTP body for this request
|
||||
@param anHTTPBody the new HTTP body
|
||||
*/
|
||||
- (void)setHTTPBody:(CPString)anHTTPBody
|
||||
{
|
||||
_HTTPBody = anHTTPBody;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the request's http body.
|
||||
*/
|
||||
- (CPString)HTTPBody
|
||||
{
|
||||
return _HTTPBody;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the request's http method.
|
||||
@param anHTPPMethod the new http method
|
||||
*/
|
||||
- (void)setHTTPMethod:(CPString)anHTTPMethod
|
||||
{
|
||||
_HTTPMethod = anHTTPMethod;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the request's http method
|
||||
*/
|
||||
- (CPString)HTTPMethod
|
||||
{
|
||||
return _HTTPMethod;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns a dictionary of the http header fields
|
||||
*/
|
||||
- (CPDictionary)allHTTPHeaderFields
|
||||
{
|
||||
return _HTTPHeaderFields;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the value for the specified header field.
|
||||
@param aField the header field to obtain a value for
|
||||
@@ -167,3 +120,23 @@
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
/*
|
||||
Implements the CPCopying Protocol for a CPURLRequest to provide deep copying for CPURLRequests
|
||||
*/
|
||||
@implementation CPURLRequest (CPCopying)
|
||||
{
|
||||
}
|
||||
|
||||
- (id)copy
|
||||
{
|
||||
var request = [[CPURLRequest alloc] initWithURL:[self URL]];
|
||||
[request setHTTPBody:[self HTTPBody]];
|
||||
[request setHTTPMethod:[self HTTPMethod]];
|
||||
[request setWithCredentials:[self withCredentials]];
|
||||
request._HTTPHeaderFields = [self allHTTPHeaderFields];
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -111,6 +111,15 @@ task ("documentation-no-frame", function()
|
||||
generateDocs(true);
|
||||
});
|
||||
|
||||
task ("docset", function()
|
||||
{
|
||||
generateDocs(true);
|
||||
var documentationDir = FILE.canonical(FILE.join("Tools", "Documentation")),
|
||||
docsetShell = FILE.join(documentationDir, "support", "docset.sh");
|
||||
|
||||
OS.system([docsetShell, documentationDir]);
|
||||
});
|
||||
|
||||
function generateDocs(/* boolean */ noFrame)
|
||||
{
|
||||
// try to find a doxygen executable in the PATH;
|
||||
|
||||
@@ -103,6 +103,9 @@ GLOBAL(CFHTTPRequest) = function()
|
||||
this._eventDispatcher = new EventDispatcher(this);
|
||||
this._nativeRequest = new NativeRequest();
|
||||
|
||||
// by default, all requests will assume that credentials should not be sent.
|
||||
this._nativeRequest.withCredentials = false;
|
||||
|
||||
var self = this;
|
||||
this._stateChangeHandler = function()
|
||||
{
|
||||
@@ -279,7 +282,7 @@ CFHTTPRequest.prototype.setWithCredentials = function(/*Boolean*/ willSendWithCr
|
||||
this._nativeRequest.withCredentials = willSendWithCredentials;
|
||||
};
|
||||
|
||||
CFHTTPRequest.prototype.getWithCredentials = function()
|
||||
CFHTTPRequest.prototype.withCredentials = function()
|
||||
{
|
||||
return this._nativeRequest.withCredentials;
|
||||
};
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
@import <OJUnit/OJTestCase.j>
|
||||
|
||||
@implementation CPURLConnectionTest : OJTestCase
|
||||
{
|
||||
@@ -36,10 +37,40 @@
|
||||
[self assertNull:data];
|
||||
}
|
||||
|
||||
- (void)testRequestWithCredentials
|
||||
- (void)testClassMethodConnectionWithCredentials
|
||||
{
|
||||
var connection = [CPURLConnection connectionWithRequest:[CPURLRequest requestWithURL:@"Tests/Foundation/CPURLConnectionTest.j"] delegate:self withCredentials:YES];
|
||||
[self assertTrue:[connection withCredentials]];
|
||||
var req = [CPURLRequest requestWithURL:[CPURL URLWithString:@"Tests/Foundation/CPURLConnectionTest.j"]];
|
||||
[req setWithCredentials:YES];
|
||||
var data = [CPURLConnection sendSynchronousRequest:req returningResponse:nil];
|
||||
|
||||
[self assertNotNull:data];
|
||||
}
|
||||
|
||||
- (void)testInstanceMethodConnectionWithCredentials
|
||||
{
|
||||
var req = [CPURLRequest requestWithURL:[CPURL URLWithString:@"Tests/Foundation/CPURLConnectionTest.j"]];
|
||||
[req setWithCredentials:YES];
|
||||
|
||||
var conn = [[CPURLConnection alloc] initWithRequest:req delegate:nil startImmediately:NO];
|
||||
|
||||
[self assertTrue:conn._HTTPRequest.withCredentials];
|
||||
|
||||
[req setWithCredentials:NO];
|
||||
[self assertTrue:conn._HTTPRequest.withCredentials];
|
||||
}
|
||||
|
||||
- (void)testRequestGetters
|
||||
{
|
||||
var req = [CPURLRequest requestWithURL:[CPURL URLWithString:@"Tests/Foundation/CPURLConnectionTest.j"]],
|
||||
conn = [[CPURLConnection alloc] initWithRequest:req delegate:nil startImmediately:NO];
|
||||
|
||||
var originalRequest = [conn originalRequest],
|
||||
currentRequest = [conn currentRequest];
|
||||
|
||||
[self assert:originalRequest._UID notEqual:currentRequest._UID];
|
||||
|
||||
[[conn currentRequest] setWithCredentials:YES];
|
||||
[self assert:[originalRequest withCredentials] notEqual:[currentRequest withCredentials]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
@import <OJUnit/OJTestCase.j>
|
||||
|
||||
|
||||
var exampleURL = "http://www.cappuccino-project.org";
|
||||
|
||||
@implementation CPURLRequestTest : OJTestCase
|
||||
{
|
||||
}
|
||||
|
||||
- (void)testClassMethods
|
||||
{
|
||||
var url = [CPURL URLWithString:exampleURL],
|
||||
req = [CPURLRequest requestWithURL:url];
|
||||
|
||||
[self assert:[req HTTPMethod] equals:@"GET"];
|
||||
[self assert:[req URL] equals:url];
|
||||
}
|
||||
|
||||
- (void)testWithCredentials
|
||||
{
|
||||
var url = [CPURL URLWithString:exampleURL],
|
||||
req = [CPURLRequest requestWithURL:url];
|
||||
|
||||
[self assertFalse:[req withCredentials]];
|
||||
|
||||
[req setWithCredentials:YES];
|
||||
[self assertTrue:[req withCredentials]];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* AppController.j
|
||||
* CrossOriginTest
|
||||
*
|
||||
* Created by You on December 5, 2014.
|
||||
* Copyright 2014, Your Company All rights reserved.
|
||||
*/
|
||||
|
||||
@import <Foundation/Foundation.j>
|
||||
@import <AppKit/AppKit.j>
|
||||
|
||||
var corsServer = "http://localhost:8001";
|
||||
|
||||
@implementation AppController : CPObject
|
||||
{
|
||||
@outlet CPWindow theWindow;
|
||||
@outlet CPButton theButton;
|
||||
@outlet CPButton setsWithCredentials;
|
||||
}
|
||||
|
||||
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
|
||||
{
|
||||
}
|
||||
|
||||
- (void)awakeFromCib
|
||||
{
|
||||
// This is called when the cib is done loading.
|
||||
// You can implement this method on any object instantiated from a Cib.
|
||||
// It's a useful hook for setting up current UI values, and other things.
|
||||
|
||||
// In this case, we want the window from Cib to become our full browser window
|
||||
[theWindow setFullPlatformWindow:YES];
|
||||
}
|
||||
|
||||
-(void)connection:(CPURLConnection)connection didReceiveResponse:(CPHTTPURLResponse)response
|
||||
{
|
||||
console.log("Response received");
|
||||
}
|
||||
|
||||
-(void)connection:(CPURLConnection)connection didReceiveData:(CPString)data
|
||||
{
|
||||
var wc = ([[connection originalRequest] withCredentials]) ? "YES" : "NO"
|
||||
console.log("CPURLConnection was sent with credentials? " + wc + " Response: " + data);
|
||||
}
|
||||
|
||||
- (@action)stateOfWithCredentials:(id)aSender
|
||||
{
|
||||
console.log([setsWithCredentials state]);
|
||||
}
|
||||
|
||||
- (@action)testCappuccinoRequest:(id)aSender
|
||||
{
|
||||
var req = [CPURLRequest requestWithURL:[CPURL URLWithString:corsServer + @"/resp.json"]];
|
||||
[req setValue:@"no-cache" forHTTPHeaderField:@"Pragma"];
|
||||
[req setValue:@"no-store, no-cache, must-revalidate, post-check=0, pre-check=0" forHTTPHeaderField:@"Cache-Control"];
|
||||
[req setWithCredentials:[setsWithCredentials state]];
|
||||
[[CPURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];
|
||||
}
|
||||
|
||||
- (@action)testNativeRequest:(id)aSender
|
||||
{
|
||||
var wc = ([setsWithCredentials state]) ? true : false;
|
||||
var req = new XMLHttpRequest();
|
||||
function reqListener ()
|
||||
{
|
||||
console.log("Native XHR was sent with credentials? " + wc + " Response: " + this.responseText);
|
||||
}
|
||||
|
||||
req.onload = reqListener;
|
||||
req.withCredentials = wc;
|
||||
req.open("GET", corsServer + "/resp.json", true);
|
||||
req.setRequestHeader("Pragma", "no-cache");
|
||||
req.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
|
||||
|
||||
req.send();
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Main cib file base name</key>
|
||||
<string>MainMenu.cib</string>
|
||||
<key>CPBundleName</key>
|
||||
<string>CrossOriginTest</string>
|
||||
<key>CPBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>CPHumanReadableCopyright</key>
|
||||
<string>Copyright © 2014, Your Company All rights reserved.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Jakefile
|
||||
* CrossOriginTest
|
||||
*
|
||||
* Created by You on December 9, 2014.
|
||||
* Copyright 2014, Your Company All rights reserved.
|
||||
*/
|
||||
|
||||
var ENV = require("system").env,
|
||||
FILE = require("file"),
|
||||
JAKE = require("jake"),
|
||||
task = JAKE.task,
|
||||
FileList = JAKE.FileList,
|
||||
app = require("cappuccino/jake").app,
|
||||
configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug",
|
||||
OS = require("os"),
|
||||
projectName = "CrossOriginTest";
|
||||
|
||||
app (projectName, function(task)
|
||||
{
|
||||
ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks";
|
||||
|
||||
if (configuration === "Debug")
|
||||
ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration);
|
||||
|
||||
task.setBuildIntermediatesPath(FILE.join("Build", "CrossOriginTest.build", configuration));
|
||||
task.setBuildPath(FILE.join("Build", configuration));
|
||||
|
||||
task.setProductName("CrossOriginTest");
|
||||
task.setIdentifier("com.yourcompany.CrossOriginTest");
|
||||
task.setVersion("1.0");
|
||||
task.setAuthor("Your Company");
|
||||
task.setEmail("feedback @nospam@ yourcompany.com");
|
||||
task.setSummary("CrossOriginTest");
|
||||
task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**")));
|
||||
task.setResources(new FileList("Resources/**"));
|
||||
task.setIndexFilePath("index.html");
|
||||
task.setInfoPlistPath("Info.plist");
|
||||
|
||||
if (configuration === "Debug")
|
||||
task.setCompilerFlags("-DDEBUG -g");
|
||||
else
|
||||
task.setCompilerFlags("-O");
|
||||
});
|
||||
|
||||
task ("default", [projectName], function()
|
||||
{
|
||||
printResults(configuration);
|
||||
});
|
||||
|
||||
task ("build", ["default"], function()
|
||||
{
|
||||
updateApplicationSize();
|
||||
});
|
||||
|
||||
task ("debug", function()
|
||||
{
|
||||
configuration = ENV["CONFIGURATION"] = "Debug";
|
||||
JAKE.subjake(["."], "build", ENV);
|
||||
});
|
||||
|
||||
task ("release", function()
|
||||
{
|
||||
configuration = ENV["CONFIGURATION"] = "Release";
|
||||
JAKE.subjake(["."], "build", ENV);
|
||||
});
|
||||
|
||||
task ("run", ["debug"], function()
|
||||
{
|
||||
OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]);
|
||||
});
|
||||
|
||||
task ("run-release", ["release"], function()
|
||||
{
|
||||
OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]);
|
||||
});
|
||||
|
||||
task ("deploy", ["release"], function()
|
||||
{
|
||||
FILE.mkdirs(FILE.join("Build", "Deployment", projectName));
|
||||
OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]);
|
||||
printResults("Deployment")
|
||||
});
|
||||
|
||||
task ("desktop", ["release"], function()
|
||||
{
|
||||
FILE.mkdirs(FILE.join("Build", "Desktop", projectName));
|
||||
require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CrossOriginTest.app"));
|
||||
printResults("Desktop")
|
||||
});
|
||||
|
||||
task ("run-desktop", ["desktop"], function()
|
||||
{
|
||||
OS.system([FILE.join("Build", "Desktop", projectName, "CrossOriginTest.app", "Contents", "MacOS", "NativeHost"), "-i"]);
|
||||
});
|
||||
|
||||
function printResults(configuration)
|
||||
{
|
||||
print("----------------------------");
|
||||
print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName));
|
||||
print("----------------------------");
|
||||
}
|
||||
|
||||
function updateApplicationSize()
|
||||
{
|
||||
print("Calculating application file sizes...");
|
||||
|
||||
var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }),
|
||||
format = CFPropertyList.sniffedFormatOfString(contents),
|
||||
plist = CFPropertyList.propertyListFromString(contents),
|
||||
totalBytes = {executable:0, data:0, mhtml:0};
|
||||
|
||||
// Get the size of all framework executables and sprite data
|
||||
var frameworksDir = "Frameworks";
|
||||
|
||||
if (configuration === "Debug")
|
||||
frameworksDir = FILE.join(frameworksDir, "Debug");
|
||||
|
||||
var frameworks = FILE.list(frameworksDir);
|
||||
|
||||
frameworks.forEach(function(framework)
|
||||
{
|
||||
if (framework !== "Source")
|
||||
addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes);
|
||||
});
|
||||
|
||||
// Read in the default theme name, and attempt to get its size
|
||||
var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2",
|
||||
themePath = nil;
|
||||
|
||||
if (themeName === "Aristo" || themeName === "Aristo2")
|
||||
themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend");
|
||||
else
|
||||
themePath = FILE.join("Frameworks", "Resources", themeName + ".blend");
|
||||
|
||||
if (FILE.isDirectory(themePath))
|
||||
addBundleFileSizes(themePath, totalBytes);
|
||||
|
||||
// Add sizes for the app
|
||||
addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes);
|
||||
|
||||
print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data));
|
||||
|
||||
var dict = new CFMutableDictionary();
|
||||
|
||||
dict.setValueForKey("executable", totalBytes.executable);
|
||||
dict.setValueForKey("data", totalBytes.data);
|
||||
dict.setValueForKey("mhtml", totalBytes.mhtml);
|
||||
|
||||
plist.setValueForKey("CPApplicationSize", dict);
|
||||
|
||||
FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" });
|
||||
}
|
||||
|
||||
function addBundleFileSizes(bundlePath, totalBytes)
|
||||
{
|
||||
var bundleName = FILE.basename(bundlePath),
|
||||
environment = bundleName === "Foundation" ? "Objj" : "Browser",
|
||||
bundlePath = FILE.join(bundlePath, environment + ".environment");
|
||||
|
||||
if (FILE.isDirectory(bundlePath))
|
||||
{
|
||||
var filename = bundleName + ".sj",
|
||||
filePath = new FILE.Path(FILE.join(bundlePath, filename));
|
||||
|
||||
if (filePath.exists())
|
||||
totalBytes.executable += filePath.size();
|
||||
|
||||
filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt"));
|
||||
|
||||
if (filePath.exists())
|
||||
totalBytes.data += filePath.size();
|
||||
|
||||
filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt"));
|
||||
|
||||
if (filePath.exists())
|
||||
totalBytes.mhtml += filePath.size();
|
||||
|
||||
filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt"));
|
||||
|
||||
if (filePath.exists())
|
||||
totalBytes.mhtml += filePath.size();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
This test checks the withCredentials CORS functionality with Cappuccino.
|
||||
|
||||
Running the test:
|
||||
|
||||
You will need to start two HTTP Servers; one on localhost:8000, and one on localhost:8001.
|
||||
|
||||
The first:
|
||||
|
||||
`$> python -m SimpleHTTPServer` // starts it on 8000
|
||||
|
||||
In another terminal window:
|
||||
|
||||
`$> python cors-server.py` // starts another on 8001
|
||||
|
||||
Visit http://localhost:8000 in your web browser. There are two buttons and a checkbox.
|
||||
|
||||
One button will issue a native XMLHTTPRequest. The other will issue a CPURLConnection request. The checkbox will control whether the withCredentials option is set on both types of requests.
|
||||
|
||||
With the checkbox checked, you should press either of the buttons. In the terminal with the 'cors-server.py' script running you will see output that should match the following:
|
||||
|
||||
```
|
||||
INFO:root:CORS: With Credentials
|
||||
127.0.0.1 - - [05/Dec/2014 18:44:48] "GET /resp.json HTTP/1.1" 200 -
|
||||
```
|
||||
|
||||
If you uncheck the checkbox, you should see the following:
|
||||
|
||||
```
|
||||
INFO:root:CORS: No Credentials
|
||||
127.0.0.1 - - [05/Dec/2014 18:44:56] "GET /resp.json HTTP/1.1" 200 -
|
||||
```
|
||||
|
||||
This error message is controlled by the presence of the 'Cookies' header.
|
||||
|
||||
NOTE: The cors-server.py will set a cookie for you (mycookie=cappuccino!), but only after the first request. If you don't have a cookie set for localhost, the server message will show 'No Credentials' on the first request since the Cookie header is not set. Subsequent requests will behave correctly.
|
||||
|
||||
The browser console will also provide some status information about the request and response.
|
||||
|
||||
# A note about IE<sup>**</sup>
|
||||
|
||||
As best I can tell, IE behaves differently than all other browsers. I have tested this in Chrome and Firefox on Mac & Windows, Safari on Mac, IE11 on Windows. In this test, unchecking the 'With Credentials' will tell the browser to not send a cookie to the server if the server and client are not on the same host. However, in IE, it will pass the cookie along if the server and host are on the same top domain, but not necessarily the same host. The corollary of this is that if the two servers are on different domains, the `withCredentials` setting in IE does absolutely nothing.
|
||||
|
||||
To get it to work, you must instruct your users to adjust their cookie privacy settings and allow third-party cookies. This seemed to work for me, but dynamically adjusting the `withCredentials` parameter did nothing with this on -- IE always sent the cookies if it was configured to do so.
|
||||
|
||||
<sup>*</sup> What, you expected IE to actually work like the rest of the world?
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,44 @@
|
||||
import SimpleHTTPServer
|
||||
import SocketServer
|
||||
import logging
|
||||
import cgi
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
PORT = 8001
|
||||
|
||||
class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
||||
|
||||
def end_headers (self):
|
||||
self.send_header('Set-Cookie', 'mycookie=cappuccino!')
|
||||
self.send_header('Access-Control-Allow-Origin', 'http://142.157.142.237:8000')
|
||||
self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
|
||||
self.send_header("Access-Control-Allow-Headers", "X-Requested-With, If-Modified-Since, Cache-Control, Pragma")
|
||||
self.send_header('Access-Control-Allow-Credentials', 'true')
|
||||
SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)
|
||||
|
||||
def do_OPTIONS(self):
|
||||
logging.info("OPTIONS Request")
|
||||
self.send_response(204, "No Content")
|
||||
self.send_header('Access-Control-Allow-Origin', 'http://142.157.142.237:8000')
|
||||
self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
|
||||
self.send_header("Access-Control-Allow-Headers", "X-Requested-With, If-Modified-Since, Cache-Control, Pragma")
|
||||
self.send_header('Access-Control-Allow-Credentials', 'true')
|
||||
self.send_header("Access-Control-Max-Age", 10)
|
||||
self.send_header("content-length", 0)
|
||||
|
||||
def do_GET(self):
|
||||
try:
|
||||
self.headers['Cookie']
|
||||
logging.info("CORS: With Credentials")
|
||||
logging.info(self.headers['Cookie'])
|
||||
except KeyError, e:
|
||||
logging.info("CORS: No Credentials")
|
||||
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
||||
|
||||
Handler = ServerHandler
|
||||
|
||||
SocketServer.TCPServer.allow_reuse_address = True
|
||||
httpd = SocketServer.TCPServer(("0.0.0.0", PORT), Handler)
|
||||
|
||||
print "serving at port", PORT
|
||||
httpd.serve_forever()
|
||||
@@ -0,0 +1,191 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<!--
|
||||
index-debug.html
|
||||
CrossOriginTest
|
||||
|
||||
Created by You on December 5, 2014.
|
||||
Copyright 2014, Your Company All rights reserved.
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!--[if lte IE 8]>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, chrome=1">
|
||||
<![endif]-->
|
||||
<!--[if gte IE 9]>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
|
||||
<![endif]-->
|
||||
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
|
||||
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
|
||||
<link rel="apple-touch-icon" href="Resources/icon.png">
|
||||
<link rel="apple-touch-startup-image" href="Resources/default.png">
|
||||
|
||||
<title>TestIEWithCredentials</title>
|
||||
|
||||
<!-- Custom javascript goes here -->
|
||||
<!-- End custom javascript -->
|
||||
|
||||
<script type="text/javascript">
|
||||
OBJJ_MAIN_FILE = "main.j";
|
||||
OBJJ_INCLUDE_PATHS = ["Frameworks/Debug", "Frameworks"];
|
||||
|
||||
var progressBar = null;
|
||||
|
||||
OBJJ_PROGRESS_CALLBACK = function(percent, appSize, path)
|
||||
{
|
||||
percent = percent * 100;
|
||||
|
||||
if (!progressBar)
|
||||
progressBar = document.getElementById("progress-bar");
|
||||
|
||||
if (progressBar)
|
||||
progressBar.style.width = Math.min(percent, 100) + "%";
|
||||
}
|
||||
|
||||
var loadingHTML =
|
||||
'<div id="loading">' +
|
||||
' <div id="loading-text">Loading...</div>' +
|
||||
' <div id="progress-indicator">' +
|
||||
' <span id="progress-bar" style="width:0%"></span>' +
|
||||
' </div>' +
|
||||
'</div>';
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="Frameworks/Debug/Objective-J/Objective-J.js" charset="UTF-8"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
objj_msgSend_reset();
|
||||
|
||||
// DEBUG OPTIONS:
|
||||
|
||||
// Uncomment to enable printing of backtraces on exceptions:
|
||||
//objj_msgSend_decorate(objj_backtrace_decorator);
|
||||
|
||||
// Uncomment to supress exceptions that take place inside a message
|
||||
//objj_msgSend_decorate(objj_supress_exceptions_decorator)
|
||||
|
||||
// Uncomment to enable runtime type checking:
|
||||
//objj_msgSend_decorate(objj_typecheck_decorator);
|
||||
|
||||
// Uncomment (along with both above) to print backtraces on type check errors:
|
||||
//objj_typecheck_prints_backtrace = true;
|
||||
|
||||
// Uncomment to disable the default logger (CPLogConsole if window.console exists, CPLogPopup otherwise):
|
||||
//CPLogUnregister(CPLogDefault);
|
||||
|
||||
// Uncomment to enable a specific logger:
|
||||
//CPLogRegister(CPLogConsole);
|
||||
//CPLogRegister(CPLogPopup);
|
||||
|
||||
// Tag view DOM elements with a "data-cappuccino-view" attribute that contains
|
||||
// the class name of the view that created them. Comment this or set to false to disable.
|
||||
appkit_tag_dom_elements = true;
|
||||
</script>
|
||||
|
||||
<style type="text/css">
|
||||
html, body, h1, p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* We need a body wrapper because Cappuccino is unhappy if we change the body element */
|
||||
#cappuccino-body {
|
||||
/* Position it absolutely so it will fill the height without content */
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
|
||||
/* Put it at the bottom of the stack so it doesn't interfere with UI */
|
||||
z-index: -1000;
|
||||
}
|
||||
|
||||
#cappuccino-body .container {
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#cappuccino-body .content {
|
||||
display: table-cell;
|
||||
height: 100%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#loading {
|
||||
position: relative;
|
||||
top: 35%;
|
||||
}
|
||||
|
||||
#loading-text {
|
||||
height: 1.5em;
|
||||
color: #555;
|
||||
font: normal bold 36px/36px Arial, sans-serif;
|
||||
}
|
||||
|
||||
#progress-indicator {
|
||||
padding: 0px;
|
||||
height: 16px;
|
||||
border: 5px solid #555;
|
||||
border-radius: 18px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
#progress-bar {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
left: -1px;
|
||||
display: block;
|
||||
height: 18px;
|
||||
|
||||
/* Compensate for moving the bar left 1px to overlap the indicator border */
|
||||
border-right: 1px solid #555;
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
#noscript {
|
||||
position: relative;
|
||||
top: 35%;
|
||||
padding: 1em 1.5em;
|
||||
border: 5px solid #555;
|
||||
border-radius: 16px;
|
||||
background-color: white;
|
||||
color: #555;
|
||||
text-align: center;
|
||||
font: bold 24px Arial, sans-serif;
|
||||
}
|
||||
|
||||
#noscript a {
|
||||
color: #98c0ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="cappuccino-body">
|
||||
<div class="container">
|
||||
<div class="content">
|
||||
<script type="text/javascript">
|
||||
document.write(loadingHTML);
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<noscript style="position:absolute; top:0; left:0; width:100%; height:100%">
|
||||
<div class="container">
|
||||
<div class="content">
|
||||
<div id="noscript">
|
||||
<p style="font-size:120%; margin-bottom:.75em">JavaScript is required for this site.</p>
|
||||
<p><a href="http://www.enable-javascript.com" target="_blank">Enable JavaScript</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</noscript>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,161 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<!--
|
||||
index.html
|
||||
CrossOriginTest
|
||||
|
||||
Created by You on December 5, 2014.
|
||||
Copyright 2014, Your Company All rights reserved.
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!--[if lte IE 8]>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, chrome=1">
|
||||
<![endif]-->
|
||||
<!--[if gte IE 9]>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
|
||||
<![endif]-->
|
||||
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
|
||||
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
|
||||
<link rel="apple-touch-icon" href="Resources/icon.png">
|
||||
<link rel="apple-touch-startup-image" href="Resources/default.png">
|
||||
|
||||
<title>CrossOriginTest</title>
|
||||
|
||||
<!-- Custom javascript goes here -->
|
||||
<!-- End custom javascript -->
|
||||
|
||||
<script type="text/javascript">
|
||||
OBJJ_MAIN_FILE = "main.j";
|
||||
|
||||
var progressBar = null;
|
||||
|
||||
OBJJ_PROGRESS_CALLBACK = function(percent, appSize, path)
|
||||
{
|
||||
percent = percent * 100;
|
||||
|
||||
if (!progressBar)
|
||||
progressBar = document.getElementById("progress-bar");
|
||||
|
||||
if (progressBar)
|
||||
progressBar.style.width = Math.min(percent, 100) + "%";
|
||||
}
|
||||
|
||||
var loadingHTML =
|
||||
'<div id="loading">' +
|
||||
' <div id="loading-text">Loading...</div>' +
|
||||
' <div id="progress-indicator">' +
|
||||
' <span id="progress-bar" style="width:0%"></span>' +
|
||||
' </div>' +
|
||||
'</div>';
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="Frameworks/Objective-J/Objective-J.js" charset="UTF-8"></script>
|
||||
|
||||
<style type="text/css">
|
||||
html, body, h1, p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* We need a body wrapper because Cappuccino is unhappy if we change the body element */
|
||||
#cappuccino-body {
|
||||
/* Position it absolutely so it will fill the height without content */
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
|
||||
/* Put it at the bottom of the stack so it doesn't interfere with UI */
|
||||
z-index: -1000;
|
||||
}
|
||||
|
||||
#cappuccino-body .container {
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#cappuccino-body .content {
|
||||
display: table-cell;
|
||||
height: 100%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#loading {
|
||||
position: relative;
|
||||
top: 35%;
|
||||
}
|
||||
|
||||
#loading-text {
|
||||
height: 1.5em;
|
||||
color: #555;
|
||||
font: normal bold 36px/36px Arial, sans-serif;
|
||||
}
|
||||
|
||||
#progress-indicator {
|
||||
padding: 0px;
|
||||
height: 16px;
|
||||
border: 5px solid #555;
|
||||
border-radius: 18px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
#progress-bar {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
left: -1px;
|
||||
display: block;
|
||||
height: 18px;
|
||||
|
||||
/* Compensate for moving the bar left 1px to overlap the indicator border */
|
||||
border-right: 1px solid #555;
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
#noscript {
|
||||
position: relative;
|
||||
top: 35%;
|
||||
padding: 1em 1.5em;
|
||||
border: 5px solid #555;
|
||||
border-radius: 16px;
|
||||
background-color: white;
|
||||
color: #555;
|
||||
text-align: center;
|
||||
font: bold 24px Arial, sans-serif;
|
||||
}
|
||||
|
||||
#noscript a {
|
||||
color: #98c0ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="cappuccino-body">
|
||||
<div class="container">
|
||||
<div class="content">
|
||||
<script type="text/javascript">
|
||||
document.write(loadingHTML);
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<noscript style="position:absolute; top:0; left:0; width:100%; height:100%">
|
||||
<div class="container">
|
||||
<div class="content">
|
||||
<div id="noscript">
|
||||
<p style="font-size:120%; margin-bottom:.75em">JavaScript is required for this site.</p>
|
||||
<p><a href="http://www.enable-javascript.com" target="_blank">Enable JavaScript</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</noscript>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* AppController.j
|
||||
* CrossOriginTest
|
||||
*
|
||||
* Created by You on December 9, 2014.
|
||||
* Copyright 2014, Your Company All rights reserved.
|
||||
*/
|
||||
|
||||
@import <Foundation/Foundation.j>
|
||||
@import <AppKit/AppKit.j>
|
||||
|
||||
@import "AppController.j"
|
||||
|
||||
|
||||
function main(args, namedArgs)
|
||||
{
|
||||
CPApplicationMain(args, namedArgs);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"response": "ok"}
|
||||
@@ -7,10 +7,10 @@
|
||||
- (void)testSetWithCredentials
|
||||
{
|
||||
var cfHTTPRequest = new CFHTTPRequest();
|
||||
[self assertFalse:cfHTTPRequest.getWithCredentials()];
|
||||
[self assertFalse:cfHTTPRequest.withCredentials()];
|
||||
|
||||
cfHTTPRequest.setWithCredentials(YES);
|
||||
[self assertTrue:cfHTTPRequest.getWithCredentials()];
|
||||
[self assertTrue:cfHTTPRequest.withCredentials()];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
+1525
-838
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
|
||||
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>Cappuccino</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>cappuccino</string>
|
||||
<key>DocSetPlatformFamily</key>
|
||||
<string>cappuccino</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
source "$1"/support/processor_setup.sh
|
||||
|
||||
processor_msg "Generating Docset"
|
||||
|
||||
MAKEFILE="Build/Documentation/html/Makefile"
|
||||
DOCSDIR="Build/Documentation/html"
|
||||
|
||||
processor_msg "Massaging Makefile"
|
||||
sed -i '.bak' 's/docsetutil index \$(DOCSET_NAME)/docsetutil index -skip-text \$(DOCSET_NAME)/g' $MAKEFILE
|
||||
|
||||
pushd $DOCSDIR
|
||||
processor_msg "Running Make"
|
||||
make
|
||||
|
||||
processor_msg "Finishing up"
|
||||
mv "org.cappuccino-project.cappuccino.docset" "Cappuccino.docset"
|
||||
cp "$1"/Info.plist "Cappuccino.docset/Contents"
|
||||
|
||||
processor_msg "Fixing CSS on Docset"
|
||||
cd Cappuccino.docset
|
||||
echo -e "open(FILE, \">>\$ARGV[0]\");\nprint FILE \"\\\n#top {display:none}\\\n#side-nav {display:none}\\\n\";\nprint \"Appended CSS to \$ARGV[0]\\\n\";\nclose(FILE);" > css.pl
|
||||
find . -type f -name "*.css" -exec perl css.pl {} \;
|
||||
rm -rf css.pl
|
||||
|
||||
popd
|
||||
|
||||
processor_msg "Moving docset to Build/Documentation"
|
||||
|
||||
if [ -d "Build/Documentation/Cappuccino.docset" ]; then
|
||||
rm -rf "Build/Documentation/Cappuccino.docset"
|
||||
fi
|
||||
|
||||
mv "$DOCSDIR"/Cappuccino.docset "Build/Documentation"
|
||||
|
||||
processor_msg "Done"
|
||||
@@ -155,7 +155,8 @@ AppController *SharedAppControllerInstance = nil;
|
||||
kDefaultUseSymlinkWhenCreatingProject: @YES,
|
||||
kDefaultXCCUseDebugFrameworkWithObjj: @YES,
|
||||
kDefaultXCCShouldProcessObjj: @YES,
|
||||
kDefaultXCCPanelStyleUtility: @NO
|
||||
kDefaultXCCPanelStyleUtility: @NO,
|
||||
kDefaultXCCPanelActiveAppWhenOpening: @NO
|
||||
};
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
@@ -32,5 +32,6 @@ extern NSString * const kDefaultAutoOpenXcodeProject;
|
||||
extern NSString * const kDefaultUseSymlinkWhenCreatingProject;
|
||||
extern NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch;
|
||||
extern NSString * const kDefaultXCCPanelStyleUtility;
|
||||
extern NSString * const kDefaultXCCPanelActiveAppWhenOpening;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -29,4 +29,5 @@ NSString * const kDefaultLogLevel = @"logLevel";
|
||||
NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject";
|
||||
NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject";
|
||||
NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch";
|
||||
NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility";
|
||||
NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility";
|
||||
NSString * const kDefaultXCCPanelActiveAppWhenOpening = @"XCCPanelActiveAppWhenOpening";
|
||||
@@ -1565,9 +1565,17 @@ void fsevents_callback(ConstFSEventStreamRef streamRef,
|
||||
|
||||
- (IBAction)openErrorsPanel:(id)aSender
|
||||
{
|
||||
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
|
||||
[self.errorsPanel setFloatingPanel:[[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelStyleUtility]];
|
||||
[self.errorsPanel makeKeyAndOrderFront:nil];
|
||||
|
||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelActiveAppWhenOpening])
|
||||
{
|
||||
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
|
||||
[self.errorsPanel makeKeyAndOrderFront:nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.errorsPanel orderFrontRegardless];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)openErrorInEditor:(id)sender
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1060</int>
|
||||
<string key="IBDocument.SystemVersion">14B17</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">6250</string>
|
||||
<string key="IBDocument.AppKitVersion">1343.15</string>
|
||||
<string key="IBDocument.HIToolboxVersion">755.00</string>
|
||||
<string key="IBDocument.SystemVersion">14C94b</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">6254</string>
|
||||
<string key="IBDocument.AppKitVersion">1344.60</string>
|
||||
<string key="IBDocument.HIToolboxVersion">757.30</string>
|
||||
<dictionary class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="com.apple.InterfaceBuilder.CocoaPlugin">6250</string>
|
||||
<string key="com.apple.pdfkit.ibplugin">6250</string>
|
||||
<string key="com.apple.InterfaceBuilder.CocoaPlugin">6254</string>
|
||||
<string key="com.apple.pdfkit.ibplugin">6254</string>
|
||||
</dictionary>
|
||||
<array key="IBDocument.IntegratedClassDependencies">
|
||||
<string>NSArrayController</string>
|
||||
@@ -361,12 +361,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="247765970"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 900}}</string>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 877}}</string>
|
||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||
<bool key="NSWindowIsRestorable">NO</bool>
|
||||
</object>
|
||||
<object class="NSWindowTemplate" id="717487982">
|
||||
<int key="NSWindowStyleMask">15</int>
|
||||
<int key="NSWindowStyleMask">143</int>
|
||||
<int key="NSWindowBacking">2</int>
|
||||
<string key="NSWindowRect">{{890, 663}, {550, 237}}</string>
|
||||
<int key="NSWTFlags">1613759488</int>
|
||||
@@ -602,7 +602,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="396547698"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 900}}</string>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 877}}</string>
|
||||
<string key="NSMinSize">{315, 99}</string>
|
||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||
<string key="NSFrameAutosaveName"/>
|
||||
@@ -611,7 +611,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<object class="NSWindowTemplate" id="484209508">
|
||||
<int key="NSWindowStyleMask">3</int>
|
||||
<int key="NSWindowBacking">2</int>
|
||||
<string key="NSWindowRect">{{534, 231}, {369, 510}}</string>
|
||||
<string key="NSWindowRect">{{534, 231}, {389, 528}}</string>
|
||||
<int key="NSWTFlags">1613235200</int>
|
||||
<string key="NSWindowTitle">Preferences</string>
|
||||
<string key="NSWindowClass">NSWindow</string>
|
||||
@@ -632,7 +632,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<object class="NSButton" id="49684265">
|
||||
<reference key="NSNextResponder" ref="881981747"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 118}, {271, 18}}</string>
|
||||
<string key="NSFrame">{{16, 136}, {271, 18}}</string>
|
||||
<reference key="NSSuperview" ref="881981747"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="668731100"/>
|
||||
@@ -666,7 +666,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<object class="NSButton" id="668731100">
|
||||
<reference key="NSNextResponder" ref="881981747"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 88}, {241, 18}}</string>
|
||||
<string key="NSFrame">{{16, 106}, {241, 18}}</string>
|
||||
<reference key="NSSuperview" ref="881981747"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="493786566"/>
|
||||
@@ -691,10 +691,10 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<object class="NSButton" id="493786566">
|
||||
<reference key="NSNextResponder" ref="881981747"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 58}, {260, 18}}</string>
|
||||
<string key="NSFrame">{{16, 76}, {260, 18}}</string>
|
||||
<reference key="NSSuperview" ref="881981747"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="59325359"/>
|
||||
<reference key="NSNextKeyView" ref="580602815"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="549413473">
|
||||
<int key="NSCellFlags">-2080374784</int>
|
||||
@@ -713,10 +713,35 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
</object>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
<object class="NSButton" id="580602815">
|
||||
<reference key="NSNextResponder" ref="881981747"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 45}, {330, 18}}</string>
|
||||
<reference key="NSSuperview" ref="881981747"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="59325359"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="171691988">
|
||||
<int key="NSCellFlags">-2080374784</int>
|
||||
<int key="NSCellFlags2">0</int>
|
||||
<string key="NSContents">Active xCodeCapp when opening the Errors panel</string>
|
||||
<reference key="NSSupport" ref="986470281"/>
|
||||
<reference key="NSControlView" ref="580602815"/>
|
||||
<int key="NSButtonFlags">1211912448</int>
|
||||
<int key="NSButtonFlags2">2</int>
|
||||
<reference key="NSNormalImage" ref="795665759"/>
|
||||
<reference key="NSAlternateImage" ref="989917290"/>
|
||||
<string key="NSAlternateContents"/>
|
||||
<string key="NSKeyEquivalent"/>
|
||||
<int key="NSPeriodicDelay">400</int>
|
||||
<int key="NSPeriodicInterval">75</int>
|
||||
</object>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
<object class="NSButton" id="497174199">
|
||||
<reference key="NSNextResponder" ref="881981747"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 146}, {298, 18}}</string>
|
||||
<string key="NSFrame">{{16, 164}, {298, 18}}</string>
|
||||
<reference key="NSSuperview" ref="881981747"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="49684265"/>
|
||||
@@ -836,13 +861,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {330, 176}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {353, 194}}</string>
|
||||
<reference key="NSSuperview" ref="359969914"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="497174199"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 303}, {332, 192}}</string>
|
||||
<string key="NSFrame">{{17, 303}, {355, 210}}</string>
|
||||
<reference key="NSSuperview" ref="853177344"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="881981747"/>
|
||||
@@ -995,13 +1020,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {330, 124}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {353, 124}}</string>
|
||||
<reference key="NSSuperview" ref="913026852"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="1052114206"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 159}, {332, 140}}</string>
|
||||
<string key="NSFrame">{{17, 159}, {355, 140}}</string>
|
||||
<reference key="NSSuperview" ref="853177344"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="224066843"/>
|
||||
@@ -1099,14 +1124,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {333, 65}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {353, 65}}</string>
|
||||
<reference key="NSSuperview" ref="185960776"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="36622245"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:11</string>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 74}, {335, 81}}</string>
|
||||
<string key="NSFrame">{{17, 74}, {355, 81}}</string>
|
||||
<reference key="NSSuperview" ref="853177344"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="122117781"/>
|
||||
@@ -1160,13 +1185,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {333, 38}}</string>
|
||||
<string key="NSFrame">{{1, 1}, {353, 38}}</string>
|
||||
<reference key="NSSuperview" ref="929990427"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="660812811"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 16}, {335, 54}}</string>
|
||||
<string key="NSFrame">{{17, 16}, {355, 54}}</string>
|
||||
<reference key="NSSuperview" ref="853177344"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="435554705"/>
|
||||
@@ -1186,12 +1211,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<bool key="NSTransparent">NO</bool>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrameSize">{369, 510}</string>
|
||||
<string key="NSFrameSize">{389, 528}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="359969914"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 900}}</string>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 877}}</string>
|
||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||
<string key="NSFrameAutosaveName">xcc-prefs</string>
|
||||
<bool key="NSWindowIsRestorable">YES</bool>
|
||||
@@ -1206,7 +1231,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<nil key="NSViewClass"/>
|
||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
||||
<object class="NSView" key="NSWindowView" id="993549244">
|
||||
<nil key="NSNextResponder"/>
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<array class="NSMutableArray" key="NSSubviews">
|
||||
<object class="PDFView" id="921834304">
|
||||
@@ -1218,6 +1243,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
</set>
|
||||
<string key="NSFrame">{{0, 8}, {716, 654}}</string>
|
||||
<reference key="NSSuperview" ref="993549244"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<bool key="NSViewIsLayerTreeHost">YES</bool>
|
||||
<int key="DisplayMode">1</int>
|
||||
<bool key="PageBreaks">NO</bool>
|
||||
@@ -1226,9 +1253,11 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrameSize">{716, 662}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="921834304"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 900}}</string>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 877}}</string>
|
||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||
<bool key="NSWindowIsRestorable">YES</bool>
|
||||
</object>
|
||||
@@ -1329,7 +1358,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<reference key="NSNextKeyView" ref="231116691"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:21</string>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 900}}</string>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 877}}</string>
|
||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||
<string key="NSFrameAutosaveName">updatingCappuccinoPanel</string>
|
||||
<bool key="NSWindowIsRestorable">YES</bool>
|
||||
@@ -1610,6 +1639,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
</object>
|
||||
<string key="id">A92-fj-Uci</string>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">save:</string>
|
||||
<reference key="source" ref="246574361"/>
|
||||
<reference key="destination" ref="580602815"/>
|
||||
</object>
|
||||
<string key="id">0Il-yd-iuZ</string>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">openXcodeProject:</string>
|
||||
@@ -2076,6 +2113,26 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
</object>
|
||||
<string key="id">dP2-Fc-one</string>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">value: values.XCCPanelActiveAppWhenOpening</string>
|
||||
<reference key="source" ref="580602815"/>
|
||||
<reference key="destination" ref="246574361"/>
|
||||
<object class="NSNibBindingConnector" key="connector">
|
||||
<reference key="NSSource" ref="580602815"/>
|
||||
<reference key="NSDestination" ref="246574361"/>
|
||||
<string key="NSLabel">value: values.XCCPanelActiveAppWhenOpening</string>
|
||||
<string key="NSBinding">value</string>
|
||||
<string key="NSKeyPath">values.XCCPanelActiveAppWhenOpening</string>
|
||||
<object class="NSDictionary" key="NSOptions">
|
||||
<string key="NS.key.0">NSValidatesImmediately</string>
|
||||
<boolean value="YES" key="NS.object.0"/>
|
||||
</object>
|
||||
<int key="NSNibBindingConnectorVersion">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="id">kgU-89-aRS</string>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">value: values.XCCPanelStyleUtility</string>
|
||||
@@ -2552,9 +2609,10 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<reference ref="49684265"/>
|
||||
<reference ref="668731100"/>
|
||||
<reference ref="497174199"/>
|
||||
<reference ref="493786566"/>
|
||||
<reference ref="580602815"/>
|
||||
<reference ref="59325359"/>
|
||||
<reference ref="665261882"/>
|
||||
<reference ref="493786566"/>
|
||||
</array>
|
||||
<reference key="parent" ref="853177344"/>
|
||||
</object>
|
||||
@@ -2934,6 +2992,19 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<reference key="object" ref="549413473"/>
|
||||
<reference key="parent" ref="493786566"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<string key="id">CQP-MN-ubd</string>
|
||||
<reference key="object" ref="580602815"/>
|
||||
<array class="NSMutableArray" key="children">
|
||||
<reference ref="171691988"/>
|
||||
</array>
|
||||
<reference key="parent" ref="359969914"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<string key="id">GLQ-ZT-xXR</string>
|
||||
<reference key="object" ref="171691988"/>
|
||||
<reference key="parent" ref="580602815"/>
|
||||
</object>
|
||||
</array>
|
||||
</object>
|
||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
||||
@@ -2976,16 +3047,17 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<boolean value="NO" key="540.showNotes"/>
|
||||
<boolean value="NO" key="541.IBNSWindowAutoPositionCentersHorizontal"/>
|
||||
<boolean value="NO" key="541.IBNSWindowAutoPositionCentersVertical"/>
|
||||
<string key="541.IBPersistedLastKnownCanvasPosition">{239, 248.5}</string>
|
||||
<string key="541.IBPersistedLastKnownCanvasPosition">{345, 214.5}</string>
|
||||
<string key="541.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<boolean value="NO" key="541.showNotes"/>
|
||||
<boolean value="NO" key="542.IBNSWindowAutoPositionCentersHorizontal"/>
|
||||
<boolean value="NO" key="542.IBNSWindowAutoPositionCentersVertical"/>
|
||||
<string key="542.IBPersistedLastKnownCanvasPosition">{-183.5, 363}</string>
|
||||
<string key="542.IBPersistedLastKnownCanvasPosition">{-173.5, 372}</string>
|
||||
<string key="542.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<boolean value="NO" key="542.showNotes"/>
|
||||
<boolean value="YES" key="543.IBNSWindowAutoPositionCentersHorizontal"/>
|
||||
<boolean value="YES" key="543.IBNSWindowAutoPositionCentersVertical"/>
|
||||
<string key="543.IBPersistedLastKnownCanvasPosition">{650, 268}</string>
|
||||
<string key="543.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<boolean value="NO" key="543.showNotes"/>
|
||||
<string key="544.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
@@ -3165,6 +3237,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<string key="9wn-zh-iT9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string key="BYW-Rk-rZ4.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<boolean value="NO" key="BYW-Rk-rZ4.showNotes"/>
|
||||
<object class="NSMutableDictionary" key="CQP-MN-ubd.IBAttributePlaceholdersKey">
|
||||
<string key="NS.key.0">ToolTip</string>
|
||||
<object class="IBToolTipAttribute" key="NS.object.0">
|
||||
<string key="name">ToolTip</string>
|
||||
<reference key="object" ref="580602815"/>
|
||||
<string key="toolTip">If this is checked, xCodeCapp will be the main application of the system when the errors & warnings panel is about to open</string>
|
||||
</object>
|
||||
</object>
|
||||
<boolean value="NO" key="CQP-MN-ubd.IBNSControlSetsMaxLayoutWidthAtFirstLayoutMetadataKey"/>
|
||||
<string key="CQP-MN-ubd.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<reference key="CQP-MN-ubd.IBUserGuides" ref="0"/>
|
||||
<boolean value="NO" key="CQP-MN-ubd.showNotes"/>
|
||||
<string key="D0i-5i-RLQ.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string key="E18-tY-KOl.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<object class="NSMutableDictionary" key="GDP-7Q-0W5.IBAttributePlaceholdersKey">
|
||||
@@ -3172,13 +3256,15 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ</string>
|
||||
<object class="IBToolTipAttribute" key="NS.object.0">
|
||||
<string key="name">ToolTip</string>
|
||||
<reference key="object" ref="493786566"/>
|
||||
<string key="toolTip">If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically</string>
|
||||
<string key="toolTip">If this is checked, the error panel will be a floating panel.</string>
|
||||
</object>
|
||||
</object>
|
||||
<boolean value="NO" key="GDP-7Q-0W5.IBNSControlSetsMaxLayoutWidthAtFirstLayoutMetadataKey"/>
|
||||
<string key="GDP-7Q-0W5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<reference key="GDP-7Q-0W5.IBUserGuides" ref="0"/>
|
||||
<boolean value="NO" key="GDP-7Q-0W5.showNotes"/>
|
||||
<string key="GLQ-ZT-xXR.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<boolean value="NO" key="GLQ-ZT-xXR.showNotes"/>
|
||||
<object class="NSMutableDictionary" key="GR3-Dn-qSe.IBAttributePlaceholdersKey">
|
||||
<string key="NS.key.0">ToolTip</string>
|
||||
<object class="IBToolTipAttribute" key="NS.object.0">
|
||||
|
||||
Reference in New Issue
Block a user