ajax-login-system 学习笔记
接上篇再看 Skin-LoginStatusControl.js 文件
1
// This script will be automatically added to any page that uses the LoginStatusControl
2
// It is used for script that is specific to the Skin-LoginStatusControl.ascx skin.
3
4
// 创建登陆控件
5
var _loginControl = new Snip.LoginControl('UserName-L', 'Password-L', 'Status-L', 'login_control', 'server-auth-status', 'server-username');
6
7
8
// 创建注册控件
9
var _registerControl = new Snip.RegisterControl('UserName-R', 'Email-R', 'Password-R', 'PasswordCheck-R', 'Status-R', 'register_control');
10
11
// 初始化登陆 状态栏为null
12
13
var _loginStatusBar = null;
14
15
// 引用 login wrapper
16
var _loginWrapper = null;
17
18
// 控件的样式表文件
19
// if null or empty, it will not be dynamically loaded
20
var loginStatus_StyleUrl = null;//'http://localhost/AjaxLogin.Web/SnipThemes/default/skins/Skin-LoginStatusControl.css';
21
22
// the format for the link to a user's profile.
23
// the url encoded username will replace {0}
24
// the path should be relative to root
25
// set to null or empty string to not have a link
26
27
//用户 profile连接的字符格式
28
29
var _profilePathFormat = null;//"/members/{0}.aspx";
30
31
// add control init function to atlas init
32
33
初始化
34
Sys.Application.add_init(InitLoginStatus);
35
36
//
37
38
//登陆状态控件 初始化 函数
39
function InitLoginStatus(){
40
41
//获取登陆状态栏
42
_loginStatusBar = $get('login-status-bar');
43
44
// 设置 登陆 控件 回调
45
_loginControl.set_loginCallback(OnLogin);
46
_loginControl.set_logoutCallback(OnLogout);
47
// 设置注册 控件 回调
48
_registerControl.set_registerCallback(OnLogin);
49
50
// 获得到 login wrapper 的引用
51
_loginWrapper = $get('login-status-wrapper');
52
53
// 使用样式表 在IE7
54
if( !document.all || navigator.appVersion.indexOf('MSIE 7.0') > 0){
55
_loginWrapper.style.position = "fixed";
56
// 其他浏览器
57
}else{
58
setInterval("PositionWrapper()",50);
59
}
60
61
if( loginStatus_StyleUrl != null && loginStatus_StyleUrl.length > 0 ){
62
// 动态添加样式表
63
if(document.createStyleSheet) {
64
document.createStyleSheet(loginStatus_StyleUrl);
65
}
66
else {
67
var styles = "@import url(' " + loginStatus_StyleUrl + " ');";
68
var newSS = document.createElement('link');
69
newSS.rel = 'stylesheet';
70
newSS.href = 'data:text/css,'+escape(styles);
71
document.getElementsByTagName("head")[0].appendChild(newSS);
72
}
73
}
74
75
// 检查 认证 状态
76
_loginControl.init_fields();
77
if( _loginControl.get_auth() ){
78
_loginStatusBar.innerHTML = 'Welcome, ' + GetUsernameLink(_loginControl.get_username()) + '. <a href="#" onclick="_registerControl.Close();_loginControl.Close();TryLogout();" title="Sign Out">Sign Out</a>.';
79
}else{
80
// check the url hash for control state
81
checkUrlHash();
82
}
83
}
84
85
var _pwdLength = 6;//<asp:Literal ID="PasswordLengthJS" runat="server"/>;
86
//
87
// 登陆按钮被点击时调用
88
function LoginClicked(){
89
// pwd length
90
_loginControl.PLength(_pwdLength);
91
// remember me
92
var persist = false;
93
var r = $get('login-remember-me');
94
if( r != null ){
95
persist = r.checked;
96
}
97
// 用户登陆 --调用_loginControl类
98
_loginControl.LoginUser(persist);
99
}
100
//
101
// 注册按钮被点击时调用
102
function RegisterClicked(){
103
// set pwd length
104
_registerControl.PLength(_pwdLength);
105
// remember me
106
var persist = false;
107
var r = $get('register-remember-me');
108
if( r != null ){
109
persist = r.checked;
110
}
111
// register user
112
_registerControl.RegisterUser(persist);
113
}
114
115
//
116
// 登陆成功时调用 , 由_loginControl 类中的回调方法调用
117
function OnLogin(){
118
// verify
119
if( _loginControl.get_auth() ){
120
_loginStatusBar.innerHTML = 'Welcome, ' + GetUsernameLink(_loginControl.get_username()) + '. <a href="#" onclick="_registerControl.Close();_loginControl.Close();TryLogout();" title="Sign Out">Sign Out</a>.';
121
}
122
// close control
123
_loginControl.Close();
124
125
// check for ReturnUrl
126
var currentHash = window.location.hash;
127
var rUrlIndex = currentHash.indexOf('?ReturnUrl=');
128
//alert(rUrlIndex);
129
if( rUrlIndex > 0 ){
130
var rUrl = currentHash.substring(rUrlIndex + 11, currentHash.length);
131
rUrl = unescape(rUrl);
132
//alert('ReturnUrl is ' + rUrl);
133
if( rUrl != null && rUrl.length > 0 ){
134
window.location = rUrl;
135
}
136
}
137
}
138
//
139
// 检查用户是否登入,然后登出
140
function TryLogout(){
141
// verify auth status
142
if( _loginControl.get_auth() ){
143
_loginStatusBar.innerHTML = 'Signing out
';
144
_loginControl.LogoutUser();
145
}else{
146
OnLogout();
147
}
148
}
149
//
150
// 登出成功时调用 ,由_loginControl类中的回调方法调用
151
function OnLogout(){
152
// verify
153
if( !_loginControl.get_auth() ){
154
_loginStatusBar.innerHTML = 'Welcome. Please <a href="#" onclick="_registerControl.Close();_loginControl.Open();" title="Sign In">Sign In</a>.';
155
}
156
}
157
//
158
// 某个窗口需要打开时调用
159
function OpenForm(link, openForm, closeForm){
160
if( _prevFormTab != null ){
161
link.parentNode.className = "";
162
}
163
link.parentNode.className = "selected";
164
closeForm.Close();
165
openForm.Open();
166
_prevFormTab = link.parentNode;
167
}
168
var _prevFormTab = null;
169
//
170
// 取得 profile 连接时调用
171
function GetUsernameLink(userName){
172
var rtn = userName;
173
if( _profilePathFormat != null && _profilePathFormat.length > 0 ){
174
var url = "http://" + window.location.hostname + _profilePathFormat.replace("{0}", CS_Encode(userName));
175
rtn = '<a href="' + url + '">' + userName + '</a>';
176
}
177
return rtn;
178
}
179
180
//
181
//define reference to the body object in IE
182
var iebody = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
183
//
184
// Called to position the wrapper div fixed (if not IE7 or FF)
185
function PositionWrapper(){
186
//define universal dsoc left point
187
var dsocleft=document.all? iebody.scrollLeft : pageXOffset;
188
//define universal dsoc top point
189
var dsoctop=document.all? iebody.scrollTop : pageYOffset;
190
191
//if the user is using IE 4+ or Firefox/ NS6+
192
if (document.all||document.getElementById){
193
_loginWrapper.style.left=parseInt(dsocleft)+0+"px";
194
_loginWrapper.style.top=dsoctop+0+"px";
195
}
196
}
197
//
198
// Checks the hash for LoginStatusControl state 检查 LoginStatusControl 状态的哈希表
199
function checkUrlHash() {
200
var currentHash = window.location.hash;
201
//alert('hash is ' + currentHash.indexOf('#sign-in'));
202
if( currentHash.indexOf('sign-in') > 0 ){
203
_registerControl.Close();
204
_loginControl.Open();
205
}else if( currentHash.indexOf('join') > 0 ){
206
_loginControl.Close();
207
_registerControl.Open();
208
}else{
209
_loginControl.Close();
210
_registerControl.Close();
211
}
212
}
213
214
//编码
215
function CS_Encode(str) {
216
var SAFECHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.!~*'()";
217
var HEX = "0123456789ABCDEF";
218
var encoded = "";
219
for (var i = 0; i < str.length; i++) {
220
var ch = str.charAt(i);
221
if (ch == " ") {
222
encoded += "+";
223
} else if (SAFECHARS.indexOf(ch) != -1) {
224
encoded += ch;
225
} else if (ch == "'") {
226
encoded += "%27";
227
} else {
228
var charCode = ch.charCodeAt(0);
229
if (charCode > 255) {
230
encoded += "+";
231
} else {
232
encoded += "%";
233
encoded += HEX.charAt(charCode >> 4 & 15);
234
encoded += HEX.charAt(charCode & 15);
235
}
236
}
237
}
238
return encoded;
239
}
240
241
//
242
// notify atlas script has loaded
243
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
// This script will be automatically added to any page that uses the LoginStatusControl2
// It is used for script that is specific to the Skin-LoginStatusControl.ascx skin.3

