}
}
-sub showform ($$$$;@) {
+sub prepform {
my $form=shift;
my $buttons=shift;
my $session=shift;
});
}
+ 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), @_);
}
}
}
-sub cgi_signin ($$) {
+sub cgi_signin ($$;$) {
my $q=shift;
my $session=shift;
+ my $returnhtml=shift;
decode_cgi_utf8($q);
eval q{use CGI::FormBuilder};
);
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);
$form->validate;
}
+ if ($returnhtml) {
+ $form=prepform($form, $buttons, $session, $q);
+ return $form->render(submit => $buttons);
+ }
+
showform($form, $buttons, $session, $q);
}
$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);
<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">
<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>
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');
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>'
);
}
},
/* 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;