Merge branch 'develop' of ssh://git.dsv.su.se/git/scipro/scipro into develop

* 'develop' of ssh://git.dsv.su.se/git/scipro/scipro:
  Changed project menu to use the multi-row type, small modifications to the service/system menus
  Main menu now uses the TAB type, we might need to create a new type or fix the images used in the tabbed types to make this look decent.
  Allow supervisors to view opposition reports, not only admins
  Fix of several serious bugs in final seminar file handling and
  Removal of unused css file
  removed system out println
  Bugfix
  Removal of old incorrectly added javascript code
  Fix of menu label
  Removed unused stuff
  Refactored main menu to use another base
  And yes, even more cleaning up icons
  More cleaning up icons
  Cleaning up icons
  Added Icons used in Daisy
  Initial UI changes
This commit is contained in:
Fredrik Norberg 2011-08-02 14:25:15 +02:00
commit fefc7492e8
68 changed files with 434 additions and 1014 deletions
src/main
java/se/su/dsv/scipro
webapp

@ -34,7 +34,7 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage {
items.add(new MenuItem("Server Environment", AdminServerEnvironmentSettingsPage.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 general settings", AdminFinalSeminarSettingsPage.class));
items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class)); items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class));
items.add(new MenuItem("Level settings", AdminPeerSettingsPage.class)); items.add(new MenuItem("Peer portal settings", AdminPeerSettingsPage.class));
items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class)); items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class));
return items; return items;

@ -3,15 +3,16 @@
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body> <body>
<wicket:extend> <wicket:extend>
<h3 class="section">Server/Request environment</h3> <h5 class="peer-title">Server/Request environment</h5>
<div style="overflow:auto;height:390px;"> <div>
<ul> <div style="overflow: auto; height: 360px;">
<li wicket:id="requestAttributes"> <ul>
<span wicket:id="name">[name]</span>: <li wicket:id="requestAttributes"><span wicket:id="name">[name]</span>:
<span wicket:id="value">[value]</span> <span wicket:id="value">[value]</span>
</li> </li>
</ul> </ul>
</div>
</div> </div>
</wicket:extend> </wicket:extend>
</body> </body>
</html> </html>

@ -25,10 +25,6 @@
<link href='http://fonts.googleapis.com/css?family=Ubuntu:regular,bold' rel='stylesheet' type='text/css' /> --> <link href='http://fonts.googleapis.com/css?family=Ubuntu:regular,bold' rel='stylesheet' type='text/css' /> -->
<!--<link rel="stylesheet" href="css/scipro.css" media="screen,projection" />--> <!--<link rel="stylesheet" href="css/scipro.css" media="screen,projection" />-->
<!-- <link type="text/css" href="css/smoothness/jquery-ui-1.8.10.custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script> -->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];

@ -0,0 +1,16 @@
package se.su.dsv.scipro.basepanels;
import org.apache.wicket.Page;
import se.su.dsv.scipro.components.AbstractMenuPanel;
public abstract class AbstractBaseMenuPanel extends AbstractMenuPanel {
private static final long serialVersionUID = 3738086567246191811L;
public AbstractBaseMenuPanel(final String id,final Class<? extends Page> menuContainerCommonSuperClass, final Class<? extends Page> containerClass) {
super(id,menuContainerCommonSuperClass,containerClass);
}
@Override
protected MenuType getMenuType() {
return MenuType.TAB;
}
}

@ -1,13 +1,19 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body> <body>
<wicket:panel> <wicket:panel>
<header id="main-header" class="span-24"> <header id="main-header" class="span-24">
<div class="prepend-1 span-5"> <div class="prepend-1 span-5">
<h1 id="logo"><a href="#" wicket:id="homeLink" title="SciPro">SciPro</a></h1> <h1 id="logo">
</div> <a href="#" wicket:id="homeLink" title="SciPro">SciPro</a>
<div wicket:id="mainMenuPanel"></div> </h1>
</header> </div>
</wicket:panel> <div class="prepend-2 span-15 last user-links"
wicket:id="userLinksPanel"></div>
<div wicket:id="mainMenuPanel" class="main-menu prepend-6"></div>
<div wicket:id="serviceMenuPanel" class="service-menu"></div>
</header>
</wicket:panel>
</body> </body>
</html> </html>

@ -1,9 +1,7 @@
package se.su.dsv.scipro.basepanels; package se.su.dsv.scipro.basepanels;
import org.apache.wicket.Page; import org.apache.wicket.Page;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.html.panel.Panel;
import se.su.dsv.scipro.SciProApplication; import se.su.dsv.scipro.SciProApplication;
@ -14,17 +12,13 @@ import se.su.dsv.scipro.SciProApplication;
* *
*/ */
public class HeaderPanel extends Panel { public class HeaderPanel extends Panel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public HeaderPanel(String id, Class<? extends Page> containerClass) { public HeaderPanel(String id, Class<? extends Page> containerClass) {
super(id); super(id);
add(new BookmarkablePageLink<Void>("homeLink", SciProApplication.get().getHomePage())); add(new BookmarkablePageLink<Void>("homeLink", SciProApplication.get().getHomePage()));
add(new MainMenuPanel("mainMenuPanel", containerClass));
MainMenuPanel mainMenuPanel = new MainMenuPanel("mainMenuPanel", containerClass); add(new ServiceMenuPanel("serviceMenuPanel", containerClass));
add(mainMenuPanel); add(new UserLinksPanel("userLinksPanel"));
} }
} }

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<nav id="main-nav">
<div class="span-18 last">
<div class="prepend-2 span-15 last" id="user-links" wicket:id="userLinksPanel"></div>
<div class="span-18 last">
<ul id="nav-list">
<li class="nav-list-item" id="home-menu-item" wicket:id="homeMenuItem"></li>
<li class="nav-list-item" id="messages-menu-item" wicket:id="messagesMenuItem"></li>
<li class="nav-list-item" id="project-menu-item" wicket:id="projectMenuItem"></li>
<li class="nav-list-item" id="supervisor-menu-item" wicket:id="supervisorMenuItem"></li>
<li class="nav-list-item" id="resources-menu-item" wicket:id="resourcesMenuItem"></li>
<li class="nav-list-item" id="admin-menu-item" wicket:id="adminMenuItem"></li>
</ul>
</div>
</div>
</nav>
</wicket:panel>
</body>
</html>