4
// 创建登陆控件5
var _loginControl = new Snip.LoginControl('UserName-L', 'Password-L', 'Status-L', 'login_control', 'server-auth-status', 'server-username');6

7

8
// 创建注册控件9
var _registerControl = new Snip.RegisterControl('UserName-R', 'Email-R', 'Password-R', 'PasswordCheck-R', 'Status-R', 'register_control'); 10

11
// 初始化登陆 状态栏为null12

13
var _loginStatusBar = null;14

15
// 引用 login wrapper16
var _loginWrapper = null;17

18
// 控件的样式表文件19
// if null or empty, it will not be dynamically loaded20
var loginStatus_StyleUrl = null;//'http://localhost/AjaxLogin.Web/SnipThemes/default/skins/Skin-LoginStatusControl.css';21

22
// the format for the link to a user's profile. 23
// the url encoded username will replace {0}24
// the path should be relative to root25
// set to null or empty string to not have a link26

27
//用户 profile连接的字符格式28

29
var _profilePathFormat = null;//"/members/{0}.aspx";30

31
// add control init function to atlas init32

33
初始化34
Sys.Application.add_init(InitLoginStatus);35

36
//37
38
//登陆状态控件 初始化 函数39
function InitLoginStatus(){40
41
//获取登陆状态栏42
_loginStatusBar = $get('login-status-bar');43
44
// 设置 登陆 控件 回调45
_loginControl.set_loginCallback(OnLogin);46
_loginControl.set_logoutCallback(OnLogout);47
// 设置注册 控件 回调48
_registerControl.set_registerCallback(OnLogin);49
50
// 获得到 login wrapper 的引用51
_loginWrapper = $get('login-status-wrapper');52
53
// 使用样式表 在IE754
if( !document.all || navigator.appVersion.indexOf('MSIE 7.0') > 0){ 55
_loginWrapper.style.position = "fixed";56
// 其他浏览器57
}else{58
setInterval("PositionWrapper()",50);59
}60
61
if( loginStatus_StyleUrl != null && loginStatus_StyleUrl.length > 0 ){62
// 动态添加样式表63
if(document.createStyleSheet) {64
document.createStyleSheet(loginStatus_StyleUrl);65
}66
else {67
var styles = "@import url(' " + loginStatus_StyleUrl + " ');";68
var newSS = document.createElement('link');69
newSS.rel = 'stylesheet';70
newSS.href = 'data:text/css,'+escape(styles);71
document.getElementsByTagName("head")[0].appendChild(newSS);72
}73
}74
75
// 检查 认证 状态76
_loginControl.init_fields();77
if( _loginControl.get_auth() ){ 78
_loginStatusBar.innerHTML = 'Welcome, ' + GetUsernameLink(_loginControl.get_username()) + '. <a href="#" onclick="_registerControl.Close();_loginControl.Close();TryLogout();" title="Sign Out">Sign Out</a>.';79
}else{80
// check the url hash for control state81
checkUrlHash();82
}83
}84

