封装好的Javascript客户端校验类,支持各种数据类型和校验方法
ValidateUti.js
/**
*
* <p>Title: ValidateUti.js</p>
* <p>Description: the js be include to validate form data.</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: Freeborders</p>
* @author Rukee Fan
* @version 1.1 2004-08-05
* @see sample page: validateSample.htm
*/
![](/Images/OutliningIndicators/None.gif)
function FBvalidater(){
this.clearinvalidControlList();
this.clearvalidater();
}
![](/Images/OutliningIndicators/None.gif)
FBvalidater.prototype =
{
validateobj_obj : [],
errorMessage : '',
invalidControlList : [],
firstinvalidControl : null,
AutoFocus : true,
AutoSelect : true,
DATE_FORMAT : "yyyy-mm-dd",
addvalidater : function(validater)
{
var a_lenght = this.validateobj_obj.length;
this.validateobj_obj[a_lenght] = validater;
},
addrequirevalidater : function(ValidateControl,ErrorMessage)
{
var obj_validate = new requirevalidater(ValidateControl,ErrorMessage) ;
this.addvalidater(obj_validate);
},
addcomparevalidater : function(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage) {
var obj_validate = new comparevalidater(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage);
this.addvalidater(obj_validate);
},
clearvalidater : function()
{
var Temp_obj = new Array();
this.validateobj_obj = Temp_obj;
},
validate : function()
{
this.clearinvalidControlList();
this.errorMessage = "";
var errormessage = "";
var i=0;
for (i=0;i<=(this.validateobj_obj.length-1);i++) {
var obj = this.validateobj_obj[i].ValidateControl;
if (obj.length) {
var subobj;
for (subobj in obj) {
//----- 2004-08-05 add by rukee.fan -----
// when validate a obj array with same error message, only display this message one time.
var validatereturn = this.validateobj(obj[subobj],this.validateobj_obj[i]);
if (validatereturn!=false) {
this.addToinvalidControlList(obj[subobj]);
errormessage = errormessage + validatereturn;
break;
}
//----- 2004-08-05 add by rukee.fan -----
}
}else{
var validatereturn = this.validateobj(obj,this.validateobj_obj[i])
if (validatereturn!=false) {
this.addToinvalidControlList(obj);
errormessage = errormessage + validatereturn;
}
}
}
if (errormessage!="") {
if (this.AutoFocus) {
try {
this.firstinvalidControl.focus();
}catch(e){}
}
if (this.AutoSelect) {
try {
this.firstinvalidControl.select();
}catch(e){}
}
this.errorMessage = errormessage;
return false;
}else{
return true;
}
},
validateobj : function(obj,validater)
{
if (validater.ValidateType.toLowerCase()=="require"&&obj.value.trim()=="") {
return validater.ErrorMessage;
}
if (validater.ValidateType.toLowerCase()=="compare") {
var CompairValue = validater.CompairValue;
var IsComparePass;
if (validater.DataType.toLowerCase()=="length") {
CompairValue = parseInt(CompairValue);
if (isNaN(CompairValue))
{
alert("CompairValue parameter error,it must be a integer.");
return false;
}
IsComparePass = eval(obj.value.toString().length.toString() + validater.CompairMethod + CompairValue.toString())
if (IsComparePass) {
return false;
}
return validater.ErrorMessage;
}
if (obj.value.trim()=="") return false;
var get_inputvalue; //get the value passed the validate.
if (validater.DataType.toLowerCase()=='number') {
var ls_TempValue=obj.value.ChangeToNum();
if (isNaN(ls_TempValue))
{
return validater.ErrorMessage;
}else{
get_inputvalue = obj.value.trim();
}
}
if (validater.DataType.toLowerCase()=='int') {
get_inputvalue = obj.value.trim();
if (get_inputvalue.toString()!= parseInt(get_inputvalue).toString()) {
return validater.ErrorMessage;
}else{
}
}
if (validater.DataType.toLowerCase()=='date') {
get_inputvalue = obj.value.parseDate(this.DATE_FORMAT);
if (get_inputvalue) {
}else{
return validater.ErrorMessage;
}
}
if (validater.CompairMethod.toLowerCase() != "typecheck") {
if (validater.DataType=='date') {
get_inputvalue = get_inputvalue.getTime().toString();
CompairValue = validater.CompairValue.parseDate(this.DATE_FORMAT);
if (CompairValue) {
CompairValue = CompairValue.getTime().toString();
}
}
IsComparePass = eval(get_inputvalue + validater.CompairMethod + CompairValue)
if (!IsComparePass) {
return validater.ErrorMessage;
}
}
}
return false;
},
addToinvalidControlList : function(obj)
{
var a_lenght = this.invalidControlList.length;
this.invalidControlList[a_lenght] = obj;
this.firstinvalidControl = this.invalidControlList[0];
},
clearinvalidControlList : function()
{
var Temp_obj = new Array();
this.invalidControlList = Temp_obj;
firstinvalidControl = null;
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
function requirevalidater() {
this.ValidateControl = "";
this.ValidateType = "require";
this.ErrorMessage = "";
}
![](/Images/OutliningIndicators/None.gif)
function requirevalidater(ValidateControl,ErrorMessage) {
this.ValidateControl = ValidateControl;
this.ValidateType = "require";
this.ErrorMessage = ErrorMessage;
}
![](/Images/OutliningIndicators/None.gif)
function comparevalidater() {
this.ValidateControl = "";
this.ValidateType = "compare";
this.CompairMethod = "TypeCheck"; // >; >= ; = ; <= ; <;
this.DataType = ""; //number; int; Date; Length;
this.CompairValue = "";
this.ErrorMessage = "";
}
![](/Images/OutliningIndicators/None.gif)
function comparevalidater(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage) {
this.ValidateControl = ValidateControl;
this.ValidateType = "compare";
if (CompairMethod=="") CompairMethod = "TypeCheck";
this.CompairMethod = CompairMethod; // TypeCheck ; > ; >= ; = ; <= ; <;
this.DataType = DataType; //number; int; Date; Length;
this.CompairValue = CompairValue;
this.ErrorMessage = ErrorMessage;
}
![](/Images/OutliningIndicators/None.gif)
/**
* parseDate(format)
* parse a string to date
*/
String.prototype.parseDate = function(format){
var dateVal = this;
if(dateVal==undefined) return false;
if(dateVal==null) return false;
dateVal=dateVal.trim();
if(format.length!=dateVal.length) return false;
var dateArr=["","","","","",""];
for(z=0;z<format.length;z++)
{
switch(format.charAt(z))
{
case "d":dateArr[0]+=dateVal.charAt(z);break;
case "m":dateArr[1]+=dateVal.charAt(z);break;
case "y":dateArr[2]+=dateVal.charAt(z);break;
case "h":dateArr[3]+=dateVal.charAt(z);break;
case "i":dateArr[4]+=dateVal.charAt(z);break;
case "s":dateArr[5]+=dateVal.charAt(z);break;
}
};
for(z=0;z<dateArr.length;z++)
{
if(isNaN(dateArr[z]))return false;
dateArr[z]=new Number(dateArr[z]);
};
if(dateArr[0]<1||dateArr[0]>31) return false;
if(dateArr[2]<100)
{
dateArr[2]+=1900;
if(dateArr[2]<1950)dateArr[2]+=100;
}
if(dateArr[3]>24)return false;
if(dateArr[5]>60)return false;
if(dateArr[0]==31&&(dateArr[1]==2||dateArr[1]==4||dateArr[1]==6||dateArr[1]==9||dateArr[1]==11)) return false;
if(dateArr[0]==29&&dateArr[1]==2&&dateArr[2]%4!=0)return false;
![](/Images/OutliningIndicators/InBlock.gif)
return new Date(dateArr[2],dateArr[1]-1,dateArr[0],dateArr[3],dateArr[4],dateArr[5]);
}
![](/Images/OutliningIndicators/None.gif)
/**
* trim()
* Use null string to replace space before and after of the string;
*/
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}
![](/Images/OutliningIndicators/None.gif)
/**
* ChangeToNum()
* change string to number;
*/
String.prototype.ChangeToNum = function()
{
var r, re;
re = / /g;
r=this.replace(re, "");
if (r=="") {
r="ls_null";
}
var reg = /^[-|+]?[d]+(.)?[d]*$/;
var r2 =r.match(reg);
if(r2==null) r = parseFloat("abc"); // return a NaN;
![](/Images/OutliningIndicators/InBlock.gif)
return(r);
}validateSample.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html style="width:600px;height:600px">
<title>Fabric Details</title>
<style type="text/css">
<!--
td
{
word-break:normal;
}
//-->
</style>
<META name="GENERATOR" content="IBM WebSphere Studio">
<script language="javascript" src="ValidateUti.js"></script>
<script language="javascript">
<!--
function checkFormData(){
//new a validater
var myFBvalidater = new FBvalidater();
![](/Images/OutliningIndicators/InBlock.gif)
validate1 = new requirevalidater()
validate1.ValidateControl = SB_Asset_Details_form.LocalAssetImage;
validate1.ErrorMessage = "Please select a local image ! ";
myFBvalidater.addvalidater(validate1);
var objarray=new Array();
objarray[1]=SB_Asset_Details_form.LocalAssetID;
objarray[0]=SB_Asset_Details_form.Description;
// addrequirevalidater(ValidateControl,ErrorMessage) 向校验对象中新增需要校验不为空的控件对象。
//参数一ValidateControl: 待校验的控件对象,可以是一个控件,也可以是一个控件数组
//参数二 ErrorMessage: 如果校验不通过返回的错误信息。
myFBvalidater.addrequirevalidater(objarray, "Field can not been null! ")
//addcomparevalidater(ValidateControl,CompairMethod,DataType,CompairValue,ErrorMessage) 向校验对象中新增需要进行比较校验(数据类型,数据范围)的控件对象。
//第一个参数ValidateControl:是指定待校验的控件对象,可以是一个控件,也可以是一个控件数组。
//第二个参数CompairMethod:指定校验方法,包括 (TypeCheck, >, >=, =, <, <=)
//第三个参数DataType:指定数据类型,包括 (number, int, Date, Length )
//第四个参数CompairValue:指定校验的比较值,如果是字符校验,则指定长度,如果是对页面中的两个控件的值进行比较,此参数可以是要进行比较的控件的值(如:validateForm.modiDate.value)。
//第五个参数ErrorMessage:如果校验不通过返回的错误信息
//所有参数必须输入,当第二个参数是'TypeCheck', 则第三个参数不能是'Length'
// validate a integer type input field;
myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_typenumber,'TypeCheck','number','','Please input a integer! ');
// validate a number input field, must bigger than 7.
myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_compairnumber,'>','number','7','Please input a integer big than 7! ');
// validate a number input field, must bigger than another number input field.
myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_compairnumber,'>','number',SB_Asset_Details_form.txt_typenumber.value,'compairnumber must bigger than typenumber! ');
// validate a datetime input field.
myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_inputDate,'TypeCheck','date','','Please input a DateTime! ');
// validate a datetime input field, must bigger than 2003-04-01.
myFBvalidater.addcomparevalidater(SB_Asset_Details_form.txt_inputDate,'>','date','2003-04-01','Please input a DateTime biger than 2003-04-01! ');
// validate a input field, length must less or equal than 10.
myFBvalidater.addcomparevalidater(SB_Asset_Details_form.Description,'<=','Length','10','field length must <= 10! ');
// validate()
// returnvalue: true or false
if (myFBvalidater.validate())
{
alert("validate passed!");
} else{
alert(myFBvalidater.errorMessage);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
//-->
</script>
<body id="bodyTable" BGCOLOR="#FFFFFF">
<form name="SB_Asset_Details_form" method="POST" enctype="multipart/form-data">
<input type="text" name="LocalAssetID" size="26" value=""><br>
<textarea name="Description" cols="41" rows="5" onkeypress="javascript:if(this.value.length>248){return false;}">few</textarea><br>
<input type="file" name="LocalAssetImage" size="26" value="" onkeydown="javascript:return false;"><br>
Number(int):<input type="input" name="txt_typenumber" size="26" value="" ><br>
Compair Number( >7 ):<input type="input" name="txt_compairnumber" size="26" value="" ><br>
Date:<input type="input" name="txt_inputDate" size="26" value="" ><br>
<input type="button" name="Save" value="Save" onclick="javascript:checkFormData();" class="blueButton">
![](/Images/OutliningIndicators/None.gif)
</form>
</body>
</html>
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)