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

OO-1068 bootstrapify date component, info module, started with blog

parent f49bd58c
No related branches found
No related tags found
No related merge requests found
Showing
with 251 additions and 156 deletions
......@@ -208,14 +208,14 @@ public class InfoDisplayController extends FormBasicController {
if(secCallback.canEdit()) {
String editName = "info.edit." + info.getKey();
FormLink link = uifactory.addFormLink(editName, "edit", "edit", flc, Link.BUTTON);
FormLink link = uifactory.addFormLink(editName, "edit", "edit", flc, Link.BUTTON_SMALL);
link.setUserObject(info);
editLinks.add(link);
flc.add(link);
}
if(secCallback.canDelete()) {
String delName = "info.delete." + info.getKey();
FormLink link = uifactory.addFormLink(delName, "delete", "delete", flc, Link.BUTTON);
FormLink link = uifactory.addFormLink(delName, "delete", "delete", flc, Link.BUTTON_SMALL);
link.setUserObject(info);
deleteLinks.add(link);
flc.add(link);
......
#if($r.available("new_message"))
<div class="b_clearfix"><div class="b_float_right o_infomsg_create_button">
$r.render("new_message")
</div></div>
#if($infos.isEmpty())
<div class="o_important">
<p>
$r.translate("display.no_messages")
</p>
#if($r.available("new_message"))
<div class="o_button_group">
$r.render("new_message")
</div>
#end
</div>
#else
#if($r.available("new_message"))
<div class="clearfix">
<div class="o_infomsg_create_button pull-right">
$r.render("new_message")
</div>
</div>
#end
#end
<div class="o_infomsgs b_clearfix">
#if($infos.isEmpty())
<p class="b_important">$r.translate("display.no_messages")</p>
#end
<div class="o_infomsg o_block_with_datecomp clearfix">
#foreach($info in $infos)
<div class="o_infomsg b_clearfix">
<div class="o_msg o_block_large clearfix">
<div class="o_head">
$r.render("info.date.${info.getKey()}")
<h3 class="o_title">
$r.escapeHtml(${info.getTitle()})
</h3>
<div class="o_meta">
$info.getInfos()
#if($info.isModified()),
<div class="text-warning">$info.getModifier()</div>
#end
</div>
</div>
#if($info.getMessage())
<div class="o_content">$info.getMessage()</div>
#end
#if($r.available("info.delete.${info.getKey()}") or $r.available("info.edit.${info.getKey()}"))
<div class="b_float_right">
<div class="o_button_group">
#if($r.available("info.edit.${info.getKey()}"))
$r.render("info.edit.${info.getKey()}")
#end
......@@ -20,16 +49,9 @@
#end
</div>
#end
$r.render("info.date.${info.getKey()}")
<h5>$r.escapeHtml(${info.getTitle()})</h5>
<p class="o_item_info">$info.getInfos()#if($info.isModified()), <span class="o_item_info_mod">$info.getModifier()</span>#end</p>
<p></p>
#if($info.getMessage())
<p>$info.getMessage()</p>
#end
</div>
#end
<div class="b_float_right b_clearfix">
<div class="pull-right clearfix">
#if($r.available("display.old_messages"))
$r.render("display.old_messages")
#end
......
......@@ -49,6 +49,7 @@ public class DateComponent extends AbstractComponent {
super(name);
this.setDate(date);
this.setShowYear(showYear);
this.setDomReplacementWrapperRequired(false); // we provide our own DOM replacement ID
}
/**
......
......@@ -67,7 +67,8 @@ public class DateComponentRenderer implements ComponentRenderer {
Date date = dateC.getDate();
Locale locale = translator.getLocale();
sb.append("<div class=\"b_datecomp ");
sb.append("<div id=\"o_c").append(dateC.getDispatchID());
sb.append("\" class=\"o_datecomp");
// Optional css class as render arg
if (args != null && args.length == 1) {
sb.append(args[0]);
......@@ -77,7 +78,7 @@ public class DateComponentRenderer implements ComponentRenderer {
if (dateC.isShowYear()) {
SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", locale);
String year = yearFormat.format(date);
sb.append("<div class=\"b_year b_year_").append(year);
sb.append("<div class=\"o_year o_year_").append(year);
sb.append("\"><span>");
sb.append(year);
sb.append("</span>");
......@@ -85,7 +86,7 @@ public class DateComponentRenderer implements ComponentRenderer {
}
// Add month.
SimpleDateFormat monthNumberFormat = new SimpleDateFormat("MM", locale);
sb.append("<div class=\"b_month b_month_").append(monthNumberFormat.format(date));
sb.append("<div class=\"o_month o_month_").append(monthNumberFormat.format(date));
sb.append("\"><span>");
SimpleDateFormat monthDisplayFormat = new SimpleDateFormat("MMM", locale);
sb.append(monthDisplayFormat.format(date).toUpperCase());
......@@ -94,7 +95,7 @@ public class DateComponentRenderer implements ComponentRenderer {
// Add day
SimpleDateFormat dayFormat = new SimpleDateFormat("dd", locale);
String day = dayFormat.format(date);
sb.append("<div class=\"b_day b_day_").append(day);
sb.append("<div class=\"o_day o_day_").append(day);
sb.append("\"><span>");
sb.append(day);
sb.append("</span>");
......
#if($r.available("infoSubscription"))
$r.render("infoSubscription")
<div class="clearfix">
$r.render("infoSubscription")
</div>
#end
$r.render("displayInfos")
#if ($hasScoring)
$r.render("scoringController")
#end
#if ($hasTask)
$r.render("taskController")
#end
......@@ -13,6 +16,3 @@
#if ($hasSolution)
$r.render("solutionController")
#end
#if ($hasScoring)
$r.render("scoringController")
#end
......@@ -69,8 +69,6 @@ import org.olat.util.logging.activity.LoggingResourceable;
*/
public class WikiRunController extends BasicController implements Activateable2 {
private Panel main;
private CourseEnvironment courseEnv;
private WikiMainController wikiCtr;
private ModuleConfiguration config;
......@@ -88,7 +86,6 @@ public class WikiRunController extends BasicController implements Activateable2
this.courseEnv = cenv;
this.config = wikiCourseNode.getModuleConfiguration();
main = new Panel("wikirunmain");
addLoggingResourceable(LoggingResourceable.wrap(wikiCourseNode));
//get repository entry in "strict" mode
......@@ -144,13 +141,13 @@ public class WikiRunController extends BasicController implements Activateable2
if (wrappedCtr instanceof CloneableController) {
cloneCtr = new CloneController(ureq, getWindowControl(), (CloneableController)wrappedCtr, clccc);
listenTo(cloneCtr);
main.setContent(cloneCtr.getInitialComponent());
putInitialPanel(main);
putInitialPanel(cloneCtr.getInitialComponent());
} else {
putInitialPanel(new Panel("uups.no.clone.controller"));
}
}
@Override
//fxdiff BAKS-7 Resume function
public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
if(entries == null || entries.isEmpty()) return;
wikiCtr.activate(ureq, entries, state);
......@@ -172,8 +169,7 @@ public class WikiRunController extends BasicController implements Activateable2
}
/**
* @see org.olat.core.gui.//content = new VelocityContainer("wikirun", VELOCITY_ROOT + "/run.html", translator, this);
control.DefaultController#doDispose(boolean)
* @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
*/
protected void doDispose() {
//
......
$r.render("wiki")
\ No newline at end of file
......@@ -157,11 +157,17 @@ public class ItemsController extends BasicController implements Activateable2 {
vcItems.contextPut("helper", helper);
olderItemsLink = LinkFactory.createLink("feed.older.items", vcItems, this);
olderItemsLink.setCustomEnabledLinkCSS("b_table_backward");
olderItemsLink.setCustomDisplayText("&laquo;");
olderItemsLink.setCustomEnabledLinkCSS("o_backward");
olderItemsLink.setTitle("feed.older.items");
newerItemsLink = LinkFactory.createLink("feed.newer.items", vcItems, this);
newerItemsLink.setCustomEnabledLinkCSS("b_table_forward");
newerItemsLink.setCustomEnabledLinkCSS("o_forward");
newerItemsLink.setCustomDisplayText("&raquo;");
newerItemsLink.setTitle("feed.newer.items");
startpageLink = LinkFactory.createLink("feed.startpage", vcItems, this);
startpageLink.setCustomEnabledLinkCSS("b_table_first_page");
startpageLink.setCustomEnabledLinkCSS("o_first_page");
if (callback.mayEditItems() || callback.mayCreateItems()) {
createEditButtons(ureq, feed);
......@@ -310,7 +316,8 @@ public class ItemsController extends BasicController implements Activateable2 {
private void createItemLink(Item item) {
String guid = item.getGuid();
Link itemLink_more = LinkFactory.createCustomLink("link.to." + guid, "link.to." + guid, "feed.link.more", Link.LINK, vcItems, this);
itemLink_more.setCustomEnabledLinkCSS("b_link_forward");
itemLink_more.setIconRightCSS("o_icon o_icon_start");
itemLink_more.setCustomEnabledLinkCSS("o_link_forward");
itemLink_more.setUserObject(item);
Link itemLink_title = LinkFactory.createCustomLink("titlelink.to." + guid, "titlelink.to." + guid, StringEscapeUtils.escapeHtml(item.getTitle()), Link.NONTRANSLATED, vcItems, this);
......@@ -335,9 +342,9 @@ public class ItemsController extends BasicController implements Activateable2 {
private void createButtonsForItem(UserRequest ureq, Item item) {
String guid = item.getGuid();
Link editButton = LinkFactory.createCustomLink("feed.edit.item." + guid, "feed.edit.item." + guid, "feed.edit.item",
Link.BUTTON_XSMALL, vcItems, this);
Link.BUTTON_SMALL, vcItems, this);
editButton.setElementCssClass("o_sel_feed_item_edit");
Link deleteButton = LinkFactory.createCustomLink("delete." + guid, "delete." + guid, "delete", Link.BUTTON_XSMALL, vcItems, this);
Link deleteButton = LinkFactory.createCustomLink("delete." + guid, "delete." + guid, "delete", Link.BUTTON_SMALL, vcItems, this);
deleteButton.setElementCssClass("o_sel_feed_item_delete");
if(feedResource.isInternal() && getIdentity().getKey() != null && getIdentity().getKey().equals(item.getAuthorKey())) {
......
<div class="o_feed">
<div class="o_box clearfix">$r.render("info")</div>
<div class="b_subcolumns">
<div class="col-md-8">
<div class="b_subcl">
$r.render("items")
</div>
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-3 pull-right">
$r.render("rightColumn")
</div>
<div class="col-md-4">
<div class="b_subcr">
$r.render("rightColumn")
</div>
<div class="col-xs-12 col-sm-8 col-md-9">
$r.render("items")
</div>
</div>
</div>
\ No newline at end of file
<div class="o_blog_info">
#if ($callback.mayEditMetadata())
<div class="o_feed_edit">$r.render("feed.edit")</div>
<div class="o_edit pull-right">$r.render("feed.edit")</div>
#end
<h2>
<i class="o_icon o_icon-fw o_icon o_FileResource-BLOG_icon"></i>
......@@ -15,7 +15,9 @@
<div class="o_author">$r.translate("feed.author"): $r.escapeHtml($helper.getFeedAuthor())</div>
#end
<div class="o_date">$r.translate("feed.last.change") $!helper.getLastModified() </div>
#if ($helper.getFeedDescriptionForBrowser() != "")
<div class="o_desc o_info">$!helper.getFeedDescriptionForBrowser()</div>
#end
#if ( !$feed.isUndefined() )
<div class="o_subscription">
......
<div class="o_blog_posts b_clearfix">
<div class="o_blog_posts clearfix">
#if ($callback.mayCreateItems() && $feed.isInternal())
<div class="b_float_right b_clearfix">
<div class="pull-right">
$r.render("feed.add.item")
</div>
#end
<h4 class="o_blog_posts">$r.translate("blog.posts") ($helper.itemsCount($callback))</h4>
#if (!$feed.hasItems() )
$r.contextHelpWithWrapper("org.olat.modules.webFeed.ui.blog","internal-external.html","chelp.hover")
<p>$r.translate("blog.has.no.episodes")</p>
#end
#if ( $callback.mayEditMetadata() && $feed.isUndefined() && $r.available("feed.make.internal"))
<div class="o_blog_no_posts b_msg_dialog b_important">
<p>$r.translate("blog.internal.or.external")</p>
$r.render("feed.make.internal")
$r.render("feed.make.external")
##<h4 class="o_title">$r.translate("blog.posts") ($helper.itemsCount($callback))</h4>
<div class="clearfix"></div>
#if (!$feed.hasItems())
<div class="o_blog_no_posts o_important">
<p>
<i class="o_icon o_icon_warn"></i>
$r.translate("blog.has.no.episodes")
</p>
#if ( $callback.mayEditMetadata() && $feed.isUndefined() && $r.available("feed.make.internal"))
$r.contextHelpWithWrapper("org.olat.modules.webFeed.ui.blog","internal-external.html","chelp.hover")
<p>$r.translate("blog.internal.or.external")</p>
<div class="o_button_group">
$r.render("feed.make.internal")
$r.render("feed.make.external")
</div>
#end
</div>
#else
<!-- loop over episodes -->
#foreach( $post in $helper.getItems($callback) )
<div class="o_post b_clearfix $!post.extraCSSClass()">
#if (( $helper.isAuthor($post) && !$post.isDraft()) && $feed.isInternal() && $r.available("feed.artefact.item.$post.getGuid()"))
<div class="b_float_right">
<span class="o_post_artefact_collector">$r.render("feed.artefact.item.$post.getGuid()")</span>
<div class="o_post o_block_with_datecomp clearfix $!post.extraCSSClass()">
<div class="o_head">
#if (( $helper.isAuthor($post) && !$post.isDraft()) && $feed.isInternal() && $r.available("feed.artefact.item.$post.getGuid()"))
<div class="pull-right">
$r.render("feed.artefact.item.$post.getGuid()")
</div>
#end
<h3 class="o_title">
#if ( $post.getContent() && $post.getContent() != "" )
$r.render("titlelink.to.$post.getGuid()")
#else
$r.escapeHtml($post.getTitle())
#end
#if($r.available("date.$post.getGuid()"))
<small>
$r.render("date.$post.getGuid()")
</small>
#end
</h3>
<div class="o_meta">
#set ( $info = $helper.getInfo($post) )
#if ( $info )
$info
#if($helper.isModified($post)),
<div class="text-warning">$r.escapeHtml($helper.getModifierInfo($post))</div>
#end
#end
</div>
#end
#if($r.available("date.$post.getGuid()"))
$r.render("date.$post.getGuid()")
#end
<h5>
#if ( $post.getContent() && $post.getContent() != "" )
$r.render("titlelink.to.$post.getGuid()")
#else
$r.escapeHtml($post.getTitle())
#end
</h5>
</div>
#set ( $info = $helper.getInfo($post) )
#if ( $info )
<p class="o_item_info">
$info#if($helper.isModified($post)), <span class="o_item_info_mod">$r.escapeHtml($helper.getModifierInfo($post))</span>#end
</p>
#end
<p></p>
<div class="o_post-description">
$!helper.getItemDescriptionForBrowser($post)
<div class="o_content">
$!helper.getItemDescriptionForBrowser($post)
</div>
<ul class="o_post-readmorelinks">
<div class="clearfix">
<ul class="o_readmore list-inline pull-right">
#if ( $post.getContent() && $post.getContent() != "" )
<li>$r.render("link.to.$post.getGuid()")</li>
#end
#if ($feed.isExternal() && $post.getExternalLink())
<li><a href="$!post.getExternalLink()" target="_blank" class="b_link_extern">$r.translate("feed.item.original")</a></li>
<li><a href="$!post.getExternalLink()" target="_blank">
$r.translate("feed.item.original")
<i class="o_icon o_icon_start"></i>
</a></li>
#end
</ul>
<div class="o_post-editlinks">
#if (( $callback.mayEditItems() || ($callback.mayCreateItems() && $post.isDraft())) && $feed.isInternal())
#if ($r.available("feed.edit.item.$post.getGuid()"))
<div class="b_clearfix">
<div class="o_post_edit b_float_right">
## special case: this item has been added by another user and thus we
## don't yet have links for this item. But we can still display the content
$r.render("feed.edit.item.$post.getGuid()")
#if ($callback.mayDeleteItems() || ($callback.mayCreateItems() && $post.isDraft()))
$r.render("delete.$post.getGuid()")
#end
</div>
</div>
#end
#end
</div>
#if ($r.available("commentsAndRating.${post.getGuid()}"))
<div class="pull-left">
$r.render("commentsAndRating.${post.getGuid()}")
</div>
#end
</div>
#if (( $callback.mayEditItems() || ($callback.mayCreateItems() && $post.isDraft())) && $feed.isInternal())
<div class="o_button_group">
#if ($r.available("feed.edit.item.$post.getGuid()"))
## special case: this item has been added by another user and thus we
## don't yet have links for this item. But we can still display the content
$r.render("feed.edit.item.$post.getGuid()")
#if ($callback.mayDeleteItems() || ($callback.mayCreateItems() && $post.isDraft()))
$r.render("delete.$post.getGuid()")
#end
#end
</div>
#end
</div>
#end
<div id="o_link_container">
#if ( $helper.hasOlderItems() )
<div class="o_older_items">
<ul class="pagination">
#if ( $helper.hasOlderItems() )
<li>
$r.render("feed.older.items")
</div>
#end
#if ( $helper.hasNewerItems() )
<div class="o_newer_items">
$r.render("feed.newer.items")
</div>
<div class="o_home">
</li>
#end
#if ( $helper.hasNewerItems() )
<li>
$r.render("feed.startpage")
</div>
#end
</div>
</li>
<li>
$r.render("feed.newer.items")
</li>
#end
</ul>
#end
</div>
\ No newline at end of file
......@@ -28,7 +28,6 @@ import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.panel.Panel;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
......@@ -58,7 +57,6 @@ public class ArtefactWizzardStepsController extends BasicController {
private Controller collectStepsCtrl;
EPFrontendManager ePFMgr;
private PortfolioModule portfolioModule;
private VelocityContainer collectLinkVC;
private Link addLink;
AbstractArtefact artefact;
private OLATResourceable ores;
......@@ -134,21 +132,22 @@ public class ArtefactWizzardStepsController extends BasicController {
* @param artefact
*/
private void initCollectLinkVelocity() {
collectLinkVC = createVelocityContainer("collectLink");
addLink = LinkFactory.createCustomLink("add.to.eportfolio", "add.to.eportfolio", "", Link.LINK_CUSTOM_CSS + Link.NONTRANSLATED,
collectLinkVC, this);
null, this);
addLink.setCustomEnabledLinkCSS("b_eportfolio_add");
addLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
addLink.setTooltip(translate("add.to.eportfolio"));
addLink.setTranslator(getTranslator());
// check for an already existing artefact with same businessPath, change collect-item
List<AbstractArtefact> existingArtefacts = ePFMgr.loadArtefactsByBusinessPath(businessPath, getIdentity());
if (existingArtefacts!=null){
int amount = existingArtefacts.size();
addLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
addLink.setCustomEnabledLinkCSS("b_eportfolio_add_again");
addLink.setTooltip(translate("add.to.eportfolio.again", String.valueOf(amount)));
}
putInitialPanel(collectLinkVC);
putInitialPanel(addLink);
getInitialComponent().setSpanAsDomReplaceable(true); // special case since controller is actually just a link
}
......
$r.render("add.to.eportfolio")
\ No newline at end of file
......@@ -45,6 +45,22 @@ $o-tree-padding-steps-px : 15px !default;
$o-tree-padding-opener-left-px : 1px !default;
$o-tree-padding-opener-top-px : 8px;
$o-coursesite-rowelem-width-md : 180px;
$o-coursesite-rowelem-height-md : 120px;
$o-coursesite-rowelem-width-sm : 120px;
$o-coursesite-rowelem-height-sm : 80px;
$o-coursesite-rowelem-width-xs : 75px;
$o-coursesite-rowelem-height-xs : 50px;
$o-coursesite-rowelem-border : $brand-primary;
$o-coursesite-catalog-space : $padding-large-vertical * 2;
$o-coursesite-catalog-space-sm : $padding-large-vertical;
$o-coursesite-catalog-space-xs : $padding-xs-vertical;
$o-coursesite-catalog-border : $brand-primary;
/*
FIXME:oo10 LEGACY VARIABLES
......
......@@ -14,8 +14,9 @@
*/
@import "license";
@import "config";
@import "../../bootstrap/stylesheets/bootstrap/variables";
@import "config";
@import "../../bootstrap/stylesheets/bootstrap/mixins";
@import "../../bootstrap/stylesheets/bootstrap/normalize";
@import "../../bootstrap/stylesheets/bootstrap/scaffolding";
......
// Core variables and mixins
@import "../../../bootstrap/stylesheets/bootstrap/variables";
@import "../../../bootstrap/stylesheets/bootstrap/mixins";
// Reset
......
/* custom layout */
$o-coursesite-rowelem-width-md : 180px;
$o-coursesite-rowelem-height-md : 120px;
$o-coursesite-rowelem-width-sm : 120px;
$o-coursesite-rowelem-height-sm : 80px;
$o-coursesite-rowelem-width-xs : 75px;
$o-coursesite-rowelem-height-xs : 50px;
$o-coursesite-rowelem-border : $brand-primary;
$o-coursesite-catalog-space : $padding-large-vertical * 2;
$o-coursesite-catalog-space-sm : $padding-large-vertical;
$o-coursesite-catalog-space-xs : $padding-xs-vertical;
$o-coursesite-catalog-border : $brand-primary;
.o_visual {
position: absolute;
top: 0; left: 0;
......
......@@ -100,6 +100,63 @@
margin: 0;
}
/* Date component, used in info course element, blog etc */
.o_datecomp {
position: relative;
width: $line-height-computed * 2;
height: $line-height-computed + floor($line-height-computed * 1.5) + 2px;
border: 1px solid $gray;
margin-right: $padding-base-horizontal;
text-align: center;
vertical-align: middle;
div.o_year {
position: absolute;
left: 0;
width: 100%;
top: -$line-height-computed;
height: $line-height-computed;
line-height: $line-height-computed;
font-size: ceil($font-size-base * 0.7);
}
div.o_month {
height: $line-height-computed;
line-height: $line-height-computed;
font-size: $font-size-small;
@extend .bg-primary;
}
div.o_day {
height: floor($line-height-computed * 1.5);
line-height: floor($line-height-computed * 1.5);
font-size: $font-size-large;
border-top: 1px solid $gray;
background-color: $body-bg;
}
}
.o_block_with_datecomp {
@extend .o_block;
.o_head {
position: relative;
padding-left: $line-height-computed * 2 + $padding-base-horizontal;
}
.o_datecomp {
position: absolute;
top: 0.2em;
left: 0;
}
.o_title {
margin-top: 0;
}
.o_meta {
@extend .text-muted;
@extend .small;
}
.o_content {
@extend .o_block;
border-left: 5px solid $blockquote-border-color;
padding: 0 $line-height-computed;
}
}
/* Calendar */
......
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