85
var _pwdLength = 6;//<asp:Literal ID="PasswordLengthJS" runat="server"/>;86
//87
// 登陆按钮被点击时调用88
function LoginClicked(){ 89
// pwd length90
_loginControl.PLength(_pwdLength);91
// remember me92
var persist = false;93
var r = $get('login-remember-me');94
if( r != null ){95
persist = r.checked;96
}97
// 用户登陆 --调用_loginControl类98
_loginControl.LoginUser(persist);99
}100
//101
// 注册按钮被点击时调用102
function RegisterClicked(){103
// set pwd length104
_registerControl.PLength(_pwdLength);105
// remember me106
var persist = false;107
var r = $get('register-remember-me');108
if( r != null ){109
persist = r.checked;110
}111
// register user112
_registerControl.RegisterUser(persist);113
} 114

115
//116
// 登陆成功时调用 , 由_loginControl 类中的回调方法调用117
function OnLogin(){118
// verify119
if( _loginControl.get_auth() ){ 120
_loginStatusBar.innerHTML = 'Welcome, ' + GetUsernameLink(_loginControl.get_username()) + '. <a href="#" onclick="_registerControl.Close();_loginControl.Close();TryLogout();" title="Sign Out">Sign Out</a>.';121
}122
// close control123
_loginControl.Close();124
125
// check for ReturnUrl126
var currentHash = window.location.hash;127
var rUrlIndex = currentHash.indexOf('?ReturnUrl=');128
//alert(rUrlIndex);129
if( rUrlIndex > 0 ){130
var rUrl = currentHash.substring(rUrlIndex + 11, currentHash.length);131
rUrl = unescape(rUrl);132
//alert('ReturnUrl is ' + rUrl);133
if( rUrl != null && rUrl.length > 0 ){134
window.location = rUrl;135
}136
}137
}138
//139
// 检查用户是否登入,然后登出140
function TryLogout(){141
// verify auth status142
if( _loginControl.get_auth() ){ 143
_loginStatusBar.innerHTML = 'Signing out
';144
_loginControl.LogoutUser();145
}else{146
OnLogout();147
}148
}149
//150
// 登出成功时调用 ,由_loginControl类中的回调方法调用151
function OnLogout(){152
// verify153
if( !_loginControl.get_auth() ){ 154
_loginStatusBar.innerHTML = 'Welcome. Please <a href="#" onclick="_registerControl.Close();_loginControl.Open();" title="Sign In">Sign In</a>.';155
}156
}157
//158
// 某个窗口需要打开时调用159
function OpenForm(link, openForm, closeForm){160
if( _prevFormTab != null ){161
link.parentNode.className = "";162
}163
link.parentNode.className = "selected";164
closeForm.Close();165
openForm.Open();166
_prevFormTab = link.parentNode;167
}168
var _prevFormTab = null;169
//170
// 取得 profile 连接时调用171
function GetUsernameLink(userName){172
var rtn = userName;173
if( _profilePathFormat != null && _profilePathFormat.length > 0 ){174
var url = "http://" + window.location.hostname + _profilePathFormat.replace("{0}", CS_Encode(userName));175
rtn = '<a href="' + url + '">' + userName + '</a>';176
}177
return rtn;178
}179

