[ 
https://issues.apache.org/jira/browse/WICKET-6042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15035555#comment-15035555
 ] 

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_r46393895
  
    --- 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 --
    
    Caution, you do not test the nullity of the model object here...


> 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)

Reply via email to