moved non-openid signin form into same page as openid selector; show/hide as buttons are pressed

master
Joey Hess 2010-05-08 15:57:39 -04:00
parent f735e2d1b3
commit c3e9215e1f
4 changed files with 57 additions and 30 deletions

View File

@ -22,7 +22,7 @@ sub printheader ($) {
}
}
sub showform ($$$$;@) {
sub prepform {
my $form=shift;
my $buttons=shift;
my $session=shift;
@ -35,6 +35,16 @@ sub showform ($$$$;@) {
});
}
return $form;
}
sub showform ($$$$;@) {
my $form=prepform(@_);
shift;
my $buttons=shift;
my $session=shift;
my $cgi=shift;
printheader($session);
print misctemplate($form->title, $form->render(submit => $buttons), @_);
}
@ -90,9 +100,10 @@ sub needsignin ($$) {
}
}
sub cgi_signin ($$) {
sub cgi_signin ($$;$) {
my $q=shift;
my $session=shift;
my $returnhtml=shift;
decode_cgi_utf8($q);
eval q{use CGI::FormBuilder};
@ -112,9 +123,6 @@ sub cgi_signin ($$) {
);
my $buttons=["Login"];
if ($q->param("do") ne "signin" && !$form->submitted) {
$form->text(gettext("You need to log in first."));
}
$form->field(name => "do", type => "hidden", value => "signin",
force => 1);
@ -129,6 +137,11 @@ sub cgi_signin ($$) {
$form->validate;
}
if ($returnhtml) {
$form=prepform($form, $buttons, $session, $q);
return $form->render(submit => $buttons);
}
showform($form, $buttons, $session, $q);
}

View File

@ -62,17 +62,13 @@ sub openid_selector {
$openid_error=shift;
});
}
elsif ($q->param("do") eq "signin" && $real_cgi_signin) {
$real_cgi_signin->($q, $session);
exit;
}
my $template=IkiWiki::template("openid-selector.tmpl");
$template->param(
cgiurl => $config{cgiurl},
(defined $openid_error ? (openid_error => $openid_error) : ()),
(defined $openid_url ? (openid_url => $openid_url) : ()),
($real_cgi_signin ? (nonopenidurl => IkiWiki::cgiurl(do => "signin")) : ()),
($real_cgi_signin ? (nonopenidform => $real_cgi_signin->($q, $session, 1)) : ()),
);
IkiWiki::printheader($session);

View File

@ -2,21 +2,18 @@
<script type="text/javascript" src="ikiwiki/openid/openid-jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
openid.init('openid_identifier', "<TMPL_VAR NONOPENIDURL>");
openid.init('openid_identifier','<TMPL_IF NONOPENIDFORM>nonopenidform</TMPL_IF>');
});
</script>
<noscript>
<h2>OpenID:</h2>
</noscript>
<form action="<TMPL_VAR CGIURL>" method="get" id="openid_form">
<fieldset>
<legend>Select your account provider</legend>
<noscript>
<ul>
<TMPL_IF NONOPENIDURL>
<li><a href="<TMPL_VAR NONOPENIDURL>">Local Account</a></li>
</TMPL_IF>
<li>OpenID:</div>
</noscript>
<input type="hidden" name="do" value="signin" />
<input type="hidden" name="action" value="verify" />
<div id="openid_choice">
@ -29,9 +26,15 @@ $(document).ready(function() {
<TMPL_IF OPENID_ERROR>
<div class="error"><TMPL_VAR OPENID_ERROR></div>
</TMPL_IF>
<noscript>
</li>
</ul>
</noscript>
</fieldset>
</form>
<div id="nonopenidform">
<TMPL_IF NONOPENIDFORM>
<br />
<noscript>
<h2>Local Account:</h2>
</noscript>
</TMPL_IF>
<TMPL_VAR NONOPENIDFORM>
</div>

View File

@ -82,8 +82,9 @@ var openid = {
input_id: null,
provider_url: null,
provider_id: null,
localsignin_id: null,
init: function(input_id, localloginurl) {
init: function(input_id, localsignin_id) {
var openid_btns = $('#openid_btns');
@ -105,13 +106,14 @@ var openid = {
openid_btns.append(this.getBoxHTML(providers_small[id], 'small'));
}
}
if (localloginurl != "") {
if (localsignin_id != "") {
this.localsignin_id=localsignin_id;
openid_btns.append(
'<a href="' + localloginurl + '"' +
'<a href="javascript: openid.signin(\'localsignin\');"' +
' style="background: #FFF" ' +
'class="openid_small_btn">' +
'class="localsignin openid_small_btn">' +
'<img alt="" width="16" height="16" src="favicon.ico" />' +
' Local Account' +
' other' +
'</a>'
);
}
@ -143,7 +145,20 @@ var openid = {
},
/* Provider image click */
signin: function(box_id, onload) {
if (box_id == 'localsignin') {
this.highlight(box_id);
$('#openid_input_area').empty();
$('#'+this.localsignin_id).show();
this.setCookie(box_id);
return;
}
else {
if (this.localsignin_id) {
$('#'+this.localsignin_id).hide();
}
}
var provider = providers[box_id];
if (! provider) {
return;