@ -4,123 +4,25 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.wicket.Page; import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.odlabs.wiquery.core.commons.IWiQueryPlugin;
import org.odlabs.wiquery.core.commons.WiQueryResourceManager;
import org.odlabs.wiquery.core.javascript.JsStatement;
import se.su.dsv.scipro.HomePage; import se.su.dsv.scipro.HomePage;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.admin.pages.AdminScheduleTemplatesPage;
import se.su.dsv.scipro.admin.pages.AdminStartPage; import se.su.dsv.scipro.admin.pages.AdminStartPage;
import se.su.dsv.scipro.admin.pages.ProjectManagementPage;
import se.su.dsv.scipro.admin.pages.SystemMaintenancePage;
import se.su.dsv.scipro.basepages.MenuPage;
import se.su.dsv.scipro.basepanels.mainmenu.MainMenuItem;
import se.su.dsv.scipro.basepanels.mainmenu.MenuItem;
import se.su.dsv.scipro.knol.resource.page.ResourcePage;
import se.su.dsv.scipro.message.pages.PrivateMessagesPage;
import se.su.dsv.scipro.peer.pages.PeerReviewTemplatePage;
import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage;
import se.su.dsv.scipro.project.pages.ProjectOppositionPage;
import se.su.dsv.scipro.project.pages.ProjectPartnerPage;
import se.su.dsv.scipro.project.pages.ProjectStartPage; import se.su.dsv.scipro.project.pages.ProjectStartPage;
import se.su.dsv.scipro.project.pages.ProjectChecklistPage;
import se.su.dsv.scipro.security.auth.MetaDataActionStrategy;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage;
import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage; import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage;
import se.su.dsv.scipro.wiquery.mainmenu.MainMenuJavascriptResourceReference;
public class MainMenuPanel extends Panel implements IWiQueryPlugin { public class MainMenuPanel extends AbstractBaseMenuPanel {
private static final long serialVersionUID = 3738086567246191811L; private static final long serialVersionUID = 3738086567246191811L;
public MainMenuPanel(String id, Class<? extends Page> containerClass) { public MainMenuPanel(String id, Class<? extends Page> containerClass) {
super(id); super(id,HomePage.class,containerClass);
add(new MainMenuItem("homeMenuItem", HomePage.MAIN_MENU_LABEL, HomePage.class, containerClass, null));
/*
* Messages
*/
MainMenuItem messagesMenuItem = new MainMenuItem("messagesMenuItem", PrivateMessagesPage.MAIN_MENU_LABEL, PrivateMessagesPage.class, containerClass, null);
MetaDataActionStrategy.authorize(messagesMenuItem, Roles.SYSADMIN); // TODO: Hidden for initial deployment
add(messagesMenuItem);
/*
* Project/Author
*/
List<MenuItem> projectMenuSubItems = new ArrayList<MenuItem>();
projectMenuSubItems.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class));
projectMenuSubItems.add(new MenuItem(ProjectOppositionPage.MAIN_MENU_LABEL, ProjectOppositionPage.class));
projectMenuSubItems.add(new MenuItem(FinalSeminarProjectListPage.MAIN_MENU_LABEL, FinalSeminarProjectListPage.class));
MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems);
add(projectMenuItem);
/*
* Supervisor
*/
List<MenuItem> supervisorMenuSubItems = new ArrayList<MenuItem>();
//supervisorMenuSubItems.add(new MenuItem("Schedule Templates", SupervisorProjectsFinalSeminarPage.class));
supervisorMenuSubItems.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL, SupervisorStartPage.class));
supervisorMenuSubItems.add(new MenuItem(SupervisorProjectsFinalSeminarPage.MAIN_MENU_LABEL, SupervisorProjectsFinalSeminarPage.class));
MainMenuItem supervisorMenuItem = new MainMenuItem("supervisorMenuItem", SupervisorStartPage.MAIN_MENU_LABEL, SupervisorStartPage.class, containerClass, supervisorMenuSubItems);
MetaDataActionStrategy.authorize(supervisorMenuItem, new Roles[]{Roles.EXTERNAL, Roles.EMPLOYEE});
add(supervisorMenuItem);
/*
* Resource
*/
MainMenuItem resourcesMenuItem = new MainMenuItem("resourcesMenuItem", ResourcePage.MAIN_MENU_LABEL, ResourcePage.class, containerClass, null);
MetaDataActionStrategy.authorize(resourcesMenuItem, Roles.SYSADMIN ); // TODO: Hidden for initial deployment
add(resourcesMenuItem);
/*
* Admin
*/
List<MenuItem> adminMenuSubItems = new ArrayList<MenuItem>();
adminMenuSubItems.add(new MenuItem(AdminScheduleTemplatesPage.MAIN_MENU_LABEL, AdminScheduleTemplatesPage.class));
adminMenuSubItems.add(new MenuItem(SystemMaintenancePage.MAIN_MENU_LABEL, SystemMaintenancePage.class));
adminMenuSubItems.add(new MenuItem(ProjectManagementPage.MAIN_MENU_LABEL, ProjectManagementPage.class));
adminMenuSubItems.add(new MenuItem(PeerReviewTemplatePage.MAIN_MENU_LABEL, PeerReviewTemplatePage.class));
MainMenuItem adminMenuItem = new MainMenuItem("adminMenuItem", AdminStartPage.MAIN_MENU_LABEL, AdminStartPage.class, containerClass, adminMenuSubItems);
MetaDataActionStrategy.authorize(adminMenuItem, Roles.ADMIN);
add(adminMenuItem);
UserLinksPanel userLinksPanel = new UserLinksPanel("userLinksPanel");
add(userLinksPanel);
} }
@Override @Override
public void contribute(WiQueryResourceManager wiQueryResourceManager) { protected List<MenuItem> getItemList(){
wiQueryResourceManager.addJavaScriptResource(MainMenuJavascriptResourceReference.get()); List<MenuItem> list = new ArrayList<MenuItem>();
} list.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL,ProjectStartPage.class));
list.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL,SupervisorStartPage.class));
@Override list.add(new MenuItem(AdminStartPage.MAIN_MENU_LABEL,AdminStartPage.class));
public JsStatement statement() { return list;
return null;
}
/**
* @deprecated see {@link se.su.dsv.scipro.basepanels.mainmenu.AbstractMainMenuItem#getMenuLink(String)}
*/
@SuppressWarnings("unused")
private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass){
return getMenuLink(id, targetPageClass, null, containerClass);
} }
/**
* @deprecated see {@link se.su.dsv.scipro.basepanels.mainmenu.AbstractMainMenuItem#getMenuLink(String, PageParameters)}
*/
private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final PageParameters pp, final Class<? extends Page> containerClass){
BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass, pp);
result.setOutputMarkupId(true);
if(targetPageClass == containerClass || (targetPageClass.getSuperclass().isAssignableFrom(containerClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
result.setMarkupId("current");
}
return result;
}
} }

@ -0,0 +1,24 @@
package se.su.dsv.scipro.basepanels;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Page;
import se.su.dsv.scipro.basepages.MenuPage;
import se.su.dsv.scipro.knol.resource.page.ResourcePage;
import se.su.dsv.scipro.message.pages.PrivateMessagesPage;
public class ServiceMenuPanel extends AbstractBaseMenuPanel {
private static final long serialVersionUID = 3738086567246191811L;
public ServiceMenuPanel(String id, Class<? extends Page> containerClass) {
super(id,MenuPage.class,containerClass);
}
@Override
protected List<MenuItem> getItemList(){
List<MenuItem> list = new ArrayList<MenuItem>();
list.add(new MenuItem(ResourcePage.MAIN_MENU_LABEL,ResourcePage.class));
list.add(new MenuItem(PrivateMessagesPage.MAIN_MENU_LABEL,PrivateMessagesPage.class));
return list;
}
}

