Piggyback left menu generation off userbar code

They have so much in common there's little point in separating them
and having to generate the same URLs in both.
This commit is contained in:
Chris 2017-01-09 23:43:17 +00:00
parent 9b86529bd5
commit 26c5da2d5b
8 changed files with 134 additions and 48 deletions

View File

@ -47,33 +47,53 @@ sub block_display {
$self -> clear_error(); $self -> clear_error();
my $urls = { "signin" => $self -> build_url(block => "login", my $urls = { "%(url-signin)s" => $self -> build_url(block => "login",
fullurl => 1, fullurl => 1,
pathinfo => [], pathinfo => [],
params => {}, params => {},
forcessl => 1), forcessl => 1),
"signout" => $self -> build_url(block => "login", "%(url-signout)s" => $self -> build_url(block => "login",
fullurl => 1, fullurl => 1,
pathinfo => [ "signout" ], pathinfo => [ "signout" ],
params => {}, params => {},
forcessl => 1), forcessl => 1),
"signup" => $self -> build_url(block => "login", "%(url-signup)s" => $self -> build_url(block => "login",
fullurl => 1, fullurl => 1,
pathinfo => [ "signup" ], pathinfo => [ "signup" ],
params => {}, params => {},
forcessl => 1), forcessl => 1),
"setpass" => $self -> build_url(block => "login", "%(url-setpass)s" => $self -> build_url(block => "login",
fullurl => 1, fullurl => 1,
pathinfo => [ "passchange" ], pathinfo => [ "passchange" ],
params => {}, params => {},
forcessl => 1), forcessl => 1),
"front" => $self -> build_url(block => $self -> {"settings"} -> {"config"} -> {"default_block"}, "%(url-front)s" => $self -> build_url(block => $self -> {"settings"} -> {"config"} -> {"default_block"},
fullurl => 1, fullurl => 1,
pathinfo => [], pathinfo => [],
params => {}) params => {}),
"%(url-list)s" => $self -> build_url(block => "list",
fullurl => 1,
pathinfo => [ ],
params => {},
forcessl => 1),
"%(url-tags)s" => $self -> build_url(block => "tags",
fullurl => 1,
pathinfo => [ ],
params => {},
forcessl => 1),
"%(url-types)s" => $self -> build_url(block => "types",
fullurl => 1,
pathinfo => [ ],
params => {},
forcessl => 1),
"%(url-shop)s" => $self -> build_url(block => "shop",
fullurl => 1,
pathinfo => [ ],
params => {},
forcessl => 1),
}; };
my $userprofile; my ($userprofile, $sidemenu);
# Is the user logged in? # Is the user logged in?
if(!$self -> {"session"} -> anonymous_session()) { if(!$self -> {"session"} -> anonymous_session()) {
@ -85,25 +105,36 @@ sub block_display {
{ "%(realname)s" => $user -> {"fullname"}, { "%(realname)s" => $user -> {"fullname"},
"%(username)s" => $user -> {"username"}, "%(username)s" => $user -> {"username"},
"%(gravhash)s" => $user -> {"gravatar_hash"}, "%(gravhash)s" => $user -> {"gravatar_hash"},
"%(url-signout)s" => $urls -> {"signout"},
"%(url-setpass)s" => $urls -> {"setpass"},
}); });
$sidemenu = $self -> {"template"} -> load_template("sidemenu/signedin.tem",
{ "%(realname)s" => $user -> {"fullname"},
"%(username)s" => $user -> {"username"},
"%(gravhash)s" => $user -> {"gravatar_hash"},
});
} else { } else {
my $signup = $self -> {"template"} -> load_template("userbar/profile_signup.tem") my ($topsignup, $sidesignup) = ("", "");
if($self -> {"settings"} -> {"config"} -> {"Login:allow_self_register"});
if($self -> {"settings"} -> {"config"} -> {"Login:allow_self_register"}) {
$topsignup = $self -> {"template"} -> load_template("userbar/profile_signup.tem");
$sidesignup = $self -> {"template"} -> load_template("sidemenu/signup.tem");
}
$userprofile = $self -> {"template"} -> load_template("userbar/profile_signedout.tem", $userprofile = $self -> {"template"} -> load_template("userbar/profile_signedout.tem",
{ "%(signup)s" => $signup, { "%(signup)s" => $topsignup });
"%(url-signin)s" => $urls -> {"signin"},
"%(url-signup)s" => $urls -> {"signup"}, $sidemenu = $self -> {"template"} -> load_template("sidemenu/signedout.tem",
}); { "%(signup)s" => $sidesignup });
} }
return $self -> {"template"} -> load_template("userbar/userbar.tem", return ( $self -> {"template"} -> load_template("userbar/userbar.tem",
{ "%(pagename)s" => $title, { "%(pagename)s" => $title,
"%(url-front)s" => $urls -> {"front"}, "%(profile)s" => $userprofile,
"%(profile)s" => $userprofile}); %{ $urls }
}),
$self -> {"template"} -> process_template($sidemenu, $urls)
);
} }

