Merge branch 'develop' into unit_testing

* develop:
  Redesigned UpcomingEventsPanel
  daily commit
  Worked on some design for edit levels in admin pages
  Removed unused line
  Fixed bug where message Already exists was shown when editing
  Added info printing and a duplicate check when creating a new project class
  Added a undelete function in admin projectclass settings
  Added panels in for editing and deleting panels
  Added new page Level settings to Admin->Settings page. Used to add/edit project classes
This commit is contained in:
Emil Siverhall 2011-07-22 14:10:11 +02:00
commit 0593938ade
14 changed files with 620 additions and 12 deletions

@ -10,9 +10,10 @@ import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPerProjectClassPage;
import se.su.dsv.scipro.admin.pages.settings.AdminGeneralSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminPeerSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminProjectClassSettingsPage;
import se.su.dsv.scipro.admin.pages.settings.AdminServerEnvironmentSettingsPage;
import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.icons.ImageIcon;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
@ -32,8 +33,10 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage {
items.add(new MenuItem("General settings", AdminGeneralSettingsPage.class));
items.add(new MenuItem("Server Environment", AdminServerEnvironmentSettingsPage.class));
items.add(new MenuItem("Final seminar general settings", AdminFinalSeminarSettingsPage.class));
items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class));
items.add(new MenuItem("Peer settings", AdminPeerSettingsPage.class /*,ImageIcon.ICON_SETTINGS */));
items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class));
items.add(new MenuItem("Level settings", AdminPeerSettingsPage.class));
items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class));
return items;
}

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:extend>
<!-- Edit/add dialog -->
<div wicket:id="dialog">
<div wicket:id="dialogContent"></div>
</div>
<a href=# wicket:id="createLink"><img src="images/icons/add_16x16.png" alt=""/> Create new level</a>
<div class="span-15 last">
<h3 class="section">Active</h3>
</div>
<table class="rounded-table-top">
<tr>
<th>Code</th>
<th>Name</th>
<th>Description</th>
<th>Edit</th>
</tr>
<tr>
</tr>
<tbody wicket:id="activeProjectClassContainer">
<tr wicket:id="projectClassList">
<td wicket:id="code"></td>
<td wicket:id="name"></td>
<td wicket:id="desc"></td>
<td><a href=# wicket:id="editLink"><img src="images/icons/edit_16x16.png" " alt="Edit" title="Edit"/></a>
</td>
</tr>
</tbody>
</table>
<div class="span-15 last">
<h3 class="section">Inactive</h3>
</div>
<table class="rounded-table-top">
<tr>
<th>Code</th>
<th>Name</th>
<th>Description</th>
<th>Edit</th>
</tr>
<tr>
</tr>
<tbody wicket:id="deletedProjectClassContainer">
<tr wicket:id="projectClassListDel">
<td wicket:id="codeDel"></td>
<td wicket:id="nameDel"></td>
<td wicket:id="descDel"></td>
<td><a href=# wicket:id="undeleteLink">Activate</a>
</td>
</tr>
</tbody>
</table>
</wicket:extend>
</body>
</html>

