1/* 2 Simple OpenID Plugin 3 http://code.google.com/p/openid-selector/ 4 5 This code is licensed under the New BSD License. 6*/ 7 8var providers; 9var openid; 10(function ($) { 11openid = { 12 version : '1.3', // version constant 13 demo : false, 14 demo_text : null, 15 cookie_expires : 6 * 30, // 6 months. 16 cookie_name : 'openid_provider', 17 cookie_path : '/', 18 19 img_path : 'images/', 20 locale : null, // is set in openid-<locale>.js 21 sprite : null, // usually equals to locale, is set in 22 // openid-<locale>.js 23 signin_text : null, // text on submit button on the form 24 all_small : false, // output large providers w/ small icons 25 no_sprite : false, // don't use sprite image 26 image_title : '{provider}', // for image title 27 28 input_id : null, 29 provider_url : null, 30 provider_id : null, 31 32 /** 33 * Class constructor 34 * 35 * @return {Void} 36 */ 37 init : function(input_id) { 38 providers = $.extend({}, providers_large, providers_small); 39 var openid_btns = $('#openid_btns'); 40 this.input_id = input_id; 41 $('#openid_choice').show(); 42 $('#openid_input_area').empty(); 43 var i = 0; 44 // add box for each provider 45 for (id in providers_large) { 46 box = this.getBoxHTML(id, providers_large[id], (this.all_small ? 'small' : 'large'), i++); 47 openid_btns.append(box); 48 } 49 if (providers_small) { 50 openid_btns.append('<br/>'); 51 for (id in providers_small) { 52 box = this.getBoxHTML(id, providers_small[id], 'small', i++); 53 openid_btns.append(box); 54 } 55 } 56 $('#openid_form').submit(this.submit); 57 var box_id = this.readCookie(); 58 if (box_id) { 59 this.signin(box_id, true); 60 } 61 }, 62 63 /** 64 * @return {String} 65 */ 66 getBoxHTML : function(box_id, provider, box_size, index) { 67 if (this.no_sprite) { 68 var image_ext = box_size == 'small' ? '.ico.gif' : '.gif'; 69 return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"' 70 + ' style="background: #FFF url(' + this.img_path + '../images.' + box_size + '/' + box_id + image_ext + ') no-repeat center center" ' 71 + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>'; 72 } 73 var x = box_size == 'small' ? -index * 24 : -index * 100; 74 var y = box_size == 'small' ? -60 : 0; 75 return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"' 76 + ' style="background: #FFF url(' + this.img_path + 'openid-providers-' + this.sprite + '-all.png); background-position: ' + x + 'px ' + y + 'px" ' 77 + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>'; 78 }, 79 80 /** 81 * Provider image click 82 * 83 * @return {Void} 84 */ 85 signin : function(box_id, onload) { 86 var provider = providers[box_id]; 87 if (!provider) { 88 return; 89 } 90 this.highlight(box_id); 91 this.setCookie(box_id); 92 this.provider_id = box_id; 93 this.provider_url = provider['url']; 94 // prompt user for input? 95 if (provider['label']) { 96 this.useInputBox(provider); 97 } else { 98 $('#openid_input_area').empty(); 99 if (!onload) { 100 $('#openid_form').submit(); 101 } 102 } 103 }, 104 105 /** 106 * Sign-in button click 107 * 108 * @return {Boolean} 109 */ 110 submit : function() { 111 var url = openid.provider_url; 112 if (url) { 113 url = url.replace('{username}', $('#openid_username').val()); 114 openid.setOpenIdUrl(url); 115 } 116 if (openid.demo) { 117 alert(openid.demo_text + "\r\n" + document.getElementById(openid.input_id).value); 118 return false; 119 } 120 if (url.indexOf("javascript:") == 0) { 121 url = url.substr("javascript:".length); 122 eval(url); 123 return false; 124 } 125 return true; 126 }, 127 128 /** 129 * @return {Void} 130 */ 131 setOpenIdUrl : function(url) { 132 var hidden = document.getElementById(this.input_id); 133 if (hidden != null) { 134 hidden.value = url; 135 } else { 136 $('#openid_form').append('<input type="hidden" id="' + this.input_id + '" name="' + this.input_id + '" value="' + url + '"/>'); 137 } 138 }, 139 140 /** 141 * @return {Void} 142 */ 143 highlight : function(box_id) { 144 // remove previous highlight. 145 var highlight = $('#openid_highlight'); 146 if (highlight) { 147 highlight.replaceWith($('#openid_highlight a')[0]); 148 } 149 // add new highlight. 150 $('.' + box_id).wrap('<div id="openid_highlight"></div>'); 151 }, 152 153 setCookie : function(value) { 154 var date = new Date(); 155 date.setTime(date.getTime() + (this.cookie_expires * 24 * 60 * 60 * 1000)); 156 var expires = "; expires=" + date.toGMTString(); 157 document.cookie = this.cookie_name + "=" + value + expires + "; path=" + this.cookie_path; 158 }, 159 160 readCookie : function() { 161 var nameEQ = this.cookie_name + "="; 162 var ca = document.cookie.split(';'); 163 for ( var i = 0; i < ca.length; i++) { 164 var c = ca[i]; 165 while (c.charAt(0) == ' ') 166 c = c.substring(1, c.length); 167 if (c.indexOf(nameEQ) == 0) 168 return c.substring(nameEQ.length, c.length); 169 } 170 return null; 171 }, 172 173 /** 174 * @return {Void} 175 */ 176 useInputBox : function(provider) { 177 var input_area = $('#openid_input_area'); 178 var html = ''; 179 var id = 'openid_username'; 180 var value = ''; 181 var label = provider['label']; 182 var style = ''; 183 if (label) { 184 html = '<p>' + label + '</p>'; 185 } 186 if (provider['name'] == 'OpenID') { 187 id = this.input_id; 188 value = 'http://'; 189 style = 'background: #FFF url(' + this.img_path + 'openid-inputicon.gif) no-repeat scroll 0 50%; padding-left:18px;'; 190 } 191 html += '<input id="' + id + '" type="text" style="' + style + '" name="' + id + '" value="' + value + '" />' 192 + '<input id="openid_submit" type="submit" value="' + this.signin_text + '"/>'; 193 input_area.empty(); 194 input_area.append(html); 195 $('#' + id).focus(); 196 }, 197 198 setDemoMode : function(demoMode) { 199 this.demo = demoMode; 200 } 201}; 202})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.