Skip to content
Snippets Groups Projects
Commit bb886976 authored by srosse's avatar srosse
Browse files

OO-1068: fix z-index and overflow issue in landing page administration,...

OO-1068: fix z-index and overflow issue in landing page administration, replace dropdown with a popover
parent 07363bde
No related branches found
No related tags found
No related merge requests found
...@@ -36,7 +36,7 @@ import org.olat.admin.landingpages.model.Rules; ...@@ -36,7 +36,7 @@ import org.olat.admin.landingpages.model.Rules;
import org.olat.admin.landingpages.ui.RulesDataModel.RCols; import org.olat.admin.landingpages.ui.RulesDataModel.RCols;
import org.olat.basesecurity.BaseSecurityModule; import org.olat.basesecurity.BaseSecurityModule;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.dropdown.DropdownItem; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement; import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
...@@ -46,6 +46,7 @@ import org.olat.core.gui.components.form.flexible.elements.TextElement; ...@@ -46,6 +46,7 @@ import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormEvent;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
...@@ -54,8 +55,13 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionE ...@@ -54,8 +55,13 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionE
import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer; import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiColumnModel;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.olat.user.propertyhandlers.UserPropertyHandler; import org.olat.user.propertyhandlers.UserPropertyHandler;
...@@ -80,6 +86,10 @@ public class LandingPagesAdminController extends FormBasicController { ...@@ -80,6 +86,10 @@ public class LandingPagesAdminController extends FormBasicController {
private final String[] attrKeys; private final String[] attrKeys;
private final String[] attrValues; private final String[] attrValues;
private FormSubmit saveButton;
private ChooserController chooserCtrl;
private CloseableCalloutWindowController chooserCalloutCtrl;
@Autowired @Autowired
private UserManager userManager; private UserManager userManager;
@Autowired @Autowired
...@@ -157,7 +167,7 @@ public class LandingPagesAdminController extends FormBasicController { ...@@ -157,7 +167,7 @@ public class LandingPagesAdminController extends FormBasicController {
FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
formLayout.add("buttons", buttonLayout); formLayout.add("buttons", buttonLayout);
uifactory.addFormSubmitButton("save", buttonLayout); saveButton = uifactory.addFormSubmitButton("save", buttonLayout);
} }
@Override @Override
...@@ -197,23 +207,13 @@ public class LandingPagesAdminController extends FormBasicController { ...@@ -197,23 +207,13 @@ public class LandingPagesAdminController extends FormBasicController {
landingPageEl.setValue(rule.getLandingPath()); landingPageEl.setValue(rule.getLandingPath());
wrapper.setLandingPageEl(landingPageEl); wrapper.setLandingPageEl(landingPageEl);
formLayout.add(landingPageEl); formLayout.add(landingPageEl);
DropdownItem chooser = new DropdownItem("chooser-" + i, RCols.landingPageChooser.i18nKey(), getTranslator()); FormLink chooser = uifactory.addFormLink("chooser-" + i, "chooser", RCols.landingPageChooser.i18nKey(), null, formLayout, Link.BUTTON);
chooser.setButton(true); chooser.setIconRightCSS("o_icon o_icon_caret");
chooser.setEmbbeded(true); chooser.setUserObject(wrapper);
fillChooser(wrapper, chooser, formLayout);
wrapper.setLandingPageChooser(chooser); wrapper.setLandingPageChooser(chooser);
return wrapper; return wrapper;
} }
private void fillChooser(RuleWrapper rule, DropdownItem chooser, FormItemContainer formLayout) {
int i = counter.incrementAndGet();
for(LandingPages lp:LandingPages.values()) {
FormLink link = uifactory.addFormLink(lp.name() + "-" + i, lp.name(), lp.i18nKey(), null, formLayout, Link.LINK);
link.setUserObject(rule);
chooser.addElement(link);
}
}
@Override @Override
protected void formOK(UserRequest ureq) { protected void formOK(UserRequest ureq) {
...@@ -249,18 +249,53 @@ public class LandingPagesAdminController extends FormBasicController { ...@@ -249,18 +249,53 @@ public class LandingPagesAdminController extends FormBasicController {
} else if(source instanceof FormLink && source.getUserObject() instanceof RuleWrapper) { } else if(source instanceof FormLink && source.getUserObject() instanceof RuleWrapper) {
RuleWrapper rule = (RuleWrapper)source.getUserObject(); RuleWrapper rule = (RuleWrapper)source.getUserObject();
String cmd = ((FormLink)source).getCmd(); String cmd = ((FormLink)source).getCmd();
if("catalog".equals(cmd)) { if("chooser".equals(cmd)) {
//do choose catalog FormLink link = (FormLink)source;
} else if("repo".equals(cmd)) { openChooser(ureq, rule, link);
}
} else { saveButton.getComponent().setDirty(false);
LandingPages lp = LandingPages.landingPageFromCmd(cmd); source.getComponent().setDirty(false);
tableEl.getComponent().setDirty(false);
flc.setDirty(false);
}
super.formInnerEvent(ureq, source, event);
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(chooserCtrl == source) {
if(event == Event.DONE_EVENT) {
LandingPages lp = chooserCtrl.getSelectedLandingPage();
RuleWrapper rule = chooserCtrl.getRow();
if(lp != null) { if(lp != null) {
rule.getLandingPageEl().setValue(lp.businessPath()); rule.getLandingPageEl().setValue(lp.businessPath());
saveButton.getComponent().setDirty(true);
} }
} }
chooserCalloutCtrl.deactivate();
cleanUp();
} }
super.formInnerEvent(ureq, source, event); super.event(ureq, source, event);
}
private void cleanUp() {
removeAsListenerAndDispose(chooserCtrl);
removeAsListenerAndDispose(chooserCalloutCtrl);
chooserCtrl = null;
chooserCalloutCtrl = null;
}
private void openChooser(UserRequest ureq, RuleWrapper row, FormLink link) {
removeAsListenerAndDispose(chooserCtrl);
removeAsListenerAndDispose(chooserCalloutCtrl);
chooserCtrl = new ChooserController(ureq, getWindowControl(), row);
listenTo(chooserCtrl);
chooserCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(),
chooserCtrl.getInitialComponent(), link.getFormDispatchId(), "", true, "");
listenTo(chooserCalloutCtrl);
chooserCalloutCtrl.activate();
} }
private void addRow(RuleWrapper row) { private void addRow(RuleWrapper row) {
...@@ -312,4 +347,53 @@ public class LandingPagesAdminController extends FormBasicController { ...@@ -312,4 +347,53 @@ public class LandingPagesAdminController extends FormBasicController {
} }
return rows; return rows;
} }
private class ChooserController extends BasicController {
private final RuleWrapper row;
private LandingPages selectedLandingPage;
public ChooserController(UserRequest ureq, WindowControl wControl, RuleWrapper row) {
super(ureq, wControl);
this.row = row;
VelocityContainer mainVC = createVelocityContainer("chooser");
int i = counter.incrementAndGet();
List<String> links = new ArrayList<>();
for(LandingPages lp:LandingPages.values()) {
String name = lp.name() + "-" + i;
Link link = LinkFactory.createLink(name, lp.name(), getTranslator(), mainVC, this, Link.LINK | Link.NONTRANSLATED);
link.setCustomDisplayText(translate(lp.i18nKey()));
link.setUserObject(lp);
mainVC.put(name, link);
links.add(name);
}
mainVC.contextPut("links", links);
putInitialPanel(mainVC);
}
public RuleWrapper getRow() {
return row;
}
public LandingPages getSelectedLandingPage() {
return selectedLandingPage;
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if(source instanceof Link) {
Link link = (Link)source;
if(link.getUserObject() instanceof LandingPages) {
selectedLandingPage = (LandingPages)link.getUserObject();
}
}
fireEvent(ureq, Event.DONE_EVENT);
}
@Override
protected void doDispose() {
//
}
}
} }
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
package org.olat.admin.landingpages.ui; package org.olat.admin.landingpages.ui;
import org.olat.admin.landingpages.model.Rule; import org.olat.admin.landingpages.model.Rule;
import org.olat.core.gui.components.dropdown.DropdownItem; import org.olat.core.gui.components.form.flexible.elements.FormLink;
import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.elements.TextElement;
...@@ -39,7 +39,7 @@ public class RuleWrapper { ...@@ -39,7 +39,7 @@ public class RuleWrapper {
private SingleSelection attrNameEl; private SingleSelection attrNameEl;
private TextElement attrValueEl; private TextElement attrValueEl;
private TextElement landingPageEl; private TextElement landingPageEl;
private DropdownItem landingPageChooser; private FormLink landingPageChooser;
public RuleWrapper(Rule rule) { public RuleWrapper(Rule rule) {
this.rule = rule; this.rule = rule;
...@@ -89,11 +89,11 @@ public class RuleWrapper { ...@@ -89,11 +89,11 @@ public class RuleWrapper {
this.landingPageEl = landingPageEl; this.landingPageEl = landingPageEl;
} }
public DropdownItem getLandingPageChooser() { public FormLink getLandingPageChooser() {
return landingPageChooser; return landingPageChooser;
} }
public void setLandingPageChooser(DropdownItem landingPageChooser) { public void setLandingPageChooser(FormLink landingPageChooser) {
this.landingPageChooser = landingPageChooser; this.landingPageChooser = landingPageChooser;
} }
......
<ul class="list-unstyled">
#foreach($link in $links)
<li>$r.render($link)</li>
#end
</ul>
\ No newline at end of file
...@@ -127,6 +127,12 @@ public class LinkFactory { ...@@ -127,6 +127,12 @@ public class LinkFactory {
return link; return link;
} }
public static Link createLink(String name, String cmd, Translator translator, VelocityContainer vc, ComponentEventListener listener, int presentation) {
Link link = new Link(name, cmd, name, presentation, vc, listener);
link.setTranslator(translator);
return link;
}
/** /**
* add a link to the <code>vc</code> Velocity Container and make the <code>listeningController</code> listen to this link.<p> * add a link to the <code>vc</code> Velocity Container and make the <code>listeningController</code> listen to this link.<p>
* Follow these instructions to show the link and catch its events: * Follow these instructions to show the link and catch its events:
......
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