Something like this:

        var f = function (){
            this.setAttribute( "y" , this.immediateparent.height /2
                                - this.height /2);
        }
        f.dependencies = function (target) {
          return [target.immediateparent, 'height', target, 'height'];
        }
        this.applyConstraint('x', f);

I.e., create a dependencies function for these functions. You could be clever with these functions and use a closure to decide whether to divide by 2 for 'middle', etc. and reduce the lines of code a bunch.

function setValign ( valign ){
  var factor = 1;
  if ( valign == "top" ) {
    this.releaseConstraint('y');
    this.setAttribute('y', 0);
    return;
  } else if ( valign == "middle" ){
    var factor = 2;
  } else if ( valign == "bottom" ){
  } else {
    Debug.error("Invalid value %w for %s.valign", valign, this);
  }
  var f = function (){
    this.setAttribute( "y" , this.immediateparent.height / factor
                       - this.height / factor);
  }
  f.dependencies = function (target) {
    return [target.immediateparent, 'height', target, 'height'];
  }
  this.applyConstraint('y', f);
}

Also, the target is just the this argument to applyConstraint, so you don't really need to pass a separate target parameter, I guess.


On 2007-10-16, at 16:52 EDT, Henry Minsky wrote:

That makes sense, to pass the object down instead of the dependencies list. There's only a couple of callers to applyConstraint right now, but one of them is this one caller in LaszloView that makes it's own dependencies list:

function setPosConstraint ( v , f , widthorheight ){
    var d = [ v , widthorheight  , this , widthorheight ];
this.applyConstraint( widthorheight == "width" ? "x" : "y" , f , d );
}


How do think I should handle that? I could make an object and put a
.dependencies on it and pass that I guess.

On 10/16/07, P T Withington <[EMAIL PROTECTED]> wrote:

In fact, wouldn't it make more sense to move all the logic about
dependencies inside applyConstraint so it will be handled correctly
in one place and update all the callers?  I see no reason to have the
callers compute the dependencies out of line, you just need to pass
the target (this) down to applyConstraint.

On 2007-10-16, at 16:40 EDT, P T Withington wrote:

Not approved.

1) This code should be modeled on the known-working code in LzNode:

        if (rp instanceof Function && ('dependencies' in rp)) {
            this.applyConstraint( p , rp , rp.dependencies.call
(this) );
        }

rather than creating the mystery `_t` attribute.

2) There seems to be another branch of the code that replicates the
same bug which should also be rewritten in modern style.

3) What about the case of a $once constraint?  Will it be handled
correctly?  In LzNode when there are no dependencies, the
constraint function is still called at least once.  I don't see in
this code where that is handled.

On 2007-10-16, at 15:24 EDT, Henry Minsky wrote:

Change 20071016-hqm-4 by [EMAIL PROTECTED] on 2007-10-16
15:19:46 EDT
    in /cygdrive/c/users/hqm/openlaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: fix for DHTML replication bug

New Features:

Bugs Fixed: LPP-4893

Technical Reviewer: andre
QA Reviewer: ptw
Doc Reviewer:

Documentation:

check for null dependencies function before calling it

Release Notes:

Details:


Tests:

test case from bug, smokecheck, amazon app

Files:
M      WEB-INF/lps/lfc/data/LzReplicationManager.lzs

Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20071016-
hqm-4.tar


--
Henry Minsky
Software Architect
[EMAIL PROTECTED]





--
Henry Minsky
Software Architect
[EMAIL PROTECTED]

Reply via email to