PFAutoCompleteBehavior.javaПакет: org.projectforge.web.wicket.autocompletion
Классы: PFAutoCompleteBehavior, MyJsonBuilder
Расширяет: AbstractDefaultAjaxBehavior
Методы (14): renderHead, renderAutocompleteHead, getSettingsJS, addSetting, addSetting, onBind, respond, respond, onRequest, respond, detach, formatLabel, formatValue, transform
Поля (4): serialVersionUID, settings, renderer, serialVersionUID
Импорты: 14 пакетов
package org.projectforge.web.wicket.autocompletion;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.IAutoCompleteRenderer;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.handler.TextRequestHandler;
import org.apache.wicket.util.string.Strings;
import org.projectforge.web.core.JsonBuilder;
import org.projectforge.web.wicket.WicketRenderHeadUtils;
import java.util.ArrayList;
import java.util.List;
public abstract class PFAutoCompleteBehavior<T> extends AbstractDefaultAjaxBehavior
{
private static final long serialVersionUID = -6532710378025987377L;
protected PFAutoCompleteSettings settings;
protected IAutoCompleteRenderer<String> renderer;
public PFAutoCompleteBehavior(final IAutoCompleteRenderer<String> renderer, final PFAutoCompleteSettings settings)
{
this.renderer = renderer;
this.settings = settings;
}
/**
* @see org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#renderHead(org.apache.wicket.Component,
* org.apache.wicket.markup.html.IHeaderResponse)
*/
@Override
public void renderHead(final Component component, final IHeaderResponse response)
{
super.renderHead(component, response);
WicketRenderHeadUtils.renderMainJavaScriptIncludes(response);
response.render(JavaScriptReferenceHeaderItem.forUrl("scripts/jquery.wicket-autocomplete.js"));
renderAutocompleteHead(response);
}
/**
* Рендеринг JavaScript-инициализации автодополнения и других вкладов в заголовок
*
* @param response
*/
private void renderAutocompleteHead(final IHeaderResponse response)
{
final String id = getComponent().getMarkupId();
String indicatorId = findIndicatorId();
if (Strings.isEmpty(indicatorId)) {
indicatorId = "null";
} else {
indicatorId = "'" + indicatorId + "'";
}
final StringBuilder buf = new StringBuilder();
buf.append("var favorite" + id + " = ");
final List<T> favorites = getFavorites();
final MyJsonBuilder builder = new MyJsonBuilder();
if (favorites != null) {
buf.append(builder.append(favorites).getAsString());
} else {
buf.append(builder.append(getRecentUserInputs()).getAsString());
}
buf.append(";").append("var z = $(\"#").append(id).append("\");\n").append("z.autocomplete(\"").append(getCallbackUrl()).append("\",{");
boolean first = true;
for (final String setting : getSettingsJS()) {
if (first == true)
first = false;
else buf.append(", ");
buf.append(setting);
}
if (first == true)
first = false;
else buf.append(", ");
buf.append("favoriteEntries:favorite" + id);
buf.append("});");
if (settings.isHasFocus() == true) {
buf.append("\nz.focus();");
}
final String initJS = buf.toString();
// String initJS = String.format("new Wicket.AutoComplete('%s','%s',%s,%s);", id, getCallbackUrl(), constructSettingsJS(), indicatorId);
response.render(OnDomReadyHeaderItem.forScript(initJS));
}
protected final List<String> getSettingsJS()
{
final List<String> result = new ArrayList<String>();
addSetting(result, "matchContains", settings.isMatchContains());
addSetting(result, "minChars", settings.getMinChars());
addSetting(result, "delay", settings.getDelay());
addSetting(result, "matchCase", settings.isMatchCase());
addSetting(result, "matchSubset", settings.isMatchSubset());
addSetting(result, "cacheLength", settings.getCacheLength());
addSetting(result, "mustMatch", settings.isMustMatch());
addSetting(result, "selectFirst", settings.isSelectFirst());
addSetting(result, "selectOnly", settings.isSelectOnly());
addSetting(result, "maxItemsToShow", settings.getMaxItemsToShow());
addSetting(result, "autoFill", settings.isAutoFill());
addSetting(result, "autoSubmit", settings.isAutoSubmit());
addSetting(result, "scroll", settings.isScroll());
addSetting(result, "scrollHeight", settings.getScrollHeight());
addSetting(result, "width", settings.getWidth());
addSetting(result, "deletableItem", settings.isDeletableItem());
if (settings.isLabelValue() == true) {
addSetting(result, "labelValue", settings.isLabelValue());
}
return result;
}
private final void addSetting(final List<String> result, final String name, final Boolean value)
{
if (value == null) {
return;
}
// ... (сокращено, всего 261 строка)
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024 -> 2025. a72903e36 *.java, *.kt: StringBuffer -> StringBuilder. b6092df09 Авторские права 2023 -> 2024 ab45d51fa Авторские права 2001-2022 -> 2001-2023.