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// 创建登陆控件
  5var _loginControl = new Snip.LoginControl('UserName-L''Password-L''Status-L''login_control''server-auth-status''server-username');
  6
  7
  8// 创建注册控件
  9var _registerControl = new Snip.RegisterControl('UserName-R''Email-R''Password-R''PasswordCheck-R''Status-R''register_control');  
 10
 11// 初始化登陆 状态栏为null
 12
 13var _loginStatusBar = null;
 14
 15//  引用 login wrapper
 16var _loginWrapper = null;
 17
 18// 控件的样式表文件
 19// if null or empty, it will not be dynamically loaded
 20var 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
 29var _profilePathFormat = null;//"/members/{0}.aspx";
 30
 31// add control init function to atlas init
 32
 33初始化
 34Sys.Application.add_init(InitLoginStatus);
 35
 36//
 37 
 38//登陆状态控件 初始化 函数
 39function 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
 85var _pwdLength = 6;//<asp:Literal ID="PasswordLengthJS" runat="server"/>;
 86//
 87// 登陆按钮被点击时调用
 88function 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// 注册按钮被点击时调用
102function 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 类中的回调方法调用
117function 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// 检查用户是否登入,然后登出
140function 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类中的回调方法调用
151function 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// 某个窗口需要打开时调用
159function 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}

168var _prevFormTab = null;
169//
170// 取得 profile 连接时调用
171function 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
182var iebody = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
183//
184// Called to position the wrapper div fixed (if not IE7 or FF)
185function 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 状态的哈希表
199function 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//编码
215function 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
243if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
posted on 2008-01-05 18:05  蓝蓝的天2016  阅读(1561)  评论(0)    收藏  举报