// Name: FilteredTextBox.FilteredTextBoxBehavior.debug.js
// Assembly: AjaxControlToolkit
// Version: 4.5.7.1213
// FileVersion: 4.5.7.1213
// (c) 2010 CodePlex Foundation
///
///
///
(function() {
var scriptName = "ExtendedFilteredTextBox";
function execute() {
Type.registerNamespace('Sys.Extended.UI');
Sys.Extended.UI.FilteredTextBoxBehavior = function(element) {
///
/// The FilteredTextBoxBehavior is used to prevent invalid characters from being entered into a textbox
///
///
/// The textbox element this behavior is associated with
///
Sys.Extended.UI.FilteredTextBoxBehavior.initializeBase(this, [element]);
this._keypressHandler = null;
this._changeHandler = null;
this._intervalID = null;
this._filterType = Sys.Extended.UI.FilterTypes.Custom;
this._filterMode = Sys.Extended.UI.FilterModes.ValidChars;
this._validChars = null;
this._invalidChars = null;
this._filterInterval = 250;
this.charTypes = { };
this.charTypes.LowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
this.charTypes.UppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
this.charTypes.Numbers = "0123456789";
}
Sys.Extended.UI.FilteredTextBoxBehavior.prototype = {
initialize : function() {
///
/// Initialize the behavior
///
Sys.Extended.UI.FilteredTextBoxBehavior.callBaseMethod(this, 'initialize');
var element = this.get_element();
this._keypressHandler = Function.createDelegate(this, this._onkeypress);
$addHandler(element, 'keypress', this._keypressHandler);
this._changeHandler = Function.createDelegate(this, this._onchange);
$addHandler(element, 'change', this._changeHandler);
var callback = Function.createDelegate(this, this._intervalCallback);
this._intervalID = window.setInterval(callback, this._filterInterval);
},
dispose : function() {
///
/// Dispose the behavior
///
var element = this.get_element();
$removeHandler(element, 'keypress', this._keypressHandler);
this._keypressHandler = null;
$removeHandler(element, 'change', this._changeHandler);
this._changeHandler = null;
window.clearInterval(this._intervalID);
Sys.Extended.UI.FilteredTextBoxBehavior.callBaseMethod(this, 'dispose');
},
_getValidChars : function() {
///
/// Get all the valid characters
///
///
/// All valid characters
///
if (this._validChars) return this._validChars;
this._validChars = "";
for (type in this.charTypes) {
var filterType = Sys.Extended.UI.FilterTypes.toString(this._filterType);
if (filterType.indexOf(type) != -1) {
this._validChars += this.charTypes[type];
}
}
return this._validChars;
},
_getInvalidChars : function() {
///
/// Get all the invalid characters (in case of custom filtering and InvalidChars mode)
///
///
/// All invalid characters
///
if (!this._invalidChars) {
this._invalidChars = this.charTypes.Custom;
}
return this._invalidChars;
},
_onkeypress : function(evt) {
///
/// Handler for the target textbox's key press event
///
///
/// Event info
///
var scanCode;
if ( (((/* ff */ evt.rawEvent.charCode == 0) ||
(/* opera */ evt.rawEvent.keyCode == evt.rawEvent.which && evt.rawEvent.charCode == undefined)) &&
((evt.rawEvent.keyCode == Sys.UI.Key.pageUp) ||
(evt.rawEvent.keyCode == Sys.UI.Key.pageDown) ||
(evt.rawEvent.keyCode == Sys.UI.Key.up) ||
(evt.rawEvent.keyCode == Sys.UI.Key.down) ||
(evt.rawEvent.keyCode == Sys.UI.Key.left) ||
(evt.rawEvent.keyCode == Sys.UI.Key.right) ||
(evt.rawEvent.keyCode == Sys.UI.Key.home) ||
(evt.rawEvent.keyCode == Sys.UI.Key.end) ||
(evt.rawEvent.keyCode == 46 /* Delete */))) ||
(evt.ctrlKey /* Control keys */)) {
return;
}
if (evt.rawEvent.keyIdentifier) {
if (evt.rawEvent.ctrlKey || evt.rawEvent.altKey || evt.rawEvent.metaKey) {
return;
}
if (evt.rawEvent.keyIdentifier.substring(0,2) != "U+") {
return;
}
scanCode = evt.rawEvent.charCode;
if (scanCode == 63272 /* Delete */) {
return;
}
} else {
scanCode = evt.charCode;
}
if (scanCode && scanCode >= 0x20 /* space */) {
var c = String.fromCharCode(scanCode);
if(!this._processKey(c)) {
evt.preventDefault();
}
}
},
_processKey : function(key) {
///
/// Determine whether the key is valid or whether it should be filtered out
///
///
/// Character to be validated
///
///
/// True if the character should be accepted, false if it should be filtered
///
var filter = "";
var shouldFilter = false;
if (this._filterMode == Sys.Extended.UI.FilterModes.ValidChars) {
filter = this._getValidChars();
shouldFilter = filter && (filter.length > 0) && (filter.indexOf(key) == -1);
} else {
filter = this._getInvalidChars();
shouldFilter = filter && (filter.length > 0) && (filter.indexOf(key) > -1);
}
var eventArgs = new Sys.Extended.UI.FilteredTextBoxProcessKeyEventArgs(key, Sys.Extended.UI.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value(), shouldFilter);
this.raiseProcessKey(eventArgs);
if (eventArgs.get_allowKey()) {
return true;
}
this.raiseFiltered(new Sys.Extended.UI.FilteredTextBoxEventArgs(key));
return false;
},
_onchange : function() {
///
/// Handler for the target textbox's key change event which will filter
/// the text again (to make sure no text was inserted without keypresses, etc.)
///
var wrapper = Sys.Extended.UI.TextBoxWrapper.get_Wrapper(this.get_element());
var text = wrapper.get_Value() || '';
var result = new Sys.StringBuilder();
for (var i = 0; i < text.length; i++) {
var ch = text.substring(i, i+1);
if (this._processKey(ch)) {
result.append(ch);
}
}
if (wrapper.get_Value() != result.toString()) {
wrapper.set_Value(result.toString());
}
},
_intervalCallback : function() {
///
/// Method that is repeatedly called to purge invalid characters from the textbox
///
this._changeHandler();
},
get_ValidChars : function() {
///
/// A string consisting of all characters considered valid for the textbox, if
/// "Custom" is specified as the field type. Otherwise this parameter is ignored.
///
return this.charTypes.Custom;
},
set_ValidChars : function(value) {
if (this._validChars != null || this.charTypes.Custom != value) {
this.charTypes.Custom = value;
this._validChars = null;
this.raisePropertyChanged('ValidChars');
}
},
get_InvalidChars : function() {
///
/// A string consisting of all characters considered invalid for the textbox, if "Custom" is specified as the field type. Otherwise this parameter is ignored.
///
return this.charTypes.Custom;
},
set_InvalidChars : function(value) {
if (this._invalidChars != null || this.charTypes.Custom != value) {
this.charTypes.Custom = value;
this._invalidChars = null;
this.raisePropertyChanged('InvalidChars');
}
},
get_FilterType : function() {
///
/// FilterType - A the type of filter to apply, as a comma-separated combination of
/// Numbers, LowercaseLetters, UppercaseLetters, and Custom. If Custom is specified,
/// the ValidChars field will be used in addition to other settings such as Numbers.
///
return this._filterType;
},
set_FilterType : function(value) {
if (this._validChars != null || this._filterType != value) {
this._filterType = value;
this._validChars = null;
this.raisePropertyChanged('FilterType');
}
},
get_FilterMode : function() {
///
/// FilterMode - The filter mode to apply when custom filtering is activated; supported values are ValidChars and InvalidChars.
///
return this._filterMode;
},
set_FilterMode : function(value) {
if (this._validChars != null || this._invalidChars != null || this._filterMode != value) {
this._filterMode = value;
this._validChars = null;
this._invalidChars = null;
this.raisePropertyChanged('FilterMode');
}
},
get_FilterInterval : function() {
///
/// An integer containing the interval (in milliseconds) in which
/// the field's contents are filtered
///
return this._filterInterval;
},
set_FilterInterval : function(value) {
if (this._filterInterval != value) {
this._filterInterval = value;
this.raisePropertyChanged('FilterInterval');
}
},
add_processKey : function(handler) {
///
/// Add an event handler for the processKey event
///
///
/// Event handler
///
///
this.get_events().addHandler('processKey', handler);
},
remove_processKey : function(handler) {
///
/// Remove an event handler from the processKey event
///
///
/// Event handler
///
///
this.get_events().removeHandler('processKey', handler);
},
raiseProcessKey : function(eventArgs) {
///
/// Raise the processKey event
///
///
/// Event arguments for the processKey event
///
///
var handler = this.get_events().getHandler('processKey');
if (handler) {
handler(this, eventArgs);
}
},
add_filtered : function(handler) {
///
/// Add an event handler for the filtered event
///
///
/// Event handler
///
///
this.get_events().addHandler('filtered', handler);
},
remove_filtered : function(handler) {
///
/// Remove an event handler from the filtered event
///
///
/// Event handler
///
///
this.get_events().removeHandler('filtered', handler);
},
raiseFiltered : function(eventArgs) {
///
/// Raise the filtered event
///
///
/// Event arguments for the filtered event
///
///
var handler = this.get_events().getHandler('filtered');
if (handler) {
handler(this, eventArgs);
}
}
}
Sys.Extended.UI.FilteredTextBoxBehavior.registerClass('Sys.Extended.UI.FilteredTextBoxBehavior', Sys.Extended.UI.BehaviorBase);
Sys.registerComponent(Sys.Extended.UI.FilteredTextBoxBehavior, { name: "filteredTextBox" });
Sys.Extended.UI.FilterTypes = function() {
///
/// Character filter to be applied to a textbox
///
///
/// Custom Characters
///
///
/// Numbers (0123456789)
///
///
/// Uppercase Letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
///
///
/// Lowercase Letters (abcdefghijklmnopqrstuvwxyz)
///
throw Error.invalidOperation();
}
Sys.Extended.UI.FilterTypes.prototype = {
Custom : 0x1,
Numbers : 0x2,
UppercaseLetters : 0x4,
LowercaseLetters : 0x8
}
Sys.Extended.UI.FilterTypes.registerEnum('Sys.Extended.UI.FilterTypes', true);
Sys.Extended.UI.FilterModes = function() {
///
/// Filter mode to be applied to a textbox
///
///
/// Provide a list of valid characters
///
///
/// Provide a list of invalid characters
///
throw Error.invalidOperation();
}
Sys.Extended.UI.FilterModes.prototype = {
ValidChars : 0x1,
InvalidChars : 0x2
}
Sys.Extended.UI.FilterModes.registerEnum('Sys.Extended.UI.FilterModes', true);
Sys.Extended.UI.FilteredTextBoxProcessKeyEventArgs = function(key, text, shouldFilter) {
///
/// Event arguments used when the processKey event is raised
///
///
/// Key to be processed
///
///
/// Current text in the textbox
///
///
/// Whether the character should be filtered given the current
/// FilteredTextBox settings
///
Sys.Extended.UI.FilteredTextBoxProcessKeyEventArgs.initializeBase(this);
this._key = key;
this._text = text;
this._shouldFilter = shouldFilter;
this._allowKey = !shouldFilter;
}
Sys.Extended.UI.FilteredTextBoxProcessKeyEventArgs.prototype = {
get_key : function() {
///
/// Key to be processed
///
return this._key;
},
get_text : function() {
///
/// Current text in the textbox
///
return this._text;
},
get_shouldFilter : function() {
///
/// Whether the character should be filtered given the current
/// FilteredTextBox settings
///
return this._shouldFilter;
},
get_allowKey : function() {
///
/// Whether or not the key will be filtered. It defaults to the opposite of
/// shouldFilter and should be set by handlers of the processKey event.
///
return this._allowKey;
},
set_allowKey : function(value) {
this._allowKey = value;
}
}
Sys.Extended.UI.FilteredTextBoxProcessKeyEventArgs.registerClass('Sys.Extended.UI.FilteredTextBoxProcessKeyEventArgs', Sys.EventArgs);
Sys.Extended.UI.FilteredTextBoxEventArgs = function(key) {
///
/// Event arguments used when the filtered event is raised
///
///
/// Key that was filtered
///
Sys.Extended.UI.FilteredTextBoxEventArgs.initializeBase(this);
this._key = key;
}
Sys.Extended.UI.FilteredTextBoxEventArgs.prototype = {
get_key : function() {
///
/// Key that was filtered
///
return this._key;
}
}
Sys.Extended.UI.FilteredTextBoxEventArgs.registerClass('Sys.Extended.UI.FilteredTextBoxEventArgs', Sys.EventArgs);
} // execute
if (window.Sys && Sys.loader) {
Sys.loader.registerScript(scriptName, ["ExtendedBase", "ExtendedCommon"], execute);
}
else {
execute();
}
})();