View File

@ -12,3 +12,14 @@ USERBAR_DOCLINK = Documentation (opens in new window)
USERBAR_FRONT = Aviary front page USERBAR_FRONT = Aviary front page
USERBAR_IMPORT = Import schedule USERBAR_IMPORT = Import schedule
SIDE_TITLE = Online Recipe Book
SIDE_SUMMARIES = Summaries
SIDE_RECIPES = Recipes
SIDE_TAGS = Tags
SIDE_TYPES = Types
SIDE_SHOPPING = Shopping
SIDE_SET_PASSWORD = Set password
SIDE_SIGN_IN = Sign in
SIDE_SIGN_UP = Sign up
SIDE_SIGN_OUT = Sign out

View File

@ -124,11 +124,12 @@ sub generate_orb_page {
my $userbar = $self -> {"module"} -> load_module("ORB::Userbar"); my $userbar = $self -> {"module"} -> load_module("ORB::Userbar");
my ($topbar, $leftbar) = $userbar -> block_display($args -> {"title"}, $self -> {"block"}, $args -> {"doclink"});
return $self -> {"template"} -> load_template("page.tem", {"%(extrahead)s" => $args -> {"extrahead"} // "", return $self -> {"template"} -> load_template("page.tem", {"%(extrahead)s" => $args -> {"extrahead"} // "",
"%(extrajs)s" => $args -> {"extrajs"} // "", "%(extrajs)s" => $args -> {"extrajs"} // "",
"%(title)s" => $args -> {"title"} // "", "%(title)s" => $args -> {"title"} // "",
"%(leftmenu)s" => $args -> {"leftmenu"} // "", "%(leftmenu)s" => $leftbar,
"%(userbar)s" => ($userbar ? $userbar -> block_display($args -> {"title"}, $args -> {"leftmenu"}, $self -> {"block"}, $args -> {"doclink"}) : "<!-- Userbar load failed: ".$self -> {"module"} -> errstr()." -->"), "%(userbar)s" => $topbar,
"%(content)s" => $args -> {"content"}}); "%(content)s" => $args -> {"content"}});
} }
@ -300,15 +301,9 @@ sub check_login {
[ {"message" => $self -> {"template"} -> replace_langvar("SITE_CONTINUE"), [ {"message" => $self -> {"template"} -> replace_langvar("SITE_CONTINUE"),
"colour" => "blue", "colour" => "blue",
"action" => "location.href='{V_[scriptpath]}'"} ]); "action" => "location.href='{V_[scriptpath]}'"} ]);
my $userbar = $self -> {"module"} -> load_module("ORB::Userbar");
# Build the error page... return $self -> generate_orb_page(title => "{L_PERMISSION_FAILED_TITLE}",
return $self -> {"template"} -> load_template("error/general.tem", content => $message);
{"%(title)s" => "{L_PERMISSION_FAILED_TITLE}",
"%(message)s" => $message,
"%(extrahead)s" => "",
"%(userbar)s" => ($userbar ? $userbar -> block_display("{L_PERMISSION_FAILED_TITLE}") : "<!-- Userbar load failed: ".$self -> {"module"} -> errstr()." -->"),
});
} }
return undef; return undef;

