/* * Copyright (C) 2003-2013 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.forum.common.webui; import org.exoplatform.commons.utils.HTMLEntityEncoder; import org.exoplatform.forum.common.webui.WebUIUtils; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.form.UIForm; import org.exoplatform.webui.form.UIFormInputBase; import java.io.Writer; public class UIForumFilter extends UIFormInputBase<String> { private String defaultSelectName = null; private String onchange_ = null; public UIForumFilter() { } public UIForumFilter(String name, String bindingExpression) { super(name, bindingExpression, String.class); } public UIForumFilter(String name, String bindingExpression, String value) { super(name, bindingExpression, String.class); this.value_ = value; } public void setDefaultSelect(String defaultSelectName) { this.defaultSelectName = defaultSelectName; } public String getCategoryId() { String value = (this.value_ != null && this.value_.length() > 0) ? this.value_ : " ; "; return value.split(";")[0].trim(); } public String getForumId() { String value = (this.value_ != null && this.value_.length() > 0) ? this.value_ : " ; "; return value.split(";")[1].trim(); } public String getForumName() { if (this.value_ != null && this.value_.length() > 0) { String forumName = this.value_.replaceFirst(getCategoryId() + ";", ""); forumName = forumName.replaceFirst(getForumId() + ";", "").trim(); return forumName; } return getDefaultSelect().trim(); } private String getDefaultSelect() { if (defaultSelectName == null) { defaultSelectName = WebUIUtils.getLabel(this.getParent().getId(), "SelectAForum"); } return this.defaultSelectName; } private String getFilerPlaceholder() { return WebUIUtils.getLabel(this.getParent().getId(), "FilterForums"); } @Override public void decode(Object input, WebuiRequestContext context) { String val = (String) input; if ((val == null || val.length() == 0)) { return; } value_ = val; if (value_ != null && value_.length() == 0) value_ = null; } public void setOnChange(String onchange) { onchange_ = onchange; } protected String renderOnChangeEvent(UIForm uiForm) throws Exception { if (onchange_ != null && onchange_.length() > 0) { return uiForm.event(onchange_, (String) getId()); } return ""; } public void processRender(WebuiRequestContext context) throws Exception { UIForm uiForm = getAncestorOfType(UIForm.class); Writer w = context.getWriter(); w.write("<div id=\"uiForumFilter"); w.write(getId()); w.write("\">\n"); w.write(" <input name=\""); w.write(getName()); w.write("\""); w.write(" type=\"hidden\""); w.write(" id=\""); w.write(getId()); w.write("\""); String value = getValue(); if (value != null && value.length() > 0) { w.write(" value=\""); w.write(HTMLEntityEncoder.getInstance().encodeHTMLAttribute(value)); w.write("\""); } w.write("/>\n"); w.write(" <div style=\"display:none\" class=\"forumFilterData\" data-onchange=\""); w.write(renderOnChangeEvent(uiForm)); w.write("\"></div>\n"); w.write(" <div class=\"uiForumFilter btn-group uiDropdownWithIcon clearfix\" "); renderHTMLAttributes(w); w.write(">\n"); w.write(" <div class=\"btn dropdown-toggle\">"); w.write(" <span class=\"titleForum\">"); w.write(getForumName()); w.write(" </span>\n"); w.write(" <span class=\"spiter\"></span>\n"); w.write(" <span class=\"uiIconMiniArrowDown uiIconLightGray\"></span>\n"); w.write("</div>\n"); w.write(" <div class=\"filterMenu open\" style=\"position:absolute; visibility:hidden\">\n"); w.write(" <ul class=\"dropdown-menu\">\n"); w.write(" <li>\n"); w.write(" <input type=\"text\" class=\"filterInput\" placeholder=\"" + getFilerPlaceholder() + "\"/>\n"); w.write(" </li>\n"); w.write(" </ul>\n"); w.write(" </div>\n"); w.write(" </div>\n"); w.write("</div>\n"); context.getJavascriptManager().getRequireJS() .require("SHARED/forumFilter", "forumfilter") .addScripts("forumfilter.init('uiForumFilter" + getId() + "');"); } }