@ -1,62 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Panel;
import se.su.dsv.scipro.basepages.MenuPage;
/**
* Abstract Class for Main Menu Items
*
* @author patrick
*
*/
public abstract class AbstractMainMenuItem extends Panel {
private static final long serialVersionUID = 2849283400267381932L;
protected Class<? extends Page> targetPageClass;
protected Class<? extends Page> containerPageClass;
private String menuLabel;
protected BookmarkablePageLink<Void> menuItemLink;
public AbstractMainMenuItem(String id, String label, Class<? extends Page> targetPageClass, Class<? extends Page> containerPageClass) {
super(id);
this.menuLabel = label;
this.targetPageClass = targetPageClass;
this.containerPageClass = containerPageClass;
}
public String getMenuLabel() {
return menuLabel;
}
/**
* {@link #getMenuLink(String, PageParameters)}
*/
protected BookmarkablePageLink<Void> getMenuLink(String id) {
return getMenuLink(id, null);
}
/**
* Creates a bookmarkable page link for the main menu.
*
* @param id
* @param pp
* @return
* @author Martin Peters
*/
protected BookmarkablePageLink<Void> getMenuLink(String id, final PageParameters pp) {
BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass, pp);
result.setOutputMarkupId(true);
if(targetPageClass == containerPageClass || (targetPageClass.getSuperclass().isAssignableFrom(containerPageClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
//TODO Should prefereably be replaced with the line below because repeating id's aren't valid html. I couldn't get the CSS to work though //mpeters
result.setMarkupId("current");
//result.add(new AttributeAppender("class", new Model<String>("current"), " "));
}
return result;
}
}

@ -1,12 +0,0 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<span class="menu-item">
<a wicket:id="mainMenuItemLink"><span wicket:id="mainMenuItemLabel"></span></a>
<img class="nav-arrow" wicket:id="mainMenuItemArrow" />
</span>
<div class="submenu rounded-bl rounded-br"><span wicket:id="mainMenuListItemSubMenu"><span wicket:id="subMenuItem"></span></span></div>
</wicket:panel>
</body>
</html>

@ -1,79 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import java.util.List;
import org.apache.wicket.Page;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.ContextImage;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
/**
* Main Menu Item, the upper level of the main menu hierarchy.
*
* @author patrick
*
*/
public class MainMenuItem extends AbstractMainMenuItem {
private static final long serialVersionUID = 6103131868992599100L;
@SuppressWarnings("unused")
private List<MenuItem> subItems;
public MainMenuItem(String id, String label, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass, final List<MenuItem> subItems) {
super(id, label, targetPageClass, containerClass);
this.subItems = subItems;
if (subItems != null)
this.add(new AttributeAppender("class", true, new Model<String>("parent"), " "));
menuItemLink = getMenuLink("mainMenuItemLink");
menuItemLink.add(new Label("mainMenuItemLabel", getMenuLabel()));
add(menuItemLink);
ContextImage mainMenuItemArrow = new ContextImage("mainMenuItemArrow", "images/site_nav_arrow2.png") {
private static final long serialVersionUID = 1793336840409311960L;
/* (non-Javadoc)
* @see org.apache.wicket.Component#isVisible()
*/
@Override
public boolean isVisible() {
return subItems != null;
}
};
mainMenuItemArrow.setOutputMarkupPlaceholderTag(true);
add(mainMenuItemArrow);
ListView<MenuItem> subItemListView = new ListView<MenuItem>("mainMenuListItemSubMenu", subItems) {
private static final long serialVersionUID = -1444218885819118389L;
@Override
protected void populateItem(ListItem<MenuItem> item) {
MenuItem obj = item.getModelObject();
item.add(obj.createSubItem("subMenuItem", containerClass));
add(item);
}
/* (non-Javadoc)
* @see org.apache.wicket.Component#isVisible()
*/
@Override
public boolean isVisible() {
return subItems != null;
}
};
subItemListView.setOutputMarkupPlaceholderTag(true);
add(subItemListView);
}
}

@ -1,8 +0,0 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<a href="#" wicket:id="mainMenuSubItemLink"><span wicket:id="mainMenuSubItemLabel">[Link]</span></a>
</wicket:panel>
</body>
</html>

@ -1,27 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.basic.Label;
/**
* Main Menu Sub Items
*
* @author patrick
*
*/
public class MainMenuSubItem extends AbstractMainMenuItem {
private static final long serialVersionUID = 8903203088965767242L;
public MainMenuSubItem(String id, String label, Class<? extends Page> targetPageClass,
Class<? extends Page> containerPageClass) {
super(id, label, targetPageClass, containerPageClass);
menuItemLink = getMenuLink("mainMenuSubItemLink");
menuItemLink.add(new Label("mainMenuSubItemLabel", getMenuLabel()));
add(menuItemLink);
}
}

@ -1,47 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import java.util.List;
import org.apache.wicket.IClusterable;
import org.apache.wicket.Page;
/**
* Helper Class for preparing the creation of main menu items
* @author patrick
*
*/
public class MenuItem implements IClusterable {
private static final long serialVersionUID = -5341715569517881163L;
private String menuLabel;
private Class<? extends Page> targetPageClass;
public MenuItem(String menuLabel, Class<? extends Page> targetPageClass) {
this.menuLabel = menuLabel;
this.targetPageClass = targetPageClass;
}
/**
* Creates a Main Menu Sub Item
*
* @param id
* @param containerPageClass
* @return
*/
public MainMenuSubItem createSubItem(String id, Class<? extends Page> containerPageClass) {
return new MainMenuSubItem(id, menuLabel, targetPageClass, containerPageClass);
}
/**
* Creates a Main Menu Item
*
* @param id
* @param containerPageClass
* @param subItems
* @return
*/
public MainMenuItem createMenuItem(String id, Class<? extends Page> containerPageClass, List<MenuItem> subItems) {
return new MainMenuItem(id, menuLabel, targetPageClass, containerPageClass, subItems);
}
}

@ -18,6 +18,11 @@ import org.apache.wicket.model.Model;
import se.su.dsv.scipro.icons.ImageIcon; import se.su.dsv.scipro.icons.ImageIcon;
/**
* ABC-class for menu's of different types.
* Subclasses should implement their own data feed mechanics via <code>getItemList</code> and provide a menu type via <code>getMenuType</code>
* The returned menu-type is used to provide CSS-class mappings for the menu structure, see the MenuType enum for alternatives.
*/
public abstract class AbstractMenuPanel extends Panel { public abstract class AbstractMenuPanel extends Panel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -33,6 +38,9 @@ public abstract class AbstractMenuPanel extends Panel {
} }
}; };
/**
* Enumeration of supported menu types.
*/
public enum MenuType { public enum MenuType {
NONE, NONE,
TAB, TAB,
@ -41,7 +49,12 @@ public abstract class AbstractMenuPanel extends Panel {
VERTICAL VERTICAL
} }
/**
* Superclass constructor, arguments
* @param id Wicket identifier for the component
* @param menuContainerCommonSuperClass [Needs documentation]
* @param containerClass [Needs documentation]
*/
public AbstractMenuPanel(final String id, final Class<? extends Page> menuContainerCommonSuperClass,final Class<? extends Page> containerClass) { public AbstractMenuPanel(final String id, final Class<? extends Page> menuContainerCommonSuperClass,final Class<? extends Page> containerClass) {
super(id); super(id);
@ -104,7 +117,10 @@ public abstract class AbstractMenuPanel extends Panel {
* @return * @return
*/ */
protected abstract List<MenuItem> getItemList(); protected abstract List<MenuItem> getItemList();
/**
* Implement in subclass to return the wanted MenuType.
* @return
*/
protected abstract MenuType getMenuType(); protected abstract MenuType getMenuType();
/** /**

@ -92,10 +92,8 @@ public class ConferencePanel extends Panel {
webMarkupContainer.setOutputMarkupId(true); webMarkupContainer.setOutputMarkupId(true);
webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView)); webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView));
add(webMarkupContainer); add(webMarkupContainer);
if (boardMessageModel != null) { if (boardMessageModel != null) {
int index = boardMessageDao.getBoardMessageSortOrderIndex(boardMessageModel.getObject()); int index = boardMessageDao.getBoardMessageSortOrderIndex(boardMessageModel.getObject());
System.out.println(index);
dataView.setCurrentPage(index/BOARDMESSAGESPERPAGE); dataView.setCurrentPage(index/BOARDMESSAGESPERPAGE);
} }
} }

@ -6,11 +6,10 @@ import org.apache.wicket.markup.html.form.upload.FileUpload;
import se.su.dsv.scipro.data.dataobjects.FinalSeminar; import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.repository.util.FileStorageException;
public interface FinalSeminarUploadController extends IClusterable { public interface FinalSeminarUploadController extends IClusterable {
void deleteSeminarFilesRecursive(FinalSeminar seminar);
void deleteOpponentFiles(FinalSeminarOpposition opp); void deleteOpponentFiles(FinalSeminarOpposition opp);
/** /**
@ -20,6 +19,15 @@ public interface FinalSeminarUploadController extends IClusterable {
* @throws Exception * @throws Exception
*/ */
FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception; FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception;
/**
* Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown
* @param seminar
* @param adminOverrideMode
* @return
* @throws Exception
*/
FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception;
void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception; void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception;

@ -78,17 +78,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
} }
private void delete(String path) { private void delete(String path) {
fileRepository.delete(path); fileRepository.delete(path);
} }
public void deleteSeminarFilesRecursive(final FinalSeminar seminar) throws FileStorageException {
if (seminar.getDocument() != null) {
//delete(getRepositorySeminarPath(seminar)); Use of deprecated path/method
delete(seminar.getDocument().getPath());
}
}
public void deleteOpponentFiles(final FinalSeminarOpposition opp) throws FileStorageException { public void deleteOpponentFiles(final FinalSeminarOpposition opp) throws FileStorageException {
if (opp.getOpponentReport() != null) { if (opp.getOpponentReport() != null) {
//delete(getRepositoryOppositionPath(opp)); Use of deprecated path/method //delete(getRepositoryOppositionPath(opp)); Use of deprecated path/method
@ -103,18 +95,31 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
* @return * @return
* @throws Exception * @throws Exception
*/ */
public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception { public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception{
return deleteSeminarReport(seminar, false);
}
/**
* Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown
* @param seminar
* @param adminOverrideMode
* @return
* @throws Exception
*/
public FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception {
seminar = finalSeminarDao.reLoad(seminar); seminar = finalSeminarDao.reLoad(seminar);
if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) { if( !adminOverrideMode ){
throw new Exception( if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) {
"Cannot delete seminar report, seminar has opponents or active participants"); throw new Exception(
"Cannot delete seminar report, seminar has opponents or active participants");
}
} }
for (CheckPlagiarismEvent cpe : checkPlagiarismEventDao.getWithFileDescription(seminar for (CheckPlagiarismEvent cpe : checkPlagiarismEventDao.getWithFileDescription(seminar
.getDocument())) { .getDocument())) {
checkPlagiarismEventDao.delete(cpe); checkPlagiarismEventDao.delete(cpe);
} }
if(seminar.getDocument() != null)
fileRepository.delete(seminar.getDocument().getPath()); if(seminar.getDocument().getPath() != null)
fileRepository.delete(seminar.getDocument().getPath());
seminar.setDocument(null); seminar.setDocument(null);
return finalSeminarDao.save(seminar); return finalSeminarDao.save(seminar);
} }

@ -2,78 +2,73 @@
<html <html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body> <body>
<wicket:panel> <wicket:panel>
<div wicket:id="titleContainer"> <div wicket:id="feedback"></div>
<strong>Project Title: </strong> <span wicket:id="projectTitle"></span> <div wicket:id="titleContainer"><strong>Project Title: </strong>
<div> <span wicket:id="projectTitle"></span>
<strong>Room: </strong> <span wicket:id="room"></span> <div><strong>Room: </strong> <span wicket:id="room"></span></div>
</div> </div>
</div> <div class="append-bottom">
<div class="append-bottom"> <div><strong>Head supervisor:</strong></div>
<div> <span wicket:id="headSupervisor"></span></div>
<strong>Head supervisor:</strong> <div><strong>Author(s): </strong>
</div> <ul class="no-list-style">
<span wicket:id="headSupervisor"></span> <li wicket:id="authorsList"><span wicket:id="author"></span></li>
</div> </ul>
<div> </div>
<strong>Author(s): </strong>
<ul class="no-list-style">
<li wicket:id="authorsList"><span wicket:id="author"></span></li>
</ul>
</div>
<div> <div><strong>Co-supervisor(s): </strong>
<strong>Co-supervisor(s): </strong> <ul class="no-list-style">
<ul class="no-list-style"> <li wicket:id="coSupervisorsList"><span wicket:id="coSupervisor"></span></li>
<li wicket:id="coSupervisorsList"><span </ul>
wicket:id="coSupervisor"></span></li> </div>
</ul>
</div>
<div> <div><strong>Reviewer(s): </strong>
<strong>Reviewer(s): </strong> <ul class="no-list-style">
<ul class="no-list-style"> <li wicket:id="reviewersList"><span wicket:id="reviewer"></span>
<li wicket:id="reviewersList"><span wicket:id="reviewer"></span> </li>
</li> </ul>
</ul> </div>
</div>
<div wicket:id="detailsContainer"> <div wicket:id="detailsContainer">
<div> <div><strong>Opponent(s): </strong>
<strong>Opponent(s): </strong> <ul class="no-list-style">
<ul class="no-list-style"> <li wicket:id="opponentsList"><span wicket:id="opponent"></span>
<li wicket:id="opponentsList"><span wicket:id="opponent"></span> <div wicket:id="oppositionContainer"><strong>Report:</strong> <span wicket:id="oppositionReportTitle"></span> <a href="#"
</li> wicket:id="open"><img
</ul> src="images/icons/document-preview_16x16.png" alt="Open/Preview" />
</div> </a> <a href="#" wicket:id="download"><img
src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#"
<div> wicket:id="deleteOppositionReport"><img
<strong>Active participant(s): </strong> src="images/icons/delete_16x16.png" alt="delete" /> </a>
<ul class="no-list-style">
<li wicket:id="activeParticipantsList"><span
wicket:id="activeParticipant"></span></li>
</ul>
</div>
<div>
<strong>Presentation Language: </strong>
<div wicket:id="seminarLanguage"></div>
</div>
<div>
<strong>Thesis/Report Language: </strong>
<div wicket:id="thesisLanguage"></div>
</div>
<strong>Thesis/Report: </strong>
<div>
<span wicket:id="seminarReportTitle"></span> <span
wicket:id="uploadInfoContainer"> <a href="#"
wicket:id="open"><img
src="images/icons/document-preview_16x16.png" alt="Open/Preview" />
</a> <a href="#" wicket:id="download"><img
src="images/icons/download_16x16.png" alt="Download" /> </a> </span>
</div>
</div> </div>
</wicket:panel> </li>
</ul>
</div>
<div><strong>Active participant(s): </strong>
<ul class="no-list-style">
<li wicket:id="activeParticipantsList"><span
wicket:id="activeParticipant"></span></li>
</ul>
</div>
<div><strong>Presentation Language: </strong>
<div wicket:id="seminarLanguage"></div>
</div>
<div><strong>Thesis/Report Language: </strong>
<div wicket:id="thesisLanguage"></div>
</div>
<strong>Thesis/Report: </strong>
<div><span wicket:id="seminarReportTitle"></span> <span
wicket:id="uploadInfoContainer"> <a href="#" wicket:id="open"><img
src="images/icons/document-preview_16x16.png" alt="Open/Preview" /> </a>
<a href="#" wicket:id="download"><img
src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#"
wicket:id="deleteSeminarReport"><img
src="images/icons/delete_16x16.png" alt="delete" /> </a> </span></div>
</div>
</wicket:panel>
</body> </body>
</html> </html>

@ -3,16 +3,21 @@ package se.su.dsv.scipro.opponent.panels;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
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.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model; import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController;
import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao;
import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarOppositionDao;
import se.su.dsv.scipro.data.dataobjects.FinalSeminar; import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation; import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation;
import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
@ -23,6 +28,9 @@ import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles; import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles;
import se.su.dsv.scipro.repository.components.FileDownloadLink; import se.su.dsv.scipro.repository.components.FileDownloadLink;
import se.su.dsv.scipro.repository.components.FileOpenLink; import se.su.dsv.scipro.repository.components.FileOpenLink;
import se.su.dsv.scipro.security.auth.MetaDataActionStrategy;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.util.JavascriptEventConfirmation;
public class FinalSeminarDetailsPanel extends Panel { public class FinalSeminarDetailsPanel extends Panel {
@ -30,11 +38,15 @@ public class FinalSeminarDetailsPanel extends Panel {
@SpringBean @SpringBean
private FinalSeminarDao finalSeminarDao; private FinalSeminarDao finalSeminarDao;
@SpringBean
private FinalSeminarOppositionDao finalSeminarOppositionDao;
@SpringBean
private FinalSeminarUploadController finalSeminarUploadController;
public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2, public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2, final boolean details) {
final boolean details) {
super(id); super(id);
this.setOutputMarkupId(true);
add(new FeedbackPanel("feedback"));
final FinalSeminar seminar = finalSeminarDao.reLoad(seminar2); final FinalSeminar seminar = finalSeminarDao.reLoad(seminar2);
final Project project = seminar.getProject(); final Project project = seminar.getProject();
WebMarkupContainer titleContainer = new WebMarkupContainer("titleContainer") { WebMarkupContainer titleContainer = new WebMarkupContainer("titleContainer") {
@ -53,8 +65,7 @@ public class FinalSeminarDetailsPanel extends Panel {
}); });
titleContainer.add(new Label("room", seminar.getRoom())); titleContainer.add(new Label("room", seminar.getRoom()));
add(titleContainer); add(titleContainer);
add(new ListView<Student>("authorsList", new ArrayList<Student>( add(new ListView<Student>("authorsList", new ArrayList<Student>(project.getProjectParticipants())) {
project.getProjectParticipants())) {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
@ -111,41 +122,77 @@ public class FinalSeminarDetailsPanel extends Panel {
}; };
detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar.getOppositions()) {
.getOppositions()) {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
protected void populateItem(ListItem<FinalSeminarOpposition> item) { protected void populateItem(final ListItem<FinalSeminarOpposition> item) {
item.add(item.getModelObject().getOpponent().getUser() item.add(item.getModelObject().getOpponent().getUser().getDisplayComponent("opponent", true));
.getDisplayComponent("opponent", true)); WebMarkupContainer oppCon = new WebMarkupContainer("oppositionContainer"){
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible(){
return item.getModelObject().getOpponentReport() != null;
}
};
//Students are not allowed to view other students opposition reports
MetaDataActionStrategy.authorize(oppCon, Roles.EMPLOYEE);
item.add(oppCon);
String reportTitle = "";
if(item.getModelObject().getOpponentReport() != null)
reportTitle = item.getModelObject().getOpponentReport().getName();
oppCon.add(new Label("oppositionReportTitle", reportTitle));
oppCon.add(new FileDownloadLink("download", item.getModelObject().getOpponentReport()));
oppCon.add(new FileOpenLink("open", item.getModelObject().getOpponentReport()));
oppCon.add(new AjaxLink<Void>("deleteOppositionReport"){
private static final long serialVersionUID = 1L;
{
MetaDataActionStrategy.authorize(this, Roles.ADMIN);
this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?"));
}
@Override
public void onClick(AjaxRequestTarget target) {
try{
finalSeminarUploadController.deleteOpponentFiles(item.getModelObject());
FinalSeminarOpposition opp = item.getModelObject();
opp.setOpponentReport(null);
opp = finalSeminarOppositionDao.save(opp);
item.setModelObject(opp);
info("Opposition report deleted");
} catch(Exception e){
e.printStackTrace();
error("Something went wrong, see log files for stacktrace");
}
target.addComponent(FinalSeminarDetailsPanel.this);
}
});
add(item); add(item);
} }
}); });
detailsContainer.add(new ListView<FinalSeminarActiveParticipation>( detailsContainer.add(new ListView<FinalSeminarActiveParticipation>("activeParticipantsList", seminar.getActiveParticipations()) {
"activeParticipantsList", seminar.getActiveParticipations()) {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
protected void populateItem(ListItem<FinalSeminarActiveParticipation> item) { protected void populateItem(ListItem<FinalSeminarActiveParticipation> item) {
item.add(item.getModelObject().getUser() item.add(item.getModelObject().getUser().getDisplayComponent("activeParticipant", true));
.getDisplayComponent("activeParticipant", true));
add(item); add(item);
} }
}); });
detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage() detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage().toString()));
.toString()));
detailsContainer.add(new Label("thesisLanguage", seminar.getReportLanguage().toString())); detailsContainer.add(new Label("thesisLanguage", seminar.getReportLanguage().toString()));
detailsContainer.add(new Label("seminarReportTitle", new Model<String>() { detailsContainer.add(new Label("seminarReportTitle", new Model<String>() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
public String getObject() { public String getObject() {
return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar.getDocument().getName();
.getDocument().getName();
} }
})); }));
@ -161,6 +208,27 @@ public class FinalSeminarDetailsPanel extends Panel {
uploadInfoContainer.add(new FileDownloadLink("download", seminar.getDocument())); uploadInfoContainer.add(new FileDownloadLink("download", seminar.getDocument()));
uploadInfoContainer.add(new FileOpenLink("open", seminar.getDocument())); uploadInfoContainer.add(new FileOpenLink("open", seminar.getDocument()));
uploadInfoContainer.add(new AjaxLink<Void>("deleteSeminarReport") {
private static final long serialVersionUID = 1L;
{
MetaDataActionStrategy.authorize(this, Roles.ADMIN);
this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?"));
}
@Override
public void onClick(AjaxRequestTarget target) {
try {
finalSeminarUploadController.deleteSeminarReport(seminar, true);
seminar.setDocument(null); //Only to repaint the ajax call without the document icons
info("Report deleted");
} catch (Exception e) {
e.printStackTrace();
error("Deletion failed");
}
target.addComponent(FinalSeminarDetailsPanel.this);
}
});
detailsContainer.add(uploadInfoContainer); detailsContainer.add(uploadInfoContainer);
add(detailsContainer); add(detailsContainer);

@ -5,6 +5,7 @@
<wicket:panel> <wicket:panel>
<div class="span-22 prepend-top last"> <div class="span-22 prepend-top last">
<div wicket:id="feedback"></div>
<table class="rounded-table seminar-table even-rows"> <table class="rounded-table seminar-table even-rows">
<tr> <tr>
<th>Date</th> <th>Date</th>

@ -47,8 +47,8 @@ import se.su.dsv.scipro.opponent.models.OpponentModel;
public class OpponentListViewPanel extends Panel { public class OpponentListViewPanel extends Panel {
/** /**
* *
*/ */
private static final long serialVersionUID = 4988253889884804250L; private static final long serialVersionUID = 4988253889884804250L;
@SpringBean @SpringBean
@ -76,6 +76,10 @@ public class OpponentListViewPanel extends Panel {
super(id); super(id);
this.adminView = adminView; this.adminView = adminView;
loadListView(seminarList); loadListView(seminarList);
feedbackPanel = new FeedbackPanel("feedback");
add(feedbackPanel);
this.setOutputMarkupId(true);
editSeminarDialogContainer = new WebMarkupContainer("dialogContainer"); editSeminarDialogContainer = new WebMarkupContainer("dialogContainer");
editSeminarDialog = new Dialog("dialog"); editSeminarDialog = new Dialog("dialog");
editSeminarDialog.setModal(true); editSeminarDialog.setModal(true);
@ -96,7 +100,7 @@ public class OpponentListViewPanel extends Panel {
add(contactsSeminarDialog); add(contactsSeminarDialog);
contactsDialogContainer.setOutputMarkupId(true); contactsDialogContainer.setOutputMarkupId(true);
contactsDialogContainer.add(contactsSeminarForm = new ContactsSeminarForm( contactsDialogContainer.add(contactsSeminarForm = new ContactsSeminarForm(
"contactsSeminarForm")); "contactsSeminarForm"));
contactsSeminarForm.setOutputMarkupId(true); contactsSeminarForm.setOutputMarkupId(true);
add(linkListView); add(linkListView);
@ -125,7 +129,7 @@ public class OpponentListViewPanel extends Panel {
User headSupervisor = seminar.getProject().getHeadSupervisor().getUser(); User headSupervisor = seminar.getProject().getHeadSupervisor().getUser();
headSupervisorString += headSupervisor.getFirstName() + " " headSupervisorString += headSupervisor.getFirstName() + " "
+ headSupervisor.getLastName(); + headSupervisor.getLastName();
item.add(new Label("headSupervisor", headSupervisorString)); item.add(new Label("headSupervisor", headSupervisorString));
item.add(new Label("projectClass", seminar.getProject().getProjectClass().getName())); item.add(new Label("projectClass", seminar.getProject().getProjectClass().getName()));
@ -191,20 +195,25 @@ public class OpponentListViewPanel extends Panel {
@Override @Override
public void onClick(AjaxRequestTarget target) { public void onClick(AjaxRequestTarget target) {
FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar); FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar);
seminarUploadController.deleteSeminarFilesRecursive(seminar2); try{
for (FinalSeminarActiveParticipation al : seminar2 seminarUploadController.deleteSeminarReport(seminar2, true);
.getActiveParticipations()) { for (FinalSeminarActiveParticipation al : seminar2
finalSeminarActiveParticipationDao.delete(al); .getActiveParticipations()) {
} finalSeminarActiveParticipationDao.delete(al);
}
for (FinalSeminarOpposition fso : seminar2 for (FinalSeminarOpposition fso : seminar2
.getOppositions()) { .getOppositions()) {
seminarUploadController.deleteOpponentFiles(fso); seminarUploadController.deleteOpponentFiles(fso);
finalSeminarOppositionDao.delete(fso); finalSeminarOppositionDao.delete(fso);
}
finalSeminarDao.delete(seminar2);
info("Final seminar deleted");
} catch (Exception e){
error("Something went wrong, see logs for stacktrace");
e.printStackTrace();
} }
finalSeminarDao.delete(seminar2); target.addComponent(OpponentListViewPanel.this);
setResponsePage(AdminFinalSeminarPage.class);
} }
@Override @Override
@ -227,7 +236,7 @@ public class OpponentListViewPanel extends Panel {
@Override @Override
public CharSequence decorateScript(CharSequence script) { public CharSequence decorateScript(CharSequence script) {
String ret = "if(!confirm('The attendees of this seminar will NOT be notified that the seminar has been deleted, are you sure you wish to delete it?')) return false; " String ret = "if(!confirm('The attendees of this seminar will NOT be notified that the seminar has been deleted, are you sure you wish to delete it?')) return false; "
+ script; + script;
return ret; return ret;
} }
}; };
@ -243,8 +252,8 @@ public class OpponentListViewPanel extends Panel {
private class EditSeminarForm extends Form<OpponentModel> { private class EditSeminarForm extends Form<OpponentModel> {
/** /**
* *
*/ */
private static final long serialVersionUID = -5004827722926732419L; private static final long serialVersionUID = -5004827722926732419L;
public EditSeminarForm(String name) { public EditSeminarForm(String name) {
@ -257,8 +266,8 @@ public class OpponentListViewPanel extends Panel {
private class EditForm extends Form<Void> { private class EditForm extends Form<Void> {
/** /**
* *
*/ */
private static final long serialVersionUID = 5882957818616996808L; private static final long serialVersionUID = 5882957818616996808L;
public EditForm(String name, final FinalSeminar seminar) { public EditForm(String name, final FinalSeminar seminar) {
@ -290,8 +299,8 @@ public class OpponentListViewPanel extends Panel {
private class ContactsSeminarForm extends Form<OpponentModel> { private class ContactsSeminarForm extends Form<OpponentModel> {
/** /**
* *
*/ */
private static final long serialVersionUID = -5004827722926732419L; private static final long serialVersionUID = -5004827722926732419L;
public ContactsSeminarForm(String name) { public ContactsSeminarForm(String name) {
@ -306,8 +315,8 @@ public class OpponentListViewPanel extends Panel {
private class ContactsForm extends Form<Void> { private class ContactsForm extends Form<Void> {
/** /**
* *
*/ */
private static final long serialVersionUID = -8271761600388217566L; private static final long serialVersionUID = -8271761600388217566L;
public ContactsForm(String name, final FinalSeminar seminar) { public ContactsForm(String name, final FinalSeminar seminar) {
@ -316,8 +325,8 @@ public class OpponentListViewPanel extends Panel {
add(new AjaxButton("contacts", new Model<String>("Details")) { add(new AjaxButton("contacts", new Model<String>("Details")) {
/** /**
* *
*/ */
private static final long serialVersionUID = 1211337464815824507L; private static final long serialVersionUID = 1211337464815824507L;
@Override @Override

@ -221,7 +221,7 @@ public class ProjectFinalSeminarPanel extends Panel {
public boolean isVisible() { public boolean isVisible() {
return !isSupervisorView && seminar.getActiveParticipations().isEmpty() return !isSupervisorView && seminar.getActiveParticipations().isEmpty()
&& seminar.getOppositions().isEmpty() && seminar.getTurnitinId() != null; && seminar.getOppositions().isEmpty() && seminar.getTurnitinId() == null;
} }
@Override @Override

@ -1,86 +1,102 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body> <body>
<wicket:extend> <wicket:extend>
<div class="span-22"> <div class="span-22">
<div wicket:id="feedbackPanel"></div> <div wicket:id="feedbackPanel"></div>
<form wicket:id="requestForm" class="wizard-form"> <form wicket:id="requestForm" class="wizard-form">
<div class="span-22 last"> <div class="span-22">
<div class="span-11 colborder"> <div>
<div> <h5 class="peer-title">Step 1 - Read instructions</h5>
<fieldset> <ul>
<legend>Step 1 - Read instructions</legend> <li>Providing a review template is of great help for the
<p>The instructions are located in the box to the right</p> reviewer, browse available templates and try to find an
</fieldset> appropriate one!</li>
<fieldset> <li>If you cannot find an suitable review template, make
<legend wicket:id="fileUploadLabel">[Step 2 - Attach a file]</legend> sure to use the review guideline/comment to point out what you'd
<input wicket:id="fileUpload" type="file" /> like feedback on.</li>
</fieldset> <li>If a review template covers too much, make sure to point
<fieldset> out questions that you don't feel like they apply</li>
<legend>Step 3 - Write review guideline/comment (optional)</legend> <li>If you're missing relevant questions in the review
<textarea wicket:id="comment"></textarea> template, make sure to mention them in the comment.</li>
</fieldset> <li>If you have several files you'd like to attach, compress
</div> them to an archived file (ie. zip-file).</li>
</div> <li>Remember that the more guidelines (review template,
<div class="span-8 last info-box rounded-box"> questions you'd like answered etc.) you provide the reviewer,
<ul> the greater the chance of a useful review!</li>
<li><p>Providing a review template is of great help for the reviewer, browse available templates and try to find an appropriate one!</p></li> </ul>
<li><p>If you cannot find an suitable review template, make sure to use the review guideline/comment to point out what you'd like feedback on.</p></li> </div>
<li><p>If a review template covers too much, make sure to point out questions that you don't feel like they apply</p></li> <div class="span-22 forcedPaddingBottom">
<li><p>If you're missing relevant questions in the review template, make sure to mention them in the comment.</p></li> <div class="span-11 first">
<li><p>If you have several files you'd like to attach, compress them to an archived file (ie. zip-file).</p></li> <h5 class="peer-title" wicket:id="fileUploadLabel">[Step 2 -
<li><p><strong>Remember that the more guidelines (review template, questions you'd like answered etc.) you provide the reviewer, the greater the chance of a useful review!</strong></p></li> Attach a file]</h5>
</ul> <input wicket:id="fileUpload" type="file" style="margin-top:2em;"/>
</div>
<div class="span-11 last">
<h5 class="peer-title">Step 3 - Write review
guideline/comment (optional)</h5>
<textarea wicket:id="comment"></textarea>
</div>
</div>
</div> </div>
</div> <div class="span-22">
<div class="span-22 last"> <h5 class="peer-title">Step 4 - Select a suitable review
<fieldset> template (optional)</h5>
<legend>Step 4 - Select a suitable review template (optional)</legend> <div wicket:id="listContainer">
<div wicket:id="listContainer"> <table class="rounded-table">
<table class="rounded-table"> <tr>
<tr> <th>Select</th>
<th>Select</th> <th>Name</th>
<th>Name</th> <th>Description</th>
<th>Description</th> <th>Questions</th>
<th>Questions</th> <th>Preview</th>
<th>Preview</th> </tr>
</tr> <tr>
<tr> <td colspan="5"><i><span
<td colspan="5"><i><span wicket:id="noTemplatesFoundMsg"></span></i></td> wicket:id="noTemplatesFoundMsg"></span>
</tr> </i>
<tr wicket:id="templateList"> </td>
<td><a wicket:id="selectTemplateLink" href="#">Select</a></td> </tr>
<td><span wicket:id="templateName"></span></td> <tr wicket:id="templateList">
<td><div class="span-8"><span wicket:id="templateDescription"></span></div></td> <td><a wicket:id="selectTemplateLink" href="#">Select</a>
<td><span wicket:id="templateNumQuestions"></span></td> </td>
<td><a href="#" wicket:id="previewTemplateLink">Preview</a></td> <td><span wicket:id="templateName"></span>
</tr> </td>
<tr><td wicket:id="pager" colspan="5"></td></tr> <td><div class="span-8">
</table> <span wicket:id="templateDescription"></span>
</div> </div>
<div wicket:id="selectedTemplateContainer"> </td>
<strong>Selected template: </strong> <td><span wicket:id="templateNumQuestions"></span>
<span wicket:id="selectedTemplate"></span> </td>
<a href="#" wicket:id="unSelectTemplateLink"> <td><a href="#" wicket:id="previewTemplateLink"><img src="images/icons/document-preview_16x16.png" class="icon-16" alt="Preview template"/></a>
<img class="icon-12" src="images/icons/delete_16x16.png" alt="Unselect template"/> Unselect </td>
</a> </tr>
</div> <tr>
</fieldset> <td wicket:id="pager" colspan="5"></td>
</tr>
<fieldset> </table>
<legend>Step 5 - Submit your request</legend> </div>
<div wicket:id="feedbackPanel"> <div wicket:id="selectedTemplateContainer" class="forcedPaddingBottom">
<!-- The feedback panel --> <strong>Selected template: </strong> <span
</div> wicket:id="selectedTemplate"></span> <a href="#"
<div> wicket:id="unSelectTemplateLink"> <img class="icon-12"
<button wicket:id="sendRequestButton" class="button">Submit your request for review src="images/icons/delete_16x16.png" alt="Unselect template" />
<img src="css/blueprint/plugins/buttons/icons/tick.png" alt=""/> Unselect </a>
</div>
<h5 class="peer-title">Step 5 - Submit your request</h5>
<div wicket:id="feedbackPanel">
<!-- The feedback panel -->
</div>
<div>
<button wicket:id="sendRequestButton" class="button">
Submit your request for review <img
src="css/blueprint/plugins/buttons/icons/tick.png" alt="" />
</button> </button>
</div> </div>
</fieldset> </div>
</div> </form>
</form> </div>
</div> </wicket:extend>
</wicket:extend>
</body> </body>
</html> </html>

@ -6,7 +6,7 @@
<body> <body>
<wicket:panel> <wicket:panel>
<div class="append-bottom"> <div class="append-bottom">
<h6>Requests with completed reviews</h6> <h6>Completed reviews</h6>
<i wicket:id="noReceivedReviewsCompletedMessage"></i> <i wicket:id="noReceivedReviewsCompletedMessage"></i>
<ul class="no-list-style small"> <ul class="no-list-style small">
<li wicket:id="receivedReviewsCompleted"> <li wicket:id="receivedReviewsCompleted">
@ -20,7 +20,7 @@
</div> </div>
<div class="append-bottom"> <div class="append-bottom">
<h6>Requests with reviews in progress</h6> <h6>In progress</h6>
<i wicket:id="noReceivedReviewsInProgressMessage"></i> <i wicket:id="noReceivedReviewsInProgressMessage"></i>
<ul class="no-list-style small"> <ul class="no-list-style small">
<li wicket:id="receivedReviewsInProgress"> <li wicket:id="receivedReviewsInProgress">
@ -34,7 +34,7 @@
</div> </div>
<div class="append-bottom"> <div class="append-bottom">
<h6>Requests waiting to be accepted</h6> <h6>Awaiting review</h6>
<div wicket:id="peerInfoRequestsFeedback"></div> <div wicket:id="peerInfoRequestsFeedback"></div>
<i wicket:id="noAwaitingAcceptMsg"></i> <i wicket:id="noAwaitingAcceptMsg"></i>
<ul class="no-list-style small"> <ul class="no-list-style small">

@ -6,7 +6,7 @@
<body> <body>
<wicket:panel> <wicket:panel>
<div class="append-bottom"> <div class="append-bottom">
<h6>Reviews completed</h6> <h6>Completed</h6>
<i wicket:id="noAcceptedReviewsCompletedMessage"></i> <i wicket:id="noAcceptedReviewsCompletedMessage"></i>
<ul class="no-list-style small"> <ul class="no-list-style small">
<li wicket:id="acceptedReviewsCompleted"> <li wicket:id="acceptedReviewsCompleted">
@ -19,7 +19,7 @@
</div> </div>
<div class="append-bottom"> <div class="append-bottom">
<h6>Reviews in progress</h6> <h6>In progress</h6>
<i wicket:id="noAcceptedInProgressMessage"></i> <i wicket:id="noAcceptedInProgressMessage"></i>
<ul class="no-list-style small"> <ul class="no-list-style small">
<li wicket:id="acceptedInProgress"> <li wicket:id="acceptedInProgress">
@ -32,7 +32,7 @@
</div> </div>
<div> <div>
<h6>Reviews aborted: <span wicket:id="abortedReviews"></span></h6> <h6>Aborted: <span wicket:id="abortedReviews"></span></h6>
</div> </div>
</wicket:panel> </wicket:panel>
</body> </body>

@ -58,7 +58,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel {
@Override @Override
protected MenuType getMenuType() { protected MenuType getMenuType() {
return MenuType.TAB; return MenuType.TAB_MULTIPLE_ROWS;
} }
} }

Binary file not shown.

Before

(image error) Size: 852 B

After

(image error) Size: 2.5 KiB

Binary file not shown.

Before

(image error) Size: 829 B

After

(image error) Size: 3.4 KiB

@ -64,7 +64,7 @@
<tbody> <tbody>
<tr> <tr>
<td></td> <td></td>
<td><a href="#" wicket:id="up">[..]</a></td> <td><a href="#" wicket:id="up"><img src="images/icons/daisyIcons/plain/folder_up.png" class="icon-24" alt="Parent folder"/></a></td>
</tr> </tr>
</tbody> </tbody>
@ -72,7 +72,7 @@
<tr wicket:id="content"> <tr wicket:id="content">
<td><a href="delete" wicket:id="delete"><img src="images/icons/edit-delete_16x16.png" alt="X" /></a></td> <td><a href="delete" wicket:id="delete"><img src="images/icons/edit-delete_16x16.png" alt="X" /></a></td>
<td><a href="#" wicket:id="link"><img wicket:id="folderIcon" src="#" alt="folderIcon" /> <span wicket:id="name">name</span></a></td> <td><a href="#" wicket:id="link"><img wicket:id="folderIcon" src="#" alt="folderIcon" class="icon-24"/> <span wicket:id="name">name</span></a></td>
<td><span wicket:id="created"></span></td> <td><span wicket:id="created"></span></td>
</tr> </tr>
</tbody> </tbody>

@ -1,20 +0,0 @@
package se.su.dsv.scipro.wiquery.mainmenu;
import org.apache.wicket.markup.html.resources.JavascriptResourceReference;
public class MainMenuJavascriptResourceReference extends
JavascriptResourceReference {
private static final long serialVersionUID = -5062441830192125794L;
private static MainMenuJavascriptResourceReference INSTANCE =
new MainMenuJavascriptResourceReference();
private MainMenuJavascriptResourceReference() {
super(MainMenuJavascriptResourceReference.class, "jquery.mainmenu.js");
}
public static MainMenuJavascriptResourceReference get() {
return INSTANCE;
}
}

@ -1,49 +0,0 @@
$(document).ready(function() {
$("img.nav-arrow").click(function() {
var parent = $(this).parents(".parent");
if (parent != null)
showMenu(parent);
})
.mouseover(function() {
//$(this).attr("src", "./images/site_nav_arrow_hover.png");
})
.mouseout(function() {
//$(this).attr("src", "./images/site_nav_arrow.png");
});
$(document).click(function(e) {
if ($(e.target).parents("#nav-list").length == 0) {
closeMenus(null);
}
});
$(document).mouseover(function(e) {
if ($(e.target).parents("#main-nav").length == 0) {
closeMenus(null);
}
});
addCurrentClassToIdentifier = function(identifier) {
var t = $("#nav-list").find(identifier).parents(".nav-list-item").get(0);
$(t).addClass("current");
};
closeMenus = function(node) {
$("#nav-list .parent").children(".over").each(function() {
if (this != node || node == null) {
$(this).removeClass("over");
}
});
};
showMenu = function(node) {
var thisMenu = $(node);
var isActive = $(node).find("div.submenu").hasClass("over");
closeMenus(thisMenu);
if (!isActive) {
thisMenu.find("div.submenu").toggleClass("over");
}
};
addCurrentClassToIdentifier("#current");
});

@ -1,98 +1,14 @@
#main-nav { .user-links{
margin-top:5px;
}
#nav-list {
margin-top: 4px;
z-index: 8001;
}
#nav-list li.nav-list-item {
float: left;
display: inline;
margin: 5px 8px 0 8px;
position: relative;
}
#nav-list li.nav-list-item .menu-item {
display: block;
height: 23px;
padding: 4px 2px 3px 2px;
}
#nav-list li.nav-list-item .menu-item a {
color: #fff;
font: 1.1em/1.5 arial, sans-serif;
font-weight: bold;
text-decoration: none;
padding: 0px 4px;
}
#nav-list li.nav-list-item .menu-item > a#current {
/* padding: 0 10px 7px 10px;
border-bottom: 5px solid #ccc; */
}
.menu-item img.nav-arrow {
vertical-align: middle;
width: 23px;
height: 23px;
margin-left: 4px;
margin-right: -3px;
}
#nav-list a#current {
/* Feel free to replace with something nicer */
/* padding-bottom: 7px; */
/* border-bottom: 5px solid #ccc; */
}
#nav-list li.current .menu-item,
#nav-list li.nav-list-item:hover .menu-item {
background-color: #fff;
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
border-top-right-radius: 4px;
text-decoration: none;
}
#nav-list li.current .menu-item a,
#nav-list li.nav-list-item:hover .menu-item a {
color: #002f5f;
}
#nav-list li.nav-list-item.parent .submenu {
position: absolute;
top: 30px;
left: -1px;
width: 140px;
background: #fff;
padding: 5px;
display: none;
border-bottom: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
z-index: 8000;
}
#nav-list li.nav-list-item.parent .over {
display: block;
}
#nav-list li.nav-list-item.parent .submenu {
font-size: 0.9em;
}
#nav-list li.nav-list-item.parent .submenu a:link,
#nav-list li.nav-list-item.parent .submenu a:visited,
#nav-list li.nav-list-item.parent .submenu a:hover {
display: block;
padding: 4px;
text-decoration: none;
}
#main-nav #user-links {
margin-top: 5px;
font-size: 0.9em; font-size: 0.9em;
text-align: right; text-align: right;
} }
.user-links a{
#main-nav #user-links a {
color: #99acbf; color: #99acbf;
}
.main-menu{
float:left;
}
.service-menu{
float: right;
} }

@ -63,6 +63,7 @@ img.department-logotype {
#main-content { #main-content {
min-height: 500px; min-height: 500px;
background: url('../images/background.png') repeat-y; background: url('../images/background.png') repeat-y;
padding-bottom: 1.5em;
} }
#main-content h1, #main-content h1,
@ -236,6 +237,10 @@ ul.no-list-style li {
margin-left: -1.5em; margin-left: -1.5em;
} }
.rounded-table,
.rounded-table-top{
padding-top: 0.5em;
}
.rounded-table th, .rounded-table th,
.rounded-table-top th { .rounded-table-top th {
background: #ccc; background: #ccc;
@ -831,7 +836,6 @@ td.active {
text-align:right; text-align:right;
white-space: nowrap; white-space: nowrap;
} }
.question-rounded-box { .question-rounded-box {
font-size: 0.9em; font-size: 0.9em;
padding:1.5em; padding:1.5em;
@ -930,7 +934,9 @@ h5.peer-box-subtitle {
.shortened-table-header { .shortened-table-header {
cursor: help; cursor: help;
} }
.forcedPaddingBottom{
padding-bottom: 1.5em;
}
table.seminar-table { table.seminar-table {
font-size: 0.9em; font-size: 0.9em;
} }

Binary file not shown.

After

(image error) Size: 3.1 KiB

Binary file not shown.

After

(image error) Size: 2.0 KiB

Binary file not shown.

After

(image error) Size: 2.0 KiB

Binary file not shown.

After

(image error) Size: 2.0 KiB

Binary file not shown.

After

(image error) Size: 1.8 KiB

Binary file not shown.

After

(image error) Size: 2.0 KiB

Binary file not shown.

After

(image error) Size: 3.3 KiB

Binary file not shown.

After

(image error) Size: 1.9 KiB

Binary file not shown.

After

(image error) Size: 3.0 KiB

Binary file not shown.

After

(image error) Size: 3.1 KiB

Binary file not shown.

After

(image error) Size: 2.1 KiB

Binary file not shown.

After

(image error) Size: 2.0 KiB

Binary file not shown.

After

(image error) Size: 2.7 KiB

Binary file not shown.

After

(image error) Size: 2.9 KiB

Binary file not shown.

After

(image error) Size: 1.9 KiB

Binary file not shown.

After

(image error) Size: 2.7 KiB

Binary file not shown.

After

(image error) Size: 2.5 KiB

Binary file not shown.

After

(image error) Size: 3.2 KiB

Binary file not shown.

After

(image error) Size: 3.4 KiB

Binary file not shown.

After

(image error) Size: 3.3 KiB

Binary file not shown.

After

(image error) Size: 3.1 KiB

Binary file not shown.

After

(image error) Size: 3.8 KiB

Binary file not shown.

After

(image error) Size: 3.9 KiB

Binary file not shown.

After

(image error) Size: 4.0 KiB

Binary file not shown.

After

(image error) Size: 1.1 KiB

Binary file not shown.

After

(image error) Size: 1.8 KiB

Binary file not shown.

After

(image error) Size: 3.2 KiB

Binary file not shown.

After

(image error) Size: 1.0 KiB

Binary file not shown.

After

(image error) Size: 1.9 KiB

Binary file not shown.

After

(image error) Size: 3.4 KiB

Binary file not shown.

After

(image error) Size: 2.7 KiB

Binary file not shown.

After

(image error) Size: 2.6 KiB

@ -1,230 +0,0 @@
@CHARSET "UTF-8";
html, body {
font-family: Calibri, Tahoma, Verdana, sans-serif;
margin: 0 0 0 0;
padding: 0 0 0 0;
font-size: 0.94em;
line-height: 1.5em;
padding-top: 30px;
}
h1, h2, h3 {
font-family: Cambria, Tahoma, Verdana, sans-serif;
}
#container {
width: 960px;
margin: auto;
}
#ajax-loader {
z-index:9999;
position: fixed;
top: 0;
left: 0;
width: 80px;
height: 30px;
background-color: #FFFF80;
border-bottom: 1px solid black;
border-right: 1px solid black;
}
#veil {
opacity:0.3;
filter:alpha(opacity=50);
position:absolute;
width: 100%;
height: 100%;
z-index:9998;
background-color: white;
}
#veil-loader {
z-index:9999;
position: absolute;
top: 30%;
left: 45%;
width: 100px;
height: 100px;
background: url(../images/ajax-loader.gif) center no-repeat;
}
p.inline {
display: inline;
}
.connectedSortable {
cursor: move;
}
.float-right {
float:right;
}
.float-left {
float:left;
}
td.icon,
span.icon {
padding-left: 20px;
line-height: 20px; /* To center the text vertically with the icon */
}
span.floating-icon {
width: 20px;
height: 20px;
}
td.icon-button,
span.icon-button {
cursor: pointer;
}
td.icon-user,
span.icon-user { /*The background image*/
background: url(../images/user.png) no-repeat left center;
}
td.icon-project,
span.icon-project { /*The background image*/
background: url(../images/project.png) no-repeat left center;
}
td.icon-arrowDown,
span.icon-arrowDown {
background: url(../images/icons/arrow-down.png) no-repeat left center;
}
td.icon-plus,
span.icon-plus {
background: url(../images/icons/add.gif) no-repeat left center;
}
td.icon-minus,
span.icon-minus {
background: url(../images/icons/minus.gif) no-repeat left center;
}
td.icon-check,
span.icon-check {
background: url(../images/icons/circle-check.png) no-repeat left center;
}
td.icon-pencil,
span.icon-pencil { /*The background image*/
background: url(../images/icons/pencil.png) no-repeat left center;
}
td.icon-delete,
span.icon-delete { /*The background image*/
background: url(../images/icons/circle-delete.png) no-repeat left center;
}
td.icon-zoom-in,
span.icon-zoom-in { /*The background image*/
background: url(../images/icons/zoom-in.png) no-repeat left center;
}
.bordered-box {
border: 1px solid #CCE6FF;
padding: 0.5em 0.5em;
}
.float-left {
float: left;
}
.float-right {
float: right;
}
.boxContent {
margin: 0.5em 0.5em;
}
.boxContent h4 {
border: 1px solid #0099CC;
background-color: #CCE6FF;
padding: 0.3em 0.3em;
}
.dashboardBox {
border: 1px solid #3300CC;
width: 50em;
min-height: 10em;
}
.dashboardBox h3 {
border-bottom: 1px solid #3300CC;
background-color: blue;
color: white;
padding: 0.2em;
margin: 0 0;
}
form.div {
display:block;
}
form.formRow {
display: inline;
}
#schedulePlannerCtrlContainer {
border: 1px solid #CCE6FF;
}
#schedulePlannerCtrlContainer ul {
list-style-type: none;
display: inline;
}
.scheduleEventList {
margin: 1em 0;
}
.scheduleEvent {
padding: 0.2em 0.2em;
-webkit-border-radius: 3px;
background-color: #E5F3FF;
border: 1px solid #B3DBFF;
}
.scheduleEventHeader {
padding: 0.4em 0.2em;
}
.scheduleEventHeaderBar {
margin-left: 0.5em;
}
.scheduleEventHeaderBar img {
float:left;
margin-right: 1em;
margin-left: 0.5em;
}
.scheduleEventHeaderBar span {
display: inline;
margin-left: 0.1em;
}
.scheduleEventIconbar {
margin: 0.4em 1em;
padding: 0.3em;
}
.scheduleEventContent {
padding: 0.3em 0.5em;
width: 45em;
}
.scheduleEventFooter {
margin-top: 1em;
}
form.dialogForm {
font-size: 0.9em;
}