aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/CGI.pm23
-rw-r--r--IkiWiki/Plugin/openid.pm6
-rw-r--r--templates/openid-selector.tmpl31
-rw-r--r--underlays/openid-selector/ikiwiki/openid/openid-jquery.js27
4 files changed, 57 insertions, 30 deletions
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 49a505514..b98e9e0a1 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -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);
}
diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm
index d75099ce9..e10e21f4d 100644
--- a/IkiWiki/Plugin/openid.pm
+++ b/IkiWiki/Plugin/openid.pm
@@ -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);
diff --git a/templates/openid-selector.tmpl b/templates/openid-selector.tmpl
index 7e5ae9a01..b4d0e314f 100644
--- a/templates/openid-selector.tmpl
+++ b/templates/openid-selector.tmpl
@@ -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>
diff --git a/underlays/openid-selector/ikiwiki/openid/openid-jquery.js b/underlays/openid-selector/ikiwiki/openid/openid-jquery.js
index 59a59c084..bf14fd3d5 100644
--- a/underlays/openid-selector/ikiwiki/openid/openid-jquery.js
+++ b/underlays/openid-selector/ikiwiki/openid/openid-jquery.js
@@ -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;