* GSWeb/GSWAjaxRequestHandler.*

new files
    * GSWeb/GNUmakefile
      add GSWAjaxRequestHandler.*, WOAjaxRequestHandler.h
    * GSWeb/GSWApplication+Defaults.*
      add AjaxRequestHanderKey
    * GSWeb/GSWApplication.h
      add +ajaxRequestHandlerKey
      add +setAjaxRequestHandlerKey:
    * GSWeb/GSWApplication.m
      create ajax request handler in registerRequestHandlers
    * GSWeb/GSWComponentRequestHandler.m
      return current class instance in +handler (works in subclasses too..)
    * GSWConstants.*
      added ajax
    * GSWContext.*
      added +shouldNotStorePageInBacktrackCache
    * GSWeb/GSWMessage.*
      added storePageInBacktrackCache
    * GSWeb/GSWRequest.*
      added -isAjaxSubmit, ajaxFormSubmitKey
    * GSWeb/GSWSession.m
    * GSWeb/GSWeb.h
    * GSWeb/GSWWOCompatibility.h
      ajax adjustments
This commit is contained in:
David Wetzel 2017-11-19 13:45:05 -05:00
parent 237ae78d01
commit 2bb828acb7
17 changed files with 260 additions and 113 deletions

View file

@ -1,3 +1,30 @@
2017-11-19 David Wetzel <dave@turbocat.de>
* GSWeb/GSWAjaxRequestHandler.*
new files
* GSWeb/GNUmakefile
add GSWAjaxRequestHandler.*, WOAjaxRequestHandler.h
* GSWeb/GSWApplication+Defaults.*
add AjaxRequestHanderKey
* GSWeb/GSWApplication.h
add +ajaxRequestHandlerKey
add +setAjaxRequestHandlerKey:
* GSWeb/GSWApplication.m
create ajax request handler in registerRequestHandlers
* GSWeb/GSWComponentRequestHandler.m
return current class instance in +handler (works in subclasses too..)
* GSWConstants.*
added ajax
* GSWContext.*
added +shouldNotStorePageInBacktrackCache
* GSWeb/GSWMessage.*
added storePageInBacktrackCache
* GSWeb/GSWRequest.*
added -isAjaxSubmit, ajaxFormSubmitKey
* GSWeb/GSWSession.m
* GSWeb/GSWeb.h
* GSWeb/GSWWOCompatibility.h
ajax adjustments
2017-11-16 David Wetzel <dave@turbocat.de>
* GSWExtensions/GSWSessionRestorationErrorPage.gswc/GSWSessionRestorationErrorPage.html
* GSWExtensions/GSWExceptionPage.gswc/GSWExceptionPage.html

View file

@ -122,6 +122,7 @@ GSWDefaultAdaptor.m \
GSWUtils.m \
GSWClientSideScript.m \
GSWActiveImage.m \
GSWAjaxRequestHandler.m \
GSWBody.m \
GSWTextField.m \
GSWForm.m \
@ -213,6 +214,7 @@ GSWeb_HEADER_FILES = \
GSWeb.h \
GSWActiveImage.h \
GSWAdaptor.h \
GSWAjaxRequestHandler.h \
GSWApplet.h \
GSWApplication.h \
GSWAssociation.h \
@ -350,6 +352,7 @@ WO_HEADER_FILES = \
WOMailDelivery.h \
WORequest.h \
WORequestHandler.h \
WOAjaxRequestHandler.h \
WOResourceManager.h \
WOResponse.h \
WOSession.h \

View file

