Author: nbelaevski
Date: 2008-03-28 01:03:53 -0400 (Fri, 28 Mar 2008)
New Revision: 7347
Added:
trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/datafilterslider.js
Removed:
trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculous-js-1.6.5/
Modified:
trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java
trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx
trunk/ui/dataFilterSlider/src/test/java/org/richfaces/component/DataFilterSliderComponentTest.java
trunk/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/Control.js
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
Log:
http://jira.jboss.com/jira/browse/RF-2808
Modified:
trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java
===================================================================
---
trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java 2008-03-28
05:03:53 UTC (rev 7347)
@@ -102,7 +102,7 @@
JSReference reference = new JSReference(options.toString());
- JSFunction function = new JSFunction("Control.Slider");
+ JSFunction function = new JSFunction("Richfaces.DFSControl.Slider");
function.addParameter(clientId + "slider-handle");
function.addParameter(clientId + "slider-track");
function.addParameter(reference);
Added:
trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/datafilterslider.js
===================================================================
---
trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/datafilterslider.js
(rev 0)
+++
trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/datafilterslider.js 2008-03-28
05:03:53 UTC (rev 7347)
@@ -0,0 +1,362 @@
+// script.aculo.us slider.js v1.6.5, Wed Nov 08 14:17:49 CET 2006
+
+// Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs
+//
+// 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 (!window.Richfaces) {
+ window.Richfaces = {};
+}
+Richfaces.DFSControl = {};
+Richfaces.DFSControl.Slider = Class.create();
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Richfaces.DFSControl.Slider.prototype = {
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if(handle instanceof Array) {
+ this.handles = handle.collect( function(e) { return $(e) });
+ } else {
+ this.handles = [$(handle)];
+ }
+
+ this.track = $(track);
+ this.options = options || {};
+ this.flag = false;
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0 });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s)
}) : false;
+ this.options.startSpan = $(this.options.startSpan || null);
+ this.options.endSpan = $(this.options.endSpan || null);
+ this.sliderInput = $(this.options.sliderInputId);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if(this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) :
false;
+ if (this.allowedValues && this.allowedValues.length > 0) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ Event.observe(this.track, "mousedown", this.eventMouseDown);
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles[0].style.visibility="hidden";
+ setTimeout(this.initHandles.bind(this), 100);
+ this.initialized = true;
+
+ },
+ initHandles: function() {
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight :
this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ var slider = this;
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (slider.options.sliderValue instanceof Array ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ Element.makePositioned(h); // fix IE
+ Event.observe(h, "mousedown", slider.eventMouseDown);
+ });
+ this.handles[0].style.visibility="";
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if (this.allowedValues && this.allowedValues.length > 0) {
+ if(value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if(value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if(currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if(value > this.range.end) {
+ return this.range.end;
+ } else if(value < this.range.start) {
+ return this.range.start;
+ } else {
+ return parseInt(value);
+ }
+ },
+ setValue: function(sliderValue, handleIdx){
+ if(!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if(this.initialized && this.restricted) {
+ if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ sliderValue = this.values[handleIdx-1];
+ if((handleIdx < (this.handles.length-1)) &&
(sliderValue>this.values[handleIdx+1]))
+ sliderValue = this.values[handleIdx+1];
+ }
+ sliderValue = this.getNearestValue(sliderValue);
+ this.values[handleIdx] = sliderValue;
+ this.value = this.values[0]; // assure backwards compat
+
+ if (!isNaN(sliderValue)) {
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+ this.translateToPx(sliderValue);
+ }
+
+ this.drawSpans();
+ if((!this.dragging || !this.event)&&this.flag) this.updateFinished();
+ this.flag = true;
+ },
+ setValueBy: function(delta, handleIdx) {
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+ handleIdx || this.activeHandleIdx || 0);
+ },
+ translateToPx: function(value) {
+ return Math.round(
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+ (value - this.range.start)) + "px";
+ },
+ translateToValue: function(offset) {
+ return ((offset/(this.trackLength-this.handleLength) *
+ (this.range.end-this.range.start)) + this.range.start);
+ },
+ getRange: function(range) {
+ var v = this.values.sortBy(Prototype.K);
+ range = range || 0;
+ return $R(v[range],v[range+1]);
+ },
+ minimumOffset: function(){
+ return(this.isVertical() ? this.alignY : this.alignX);
+ },
+ maximumOffset: function(){
+ return(this.isVertical() ?
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+ this.track.style.width.replace(/px$/,"")) - this.alignY);
+ },
+ isVertical: function(){
+ return (this.axis == 'vertical');
+ },
+ drawSpans: function() {
+ var slider = this;
+ if(this.spans)
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r],
slider.getRange(r)) });
+ if(this.options.startSpan)
+ this.setSpan(this.options.startSpan,
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+ if(this.options.endSpan)
+ this.setSpan(this.options.endSpan,
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() :
this.value, this.maximum));
+ },
+ setSpan: function(span, range) {
+ if(this.isVertical()) {
+ span.style.top = this.translateToPx(range.start);
+ span.style.height = this.translateToPx(range.end - range.start +
this.range.start);
+ } else {
+ span.style.left = this.translateToPx(range.start);
+
+ this.handles.each(function(h) {
+ span.style.width = $(h.id).offsetLeft + 'px';
+ });
+
+ //original code from prototype 1.6.5
+ //span.style.width = this.translateToPx(range.end - range.start +
this.range.start);
+ }
+ },
+ updateStyles: function() {
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+ Element.addClassName(this.activeHandle, 'selected');
+ },
+ startDrag: function(event) {
+ if(Event.isLeftClick(event)) {
+ if(!this.disabled){
+ this.active = true;
+
+ var handle = Event.element(event);
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var track = handle;
+ if(track==this.track) {
+ var offsets = Position.cumulativeOffset(this.track);
+ this.event = event;
+ this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] :
pointer[0]-offsets[0])-(this.handleLength/2)
+ ));
+ var offsets = Position.cumulativeOffset(this.activeHandle);
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ } else {
+ // find the handle (prevents issues with Safari)
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ handle = handle.parentNode;
+
+ if(this.handles.indexOf(handle)!=-1) {
+ this.activeHandle = handle;
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.updateStyles();
+
+ var offsets = Position.cumulativeOffset(this.activeHandle);
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ }
+ }
+ }
+ Event.stop(event);
+ }
+ },
+ update: function(event) {
+ if(this.active) {
+ if(!this.dragging) this.dragging = true;
+ this.draw(event);
+
+ // fix AppleWebKit rendering
+ if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+ Event.stop(event);
+ }
+ },
+ draw: function(event) {
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var offsets = Position.cumulativeOffset(this.track);
+ pointer[0] -= this.offsetX + offsets[0];
+ pointer[1] -= this.offsetY + offsets[1];
+ this.event = event;
+ var value = this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] );
+ if(this.invokeEvent("slide",event,value,this.sliderInput)){
+ this.setValue(value);
+ }
+ if(this.initialized) {
+ if (this.options.onSlideSubmit) {
+ this.options.onSlideSubmit(event,this.values.length>1 ? this.values :
this.values[0], this);
+ }
+ }
+
+ },
+ endDrag: function(event) {
+ if(this.active && this.dragging) {
+ this.finishDrag(event, true);
+ Event.stop(event);
+ }
+ this.active = false;
+ this.dragging = false;
+ },
+ finishDrag: function(event, success) {
+ this.active = false;
+ this.dragging = false;
+
+ this.updateFinished(event);
+ },
+ updateFinished: function(event) {
+ if(this.initialized) {
+ var value = this.values.length>1 ? this.values : this.values[0];
+ if (this.options.onSlideSubmit) {
+ this.options.onSlideSubmit(event, value, this);
+ }
+ }
+
+ this.event = null;
+ },
+
+ valueChanged: function(event,value){
+ if(this.invokeEvent("change",event,value,this.sliderInput)){
+ this.setValue(value);
+ }
+ },
+
+ invokeEvent: function(eventName, event, value, element) {
+
+ var eventFunction = this.options['on'+eventName];
+ var result;
+
+ if (eventFunction)
+ {
+ var eventObj;
+
+ if (event)
+ {
+ eventObj = event;
+ }
+ else if( document.createEventObject )
+ {
+ eventObj = document.createEventObject();
+ }
+ else if( document.createEvent )
+ {
+ eventObj = document.createEvent('Events');
+ eventObj.initEvent( eventName, true, false );
+ }
+
+ eventObj.rich = {component:this};
+ eventObj.rich.value = value;
+
+ try
+ {
+ result = eventFunction.call(element, eventObj);
+ }
+ catch (e) { LOG.warn("Exception: "+e.Message + "\n[on"+eventName +
"]"); }
+
+ }
+
+ if (result!=false) result = true;
+
+ return result;
+ }
+
+}
\ No newline at end of file
Modified: trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx
===================================================================
--- trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx 2008-03-28 04:33:13
UTC (rev 7346)
+++ trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx 2008-03-28 05:03:53
UTC (rev 7347)
@@ -12,7 +12,7 @@
component="org.richfaces.component.UIDataFltrSlider">
<h:styles>css/dataFilterSlider.xcss</h:styles>
- <h:scripts>new org.ajax4jsf.javascript.AjaxScript(),new
org.ajax4jsf.javascript.PrototypeScript(),scripts/scriptaculous-js-1.6.5/src/slider.js</h:scripts>
+ <h:scripts>new org.ajax4jsf.javascript.AjaxScript(),new
org.ajax4jsf.javascript.PrototypeScript(),scripts/datafilterslider.js</h:scripts>
<f:clientid var="clientId"/>
<f:resource name="org.richfaces.renderkit.html.images.SliderArrowImage"
var="arrow" />
Modified:
trunk/ui/dataFilterSlider/src/test/java/org/richfaces/component/DataFilterSliderComponentTest.java
===================================================================
---
trunk/ui/dataFilterSlider/src/test/java/org/richfaces/component/DataFilterSliderComponentTest.java 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/dataFilterSlider/src/test/java/org/richfaces/component/DataFilterSliderComponentTest.java 2008-03-28
05:03:53 UTC (rev 7347)
@@ -81,7 +81,7 @@
javaScripts.add("org.ajax4jsf.javascript.PrototypeScript");
//No Ajax
javaScripts.add("org.ajax4jsf.javascript.AjaxScript");
- javaScripts.add("scripts/scriptaculous-js-1.6.5/src/slider.js");
+ javaScripts.add("scripts/datafilterslider.js");
}
public DataFilterSliderComponentTest(String testName) {
Modified:
trunk/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js
===================================================================
---
trunk/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js 2008-03-28
05:03:53 UTC (rev 7347)
@@ -97,7 +97,7 @@
var disNode = $(clientId + id[1]);
if (node && disNode) {
node.observe("click",
Richfaces.ListShuttle.HANDLERS[id[0]].bindAsEventListener(this));
- this.controlList[i] = new Control(node, disNode, false, false, id[0]);
+ this.controlList[i] = new Richfaces.Control(node, disNode, false, false, id[0]);
}
}
//this.controlListManager();
Modified:
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
===================================================================
---
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java 2008-03-28
05:03:53 UTC (rev 7347)
@@ -347,9 +347,9 @@
writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle
+ "-selection", null);
writer.writeAttribute(HTML.onblur_ATTRIBUTE,
- "Control.onblur(this);", null);
+ "Richfaces.Control.onblur(this);", null);
writer.writeAttribute(HTML.onfocus_ATTRIBUTE,
- "Control.onfocus(this);", null);
+ "Richfaces.Control.onfocus(this);", null);
}
writer.startElement(HTML.DIV_ELEM, orderingList);
Modified:
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/Control.js
===================================================================
---
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/Control.js 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/Control.js 2008-03-28
05:03:53 UTC (rev 7347)
@@ -1,23 +1,25 @@
-Control = Class.create();
+if(!window.Richfaces) window.Richfaces = {};
-Control.eventStub = function() {
+Richfaces.Control = Class.create();
+
+Richfaces.Control.eventStub = function() {
return false;
}
-Control.onfocus = function(element) {
+Richfaces.Control.onfocus = function(element) {
element.hasFocus = true;
}
-Control.onblur = function(element) {
+Richfaces.Control.onblur = function(element) {
element.hasFocus = undefined;
}
-Control.prototype.initialize = function(eNode, dNode, isShown, isEnabled, action) {
+Richfaces.Control.prototype.initialize = function(eNode, dNode, isShown, isEnabled,
action) {
this.disabledNode = dNode;
- this.disabledNode.onselectstart = Control.eventStub;
+ this.disabledNode.onselectstart = Richfaces.Control.eventStub;
this.enabledNode = eNode
- this.enabledNode.onselectstart = Control.eventStub;
+ this.enabledNode.onselectstart = Richfaces.Control.eventStub;
this.isShown = isShown;
this.isEnabled = isEnabled;
@@ -33,7 +35,7 @@
last : {hidden : "ol_button_border ol_control_hidden", shown :
"ol_button_border ol_control_shown"}
};*/
-Control.prototype.doShow = function() {
+Richfaces.Control.prototype.doShow = function() {
this.isShown = true;
if (this.isEnabled) {
this.doHideNode(this.disabledNode);
@@ -44,19 +46,19 @@
}
}
-Control.prototype.doHide = function() {
+Richfaces.Control.prototype.doHide = function() {
this.isShown = false;
this.doHideNode(this.disabledNode);
this.doHideNode(this.enabledNode);
}
-Control.prototype.doEnable = function() {
+Richfaces.Control.prototype.doEnable = function() {
this.isEnabled = true;
this.doHideNode(this.disabledNode);
this.doShowNode(this.enabledNode);
}
-Control.prototype.doDisable = function() {
+Richfaces.Control.prototype.doDisable = function() {
this.isEnabled = false;
var nodes = this.enabledNode.select("a[id='" + this.enabledNode.id +
"link']");
@@ -84,13 +86,13 @@
}
}
-Control.prototype.doHideNode = function(node) {
- //node.className = Control.CLASSES[this.action].hidden;
+Richfaces.Control.prototype.doHideNode = function(node) {
+ //node.className = Richfaces.Control.CLASSES[this.action].hidden;
node.hide();
}
-Control.prototype.doShowNode = function(node) {
- //node.className = Control.CLASSES[this.action].shown;
+Richfaces.Control.prototype.doShowNode = function(node) {
+ //node.className = Richfaces.Control.CLASSES[this.action].shown;
node.show();
}
Modified:
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
===================================================================
---
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2008-03-28
05:03:53 UTC (rev 7347)
@@ -45,7 +45,7 @@
var disNode = $(containerId + id[1]);
if (node && disNode) {
node.observe('click',
Richfaces.OrderingList.HANDLERS[id[0]].bindAsEventListener(this));
- this.controlList[i] = new Control(node, disNode, false, false, id[0]);
+ this.controlList[i] = new Richfaces.Control(node, disNode, false, false, id[0]);
}
}
//this.controlListManager();
Modified: trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
===================================================================
---
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2008-03-28
04:33:13 UTC (rev 7346)
+++
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2008-03-28
05:03:53 UTC (rev 7347)
@@ -436,8 +436,8 @@
writer.startElement(HTML.a_ELEMENT, component);
} else {
writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-selection", null);
- writer.writeAttribute(HTML.onblur_ATTRIBUTE, "Control.onblur(this);", null);
- writer.writeAttribute(HTML.onfocus_ATTRIBUTE, "Control.onfocus(this);",
null);
+ writer.writeAttribute(HTML.onblur_ATTRIBUTE,
"Richfaces.Control.onblur(this);", null);
+ writer.writeAttribute(HTML.onfocus_ATTRIBUTE,
"Richfaces.Control.onfocus(this);", null);
}
writer.startElement(HTML.DIV_ELEM, component);