Skip to content
Snippets Groups Projects
Commit 95d2b84a authored by Florian Gnaegi - frentix GmbH's avatar Florian Gnaegi - frentix GmbH
Browse files

OO-1068 updating nav, topnav, footer, my menu and im tools fo new theme

parent 5181d686
No related branches found
No related tags found
No related merge requests found
Showing
with 225 additions and 245 deletions
<div class="b_float_left"> $r.translate("select.language")
$r.translate("select.language") <span class="o_flag o_flag_${languageCode}"></span>
</div> $r.render("select.language")
<div class="b_with_small_icon_left b_flag_${languageCode} b_float_left">
$r.render("select.language")
</div>
\ No newline at end of file
...@@ -811,11 +811,11 @@ public class BaseFullWebappController extends BasicController implements Generic ...@@ -811,11 +811,11 @@ public class BaseFullWebappController extends BasicController implements Generic
link.setAccessKey("s"); link.setAccessKey("s");
// add close links // add close links
Link calink = LinkFactory.createCustomLink("ca" + dtabCreateCounter, "ca" + dtabCreateCounter, "", Link.NONTRANSLATED, navVc, this); Link calink = LinkFactory.createCustomLink("ca" + dtabCreateCounter, "ca" + dtabCreateCounter, "", Link.NONTRANSLATED, navVc, this);
calink.setCustomEnabledLinkCSS("b_nav_tab_close"); calink.setCustomEnabledLinkCSS("o_navbar_tab_close");
calink.setTitle(translate("close")); calink.setTitle(translate("close"));
calink.setUserObject(dt); calink.setUserObject(dt);
Link cplink = LinkFactory.createCustomLink("cp" + dtabCreateCounter, "cp" + dtabCreateCounter, "", Link.NONTRANSLATED, navVc, this); Link cplink = LinkFactory.createCustomLink("cp" + dtabCreateCounter, "cp" + dtabCreateCounter, "", Link.NONTRANSLATED, navVc, this);
cplink.setCustomEnabledLinkCSS("b_nav_tab_close"); cplink.setCustomEnabledLinkCSS("o_navbar_tab_close");
cplink.setTitle(translate("close")); cplink.setTitle(translate("close"));
cplink.setUserObject(dt); cplink.setUserObject(dt);
......
<div id="b_footer_user"> <div class="container-fluid">
#if($ajaxOn) <div id="b_footer_user" class="col-sm-4">
<a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29" target="_blank" title="$r.translateInAttribute("footer.ajax.hover")" class="b_ajax"></a> #if($ajaxOn)
#end <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29" target="_blank" title="$r.translateInAttribute("footer.ajax.hover")" class="b_ajax"></a>
#if ($loggedIn) #end
$r.translate("footer.logged.in.as", ["$username"]) &nbsp;&nbsp;&nbsp; ($userSessionsCnt $r.translate("footer.users.online")) #if ($loggedIn)
#else $r.translate("footer.logged.in.as", ["$username"]) &nbsp;&nbsp;&nbsp; ($userSessionsCnt $r.translate("footer.users.online"))
$r.translate("footer.not.logged.in") &nbsp;&nbsp;&nbsp; ($userSessionsCnt $r.translate("footer.users.online")) #else
#end $r.translate("footer.not.logged.in") &nbsp;&nbsp;&nbsp; ($userSessionsCnt $r.translate("footer.users.online"))
#end
</div>
<div id="b_footer_version" class="col-sm-4">
<a href="http://www.openolat.org" title="OpenOLAT" target="_blank">$olatversion</a>
</div>
<div id="b_footer_powered" class="col-sm-4">
<a href="http://www.openolat.org" target="_blank" title="OpenOLAT"><img border="0" src="$r.staticLink("images/openolat/openolat_powerd_by_120x30.png")" alt="Brasato framework" /></a>
</div>
</div> </div>
<div id="b_footer_version">
<a href="http://www.openolat.org" title="OpenOLAT" target="_blank">$olatversion</a>
</div>
<div id="b_footer_powered">
<a href="http://www.openolat.org" target="_blank" title="OpenOLAT"><img border="0" src="$r.staticLink("images/openolat/openolat_powerd_by_120x30.png")" alt="Brasato framework" /></a>
</div>
\ No newline at end of file
## ---- START #b_page_margins #b_page_wrapper <a id='o_top' name="o_top"></a>
<div id="b_page_margins"><div id="b_page_wrapper"> <div id="o_beta_logo"></div>
## special classes for border styling, see YAML book chapter 4.5.7 for more information
<div id="b_border-top"> ## ---- START #o_header ---
<div id="b_edge-lt"></div> <div id="o_header">
<div id="b_edge-rt"></div> <div id="o_logo"></div>
<div id="o_right_logo"></div>
## something to be displayed in the header, a logo, some ads, whatever
#if($r.available("headerComponent"))
$r.render("headerComponent")
#end
</div> </div>
## ---- START #b_page ## ---- END #o_header ---
<div id="b_page">
<a id='b_top' name="b_top"></a>
<div id="b_beta_logo"></div>
## ---- START #b_header --- ## ---- START #o_navbar ---
<div id="b_header"> <div id="o_navbar" class="navbar navbar-default" role="navigation">
<div id="o_navbar_container" class="container-fluid">
## ---- START Access keys to improve accessability <div id="o_navbar_header" class="navbar-header">
## not visible for normal browser <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="b_skip">$r.translate("accesskey.title")</span> <span class="sr-only">Toggle navigation</span>
<a accesskey="0" class="b_skip" href="#b_top">0: $r.translate("accesskey.top")</a> <span class="icon-bar"></span>
<a accesskey="n" class="b_skip" href="#b_nav">n: $r.translate("accesskey.nav")</a> <span class="icon-bar"></span>
<span class="b_skip">$r.translate("accesskey.sites")</span> <span class="icon-bar"></span>
<span class="b_skip">$r.translate("accesskey.tabs")</span> </button>
<a accesskey="o" class="b_skip" href="#b_topnav">o: $r.translate("accesskey.topnav")</a> <a class="navbar-brand" href="#"></a>
<a accesskey="m" class="b_skip" href="#b_col1">m: $r.translate("accesskey.menu")</a> </div>
<a accesskey="c" class="b_skip" href="#b_col3">c: $r.translate("accesskey.content")</a>
<a accesskey="t" class="b_skip" href="#b_col2">t: $r.translate("accesskey.tools")</a>
<a accesskey="a" class="b_skip" href="#b_table">a: $r.translate("accesskey.table")</a>
<a accesskey="d" class="b_skip" href="#b_modal">d: $r.translate("accesskey.modal")</a>
<span class="b_skip">b: $r.translate("accesskey.back")</span>
<span class="b_skip">$r.translate("accesskey.changes")</span>
## don't use numbers as access keys - reserved for the addressing of opened tabs
## ---- END Access keys
<div id="b_logo"></div>
<div id="b_right_logo"></div>
<!-- end diff -->
## something to be displayed in the header, a logo, some ads, whatever
#if($r.available("headerComponent"))
$r.render("headerComponent")
#end
## top nav usually placed top left. Previously named upperRightCorner
#if($r.available("topnavComponent"))
<div id="b_topnav">
<a name="b_topnav"></a>
$r.render("topnavComponent")
</div>
#end
</div>
## ---- END #b_header ---
## ---- START #b_nav sites navigation <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<div id="b_nav"> ## sites and tabs
<a name="b_nav"></a> $r.render("navComponent")
$r.render("navComponent") ## tools
#if($r.available("topnavComponent"))
$r.render("topnavComponent")
#end
</div>
</div>
</div> </div>
## ---- END #b_nav --- ## ---- END #o_navbar ---
#if($hasStickyMessage) #if($hasStickyMessage)
<div id="b_msg_sticky"> <div id="b_msg_sticky">
...@@ -63,30 +48,26 @@ ...@@ -63,30 +48,26 @@
</div> </div>
#end #end
## ------ START #b_main ----- ## ------ START #o_main -----
$r.render("main") <div id="o_main">
## END MAIN <div id="o_main_container" class="container-fluid">
$r.render("main")
<a id="b_toplink" href="#b_top" onclick="jQuery('#b_body').scrollTop(0);" title="$r.translateInAttribute("top.alt")">$r.translate("top")</a> <a id="o_toplink" href="#o_top" onclick="jQuery('#b_body').scrollTop(0);" title="$r.translateInAttribute("top.alt")">
</div> <span class="glyphicon glyphicon-arrow-up"></span>
## ---- END #b_page $r.translate("top")
</a>
</div>
</div> </div>
## ---- END #b_page_wrapper ## END #o_main -----
## ----- START #b_footer ---------- ## ----- START #b_footer ----------
<div id="b_footer" class="b_clearfix"> <div id="o_footer">
<div class="b_floatbox">
#if($r.available("footerComponent")) #if($r.available("footerComponent"))
$r.render("footerComponent") $r.render("footerComponent")
#end #end
</div>
</div> </div>
## ---- END #b_footer --- ## ---- END #b_footer ---
</div>
## ---- END #b_page_margins
## ---- START #b_messages ## ---- START #b_messages
## Messages are absolute positioned using EXT, thus it's ok to have them at the end of the page. ## Messages are absolute positioned using EXT, thus it's ok to have them at the end of the page.
## This prevents an ugly IE bug that appears when the messages are at the top of the page. ## This prevents an ugly IE bug that appears when the messages are at the top of the page.
......
<div id="b_nav_main">
<ul>
## ---- START sites tabs --- ## ---- START sites tabs ---
<ul id="o_navbar_sites" class="nav navbar-nav">
#foreach ($site in $sites) #foreach ($site in $sites)
#set ($siteEl = $r.getComponent("$site")) #set ($siteEl = $r.getComponent("$site"))
#set ($navel = $siteEl.userObject.getNavElement()) #set ($navel = $siteEl.userObject.getNavElement())
<li class='b_nav_site #if($tabhelper.isSiteActive($siteEl.userObject)) b_nav_active #end $!navel.getIconCSSClass()'> <li class='#if($tabhelper.isSiteActive($siteEl.userObject)) active #end $!navel.getIconCSSClass()'>
<div> ## div used for site icon $r.render("$site")
$r.render("$site")
</div>
</li> </li>
#end #end
</ul>
## ---- END sites tabs --- ## ---- END sites tabs ---
<li id="b_nav_spacer"></li> ##spacer between sites and tabs
## ---- START dynamic tabs --- ## ---- START dynamic tabs ---
<ul id="o_navbar_tabs" class="nav navbar-nav">
#foreach ($dtab in $dtabs) #foreach ($dtab in $dtabs)
#set ($navel = $dtab.getNavElement()) #set ($navel = $dtab.getNavElement())
#set ($pos=${velocityCount} - 1) #set ($pos=${velocityCount} - 1)
#set ($postfix=$dtabsLinkNames.get(${pos})) #set ($postfix=$dtabsLinkNames.get(${pos}))
#if($tabhelper.isDTabActive($dtab)) #if($tabhelper.isDTabActive($dtab))
<li class="b_nav_tab b_nav_active $!navel.getIconCSSClass()"> <li class="active $!navel.getIconCSSClass()">
<div> ## div used for tab icon $r.render("a$postfix")
$r.render("a$postfix") #if($tabhelper.isCanCloseDTab($dtab))
#if($tabhelper.isCanCloseDTab($dtab)) $r.render("cp$postfix") ## close link has class b_nav_tab_close
$r.render("cp$postfix") ## close link has class b_nav_tab_close #end
#end
</div>
</li> </li>
#else #else
<li class="b_nav_tab $!navel.getIconCSSClass()"> <li class="$!navel.getIconCSSClass()">
<div> ## div used for tab icon $r.render("a$postfix")
$r.render("a$postfix") $r.render("cp$postfix") ## close link has class b_nav_tab_close
$r.render("cp$postfix") ## close link has class b_nav_tab_close
</div>
</li> </li>
#end #end
#end #end
## ---- END dynamic tabs ---
</ul> </ul>
## ---- END dynamic tabs ---
#if($pageTitle) #if($pageTitle)
<script type="text/javascript"> <script type="text/javascript">
/* <![CDATA[ */ /* <![CDATA[ */
...@@ -44,4 +40,3 @@ ...@@ -44,4 +40,3 @@
/* ]]> */ /* ]]> */
</script> </script>
#end #end
</div>
...@@ -46,9 +46,9 @@ import org.olat.core.gui.control.Event; ...@@ -46,9 +46,9 @@ import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.creator.ControllerCreator; import org.olat.core.gui.control.creator.ControllerCreator;
import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
import org.olat.core.gui.control.generic.popup.PopupBrowserWindow; import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
import org.olat.core.id.OLATResourceable; import org.olat.core.id.OLATResourceable;
import org.olat.core.id.UserConstants;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.core.util.event.EventBus; import org.olat.core.util.event.EventBus;
import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.event.GenericEventListener;
...@@ -65,6 +65,7 @@ import org.olat.search.SearchServiceUIFactory.DisplayOption; ...@@ -65,6 +65,7 @@ import org.olat.search.SearchServiceUIFactory.DisplayOption;
import org.olat.search.ui.SearchInputController; import org.olat.search.ui.SearchInputController;
import org.olat.user.DisplayPortraitManager; import org.olat.user.DisplayPortraitManager;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.olat.user.propertyhandlers.GenderPropertyHandler;
/** /**
* *
...@@ -76,15 +77,15 @@ public class OlatTopNavController extends BasicController implements GenericEven ...@@ -76,15 +77,15 @@ public class OlatTopNavController extends BasicController implements GenericEven
private static final String ACTION_LOGOUT = "logout"; private static final String ACTION_LOGOUT = "logout";
private SearchInputController searchC; private SearchInputController searchC;
private Link helpLink, loginLink, impressumLink, myMenuLink; private Link helpLink, loginLink, impressumLink;
private VelocityContainer menuVC; private VelocityContainer menuVC;
private VelocityContainer topNavVC; private VelocityContainer topNavVC;
private InstantMessagingMainController imController; private InstantMessagingMainController imController;
private CloseableCalloutWindowController calloutCtr;
private EventBus singleUserEventCenter; private EventBus singleUserEventCenter;
private final DisplayPortraitManager portraitManager; private final DisplayPortraitManager portraitManager;
private final UserManager userManager;
private OLATResourceable ass; private OLATResourceable ass;
public OlatTopNavController(UserRequest ureq, WindowControl wControl) { public OlatTopNavController(UserRequest ureq, WindowControl wControl) {
...@@ -96,6 +97,7 @@ public class OlatTopNavController extends BasicController implements GenericEven ...@@ -96,6 +97,7 @@ public class OlatTopNavController extends BasicController implements GenericEven
topNavVC = createVelocityContainer("topnav"); topNavVC = createVelocityContainer("topnav");
portraitManager = DisplayPortraitManager.getInstance(); portraitManager = DisplayPortraitManager.getInstance();
userManager = UserManager.getInstance();
boolean isGuest = ureq.getUserSession().getRoles().isGuestOnly(); boolean isGuest = ureq.getUserSession().getRoles().isGuestOnly();
boolean isInvitee = ureq.getUserSession().getRoles().isInvitee(); boolean isInvitee = ureq.getUserSession().getRoles().isInvitee();
...@@ -140,38 +142,35 @@ public class OlatTopNavController extends BasicController implements GenericEven ...@@ -140,38 +142,35 @@ public class OlatTopNavController extends BasicController implements GenericEven
singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter(); singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter();
singleUserEventCenter.registerFor(this, getIdentity(), ass); singleUserEventCenter.registerFor(this, getIdentity(), ass);
UserManager userManager = CoreSpringFactory.getImpl(UserManager.class); Component menu = getMenuCmp(ureq);
topNavVC.put("myMenu", menu);
myMenuLink = LinkFactory.createButton("topnav.my.menu", topNavVC, this); // the user profile
myMenuLink.setCustomDisplayText(userManager.getUserDisplayName(getIdentity())); Component portrait = getPortraitCmp(ureq);
myMenuLink.setCustomEnabledLinkCSS("o_topnav_impressum"); if (portrait != null) {
myMenuLink.setElementCssClass("o_sel_my_menu_open"); topNavVC.put("portrait", portrait);
File image = portraitManager.getSmallPortrait(getIdentity().getName());
if (image != null) {
// display only within 600x300 - everything else looks ugly
ImageComponent ic = new ImageComponent(ureq.getUserSession(), "image");
ic.setSpanAsDomReplaceable(true);
ic.setMedia(image);
topNavVC.contextPut("hasPortrait", Boolean.TRUE);
topNavVC.put("portrait", ic);
} else { } else {
topNavVC.contextPut("hasPortrait", Boolean.FALSE); GenderPropertyHandler genderHander = (GenderPropertyHandler) userManager.getUserPropertiesConfig().getPropertyHandler(UserConstants.GENDER);
String gender = genderHander.getInternalValue(getIdentity().getUser());
topNavVC.contextPut("gender", (gender == null || gender.equals("-") ? "" : gender + "_"));
} }
// the label to open the personal menu
String[] attr = new String[] {getIdentity().getUser().getProperty(UserConstants.FIRSTNAME, getLocale()), getIdentity().getUser().getProperty(UserConstants.LASTNAME, getLocale()), getIdentity().getName()};
String myMenuText = translate("topnav.my.menu.label", attr);
topNavVC.contextPut("myMenuLabel", myMenuText);
} }
putInitialPanel(topNavVC); putInitialPanel(topNavVC);
} }
@Override @Override
public void event(UserRequest ureq, Component source, Event event) { public void event(UserRequest ureq, Component source, Event event) {
if (source == helpLink) { if (source == helpLink) {
doOpenHelp(ureq) ; doOpenHelp(ureq) ;
} else if(source == myMenuLink) {
myMenuLink.setDirty(false);
doOpenMyMenu(ureq);
} else if(source instanceof Link && source.getComponentName().startsWith("personal.tool.")) { } else if(source instanceof Link && source.getComponentName().startsWith("personal.tool.")) {
doCloseMyMenu();
doOpenPersonalTool(ureq, (Link)source); doOpenPersonalTool(ureq, (Link)source);
} else if (source == loginLink) { } else if (source == loginLink) {
DispatcherModule.redirectToDefaultDispatcher(ureq.getHttpResp()); DispatcherModule.redirectToDefaultDispatcher(ureq.getHttpResp());
...@@ -185,13 +184,6 @@ public class OlatTopNavController extends BasicController implements GenericEven ...@@ -185,13 +184,6 @@ public class OlatTopNavController extends BasicController implements GenericEven
} }
} }
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if (source == calloutCtr) {
closePersonalMenu();
}
}
private void doOpenPersonalTool(UserRequest ureq, Link link) { private void doOpenPersonalTool(UserRequest ureq, Link link) {
GenericActionExtension gAe = (GenericActionExtension)link.getUserObject(); GenericActionExtension gAe = (GenericActionExtension)link.getUserObject();
String navKey = gAe.getNavigationKey(); String navKey = gAe.getNavigationKey();
...@@ -199,32 +191,27 @@ public class OlatTopNavController extends BasicController implements GenericEven ...@@ -199,32 +191,27 @@ public class OlatTopNavController extends BasicController implements GenericEven
NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
} }
private void doCloseMyMenu() {
calloutCtr.deactivate();
removeAsListenerAndDispose(calloutCtr);
calloutCtr = null;
}
private void doOpenMyMenu(UserRequest ureq) {
removeAsListenerAndDispose(calloutCtr);
Component menu = getMenuCmp(ureq);
calloutCtr = new CloseableCalloutWindowController(ureq, getWindowControl(), menu, myMenuLink, "", true, null);
listenTo(calloutCtr);
calloutCtr.activate();
}
private void closePersonalMenu() {
removeAsListenerAndDispose(calloutCtr);
calloutCtr = null;
}
private Component getMenuCmp(UserRequest ureq) { private Component getMenuCmp(UserRequest ureq) {
VelocityContainer container = createVelocityContainer("menu"); VelocityContainer container = createVelocityContainer("menu");
container.setDomReplacementWrapperRequired(false); // we do it ourself in menu.html file
loadPersonalTools(ureq, container); loadPersonalTools(ureq, container);
menuVC = container; menuVC = container;
return menuVC; return menuVC;
} }
private Component getPortraitCmp(UserRequest ureq) {
File image = portraitManager.getSmallPortrait(getIdentity().getName());
if (image != null) {
// display only within 600x300 - everything else looks ugly
ImageComponent ic = new ImageComponent(ureq.getUserSession(), "image");
ic.setSpanAsDomReplaceable(true);
ic.setMedia(image);
topNavVC.put("portrait", ic);
return ic;
}
return null;
}
private void loadPersonalTools(UserRequest ureq, VelocityContainer container) { private void loadPersonalTools(UserRequest ureq, VelocityContainer container) {
List<String> linksName = new ArrayList<String>(); List<String> linksName = new ArrayList<String>();
List<String> configLinksName = new ArrayList<String>(); List<String> configLinksName = new ArrayList<String>();
......
<ul> <ul id="o_navbar_tools" class="nav navbar-nav navbar-right">
#if($r.available("topnav.impressum")) #if($r.available("topnav.impressum"))
<li> <li id="o_navbar_impress">
$r.render("topnav.impressum") $r.render("topnav.impressum")
</li> </li>
#end #end
<li id="o_topnav_langchooser"> <li id="o_navbar_langchooser">
$r.render("languageChooser") $r.render("languageChooser")
</li> </li>
#if ($isContextHelpEnabled) #if ($isContextHelpEnabled)
<li id="o_topnav_help"> <li id="o_navbar_help">
<a href="javascript:contextHelpWindow('$r.relLink("help/${r.getLanguageCode()}/org.olat.login/dmz.html")')" title="$r.translateInAttribute("topnav.help.alt")"> <a href="javascript:contextHelpWindow('$r.relLink("help/${r.getLanguageCode()}/org.olat.login/dmz.html")')" title="$r.translateInAttribute("topnav.help.alt")">
<span class="o_help_icon b_with_small_icon_right">$r.translate("topnav.help")</span> <span></span>$r.translate("topnav.help")
</a> </a>
</li> </li>
#end #end
......
<div class="o_topnav_my_menu"> ## DOM replacement implemented via ID on UL element - bypass standard OO wrapper DIV
<span class="o_topnav_my_submenu">$r.translate("topnav.my.menu.tools")</span> <ul id="$r.getCId()" class="dropdown-menu">
<ul> <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.tools")</li>
#foreach($personalTool in $personalTools) #foreach($personalTool in $personalTools)
<li>$r.render($personalTool)</li> <li>$r.render($personalTool)</li>
#end #end
</ul> <li role="presentation" class="divider"></li>
<hr/> <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.configurations")</li>
<span class="o_topnav_my_submenu">$r.translate("topnav.my.menu.configurations")</span>
<ul>
#foreach($config in $configs) #foreach($config in $configs)
<li>$r.render($config)</li> <li>$r.render($config)</li>
#end #end
</ul> <li role="presentation" class="divider"></li>
<hr/> <li>
<ul> ## make logout link very basic without onClick handler in case javaScript is broken it is still possible to log out
<li id="o_topnav_logout"> ## except for the onolatunload() method which must be executed to correctly finish SCORM modules (OLAT-6255)
## make logout link very basic without onClick handler in case javaScript is broken it is still possible to log out ## must be on one line to work with inline translation tool
## except for the onolatunload() method which must be executed to correctly finish SCORM modules (OLAT-6255) <a href="$r.commandURI("logout")" title="$r.translateInAttribute("topnav.logout.alt")" onclick="if (window.olatonunload) {olatonunload();}">
## must be on one line to work with inline translation tool <span class="glyphicon glyphicon-off"></span> $r.translate("topnav.logout")
<a id="b_logout" href="$r.commandURI("logout")" title="$r.translateInAttribute("topnav.logout.alt")" onclick="if (window.olatonunload) {olatonunload();}"><span class="b_logout_icon">$r.translate("topnav.logout")</span></a> </a>
</li> </li>
</ul> </ul>
</div> \ No newline at end of file
\ No newline at end of file
<div id="b_footer_user"> <div id="o_footer_container" class="container-fluid">
#if ($loggedIn) <div class="row">
<span id="b_username">$r.translate("footer.logged.in.as", ["$username"])</span> <div id="o_footer_user" class="col-sm-5 clearfix">
#end #if ($loggedIn)
<span id="b_counter">($r.render("userCounter") $r.translate("other.users.online"))</span> <span id="o_username">$r.translate("footer.logged.in.as", ["$username"])</span>
</div> #end
<div id="b_footer_version"> <span id="o_counter">($r.render("userCounter") $r.translate("other.users.online"))</span>
<a href="http://www.openolat.org" title="Homepage of the Open Source LMS OpenOLAT $appVersion (Build $revisionNumber:$changeSet)" target="_blank">$appName&nbsp;$appVersion&nbsp;($node)</a> #if($r.available("shareLink"))
</div> $r.render("shareLink")
#if($r.available("shareLink")) #end
$r.render("shareLink") </div>
#end <div id="o_footer_powered" class="col-sm-2 clearfix">
<div id="b_footer_powered"> <a href="http://www.openolat.org" target="_blank" title="OpenOLAT - infinite learning">
<a href="http://www.openolat.org" target="_blank" title="OpenOLAT - infinite learning"> <img border="0" src="$r.staticLink("images/openolat/openolat_powerd_by_120x30.png")" alt="powered by OpenOLAT" width="120" height="30"/>
<img border="0" src="$r.staticLink("images/openolat/openolat_powerd_by_120x30.png")" alt="powered by OpenOLAT" width="120" height="30"/> </a>
</a> </div>
</div> <div id="o_footer_version" class="col-sm-5 clearfix">
<a href="http://www.openolat.org" title="Homepage of the Open Source LMS OpenOLAT $appVersion (Build $revisionNumber:$changeSet)" target="_blank">$appName&nbsp;$appVersion&nbsp;($node)</a>
</div>
</div>
</div>
\ No newline at end of file
<ul> <ul id="o_navbar_tools" class="nav navbar-nav navbar-right">
#if($r.available("topnav.impressum")) #if($r.available("topnav.impressum"))
<li> <li id="o_navbar_impress">
$r.render("topnav.impressum") $r.render("topnav.impressum")
</li> </li>
#end #end
#if (!$inAssessment && $r.available("search_input")) #if (!$inAssessment && $r.available("search_input"))
<li id="o_topnav_search"> <li id="o_navbar_search_opener" class="dropdown">
$r.render("search_input") <a href="#" class="dropdown-toggle" data-toggle="dropdown" title="$r.translate("search")">
<span></span>## css placeholder
</a>
<ul class="dropdown-menu">
<li id="o_navbar_search" class="navbar-form" role="search">
$r.render("search_input")
</li>
</ul>
</li> </li>
#end #end
#if ($r.available("groupchatcontroller")) #if ($r.available("groupchatcontroller"))
<li id="o_topnav_imgroupclient"> <li id="o_navbar_imgroupclient">
$r.render("groupchatcontroller") $r.render("groupchatcontroller")
</li> </li>
#end #end
#if ($r.available("imclient")) #if ($r.available("imclient"))
<li id="o_topnav_imclient"> <li id="o_navbar_imclient" class="clearfix">
$r.render("imclient") $r.render("imclient")
</li> </li>
#end #end
#if (!$isGuest) #if (!$isGuest)
<li id="o_topnav_my_menu_link"> <li id="o_navbar_my_menu" class="dropdown">
<div class="o_topnav_portrait"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
#if($hasPortrait) #if($r.available("portrait"))
$r.render("portrait") $r.render("portrait")
#end #else
</div> <img src="$r.staticLink("images/transparent.gif")" class="o_portrait_dummy_${gender}small"/>
$r.render("topnav.my.menu") #end
$myMenuLabel
<b class="caret"></b>
</a>
$r.render("myMenu")
</li> </li>
#else #else
<li id="o_topnav_login"> <li id="o_navbar_login">
$r.render("topnav.login") $r.render("topnav.login")
</li> </li>
#end #end
......
...@@ -22,7 +22,7 @@ topnav.printview.alt=Diese Seite drucken ...@@ -22,7 +22,7 @@ topnav.printview.alt=Diese Seite drucken
topnav.search=Suche topnav.search=Suche
topnav.search.alt=Suchen Sie innerhalb von OLAT topnav.search.alt=Suchen Sie innerhalb von OLAT
username=Eingeloggt als <i>{0}</i> username=Eingeloggt als <i>{0}</i>
topnav.my.menu=My menu topnav.my.menu.label={0}
topnav.my.menu.tools=Persnliche Werkzeuge topnav.my.menu.tools=Persnliche Werkzeuge
topnav.my.menu.configurations=Konfiguration topnav.my.menu.configurations=Konfiguration
...@@ -22,3 +22,4 @@ topnav.printview.alt=Print this page ...@@ -22,3 +22,4 @@ topnav.printview.alt=Print this page
topnav.search=Search topnav.search=Search
topnav.search.alt=Search within OLAT topnav.search.alt=Search within OLAT
username=Logged in as <i>{0}</i> username=Logged in as <i>{0}</i>
topnav.my.menu.label={0}
...@@ -55,11 +55,11 @@ public class IMTopNavStatusController extends BasicController { ...@@ -55,11 +55,11 @@ public class IMTopNavStatusController extends BasicController {
mainVC = createVelocityContainer("status_changer"); mainVC = createVelocityContainer("status_changer");
available = LinkFactory.createLink("presence.available", mainVC, this); available = LinkFactory.createLink("presence.available", mainVC, this);
available.setCustomEnabledLinkCSS("o_instantmessaging_available_icon"); available.setCustomEnabledLinkCSS("o_im_available_icon");
dnd = LinkFactory.createLink("presence.dnd", mainVC, this); dnd = LinkFactory.createLink("presence.dnd", mainVC, this);
dnd.setCustomEnabledLinkCSS("o_instantmessaging_dnd_icon"); dnd.setCustomEnabledLinkCSS("o_im_dnd_icon");
unavailable = LinkFactory.createLink("presence.unavailable", mainVC, this); unavailable = LinkFactory.createLink("presence.unavailable", mainVC, this);
unavailable.setCustomEnabledLinkCSS("o_instantmessaging_unavailable_icon"); unavailable.setCustomEnabledLinkCSS("o_im_unavailable_icon");
putInitialPanel(mainVC); putInitialPanel(mainVC);
} }
......
...@@ -133,6 +133,7 @@ public class InstantMessagingMainController extends BasicController implements G ...@@ -133,6 +133,7 @@ public class InstantMessagingMainController extends BasicController implements G
onlineOfflineCount = LinkFactory.createCustomLink("onlineOfflineCount", "cmd.roster", "", Link.NONTRANSLATED, main, this); onlineOfflineCount = LinkFactory.createCustomLink("onlineOfflineCount", "cmd.roster", "", Link.NONTRANSLATED, main, this);
onlineOfflineCount.setTooltip(translate("im.roster.intro")); onlineOfflineCount.setTooltip(translate("im.roster.intro"));
onlineOfflineCount.registerForMousePositionEvent(true); onlineOfflineCount.registerForMousePositionEvent(true);
onlineOfflineCount.setCustomEnabledLinkCSS("badge");
updateBuddyStats(); updateBuddyStats();
main.put("buddiesSummaryPanel", onlineOfflineCount); main.put("buddiesSummaryPanel", onlineOfflineCount);
...@@ -321,7 +322,7 @@ public class InstantMessagingMainController extends BasicController implements G ...@@ -321,7 +322,7 @@ public class InstantMessagingMainController extends BasicController implements G
imStatus = Presence.available.name(); imStatus = Presence.available.name();
imService.updateStatus(getIdentity(), imStatus); imService.updateStatus(getIdentity(), imStatus);
} }
String cssClass = "o_instantmessaging_" + imStatus + "_icon"; String cssClass = "o_im_" + imStatus + "_icon";
statusChangerLink.setCustomEnabledLinkCSS("b_small_icon " + cssClass); statusChangerLink.setCustomEnabledLinkCSS("b_small_icon " + cssClass);
} }
...@@ -412,7 +413,7 @@ public class InstantMessagingMainController extends BasicController implements G ...@@ -412,7 +413,7 @@ public class InstantMessagingMainController extends BasicController implements G
private Link createShowNewMessageLink(Buddy buddy) { private Link createShowNewMessageLink(Buddy buddy) {
Link link = LinkFactory.createCustomLink(buddy.getIdentityKey().toString(), ACTION_MSG, "", Link.NONTRANSLATED, newMsgIcon, this); Link link = LinkFactory.createCustomLink(buddy.getIdentityKey().toString(), ACTION_MSG, "", Link.NONTRANSLATED, newMsgIcon, this);
link.registerForMousePositionEvent(true); link.registerForMousePositionEvent(true);
link.setCustomEnabledLinkCSS("b_small_icon o_instantmessaging_new_msg_icon"); link.setCustomEnabledLinkCSS("o_im_new_msg_icon");
String buddyName = StringHelper.escapeHtml(buddy.getName()); String buddyName = StringHelper.escapeHtml(buddy.getName());
link.setTooltip(translate("im.new.message", new String[]{ buddyName })); link.setTooltip(translate("im.new.message", new String[]{ buddyName }));
link.setUserObject(buddy); link.setUserObject(buddy);
......
$r.render("chats") $r.render("chats")
#if($iconsHolder.size() > 0) #if($iconsHolder.size() > 0)
<div id="o_sel_im_play_sound" style="display:none; width:1px; height:1px;"></div> <div id="o_im_message">
<script type="text/javascript"> <div id="o_sel_im_play_sound" style="display:none; width:1px; height:1px;"></div>
/* <![CDATA[ */ <script type="text/javascript">
## Play sound using scriptaculous library. /* <![CDATA[ */
## Use jQuery.ready to deferre execution and prevent errors in IE ## Play sound using scriptaculous library.
jQuery(function() { ## Use jQuery.ready to deferre execution and prevent errors in IE
BPlayer.playSound('$newMessageSoundURL','o_sel_im_play_sound'); jQuery(function() {
}); BPlayer.playSound('$newMessageSoundURL','o_sel_im_play_sound');
document.title = "$r.translate('im.new.message.short')"; });
/* ]]> */ document.title = "$r.translate('im.new.message.short')";
</script> /* ]]> */
## render the new message icon links </script>
#foreach ($holder in $iconsHolder) ## render the new message icon links
$r.render("${holder}") #foreach ($holder in $iconsHolder)
#end $r.render("${holder}")
#end
</div>
#end #end
#if(!$inAssessment) #if(!$inAssessment)
<ul> $r.render("newMsgPanel")
<li id="o_topnav_imclient_message">$r.render("newMsgPanel")</li>
#if ($r.available("statusChangerPanel")) #if ($r.available("statusChangerPanel"))
<li id="o_topnav_imclient_status">$r.render("statusChangerPanel")</li> <div id="o_im_status">$r.render("statusChangerPanel")</div>
#end #end
#if ($r.available("buddiesSummaryPanel")) #if ($r.available("buddiesSummaryPanel"))
<li id="o_topnav_imclient_summary">$r.render("buddiesSummaryPanel")</li> <div id="o_im_summary">$r.render("buddiesSummaryPanel")</div>
#end #end
</ul>
$r.render("rosterPanel") $r.render("rosterPanel")
$r.render("statusPanel") $r.render("statusPanel")
#end #end
\ No newline at end of file
...@@ -124,7 +124,8 @@ im.others.connected=Personen sind online ...@@ -124,7 +124,8 @@ im.others.connected=Personen sind online
im.refresh=Anzeige neu laden im.refresh=Anzeige neu laden
im.refresh.auto=Anzeige wird automatisch neu geladen. im.refresh.auto=Anzeige wird automatisch neu geladen.
im.roster.intro=Welche meiner Bekannten aus meinen Gruppen sind in OpenOLAT eingeloggt?<br>W\u00E4hlen Sie eine Person aus, mit der Sie chatten m\u00F6chten. im.roster.intro=Welche meiner Bekannten aus meinen Gruppen sind in OpenOLAT eingeloggt?<br>W\u00E4hlen Sie eine Person aus, mit der Sie chatten m\u00F6chten.
im.roster.launch=Chat ({0}/{1}) im.roster.launch={0}/{1}
im.show.groups=Zeige Gruppen im.show.groups=Zeige Gruppen
im.show.offline.buddies=Zeige offline Kontakte im.show.offline.buddies=Zeige offline Kontakte
im.show.online.buddies=Zeige Kontakte im.show.online.buddies=Zeige Kontakte
......
...@@ -125,7 +125,8 @@ im.others.connected=People are online ...@@ -125,7 +125,8 @@ im.others.connected=People are online
im.refresh=Refresh display im.refresh=Refresh display
im.refresh.auto=Display will be reloaded automatically. im.refresh.auto=Display will be reloaded automatically.
im.roster.intro=Who else from my group colleagues are logged on to OpenOLAT?<br>Select one person you want to chat with. im.roster.intro=Who else from my group colleagues are logged on to OpenOLAT?<br>Select one person you want to chat with.
im.roster.launch=Chat ({0}/{1}) im.roster.launch={0}/{1}
im.show.groups=Show groups im.show.groups=Show groups
im.show.offline.buddies=Show offline contacts im.show.offline.buddies=Show offline contacts
im.show.online.buddies=Show contacts im.show.online.buddies=Show contacts
......
...@@ -133,7 +133,8 @@ im.others.connected=Utilisateurs OpenOLAT en ligne ...@@ -133,7 +133,8 @@ im.others.connected=Utilisateurs OpenOLAT en ligne
im.refresh=Rafra\u00EEchir l'affichage im.refresh=Rafra\u00EEchir l'affichage
im.refresh.auto=L'affichage est rafra\u00EEchi automatiquement. im.refresh.auto=L'affichage est rafra\u00EEchi automatiquement.
im.roster.intro=Lesquels de mes copains de mes groupes sont connect\u00E9s sur OLAT?<br />S\u00E9lectionnez une personne avec laquelle vous souhaitez chatter. im.roster.intro=Lesquels de mes copains de mes groupes sont connect\u00E9s sur OLAT?<br />S\u00E9lectionnez une personne avec laquelle vous souhaitez chatter.
im.roster.launch=Chat ({0}/{1}) im.roster.launch={0}/{1}
im.show.groups=Montrer groupes im.show.groups=Montrer groupes
im.show.offline.buddies=Montre contacts offline im.show.offline.buddies=Montre contacts offline
im.show.online.buddies=Montrer les contacts im.show.online.buddies=Montrer les contacts
......
...@@ -103,7 +103,8 @@ im.others.connected=u\u017Cytkownik\u00F3w OpenOLAT jest online ...@@ -103,7 +103,8 @@ im.others.connected=u\u017Cytkownik\u00F3w OpenOLAT jest online
im.refresh=Od\u015Bwie\u017C im.refresh=Od\u015Bwie\u017C
im.refresh.auto=Automatyczne od\u015Bwie\u017Canie jest aktywne. im.refresh.auto=Automatyczne od\u015Bwie\u017Canie jest aktywne.
im.roster.intro=Kt\u00F3rzy znajomi z moich grup projekt\u00F3w s\u0105 zalogowani w OLAT?<br /> Wybierz osob\u0119 z kt\u00F3r\u0105 chcesz poczatowa\u0107. im.roster.intro=Kt\u00F3rzy znajomi z moich grup projekt\u00F3w s\u0105 zalogowani w OLAT?<br /> Wybierz osob\u0119 z kt\u00F3r\u0105 chcesz poczatowa\u0107.
im.roster.launch=Komunikator ({0}/{1}) im.roster.launch={0}/{1}
im.show.groups=Poka\u017C grupy im.show.groups=Poka\u017C grupy
im.show.offline.buddies=Poka\u017C kontakty offline im.show.offline.buddies=Poka\u017C kontakty offline
im.show.online.buddies=Poka\u017C kontakty im.show.online.buddies=Poka\u017C kontakty
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment