From d36d7a279ae439792f0382036579ccecaa249d28 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 7 Aug 2014 17:20:00 +0200 Subject: [PATCH] OO-984: make the thumbnail in "my courses" list clickable --- .../form/flexible/FormDecorator.java | 88 ------------------- .../components/form/flexible/impl/Form.java | 4 + ...mDecoratorImpl.java => FormDecorator.java} | 15 +++- .../form/flexible/impl/FormItemImpl.java | 3 +- .../flexible/impl/FormLayoutContainer.java | 2 +- .../table/FlexiTableCustomRenderer.java | 3 + .../ui/list/CatalogNodeController.java | 10 ++- .../list/RepositoryEntryListController.java | 21 +++++ .../repository/ui/list/_content/row_1.html | 4 +- 9 files changed, 52 insertions(+), 98 deletions(-) delete mode 100644 src/main/java/org/olat/core/gui/components/form/flexible/FormDecorator.java rename src/main/java/org/olat/core/gui/components/form/flexible/impl/{FormDecoratorImpl.java => FormDecorator.java} (91%) diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/FormDecorator.java b/src/main/java/org/olat/core/gui/components/form/flexible/FormDecorator.java deleted file mode 100644 index 7bd2000b918..00000000000 --- a/src/main/java/org/olat/core/gui/components/form/flexible/FormDecorator.java +++ /dev/null @@ -1,88 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ -package org.olat.core.gui.components.form.flexible; -/** - * - * @author patrickb - * - */ -public interface FormDecorator { - - /** - * - * @param formItemName - * @return - */ - public boolean hasError(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public boolean hasExample(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public boolean hasLabel(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public boolean isMandatory(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public boolean isVisible(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public boolean isEnabled(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public String getItemId(String formItemName); - - /** - * - * @param formItemName - * @return - */ - public boolean isSpacerElement(String formItemName); -} \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java index 5fdc3ec4353..4ddd5c6f489 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java @@ -523,6 +523,10 @@ public class Form extends LogDelegator { ComponentCollection getFormLayout() { return (ComponentCollection) formLayout.getComponent(); } + + FormItemContainer getFormItemContainer() { + return formLayout; + } public Component getInitialComponent() { return formWrapperComponent; diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecoratorImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java similarity index 91% rename from src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecoratorImpl.java rename to src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java index 22dbbf5636c..412684fefb8 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecoratorImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java @@ -27,7 +27,6 @@ package org.olat.core.gui.components.form.flexible.impl; import java.util.Map; -import org.olat.core.gui.components.form.flexible.FormDecorator; 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.elements.SpacerElement; @@ -42,11 +41,15 @@ import org.olat.core.util.StringHelper; * * @author patrickb */ -public class FormDecoratorImpl implements FormDecorator { +public class FormDecorator { private final FormItemContainer container; + + public FormDecorator(Form theForm) { + this.container = theForm.getFormItemContainer(); + } - public FormDecoratorImpl(FormItemContainer container) { + public FormDecorator(FormItemContainer container) { this.container = container; } @@ -121,6 +124,12 @@ public class FormDecoratorImpl implements FormDecorator { return (item instanceof SpacerElement); } + public String ffXHREvent(String key, String value) { + Form theForm = container.getRootForm(); + String elementId = "o_fi" + container.getComponent().getDispatchID(); + return FormJSHelper.getXHRFnCallFor(theForm, elementId, 1, new NameValuePair(key, value)); + } + public String getContainerCssClass() { if (container != null && StringHelper.containsNonWhitespace(container.getElementCssClass())) { return " " + container.getElementCssClass(); diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java index 59beb195dc3..a67ef4fd603 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java @@ -474,8 +474,7 @@ public abstract class FormItemImpl implements FormItem, InlineElement { return; } //before/ after pattern - int action = getRootForm().getAction(); - switch (action) { + switch (getRootForm().getAction()) { case FormEvent.ONCLICK: getRootForm().fireFormEvent(ureq, new FormEvent("ONCLICK", this, FormEvent.ONCLICK)); break; diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java index 2eb4e7bc1f7..1f4c1a09b43 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java @@ -122,7 +122,7 @@ public class FormLayoutContainer extends FormItemImpl implements FormItemContain } translator = formTranslator; // add the form decorator for the $f.hasError("ddd") etc. - formLayoutContainer.contextPut("f", new FormDecoratorImpl(this)); + formLayoutContainer.contextPut("f", new FormDecorator(this)); // this container manages the form items, the GUI form item componentes are // managed in the associated velocitycontainer formComponentsNames = new ArrayList<String>(5); diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java index 6665ca5ef46..12015ae60de 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java @@ -23,6 +23,7 @@ package org.olat.core.gui.components.form.flexible.impl.elements.table; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.ComponentRenderer; import org.olat.core.gui.components.form.flexible.FormItem; +import org.olat.core.gui.components.form.flexible.impl.FormDecorator; import org.olat.core.gui.components.form.flexible.impl.FormJSHelper; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.render.RenderResult; @@ -92,6 +93,7 @@ class FlexiTableCustomRenderer extends AbstractFlexiTableRenderer implements Com FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); VelocityContainer container = ftE.getRowRenderer(); + container.contextPut("f", new FormDecorator(ftE.getRootForm())); FlexiTableDataModel<?> dataModel = ftE.getTableDataModel(); Object rowObject = ftE.getTableDataModel().getObject(row); @@ -127,6 +129,7 @@ class FlexiTableCustomRenderer extends AbstractFlexiTableRenderer implements Com container.getHTMLRendererSingleton().render(renderer, sb, container, ubu, translator, renderResult, null); container.contextRemove("row"); + container.contextRemove("f"); sb.append("</div>"); } diff --git a/src/main/java/org/olat/repository/ui/list/CatalogNodeController.java b/src/main/java/org/olat/repository/ui/list/CatalogNodeController.java index 255510eab8e..da4fd9c0e86 100644 --- a/src/main/java/org/olat/repository/ui/list/CatalogNodeController.java +++ b/src/main/java/org/olat/repository/ui/list/CatalogNodeController.java @@ -160,9 +160,13 @@ public class CatalogNodeController extends BasicController implements Activateab } else if("img_select".equals(event.getCommand())) { String node = ureq.getParameter("node"); if(StringHelper.isLong(node)) { - Long categoryNodeKey = new Long(node); - CatalogEntry entry = catalogManager.getCatalogNodeByKey(categoryNodeKey); - selectCatalogEntry(ureq, entry); + try { + Long categoryNodeKey = new Long(node); + CatalogEntry entry = catalogManager.getCatalogNodeByKey(categoryNodeKey); + selectCatalogEntry(ureq, entry); + } catch (NumberFormatException e) { + logWarn("Not a valid long: " + node, e); + } } } } diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java index ed050383e06..ce42dbed61a 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java @@ -318,6 +318,27 @@ public class RepositoryEntryListController extends FormBasicController doFilter(selectedFilters); flc.setDirty(true); } + } else if(source == mainForm.getInitialComponent()) { + if("ONCLICK".equals(event.getCommand())) { + String rowKeyStr = ureq.getParameter("select_row"); + if(StringHelper.isLong(rowKeyStr)) { + try { + Long rowKey = new Long(rowKeyStr); + List<RepositoryEntryRow> rows = model.getObjects(); + for(RepositoryEntryRow row:rows) { + if(row.getKey().equals(rowKey)) { + if (row.isMember()) { + doOpen(ureq, row); + } else { + doOpenDetails(ureq, row); + } + } + } + } catch (NumberFormatException e) { + logWarn("Not a valid long: " + rowKeyStr, e); + } + } + } } super.event(ureq, source, event); } diff --git a/src/main/java/org/olat/repository/ui/list/_content/row_1.html b/src/main/java/org/olat/repository/ui/list/_content/row_1.html index ee840d406ca..d3a3c1251c4 100644 --- a/src/main/java/org/olat/repository/ui/list/_content/row_1.html +++ b/src/main/java/org/olat/repository/ui/list/_content/row_1.html @@ -1,10 +1,12 @@ <div #if($row.selected) class="o_selected" #end> <div class="o_visual"> + <a href="javascript:${f.ffXHREvent("select_row","$row.key")}"> #if($row.isThumbnailAvailable()) <img src="${row.getThumbnailRelPath()}" /> #else <div class="o_visual_not_available"></div> - #end + #end + </a> </div> <div class="o_meta o_withEllipsis"> <div class="o_go_xs visible-xs"> -- GitLab