Package com.dragome.render.html.components

Source Code of com.dragome.render.html.components.HTMLListRenderer

/*******************************************************************************
* Copyright (c) 2011-2014 Fernando Petrola
*
* This file is part of Dragome SDK.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
******************************************************************************/
package com.dragome.render.html.components;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import org.w3c.dom.Element;

import com.dragome.commons.javascript.ScriptHelper;
import com.dragome.model.interfaces.Renderer;
import com.dragome.model.interfaces.ValueChangeEvent;
import com.dragome.model.interfaces.ValueChangeHandler;
import com.dragome.model.interfaces.VisualComponent;
import com.dragome.model.interfaces.VisualListBox;
import com.dragome.model.listeners.ClickListener;
import com.dragome.remote.entities.DragomeEntityManager;
import com.dragome.render.canvas.interfaces.Canvas;
import com.dragome.services.ServiceLocator;
import com.dragome.templates.HTMLTemplateRenderer;

public class HTMLListRenderer extends AbstractHTMLComponentRenderer<VisualListBox<Object>>
{
  public HTMLListRenderer()
  {
  }

  public Canvas<Element> render(final VisualListBox<Object> visualList)
  {
    Canvas<Element> canvas= ServiceLocator.getInstance().getTemplateManager().getCanvasFactory().createCanvas();

    canvas.setContent(new MergeableElement()
    {
      public void mergeWith(final Element selectElement)
      {
        final String id= DragomeEntityManager.add(visualList);

        //  visualList.addValueChangeHandler(new ValueChangeHandler<Object>()
        //  {
        //      public void onValueChange(ValueChangeEvent<Object> event)
        //      {
        //    final DomHandler domHandler= ServiceLocator.getInstance().getDomHandler();
        //    Element elementById= domHandler.getDocument().getElementById(id);
        //    elementById.setAttribute("value", (String) event.getValue());
        //      }
        //  });
        //    final Element selectElement= ServiceLocator.getInstance().getDomHandler().getDocument().createElement("select");

        visualList.addValueChangeHandler(new ValueChangeHandler<Object>()
        {
          public void onValueChange(ValueChangeEvent<Object> event)
          {
            if (event.getValue() instanceof Collection)
              selectValue(selectElement, (Collection) event.getValue());
            else
              selectValue(selectElement, Arrays.asList(event.getValue()));
          }

          private void selectValue(final Element selectElement, Collection<Object> values)
          {
            Renderer<Object> renderer= visualList.getRenderer();
            ScriptHelper.put("renderedValues", new Object(), this);
            ScriptHelper.eval("renderedValues={}", this);

            for (Object object : values)
            {
              ScriptHelper.put("value", renderer.render(object), this);
              ScriptHelper.evalNoResult("renderedValues[value]=true", this);
            }

            ScriptHelper.put("sel", selectElement, this);
            ScriptHelper.evalNoResult("for(var opt, j = 0; opt = sel.node.options[j]; j++) {opt.selected= renderedValues[opt.value]; }", this);
          }
        });

        visualList.addListener(ClickListener.class, new ClickListener()
        {
          public void clickPerformed(VisualComponent aVisualComponent)
          {
            ScriptHelper.put("e", selectElement, this);
            if (ScriptHelper.evalBoolean("e.node.multiple", this))
            {
              String values= (String) ScriptHelper.eval("(function (){for (var options = e.node.options, values= [], i = 0, len = options.length; i < len;i++)  if (options[i].selected) values.push(options[i].value); return values.join(',')})()", this);
              visualList.setSelectedValues((List) Arrays.asList(values.split(",")));
            }
            else
            {
              String value= (String) ScriptHelper.eval("e.node.options[e.node.selectedIndex].value", this);

              Renderer<Object> renderer= visualList.getRenderer();

              Collection<Object> acceptableValues= visualList.getAcceptableValues();
              for (Object object : acceptableValues)
              {
                String render= renderer.render(object);
                if (render.equals(value))
                  visualList.setValue(object);
              }
            }
          }
        });

        selectElement.setAttribute(COMPONENT_ID_ATTRIBUTE, id);
        selectElement.setAttribute("size", getSelectElementSize() + "");
//        selectElement.setAttribute("style", "min-width:300px;");

        if (visualList.isMultipleItems())
          selectElement.setAttribute("multiple", "multiple");

        int i= 1;
        String options= "";
        for (Object element : visualList.getAcceptableValues())
        {
          Renderer<Object> renderer= visualList.getRenderer();
          String rendered= renderer.render(element);
          Object value= visualList.getValue();
          String selected= "";

          boolean isSelected= visualList.isMultipleItems() && visualList.getSelectedValues().contains(element);
          isSelected|= !visualList.isMultipleItems() && element.equals(value);

          if (isSelected)
            selected= "selected=\"selected\"";

          String option= "<option value=\"" + rendered + "\" " + selected + ">" + rendered + "</option>\n";
          options+= option;
        }
        selectElement.setAttribute(HTMLTemplateRenderer.INNER_HTML, options);

        addListeners(visualList, selectElement);
      }
    });

    return canvas;

  }
  protected int getSelectElementSize()
  {
    return 5;
  }
}
TOP

Related Classes of com.dragome.render.html.components.HTMLListRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.