📄 ratingbehavior.js
字号:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.
/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.RatingBehavior = function(element) {
/// <summary>
/// The RatingBehavior creates a sequence of stars used to rate an item
/// </summary>
/// <param name="element" type="Sys.UI.DomElement" domElement="true">
/// DOM element associated with the behavior
/// </param>
AjaxControlToolkit.RatingBehavior.initializeBase(this, [element]);
this._starCssClass = null;
this._filledStarCssClass = null;
this._emptyStarCssClass = null;
this._waitingStarCssClass = null;
this._readOnly = false;
this._ratingValue = 0;
this._currentRating = 0;
this._maxRatingValue = 5;
this._tag = "";
this._ratingDirection = 0;
this._stars = null;
this._callbackID = null;
this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);
this._starClickHandler = Function.createDelegate(this, this._onStarClick);
this._starMouseOverHandler = Function.createDelegate(this, this._onStarMouseOver);
this._keyDownHandler = Function.createDelegate(this, this._onKeyDownBack);
this._autoPostBack = false;
}
AjaxControlToolkit.RatingBehavior.prototype = {
initialize : function() {
/// <summary>
/// Initialize the behavior
/// </summary>
AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'initialize');
var elt = this.get_element();
this._stars = [];
for (var i = 1; i <= this._maxRatingValue; i++) {
starElement = $get(elt.id + '_Star_' + i);
starElement.value = i;
Array.add(this._stars, starElement);
$addHandler(starElement, 'click', this._starClickHandler);
$addHandler(starElement, 'mouseover', this._starMouseOverHandler);
}
$addHandler(elt, 'mouseout', this._mouseOutHandler);
$addHandler(elt, "keydown", this._keyDownHandler);
this._update();
},
dispose : function() {
/// <summary>
/// Dispose the behavior
/// </summary>
var elt = this.get_element();
if (this._stars) {
for (var i = 0; i < this._stars.length; i++) {
var starElement = this._stars[i];
$removeHandler(starElement, 'click', this._starClickHandler);
$removeHandler(starElement, 'mouseover', this._starMouseOverHandler);
}
this._stars = null;
}
$removeHandler(elt, 'mouseout', this._mouseOutHandler);
$removeHandler(elt, "keydown", this._keyDownHandler);
AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'dispose');
},
_onError : function(message, context) {
/// <summary>
/// Error handler for the callback
/// </summary>
/// <param name="message" type="String">
/// Error message
/// </param>
/// <param name="context" type="Object">
/// Context
/// </param>
alert(String.format(AjaxControlToolkit.Resources.Rating_CallbackError, message));
},
_receiveServerData : function(arg, context) {
/// <summary>
/// Handler for successful return from callback
/// </summary>
/// <param name="arg" type="Object">
/// Argument
/// </param>
/// <param name="context" type="Object">
/// Context
/// </param>
context._waitingMode(false);
context.raiseEndClientCallback(arg);
},
_onMouseOut : function(e) {
/// <summary>
/// Handler for a star's mouseout event
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
if (this._readOnly) {
return;
}
this._currentRating = this._ratingValue;
this._update();
this.raiseMouseOut(this._currentRating);
},
_onStarClick : function(e) {
/// <summary>
/// Handler for a star's click event
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
if (this._readOnly) {
return;
}
if (this._ratingValue != this._currentRating) {
this.set_Rating(this._currentRating);
}
},
_onStarMouseOver : function(e) {
/// <summary>
/// Handler for a star's mouseover event
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
if (this._readOnly) {
return;
}
if (this._ratingDirection == 0) {
this._currentRating = e.target.value;
} else {
this._currentRating = this._maxRatingValue + 1 - e.target.value;
}
this._update();
this.raiseMouseOver(this._currentRating);
},
_onKeyDownBack : function(ev){
/// <summary>
/// Handler for a star's keyDown event
/// </summary>
/// <param name="ev" type="Sys.UI.DomEvent">
/// Event info
/// </param>
if (this._readOnly) {
return;
}
var k = ev.keyCode ? ev.keyCode : ev.rawEvent.keyCode;
if ( (k == Sys.UI.Key.right) || (k == Sys.UI.Key.up) ) {
this._currentRating = Math.min(this._currentRating + 1, this._maxRatingValue);
this.set_Rating(this._currentRating);
ev.preventDefault();
ev.stopPropagation();
} else if ( (k == Sys.UI.Key.left) || (k == Sys.UI.Key.down) ) {
this._currentRating = Math.max(this._currentRating - 1, 1);
this.set_Rating(this._currentRating);
ev.preventDefault();
ev.stopPropagation();
}
},
_waitingMode : function(activated) {
/// <summary>
/// Update the display to indicate whether or not we are waiting
/// </summary>
/// <param name="activated" type="Boolean">
/// Whether or not we are waiting
/// </param>
for (var i = 0; i < this._maxRatingValue; i++) {
var starElement;
if (this._ratingDirection == 0) {
starElement = this._stars[i];
} else {
starElement = this._stars[this._maxRatingValue - i - 1];
}
if (this._currentRating > i) {
if (activated)
{
Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
Sys.UI.DomElement.addCssClass(starElement, this._waitingStarCssClass);
} else {
Sys.UI.DomElement.removeCssClass(starElement, this._waitingStarCssClass);
Sys.UI.DomElement.addCssClass(starElement, this._filledStarCssClass);
}
} else {
Sys.UI.DomElement.removeCssClass(starElement, this._waitingStarCssClass);
Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
Sys.UI.DomElement.addCssClass(starElement, this._emptyStarCssClass);
}
}
},
_update : function() {
/// <summary>
/// Update the display
/// </summary>
// Update title attribute element
var elt = this.get_element();
$get(elt.id + "_A").title = this._currentRating;
for (var i = 0; i < this._maxRatingValue; i++) {
var starElement;
if (this._ratingDirection == 0) {
starElement = this._stars[i];
} else {
starElement = this._stars[this._maxRatingValue - i - 1];
}
if (this._currentRating > i) {
Sys.UI.DomElement.removeCssClass(starElement, this._emptyStarCssClass);
Sys.UI.DomElement.addCssClass(starElement, this._filledStarCssClass);
}
else {
Sys.UI.DomElement.removeCssClass(starElement, this._filledStarCssClass);
Sys.UI.DomElement.addCssClass(starElement, this._emptyStarCssClass);
}
}
},
add_Rated : function(handler) {
/// <summary>
/// Add a handler to the rated event
/// </summary>
/// <param name="handler" type="Function">
/// Handler
/// </param>
this.get_events().addHandler("Rated", handler);
},
remove_Rated : function(handler) {
/// <summary>
/// Remove a handler from the rated event
/// </summary>
/// <param name="handler" type="Function">
/// Handler
/// </param>
this.get_events().removeHandler("Rated", handler);
},
raiseRated : function(rating) {
/// <summary>
/// Raise the rated event
/// </summary>
/// <param name="rating" type="Number" integer="true">
/// Rating
/// </param>
var handler = this.get_events().getHandler("Rated");
if (handler) {
handler(this, new AjaxControlToolkit.RatingEventArgs(rating));
}
},
add_MouseOver : function(handler) {
/// <summary>
/// Add a handler to the MouseMove event
/// </summary>
/// <param name="handler" type="Function">
/// Handler
/// </param>
this.get_events().addHandler("MouseOver", handler);
},
remove_MouseOver : function(handler) {
/// <summary>
/// Remove a handler from the MouseOver event
/// </summary>
/// <param name="handler" type="Function">
/// Handler
/// </param>
this.get_events().removeHandler("MouseOver", handler);
},
raiseMouseOver : function(rating_tmp) {
/// <summary>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -