diff options
author | wei <> | 2006-10-08 05:11:23 +0000 |
---|---|---|
committer | wei <> | 2006-10-08 05:11:23 +0000 |
commit | 9e2820e98640f4ca262db7279a514826341df3e0 (patch) | |
tree | 82184c36e9b82ae57303b7841266cbec23151c5c /framework | |
parent | fe60cc221f922ea362826e2d00431c5df28fe85f (diff) |
Fixed #414, #411, #415
Diffstat (limited to 'framework')
-rw-r--r-- | framework/Web/Javascripts/js/compressed/ajax.js | 48 | ||||
-rw-r--r-- | framework/Web/Javascripts/js/debug/ajax.js | 121 | ||||
-rw-r--r-- | framework/Web/Javascripts/prado/inlineeditor.js | 36 | ||||
-rw-r--r-- | framework/Web/Javascripts/ratings/blocks.css | 12 | ||||
-rw-r--r-- | framework/Web/Javascripts/ratings/blocks.png | bin | 27953 -> 28700 bytes | |||
-rw-r--r-- | framework/Web/Javascripts/ratings/blocks_combined.gif | bin | 237 -> 289 bytes | |||
-rw-r--r-- | framework/Web/Javascripts/ratings/default.css | 10 | ||||
-rw-r--r-- | framework/Web/Javascripts/ratings/default.png | bin | 52075 -> 51492 bytes | |||
-rw-r--r-- | framework/Web/Javascripts/ratings/default_combined.gif | bin | 1001 -> 1201 bytes | |||
-rw-r--r-- | framework/Web/Javascripts/ratings/ratings.js | 85 | ||||
-rw-r--r-- | framework/Web/UI/ActiveControls/TActiveRatingList.php | 62 | ||||
-rw-r--r-- | framework/Web/UI/ActiveControls/TInPlaceTextBox.php | 31 |
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 Binary files differindex 0da75b19..93a5333e 100644 --- a/framework/Web/Javascripts/ratings/blocks.png +++ b/framework/Web/Javascripts/ratings/blocks.png diff --git a/framework/Web/Javascripts/ratings/blocks_combined.gif b/framework/Web/Javascripts/ratings/blocks_combined.gif Binary files differindex 04e8f7b8..dfe9da8d 100644 --- a/framework/Web/Javascripts/ratings/blocks_combined.gif +++ b/framework/Web/Javascripts/ratings/blocks_combined.gif 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 Binary files differindex 17bc39a1..a3148ff4 100644 --- a/framework/Web/Javascripts/ratings/default.png +++ b/framework/Web/Javascripts/ratings/default.png diff --git a/framework/Web/Javascripts/ratings/default_combined.gif b/framework/Web/Javascripts/ratings/default_combined.gif Binary files differindex fe02b446..ddab2e8b 100644 --- a/framework/Web/Javascripts/ratings/default_combined.gif +++ b/framework/Web/Javascripts/ratings/default_combined.gif 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)
|