View File

@ -22,6 +22,11 @@ div.top-bar-title {
font-weight: bold; font-weight: bold;
} }
/* fix menu button pad */
#menubtn {
margin-right: 0.5rem;
}
/* fix padding for menu text with image */ /* fix padding for menu text with image */
li.image { li.image {
padding: 0 0 0 0.25rem; padding: 0 0 0 0.25rem;
@ -32,6 +37,17 @@ li.image {
} }
/* title for off-canvas menu */
div.off-canvas > h5 {
padding: 0.5rem 0 0 1rem;
}
/* off-canvas menu user */
div.off-canvas .user {
margin-left: 1rem;
margin-top: 0.5rem;
}
.pagemenu { .pagemenu {
list-style-type: none; list-style-type: none;
border-bottom: 1px solid #bbb; border-bottom: 1px solid #bbb;

View File

@ -17,12 +17,12 @@
<!-- canvas wrapper --> <!-- canvas wrapper -->
<div class="off-canvas-wrapper"> <div class="off-canvas-wrapper">
%(leftmenu)s %(leftmenu)s
<!-- content wrapper --> <!-- content wrapper -->
<div class="off-canvas-content" data-off-canvas-content> <div class="off-canvas-content" data-off-canvas-content>
<!-- Start top bar --> <!-- Start top bar -->
%(userbar)s %(userbar)s
<!-- End top bar --> <!-- End top bar -->
<br />
<!-- Start content --> <!-- Start content -->
<div class="row" id="content"> <div class="row" id="content">
%(content)s %(content)s

View File

@ -0,0 +1,17 @@
<div class="off-canvas position-left" id="offCanvas" data-off-canvas>
<h5>{L_SIDE_TITLE}</h5>
<hr class="nomargin"/>
<ul class="vertical menu">
<li><a href="%(url-front)s">{L_SIDE_SUMMARIES}</a></li>
<li><a href="%(url-list)s" >{L_SIDE_RECIPES}</a></li>
<li><a href="%(url-tags)s" >{L_SIDE_TAGS}</a></li>
<li><a href="%(url-types)s">{L_SIDE_TYPES}</a></li>
</ul>
<hr class="nomargin"/>
<div class="user"><img alt="" src="https://gravatar.com/avatar/%(gravhash)s?s=32&amp;d=mm&amp;r=g" class="avatar avatar-32" height="32" width="32" /> %(realname)s</a></div>
<ul class="vertical menu">
<li><a href="%(url-shop)s">{L_SIDE_SHOPPING}</a></li>
<li><a href="%(url-setpass)s">{L_SIDE_SET_PASSWORD}</a></li>
<li><a href="%(url-signout)s">{L_SIDE_SIGN_OUT}</a></li>
</ul>
</div>

View File

@ -0,0 +1,15 @@
<div class="off-canvas position-left" id="offCanvas" data-off-canvas>
<h5>{L_SIDE_TITLE}</h5>
<hr class="nomargin"/>
<ul class="vertical menu">
<li><a href="%(url-front)s">{L_SIDE_SUMMARIES}</a></li>
<li><a href="%(url-list)s" >{L_SIDE_RECIPES}</a></li>
<li><a href="%(url-tags)s" >{L_SIDE_TAGS}</a></li>
<li><a href="%(url-types)s">{L_SIDE_TYPES}</a></li>
</ul>
<hr class="nomargin"/>
<ul class="vertical menu">
<li><a href="%(url-signin)s">{L_SIDE_SIGN_IN}</a></li>
%(signup)s
</ul>
</div>

View File

@ -0,0 +1 @@
<li><a href="%(url-signup)s">{L_SIDE_SIGN_UP}</a></li>