MIT so no pb, see bottom of  http://www.prototypejs.org/

Jacques

De : "BJ Freeman" <[EMAIL PROTECTED]>
> clarification
> does copyrighted able to have an apache license?
> would the be accepted in a jira submission?
>
> [EMAIL PROTECTED] sent the following on 11/11/2007 10:14 PM:
> > Author: apatel
> > Date: Sun Nov 11 22:14:48 2007
> > New Revision: 594033
> >
> > URL: http://svn.apache.org/viewvc?rev=594033&view=rev
> > Log:
> > updated prototype to 1.6 and scriptaculous to 1.8
> >
> > Modified:
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/builder.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/controls.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/dragdrop.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/effects.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/prototype.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/scriptaculous.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/slider.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/sound.js
> >     ofbiz/trunk/framework/images/webapp/images/prototypejs/unittest.js
> >
> > Modified: ofbiz/trunk/framework/images/webapp/images/prototypejs/builder.js
> > URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/prototypejs/builder.js?rev=594033&r1=594032&r2=594033&view=diff
> > ==============================================================================
> > --- ofbiz/trunk/framework/images/webapp/images/prototypejs/builder.js 
> > (original)
> > +++ ofbiz/trunk/framework/images/webapp/images/prototypejs/builder.js Sun 
> > Nov 11 22:14:48 2007
> > @@ -1,4 +1,4 @@
> > -// script.aculo.us builder.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
> > +// script.aculo.us builder.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007
> >
> >  // Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, 
> > http://mir.aculo.us)
> >  //
> >
> > Modified: ofbiz/trunk/framework/images/webapp/images/prototypejs/controls.js
> > URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/prototypejs/controls.js?rev=594033&r1=594032&r2=594033&view=diff
> > ==============================================================================
> > --- ofbiz/trunk/framework/images/webapp/images/prototypejs/controls.js 
> > (original)
> > +++ ofbiz/trunk/framework/images/webapp/images/prototypejs/controls.js Sun 
> > Nov 11 22:14:48 2007
> > @@ -1,4 +1,4 @@
> > -// script.aculo.us controls.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
> > +// script.aculo.us controls.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007
> >
> >  // Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, 
> > http://mir.aculo.us)
> >  //           (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
> > @@ -39,9 +39,8 @@
> >  if(typeof Effect == 'undefined')
> >    throw("controls.js requires including script.aculo.us' effects.js 
> > library");
> >
> > -var Autocompleter = {}
> > -Autocompleter.Base = function() {};
> > -Autocompleter.Base.prototype = {
> > +var Autocompleter = { }
> > +Autocompleter.Base = Class.create({
> >    baseInitialize: function(element, update, options) {
> >      element          = $(element)
> >      this.element     = element;
> > @@ -51,11 +50,12 @@
> >      this.active      = false;
> >      this.index       = 0;
> >      this.entryCount  = 0;
> > +    this.oldElementValue = this.element.value;
> >
> >      if(this.setOptions)
> >        this.setOptions(options);
> >      else
> > -      this.options = options || {};
> > +      this.options = options || { };
> >
> >      this.options.paramName    = this.options.paramName || 
> > this.element.name;
> >      this.options.tokens       = this.options.tokens || [];
> > @@ -77,6 +77,9 @@
> >
> >      if(typeof(this.options.tokens) == 'string')
> >        this.options.tokens = new Array(this.options.tokens);
> > +    // Force carriage returns as token delimiters anyway
> > +    if (!this.options.tokens.include('\n'))
> > +      this.options.tokens.push('\n');
> >
> >      this.observer = null;
> >
> > @@ -86,12 +89,6 @@
> >
> >      Event.observe(this.element, 'blur', 
> > this.onBlur.bindAsEventListener(this));
> >      Event.observe(this.element, 'keypress', 
> > this.onKeyPress.bindAsEventListener(this));
> > -
> > -    // Turn autocomplete back on when the user leaves the page, so that the
> > -    // field's value will be remembered on Mozilla-based browsers.
> > -    Event.observe(window, 'beforeunload', function(){
> > -      element.setAttribute('autocomplete', 'on');
> > -    });
> >    },
> >
> >    show: function() {
> > @@ -245,21 +242,22 @@
> >      }
> >      var value = '';
> >      if (this.options.select) {
> > -      var nodes = document.getElementsByClassName(this.options.select, 
> > selectedElement) || [];
> > +      var nodes = $(selectedElement).select('.' + this.options.select) || 
> > [];
> >        if(nodes.length>0) value = Element.collectTextNodes(nodes[0], 
> > this.options.select);
> >      } else
> >        value = Element.collectTextNodesIgnoreClass(selectedElement, 
> > 'informal');
> >
> > -    var lastTokenPos = this.findLastToken();
> > -    if (lastTokenPos != -1) {
> > -      var newValue = this.element.value.substr(0, lastTokenPos + 1);
> > -      var whitespace = this.element.value.substr(lastTokenPos + 
> > 1).match(/^\s+/);
> > +    var bounds = this.getTokenBounds();
> > +    if (bounds[0] != -1) {
> > +      var newValue = this.element.value.substr(0, bounds[0]);
> > +      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
> >        if (whitespace)
> >          newValue += whitespace[0];
> > -      this.element.value = newValue + value;
> > +      this.element.value = newValue + value + 
> > this.element.value.substr(bounds[1]);
> >      } else {
> >        this.element.value = value;
> >      }
> > +    this.oldElementValue = this.element.value;
> >      this.element.focus();
> >
> >      if (this.options.afterUpdateElement)
> > @@ -303,38 +301,48 @@
> >
> >    onObserverEvent: function() {
> >      this.changed = false;
> > +    this.tokenBounds = null;
> >      if(this.getToken().length>=this.options.minChars) {
> >        this.getUpdatedChoices();
> >      } else {
> >        this.active = false;
> >        this.hide();
> >      }
> > +    this.oldElementValue = this.element.value;
> >    },
> >
> >    getToken: function() {
> > -    var tokenPos = this.findLastToken();
> > -    if (tokenPos != -1)
> > -      var ret = this.element.value.substr(tokenPos + 
> > 1).replace(/^\s+/,'').replace(/\s+$/,'');
> > -    else
> > -      var ret = this.element.value;
> > -
> > -    return /\n/.test(ret) ? '' : ret;
> > +    var bounds = this.getTokenBounds();
> > +    return this.element.value.substring(bounds[0], bounds[1]).strip();
> >    },
> >
> > -  findLastToken: function() {
> > -    var lastTokenPos = -1;
> > -
> > -    for (var i=0; i<this.options.tokens.length; i++) {
> > -      var thisTokenPos = 
> > this.element.value.lastIndexOf(this.options.tokens[i]);
> > -      if (thisTokenPos > lastTokenPos)
> > -        lastTokenPos = thisTokenPos;
> > +  getTokenBounds: function() {
> > +    if (null != this.tokenBounds) return this.tokenBounds;
> > +    var value = this.element.value;
> > +    if (value.strip().empty()) return [-1, 0];
> > +    var diff = arguments.callee.getFirstDifferencePos(value, 
> > this.oldElementValue);
> > +    var offset = (diff == this.oldElementValue.length ? 1 : 0);
> > +    var prevTokenPos = -1, nextTokenPos = value.length;
> > +    var tp;
> > +    for (var index = 0, l = this.options.tokens.length; index < l; 
> > ++index) {
> > +      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 
> > 1);
> > +      if (tp > prevTokenPos) prevTokenPos = tp;
> > +      tp = value.indexOf(this.options.tokens[index], diff + offset);
> > +      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
> >      }
> > -    return lastTokenPos;
> > +    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
> >    }
> > -}
> > +});
> >
> > -Ajax.Autocompleter = Class.create();
> > -Object.extend(Object.extend(Ajax.Autocompleter.prototype, 
> > Autocompleter.Base.prototype), {
> > +Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = 
> > function(newS, oldS) {
> > +  var boundary = Math.min(newS.length, oldS.length);
> > +  for (var index = 0; index < boundary; ++index)
> > +    if (newS[index] != oldS[index])
> > +      return index;
> > +  return boundary;
> > +};
> > +
> > +Ajax.Autocompleter = Class.create(Autocompleter.Base, {
> >    initialize: function(element, update, url, options) {
> >      this.baseInitialize(element, update, options);
> >      this.options.asynchronous  = true;
> > @@ -361,7 +369,6 @@
> >    onComplete: function(request) {
> >      this.updateChoices(request.responseText);
> >    }
> > -
> >  });
> >
> >  // The local array autocompleter. Used when you'd prefer to
> > @@ -399,8 +406,7 @@
> >  // In that case, the other options above will not apply unless
> >  // you support them.
> >
> > -Autocompleter.Local = Class.create();
> > -Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
> > +Autocompleter.Local = Class.create(Autocompleter.Base, {
> >    initialize: function(element, update, array, options) {
> >      this.baseInitialize(element, update, options);
> >      this.options.array = array;
> > @@ -456,13 +462,12 @@
> >            ret = ret.concat(partial.slice(0, instance.options.choices - 
> > ret.length))
> >          return "<ul>" + ret.join('') + "</ul>";
> >        }
> > -    }, options || {});
> > +    }, options || { });
> >    }
> >  });
> >
> > -// AJAX in-place editor
> > -//
> > -// see documentation on 
> > http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
> > +// AJAX in-place editor and collection editor
> > +// Full rewrite by Christophe Porteneuve <[EMAIL PROTECTED]> (April 2007).
> >
> >  // Use this if you notice weird scrolling problems on some browsers,
> >  // the DOM might be a bit confused when this gets called so do this
> > @@ -473,387 +478,472 @@
> >    }, 1);
> >  }
> >
> > -Ajax.InPlaceEditor = Class.create();
> > -Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
> > -Ajax.InPlaceEditor.prototype = {
> > +Ajax.InPlaceEditor = Class.create({
> >    initialize: function(element, url, options) {
> >      this.url = url;
> > -    this.element = $(element);
> > -
> > -    this.options = Object.extend({
> > -      paramName: "value",
> > -      okButton: true,
> > -      okLink: false,
> > -      okText: "ok",
> > -      cancelButton: false,
> > -      cancelLink: true,
> > -      cancelText: "cancel",
> > -      textBeforeControls: '',
> > -      textBetweenControls: '',
> > -      textAfterControls: '',
> > -      savingText: "Saving...",
> > -      clickToEditText: "Click to edit",
> > -      okText: "ok",
> > -      rows: 1,
> > -      onComplete: function(transport, element) {
> > -        new Effect.Highlight(element, {startcolor: 
> > this.options.highlightcolor});
> > -      },
> > -      onFailure: function(transport) {
> > -        alert("Error communicating with the server: " + 
> > transport.responseText.stripTags());
> > -      },
> > -      callback: function(form) {
> > -        return Form.serialize(form);
> > -      },
> > -      handleLineBreaks: true,
> > -      loadingText: 'Loading...',
> > -      savingClassName: 'inplaceeditor-saving',
> > -      loadingClassName: 'inplaceeditor-loading',
> > -      formClassName: 'inplaceeditor-form',
> > -      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
> > -      highlightendcolor: "#FFFFFF",
> > -      externalControl: null,
> > -      submitOnBlur: false,
> > -      ajaxOptions: {},
> > -      evalScripts: false
> > -    }, options || {});
> > -
> > -    if(!this.options.formId && this.element.id) {
> > -      this.options.formId = this.element.id + "-inplaceeditor";
> > -      if ($(this.options.formId)) {
> > -        // there's already a form with that name, don't specify an id
> > -        this.options.formId = null;
> > -      }
> > +    this.element = element = $(element);
> > +    this.prepareOptions();
> > +    this._controls = { };
> > +    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION 
> > LAYER!!!
> > +    Object.extend(this.options, options || { });
> > +    if (!this.options.formId && this.element.id) {
> > +      this.options.formId = this.element.id + '-inplaceeditor';
> > +      if ($(this.options.formId))
> > +        this.options.formId = '';
> >      }
> > -
> > -    if (this.options.externalControl) {
> > +    if (this.options.externalControl)
> >        this.options.externalControl = $(this.options.externalControl);
> > -    }
> > -
> > -    this.originalBackground = Element.getStyle(this.element, 
> > 'background-color');
> > -    if (!this.originalBackground) {
> > -      this.originalBackground = "transparent";
> > -    }
> > -
> > +    if (!this.options.externalControl)
> > +      this.options.externalControlOnly = false;
> > +    this._originalBackground = this.element.getStyle('background-color') 
> > || 'transparent';
> >      this.element.title = this.options.clickToEditText;
> > -
> > -    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
> > -    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
> > -    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
> > -    Event.observe(this.element, 'click', this.onclickListener);
> > -    Event.observe(this.element, 'mouseover', this.mouseoverListener);
> > -    Event.observe(this.element, 'mouseout', this.mouseoutListener);
> > -    if (this.options.externalControl) {
> > -      Event.observe(this.options.externalControl, 'click', 
> > this.onclickListener);
> > -      Event.observe(this.options.externalControl, 'mouseover', 
> > this.mouseoverListener);
> > -      Event.observe(this.options.externalControl, 'mouseout', 
> > this.mouseoutListener);
> > -    }
> > -  },
> > -  enterEditMode: function(evt) {
> > -    if (this.saving) return;
> > -    if (this.editing) return;
> > -    this.editing = true;
> > -    this.onEnterEditMode();
> > -    if (this.options.externalControl) {
> > -      Element.hide(this.options.externalControl);
> > +    this._boundCancelHandler = this.handleFormCancellation.bind(this);
> > +    this._boundComplete = (this.options.onComplete || 
> > Prototype.emptyFunction).bind(this);
> > +    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
> > +    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
> > +    this._boundWrapperHandler = this.wrapUp.bind(this);
> > +    this.registerListeners();
> > +  },
> > +  checkForEscapeOrReturn: function(e) {
> > +    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
> > +    if (Event.KEY_ESC == e.keyCode)
> > +      this.handleFormCancellation(e);
> > +    else if (Event.KEY_RETURN == e.keyCode)
> > +      this.handleFormSubmission(e);
> > +  },
> > +  createControl: function(mode, handler, extraClasses) {
> > +    var control = this.options[mode + 'Control'];
> > +    var text = this.options[mode + 'Text'];
> > +    if ('button' == control) {
> > +      var btn = document.createElement('input');
> > +      btn.type = 'submit';
> > +      btn.value = text;
> > +      btn.className = 'editor_' + mode + '_button';
> > +      if ('cancel' == mode)
> > +        btn.onclick = this._boundCancelHandler;
> > +      this._form.appendChild(btn);
> > +      this._controls[mode] = btn;
> > +    } else if ('link' == control) {
> > +      var link = document.createElement('a');
> > +      link.href = '#';
> > +      link.appendChild(document.createTextNode(text));
> > +      link.onclick = 'cancel' == mode ? this._boundCancelHandler : 
> > this._boundSubmitHandler;
> > +      link.className = 'editor_' + mode + '_link';
> > +      if (extraClasses)
> > +        link.className += ' ' + extraClasses;
> > +      this._form.appendChild(link);
> > +      this._controls[mode] = link;
> >      }
> > -    Element.hide(this.element);
> > -    this.createForm();
> > -    this.element.parentNode.insertBefore(this.form, this.element);
> > -    if (!this.options.loadTextURL) 
> > Field.scrollFreeActivate(this.editField);
> > -    // stop the event to avoid a page refresh in Safari
> > -    if (evt) {
> > -      Event.stop(evt);
> > -    }
> > -    return false;
> > +  },
> > +  createEditField: function() {
> > +    var text = (this.options.loadTextURL ? this.options.loadingText : 
> > this.getText());
> > +    var fld;
> > +    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
> > +      fld = document.createElement('input');
> > +      fld.type = 'text';
> > +      var size = this.options.size || this.options.cols || 0;
> > +      if (0 < size) fld.size = size;
> > +    } else {
> > +      fld = document.createElement('textarea');
> > +      fld.rows = (1 >= this.options.rows ? this.options.autoRows : 
> > this.options.rows);
> > +      fld.cols = this.options.cols || 40;
> > +    }
> > +    fld.name = this.options.paramName;
> > +    fld.value = text; // No HTML breaks conversion anymore
> > +    fld.className = 'editor_field';
> > +    if (this.options.submitOnBlur)
> > +      fld.onblur = this._boundSubmitHandler;
> > +    this._controls.editor = fld;
> > +    if (this.options.loadTextURL)
> > +      this.loadExternalText();
> > +    this._form.appendChild(this._controls.editor);
> >    },
> >    createForm: function() {
> > -    this.form = document.createElement("form");
> > -    this.form.id = this.options.formId;
> > -    Element.addClassName(this.form, this.options.formClassName)
> > -    this.form.onsubmit = this.onSubmit.bind(this);
> > -
> > +    var ipe = this;
> > +    function addText(mode, condition) {
> > +      var text = ipe.options['text' + mode + 'Controls'];
> > +      if (!text || condition === false) return;
> > +      ipe._form.appendChild(document.createTextNode(text));
> > +    };
> > +    this._form = $(document.createElement('form'));
> > +    this._form.id = this.options.formId;
> > +    this._form.addClassName(this.options.formClassName);
> > +    this._form.onsubmit = this._boundSubmitHandler;
> >      this.createEditField();
> > -
> > -    if (this.options.textarea) {
> > -      var br = document.createElement("br");
> > -      this.form.appendChild(br);
> > -    }
> > -
> > -    if (this.options.textBeforeControls)
> > -      
> > this.form.appendChild(document.createTextNode(this.options.textBeforeControls));
> > -
> > -    if (this.options.okButton) {
> > -      var okButton = document.createElement("input");
> > -      okButton.type = "submit";
> > -      okButton.value = this.options.okText;
> > -      okButton.className = 'editor_ok_button';
> > -      this.form.appendChild(okButton);
> > -    }
> > -
> > -    if (this.options.okLink) {
> > -      var okLink = document.createElement("a");
> > -      okLink.href = "#";
> > -      okLink.appendChild(document.createTextNode(this.options.okText));
> > -      okLink.onclick = this.onSubmit.bind(this);
> > -      okLink.className = 'editor_ok_link';
> > -      this.form.appendChild(okLink);
> > -    }
> > -
> > -    if (this.options.textBetweenControls &&
> > -      (this.options.okLink || this.options.okButton) &&
> > -      (this.options.cancelLink || this.options.cancelButton))
> > -      
> > this.form.appendChild(document.createTextNode(this.options.textBetweenControls));
> > -
> > -    if (this.options.cancelButton) {
> > -      var cancelButton = document.createElement("input");
> > -      cancelButton.type = "submit";
> > -      cancelButton.value = this.options.cancelText;
> > -      cancelButton.onclick = this.onclickCancel.bind(this);
> > -      cancelButton.className = 'editor_cancel_button';
> > -      this.form.appendChild(cancelButton);
> > -    }
> > -
> > -    if (this.options.cancelLink) {
> > -      var cancelLink = document.createElement("a");
> > -      cancelLink.href = "#";
> > -      
> > cancelLink.appendChild(document.createTextNode(this.options.cancelText));
> > -      cancelLink.onclick = this.onclickCancel.bind(this);
> > -      cancelLink.className = 'editor_cancel editor_cancel_link';
> > -      this.form.appendChild(cancelLink);
> > -    }
> > -
> > -    if (this.options.textAfterControls)
> > -      
> > this.form.appendChild(document.createTextNode(this.options.textAfterControls));
> > +    if ('textarea' == this._controls.editor.tagName.toLowerCase())
> > +      this._form.appendChild(document.createElement('br'));
> > +    if (this.options.onFormCustomization)
> > +      this.options.onFormCustomization(this, this._form);
> > +    addText('Before', this.options.okControl || 
> > this.options.cancelControl);
> > +    this.createControl('ok', this._boundSubmitHandler);
> > +    addText('Between', this.options.okControl && 
> > this.options.cancelControl);
> > +    this.createControl('cancel', this._boundCancelHandler, 
> > 'editor_cancel');
> > +    addText('After', this.options.okControl || this.options.cancelControl);
> > +  },
> > +  destroy: function() {
> > +    if (this._oldInnerHTML)
> > +      this.element.innerHTML = this._oldInnerHTML;
> > +    this.leaveEditMode();
> > +    this.unregisterListeners();
> >    },
> > -  hasHTMLLineBreaks: function(string) {
> > -    if (!this.options.handleLineBreaks) return false;
> > -    return string.match(/<br/i) || string.match(/<p>/i);
> > +  enterEditMode: function(e) {
> > +    if (this._saving || this._editing) return;
> > +    this._editing = true;
> > +    this.triggerCallback('onEnterEditMode');
> > +    if (this.options.externalControl)
> > +      this.options.externalControl.hide();
> > +    this.element.hide();
> > +    this.createForm();
> > +    this.element.parentNode.insertBefore(this._form, this.element);
> > +    if (!this.options.loadTextURL)
> > +      this.postProcessEditField();
> > +    if (e) Event.stop(e);
> > +  },
> > +  enterHover: function(e) {
> > +    if (this.options.hoverClassName)
> > +      this.element.addClassName(this.options.hoverClassName);
> > +    if (this._saving) return;
> > +    this.triggerCallback('onEnterHover');
> >    },
> > -  convertHTMLLineBreaks: function(string) {
> > -    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, 
> > "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
> > +  getText: function() {
> > +    return this.element.innerHTML;
> >    },
> > -  createEditField: function() {
> > -    var text;
> > -    if(this.options.loadTextURL) {
> > -      text = this.options.loadingText;
> > +  handleAJAXFailure: function(transport) {
> > +    this.triggerCallback('onFailure', transport);
> > +    if (this._oldInnerHTML) {
> > +      this.element.innerHTML = this._oldInnerHTML;
> > +      this._oldInnerHTML = null;
> > +    }
> > +  },
> > +  handleFormCancellation: function(e) {
> > +    this.wrapUp();
> > +    if (e) Event.stop(e);
> > +  },
> > +  handleFormSubmission: function(e) {
> > +    var form = this._form;
> > +    var value = $F(this._controls.editor);
> > +    this.prepareSubmission();
> > +    var params = this.options.callback(form, value) || '';
> > +    if (Object.isString(params))
> > +      params = params.toQueryParams();
> > +    params.editorId = this.element.id;
> > +    if (this.options.htmlResponse) {
> > +      var options = Object.extend({ evalScripts: true }, 
> > this.options.ajaxOptions);
> > +      Object.extend(options, {
> > +        parameters: params,
> > +        onComplete: this._boundWrapperHandler,
> > +        onFailure: this._boundFailureHandler
> > +      });
> > +      new Ajax.Updater({ success: this.element }, this.url, options);
> >      } else {
> > -      text = this.getText();
> > +      var options = Object.extend({ method: 'get' }, 
> > this.options.ajaxOptions);
> > +      Object.extend(options, {
> > +        parameters: params,
> > +        onComplete: this._boundWrapperHandler,
> > +        onFailure: this._boundFailureHandler
> > +      });
> > +      new Ajax.Request(this.url, options);
> >      }
> > -
> > -    var obj = this;
> > -
> > -    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
> > -      this.options.textarea = false;
> > -      var textField = document.createElement("input");
> > -      textField.obj = this;
> > -      textField.type = "text";
> > -      textField.name = this.options.paramName;
> > -      textField.value = text;
> > -      textField.style.backgroundColor = this.options.highlightcolor;
> > -      textField.className = 'editor_field';
> > -      var size = this.options.size || this.options.cols || 0;
> > -      if (size != 0) textField.size = size;
> > -      if (this.options.submitOnBlur)
> > -        textField.onblur = this.onSubmit.bind(this);
> > -      this.editField = textField;
> > -    } else {
> > -      this.options.textarea = true;
> > -      var textArea = document.createElement("textarea");
> > -      textArea.obj = this;
> > -      textArea.name = this.options.paramName;
> > -      textArea.value = this.convertHTMLLineBreaks(text);
> > -      textArea.rows = this.options.rows;
> > -      textArea.cols = this.options.cols || 40;
> > -      textArea.className = 'editor_field';
> > -      if (this.options.submitOnBlur)
> > -        textArea.onblur = this.onSubmit.bind(this);
> > -      this.editField = textArea;
> > -    }
> > -
> > -    if(this.options.loadTextURL) {
> > -      this.loadExternalText();
> > -    }
> > -    this.form.appendChild(this.editField);
> > +    if (e) Event.stop(e);
> >    },
> > -  getText: function() {
> > -    return this.element.innerHTML;
> > +  leaveEditMode: function() {
> > +    this.element.removeClassName(this.options.savingClassName);
> > +    this.removeForm();
> > +    this.leaveHover();
> > +    this.element.style.backgroundColor = this._originalBackground;
> > +    this.element.show();
> > +    if (this.options.externalControl)
> > +      this.options.externalControl.show();
> > +    this._saving = false;
> > +    this._editing = false;
> > +    this._oldInnerHTML = null;
> > +    this.triggerCallback('onLeaveEditMode');
> > +  },
> > +  leaveHover: function(e) {
> > +    if (this.options.hoverClassName)
> > +      this.element.removeClassName(this.options.hoverClassName);
> > +    if (this._saving) return;
> > +    this.triggerCallback('onLeaveHover');
> >    },
> >    loadExternalText: function() {
> > -    Element.addClassName(this.form, this.options.loadingClassName);
> > -    this.editField.disabled = true;
> > -    new Ajax.Request(
> > -      this.options.loadTextURL,
> > -      Object.extend({
> > -        asynchronous: true,
> > -        onComplete: this.onLoadedExternalText.bind(this)
> > -      }, this.options.ajaxOptions)
> > -    );
> > -  },
> > -  onLoadedExternalText: function(transport) {
> > -    Element.removeClassName(this.form, this.options.loadingClassName);
> > -    this.editField.disabled = false;
> > -    this.editField.value = transport.responseText.stripTags();
> > -    Field.scrollFreeActivate(this.editField);
> > +    this._form.addClassName(this.options.loadingClassName);
> > +    this._controls.editor.disabled = true;
> > +    var options = Object.extend({ method: 'get' }, 
> > this.options.ajaxOptions);
> > +    Object.extend(options, {
> > +      parameters: 'editorId=' + encodeURIComponent(this.element.id),
> > +      onComplete: Prototype.emptyFunction,
> > +      onSuccess: function(transport) {
> > +        this._form.removeClassName(this.options.loadingClassName);
> > +        var text = transport.responseText;
> > +        if (this.options.stripLoadedTextTags)
> > +          text = text.stripTags();
> > +        this._controls.editor.value = text;
> > +        this._controls.editor.disabled = false;
> > +        this.postProcessEditField();
> > +      }.bind(this),
> > +      onFailure: this._boundFailureHandler
> > +    });
> > +    new Ajax.Request(this.options.loadTextURL, options);
> >    },
> > -  onclickCancel: function() {
> > -    this.onComplete();
> > -    this.leaveEditMode();
> > -    return false;
> > +  postProcessEditField: function() {
> > +    var fpc = this.options.fieldPostCreation;
> > +    if (fpc)
> > +      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
> > +  },
> > +  prepareOptions: function() {
> > +    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
> > +    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
> > +    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
> > +      Object.extend(this.options, defs);
> > +    }.bind(this));
> >    },
> > -  onFailure: function(transport) {
> > -    this.options.onFailure(transport);
> > -    if (this.oldInnerHTML) {
> > -      this.element.innerHTML = this.oldInnerHTML;
> > -      this.oldInnerHTML = null;
> > -    }
> > -    return false;
> > -  },
> > -  onSubmit: function() {
> > -    // onLoading resets these so we need to save them away for the Ajax 
> > call
> > -    var form = this.form;
> > -    var value = this.editField.value;
> > -
> > -    // do this first, sometimes the ajax call returns before we get a 
> > chance to switch on Saving...
> > -    // which means this will actually switch on Saving... *after* we've 
> > left edit mode causing Saving...
> > -    // to be displayed indefinitely
> > -    this.onLoading();
> > -
> > -    if (this.options.evalScripts) {
> > -      new Ajax.Request(
> > -        this.url, Object.extend({
> > -          parameters: this.options.callback(form, value),
> > -          onComplete: this.onComplete.bind(this),
> > -          onFailure: this.onFailure.bind(this),
> > -          asynchronous:true,
> > -          evalScripts:true
> > -        }, this.options.ajaxOptions));
> > -    } else  {
> > -      new Ajax.Updater(
> > -        { success: this.element,
> > -          // don't update on failure (this could be an option)
> > -          failure: null },
> > -        this.url, Object.extend({
> > -          parameters: this.options.callback(form, value),
> > -          onComplete: this.onComplete.bind(this),
> > -          onFailure: this.onFailure.bind(this)
> > -        }, this.options.ajaxOptions));
> > -    }
> > -    // stop the event to avoid a page refresh in Safari
> > -    if (arguments.length > 1) {
> > -      Event.stop(arguments[0]);
> > -    }
> > -    return false;
> > -  },
> > -  onLoading: function() {
> > -    this.saving = true;
> > +  prepareSubmission: function() {
> > +    this._saving = true;
> >      this.removeForm();
> >      this.leaveHover();
> >      this.showSaving();
> >    },
> > -  showSaving: function() {
> > -    this.oldInnerHTML = this.element.innerHTML;
> > -    this.element.innerHTML = this.options.savingText;
> > -    Element.addClassName(this.element, this.options.savingClassName);
> > -    this.element.style.backgroundColor = this.originalBackground;
> > -    Element.show(this.element);
> > +  registerListeners: function() {
> > +    this._listeners = { };
> > +    var listener;
> > +    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
> > +      listener = this[pair.value].bind(this);
> > +      this._listeners[pair.key] = listener;
> > +      if (!this.options.externalControlOnly)
> > +        this.element.observe(pair.key, listener);
> > +      if (this.options.externalControl)
> > +        this.options.externalControl.observe(pair.key, listener);
> > +    }.bind(this));
> >    },
> >    removeForm: function() {
> > -    if(this.form) {
> > -      if (this.form.parentNode) Element.remove(this.form);
> > -      this.form = null;
> > -    }
> > -  },
> > -  enterHover: function() {
> > -    if (this.saving) return;
> > -    this.element.style.backgroundColor = this.options.highlightcolor;
> > -    if (this.effect) {
> > -      this.effect.cancel();
> > -    }
> > -    Element.addClassName(this.element, this.options.hoverClassName)
> > -  },
> > -  leaveHover: function() {
> > -    if (this.options.backgroundColor) {
> > -      this.element.style.backgroundColor = this.oldBackground;
> > -    }
> > -    Element.removeClassName(this.element, this.options.hoverClassName)
> > -    if (this.saving) return;
> > -    this.effect = new Effect.Highlight(this.element, {
> > -      startcolor: this.options.highlightcolor,
> > -      endcolor: this.options.highlightendcolor,
> > -      restorecolor: this.originalBackground
> > -    });
> > +    if (!this._form) return;
> > +    this._form.remove();
> > +    this._form = null;
> > +    this._controls = { };
> >    },
> > -  leaveEditMode: function() {
> > -    Element.removeClassName(this.element, this.options.savingClassName);
> > -    this.removeForm();
> > -    this.leaveHover();
> > -    this.element.style.backgroundColor = this.originalBackground;
> > -    Element.show(this.element);
> > -    if (this.options.externalControl) {
> > -      Element.show(this.options.externalControl);
> > -    }
> > -    this.editing = false;
> > -    this.saving = false;
> > -    this.oldInnerHTML = null;
> > -    this.onLeaveEditMode();
> > +  showSaving: function() {
> > +    this._oldInnerHTML = this.element.innerHTML;
> > +    this.element.innerHTML = this.options.savingText;
> > +    this.element.addClassName(this.options.savingClassName);
> > +    this.element.style.backgroundColor = this._originalBackground;
> > +    this.element.show();
> > +  },
> > +  triggerCallback: function(cbName, arg) {
> > +    if ('function' == typeof this.options[cbName]) {
> > +      this.options[cbName](this, arg);
> > +    }
> > +  },
> > +  unregisterListeners: function() {
> > +    $H(this._listeners).each(function(pair) {
> > +      if (!this.options.externalControlOnly)
> > +        this.element.stopObserving(pair.key, pair.value);
> > +      if (this.options.externalControl)
> > +        this.options.externalControl.stopObserving(pair.key, pair.value);
> > +    }.bind(this));
> >    },
> > -  onComplete: function(transport) {
> > +  wrapUp: function(transport) {
> >      this.leaveEditMode();
> > -    this.options.onComplete.bind(this)(transport, this.element);
> > +    // Can't use triggerCallback due to backward compatibility: requires
> > +    // binding + direct element
> > +    this._boundComplete(transport, this.element);
> > +  }
> > +});
> > +
> > +Object.extend(Ajax.InPlaceEditor.prototype, {
> > +  dispose: Ajax.InPlaceEditor.prototype.destroy
> > +});
> > +
> > +Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
> > +  initialize: function($super, element, url, options) {
> > +    this._extraDefaultOptions = 
> > Ajax.InPlaceCollectionEditor.DefaultOptions;
> > +    $super(element, url, options);
> >    },
> > -  onEnterEditMode: function() {},
> > -  onLeaveEditMode: function() {},
> > -  dispose: function() {
> > -    if (this.oldInnerHTML) {
> > -      this.element.innerHTML = this.oldInnerHTML;
> > -    }
> > -    this.leaveEditMode();
> > -    Event.stopObserving(this.element, 'click', this.onclickListener);
> > -    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
> > -    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
> > -    if (this.options.externalControl) {
> > -      Event.stopObserving(this.options.externalControl, 'click', 
> > this.onclickListener);
> > -      Event.stopObserving(this.options.externalControl, 'mouseover', 
> > this.mouseoverListener);
> > -      Event.stopObserving(this.options.externalControl, 'mouseout', 
> > this.mouseoutListener);
> > +
> > +  createEditField: function() {
> > +    var list = document.createElement('select');
> > +    list.name = this.options.paramName;
> > +    list.size = 1;
> > +    this._controls.editor = list;
> > +    this._collection = this.options.collection || [];
> > +    if (this.options.loadCollectionURL)
> > +      this.loadCollection();
> > +    else
> > +      this.checkForExternalText();
> > +    this._form.appendChild(this._controls.editor);
> > +  },
> > +
> > +  loadCollection: function() {
> > +    this._form.addClassName(this.options.loadingClassName);
> > +    this.showLoadingText(this.options.loadingCollectionText);
> > +    var options = Object.extend({ method: 'get' }, 
> > this.options.ajaxOptions);
> > +    Object.extend(options, {
> > +      parameters: 'editorId=' + encodeURIComponent(this.element.id),
> > +      onComplete: Prototype.emptyFunction,
> > +      onSuccess: function(transport) {
> > +        var js = transport.responseText.strip();
> > +        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
> > +          throw 'Server returned an invalid collection representation.';
> > +        this._collection = eval(js);
> > +        this.checkForExternalText();
> > +      }.bind(this),
> > +      onFailure: this.onFailure
> > +    });
> > +    new Ajax.Request(this.options.loadCollectionURL, options);
> > +  },
> > +
> > +  showLoadingText: function(text) {
> > +    this._controls.editor.disabled = true;
> > +    var tempOption = this._controls.editor.firstChild;
> > +    if (!tempOption) {
> > +      tempOption = document.createElement('option');
> > +      tempOption.value = '';
> > +      this._controls.editor.appendChild(tempOption);
> > +      tempOption.selected = true;
> >      }
> > +    tempOption.update((text || '').stripScripts().stripTags());
> > +  },
> > +
> > +  checkForExternalText: function() {
> > +    this._text = this.getText();
> > +    if (this.options.loadTextURL)
> > +      this.loadExternalText();
> > +    else
> > +      this.buildOptionList();
> > +  },
> > +
> > +  loadExternalText: function() {
> > +    this.showLoadingText(this.options.loadingText);
> > +    var options = Object.extend({ method: 'get' }, 
> > this.options.ajaxOptions);
> > +    Object.extend(options, {
> > +      parameters: 'editorId=' + encodeURIComponent(this.element.id),
> > +      onComplete: Prototype.emptyFunction,
> > +      onSuccess: function(transport) {
> > +        this._text = transport.responseText.strip();
> > +        this.buildOptionList();
> > +      }.bind(this),
> > +      onFailure: this.onFailure
> > +    });
> > +    new Ajax.Request(this.options.loadTextURL, options);
> > +  },
> > +
> > +  buildOptionList: function() {
> > +    this._form.removeClassName(this.options.loadingClassName);
> > +    this._collection = this._collection.map(function(entry) {
> > +      return 2 === entry.length ? entry : [entry, entry].flatten();
> > +    });
> > +    var marker = ('value' in this.options) ? this.options.value : 
> > this._text;
> > +    var textFound = this._collection.any(function(entry) {
> > +      return entry[0] == marker;
> > +    }.bind(this));
> > +    this._controls.editor.update('');
> > +    var option;
> > +    this._collection.each(function(entry, index) {
> > +      option = document.createElement('option');
> > +      option.value = entry[0];
> > +      option.selected = textFound ? entry[0] == marker : 0 == index;
> > +      option.appendChild(document.createTextNode(entry[1]));
> > +      this._controls.editor.appendChild(option);
> > +    }.bind(this));
> > +    this._controls.editor.disabled = false;
> > +    Field.scrollFreeActivate(this._controls.editor);
> >    }
> > +});
> > +
> > +//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
> > +//**** This only  exists for a while,  in order to  let ****
> > +//**** users adapt to  the new API.  Read up on the new ****
> > +//**** API and convert your code to it ASAP!            ****
> > +
> > +Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = 
> > function(options) {
> > +  if (!options) return;
> > +  function fallback(name, expr) {
> > +    if (name in options || expr === undefined) return;
> > +    options[name] = expr;
> > +  };
> > +  fallback('cancelControl', (options.cancelLink ? 'link' : 
> > (options.cancelButton ? 'button' :
> > +    options.cancelLink == options.cancelButton == false ? false : 
> > undefined)));
> > +  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 
> > 'button' :
> > +    options.okLink == options.okButton == false ? false : undefined)));
> > +  fallback('highlightColor', options.highlightcolor);
> > +  fallback('highlightEndColor', options.highlightendcolor);
> >  };
> >
> > -Ajax.InPlaceCollectionEditor = Class.create();
> > -Object.extend(Ajax.InPlaceCollectionEditor.prototype, 
> > Ajax.InPlaceEditor.prototype);
> > -Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
> > -  createEditField: function() {
> > -    if (!this.cached_selectTag) {
> > -      var selectTag = document.createElement("select");
> > -      var collection = this.options.collection || [];
> > -      var optionTag;
> > -      collection.each(function(e,i) {
> > -        optionTag = document.createElement("option");
> > -        optionTag.value = (e instanceof Array) ? e[0] : e;
> > -        if((typeof this.options.value == 'undefined') &&
> > -          ((e instanceof Array) ? this.element.innerHTML == e[1] : e == 
> > optionTag.value)) optionTag.selected = true;
> > -        if(this.options.value==optionTag.value) optionTag.selected = true;
> > -        optionTag.appendChild(document.createTextNode((e instanceof Array) 
> > ? e[1] : e));
> > -        selectTag.appendChild(optionTag);
> > -      }.bind(this));
> > -      this.cached_selectTag = selectTag;
> > -    }
> > -
> > -    this.editField = this.cached_selectTag;
> > -    if(this.options.loadTextURL) this.loadExternalText();
> > -    this.form.appendChild(this.editField);
> > -    this.options.callback = function(form, value) {
> > -      return "value=" + encodeURIComponent(value);
> > -    }
> > +Object.extend(Ajax.InPlaceEditor, {
> > +  DefaultOptions: {
> > +    ajaxOptions: { },
> > +    autoRows: 3,                                // Use when multi-line w/ 
> > rows == 1
> > +    cancelControl: 'link',                      // 'link'|'button'|false
> > +    cancelText: 'cancel',
> > +    clickToEditText: 'Click to edit',
> > +    externalControl: null,                      // id|elt
> > +    externalControlOnly: false,
> > +    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
> > +    formClassName: 'inplaceeditor-form',
> > +    formId: null,                               // id|elt
> > +    highlightColor: '#ffff99',
> > +    highlightEndColor: '#ffffff',
> > +    hoverClassName: '',
> > +    htmlResponse: true,
> > +    loadingClassName: 'inplaceeditor-loading',
> > +    loadingText: 'Loading...',
> > +    okControl: 'button',                        // 'link'|'button'|false
> > +    okText: 'ok',
> > +    paramName: 'value',
> > +    rows: 1,                                    // If 1 and multi-line, 
> > uses autoRows
> > +    savingClassName: 'inplaceeditor-saving',
> > +    savingText: 'Saving...',
> > +    size: 0,
> > +    stripLoadedTextTags: false,
> > +    submitOnBlur: false,
> > +    textAfterControls: '',
> > +    textBeforeControls: '',
> > +    textBetweenControls: ''
> > +  },
> > +  DefaultCallbacks: {
> > +    callback: function(form) {
> > +      return Form.serialize(form);
> > +    },
> > +    onComplete: function(transport, element) {
> > +      // For backward compatibility, this one is bound to the IPE, and 
> > passes
> > +      // the element directly.  It was too often customized, so we don't 
> > break it.
> > +      new Effect.Highlight(element, {
> > +        startcolor: this.options.highlightColor, keepBackgroundImage: true 
> > });
> > +    },
> > +    onEnterEditMode: null,
> > +    onEnterHover: function(ipe) {
> > +      ipe.element.style.backgroundColor = ipe.options.highlightColor;
> > +      if (ipe._effect)
> > +        ipe._effect.cancel();
> > +    },
> > +    onFailure: function(transport, ipe) {
> > +      alert('Error communication with the server: ' + 
> > transport.responseText.stripTags());
> > +    },
> > +    onFormCustomization: null, // Takes the IPE and its generated form, 
> > after editor, before controls.
> > +    onLeaveEditMode: null,
> > +    onLeaveHover: function(ipe) {
> > +      ipe._effect = new Effect.Highlight(ipe.element, {
> > +        startcolor: ipe.options.highlightColor, endcolor: 
> > ipe.options.highlightEndColor,
> > +        restorecolor: ipe._originalBackground, keepBackgroundImage: true
> > +      });
> > +    }
> > +  },
> > +  Listeners: {
> > +    click: 'enterEditMode',
> > +    keydown: 'checkForEscapeOrReturn',
> > +    mouseover: 'enterHover',
> > +    mouseout: 'leaveHover'
> >    }
> >  });
> >
> > +Ajax.InPlaceCollectionEditor.DefaultOptions = {
> > +  loadingCollectionText: 'Loading options...'
> > +};
> > +
> >  // Delayed observer, like Form.Element.Observer,
> >  // but waits for delay after last key input
> >  // Ideal for live-search fields
> >
> > -Form.Element.DelayedObserver = Class.create();
> > -Form.Element.DelayedObserver.prototype = {
> > +Form.Element.DelayedObserver = Class.create({
> >    initialize: function(element, delay, callback) {
> >      this.delay     = delay || 0.5;
> >      this.element   = $(element);
> > @@ -872,4 +962,4 @@
> >      this.timer = null;
> >      this.callback(this.element, $F(this.element));
> >    }
> > -};
> > +});
> >
> > Modified: ofbiz/trunk/framework/images/webapp/images/prototypejs/dragdrop.js
> > URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/prototypejs/dragdrop.js?rev=594033&r1=594032&r2=594033&view=diff
> > ==============================================================================
> > --- ofbiz/trunk/framework/images/webapp/images/prototypejs/dragdrop.js 
> > (original)
> > +++ ofbiz/trunk/framework/images/webapp/images/prototypejs/dragdrop.js Sun 
> > Nov 11 22:14:48 2007
> > @@ -1,4 +1,4 @@
> > -// script.aculo.us dragdrop.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
> > +// script.aculo.us dragdrop.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007
> >
> >  // Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, 
> > http://mir.aculo.us)
> >  //           (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, 
> > [EMAIL PROTECTED])
> > @@ -6,7 +6,7 @@
> >  // script.aculo.us is freely distributable under the terms of an MIT-style 
> > license.
> >  // For details, see the script.aculo.us web site: http://script.aculo.us/
> >
> > -if(typeof Effect == 'undefined')
> > +if(Object.isUndefined(Effect))
> >    throw("dragdrop.js requires including script.aculo.us' effects.js 
> > library");
> >
> >  var Droppables = {
> > @@ -22,14 +22,13 @@
> >        greedy:     true,
> >        hoverclass: null,
> >        tree:       false
> > -    }, arguments[1] || {});
> > +    }, arguments[1] || { });
> >
> >      // cache containers
> >      if(options.containment) {
> >        options._containers = [];
> >        var containment = options.containment;
> > -      if((typeof containment == 'object') &&
> > -        (containment.constructor == Array)) {
> > +      if(Object.isArray(containment)) {
> >          containment.each( function(c) { options._containers.push($(c)) });
> >        } else {
> >          options._containers.push($(containment));
> > @@ -89,21 +88,23 @@
> >
> >    show: function(point, element) {
> >      if(!this.drops.length) return;
> > -    var affected = [];
> > +    var drop, affected = [];
> >
> > -    if(this.last_active) this.deactivate(this.last_active);
> >      this.drops.each( function(drop) {
> >        if(Droppables.isAffected(point, element, drop))
> >          affected.push(drop);
> >      });
> >
> > -    if(affected.length>0) {
> > +    if(affected.length>0)
> >        drop = Droppables.findDeepestChild(affected);
> > +
> > +    if(this.last_active && this.last_active != drop) 
> > this.deactivate(this.last_active);
> > +    if (drop) {
> >        Position.within(drop.element, point[0], point[1]);
> >        if(drop.onHover)
> >          drop.onHover(element, drop.element, Position.overlap(drop.overlap, 
> > drop.element));
> >
> > -      Droppables.activate(drop);
> > +      if (drop != this.last_active) Droppables.activate(drop);
> >      }
> >    },
> >
> > @@ -223,10 +224,7 @@
> >
> >  
> > /*--------------------------------------------------------------------------*/
> >
> > -var Draggable = Class.create();
> > -Draggable._dragging    = {};
> > -
> > -Draggable.prototype = {
> > +var Draggable = Class.create({
> >    initialize: function(element) {
> >      var defaults = {
> >        handle: false,
> > @@ -237,7 +235,7 @@
> >          });
> >        },
> >        endeffect: function(element) {
> > -        var toOpacity = typeof element._opacity == 'number' ? 
> > element._opacity : 1.0;
> > +        var toOpacity = Object.isNumber(element._opacity) ? 
> > element._opacity : 1.0;
> >          new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
> >            queue: {scope:'_draggable', position:'end'},
> >            afterFinish: function(){
> > @@ -255,7 +253,7 @@
> >        delay: 0
> >      };
> >
> > -    if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
> > +    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
> >        Object.extend(defaults, {
> >          starteffect: function(element) {
> >            element._opacity = Element.getOpacity(element);
> > @@ -264,11 +262,11 @@
> >          }
> >        });
> >
> > -    var options = Object.extend(defaults, arguments[1] || {});
> > +    var options = Object.extend(defaults, arguments[1] || { });
> >
> >      this.element = $(element);
> >
> > -    if(options.handle && (typeof options.handle == 'string'))
> > +    if(options.handle && Object.isString(options.handle))
> >        this.handle = this.element.down('.'+options.handle, 0);
> >
> >      if(!this.handle) this.handle = $(options.handle);
> > @@ -281,7 +279,6 @@
> >
> >      Element.makePositioned(this.element); // fix IE
> >
> > -    this.delta    = this.currentDelta();
> >      this.options  = options;
> >      this.dragging = false;
> >
> > @@ -303,7 +300,7 @@
> >    },
> >
> >    initDrag: function(event) {
> > -    if(typeof Draggable._dragging[this.element] != 'undefined' &&
> > +    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
> >        Draggable._dragging[this.element]) return;
> >      if(Event.isLeftClick(event)) {
> >        // abort on form elements, fixes a Firefox issue
> > @@ -326,6 +323,8 @@
> >
> >    startDrag: function(event) {
> >      this.dragging = true;
> > +    if(!this.delta)
> > +      this.delta = this.currentDelta();
> >
> >      if(this.options.zindex) {
> >        this.originalZ = parseInt(Element.getStyle(this.element,'z-index') 
> > || 0);
> > @@ -334,7 +333,9 @@
> >
> >      if(this.options.ghosting) {
> >        this._clone = this.element.cloneNode(true);
> > -      Position.absolutize(this.element);
> > +      this.element._originallyAbsolute = 
> > (this.element.getStyle('position') == 'absolute');
> > +      if (!this.element._originallyAbsolute)
> > +        Position.absolutize(this.element);
> >        this.element.parentNode.insertBefore(this._clone, this.element);
> >      }
> >
> > @@ -404,7 +405,9 @@
> >      }
> >
> >      if(this.options.ghosting) {
> > -      Position.relativize(this.element);
> > +      if (!this.element._originallyAbsolute)
> > +        Position.relativize(this.element);
> > +      delete this.element._originallyAbsolute;
> >        Element.remove(this._clone);
> >        this._clone = null;
> >      }
> > @@ -418,7 +421,7 @@
> >      Draggables.notify('onEnd', this, event);
> >
> >      var revert = this.options.revert;
> > -    if(revert && typeof revert == 'function') revert = 
> > revert(this.element);
> > +    if(revert && Object.isFunction(revert)) revert = revert(this.element);
> >
> >      var d = this.currentDelta();
> >      if(revert && this.options.reverteffect) {
> > @@ -472,15 +475,15 @@
> >      }.bind(this));
> >
> >      if(this.options.snap) {
> > -      if(typeof this.options.snap == 'function') {
> > +      if(Object.isFunction(this.options.snap)) {
> >          p = this.options.snap(p[0],p[1],this);
> >        } else {
> > -      if(this.options.snap instanceof Array) {
> > +      if(Object.isArray(this.options.snap)) {
> >          p = p.map( function(v, i) {
> > -          return Math.round(v/this.options.snap[i])*this.options.snap[i] 
> > }.bind(this))
> > +          return (v/this.options.snap[i]).round()*this.options.snap[i] 
> > }.bind(this))
> >        } else {
> >          p = p.map( function(v) {
> > -          return Math.round(v/this.options.snap)*this.options.snap 
> > }.bind(this))
> > +          return (v/this.options.snap).round()*this.options.snap 
> > }.bind(this))
> >        }
> >      }}
> >
> > @@ -564,12 +567,13 @@
> >      }
> >      return { top: T, left: L, width: W, height: H };
> >    }
> > -}
> > +});
> > +
> > +Draggable._dragging = { };
> >
> >  
> > /*--------------------------------------------------------------------------*/
> >
> > -var SortableObserver = Class.create();
> > -SortableObserver.prototype = {
> > +var SortableObserver = Class.create({
> >    initialize: function(element, observer) {
> >      this.element   = $(element);
> >      this.observer  = observer;
> > @@ -585,12 +589,12 @@
> >      if(this.lastValue != Sortable.serialize(this.element))
> >        this.observer(this.element)
> >    }
> > -}
> > +});
> >
> >  var Sortable = {
> >    SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
> >
> > -  sortables: {},
> > +  sortables: { },
> >
> >    _findRootElement: function(element) {
> >      while (element.tagName.toUpperCase() != "BODY") {
> > @@ -646,7 +650,7 @@
> >
> >        onChange:    Prototype.emptyFunction,
> >        onUpdate:    Prototype.emptyFunction
> > -    }, arguments[1] || {});
> > +    }, arguments[1] || { });
> >
> >      // clear any old sortable with same element
> >      this.destroy(element);
> > @@ -710,7 +714,7 @@
> >
> >      (options.elements || this.findElements(element, options) || []).each( 
> > function(e,i) {
> >        var handle = options.handles ? $(options.handles[i]) :
> > -        (options.handle ? $(e).getElementsByClassName(options.handle)[0] : 
> > e);
> > +        (options.handle ? $(e).select('.' + options.handle)[0] : e);
> >        options.draggables.push(
> >          new Draggable(e, Object.extend(options_for_draggable, { handle: 
> > handle })));
> >        Droppables.add(e, options_for_droppable);
> > @@ -870,7 +874,7 @@
> >        only: sortableOptions.only,
> >        name: element.id,
> >        format: sortableOptions.format
> > -    }, arguments[1] || {});
> > +    }, arguments[1] || { });
> >
> >      var root = {
> >        id: null,
> > @@ -894,7 +898,7 @@
> >
> >    sequence: function(element) {
> >      element = $(element);
> > -    var options = Object.extend(this.options(element), arguments[1] || {});
> > +    var options = Object.extend(this.options(element), arguments[1] || { 
> > });
> >
> >      return $(this.findElements(element, options) || []).map( 
> > function(item) {
> >        return item.id.match(options.format) ? 
> > item.id.match(options.format)[1] : '';
> > @@ -903,9 +907,9 @@
> >
> >    setSequence: function(element, new_sequence) {
> >      element = $(element);
> > -    var options = Object.extend(this.options(element), arguments[2] || {});
> > +    var options = Object.extend(this.options(element), arguments[2] || { 
> > });
> >
> > -    var nodeMap = {};
> > +    var nodeMap = { };
> >      this.findElements(element, options).each( function(n) {
> >          if (n.id.match(options.format))
> >              nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
> > @@ -923,7 +927,7 @@
> >
> >    serialize: function(element) {
> >      element = $(element);
> > -    var options = Object.extend(Sortable.options(element), arguments[1] || 
> > {});
> > +    var options = Object.extend(Sortable.options(element), arguments[1] || 
> > { });
> >      var name = encodeURIComponent(
> >        (arguments[1] && arguments[1].name) ? arguments[1].name : 
> > element.id);
> >
> >
> >
> >
> >
> >
>

Reply via email to