[ https://issues.apache.org/jira/browse/WICKET-6042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15036373#comment-15036373 ]
ASF GitHub Bot commented on WICKET-6042: ---------------------------------------- Github user sebfz1 commented on a diff in the pull request: https://github.com/apache/wicket/pull/143#discussion_r46457977 --- Diff: wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java --- @@ -0,0 +1,295 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.wicket.markup.html.image; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.html.WebComponent; +import org.apache.wicket.markup.html.image.Image.Cors; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +/** + * A component to display external images. The src / srcset information are hold in models + * + * @author Tobias Soloschenko + * + */ +public class ExternalImage extends WebComponent +{ + + private static final long serialVersionUID = 1L; + + /** The x values to be used within the srcset */ + private List<String> xValues = null; + + /** The sizes of the responsive images */ + private List<String> sizes = null; + + /** + * Cross origin settings + */ + private Cors crossOrigin = null; + + private IModel<?>[] srcSetModels; + + /** + * Creates an external image + * + * @param id + * the component id + * @param src + * the source URL + * @param srcSet + * a list of URLs placed in the srcset attribute + */ + public ExternalImage(String id, Serializable src, Serializable... srcSet) + { + this(id, src != null ? Model.of(src) : null, convertToModel(srcSet)); + } + + /** + * Creates an external image + * + * @param id + * the component id + * @param srcModel + * the model source URL + * @param srcSetModels + * a model list of URLs placed in the srcset attribute + */ + public ExternalImage(String id, IModel<?> srcModel, IModel<?>... srcSetModels) + { + super(id, srcModel); + this.srcSetModels = srcSetModels; + } + + /** + * Converts a variable argument of Strings to an array of models + * + * @param srcSet + * a variable argument of URLs to be converted to an array of models + * @return an array of models + */ + private static IModel<?>[] convertToModel(Serializable... srcSet) + { + IModel<?>[] models = null; + if (srcSet != null) + { + + models = new IModel<?>[srcSet.length]; + int i = 0; + for (Serializable srcSetElement : srcSet) + { + models[i] = Model.of(srcSetElement); + i++; + } + } + else + { + models = new IModel<?>[0]; + } + return models; + } + + @Override + protected void onComponentTag(ComponentTag tag) + { + super.onComponentTag(tag); + + if ("source".equals(tag.getName())) + { + buildSrcSetAttribute(tag, getSrcSet()); + } + else + { + List<IModel<?>> srcSet = getSrcSet(); + checkComponentTag(tag, "img"); + buildSrcAttribute(tag, getDefaultModel()); + if (srcSet.size() > 1) + { + buildSrcSetAttribute(tag, srcSet); + } + } + + buildSizesAttribute(tag); + + Cors crossOrigin = getCrossOrigin(); + if (crossOrigin != null && Cors.NO_CORS != crossOrigin) + { + tag.put("crossOrigin", crossOrigin.getRealName()); + } + } + + /** + * Builds the src attribute + * + * @param tag + * the component tag + * @param srcModel + * the model containing the src URL + */ + protected void buildSrcAttribute(final ComponentTag tag, IModel<?> srcModel) + { + if (srcModel != null) --- End diff -- The first statement remains valid :) `srcModel.getObject()` is still not tested for nullity... > Implementation of ExternalImage component > ----------------------------------------- > > Key: WICKET-6042 > URL: https://issues.apache.org/jira/browse/WICKET-6042 > Project: Wicket > Issue Type: Improvement > Components: wicket > Affects Versions: 7.1.0, 8.0.0-M1 > Reporter: Tobias Soloschenko > Assignee: Tobias Soloschenko > Labels: features > > Like in the MediaComponent - Video for example > (https://ci.apache.org/projects/wicket/apidocs/7.x/org/apache/wicket/markup/html/media/video/Video.html) > the Image should be able to be configured with a String placed into the src > attribute. > Possible constructor to be used for that: > Image(String id, IModel<?> model, String... srcs) > As of comments the requirement changed a bit and a new implementation > "ExternalImage" is the target of this ticket: > http://apache-wicket.1842946.n4.nabble.com/Image-based-on-external-url-model-object-tt4672692.html#none -- This message was sent by Atlassian JIRA (v6.3.4#6332)