180
//181
//define reference to the body object in IE182
var iebody = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;183
//184
// Called to position the wrapper div fixed (if not IE7 or FF)185
function PositionWrapper(){186
//define universal dsoc left point187
var dsocleft=document.all? iebody.scrollLeft : pageXOffset;188
//define universal dsoc top point189
var dsoctop=document.all? iebody.scrollTop : pageYOffset;190

191
//if the user is using IE 4+ or Firefox/ NS6+192
if (document.all||document.getElementById){193
_loginWrapper.style.left=parseInt(dsocleft)+0+"px";194
_loginWrapper.style.top=dsoctop+0+"px";195
}196
}197
//198
// Checks the hash for LoginStatusControl state 检查 LoginStatusControl 状态的哈希表199
function checkUrlHash() {200
var currentHash = window.location.hash;201
//alert('hash is ' + currentHash.indexOf('#sign-in'));202
if( currentHash.indexOf('sign-in') > 0 ){203
_registerControl.Close();204
_loginControl.Open();205
}else if( currentHash.indexOf('join') > 0 ){206
_loginControl.Close(); 207
_registerControl.Open(); 208
}else{209
_loginControl.Close(); 210
_registerControl.Close(); 211
}212
}213

214
//编码215
function CS_Encode(str) {216
var SAFECHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.!~*'()";217
var HEX = "0123456789ABCDEF";218
var encoded = "";219
for (var i = 0; i < str.length; i++) {220
var ch = str.charAt(i);221
if (ch == " ") {222
encoded += "+";223
} else if (SAFECHARS.indexOf(ch) != -1) {224
encoded += ch;225
} else if (ch == "'") {226
encoded += "%27";227
} else {228
var charCode = ch.charCodeAt(0);229
if (charCode > 255) {230
encoded += "+";231
} else {232
encoded += "%";233
encoded += HEX.charAt(charCode >> 4 & 15);234
encoded += HEX.charAt(charCode & 15);235
}236
}237
}238
return encoded;239
}240

241
//242
// notify atlas script has loaded243
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();


浙公网安备 33010602011771号