@ -0,0 +1,154 @@
package se.su.dsv.scipro.admin.pages.settings;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.ui.dialog.Dialog;
import se.su.dsv.scipro.admin.pages.AbstractAdminSettingsPage;
import se.su.dsv.scipro.admin.panels.AdminProjectClassPanel;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage {
@SpringBean
ProjectClassDao projectClassDao;
public AdminProjectClassSettingsPage(PageParameters pp) {
super(pp);
String msg = "";
if((msg = pp.getString("info")) != null)
info(msg);
else if((msg = pp.getString("error")) != null)
error(msg);
final Dialog dialog = new Dialog("dialog");
dialog.setModal(true);
dialog.setAutoOpen(false);
dialog.add(new EmptyPanel("dialogContent"));
dialog.setWidth(500);
dialog.setHeight(360);
add(dialog);
IModel<List<ProjectClass>> activeProjectClass = new LoadableDetachableModel<List<ProjectClass>>() {
private static final long serialVersionUID = 1L;
@Override
protected List<ProjectClass> load() {
return projectClassDao.findAll();
}
};
final WebMarkupContainer activeWmc = new WebMarkupContainer("activeProjectClassContainer");
activeWmc.setOutputMarkupId(true);
add(activeWmc);
final ListView<ProjectClass> listView = new ListView<ProjectClass>("projectClassList", activeProjectClass){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<ProjectClass> item) {
final IModel<ProjectClass> model = item.getModel();
item.add(new Label("code", model.getObject().getCode()));
item.add(new Label("name", model.getObject().getName()));
item.add(new MultiLineLabel("desc", model.getObject().getDescription()));
AjaxLink<Void> editLink = new AjaxLink<Void>("editLink"){
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
dialog.replace(new AdminProjectClassPanel("dialogContent", model));
target.addComponent(dialog);
dialog.setTitle("Edit");
dialog.open(target);
}
};
item.add(editLink);
}
};
activeWmc.add(listView);
/*
* Begin - list of deleted project classes
*/
final IModel<List<ProjectClass>> deletedProjectClass = new LoadableDetachableModel<List<ProjectClass>>() {
private static final long serialVersionUID = 1L;
@Override
protected List<ProjectClass> load() {
return projectClassDao.findAllDeleted();
}
};
final WebMarkupContainer deletedWmc = new WebMarkupContainer("deletedProjectClassContainer");
deletedWmc.setOutputMarkupId(true);
add(deletedWmc);
final ListView<ProjectClass> listViewDeleted = new ListView<ProjectClass>("projectClassListDel", deletedProjectClass){
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<ProjectClass> item) {
final IModel<ProjectClass> model = item.getModel();
item.add(new Label("codeDel", model.getObject().getCode()));
item.add(new Label("nameDel", model.getObject().getName()));
item.add(new MultiLineLabel("descDel", model.getObject().getDescription()));
AjaxLink<Void> undeleteLink = new AjaxLink<Void>("undeleteLink"){
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
model.getObject().setDeleted(false);
model.setObject(projectClassDao.save(model.getObject()));
deletedProjectClass.detach();
target.addComponent(activeWmc);
target.addComponent(deletedWmc);
info("Level activated");
}
};
item.add(undeleteLink);
}
};
deletedWmc.add(listViewDeleted);
AjaxLink<Void> createLink = new AjaxLink<Void>("createLink"){
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
dialog.replace(new AdminProjectClassPanel("dialogContent"));
target.addComponent(dialog);
dialog.setTitle("Add new...");
dialog.open(target);
}
};
add(createLink);
}
}

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<form wicket:id="projectClassForm">
<!-- Fix max lengths -->
<table>
<tr>
<td>Code: <input wicket:id="code" type="text" maxlength="50" />
</td>
</tr>
<tr>
<td>Name: <input wicket:id="name" type="text" maxlength="50" />
</td>
</tr>
<tr>
<td>Description:</td>
</tr>
<tr>
<td><textarea wicket:id="description" cols="60" rows="5"></textarea>
</td>
</tr>
<tr>
<td><input wicket:id="createButton" type="submit" value="Save" />
</td>
<td><input wicket:id="deleteButton" type="submit"
value="Inactivate" />
</td>
</tr>
</table>
</form>
</wicket:panel>
</body>
</html>

