/* * Copyright 2000-2022 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.v7.ui.renderers; import com.vaadin.server.AbstractJavaScriptExtension; import com.vaadin.server.JavaScriptCallbackHelper; import com.vaadin.server.JsonCodec; import com.vaadin.shared.JavaScriptExtensionState; import com.vaadin.shared.communication.ServerRpc; import com.vaadin.ui.JavaScriptFunction; import com.vaadin.v7.ui.Grid.AbstractRenderer; import elemental.json.Json; import elemental.json.JsonValue; /** * Base class for Renderers with all client-side logic implemented using * JavaScript. *
* When a new JavaScript renderer is initialized in the browser, the framework
* will look for a globally defined JavaScript function that will initialize the
* renderer. The name of the initialization function is formed by replacing .
* with _ in the name of the server-side class. If no such function is defined,
* each super class is used in turn until a match is found. The framework will
* thus first attempt with com_example_MyRenderer
for the
* server-side
* com.example.MyRenderer extends AbstractJavaScriptRenderer
class.
* If MyRenderer instead extends com.example.SuperRenderer
, then
* com_example_SuperRenderer
will also be attempted if
* com_example_MyRenderer
has not been defined.
*
* * In addition to the general JavaScript extension functionality explained in * {@link AbstractJavaScriptExtension}, this class also provides some * functionality specific for renderers. *
* The initialization function will be called with this
pointing to
* a connector wrapper object providing integration to Vaadin. Please note that
* in JavaScript, this
is not necessarily defined inside callback
* functions and it might therefore be necessary to assign the reference to a
* separate variable, e.g. var self = this;
. In addition to the
* extension functions described for {@link AbstractJavaScriptExtension}, the
* connector wrapper object also provides this function:
*
getRowKey(rowIndex)
- Gets a unique identifier for the row
* at the given index. This identifier can be used on the server to retrieve the
* corresponding ItemId using {@link #getItemId(String)}.render(cell, data)
- Callback for rendering the given data
* into the given cell. The structure of cell and data are described in separate
* sections below. The renderer is required to implement this function.
* Corresponds to
* {@link com.vaadin.client.renderers.Renderer#render(com.vaadin.client.widget.grid.RendererCellReference, Object)}
* .init(cell)
- Prepares a cell for rendering. Corresponds to
* {@link com.vaadin.client.renderers.ComplexRenderer#init(com.vaadin.client.widget.grid.RendererCellReference)}
* .destroy(cell)
- Allows the renderer to release resources
* allocate for a cell that will no longer be used. Corresponds to
* {@link com.vaadin.client.renderers.ComplexRenderer#destroy(com.vaadin.client.widget.grid.RendererCellReference)}
* .onActivate(cell)
- Called when the cell is activated by the
* user e.g. by double clicking on the cell or pressing enter with the cell
* focused. Corresponds to
* {@link com.vaadin.client.renderers.ComplexRenderer#onActivate(com.vaadin.client.widget.grid.CellReference)}
* .getConsumedEvents()
- Returns a JavaScript array of event
* names that should cause onBrowserEvent to be invoked whenever an event is
* fired for a cell managed by this renderer. Corresponds to
* {@link com.vaadin.client.renderers.ComplexRenderer#getConsumedEvents()}.onBrowserEvent(cell, event)
- Called by Grid when an event
* of a type returned by getConsumedEvents is fired for a cell managed by this
* renderer. Corresponds to
* {@link com.vaadin.client.renderers.ComplexRenderer#onBrowserEvent(com.vaadin.client.widget.grid.CellReference, com.google.gwt.dom.client.NativeEvent)}
* .* The cell object passed to functions defined by the renderer has these * properties: *
element
- The DOM element corresponding to this cell.
* Readonly.rowIndex
- The current index of the row of this cell.
* Readonly.columnIndex
- The current index of the column of this cell.
* Readonly.colSpan
- The number of columns spanned by this cell. Only
* supported in the object passed to the render
function - other
* functions should not use the property. Readable and writable.
* this
). Calling that JavaScript function will
* cause the call method in the registered {@link JavaScriptFunction} to be
* invoked with the same arguments.
*
* @param functionName
* the name that should be used for client-side callback
* @param function
* the {@link JavaScriptFunction} object that will be invoked
* when the JavaScript function is called
*/
protected void addFunction(String functionName,
JavaScriptFunction function) {
callbackHelper.registerCallback(functionName, function);
}
/**
* Invoke a named function that the connector JavaScript has added to the
* JavaScript connector wrapper object. The arguments can be any boxed
* primitive type, String, {@link JsonValue} or arrays of any other
* supported type. Complex types (e.g. List, Set, Map, Connector or any
* JavaBean type) must be explicitly serialized to a {@link JsonValue}
* before sending. This can be done either with
* {@link JsonCodec#encode(Object, JsonValue, java.lang.reflect.Type, com.vaadin.ui.ConnectorTracker)}
* or using the factory methods in {@link Json}.
*
* @param name
* the name of the function
* @param arguments
* function arguments
*/
protected void callFunction(String name, Object... arguments) {
callbackHelper.invokeCallback(name, arguments);
}
@Override
protected JavaScriptExtensionState getState() {
return (JavaScriptExtensionState) super.getState();
}
}
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'none'
Content-Type: text/plain; charset=UTF-8
Content-Length: 2198
Content-Disposition: inline; filename="ButtonRenderer.java"
Last-Modified: Tue, 06 May 2025 06:47:12 GMT
Expires: Tue, 06 May 2025 06:52:12 GMT
ETag: "73a1fcb140c4a27cf50fc0aad41f05da176376bf"
/*
* Copyright 2000-2022 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.v7.ui.renderers;
/**
* A Renderer that displays a button with a textual caption. The value of the
* corresponding property is used as the caption. Click listeners can be added
* to the renderer, invoked when any of the rendered buttons is clicked.
*
* @since 7.4
* @author Vaadin Ltd
*/
@Deprecated
public class ButtonRenderer extends ClickableRenderer* The renderer is configured to render with the {@link Date#toString()} * representation for the default locale. */ public DateRenderer() { this(Locale.getDefault(), ""); } /** * Creates a new date renderer. *
* The renderer is configured to render with the {@link Date#toString()} * representation for the given locale. * * @param locale * the locale in which to present dates * @throws IllegalArgumentException * if {@code locale} is {@code null} */ public DateRenderer(Locale locale) throws IllegalArgumentException { this("%s", locale, ""); } /** * Creates a new date renderer. *
* The renderer is configured to render with the {@link Date#toString()} * representation for the given locale. * * @param locale * the locale in which to present dates * @param nullRepresentation * the textual representation of {@code null} value * @throws IllegalArgumentException * if {@code locale} is {@code null} */ public DateRenderer(Locale locale, String nullRepresentation) throws IllegalArgumentException { this("%s", locale, nullRepresentation); } /** * Creates a new date renderer. *
* The renderer is configured to render with the given string format, as * displayed in the default locale. * * @param formatString * the format string with which to format the date * @throws IllegalArgumentException * if {@code formatString} is {@code null} * @see Format * String Syntax */ public DateRenderer(String formatString) throws IllegalArgumentException { this(formatString, ""); } /** * Creates a new date renderer. *
* The renderer is configured to render with the given string format, as * displayed in the default locale. * * @param formatString * the format string with which to format the date * @param nullRepresentation * the textual representation of {@code null} value * @throws IllegalArgumentException * if {@code formatString} is {@code null} * @see Format * String Syntax */ public DateRenderer(String formatString, String nullRepresentation) throws IllegalArgumentException { this(formatString, Locale.getDefault(), nullRepresentation); } /** * Creates a new date renderer. *
* The renderer is configured to render with the given string format, as * displayed in the given locale. * * @param formatString * the format string to format the date with * @param locale * the locale to use * @throws IllegalArgumentException * if either argument is {@code null} * @see Format * String Syntax */ public DateRenderer(String formatString, Locale locale) throws IllegalArgumentException { this(formatString, locale, ""); } /** * Creates a new date renderer. *
* The renderer is configured to render with the given string format, as * displayed in the given locale. * * @param formatString * the format string to format the date with * @param locale * the locale to use * @param nullRepresentation * the textual representation of {@code null} value * @throws IllegalArgumentException * if either argument is {@code null} * @see Format * String Syntax */ public DateRenderer(String formatString, Locale locale, String nullRepresentation) throws IllegalArgumentException { super(Date.class, nullRepresentation); if (formatString == null) { throw new IllegalArgumentException("format string may not be null"); } if (locale == null) { throw new IllegalArgumentException("locale may not be null"); } this.locale = locale; this.formatString = formatString; dateFormat = null; } /** * Creates a new date renderer. *
* The renderer is configured to render with he given date format. * * @param dateFormat * the date format to use when rendering dates * @throws IllegalArgumentException * if {@code dateFormat} is {@code null} */ public DateRenderer(DateFormat dateFormat) throws IllegalArgumentException { this(dateFormat, ""); } /** * Creates a new date renderer. *
* The renderer is configured to render with he given date format.
*
* @param dateFormat
* the date format to use when rendering dates
* @throws IllegalArgumentException
* if {@code dateFormat} is {@code null}
*/
public DateRenderer(DateFormat dateFormat, String nullRepresentation)
throws IllegalArgumentException {
super(Date.class, nullRepresentation);
if (dateFormat == null) {
throw new IllegalArgumentException("date format may not be null");
}
locale = null;
formatString = null;
this.dateFormat = dateFormat;
}
@Override
public String getNullRepresentation() {
return super.getNullRepresentation();
}
@Override
public JsonValue encode(Date value) {
String dateString;
if (value == null) {
dateString = getNullRepresentation();
} else if (dateFormat != null) {
dateString = dateFormat.format(value);
} else {
dateString = String.format(locale, formatString, value);
}
return encode(dateString, String.class);
}
@Override
public String toString() {
final String fieldInfo;
if (dateFormat != null) {
fieldInfo = "dateFormat: " + dateFormat;
} else {
fieldInfo = "locale: " + locale + ", formatString: " + formatString;
}
return String.format("%s [%s]", getClass().getSimpleName(), fieldInfo);
}
}
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'none'
Content-Type: text/plain; charset=UTF-8
Content-Length: 1326
Content-Disposition: inline; filename="HtmlRenderer.java"
Last-Modified: Tue, 06 May 2025 06:47:12 GMT
Expires: Tue, 06 May 2025 06:52:12 GMT
ETag: "7e4413cf2d82631d3bec1a467c0e55350d910b2f"
/*
* Copyright 2000-2022 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.v7.ui.renderers;
import com.vaadin.v7.ui.Grid.AbstractRenderer;
/**
* A renderer for presenting HTML content.
*
* @author Vaadin Ltd
* @since 7.4
*/
@Deprecated
public class HtmlRenderer extends AbstractRenderer
* The image for each rendered cell is read from a Resource-typed property in
* the data source. Only {@link ExternalResource}s and {@link ThemeResource}s
* are currently supported.
*
* @since 7.4
* @author Vaadin Ltd
*/
@Deprecated
public class ImageRenderer extends ClickableRenderer