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