@ -0,0 +1,98 @@
package se.su.dsv.scipro.admin.panels;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.admin.pages.settings.AdminProjectClassSettingsPage;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
public class AdminProjectClassPanel extends Panel {
@SpringBean
ProjectClassDao projectClassDao;
private static final long serialVersionUID = 1L;
public AdminProjectClassPanel(final String id) {
super(id);
Model<ProjectClass> model = new Model<ProjectClass>(new ProjectClass());
add(new ProjectClassSettingsForm("projectClassForm", model, false));
}
public AdminProjectClassPanel(String id, IModel<ProjectClass> model) {
super(id);
add(new ProjectClassSettingsForm("projectClassForm", model, true));
}
private class ProjectClassSettingsForm extends Form<Void>{
private static final long serialVersionUID = 1L;
IModel<ProjectClass> projectClassModel;
public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model, final boolean editMode) {
super(id);
final PageParameters pp = new PageParameters();
setRedirect(true);
projectClassModel = model;
add(new TextField<ProjectClass>("code", new PropertyModel<ProjectClass>(projectClassModel, "code")));
add(new TextField<ProjectClass>("name", new PropertyModel<ProjectClass>(projectClassModel, "name")));
add(new TextArea<ProjectClass>("description", new PropertyModel<ProjectClass>(projectClassModel, "description")));
Button createButton = new Button("createButton"){
private static final long serialVersionUID = 1L;
@Override
public void onSubmit(){
if (editMode) {
pp.add("info", "Level edited");
ProjectClass pc = projectClassDao.save(projectClassModel.getObject());
projectClassModel.setObject(pc);
setResponsePage(AdminProjectClassSettingsPage.class, pp);
} else {
ProjectClass duplicateCheck = projectClassDao.getProjectClass(projectClassModel.getObject().getCode());
if (duplicateCheck != null){
String msg = "Level already exists";
pp.add("error", msg);
setResponsePage(AdminProjectClassSettingsPage.class, pp);
return;
}
ProjectClass pc = projectClassDao.save(projectClassModel.getObject());
projectClassModel.setObject(pc);
pp.add("info", "New level created");
setResponsePage(AdminProjectClassSettingsPage.class, pp);
}
}
};
add(createButton);
Button deleteButton = new Button("deleteButton"){
private static final long serialVersionUID = 1L;
@Override
public void onSubmit(){
projectClassModel.getObject().setDeleted(true);
projectClassDao.save(projectClassModel.getObject());
pp.add("info", "Level inactivated");
setResponsePage(AdminProjectClassSettingsPage.class, pp);
}
};
add(deleteButton);
deleteButton.setEnabled(editMode);
}
}
}

@ -1,9 +1,13 @@
package se.su.dsv.scipro.data.dao.interfaces;
import java.util.List;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
public interface ProjectClassDao extends Dao<ProjectClass>{
ProjectClass getProjectClass(String projectCode);
ProjectClass getProjectClass(String projectCode);
List<ProjectClass> findAllDeleted();
}

