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); > > > > > > > > > > > > >