@ -261,6 +261,10 @@ GSWeb_InitializeGlobalAppDefaultOptions(void)
LOGOPT_NC(GSWOPTValue_DirectActionRequestHandlerKey);
LOGOPT_NC(GSWOPT_DirectActionRequestHandlerKey);
// ajax
LOGOPT_NC(GSWOPTValue_AjaxRequestHanderKey);
LOGOPT_NC(GSWOPT_AjaxRequestHandlerKey);
LOGOPT_NC(GSWOPTValue_PingActionRequestHandlerKey);
LOGOPT_NC(GSWOPT_PingActionRequestHandlerKey);
@ -387,6 +391,9 @@ GSWeb_InitializeGlobalAppDefaultOptions(void)
GSWOPTValue_DirectActionRequestHandlerKey[GSWebNamingConv],
GSWOPT_DirectActionRequestHandlerKey[GSWebNamingConv],
GSWOPTValue_AjaxRequestHanderKey[GSWebNamingConv],
GSWOPT_AjaxRequestHandlerKey[GSWebNamingConv],
GSWOPTValue_StreamActionRequestHandlerKey[GSWebNamingConv],
GSWOPT_StreamActionRequestHandlerKey[GSWebNamingConv],
@ -1082,13 +1089,29 @@ static NSString *_dflt_directActionRequestHandlerKey;
GSWOPT_DirectActionRequestHandlerKey[GSWebNamingConv]);
return _dflt_directActionRequestHandlerKey;
};
//--------------------------------------------------------------------
+(void)setDirectActionRequestHandlerKey:(NSString*)aKey
{
ASSIGNCOPY(_dflt_directActionRequestHandlerKey, aKey);
_dflt_init_directActionRequestHandlerKey = YES;
};
//--------------------------------------------------------------------
static BOOL _dflt_init_ajaxRequestHandlerKey = NO;
static NSString *_dflt_ajaxRequestHandlerKey;
+(NSString*)ajaxRequestHandlerKey
{
INIT_DFLT_OBJ(ajaxRequestHandlerKey,
GSWOPT_AjaxRequestHandlerKey[GSWebNamingConv]);
return _dflt_ajaxRequestHandlerKey;
};
+(void)setAjaxRequestHandlerKey:(NSString*)aKey
{
ASSIGNCOPY(_dflt_ajaxRequestHandlerKey, aKey);
_dflt_init_ajaxRequestHandlerKey = YES;
};
//--------------------------------------------------------------------
static BOOL _dflt_init_resourceRequestHandlerKey = NO;

View file

@ -615,6 +615,8 @@ GSWEB_EXPORT GSWApplication* GSWApp;
+(void)setComponentRequestHandlerKey:(NSString*)aKey;
+(NSString*)directActionRequestHandlerKey;
+(void)setDirectActionRequestHandlerKey:(NSString*)aKey;
+(NSString*)ajaxRequestHandlerKey;
+(void)setAjaxRequestHandlerKey:(NSString*)aKey;
+(NSString*)resourceRequestHandlerKey;
+(void)setResourceRequestHandlerKey:(NSString*)aKey;
+(NSString*)statisticsStoreClassName;

View file

