]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - underlays/openid-selector/ikiwiki/openid/openid-jquery.js
remove the small buttons for livejournal/flickr/wordpress/aol
[git.ikiwiki.info.git] / underlays / openid-selector / ikiwiki / openid / openid-jquery.js
1 /*
2 Simple OpenID Plugin
3 http://code.google.com/p/openid-selector/
5 This code is licenced under the New BSD License.
6 */
8 var providers_large = {
9     verisign: {
10         name: 'Verisign',
11         icon: 'ikiwiki/openid/verisign.png',
12         label: 'Enter your Verisign username:',
13         url: 'http://{username}.pip.verisignlabs.com/'
14     },
15     yahoo: {
16         name: 'Yahoo',      
17         icon: 'ikiwiki/openid/goa-account-yahoo.png',
18         url: 'http://me.yahoo.com/'
19     },    
20     openid: {
21         name: 'OpenID',     
22         icon: 'wikiicons/openidlogin-bg.gif',
23         label: 'Enter your OpenID:',
24         url: null
25     }
26 };
27 var providers_small = {
28 };
29 var providers = $.extend({}, providers_large, providers_small);
31 var openid = {
33         demo: false,
34         ajaxHandler: null,
35         cookie_expires: 6*30,   // 6 months.
36         cookie_name: 'openid_provider',
37         cookie_path: '/',
38         
39         img_path: 'images/',
40         
41         input_id: null,
42         provider_url: null,
43         provider_id: null,
44         localsignin_id: null,
45         
46     init: function(input_id, localsignin_id, localsignin_label) {
47         
48         var openid_btns = $('#openid_btns');
49         
50         this.input_id = input_id;
51         
52         $('#openid_choice').show();
53         $('#openid_input_area').empty();
54         
55         // add box for each provider
56         for (id in providers_large) {
57                 openid_btns.append(this.getBoxHTML(providers_large[id], 'large'));
58         }
59         if (localsignin_label != "") {
60                 this.localsignin_label=localsignin_label;
61         }
62         else {
63                 this.localsignin_label="other";
64         }
65         if (localsignin_id != "") {
66                 this.localsignin_id=localsignin_id;
67                 openid_btns.append(
68                         '<a href="javascript: openid.signin(\'localsignin\');"' +
69                         ' style="background: #FFF" ' +
70                         'class="localsignin openid_large_btn">' +
71                         '<img alt="" width="16" height="16" src="favicon.ico" />' +
72                         ' ' + this.localsignin_label +
73                         '</a>'
74                 );
75                 $('#'+this.localsignin_id).hide();
76         }
78         if (providers_small) {
79                 openid_btns.append('<br/>');
80                 
81                 for (id in providers_small) {
82                 
83                         openid_btns.append(this.getBoxHTML(providers_small[id], 'small'));
84                 }
85         }
86         
87         $('#openid_form').submit(this.submit);
88         
89         var box_id = this.readCookie();
90         if (box_id) {
91                 this.signin(box_id, true);
92         }
93     },
94     getBoxHTML: function(provider, box_size) {
95         var label="";
96         var title=""
97         if (box_size == 'large') {
98                 label=' ' + provider["name"];
99         }
100         else {
101                 title=' title="'+provider["name"]+'"';
102         }
103         var box_id = provider["name"].toLowerCase();
104         return '<a' + title +' href="javascript: openid.signin(\''+ box_id +'\');"' +
105                         ' style="background: #FFF" ' + 
106                         'class="' + box_id + ' openid_' + box_size + '_btn">' +
107                         '<img alt="" width="16" height="16" src="' + provider["icon"] + '" />' +
108                         label +
109                         '</a>';
110     
111     },
112     /* Provider image click */
113     signin: function(box_id, onload) {
115         if (box_id == 'localsignin') {
116                 this.highlight(box_id);
117                 $('#openid_input_area').empty();
118                 $('#'+this.localsignin_id).show();
119                 this.setCookie(box_id);
120                 return;
121         }
122         else {
123                 if (this.localsignin_id) {
124                         $('#'+this.localsignin_id).hide();
125                 }
126         }
128         var provider = providers[box_id];
129                 if (! provider) {
130                         return;
131                 }
132                 
133                 this.highlight(box_id);
134                 
135                 this.provider_id = box_id;
136                 this.provider_url = provider['url'];
137                 
138                 // prompt user for input?
139                 if (provider['label']) {
140                         this.setCookie(box_id);
141                         this.useInputBox(provider);
142                 } else {
143                         this.setCookie('');
144                         $('#openid_input_area').empty();
145                         if (! onload) {
146                                 $('#openid_form').submit();
147                         }
148                 }
149     },
150     /* Sign-in button click */
151     submit: function() {
152         
153         var url = openid.provider_url; 
154         if (url) {
155                 url = url.replace('{username}', $('#openid_username').val());
156                 openid.setOpenIdUrl(url);
157         }
158         if(openid.ajaxHandler) {
159                 openid.ajaxHandler(openid.provider_id, document.getElementById(openid.input_id).value);
160                 return false;
161         }
162         if(openid.demo) {
163                 alert("In client demo mode. Normally would have submitted OpenID:\r\n" + document.getElementById(openid.input_id).value);
164                 return false;
165         }
166         return true;
167     },
168     setOpenIdUrl: function (url) {
169     
170         var hidden = $('#'+this.input_id);
171         if (hidden.length > 0) {
172                 hidden.value = url;
173         } else {
174                 $('#openid_form').append('<input style="display:none" id="' + this.input_id + '" name="' + this.input_id + '" value="'+url+'"/>');
175         }
176     },
177     highlight: function (box_id) {
178         
179         // remove previous highlight.
180         var highlight = $('#openid_highlight');
181         if (highlight) {
182                 highlight.replaceWith($('#openid_highlight a')[0]);
183         }
184         // add new highlight.
185         $('.'+box_id).wrap('<div id="openid_highlight"></div>');
186     },
187     setCookie: function (value) {
188     
189                 var date = new Date();
190                 date.setTime(date.getTime()+(this.cookie_expires*24*60*60*1000));
191                 var expires = "; expires="+date.toGMTString();
192                 
193                 document.cookie = this.cookie_name+"="+value+expires+"; path=" + this.cookie_path;
194     },
195     readCookie: function () {
196                 var nameEQ = this.cookie_name + "=";
197                 var ca = document.cookie.split(';');
198                 for(var i=0;i < ca.length;i++) {
199                         var c = ca[i];
200                         while (c.charAt(0)==' ') c = c.substring(1,c.length);
201                         if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
202                 }
203                 return null;
204     },
205     useInputBox: function (provider) {
206         
207                 var input_area = $('#openid_input_area');
208                 
209                 var html = '';
210                 var id = 'openid_username';
211                 var value = '';
212                 var label = provider['label'];
213                 var style = '';
214                 
215                 if (provider['name'] == 'OpenID') {
216                         id = this.input_id;
217                         value = '';
218                         style = 'background:#FFF url(wikiicons/openidlogin-bg.gif) no-repeat scroll 0 50%; padding-left:18px;';
219                 }
220                 if (label) {
221                         html = '<label for="'+ id +'" class="block">' + label + '</label>';
222                 }
223                 html += '<input id="'+id+'" type="text" style="'+style+'" name="'+id+'" value="'+value+'" />' + 
224                                         '<input id="openid_submit" type="submit" value="Login"/>';
225                 
226                 input_area.empty();
227                 input_area.append(html);
229                 $('#'+id).focus();
230     },
231     setDemoMode: function (demoMode) {
232         this.demo = demoMode;
233     },
234     setAjaxHandler: function (ajaxFunction) {
235         this.ajaxHandler = ajaxFunction;
236     }
237 };