Skip to content
Snippets Groups Projects
Commit 58f4d3b3 authored by gnaegi's avatar gnaegi
Browse files

OO-352 merge social link sharing for OpenOLAT footer

parent 15d2b213
No related branches found
No related tags found
No related merge requests found
Showing
with 430 additions and 18 deletions
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
package org.olat.gui.control; package org.olat.gui.control;
import org.olat.core.CoreSpringFactory;
import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
...@@ -39,7 +40,6 @@ import org.olat.core.gui.control.WindowControl; ...@@ -39,7 +40,6 @@ 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.popup.PopupBrowserWindow; import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
import org.olat.core.gui.translator.Translator;
import org.olat.core.helpers.Settings; import org.olat.core.helpers.Settings;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.id.OLATResourceable; import org.olat.core.id.OLATResourceable;
...@@ -51,6 +51,8 @@ import org.olat.ims.qti.process.AssessmentInstance; ...@@ -51,6 +51,8 @@ import org.olat.ims.qti.process.AssessmentInstance;
import org.olat.instantMessaging.ConncectedUsersHelper; import org.olat.instantMessaging.ConncectedUsersHelper;
import org.olat.instantMessaging.InstantMessagingModule; import org.olat.instantMessaging.InstantMessagingModule;
import org.olat.instantMessaging.ui.ConnectedClientsListController; import org.olat.instantMessaging.ui.ConnectedClientsListController;
import org.olat.social.SocialModule;
import org.olat.social.shareLink.ShareLinkController;
/** /**
* Overrides the default footer of the webapplication framework showing the * Overrides the default footer of the webapplication framework showing the
...@@ -85,7 +87,16 @@ public class OlatFooterController extends BasicController implements GenericEven ...@@ -85,7 +87,16 @@ public class OlatFooterController extends BasicController implements GenericEven
if (isGuest || isInvitee) { if (isGuest || isInvitee) {
showOtherUsers.setEnabled(false); showOtherUsers.setEnabled(false);
} }
// share links
SocialModule socialModule = (SocialModule) CoreSpringFactory.getBean("socialModule");
if (socialModule.isShareEnabled() && socialModule.getEnabledShareLinkButtons().size() > 0) {
Controller shareLinkCtr = new ShareLinkController(ureq, wControl);
listenTo(shareLinkCtr); // for auto-dispose
// push to view
olatFootervc.put("shareLink", shareLinkCtr.getInitialComponent());
}
// some variables displayed in the footer // some variables displayed in the footer
String username; String username;
if(isGuest) { if(isGuest) {
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
package org.olat.gui.control; package org.olat.gui.control;
import org.olat.core.CoreSpringFactory;
import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
import org.olat.core.dispatcher.DispatcherAction; import org.olat.core.dispatcher.DispatcherAction;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
...@@ -40,10 +41,11 @@ import org.olat.core.gui.control.creator.ControllerCreator; ...@@ -40,10 +41,11 @@ import org.olat.core.gui.control.creator.ControllerCreator;
import org.olat.core.gui.control.generic.popup.PopupBrowserWindow; import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
import org.olat.core.helpers.Settings; import org.olat.core.helpers.Settings;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.util.coordinate.CoordinatorManager;
import org.olat.instantMessaging.ConncectedUsersHelper; import org.olat.instantMessaging.ConncectedUsersHelper;
import org.olat.instantMessaging.InstantMessagingModule; import org.olat.instantMessaging.InstantMessagingModule;
import org.olat.instantMessaging.ui.ConnectedClientsListController; import org.olat.instantMessaging.ui.ConnectedClientsListController;
import org.olat.social.SocialModule;
import org.olat.social.shareLink.ShareLinkController;
/** /**
* Overrides the default footer of the webapplication framework showing the * Overrides the default footer of the webapplication framework showing the
...@@ -84,7 +86,16 @@ public class OlatGuestFooterController extends BasicController { ...@@ -84,7 +86,16 @@ public class OlatGuestFooterController extends BasicController {
showOtherUsers.setAjaxEnabled(false); showOtherUsers.setAjaxEnabled(false);
showOtherUsers.setTarget("_blank"); showOtherUsers.setTarget("_blank");
if (isGuest) showOtherUsers.setEnabled(false); if (isGuest) showOtherUsers.setEnabled(false);
// share links
SocialModule socialModule = (SocialModule) CoreSpringFactory.getBean("socialModule");
if (socialModule.isShareEnabled() && socialModule.getEnabledShareLinkButtons().size() > 0) {
Controller shareLinkCtr = new ShareLinkController(ureq, wControl);
listenTo(shareLinkCtr); // for auto-dispose
// push to view
olatFootervc.put("shareLink", shareLinkCtr.getInitialComponent());
}
loginLink = LinkFactory.createLink("footer.login", olatFootervc, this); loginLink = LinkFactory.createLink("footer.login", olatFootervc, this);
olatFootervc.contextPut("olatversion", Settings.getFullVersionInfo() +" "+Settings.getNodeInfo()); olatFootervc.contextPut("olatversion", Settings.getFullVersionInfo() +" "+Settings.getNodeInfo());
......
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
<div id="b_footer_version"> <div id="b_footer_version">
<a href="http://www.openolat.org" title="Homepage of the Open Source LMS OpenOLAT" target="_blank">$olatversion</a> <a href="http://www.openolat.org" title="Homepage of the Open Source LMS OpenOLAT" target="_blank">$olatversion</a>
</div> </div>
#if($r.available("shareLink"))
$r.render("shareLink")
#end
<div id="b_footer_powered"> <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"/>
......
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
<div id="b_footer_version"> <div id="b_footer_version">
<a href="http://www.openolat.org" title="Homepage of the Open Source LMS OpenOLAT" target="_blank">$olatversion</a> <a href="http://www.openolat.org" title="Homepage of the Open Source LMS OpenOLAT" target="_blank">$olatversion</a>
</div> </div>
#if($r.available("shareLink"))
$r.render("shareLink")
#end
<div id="b_footer_powered"> <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 href=“http://www.openolat.org“>
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* 13.09.2012 by frentix GmbH, http://www.frentix.com
* <p>
**/
package org.olat.social;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.olat.core.configuration.AbstractOLATModule;
import org.olat.core.configuration.PersistedProperties;
import org.olat.core.util.StringHelper;
/**
* <h3>Description:</h3>
* <p>
* The social module offers integration features into social networks. Currently
* there is only a perma-link share feature available, expect a deeper
* integration with social networks for the future.
* <p>
* Initial Date: 12.09.2012 <br>
*
* @author Florian Gnaegi, frentix GmbH, http://www.frentix.com
*/
public class SocialModule extends AbstractOLATModule {
private static final String SHARE_ENABLED = "social.share.enabled";
private static final String SHARE_LINK_BUTTONS = "social.share.link.buttons";
private static final String SHARE_LINK_BUTTONS_AVAILABLE = "twitter,facebook,google,delicious,digg,mail,link";
// the share enabled config saved in the persisted properties
private boolean shareEnabled;
// the share links enabled config separated by comma saved in the persisted properties
private String shareLinkButtonsEnabled;
// the list of all configurable share links
private List<String> shareLinkButtonsAvailableList;
// the list of enabled link buttons for your convenience as list object
private List<String> shareLinkButtonsEnabledList;
/* (non-Javadoc)
* @see org.olat.core.configuration.AbstractOLATModule#init()
*/
@Override
public void init() {
// Override Enable/Disable social sharing globally from persisted properties config
String shareEnabledFromPersistedProperties = getStringPropertyValue(SHARE_ENABLED, true);
if(StringHelper.containsNonWhitespace(shareEnabledFromPersistedProperties)) {
shareEnabled = "true".equals(shareEnabledFromPersistedProperties);
}
// Init the available share link buttons implemented in the footer template
shareLinkButtonsAvailableList = new ArrayList<String>(Arrays.asList(SHARE_LINK_BUTTONS_AVAILABLE.split(",")));
// Init the enabled share link buttons from the configuration
shareLinkButtonsEnabledList = new ArrayList<String>();
// Override enabled share link buttons config from persisted properties
String shareLinkButtonsEnabledFromPersistedProperties = getStringPropertyValue(SHARE_LINK_BUTTONS, true);
if(StringHelper.containsNonWhitespace(shareLinkButtonsEnabledFromPersistedProperties)) {
shareLinkButtonsEnabled = shareLinkButtonsEnabledFromPersistedProperties;
}
// Convert to a list to simplify access later in the code
if(StringHelper.containsNonWhitespace(shareLinkButtonsEnabled)) {
String[] shareLinks = shareLinkButtonsEnabled.split(",");
for (String shareLink: shareLinks) {
// check if this share link is implemented
shareLink = shareLink.trim().toLowerCase();
if (shareLinkButtonsAvailableList.contains(shareLink)) {
shareLinkButtonsEnabledList.add(shareLink);
}
}
}
}
/**
* [Spring] Setter
* @see org.olat.core.configuration.AbstractOLATModule#setPersistedProperties(org.olat.core.configuration.PersistedProperties)
*/
@Override
public void setPersistedProperties(PersistedProperties persistedProperties) {
this.moduleConfigProperties = persistedProperties;
}
/* (non-Javadoc)
* @see org.olat.core.configuration.AbstractOLATModule#initDefaultProperties()
*/
@Override
protected void initDefaultProperties() {
// init default configuration from spring configuration. Might be overriden in init() by persisted properties
shareEnabled = getBooleanConfigParameter(SHARE_ENABLED, true);
shareLinkButtonsEnabled = getStringConfigParameter(SHARE_LINK_BUTTONS, SHARE_LINK_BUTTONS_AVAILABLE, true);
}
/* (non-Javadoc)
* @see org.olat.core.configuration.AbstractOLATModule#initFromChangedProperties()
*/
@Override
protected void initFromChangedProperties() {
init();
}
/**
* [Spring] Destroy method
*/
public void destroy() {
// nothing to do so far
}
/**
* @return true: sharing with social networks is enabled; false: sharing
* with social networks is disabled
*/
public boolean isShareEnabled() {
return shareEnabled;
}
/**
* Enable/Disable the sharing with social networks. This change will be
* saved in a persisted property and thus stay active after a restart.
*
* @param shareEnabled
*/
public void setShareEnabled(boolean shareEnabled) {
if(this.shareEnabled != shareEnabled) {
setStringProperty(SHARE_ENABLED, Boolean.toString(shareEnabled), true);
}
}
/**
* Set the list of enabled share links. This change will be saved in a
* persisted property and thus stay active after a restart.
*
* @param enabledLinks List of share link names, order is important.
*/
public void setEnabledShareLinkButtons(List<String> enabledLinks) {
String enabledAsString = "";
Iterator<String> it = enabledLinks.iterator();
while (it.hasNext()) {
String link = it.next();
enabledAsString += link;
if (it.hasNext()) {
enabledAsString += ",";
}
}
if (!enabledAsString.equals(this.shareLinkButtonsEnabled)) {
setStringProperty(SHARE_LINK_BUTTONS, enabledAsString, true);
}
}
/**
* @return The list of the enabled share link buttons as strings. Order of
* the items in the list matters.
*/
public List<String> getEnabledShareLinkButtons() {
return shareLinkButtonsEnabledList;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="socialModule" class="org.olat.social.SocialModule" destroy-method="destroy">
<property name="persistedProperties">
<bean class="org.olat.core.configuration.PersistedProperties" scope="prototype" init-method="init" destroy-method="destroy"
depends-on="org.olat.core.util.WebappHelper">
<constructor-arg index="0" ref="coordinatorManager" />
<constructor-arg index="1" ref="socialModule" />
</bean>
</property>
</bean>
<bean name="socialModuleInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="socialModule" />
<property name="targetMethod" value="init" />
<property name="arguments">
<value>
social.share.enabled=${social.share.enabled}
social.share.link.buttons=${social.share.link.buttons}
</value>
</property>
</bean>
</beans>
\ No newline at end of file
/**
* <a href=“http://www.openolat.org“>
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* 13.09.2012 by frentix GmbH, http://www.frentix.com
* <p>
**/
package org.olat.social.shareLink;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.helpers.Settings;
import org.olat.social.SocialModule;
/**
* <h3>Description:</h3>
* <p>
* This controller displays a row of buttons to share the link of the current
* page (perma-link/business-path link) with other people. Besides some common
* social networks a mail button and a link copy/past button is also
* implemented.
* <p>
* The list of buttons can be configured in the SocialModule and the olat.properties
* <p>
* <h3>Events thrown by this controller:</h3>
* <p>
* none
* <p>
* Initial Date: 13.09.2012 <br>
*
* @author Florian Gnaegi, frentix GmbH, http://www.frentix.com
*/
public class ShareLinkController extends BasicController {
private VelocityContainer shareLinkVC;
/**
* Standard constructor for the share link controller
* @param ureq
* @param wControl
*/
public ShareLinkController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl);
// For simplicity we use only one velocity template
this.shareLinkVC = createVelocityContainer("shareLink");
// Add the OpenOLAT base URL from the config
shareLinkVC.contextPut("baseURL", Settings.getServerContextPathURI());
// Load configured share link buttons from the SocialModule configuration
SocialModule socialModule = (SocialModule) CoreSpringFactory.getBean("socialModule");
this.shareLinkVC.contextPut("shareLinks", socialModule.getEnabledShareLinkButtons());
//
putInitialPanel(this.shareLinkVC);
}
/* (non-Javadoc)
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
*/
@Override
protected void event(UserRequest ureq, Component source, Event event) {
// nothing to do
}
/* (non-Javadoc)
* @see org.olat.core.gui.control.DefaultController#doDispose()
*/
@Override
protected void doDispose() {
// nothing to do
}
}
## some common JS helper methods
<script type="text/javascript">
/* <![CDATA[ */
## Called from Window.java to update the businesspath
function b_shareActiveSocialUrl() {
$('b_mail').writeAttribute('href','mailto:?subject=' + b_shareSocialTitle() + '&body=' + b_shareSocialUrl());
}
## Helper methods for buttons below
function b_shareSocialUrl() {
if(o_info.businessPath && o_info.businessPath.length > 0) return o_info.businessPath;
return '$baseURL';
}
function b_shareSocialTitle() { return document.title; }
/* ]]> */
</script>
<div id="b_share">
#foreach ($link in $shareLinks)
#if ($link == "twitter")
<a id="b_twitter" href="#" target="_blank" title="$r.translateInAttribute("share.twitter")" onclick="window.open('http://twitter.com/share?url='+b_shareSocialUrl()+'&text='+b_shareSocialTitle());return false;"></a>
#elseif ($link == "facebook")
<a id="b_facebook" href="#" target="_blank" title="$r.translateInAttribute("share.facebook")" onclick="window.open('http://www.facebook.com/sharer.php?u='+b_shareSocialUrl()+'&t='+b_shareSocialTitle());return false;"></a>
#elseif ($link == "google")
<a id="b_google" href="#" target="_blank" title="$r.translateInAttribute("share.google")" onclick="window.open('https://www.google.com/bookmarks/mark?op=add&bkmk='+b_shareSocialUrl()+'&title='+b_shareSocialTitle());return false;"></a>
#elseif ($link == "delicious")
<a id="b_delicious" href="#" target="_blank" title="$r.translateInAttribute("share.delicious")" onclick="window.open('http://www.delicious.com/save?url='+b_shareSocialUrl()+'&title='+b_shareSocialTitle());return false;"></a>
#elseif ($link == "digg")
<a id="b_digg" href="#" title="$r.translateInAttribute("share.digg")" onclick="window.open('http://digg.com/submit?url='+b_shareSocialUrl()+'&title='+b_shareSocialTitle());return false;"></a>
#elseif ($link == "mail")
<a id="b_mail" href="mailto:?body=$baseURL" title="$r.translateInAttribute("share.mail")"></a>
#elseif ($link == "link")
<span id="b_link" href="" title="$r.translateInAttribute("share.link")" onclick="javascript:b_shareSocialLink();"></span>
<script type="text/javascript">
/* <![CDATA[ */
function b_shareSocialLink() {
if(Ext.getCmp('callout_share_link') != null ) {
Ext.getCmp('callout_share_link').destroy();
};
var tt = new Ext.ToolTip({
id: 'callout_share_link',
html: '<p><span>$r.translate("share.link")</span>:<br/><input id="callout_share_link_in" type="text" name="cl_share_link" value="' + b_shareSocialUrl() + '" /></p>',
target: 'b_link',
title: '<span>' + b_shareSocialTitle() + '</span>',
closable: true,
autoHide: false,
hideDelay: 100000,
anchor: 'box',
width: 500,
autoScroll: true,
style: 'z-index:900',
onDocMouseDown: function(e) { }
});
tt.show();
document.getElementById('callout_share_link_in').focus();
}
/* ]]> */
</script>
#else
<!-- did not found code for $link share link button in shareLink.html template-->
#end
#end
</div>
share.twitter=Link tweeten
share.facebook=Link auf facebook teilen
share.google=Link auf google bookmarken
share.delicious=Link auf delicous bookmarken
share.digg=Link auf digg teilen
share.mail=Link per Mail versenden
share.link=Link kopieren
\ No newline at end of file
share.twitter=Tweet link
share.facebook=Share link on facebook
share.google=Bookmark link on google
share.delicious=Bookmark link on delicous
share.digg=Share link on digg
share.mail=Share link with mail
share.link=Copy link
\ No newline at end of file
...@@ -457,6 +457,16 @@ course.display.participants.count=true ...@@ -457,6 +457,16 @@ course.display.participants.count=true
instantMessaging.awarenessVisible=false instantMessaging.awarenessVisible=false
instantMessaging.hideExternalClientInfo=false instantMessaging.hideExternalClientInfo=false
########################################################################
# Social sharing options
########################################################################
# Enable social sharing features
social.share.enabled=true
# List of perma-link share buttons, normally visible in the footer of the page.
social.share.link.buttons=twitter,facebook,google,delicious,digg,mail,link
social.share.link.buttons.values=twitter,facebook,google,delicious,digg,mail,link
######################################################################## ########################################################################
# Translation tool settings (translation infrastructure required!) # Translation tool settings (translation infrastructure required!)
######################################################################## ########################################################################
......
...@@ -22,20 +22,20 @@ div.o_bcard_text {margin-left: 120px; margin-top: 10px; line-height:150%} ...@@ -22,20 +22,20 @@ div.o_bcard_text {margin-left: 120px; margin-top: 10px; line-height:150%}
div.o_bcard_footer {text-align: right; clear: both; font-size: 95%; color:rgb(31, 73, 179); padding: 5px;} div.o_bcard_footer {text-align: right; clear: both; font-size: 95%; color:rgb(31, 73, 179); padding: 5px;}
/* social links (FB, twitter, google) */ /* social links (FB, twitter, google) from SocialModule.java */
#fx_share { #b_share {
float:left; clear:left; margin-top:0.5em; width:250px; float:left; clear:left; margin-top:0.5em; width:250px;
a, span { margin: 0 0 0 3px; background-repeat: no-repeat; width: 16px; height: 16px; float: left; display: inline; @include o-opacity(60);} a, span { margin: 0 0 0 3px; background-repeat: no-repeat; width: 16px; height: 16px; float: left; display: inline; @include o-opacity(60);}
a:hover { @include o-opacity(100); } a:hover { @include o-opacity(100); }
#fx_facebook {background-image: url(../openolat/images/social/facebook_16.png);} #b_facebook {background-image: url(../openolat/images/social/facebook_16.png);}
#fx_twitter {background-image: url(../openolat/images/social/twitter_16.png);} #b_twitter {background-image: url(../openolat/images/social/twitter_16.png);}
#fx_google {background-image: url(../openolat/images/social/google_16.png);} #b_google {background-image: url(../openolat/images/social/google_16.png);}
#fx_delicious {background-image: url(../openolat/images/social/delicious_16.png);} #b_delicious {background-image: url(../openolat/images/social/delicious_16.png);}
#fx_digg {background-image: url(../openolat/images/social/digg_16.png);} #b_digg {background-image: url(../openolat/images/social/digg_16.png);}
#fx_mail {background-image: url(../openolat/images/social/email_16.png);} #b_mail {background-image: url(../openolat/images/social/email_16.png);}
#fx_link {background-image: url(../openolat/images/social/link_16.png);} #b_link {background-image: url(../openolat/images/social/link_16.png);}
} }
#callout_fx_link input { width:460px;} #callout_share_link input { width:460px;}
#b_footer .fx_footer #b_footer_version { #b_footer .fx_footer #b_footer_version {
> a { display:block; min-height: 45px; height: 4em; background: transparent url('../../images/frentix/frentix_logo_grey.png') no-repeat left bottom ; } > a { display:block; min-height: 45px; height: 4em; background: transparent url('../../images/frentix/frentix_logo_grey.png') no-repeat left bottom ; }
......
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
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