From eb51679c618d5027070fbd6f3c0519f0f17e7d7d Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期一, 23 十一月 2020 10:07:53 +0800
Subject: [PATCH] Merge branch 'CJL' of http://172.16.1.23:6688/r/~wxr/HDL_APP_Project into CJL
---
HDL_ON/UI/UI1-Login/RegisterPageBLL.cs | 595 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 595 insertions(+), 0 deletions(-)
diff --git a/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs b/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs
new file mode 100644
index 0000000..ce1f7a3
--- /dev/null
+++ b/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs
@@ -0,0 +1,595 @@
+锘縰sing System;
+using System.Text.RegularExpressions;
+using System.Threading;
+using HDL_ON.DAL.Server;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI.UI1Login
+{
+ public partial class RegisterPage
+ {
+ /// <summary>
+ /// 鍔犺浇浜嬩欢鍒楄〃
+ /// </summary>
+ void LoadEventList()
+ {
+ LoadPage_SwitchRegisterType();
+ LoadEvent_EditTextFcousChange();
+ LoadEvent_ChangeTextVisble();
+ LoadEvent_GetVerificationCode();
+ LoadEvent_Register();
+ LoadEvent_LimtPasswordLength();
+ LoadEvent_TextChange();
+ //var areaCodeList = pm.GetAreaCode();
+ }
+ /// <summary>
+ /// 鍔犺浇鏂囨湰鍙樺寲浜嬩欢
+ /// </summary>
+ void LoadEvent_TextChange()
+ {
+ etAccount.TextChangeEventHandler = (sender, e) =>
+ {
+ Regex reg = new Regex(@"^[1]+\d{10}");
+ var mFalg = reg.Match(etAccount.Text.Trim());
+ if (registerType == 0)//鎵嬫満娉ㄥ唽鑾峰彇楠岃瘉鐮佹寜閽敓鏁堟潯浠�
+ {
+ if (btnGlobalRoaming.Text == "+86" && etAccount.Text.Trim().Length != 11)
+ {
+ btnGetVerificationCode_Phone.IsSelected = false;
+ }
+ else
+ {
+ if (btnGetVerificationCode_Phone.Text == Language.StringByID(StringId.GetVerificationCode))
+ btnGetVerificationCode_Phone.IsSelected = true;
+ }
+ }
+ else//閭娉ㄥ唽鑾峰彇楠岃瘉鐮佹寜閽敓鏁堟潯浠�
+ {
+ if (!mFalg.Success)
+ {
+ btnGetVerificationCode_Mail.IsSelected = false;
+ }
+ else
+ {
+ if (btnGetVerificationCode_Mail.Text == Language.StringByID(StringId.GetVerificationCode))
+ btnGetVerificationCode_Mail.IsSelected = true;
+ }
+ }
+
+ };
+ }
+
+ /// <summary>
+ /// 鍒囨崲娉ㄥ唽绫诲瀷
+ /// </summary>
+ void LoadPage_SwitchRegisterType()
+ {
+ //閫夋嫨鎵嬫満娉ㄥ唽
+ btnPhoneLogin.MouseUpEventHandler = (sender, e) =>
+ {
+ if(registerType == 0)
+ {
+ return;
+ }
+ etAccount.Text = registerPhone;
+ etPassword.Text = "";
+ etRepeatPassword.Text = "";
+ #region 鍒囨崲閫変腑鎸夐挳
+ btnGetVerificationCode_Mail.Visible = false;
+ btnGetVerificationCode_Phone.Visible = true;
+ btnEmailLogin.TextColor = CSS_Color.PromptingColor1;
+ btnEmailLogin.TextSize = CSS_FontSize.TextFontSize;
+ btnPhoneLogin.TextColor = CSS_Color.MainColor;
+ btnPhoneLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary;
+ etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryPhoneNumber);
+ #endregion
+
+ #region 鍒囨崲娉ㄥ唽鏂瑰紡鍙婂浘鏍�
+ registerType = 0;
+ if (btnAccountIcon.Parent != null)
+ {
+ btnAccountIcon.RemoveFromParent();
+ }
+ accountView.AddChidren(btnGlobalRoaming);
+ #endregion
+ };
+
+ //閫夋嫨閭娉ㄥ唽
+ btnEmailLogin.MouseUpEventHandler = (sender, e) =>
+ {
+ if (registerType == 1)
+ return;
+ etAccount.Text = registerEmail;
+ etPassword.Text = "";
+ etRepeatPassword.Text = "";
+ #region 鍒囨崲閫変腑鎸夐挳
+ btnGetVerificationCode_Mail.Visible = true;
+ btnGetVerificationCode_Phone.Visible = false;
+ btnPhoneLogin.TextColor = CSS_Color.PromptingColor1;
+ btnPhoneLogin.TextSize = CSS_FontSize.TextFontSize;
+ btnEmailLogin.TextColor = CSS_Color.MainColor;
+ btnEmailLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary;
+ etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryEmailAddress);
+ #endregion
+
+ #region 鍒囨崲娉ㄥ唽绫诲瀷鍙婂浘鏍�
+ registerType = 1;
+ if (btnGlobalRoaming.Parent != null)
+ {
+ btnGlobalRoaming.RemoveFromParent();
+ }
+ accountView.AddChidren(btnAccountIcon);
+ #endregion
+
+ };
+ }
+
+ /// <summary>
+ /// 鍔犺浇鏂囨湰妗嗙劍鐐瑰彉鍖栦簨浠�
+ /// </summary>
+ void LoadEvent_EditTextFcousChange()
+ {
+ //璐﹀彿鏂囨湰妗嗙劍鐐瑰彉鍖栦簨浠�
+ etAccount.FoucsChanged += (sender, e) =>
+ {
+ if (etAccount.Foucs)
+ {
+ btnAccountViewBottomLine.BackgroundColor = CSS_Color.MainColor;
+ btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
+ }
+ else
+ {
+ //鏍囪鎵嬫満鍙风爜鏃犳晥
+ btnAccountViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
+ btnAccountViewBottomLine.Height = Application.GetRealHeight(1);
+ //鎵嬫満娉ㄥ唽-楠岃瘉鎵嬫満鍙风爜鏄惁姝g‘
+ if (etAccount.Text.Trim().Length > 0)
+ {
+ if (registerType == 0)
+ {
+ Regex reg = new Regex(@"^[1]+\d{10}");
+ var mFalg = reg.Match(etAccount.Text.Trim());
+ if (!mFalg.Success || (btnGlobalRoaming.Text == "+86" && etAccount.Text.Trim().Length != 11))
+ {
+ btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
+ btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
+ btnGetVerificationCode_Phone.IsSelected = false;
+ new Tip()
+ {
+ CloseTime = 1,
+ Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber),
+ Direction = AMPopTipDirection.None,
+ }.Show(bodyView);
+ }
+ else
+ {
+ if (btnGetVerificationCode_Phone.Text == Language.StringByID(StringId.GetVerificationCode))
+ {
+ //鏍囪鎵嬫満鍙风爜鏈夋晥
+ btnGetVerificationCode_Phone.IsSelected = true;
+ }
+ //璐﹀彿鏈夋晥銆佸瘑鐮佹湁鏁堛�侀獙璇佺爜杈撳叆浜嗭紝鎵嶈兘鐐瑰嚮娉ㄥ唽
+ if (ValidPassword && !string.IsNullOrEmpty(etVerificationCode.Text.Trim()))
+ {
+ btnRegister.IsSelected = true;
+ }
+ }
+ }
+ else if (registerType == 1)
+ {
+ //閭娉ㄥ唽-楠岃瘉閭鏄惁姝g‘
+ var reg = new Regex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$");
+ //Regex.IsMatch(etAccount.Text.Trim(), "([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,5})+");
+ var mFalg = reg.Match(etAccount.Text.Trim());
+ if (!mFalg.Success)
+ {
+ btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
+ btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
+ btnGetVerificationCode_Mail.IsSelected = false;
+ new Tip()
+ {
+ CloseTime = 1,
+ Text = Language.StringByID(StringId.PlsEntryCorrectEmailAddress),
+ Direction = AMPopTipDirection.None,
+ }.Show(bodyView);
+ }
+ else
+ {
+ if (btnGetVerificationCode_Mail.Text == Language.StringByID(StringId.GetVerificationCode))
+ {//鏍囪鎵嬫満鍙风爜鏈夋晥
+ btnGetVerificationCode_Mail.IsSelected = true;
+ }
+ //璐﹀彿鏈夋晥銆佸瘑鐮佹湁鏁堛�侀獙璇佺爜杈撳叆浜嗭紝鎵嶈兘鐐瑰嚮娉ㄥ唽
+ if (ValidPassword && string.IsNullOrEmpty(etVerificationCode.Text.Trim()))
+ {
+ btnRegister.IsSelected = true;
+ }
+ }
+ }
+ }
+ if(accountType ==0)
+ {
+ registerPhone = etAccount.Text.Trim();
+ }
+ else
+ {
+ registerEmail = etAccount.Text.Trim();
+ }
+ }
+ };
+
+ //瀵嗙爜鏂囨湰妗嗙劍鐐瑰彉鍖栦簨浠�
+ etPassword.FoucsChanged += (sender, e) =>
+ {
+ if (etPassword.Foucs)
+ {
+ btnPasswordViewBottomLine.BackgroundColor = CSS_Color.MainColor;
+ btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
+ }
+ else
+ {
+ if (etPassword.Text.Length == 0)
+ {
+ btnPasswordViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
+ btnPasswordViewBottomLine.Height = Application.GetRealHeight(1);
+ return;
+ }
+ //闇�瑕佽緭鍏�6浣嶄互涓婄殑瀵嗙爜
+ if (etPassword.Text.Length < 6 || etPassword.Text.Length > 13)
+ {
+ btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
+ btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
+
+ new Tip()
+ {
+ CloseTime = 1,
+ Direction = AMPopTipDirection.None,
+ Text = Language.StringByID(StringId.PlsRegisterPassword)
+ }.Show(bodyView);
+ }
+ else
+ {
+ btnPasswordViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
+ btnPasswordViewBottomLine.Height = Application.GetRealHeight(1);
+ }
+ }
+ };
+
+ //纭瀵嗙爜鏂囨湰妗嗙劍鐐瑰彉鍖栦簨浠�
+ etRepeatPassword.FoucsChanged += (sender, e) =>
+ {
+ if (etRepeatPassword.Foucs)
+ {
+ btnRepeatPasswordViewBottomLine.BackgroundColor = CSS_Color.MainColor;
+ btnRepeatPasswordViewBottomLine.Height = Application.GetRealHeight(2);
+ }
+ else
+ {
+ btnRepeatPasswordViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
+ btnRepeatPasswordViewBottomLine.Height = Application.GetRealHeight(1);
+ //鏍¢獙涓ゆ杈撳叆鐨勫瘑鐮佹槸鍚︿竴鑷�
+ if (etPassword.Text.Trim().Length > 5)
+ {
+ if (etPassword.Text.Trim() != etRepeatPassword.Text.Trim())
+ {
+ btnRepeatPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
+ btnRepeatPasswordViewBottomLine.Height = Application.GetRealHeight(2);
+ new Tip()
+ {
+ CloseTime = 1,
+ Direction = AMPopTipDirection.None,
+ Text = Language.StringByID(StringId.IncorrectRepeatPassword)
+ }.Show(bodyView);
+ }
+ else
+ {
+ ValidPassword = true;
+ //璐﹀彿鏈夋晥銆佸瘑鐮佹湁鏁堛�侀獙璇佺爜杈撳叆浜嗭紝鎵嶈兘鐐瑰嚮娉ㄥ唽
+ if (ValidPassword && !string.IsNullOrEmpty(etVerificationCode.Text.Trim()))
+ {
+ btnRegister.IsSelected = true;
+ }
+ }
+ }
+ }
+ };
+
+ //楠岃瘉鐮佹枃鏈鐒︾偣鍙樺寲浜嬩欢
+ etVerificationCode.FoucsChanged += (sender, e) =>
+ {
+ if (etVerificationCode.Foucs)
+ {
+ btnVerificationCodeViewBottomLine.BackgroundColor = CSS_Color.MainColor;
+ btnVerificationCodeViewBottomLine.Height = Application.GetRealHeight(2);
+ }
+ else
+ {
+ btnVerificationCodeViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
+ btnVerificationCodeViewBottomLine.Height = Application.GetRealHeight(1);
+ if (etVerificationCode.Text.Length > 1)
+ {
+ //璐﹀彿鏈夋晥銆佸瘑鐮佹湁鏁堛�侀獙璇佺爜杈撳叆浜嗭紝鎵嶈兘鐐瑰嚮娉ㄥ唽
+ if (ValidPassword)
+ {
+ btnRegister.IsSelected = true;
+ }
+ }
+ }
+ };
+ }
+
+ /// <summary>
+ /// 闄愬埗瀵嗙爜鏂囨湰搴撹緭鍏ラ暱搴�
+ /// </summary>
+ void LoadEvent_LimtPasswordLength()
+ {
+ etPassword.TextChangeEventHandler = (sender, e) =>
+ {
+ if (etPassword.Text.Length > 16)
+ {
+ etPassword.Text = etPassword.Text.Remove(15);
+ }
+ };
+
+ etRepeatPassword.TextChangeEventHandler = (sender, e) =>
+ {
+ if (etRepeatPassword.Text.Length > 16)
+ {
+ etRepeatPassword.Text = etRepeatPassword.Text.Remove(15);
+ }
+ };
+ }
+
+ /// <summary>
+ /// 鏇存敼瀵嗙爜鍙鎬�
+ /// </summary>
+ void LoadEvent_ChangeTextVisble()
+ {
+ //瀵嗙爜鏂囨湰鍙鎬у彉鍖�
+ btnVisiblePassword.MouseUpEventHandler += (sender, e) =>
+ {
+ btnVisiblePassword.IsSelected = !btnVisiblePassword.IsSelected;
+ etPassword.SecureTextEntry = !btnVisiblePassword.IsSelected;
+ };
+ //閲嶅瀵嗙爜鏂囨湰鍙鎬у彉鍖�
+ btnRepeatVisiblePassword.MouseUpEventHandler += (sender, e) =>
+ {
+ btnRepeatVisiblePassword.IsSelected = !btnRepeatVisiblePassword.IsSelected;
+ etRepeatPassword.SecureTextEntry = !btnRepeatVisiblePassword.IsSelected;
+ };
+ }
+
+ /// <summary>
+ /// 鑾峰彇楠岃瘉鐮�
+ /// </summary>
+ void LoadEvent_GetVerificationCode()
+ {
+ EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+ {
+ if ((sender as Button).IsSelected)
+ {
+ string account = etAccount.Text.Trim();
+ int time = 60;
+ new Thread(() =>
+ {
+ //1.鍏堟鏌ヨ处鍙锋槸鍚︽敞鍐岃繃
+ var result = pm.GetRegionByAccount(account);
+ //2.璐﹀彿涓嶅瓨鍦紝鎵嶅厑璁哥户缁敞鍐�
+ if (result.Code == StateCode.ACCOUNT_NOT_EXIST)
+ {
+ //璐﹀彿涓嶅瓨鍦� 鏈敞鍐屽厑璁稿彂閫侀獙璇佺爜娉ㄥ唽
+ Application.RunOnMainThread(() =>
+ {
+ //鐭俊鍙戦�侀棿闅�60s
+ (sender as Button).IsSelected = false;
+
+ });
+ //2.1 寮�濮嬪�掕鏃�
+ new Thread(() =>
+ {
+ while (time > 0)
+ {
+ time--;
+ Application.RunOnMainThread(() =>
+ {
+ (sender as Button).Text = time.ToString() + "s";
+ });
+ Thread.Sleep(1000);
+ }
+ Application.RunOnMainThread(() =>
+ {
+ //鍥炲鑾峰彇鐭俊鎸夐挳浜嬩欢
+ (sender as Button).IsSelected = true;
+ (sender as Button).TextID = StringId.GetVerificationCode;
+ });
+ })
+ { IsBackground = true }.Start();
+
+ //2.2 鑾峰彇楠岃瘉鐮�
+ ResponsePackNew resultObj;
+ if (registerType == 1)//閭
+ {
+ resultObj = pm.VerificationCodeSend(VerifyType.REGISTER_USER, account);
+ }
+ else
+ {
+ resultObj = pm.VerificationCodeSend(VerifyType.REGISTER_USER, account, true, phoneZoneCode);
+ }
+
+ if (resultObj.Code != StateCode.SUCCESS)
+ {
+ // 鎻愮ず閿欒
+ IMessageCommon.Current.ShowErrorInfoAlter(NewAPI.API_POST_Verification_Send, resultObj.Code);
+ }
+
+ }else if (result.Code.ToUpper() == StateCode.SUCCESS)
+ {
+ //3.鎻愮ず璐﹀彿宸插瓨鍦紝鏃犳硶閲嶅娉ㄥ唽
+ MainPage.ShowAlertOnMainThread(Language.StringByID(StringId.AccountAlreadyUse));
+ } else
+ {
+ //4.鎻愮ず鍏跺畠寮傚父閿欒
+ IMessageCommon.Current.ShowErrorInfoAlter(NewAPI.API_POST_GetRegionByAccount, result.Code);
+ }
+ })
+ { IsBackground = true }.Start();
+
+ //(sender as Button).IsSelected = false;
+ //string account = etAccount.Text.Trim();
+ ////鐭俊鍙戦�侀棿闅�60s
+ //int time = 60;
+ //new Thread(() =>
+ //{
+ // while (time > 0)
+ // {
+ // time--;
+ // Application.RunOnMainThread(() =>
+ // {
+ // (sender as Button).Text = time.ToString() + "s";
+ // });
+ // Thread.Sleep(1000);
+ // }
+ // Application.RunOnMainThread(() =>
+ // {
+ // //鍥炲鑾峰彇鐭俊鎸夐挳浜嬩欢
+ // (sender as Button).IsSelected = true;
+ // (sender as Button).TextID = StringId.GetVerificationCode;
+ // });
+ //})
+ //{ IsBackground = true }.Start();
+ //new Thread(() =>
+ //{
+ // ResponsePackNew resultObj;
+ // // 鑾峰彇楠岃瘉鐮�
+ // if (registerType == 1)//閭
+ // {
+ // resultObj = pm.VerificationCodeSend(VerifyType.REGISTER_USER, account);
+ // }
+ // else
+ // {
+ // resultObj = pm.VerificationCodeSend(VerifyType.REGISTER_USER, account, true, phoneZoneCode);
+ // }
+
+ // if (resultObj.Code != StateCode.SUCCESS_CODE)
+ // {
+ // // 鎻愮ず閿欒
+ // IMessageCommon.Current.ShowErrorInfoAlter(NewAPI.API_POST_Verification_Send, resultObj.Code);
+ // }
+ //})
+ //{ IsBackground = true }.Start();
+ }
+ };
+
+ btnGetVerificationCode_Phone.MouseDownEventHandler = eventHandler;
+ btnGetVerificationCode_Mail.MouseDownEventHandler = eventHandler;
+ }
+
+ /// <summary>
+ /// 鍔犺浇娉ㄥ唽鎸夐挳浜嬩欢
+ /// </summary>
+ void LoadEvent_Register()
+ {
+ btnRegister.MouseUpEventHandler = (sender, e) =>
+ {
+ if(etPassword.Text.Trim().Length > 13 || etPassword.Text.Trim().Length<6)
+ {
+ new Tip()
+ {
+ CloseTime = 1,
+ Direction = AMPopTipDirection.None,
+ Text = Language.StringByID(StringId.PlsRegisterPassword)
+ }.Show(bodyView);
+ return;
+ }
+ if (btnRegister.IsSelected)
+ {
+ waitPage = new Loading();
+ new PublicAssmebly().LoadPage_WaitPage(LoadMethod_RegisterThread(), bodyView, waitPage);
+ }
+ };
+ }
+
+ /// <summary>
+ /// 鍔犺浇娉ㄥ唽鏂规硶
+ /// </summary>
+ Thread LoadMethod_RegisterThread()
+ {
+ string account = etAccount.Text.Trim();
+ string password = etPassword.Text.Trim();
+ string entryPassword = etRepeatPassword.Text.Trim();
+ string verCode = etVerificationCode.Text.Trim();
+ return new Thread(() =>
+ {
+ try
+ {
+ //鏍¢獙楠岃瘉鐮佸苟娉ㄥ唽璐﹀彿
+ var isPhone = registerType == 0;
+ var validateSmsResult = pm.ValidataCodeAndRegister(account, password, verCode, isPhone);
+ if (validateSmsResult.Code == StateCode.SUCCESS)
+ {
+ //娉ㄥ唽鎴愬姛
+ //鎵ц鍥炶皟浜嬩欢
+ //callbackAction?.Invoke(account);
+ Application.RunOnMainThread(() =>
+ {
+ this.Close();
+ LoadEvent_AutoLogin(account, password);
+ });
+ }
+ else// 娉ㄥ唽澶辫触
+ {
+ // 鎻愮ず閿欒
+ IMessageCommon.Current.ShowErrorInfoAlter(NewAPI.API_POST_Member_Register, validateSmsResult.Code);
+
+ //2020-11-13 寰呬慨鏀�
+ //string erorrInfo = "";
+ //switch (validateSmsResult.StateCode)
+ //{
+ // case "Exist":
+ // erorrInfo = Language.StringByID(StringId.AccountAlreadyUse);
+ // break;
+ // case "PwdNoConfirm":
+ // erorrInfo = Language.StringByID(StringId.IncorrectRepeatPassword);
+ // break;
+ // case "ValidCodeAndPhoneNoEqual":
+ // erorrInfo = Language.StringByID(StringId.VerificationCodeWrong);
+ // break;
+ // case "NoRecord":
+ // erorrInfo = Language.StringByID(StringId.PlsGetTheVerificationCode);
+ // Application.RunOnMainThread(() =>
+ // {
+ // btnVerificationCodeViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
+ // btnVerificationCodeViewBottomLine.Height = Application.GetRealHeight(2);
+ // });
+ // break;
+ // default:
+ // erorrInfo = Language.StringByID(StringId.RegistrationFailedPleaseTryAgain);
+ // break;
+ //}
+ //Application.RunOnMainThread(() =>
+ //{
+ // new Tip()
+ // {
+ // CloseTime = 1,
+ // Direction = AMPopTipDirection.None,
+ // Text = erorrInfo,
+ // }.Show(bodyView);
+ //});
+ }
+ }
+ catch (Exception ex)
+ {
+ MainPage.Log("Exception 1 : " + ex.Message);
+ }
+ finally
+ {
+ Application.RunOnMainThread(() =>
+ {
+ waitPage.Hide();
+ });
+ }
+ });
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0