Package org.wicketstuff.yui.markup.html.calendar

Source Code of org.wicketstuff.yui.markup.html.calendar.Calendar$CalendarElement

/*
* $Id: Calendar.java 5044 2006-03-20 16:46:35 -0800 (Mon, 20 Mar 2006)
* jonathanlocke $ $Revision: 5159 $ $Date: 2006-03-20 16:46:35 -0800 (Mon, 20
* Mar 2006) $
*
* ==============================================================================
* 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 org.wicketstuff.yui.markup.html.calendar;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.util.template.PackageTextTemplate;
import org.wicketstuff.yui.markup.html.contributor.YuiHeaderContributor;

import java.util.HashMap;
import java.util.Map;

/**
* Calendar component based on the Calendar of Yahoo UI Library.
*
* @author Eelco Hillenius
*/
public class Calendar extends Panel implements IHeaderContributor {
    /**
     * The container/ receiver of the javascript component.
     */
    private final class CalendarElement extends FormComponent {
        private static final long serialVersionUID = 1L;

        /**
         * Construct.
         *
         * @param id
         */
        public CalendarElement(String id) {
            super(id);
            add(new AttributeModifier("id", new AbstractReadOnlyModel() {
                private static final long serialVersionUID = 1L;

                @Override
                public Object getObject() {
                    return elementId;
                }
            }));
        }

        @Override
        public void updateModel() {
            Calendar.this.updateModel();
        }
    }

    private static final long serialVersionUID = 1L;

    /**
     * the receiving component.
     */
    private CalendarElement calendarElement;

    /**
     * The DOM id of the element that hosts the javascript component.
     */
    private String elementId;

    /**
     * The JavaScript variable name of the calendar component.
     */
    private String javaScriptId;

    /**
     * Construct.
     *
     * @param id the component id
     */
    public Calendar(String id) {
        super(id);

        Label initialization = new Label("initialization", new AbstractReadOnlyModel() {
            private static final long serialVersionUID = 1L;

            @Override
            public Object getObject() {
                return getJavaScriptComponentInitializationScript();
            }
        });
        initialization.setEscapeModelStrings(false);
        add(initialization);
        add(calendarElement = new CalendarElement("calendarContainer"));
    }

    public void renderHead(IHeaderResponse response) {
        response.render(OnLoadHeaderItem.forScript("init" + javaScriptId + "();"));

        YuiHeaderContributor.forModule("calendar").renderHead(response);
        response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(Calendar.class, "calendar.js")));
        response.render(CssHeaderItem.forReference(new CssResourceReference(Calendar.class, "calendar.css")));
    }

    /**
     * TODO implement
     */
    public void updateModel() {
    }

    /**
     * Gets the initilization script for the javascript component.
     *
     * @return the initilization script
     */
    protected String getJavaScriptComponentInitializationScript() {
        CharSequence leftImage = RequestCycle.get().urlFor(new PackageResourceReference(Calendar.class, "callt.gif"), null).toString();
        CharSequence rightImage = RequestCycle.get().urlFor(new PackageResourceReference(Calendar.class, "calrt.gif"), null).toString();

        Map<String, Object> variables = new HashMap<String, Object>(4);
        variables.put("javaScriptId", javaScriptId);
        variables.put("elementId", elementId);
        variables.put("navigationArrowLeft", leftImage);
        variables.put("navigationArrowRight", rightImage);

        PackageTextTemplate template = new PackageTextTemplate(Calendar.class, "init.js");
        template.interpolate(variables);

        return template.getString();
    }

    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();

        // initialize lazily
        if (elementId == null) {
            // assign the markup id
            String id = getMarkupId();
            elementId = id + "Element";
            javaScriptId = elementId + "JS";
        }
    }
}
TOP

Related Classes of org.wicketstuff.yui.markup.html.calendar.Calendar$CalendarElement

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.