summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorwei <>2006-10-08 05:11:23 +0000
committerwei <>2006-10-08 05:11:23 +0000
commit9e2820e98640f4ca262db7279a514826341df3e0 (patch)
tree82184c36e9b82ae57303b7841266cbec23151c5c /framework
parentfe60cc221f922ea362826e2d00431c5df28fe85f (diff)
Fixed #414, #411, #415
Diffstat (limited to 'framework')
-rw-r--r--framework/Web/Javascripts/js/compressed/ajax.js48
-rw-r--r--framework/Web/Javascripts/js/debug/ajax.js121
-rw-r--r--framework/Web/Javascripts/prado/inlineeditor.js36
-rw-r--r--framework/Web/Javascripts/ratings/blocks.css12
-rw-r--r--framework/Web/Javascripts/ratings/blocks.pngbin27953 -> 28700 bytes
-rw-r--r--framework/Web/Javascripts/ratings/blocks_combined.gifbin237 -> 289 bytes
-rw-r--r--framework/Web/Javascripts/ratings/default.css10
-rw-r--r--framework/Web/Javascripts/ratings/default.pngbin52075 -> 51492 bytes
-rw-r--r--framework/Web/Javascripts/ratings/default_combined.gifbin1001 -> 1201 bytes
-rw-r--r--framework/Web/Javascripts/ratings/ratings.js85
-rw-r--r--framework/Web/UI/ActiveControls/TActiveRatingList.php62
-rw-r--r--framework/Web/UI/ActiveControls/TInPlaceTextBox.php31
12 files changed, 340 insertions, 65 deletions
diff --git a/framework/Web/Javascripts/js/compressed/ajax.js b/framework/Web/Javascripts/js/compressed/ajax.js
index 696968c7..16dacb52 100644
--- a/framework/Web/Javascripts/js/compressed/ajax.js
+++ b/framework/Web/Javascripts/js/compressed/ajax.js
@@ -262,12 +262,13 @@ this.time=setTimeout(this.checkChanges.bind(this),parseInt(this.options.Interval
{var request=new Prado.CallbackRequest(this.options.EventTarget,this.options);var param={'OldValue':oldValue,'NewValue':newValue};request.setCallbackParameter(param);request.dispatch();}},{timers:{},register:function(timer)
{Prado.WebUI.TValueTriggeredCallback.timers[timer.options.ID]=timer;},stop:function(id)
{Prado.WebUI.TValueTriggeredCallback.timers[id].stopObserving();}});Prado.WebUI.TInPlaceTextBox=Base.extend({isSaving:false,isEditing:false,editField:null,constructor:function(options)
-{this.options=Object.extend({LoadTextFromSource:false,TextMode:'SingleLine'},options||{});this.element=$(this.options.ID);this.initializeListeners();},initializeListeners:function()
+{this.options=Object.extend({LoadTextFromSource:false,TextMode:'SingleLine'},options||{});this.element=$(this.options.ID);Prado.WebUI.TInPlaceTextBox.register(this);this.initializeListeners();},initializeListeners:function()
{this.onclickListener=this.enterEditMode.bindAsEventListener(this);Event.observe(this.element,'click',this.onclickListener);if(this.options.ExternalControl)
Event.observe($(this.options.ExternalControl),'click',this.onclickListener);},enterEditMode:function(evt)
-{if(this.isSaving)return;if(this.isEditing)return;this.isEditing=true;this.onEnterEditMode();this.createEditorInput();this.showTextBox();this.editField.disabled=false;if(this.options.LoadTextOnEdit)
+{if(this.isSaving||this.isEditing)return;this.isEditing=true;this.onEnterEditMode();this.createEditorInput();this.showTextBox();this.editField.disabled=false;if(this.options.LoadTextOnEdit)
this.loadExternalText();Prado.Element.focus(this.editField);if(evt)
-Event.stop(evt);return false;},showTextBox:function()
+Event.stop(evt);return false;},exitEditMode:function(evt)
+{this.isEditing=false;this.isSaving=false;this.editField.disabled=false;this.element.innerHTML=this.editField.value;this.showLabel();},showTextBox:function()
{Element.hide(this.element);Element.show(this.editField);},showLabel:function()
{Element.show(this.element);Element.hide(this.editField);},createEditorInput:function()
{if(this.editField==null)
@@ -302,28 +303,39 @@ this.showLabel();}},onTextChanged:function(text)
{this.isSaving=false;this.isEditing=false;this.showLabel();},onTextChangedSuccess:function(sender,parameter)
{this.isSaving=false;this.isEditing=false;if(this.options.AutoHide)
this.showLabel();this.element.innerHTML=parameter==null?this.editField.value:parameter;this.editField.disabled=false;},onTextChangedFailure:function(sender,parameter)
-{this.editField.disabled=false;this.isSaving=false;this.isEditing=false;}});Prado.WebUI.TRatingList=Base.extend({selectedIndex:-1,enabled:true,readOnly:false,constructor:function(options)
-{var cap=$(options.CaptionID);this.options=Object.extend({caption:cap?cap.innerHTML:''},options||{});Prado.WebUI.TRatingList.register(this);this._init();this.selectedIndex=options.SelectedIndex;this.setRating(this.selectedIndex);},_init:function(options)
+{this.editField.disabled=false;this.isSaving=false;this.isEditing=false;}},{textboxes:{},register:function(obj)
+{Prado.WebUI.TInPlaceTextBox.textboxes[obj.options.TextBoxID]=obj;},setDisplayTextBox:function(id,value)
+{var textbox=Prado.WebUI.TInPlaceTextBox.textboxes[id];if(textbox)
+{if(value)
+textbox.enterEditMode(null);else
+{textbox.exitEditMode(null);}}}});Prado.WebUI.TRatingList=Base.extend({selectedIndex:-1,rating:-1,enabled:true,readOnly:false,constructor:function(options)
+{var cap=$(options.CaptionID);this.options=Object.extend({caption:cap?cap.innerHTML:''},options||{});Prado.WebUI.TRatingList.register(this);this._init();this.selectedIndex=options.SelectedIndex;this.rating=options.Rating;if(options.Rating<=0&&options.SelectedIndex>=0)
+this.rating=options.SelectedIndex+1;this.showRating(this.rating);},_init:function(options)
{Element.addClassName($(this.options.ListID),this.options.Style);this.radios=new Array();var index=0;for(var i=0;i<this.options.ItemCount;i++)
{var radio=$(this.options.ListID+'_c'+i);var td=radio.parentNode;if(radio&&td.tagName.toLowerCase()=='td')
{this.radios.push(radio);Event.observe(td,"mouseover",this.hover.bindEvent(this,index));Event.observe(td,"mouseout",this.recover.bindEvent(this,index));Event.observe(td,"click",this.click.bindEvent(this,index));index++;Element.addClassName(td,"rating");}}},hover:function(ev,index)
{if(this.enabled==false)return;for(var i=0;i<this.radios.length;i++)
-{var action=i<=index?'addClassName':'removeClassName'
-Element[action](this.radios[i].parentNode,"rating_selected");}
-this.setCaption(index);},recover:function(ev,index)
-{if(this.enabled==false)return;for(var i=0;i<=index;i++)
-Element.removeClassName(this.radios[i].parentNode,"rating_selected");this.setRating(this.selectedIndex);},click:function(ev,index)
+{var node=this.radios[i].parentNode;var action=i<=index?'addClassName':'removeClassName'
+Element[action](node,"rating_hover");Element.removeClassName(node,"rating_selected");Element.removeClassName(node,"rating_half");}
+this.showCaption(this.getIndexCaption(index));},recover:function(ev,index)
+{if(this.enabled==false)return;this.showRating(this.rating);this.showCaption(this.options.caption);},click:function(ev,index)
{if(this.enabled==false)return;for(var i=0;i<this.radios.length;i++)
-this.radios[i].checked=(i==index);this.selectedIndex=index;this.setRating(index);var requestOptions=Object.extend({ID:this.options.ListID+"_c"+index,EventTarget:this.options.ListID+"$c"+index},this.options);var request=new Prado.CallbackRequest(requestOptions.EventTarget,requestOptions);if(request.dispatch()==false)
-Event.stop(ev);},setRating:function(index)
-{for(var i=0;i<this.radios.length;i++)
-{var node=this.radios[i].parentNode;var action=i>index?'removeClassName':'addClassName'
-Element[action](this.radios[i].parentNode,"rating_selected");}
-this.setCaption(index);},setCaption:function(index)
-{var value=index>-1?this.radios[index].value:this.options.caption;var caption=$(this.options.CaptionID);if(caption)caption.innerHTML=value;$(this.options.ListID).title=value;},setEnabled:function(value)
+this.radios[i].checked=(i==index);this.selectedIndex=index;this.setRating(index+1);this.dispatchRequest(ev);},dispatchRequest:function(ev)
+{var requestOptions=Object.extend({ID:this.options.ListID+"_c"+this.selectedIndex,EventTarget:this.options.ListName+"$c"+this.selectedIndex},this.options);var request=new Prado.CallbackRequest(requestOptions.EventTarget,requestOptions);if(request.dispatch()==false)
+Event.stop(ev);},setRating:function(value)
+{this.rating=value;var base=Math.floor(value-1);var remainder=value-base-1;var halfMax=this.options.HalfRating["1"];var index=remainder>halfMax?base+1:base;for(var i=0;i<this.radios.length;i++)
+this.radios[i].checked=(i==index);var caption=this.getIndexCaption(index);this.setCaption(caption);this.showCaption(caption);this.showRating(value);},showRating:function(value)
+{var base=Math.floor(value-1);var remainder=value-base-1;var halfMin=this.options.HalfRating["0"];var halfMax=this.options.HalfRating["1"];var index=remainder>halfMax?base+1:base;var hasHalf=remainder>=halfMin&&remainder<=halfMax;for(var i=0;i<this.radios.length;i++)
+{var node=this.radios[i].parentNode;var action=i>index?'removeClassName':'addClassName';Element[action](node,"rating_selected");if(i==index+1&&hasHalf)
+Element.addClassName(node,"rating_half");else
+Element.removeClassName(node,"rating_half");Element.removeClassName(node,"rating_hover");}},getIndexCaption:function(index)
+{return index>-1?this.radios[index].value:this.options.caption;},showCaption:function(value)
+{var caption=$(this.options.CaptionID);if(caption)caption.innerHTML=value;$(this.options.ListID).title=value;},setCaption:function(value)
+{this.options.caption=value;this.showCaption(value);},setEnabled:function(value)
{this.enabled=value;for(var i=0;i<this.radios.length;i++)
{var action=value?'removeClassName':'addClassName'
Element[action](this.radios[i].parentNode,"rating_disabled");}}},{ratings:{},register:function(rating)
{Prado.WebUI.TRatingList.ratings[rating.options.ListID]=rating;},setEnabled:function(id,value)
{Prado.WebUI.TRatingList.ratings[id].setEnabled(value);},setRating:function(id,value)
-{Prado.WebUI.TRatingList.ratings[id].setRating(value);Prado.WebUI.TRatingList.ratings[id].selectedIndex=value;}}); \ No newline at end of file
+{Prado.WebUI.TRatingList.ratings[id].setRating(value);},setCaption:function(id,value)
+{Prado.WebUI.TRatingList.ratings[id].setCaption(value);}}); \ No newline at end of file
diff --git a/framework/Web/Javascripts/js/debug/ajax.js b/framework/Web/Javascripts/js/debug/ajax.js
index ba777546..8b75c2ad 100644
--- a/framework/Web/Javascripts/js/debug/ajax.js
+++ b/framework/Web/Javascripts/js/debug/ajax.js
@@ -2396,7 +2396,7 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
}, options || {});
this.element = $(this.options.ID);
-
+ Prado.WebUI.TInPlaceTextBox.register(this);
this.initializeListeners();
},
@@ -2417,8 +2417,7 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
*/
enterEditMode : function(evt)
{
- if (this.isSaving) return;
- if (this.isEditing) return;
+ if (this.isSaving || this.isEditing) return;
this.isEditing = true;
this.onEnterEditMode();
this.createEditorInput();
@@ -2432,6 +2431,15 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
return false;
},
+ exitEditMode : function(evt)
+ {
+ this.isEditing = false;
+ this.isSaving = false;
+ this.editField.disabled = false;
+ this.element.innerHTML = this.editField.value;
+ this.showLabel();
+ },
+
showTextBox : function()
{
Element.hide(this.element);
@@ -2608,11 +2616,34 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
this.isSaving = false;
this.isEditing = false;
}
+},
+{
+ textboxes : {},
+
+ register : function(obj)
+ {
+ Prado.WebUI.TInPlaceTextBox.textboxes[obj.options.TextBoxID] = obj;
+ },
+
+ setDisplayTextBox : function(id,value)
+ {
+ var textbox = Prado.WebUI.TInPlaceTextBox.textboxes[id];
+ if(textbox)
+ {
+ if(value)
+ textbox.enterEditMode(null);
+ else
+ {
+ textbox.exitEditMode(null);
+ }
+ }
+ }
});
Prado.WebUI.TRatingList = Base.extend(
{
selectedIndex : -1,
+ rating: -1,
enabled : true,
readOnly : false,
@@ -2627,7 +2658,10 @@ Prado.WebUI.TRatingList = Base.extend(
Prado.WebUI.TRatingList.register(this);
this._init();
this.selectedIndex = options.SelectedIndex;
- this.setRating(this.selectedIndex);
+ this.rating = options.Rating;
+ if(options.Rating <= 0 && options.SelectedIndex >= 0)
+ this.rating = options.SelectedIndex+1;
+ this.showRating(this.rating);
},
_init: function(options)
@@ -2656,18 +2690,20 @@ Prado.WebUI.TRatingList = Base.extend(
if(this.enabled==false) return;
for(var i = 0; i<this.radios.length; i++)
{
+ var node = this.radios[i].parentNode;
var action = i <= index ? 'addClassName' : 'removeClassName'
- Element[action](this.radios[i].parentNode,"rating_selected");
+ Element[action](node,"rating_hover");
+ Element.removeClassName(node,"rating_selected");
+ Element.removeClassName(node,"rating_half");
}
- this.setCaption(index);
+ this.showCaption(this.getIndexCaption(index));
},
recover : function(ev,index)
{
if(this.enabled==false) return;
- for(var i = 0; i<=index; i++)
- Element.removeClassName(this.radios[i].parentNode, "rating_selected");
- this.setRating(this.selectedIndex);
+ this.showRating(this.rating);
+ this.showCaption(this.options.caption);
},
click : function(ev, index)
@@ -2675,38 +2711,81 @@ Prado.WebUI.TRatingList = Base.extend(
if(this.enabled==false) return;
for(var i = 0; i<this.radios.length; i++)
this.radios[i].checked = (i == index);
+
this.selectedIndex = index;
- this.setRating(index);
+ this.setRating(index+1);
+
+ this.dispatchRequest(ev);
+ },
+
+ dispatchRequest : function(ev)
+ {
var requestOptions = Object.extend(
{
- ID : this.options.ListID+"_c"+index,
- EventTarget : this.options.ListID+"$c"+index
+ ID : this.options.ListID+"_c"+this.selectedIndex,
+ EventTarget : this.options.ListName+"$c"+this.selectedIndex
},this.options);
var request = new Prado.CallbackRequest(requestOptions.EventTarget, requestOptions);
if(request.dispatch()==false)
Event.stop(ev);
},
- setRating: function(index)
+ setRating : function(value)
{
+ this.rating = value;
+ var base = Math.floor(value-1);
+ var remainder = value - base-1;
+ var halfMax = this.options.HalfRating["1"];
+ var index = remainder > halfMax ? base+1 : base;
+ for(var i = 0; i<this.radios.length; i++)
+ this.radios[i].checked = (i == index);
+
+ var caption = this.getIndexCaption(index);
+ this.setCaption(caption);
+ this.showCaption(caption);
+ this.showRating(value);
+ },
+
+ showRating: function(value)
+ {
+ var base = Math.floor(value-1);
+ var remainder = value - base-1;
+ var halfMin = this.options.HalfRating["0"];
+ var halfMax = this.options.HalfRating["1"];
+ var index = remainder > halfMax ? base+1 : base;
+ var hasHalf = remainder >= halfMin && remainder <= halfMax;
for(var i = 0; i<this.radios.length; i++)
{
var node = this.radios[i].parentNode;
- var action = i > index ? 'removeClassName' : 'addClassName'
- Element[action](this.radios[i].parentNode, "rating_selected");
+ var action = i > index ? 'removeClassName' : 'addClassName';
+ Element[action](node, "rating_selected");
+ if(i==index+1 && hasHalf)
+ Element.addClassName(node, "rating_half");
+ else
+ Element.removeClassName(node, "rating_half");
+ Element.removeClassName(node,"rating_hover");
}
- this.setCaption(index);
},
- setCaption : function(index)
+ getIndexCaption : function(index)
+ {
+ return index > -1 ? this.radios[index].value : this.options.caption;
+ },
+
+ showCaption : function(value)
{
- var value = index > -1 ? this.radios[index].value : this.options.caption;
var caption = $(this.options.CaptionID);
if(caption) caption.innerHTML = value;
$(this.options.ListID).title = value;
},
+ setCaption : function(value)
+ {
+ this.options.caption = value;
+ this.showCaption(value);
+ },
+
setEnabled : function(value)
{
this.enabled = value;
@@ -2732,7 +2811,11 @@ setEnabled : function(id,value)
setRating : function(id,value)
{
Prado.WebUI.TRatingList.ratings[id].setRating(value);
- Prado.WebUI.TRatingList.ratings[id].selectedIndex = value;
+},
+
+setCaption : function(id,value)
+{
+ Prado.WebUI.TRatingList.ratings[id].setCaption(value);
}
});
diff --git a/framework/Web/Javascripts/prado/inlineeditor.js b/framework/Web/Javascripts/prado/inlineeditor.js
index 14f4b73c..719c525d 100644
--- a/framework/Web/Javascripts/prado/inlineeditor.js
+++ b/framework/Web/Javascripts/prado/inlineeditor.js
@@ -13,7 +13,7 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
}, options || {});
this.element = $(this.options.ID);
-
+ Prado.WebUI.TInPlaceTextBox.register(this);
this.initializeListeners();
},
@@ -34,8 +34,7 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
*/
enterEditMode : function(evt)
{
- if (this.isSaving) return;
- if (this.isEditing) return;
+ if (this.isSaving || this.isEditing) return;
this.isEditing = true;
this.onEnterEditMode();
this.createEditorInput();
@@ -49,6 +48,15 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
return false;
},
+ exitEditMode : function(evt)
+ {
+ this.isEditing = false;
+ this.isSaving = false;
+ this.editField.disabled = false;
+ this.element.innerHTML = this.editField.value;
+ this.showLabel();
+ },
+
showTextBox : function()
{
Element.hide(this.element);
@@ -225,4 +233,26 @@ Prado.WebUI.TInPlaceTextBox = Base.extend(
this.isSaving = false;
this.isEditing = false;
}
+},
+{
+ textboxes : {},
+
+ register : function(obj)
+ {
+ Prado.WebUI.TInPlaceTextBox.textboxes[obj.options.TextBoxID] = obj;
+ },
+
+ setDisplayTextBox : function(id,value)
+ {
+ var textbox = Prado.WebUI.TInPlaceTextBox.textboxes[id];
+ if(textbox)
+ {
+ if(value)
+ textbox.enterEditMode(null);
+ else
+ {
+ textbox.exitEditMode(null);
+ }
+ }
+ }
}); \ No newline at end of file
diff --git a/framework/Web/Javascripts/ratings/blocks.css b/framework/Web/Javascripts/ratings/blocks.css
index 5d13a859..b05d9eb6 100644
--- a/framework/Web/Javascripts/ratings/blocks.css
+++ b/framework/Web/Javascripts/ratings/blocks.css
@@ -26,7 +26,17 @@
background-position: 1px -100px;
}
+.TRatingList_blocks td.rating_half
+{
+ background-position: 1px -200px;
+}
+
+.TRatingList_blocks td.rating_hover
+{
+ background-position: 1px -300px;
+}
+
.TRatingList_blocks td.rating_disabled
{
cursor: default !important;
-} \ No newline at end of file
+}
diff --git a/framework/Web/Javascripts/ratings/blocks.png b/framework/Web/Javascripts/ratings/blocks.png
index 0da75b19..93a5333e 100644
--- a/framework/Web/Javascripts/ratings/blocks.png
+++ b/framework/Web/Javascripts/ratings/blocks.png
Binary files differ
diff --git a/framework/Web/Javascripts/ratings/blocks_combined.gif b/framework/Web/Javascripts/ratings/blocks_combined.gif
index 04e8f7b8..dfe9da8d 100644
--- a/framework/Web/Javascripts/ratings/blocks_combined.gif
+++ b/framework/Web/Javascripts/ratings/blocks_combined.gif
Binary files differ
diff --git a/framework/Web/Javascripts/ratings/default.css b/framework/Web/Javascripts/ratings/default.css
index aa7913bf..d404f843 100644
--- a/framework/Web/Javascripts/ratings/default.css
+++ b/framework/Web/Javascripts/ratings/default.css
@@ -27,6 +27,16 @@
background-position: 0px -100px;
}
+.TRatingList_default td.rating_half
+{
+ background-position: 0px -200px;
+}
+
+.TRatingList_default td.rating_hover
+{
+ background-position: 0px -300px;
+}
+
.TRatingList_default td.rating_disabled
{
cursor: default !important;
diff --git a/framework/Web/Javascripts/ratings/default.png b/framework/Web/Javascripts/ratings/default.png
index 17bc39a1..a3148ff4 100644
--- a/framework/Web/Javascripts/ratings/default.png
+++ b/framework/Web/Javascripts/ratings/default.png
Binary files differ
diff --git a/framework/Web/Javascripts/ratings/default_combined.gif b/framework/Web/Javascripts/ratings/default_combined.gif
index fe02b446..ddab2e8b 100644
--- a/framework/Web/Javascripts/ratings/default_combined.gif
+++ b/framework/Web/Javascripts/ratings/default_combined.gif
Binary files differ
diff --git a/framework/Web/Javascripts/ratings/ratings.js b/framework/Web/Javascripts/ratings/ratings.js
index 9299d8d8..c8b19511 100644
--- a/framework/Web/Javascripts/ratings/ratings.js
+++ b/framework/Web/Javascripts/ratings/ratings.js
@@ -1,6 +1,7 @@
Prado.WebUI.TRatingList = Base.extend(
{
selectedIndex : -1,
+ rating: -1,
enabled : true,
readOnly : false,
@@ -15,7 +16,10 @@ Prado.WebUI.TRatingList = Base.extend(
Prado.WebUI.TRatingList.register(this);
this._init();
this.selectedIndex = options.SelectedIndex;
- this.setRating(this.selectedIndex);
+ this.rating = options.Rating;
+ if(options.Rating <= 0 && options.SelectedIndex >= 0)
+ this.rating = options.SelectedIndex+1;
+ this.showRating(this.rating);
},
_init: function(options)
@@ -44,18 +48,20 @@ Prado.WebUI.TRatingList = Base.extend(
if(this.enabled==false) return;
for(var i = 0; i<this.radios.length; i++)
{
+ var node = this.radios[i].parentNode;
var action = i <= index ? 'addClassName' : 'removeClassName'
- Element[action](this.radios[i].parentNode,"rating_selected");
+ Element[action](node,"rating_hover");
+ Element.removeClassName(node,"rating_selected");
+ Element.removeClassName(node,"rating_half");
}
- this.setCaption(index);
+ this.showCaption(this.getIndexCaption(index));
},
recover : function(ev,index)
{
if(this.enabled==false) return;
- for(var i = 0; i<=index; i++)
- Element.removeClassName(this.radios[i].parentNode, "rating_selected");
- this.setRating(this.selectedIndex);
+ this.showRating(this.rating);
+ this.showCaption(this.options.caption);
},
click : function(ev, index)
@@ -63,38 +69,81 @@ Prado.WebUI.TRatingList = Base.extend(
if(this.enabled==false) return;
for(var i = 0; i<this.radios.length; i++)
this.radios[i].checked = (i == index);
+
this.selectedIndex = index;
- this.setRating(index);
+ this.setRating(index+1);
+
+ this.dispatchRequest(ev);
+ },
+
+ dispatchRequest : function(ev)
+ {
var requestOptions = Object.extend(
{
- ID : this.options.ListID+"_c"+index,
- EventTarget : this.options.ListID+"$c"+index
+ ID : this.options.ListID+"_c"+this.selectedIndex,
+ EventTarget : this.options.ListName+"$c"+this.selectedIndex
},this.options);
var request = new Prado.CallbackRequest(requestOptions.EventTarget, requestOptions);
if(request.dispatch()==false)
Event.stop(ev);
},
- setRating: function(index)
+ setRating : function(value)
{
+ this.rating = value;
+ var base = Math.floor(value-1);
+ var remainder = value - base-1;
+ var halfMax = this.options.HalfRating["1"];
+ var index = remainder > halfMax ? base+1 : base;
+ for(var i = 0; i<this.radios.length; i++)
+ this.radios[i].checked = (i == index);
+
+ var caption = this.getIndexCaption(index);
+ this.setCaption(caption);
+ this.showCaption(caption);
+
+ this.showRating(value);
+ },
+ showRating: function(value)
+ {
+ var base = Math.floor(value-1);
+ var remainder = value - base-1;
+ var halfMin = this.options.HalfRating["0"];
+ var halfMax = this.options.HalfRating["1"];
+ var index = remainder > halfMax ? base+1 : base;
+ var hasHalf = remainder >= halfMin && remainder <= halfMax;
for(var i = 0; i<this.radios.length; i++)
{
var node = this.radios[i].parentNode;
- var action = i > index ? 'removeClassName' : 'addClassName'
- Element[action](this.radios[i].parentNode, "rating_selected");
+ var action = i > index ? 'removeClassName' : 'addClassName';
+ Element[action](node, "rating_selected");
+ if(i==index+1 && hasHalf)
+ Element.addClassName(node, "rating_half");
+ else
+ Element.removeClassName(node, "rating_half");
+ Element.removeClassName(node,"rating_hover");
}
- this.setCaption(index);
},
- setCaption : function(index)
+ getIndexCaption : function(index)
+ {
+ return index > -1 ? this.radios[index].value : this.options.caption;
+ },
+
+ showCaption : function(value)
{
- var value = index > -1 ? this.radios[index].value : this.options.caption;
var caption = $(this.options.CaptionID);
if(caption) caption.innerHTML = value;
$(this.options.ListID).title = value;
},
+ setCaption : function(value)
+ {
+ this.options.caption = value;
+ this.showCaption(value);
+ },
+
setEnabled : function(value)
{
this.enabled = value;
@@ -120,6 +169,10 @@ setEnabled : function(id,value)
setRating : function(id,value)
{
Prado.WebUI.TRatingList.ratings[id].setRating(value);
- Prado.WebUI.TRatingList.ratings[id].selectedIndex = value;
+},
+
+setCaption : function(id,value)
+{
+ Prado.WebUI.TRatingList.ratings[id].setCaption(value);
}
}); \ No newline at end of file
diff --git a/framework/Web/UI/ActiveControls/TActiveRatingList.php b/framework/Web/UI/ActiveControls/TActiveRatingList.php
index ec8eee46..c8ed524f 100644
--- a/framework/Web/UI/ActiveControls/TActiveRatingList.php
+++ b/framework/Web/UI/ActiveControls/TActiveRatingList.php
@@ -66,19 +66,38 @@ class TActiveRatingList extends TActiveRadioButtonList
}
/**
- * @return float rating value for read-only display.
+ * @return float rating value.
*/
public function getRating()
{
- return $this->getViewState('Rating',0);
+ return $this->getViewState('Rating',0.0);
}
/**
- * @param float rating value for read-only display.
+ * @param float rating value, also sets the selected Index
*/
public function setRating($value)
{
- $this->setViewState('Rating', TPropertyValue::ensureFloat($value),0);
+ $rating = TPropertyValue::ensureFloat($value);
+ $this->setViewState('Rating', $rating);
+ $canUpdate = $this->getActiveControl()->getEnableUpdate();
+ $this->getActiveControl()->setEnableUpdate(false);
+ parent::setSelectedIndex($this->getRatingIndex($rating));
+ $this->getActiveControl()->setEnableUpdate($canUpdate);
+ if($this->getActiveControl()->canUpdateClientSide())
+ $this->callClientFunction('setRating',$rating);
+ }
+
+ /**
+ * @param float rating value
+ * @return int rating as integer
+ */
+ protected function getRatingIndex($rating)
+ {
+ $interval = $this->getHalfRatingInterval();
+ $base = intval($rating)-1;
+ $remainder = $rating-$base-1;
+ return $remainder > $interval[1] ? $base+1 : $base;
}
/**
@@ -86,12 +105,13 @@ class TActiveRatingList extends TActiveRadioButtonList
*/
public function setSelectedIndex($value)
{
+ $value = TPropertyValue::ensureInteger($value);
$canUpdate = $this->getActiveControl()->getEnableUpdate();
$this->getActiveControl()->setEnableUpdate(false);
parent::setSelectedIndex($value);
$this->getActiveControl()->setEnableUpdate($canUpdate);
if($this->getActiveControl()->canUpdateClientSide())
- $this->callClientFunction('setRating',$value);
+ $this->callClientFunction('setRating',$value+1);
}
/**
@@ -122,11 +142,35 @@ class TActiveRatingList extends TActiveRadioButtonList
$this->setViewState('CaptionID', $value, '');
}
+ protected function getCaptionControl()
+ {
+ if(($id=$this->getCaptionID())!=='')
+ {
+ if($control=$this->getParent()->findControl($id))
+ return $control;
+ }
+ throw new TInvalidDataValueException(
+ 'ratinglist_invalid_caption_id',$id,$this->getID());
+ }
+
+ public function setCaption($value)
+ {
+ $this->getCaptionControl()->setText($value);
+ if($this->getActiveControl()->canUpdateClientSide())
+ $this->callClientFunction('setCaption',$value);
+ }
+
+ public function getCaption()
+ {
+ return $this->getCaptionControl()->getText();
+ }
+
/**
* @param boolean true to enable the rating to be changed.
*/
public function setEnabled($value)
{
+ $value = TPropertyValue::ensureBoolean($value);
parent::setEnabled($value);
if($this->getActiveControl()->canUpdateClientSide())
$this->callClientFunction('setEnabled',$value);
@@ -182,8 +226,10 @@ class TActiveRatingList extends TActiveRadioButtonList
{
$options = parent::getPostBackOptions();
$options['Style'] = $this->getRatingStyleCssClass();
- $options['CaptionID'] = $this->getCaptionControl();
+ $options['CaptionID'] = $this->getCaptionControlID();
$options['SelectedIndex'] = $this->getSelectedIndex();
+ $options['Rating'] = $this->getRating();
+ $options['HalfRating'] = $this->getHalfRatingInterval();
return $options;
}
@@ -200,7 +246,7 @@ class TActiveRatingList extends TActiveRadioButtonList
/**
* @return string find the client ID of the caption control.
*/
- protected function getCaptionControl()
+ protected function getCaptionControlID()
{
if(($id=$this->getCaptionID())!=='')
{
@@ -326,4 +372,4 @@ class TActiveRatingList extends TActiveRadioButtonList
}
}
-?> \ No newline at end of file
+?>
diff --git a/framework/Web/UI/ActiveControls/TInPlaceTextBox.php b/framework/Web/UI/ActiveControls/TInPlaceTextBox.php
index 236e43d5..16ffafb7 100644
--- a/framework/Web/UI/ActiveControls/TInPlaceTextBox.php
+++ b/framework/Web/UI/ActiveControls/TInPlaceTextBox.php
@@ -67,6 +67,37 @@ class TInPlaceTextBox extends TActiveTextBox
}
/**
+ * @param boolean true to display the edit textbox
+ */
+ public function setDisplayTextBox($value)
+ {
+ $value = TPropertyValue::ensureBoolean($value);
+ $this->setViewState('DisplayTextBox', $value,false);
+ if($this->getActiveControl()->canUpdateClientSide())
+ $this->callClientFunction('setDisplayTextBox',$value);
+ }
+
+ /**
+ * @return boolean true to display the edit textbox
+ */
+ public function getDisplayTextBox()
+ {
+ return $this->getViewState('DisplayTextBox', false);
+ }
+
+ /**
+ * Calls the client-side static method for this control class.
+ * @param string static method name
+ * @param mixed method parmaeter
+ */
+ protected function callClientFunction($func,$value)
+ {
+ $client = $this->getPage()->getCallbackClient();
+ $code = $this->getClientClassName().'.'.$func;
+ $client->callClientFunction($code,array($this,$value));
+ }
+
+ /**
* @param string ID of the control that can trigger to edit the textbox
*/
public function setEditTriggerControlID($value)