]> err.no Git - sope/commitdiff
added if-not WOx tag
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 24 Aug 2004 12:36:20 +0000 (12:36 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 24 Aug 2004 12:36:20 +0000 (12:36 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@49 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-appserver/NGObjWeb/Associations/WOAssociation.m
sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/DynamicElements/WOComponentReference.m
sope-appserver/NGObjWeb/DynamicElements/WOConditional.m
sope-appserver/NGObjWeb/DynamicElements/WOxControlElemBuilder.m
sope-appserver/NGObjWeb/Version
sope-appserver/NGObjWeb/WODynamicElement.m

index 50fcfd726e4dd9439a6e96fc466f7749730c0216..2d024f5026ad6a763f816d8af6b7c2795d543576 100644 (file)
@@ -18,7 +18,6 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
 
 #include <NGObjWeb/WOAssociation.h>
 #include "WOValueAssociation.h"
index efab340e58886840b5e4424078a6c144d6cc90c9..d8c860e8c7380e339cbc004dcf2ae9215ee500ab 100644 (file)
@@ -1,5 +1,13 @@
 2004-08-24  Helge Hess  <helge.hess@opengroupware.org>
 
+       * v4.3.9
+
+       * DynamicElements/WOConditional.m: added specific WOx initializer to
+         support negative conditionals (if-not)
+
+       * DynamicElements/WOxControlElemBuilder.m: mapped "if-not"/"ifnot" to
+         WOConditional
+
        * SoObjects/WOContext+SoObjects.m: added missing
          -setObjectPermissionCache: method (v4.3.8)
 
index 0d7b9bf38e356865c4201143cfa9080a389a4263..5e4cd2aa2067286ee9125ebc24279ce8a729f37e 100644 (file)
@@ -18,7 +18,7 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
+// $Id: WOComponentReference.m 1 2004-08-20 10:08:27Z znek $
 
 #include "WOComponentReference.h"
 #include "WOElement+private.h"
@@ -138,7 +138,7 @@ _updateComponent(WOComponentReference *self, WOContext *_ctx)
 
 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
   WOComponent *parent;
-
+  
   parent = [_ctx component];
   
   _updateComponent(self, _ctx);
index 619de1086582822c68298479a6dfd31decdccda2..d8b2c5fe6ceb6c4613eb8dc1f4315ffa0949d70c 100644 (file)
@@ -18,7 +18,7 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
+// $Id: WOConditional.m 1 2004-08-20 10:08:27Z znek $
 
 #include <NGObjWeb/WODynamicElement.h>
 
@@ -42,6 +42,8 @@
 
 @end /* WOConditional */
 
+#include <DOM/EDOM.h>
+#include <NGObjWeb/WOxElemBuilder.h>
 #include "common.h"
 #include "WOElement+private.h"
 
@@ -80,6 +82,67 @@ static int descriptiveIDs = -1;
   return self;
 }
 
+- (id)initWithNegateElement:(id<DOMElement>)_element
+  templateBuilder:(WOxElemBuilder *)_builder
+{
+  /* need an own -init so that we can patch the 'negate' association */
+  NSString            *name;
+  NSMutableDictionary *assocs;
+  NSArray             *children;
+  id<NSObject,DOMNamedNodeMap> attrs;
+  unsigned count;
+  
+  name = [_element tagName];
+  
+  /* construct associations */
+  
+  assocs = nil;
+  attrs = [_element attributes];
+  if ((count = [attrs length]) > 0)
+    assocs = [_builder associationsForAttributes:attrs];
+
+  if ([assocs objectForKey:@"negate"] != nil) {
+    // TODO: implement
+    [self logWithFormat:@"TODO: if-not with 'negate' binding not supported!"];
+    [self release];
+    return nil;
+  }
+  else {
+    static WOAssociation *yesAssoc = nil;
+    if (yesAssoc == nil) {
+      yesAssoc = [[WOAssociation associationWithValue:
+                                  [NSNumber numberWithBool:YES]] retain];
+    }
+    [assocs setObject:yesAssoc forKey:@"negate"];
+  }
+  
+  /* construct child elements */
+  
+  if ([_element hasChildNodes]) {
+    /* look for var:binding tags ... */
+    
+    children = [_builder buildNodes:[_element childNodes]
+                         templateBuilder:_builder];
+  }
+  else
+    children = nil;
+  
+  /* construct self ... */
+  return [self initWithName:name associations:assocs contentElements:children];
+}
+
+- (id)initWithElement:(id<DOMElement>)_element
+  templateBuilder:(WOxElemBuilder *)_builder
+{
+  NSString *tag;
+  
+  tag = [_element tagName];
+  if ([tag isEqualToString:@"if-not"] || [tag isEqualToString:@"ifnot"])
+    return [self initWithNegateElement:_element templateBuilder:_builder];
+  
+  return [super initWithElement:_element templateBuilder:_builder];
+}
+
 - (void)dealloc {
   [self->template  release];
   [self->value     release];
index cbb5de343df77123e1f4b44e600337ede3bd8d8c..aff0b81d983b1f5ccb63c9b9eb732f67b3ad9fd2 100644 (file)
@@ -18,9 +18,8 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
 
-#import <NGObjWeb/WOxElemBuilder.h>
+#include <NGObjWeb/WOxElemBuilder.h>
 
 /*
   This builder builds control flow elements, eg conditionals and
@@ -28,6 +27,7 @@
 
   Supported tags:
     <var:if .../>      maps to WOConditional
+    <var:if-not .../>  maps to WOConditional
     <var:foreach .../> maps to WORepetition
     <var:with .../>    maps to WOSetCursor
 */
   
   tag = [_element tagName];
   
-  if ([tag isEqualToString:@"if"]) {
+  if ([tag isEqualToString:@"if"] ||
+      [tag isEqualToString:@"if-not"] || [tag isEqualToString:@"ifnot"]) {
     static Class clazz = Nil;
     if (clazz == Nil)
       clazz = NSClassFromString(@"WOConditional");
     return clazz;
   }
+  
   if ([tag isEqualToString:@"foreach"] || [tag isEqualToString:@"for-each"]) {
     static Class clazz = Nil;
     if (clazz == Nil)
index 6e2c2956d6e28a154984e44bf0d2ab1c1400b4a9..12b8a0d3c13f01ec091de40d0db96c617a47f385 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=8
+SUBMINOR_VERSION:=9
 
 # v4.2.413 requires libSaxObjC      v4.2.33
 # v4.2.341 requires libNGExtensions v4.2.77
index d62bd82dfe48af3467bc4d0756853b640d2ed511..1141b0a29b668f1aac4bacef3971fd4c3dee82bc 100644 (file)
@@ -18,7 +18,7 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
+// $Id: WODynamicElement.m 1 2004-08-20 10:08:27Z znek $
 
 #include <NGObjWeb/WODynamicElement.h>
 #include "WOElement+private.h"
@@ -324,12 +324,14 @@ static Class FormElementClass = Nil;
   The new DOM element init function for elements constructed from DOM element
   nodes.
 
-  The default method is defined on NSObject instead of WOElement, since some dynamic
-  elements are class clusters, which use temporary non-WOElement classes during
-  construction.
+  The default method is defined on NSObject instead of WOElement, since some
+  dynamic elements are class clusters, which use temporary non-WOElement 
+  classes during construction.
 
-  The default construction process requires no support from existing NGObjWeb elements.
-  It maps all tag attributes to element associations and all child nodes to subelements.
+  The default construction process requires no support from existing NGObjWeb
+  elements.
+  It maps all tag attributes to element associations and all child nodes to 
+  subelements.
   The tagname is used as the dynamic element name.
 */