source: Ballon/out/artifacts/geisa_artifact/resources/js/classesForJQuery/LoginButton.js

Last change on this file was 766, checked in by npipsl, 11 years ago
File size: 10.2 KB
Line 
1//********************************************************
2// Class LoginButton
3// Display a button to login or logout
4//
5// use jQuery && librairies from TwitterLogin
6// isNeededInscription : true if we need the part "inscription for a new user"
7//********************************************************
8
9var LoginButton = Class.create( {
10
11    initialize: function( param )
12    {
13        // Init
14        this.parent = param.parent ? param.parent : document.body;
15        this.anotherOnClickLogin = param.anotherOnClickLogin ? param.anotherOnClickLogin : false;
16        this.anotherOnClickLogout = param.anotherOnClickLogout ? param.anotherOnClickLogout : false;
17        this.jSONUser = param.jSONUser ? param.jSONUser : false;
18        this.urlLogin = param.urlLogin ? param.urlLogin : false;
19        this.urlLogout = param.urlLogout ? param.urlLogout : false;
20        this.classNameToAdd = param.classNameToAdd ? param.classNameToAdd : false;
21        this.isNeededInscription = param.isNeededInscription ? param.isNeededInscription : false;
22        this.callbackInscription = param.callbackInscription ? param.callbackInscription : false;
23
24        // Texts
25        this.connexionText = param.connexionText ? param.connexionText : loginTexts["app.connexion"];
26        this.loginText = param.loginText ? param.loginText : loginTexts["login"];
27        this.pwdText = param.pwdText ? param.pwdText : loginTexts["login.password"];
28        this.submitText = param.submitText ? param.submitText : loginTexts["login.sign"];
29        this.forgotPText = param.forgotPText ? param.forgotPText : loginTexts["login.pwdForget"];
30        this.forgotUNPHelpText = param.forgotUNPHelpText ? param.forgotUNPHelpText : loginTexts["login.loginForget.help"];
31        this.forgotUNPText = param.forgotUNPText ? param.forgotUNPText : loginTexts["login.loginForget"];
32        this.inscriptionText = param.inscriptionText ? param.inscriptionText : loginTexts["login.inscription"];
33        this.errorText = param.errorText ? param.errorText : loginTexts[this.errors];
34    },
35
36    // GETTER / SETTER ********************************************************
37    setJSONUser: function( jSONUser )
38    {
39        this.jSONUser = jSONUser;
40    },
41
42    getJSONUser: function()
43    {
44        return this.jSONUser;
45    },
46
47    getJSONUserRole: function()
48    {
49        return this.jSONUser.role;
50    },
51
52    // ACTIONS ********************************************************
53    createLoginForm: function()
54    {
55        var containerLoginForm = $( document.createElement( "fieldset" ) );
56        containerLoginForm.attr( {id:"signin_menu"} );
57        this.parent.append( containerLoginForm );
58
59        var labelLogin = $( document.createElement( "label" ) );
60        labelLogin.attr( {for:"login"} );
61        labelLogin.html( this.loginText );
62        var inputLogin = $( document.createElement( "input" ) );
63        inputLogin.attr( {id:"login", name:"login", tabIndex:"4", type:"text"} );
64        containerLoginForm.append( labelLogin );
65        containerLoginForm.append( inputLogin );
66
67        var labelPwd = $( document.createElement( "label" ) );
68        labelPwd.attr( {for:"pwd"} );
69        labelPwd.html( this.pwdText );
70        var inputPwd = $( document.createElement( "input" ) );
71        inputPwd.attr( {id:"pwd", name:"pwd", tabIndex:"5", type:"password"} );
72        containerLoginForm.append( labelPwd );
73        containerLoginForm.append( inputPwd );
74
75        var inputSubmitP = $( document.createElement( "p" ) );
76        inputSubmitP.addClass( "remember" );
77        var inputSubmit = $( document.createElement( "input" ) );
78        inputSubmit.attr( {id:"signin_submit", value:this.submitText, tabIndex:"6", type:"submit"} );
79        inputSubmit.bind( "click", jQuery.proxy( this.onClickLogin, this ) );
80        inputSubmitP.append( inputSubmit );
81        containerLoginForm.append( inputSubmitP );
82
83        var inputForgotUNP = $( document.createElement( "p" ) );
84        inputForgotUNP.addClass( "username" );
85        var aForgotUNP = $( document.createElement( "a" ) );
86        aForgotUNP.attr( {id:"forgot_username_link", href:"mailto:${webmaster}?subject=[MEGAPOLI] login", title:this.forgotUNPHelpText} );
87        aForgotUNP.html( this.forgotUNPText );
88        inputForgotUNP.append( aForgotUNP );
89        containerLoginForm.append( inputForgotUNP );
90
91        var inputForgotP = $( document.createElement( "p" ) );
92        inputForgotP.addClass( "forgot" );
93        var aForgotP = $( document.createElement( "a" ) );
94        aForgotP.attr( {id:"resend_password_link", href:"mailto:${webmaster}?subject=[MEGAPOLI] password"} );
95        aForgotP.html( this.forgotPText );
96        inputForgotP.append( aForgotP );
97        containerLoginForm.append( inputForgotP );
98
99        if( this.isNeededInscription )
100        {
101            var inputInscription = $( document.createElement( "p" ) );
102            inputInscription.addClass( "inscription" );
103            var aInscription = $( document.createElement( "a" ) );
104            aInscription.attr( {id:"inscription_link", href:"#"} );
105            aInscription.html( this.inscriptionText );
106            aInscription.bind( "click", jQuery.proxy( this.onClickInscription, this ) );
107            inputInscription.append( aInscription );
108            containerLoginForm.append( inputInscription );
109        }
110
111        var divErrors = $( document.createElement( "div" ) );
112        divErrors.attr( {id:"errors", class:"containerErrors"} );
113        containerLoginForm.append( divErrors );
114        this.containerErrors = $( "#errors" );
115    },
116
117    display: function()
118    {
119        if( this.jSONUser )
120        {
121            var textLogin = this.jSONUser.name + " " + this.jSONUser.firstName + " (" + loginTexts[this.jSONUser.role] + ")";
122
123            var loginButton = new ComplexButton( {value:textLogin, parent:this.parent, id:"button_login", classNameToAdd: this.classNameToAdd} );
124
125            $( "#button_login #button_middle #button_text" ).addClass( "containerUserLogout" );
126
127            var loginMiddle = $( "#button_login #button_middle" );
128            var divImgLogout = $( document.createElement( "div" ) );
129            divImgLogout.addClass( "containerImgLogout" );
130            divImgLogout.append( "<img src='resources/images/utils/logout.png' width='15px' height='15px'/>" );
131            divImgLogout.bind( "click", jQuery.proxy( this.onClickLogout, this ) );
132            loginMiddle.append( divImgLogout );
133        }
134        else
135        {
136            this.createLoginForm();
137
138            var loginButton = new ComplexButton( {value:this.connexionText, parent:this.parent, id:"button_login", classNameToAdd: this.classNameToAdd} );
139
140            var loginMiddle = $( "#button_login #button_middle" );
141            loginMiddle.empty();
142//            loginMiddle.attr( {id:"topnav", class:"topnav complexButton_middle"} );
143            loginMiddle.attr( {id:"topnav"} );
144            var aLogin = $( document.createElement( "a" ) );
145            aLogin.attr( {id:"button_login_a", href:"login", class:"signin"} );
146            aLogin.html( "<span>" + this.connexionText + "</span>" );
147            loginMiddle.append( aLogin );
148
149            $( ".signin" ).click( function( e )
150            {
151                e.preventDefault();
152                $( "fieldset#signin_menu" ).toggle();
153                $( ".signin" ).toggleClass( "menu-open" );
154            } );
155
156            $( "fieldset#signin_menu" ).mouseup( function()
157            {
158                return false
159            } );
160
161            $( document ).mouseup( function( e )
162            {
163                if( 0 == $( e.target ).parent( "a.signin" ).length )
164                {
165                    $( ".signin" ).removeClass( "menu-open" );
166                    $( "fieldset#signin_menu" ).hide();
167                }
168            } );
169        }
170    },
171
172    updateLoginOrLogout: function()
173    {
174        this.parent.empty();
175        this.display();
176    },
177
178    displayLoginErrors: function ( text )
179    {
180        $( "#errors" ).show();
181        $( "#errors" ).html( text );
182    },
183
184    showLogin: function( text )
185    {
186        if( $( "fieldset#signin_menu" ) && $( ".signin" ) )
187        {
188            $( "fieldset#signin_menu" ).toggle();
189            $( ".signin" ).toggleClass( "menu-open" );
190            if( text )
191                this.displayLoginErrors( text );
192        }
193        else
194            alert( this.displayLoginErrors( text ) );
195    },
196
197    // REQUESTS ********************************************************
198    requestLogin: function()
199    {
200        if( !this.urlLogin )
201            return;
202
203        var login = $( "#login" ).val();
204        var pwd = $( "#pwd" ).val();
205        $.ajax( {
206            url: this.urlLogin + "&login=" + login + "&pwd=" + pwd,
207            success:jQuery.proxy( this.onHandleLogin, this )
208        } );
209    },
210
211    requestLogout: function()
212    {
213        if( !this.urlLogout )
214            return;
215
216        $.ajax( {
217            url: this.urlLogout,
218            success:jQuery.proxy( this.onHandleLogout, this )
219        } );
220    },
221
222    // HANDLES ********************************************************
223    onHandleLogin: function( result )
224    {
225        this.errors = jQuery.parseJSON( result ).errors;
226        this.setJSONUser( null != jQuery.parseJSON( result ).jSONPeople ? jQuery.parseJSON( result ).jSONPeople : false );
227        if( null == this.errors )
228            this.updateLoginOrLogout();
229        else
230            this.displayLoginErrors( loginTexts[this.errors] );
231
232        if( this.anotherOnClickLogin )
233            this.anotherOnClickLogin();
234    },
235
236    onHandleLogout: function( result )
237    {
238        this.errors = jQuery.parseJSON( result ).errors;
239        if( null == this.errors )
240        {
241            this.setJSONUser( false );
242            this.updateLoginOrLogout();
243        }
244        else
245            this.displayLoginErrors( loginTexts[this.errors] );
246
247        if( this.anotherOnClickLogout )
248            this.anotherOnClickLogout();
249    },
250
251    // EVENTS ********************************************************
252    onClickLogin: function()
253    {
254        this.containerErrors.hide();
255        this.requestLogin();
256    },
257
258    onClickLogout: function()
259    {
260        this.requestLogout();
261    },
262
263    onClickInscription: function()
264    {
265        this.containerErrors.hide();
266        if( this.callbackInscription )
267            this.callbackInscription();
268    }
269
270} );
271
Note: See TracBrowser for help on using the repository browser.