@ -589,12 +589,14 @@ int GSWApplicationMain(NSString* applicationClassName,
NSString* directActionRequestHandlerKey=nil;
NSString* pingDirectActionRequestHandlerKey=nil;
NSString* streamDirectActionRequestHandlerKey=nil;
NSString* ajaxRequestHandlerKey=nil;
GSWRequestHandler* componentRequestHandler=nil;
GSWResourceRequestHandler* resourceRequestHandler=nil;
GSWDirectActionRequestHandler* directActionRequestHandler=nil;
GSWDirectActionRequestHandler* pingDirectActionRequestHandler=nil;
GSWDirectActionRequestHandler* streamDirectActionRequestHandler=nil;
GSWAjaxRequestHandler* ajaxRequestHander=nil;
GSWRequestHandler* defaultRequestHandler=nil;
Class defaultRequestHandlerClass=nil;
@ -635,6 +637,10 @@ int GSWApplicationMain(NSString* applicationClassName,
streamDirectActionRequestHandlerKey=[[self class] streamActionRequestHandlerKey];
[streamDirectActionRequestHandler setAllowsContentInputStream:YES];
// Ajax
ajaxRequestHandlerKey = [[self class] ajaxRequestHandlerKey];
ajaxRequestHander = [GSWAjaxRequestHandler handler];
[self registerRequestHandler:componentRequestHandler
forKey:componentRequestHandlerKey];
@ -649,6 +655,9 @@ int GSWApplicationMain(NSString* applicationClassName,
[self registerRequestHandler:streamDirectActionRequestHandler
forKey:streamDirectActionRequestHandlerKey];
[self registerRequestHandler:ajaxRequestHander
forKey:ajaxRequestHandlerKey];
// Default Request Handler
defaultRequestHandlerClass=[self defaultRequestHandlerClass];
if (defaultRequestHandlerClass)

View file

@ -438,7 +438,7 @@ GSWResponse * _dispatchWithPreparedApplication(GSWApplication *app, GSWContext *
// used in GSWApplication _componentRequestHandler
+(id)handler
{
return [[GSWComponentRequestHandler new] autorelease];
return [[self new] autorelease];
}

View file

@ -60,6 +60,8 @@ GSWEB_EXPORT NSString* GSWScriptPSuffix[2];
GSWEB_EXPORT NSString* GSWResourceRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWComponentRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWDirectActionRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWAjaxRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWPingActionRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWStaticResourceRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWComponentTemplateSuffix;
@ -207,6 +209,7 @@ GSWEB_EXPORT NSString* GSWOPT_DebuggingEnabled[2];
GSWEB_EXPORT NSString* GSWOPT_StatusDebuggingEnabled[2];
GSWEB_EXPORT NSString* GSWOPT_StatusLoggingEnabled[2];
GSWEB_EXPORT NSString* GSWOPT_DirectActionRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPT_AjaxRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPT_DirectConnectEnabled[2];
GSWEB_EXPORT NSString* GSWOPT_FrameworksBaseURL[2];
GSWEB_EXPORT NSString* GSWOPT_OutputPath[2];
@ -258,6 +261,7 @@ GSWEB_EXPORT NSString* GSWOPTValue_DefaultTemplateParser_RawHTML;
GSWEB_EXPORT NSString* GSWOPTValue_ComponentRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPTValue_ResourceRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPTValue_DirectActionRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPTValue_AjaxRequestHanderKey[2];
GSWEB_EXPORT NSString* GSWOPTValue_StreamActionRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPTValue_PingActionRequestHandlerKey[2];
GSWEB_EXPORT NSString* GSWOPTValue_StaticResourceRequestHandlerKey[2];

View file

@ -57,6 +57,7 @@ NSString* GSWScriptPSuffix[2]={ @".gsws", @".wos" };
NSString* GSWResourceRequestHandlerKey[2]={ @"rr", @"wr" };
NSString* GSWComponentRequestHandlerKey[2]={ @"cr", @"wo" };
NSString* GSWDirectActionRequestHandlerKey[2]={ @"dr", @"wa" };
NSString* GSWAjaxRequestHandlerKey[2]={ @"ja", @"ja" };
NSString* GSWPingActionRequestHandlerKey[2]={ @"lb", @"wlb" };
NSString* GSWComponentDeclarationsSuffix[2]={ @"gswd", @"wod" };
NSString* GSWComponentDeclarationsPSuffix[2]={ @".gswd", @".wod" };
@ -202,6 +203,7 @@ NSString* GSWOPT_DebuggingEnabled[2]={ @"GSWDebuggingEnabled", @"WODebuggingEnab
NSString* GSWOPT_StatusDebuggingEnabled[2]={ @"GSWStatusDebuggingEnabled", @"WOStatusDebuggingEnabled" };//NDFN
NSString* GSWOPT_StatusLoggingEnabled[2]={ @"GSWStatusLoggingEnabled", @"WOStatusLoggingEnabled" };//NDFN
NSString* GSWOPT_DirectActionRequestHandlerKey[2]={ @"GSWDirectActionRequestHandlerKey", @"WODirectActionRequestHandlerKey" };
NSString* GSWOPT_AjaxRequestHandlerKey[2]={ @"AjaxRequestHandlerKey", @"AjaxRequestHandlerKey" };
NSString* GSWOPT_PingActionRequestHandlerKey[2]={ @"GSWPingActionRequestHandlerKey", @"WOPingActionRequestHandlerKey" };
NSString* GSWOPT_StaticResourceRequestHandlerKey[2]={ @"GSWStaticResourceRequestHandlerKey", @"WOStaticResourceRequestHandlerKey" };
NSString* GSWOPT_DirectConnectEnabled[2]={ @"GSWDirectConnectEnabled", @"WODirectConnectEnabled" };
@ -253,6 +255,8 @@ NSString* GSWOPTValue_DefaultTemplateParser_RawHTML = @"RawHTML";
NSString* GSWOPTValue_ComponentRequestHandlerKey[2]={ @"cr", @"wo" };
NSString* GSWOPTValue_ResourceRequestHandlerKey[2]={ @"rr", @"wr" };
NSString* GSWOPTValue_DirectActionRequestHandlerKey[2]={ @"dr", @"wa" };
// Ajax
NSString* GSWOPTValue_AjaxRequestHanderKey[2]={ @"ja", @"ja" };
NSString* GSWOPTValue_StreamActionRequestHandlerKey[2]={ @"sr", @"wis" };
NSString* GSWOPTValue_PingActionRequestHandlerKey[2]={ @"lb", @"wlb" };
NSString* GSWOPTValue_StaticResourceRequestHandlerKey[2]={ @"_rr_", @"_wr_" };

View file

@ -177,6 +177,8 @@ GSWEB_EXPORT BOOL GSWContext_isSenderIDSearchOver(GSWContext* aContext);
-(NSString*)docStructure;
#endif
- (BOOL) shouldNotStorePageInBacktrackCache;
-(GSWDynamicURLString*)directActionURLForActionNamed:(NSString*)actionName
urlPrefix:(NSString*)urlPrefix
queryDictionary:(NSDictionary*)queryDictionary;

View file

@ -740,6 +740,21 @@ GSWEB_EXPORT BOOL GSWContext_isSenderIDSearchOver(GSWContext* aContext)
}
#endif
//--------------------------------------------------------------------
- (BOOL) shouldNotStorePageInBacktrackCache
{
BOOL shouldNot = NO;
BOOL requestNotStorePageInBacktrackCache = ((_request) && ([_request storePageInBacktrackCache] == NO));
BOOL responseNotStorePageInBacktrackCache = ((_response) && ([_response storePageInBacktrackCache] == NO));
BOOL requestIsAjaxSubmit = ((_request) && [_request isAjaxSubmit]);
shouldNot = (responseNotStorePageInBacktrackCache || requestNotStorePageInBacktrackCache || requestIsAjaxSubmit);
return shouldNot;
}
//--------------------------------------------------------------------
-(GSWDynamicURLString*)directActionURLForActionNamed:(NSString*)actionName
urlPrefix:(NSString*)urlPrefix

View file

@ -84,6 +84,7 @@ GSWEB_EXPORT NSString* GSWMessage_stringByConvertingToHTML(GSWMessage* aMessage,
//====================================================================
@interface GSWMessage : NSObject <NSCopying>
{
BOOL _storePageInBacktrackCache;
NSString* _httpVersion;
NSMutableDictionary* _headers;
NSMutableArray* _cookies;
@ -100,6 +101,10 @@ GSWEB_EXPORT NSString* GSWMessage_stringByConvertingToHTML(GSWMessage* aMessage,
GSWMessageIMPs _selfMsgIMPs;
};
-(BOOL)storePageInBacktrackCache;
-(void)setStorePageInBacktrackCache:(BOOL) yn;
-(void)setHTTPVersion:(NSString*)version;
-(NSString*)httpVersion;

View file

@ -455,6 +455,7 @@ static __inline__ NSMutableData *_checkBody(GSWMessage *self) {
{
GetGSWMessageIMPs(&_selfMsgIMPs,self);
ASSIGN(_httpVersion,@"HTTP/1.0");
_storePageInBacktrackCache = YES;
_headers=[NSMutableDictionary new];
_contentEncoding=[[self class] defaultEncoding];
_checkBody(self);
@ -538,6 +539,16 @@ static __inline__ NSMutableData *_checkBody(GSWMessage *self) {
return isEqual;
}
-(BOOL)storePageInBacktrackCache
{
return _storePageInBacktrackCache;
}
-(void)setStorePageInBacktrackCache:(BOOL) yn
{
_storePageInBacktrackCache = yn;
}
//--------------------------------------------------------------------
// setHTTPVersion:

View file

@ -166,6 +166,12 @@ Cf RFC 2616 (http://www.rfc-editor.org/rfc/rfc2616.txt)
-(NSString*)_contentType;
-(NSString*)_urlQueryString;
-(BOOL)isAjaxSubmit;
+(NSString*)ajaxFormSubmitKey;
+(void)setAjaxFormSubmitKey:(NSString*) value;
-(BOOL)_isUsingWebServer;
-(BOOL)isUsingWebServer;

View file

@ -5,10 +5,6 @@
Written by: Manuel Guesdon <mguesdon@orange-concept.com>
Date: Jan 1999
$Revision$
$Date$
$Id$
This file is part of the GNUstep Web Library.
<license>
@ -198,6 +194,8 @@
@implementation GSWRequest
static NSString * __AJAX_FORM_SUBMIT_KEY = @"AJAX_SUBMIT_BUTTON_NAME";
//--------------------------------------------------------------------
// initWithMethod:uri:httpVersion:headers:content:userInfo:
@ -723,6 +721,10 @@
id formValue=nil;
NSArray* formValuesForKey=nil;
if (!key) {
return nil;
}
formValuesForKey=[self formValuesForKey:key];
NSAssert3(!formValuesForKey || [formValuesForKey isKindOfClass:[NSArray class]],@"formValues:%@ ForKey:%@ is not a NSArray it's a %@",
formValuesForKey,
@ -1369,6 +1371,22 @@
};
//--------------------------------------------------------------------
-(BOOL) isAjaxSubmit
{
return ([self formValueForKey:[[self class] ajaxFormSubmitKey]] != nil);
}
+ (NSString*) ajaxFormSubmitKey
{
return (__AJAX_FORM_SUBMIT_KEY == nil) ? @"" : __AJAX_FORM_SUBMIT_KEY;
}
+ (void) setAjaxFormSubmitKey:(NSString*) value
{
ASSIGN(__AJAX_FORM_SUBMIT_KEY,(value == nil) ? @"" : value);
}
// FIXME:check if that is needed for 4.5 compat
-(BOOL)_isUsingWebServer
{

View file

@ -588,7 +588,22 @@ extern id gcObjectsToBeVisited;
//--------------------------------------------------------------------
-(void)savePageInPageFragmentCache:(GSWComponent*)page
{
// TODO
}
-(void)savePage:(GSWComponent*)page
{
if ([_currentContext shouldNotStorePageInBacktrackCache]) {
[self savePageInPageFragmentCache:page];
} else {
[self savePageInPageCache:page];
}
}
-(void)savePageInPageCache:(GSWComponent*)page
{
GSWTransactionRecord * transactionrec = nil;
BOOL pageChanged = [_currentContext _pageChanged];

View file

@ -66,6 +66,7 @@
#define GSWBundle WOBundle
#define GSWMultiKeyDictionary WOMultiKeyDictionary
#define GSWElementID WOElementIDString
#define GSWAjaxRequestHandler WOAjaxRequestHandler
#define GSWComponentRequestHandler WOComponentRequestHandler
#define GSWResourceRequestHandler WOResourceRequestHandler
#define GSWDirectActionRequestHandler WODirectActionRequestHandler

View file

@ -111,6 +111,7 @@
@class GSWResourceRequestHandler;
@class GSWStaticResourceRequestHandler;
@class GSWActionRequestHandler;
@class GSWAjaxRequestHandler;
@class GSWDirectActionRequestHandler;
@class GSWKeyValueAssociation;
@class GSWConstantValueAssociation;
@ -236,6 +237,7 @@
#include "GSWResourceRequestHandler.h"
#include "GSWStaticResourceRequestHandler.h"
#include "GSWActionRequestHandler.h"
#include "GSWAjaxRequestHandler.h"
#include "GSWDirectActionRequestHandler.h"
#include "GSWKeyValueAssociation.h"
#include "GSWConstantValueAssociation.h"