@ -1,9 +1,13 @@
package se.su.dsv.scipro.data.dao.jpa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import org.hibernate.ejb.QueryHints;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@ -38,6 +42,16 @@ public class ProjectClassDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<ProjectCl
});
}
@Transactional( readOnly=true )
public List<ProjectClass> findAllDeleted() {
return getJpaTemplate().execute(new JpaCallback<List<ProjectClass>>() {
public List<ProjectClass> doInJpa(EntityManager em) throws PersistenceException {
TypedQuery<ProjectClass> query = em.createQuery("SELECT x FROM ProjectClass x WHERE x.deleted = 1", ProjectClass.class);
return query.getResultList();
}
});
}
@Override
@Transactional
public ProjectClass save(ProjectClass projectClass){

@ -9,7 +9,6 @@ import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.OneToOne;
import javax.persistence.PostLoad;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@ -67,7 +67,7 @@ public class ProjectEvent extends Event {
@Override
protected void onFormSubmit(AjaxRequestTarget target) {
System.out.println("On form submitt in event class");
//System.out.println("On form submitt in event class");
callback.doCallback(target);
}

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<p></p>
<span class="event-title" wicket:id="eventTitle">Event title here</span>
<div>
<img wicket:id="eventDeleteIcon" class="right" />
<img wicket:id="eventEditIcon" class="right" />
<div>
<div wicket:id="showDetailsIcon" class="left"></div>
<span wicket:id="eventDueDate" class="span-2 left month"></span>
<div>
<a href="#" wicket:id="eventPageLink"><span wicket:id="statusIcon"></span></a>
</div>
</div>
</div>
<p></p>
<div wicket:id="eventDetailsContainer" style="display:none;">
<div wicket:id="eventDetails"></div>
</div>
<!--
<div wicket:id="showDetailsIcon" class="left"></div>
<div wicket:id="month" class="span-1 left month"></div>
<img wicket:id="calendarIcon" class="left">
<div>
<div>
<span wicket:id="eventTitle">Event title here</span>
<img wicket:id="eventDeleteIcon" class="right" />
<img wicket:id="eventEditIcon" class="right" />
<a href="#" class="right" wicket:id="eventPageLink"><img wicket:id="eventPageLinkIcon" /></a>
<span wicket:id="eventDueDate" class ="right"></span>
<div wicket:id="statusIcon"></div>
</div>
</div>
<p></p>
<div wicket:id="eventDetailsContainer" style="display:none;">
<div wicket:id="eventDetails"></div>
</div> -->
</wicket:panel>
</body>
</html>

@ -0,0 +1,186 @@
package se.su.dsv.scipro.project.panels;
import java.util.Date;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.datetime.PatternDateConverter;
import org.apache.wicket.datetime.markup.html.basic.DateLabel;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.core.effects.EffectSpeed;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.EventDao;
import se.su.dsv.scipro.data.dao.interfaces.HandInActivityDao;
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
import se.su.dsv.scipro.data.dao.interfaces.RoleDao;
import se.su.dsv.scipro.data.dataobjects.Event;
import se.su.dsv.scipro.data.dataobjects.HandInActivity;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.icons.AjaxActionIcon;
import se.su.dsv.scipro.icons.ExpandContractActionIcon;
import se.su.dsv.scipro.icons.IconPanel;
import se.su.dsv.scipro.icons.ImageIcon;
import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel;
import se.su.dsv.scipro.util.IAjaxCallback;
import se.su.dsv.scipro.util.JavascriptEventConfirmation;
import se.su.dsv.scipro.util.WiQueryCoreEffectsHelper;
public abstract class EventLayoutPanel extends Panel {
private static final long serialVersionUID = 1L;
@SpringBean
protected EventDao eventDao;
@SpringBean
protected ProjectDao projectDao;
@SpringBean
protected RoleDao roleDao;
@SpringBean
protected HandInActivityDao handInActivityDao;
public EventLayoutPanel(String id, final Event event, final Project project, final boolean isSupervisorView){
super(id);
final User user = SciProSession.get().getUser();
//add(new CalendarIconImage("calendarIcon", event.getDueDate()));
//add(new DateLabel("month", new Model<Date>(event.getDueDate()), new PatternDateConverter("MMM", false)));
add(new DateLabel("eventDueDate", new Model<Date>(event.getDueDate()), new PatternDateConverter("yyyy-MM-dd HH:mm", false)));
add(new Label("eventTitle", event.getTitle()));
final WebMarkupContainer eventDetailsContainer = new WebMarkupContainer("eventDetailsContainer");
eventDetailsContainer.setOutputMarkupId(true);
eventDetailsContainer.add(new EmptyPanel("eventDetails"));
add(eventDetailsContainer);
final ExpandContractActionIcon showDetailsIcon = new ExpandContractActionIcon("showDetailsIcon"){
private static final long serialVersionUID = 1L;
@Override
public void onExpand(AjaxRequestTarget target) {
eventDetailsContainer.replace(new EventScheduleDetailsPanel("eventDetails", event));
target.addComponent(eventDetailsContainer);
target.appendJavascript(WiQueryCoreEffectsHelper.slideDownJs(eventDetailsContainer, EffectSpeed.FAST));
}
@Override
public void onContract(AjaxRequestTarget target) {
target.appendJavascript(WiQueryCoreEffectsHelper.slideUpJs(eventDetailsContainer, EffectSpeed.FAST));
}
};
add(showDetailsIcon);
Link<Void> eventPageLink = new Link<Void>("eventPageLink"){
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
onEventDetailsClick();
}
};
add(eventPageLink);
add(new AjaxActionIcon("eventEditIcon", AjaxActionIcon.ICON_EDIT){
private static final long serialVersionUID = 1L;
@Override
protected void onClick(AjaxRequestTarget target) {
final IAjaxCallback cb = new IAjaxCallback(){
private static final long serialVersionUID = 1L;
@Override
public void doCallback(AjaxRequestTarget onSubmitTarget) {
closeDialogAndRefreshListView(onSubmitTarget);
}
};
replaceAndOpenDialog(target, event.getCreationPanel("containerContent", cb, isSupervisorView));
}
@Override
public boolean isVisible(){
return eventDao.isEditable(event, user);
}
});
add(new AjaxActionIcon("eventDeleteIcon", AjaxActionIcon.ICON_DELETE){
private static final long serialVersionUID = 1L;
@Override
protected void onClick(AjaxRequestTarget target) {
eventDao.lazyDelete(event);
refreshListView(target);
}
@Override
public boolean isVisible(){
return eventDao.isDeletable(event, user);
}
}.add(new JavascriptEventConfirmation("onclick", "Delete " + event.getTitle() + "?")));
/*if(event.isRequireHandIn()){
add(new IconPanel("handInRequiredIcon", ImageIcon.ICON_RED_FLAG){
private static final long serialVersionUID = 1L;
@Override
public String getDisplayString() {
return "Hand in required";
}
});
} else {
add(new EmptyPanel("handInRequiredIcon"));
}*/
String statusIcon = ImageIcon.ICON_EMPTY;
final Model<String> statusMsgModel = new Model<String>("");
//Check the status
if(eventDao.eventIsDone(event, user, project)) {
statusIcon = ImageIcon.ICON_EVENT_DONE;
statusMsgModel.setObject("Event is done");
} else if (event.isRequireHandIn()){
//Ok, event is not done
HandInActivity hia = handInActivityDao.getHandInActivity(event, project);
//if there are hand ins and the event is not done, it must be awaiting feedback
if(hia != null && hia.getHandIns().size() > 0){
statusMsgModel.setObject("Awaiting supervisor feedback");
} else {
statusMsgModel.setObject("No hand in uploaded yet");
}
statusIcon = ImageIcon.ICON_EVENT_ALERT;
} else {
//The event must be upcoming
if(event.getDueDate().getTime() > new Date().getTime()){
statusMsgModel.setObject("Event upcoming");
statusIcon = ImageIcon.ICON_EVENT_UPCOMING;
}
}
eventPageLink.add(new IconPanel("statusIcon", statusIcon){
private static final long serialVersionUID = 1L;
@Override
public String getDisplayString() {
return statusMsgModel.getObject();
}
});
}
public abstract void replaceAndOpenDialog(AjaxRequestTarget target, Panel replacePanel);
public abstract void refreshListView(AjaxRequestTarget target);
public abstract void closeDialogAndRefreshListView(AjaxRequestTarget target);
public abstract void onEventDetailsClick();
}

@ -26,8 +26,6 @@ import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.project.pages.ProjectEventPage;
import se.su.dsv.scipro.project.pages.ProjectScheduleGeneratorPage;
import se.su.dsv.scipro.project.pages.ProjectSchedulePlannerPage;
import se.su.dsv.scipro.schedule.baseevent.panels.EventSchedulePanel;
import se.su.dsv.scipro.util.WiQueryCoreEffectsHelper;
public class UpcomingEventPanel extends Panel{
@ -100,7 +98,7 @@ public class UpcomingEventPanel extends Panel{
@Override
protected void populateItem(ListItem<Event> item) {
final Event e = item.getModelObject();
item.add(new EventSchedulePanel("eventPanel", e, project, false){
item.add(new EventLayoutPanel("eventPanel", e, project, false){
private static final long serialVersionUID = 1L;
@Override

@ -64,8 +64,8 @@
<!-- Use deployment for production, development for development -->
<context-param>
<param-name>configuration</param-name>
<!--param-value>development</param-value-->
<param-value>deployment</param-value>
<param-value>development</param-value>
<!--<param-value>deployment</param-value>-->
</context-param>

@ -1042,4 +1042,14 @@ div.wicket-aa ul li.selected {
background-color: #dedeff;
padding: 0px;
margin:0;
}
}
.month{
font-size: 1em;
font-style: strong;
}
.event-title{
font-size: 1.4em;
font-style: strong;
}