/** * Copyright 2013 ArcBees Inc. * * 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.jci.client.application.program; import javax.inject.Inject; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Element; import com.google.gwt.event.logical.shared.AttachEvent; import com.google.gwt.query.client.Function; import com.google.gwt.query.client.GQuery; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import com.gwtplatform.mvp.client.ViewImpl; import com.jci.client.resource.CommonResource; import com.jci.client.resource.program.ProgramResource; import static com.google.gwt.query.client.GQuery.$; public class ProgramPageView extends ViewImpl implements ProgramPagePresenter.MyView, AttachEvent.Handler { interface Binder extends UiBinder<Widget, ProgramPageView> { } @UiField DivElement divButtons; @UiField HTMLPanel divCalendar; private final String activeStyleName; private final String activeStyleNameProgram; private final String eventStyleNameProgram; private final String activeTooltipStyleNameProgram; private final String tooltipStyleNameProgram; private final String activeExcursionStyleName; private final String overflowNameProgram; private final String downNameProgram; private final String pagerContainerStyleName; private final String pagerDivStyleName; private final String pagerButtonContainerStyleName; private final String pagerButtonStyleName; private boolean isBound; @Inject public ProgramPageView(Binder uiBinder, CommonResource commonResource, ProgramResource programResource) { initWidget(uiBinder.createAndBindUi(this)); activeStyleName = commonResource.style().active(); activeStyleNameProgram = programResource.style().active(); eventStyleNameProgram = programResource.style().event(); activeTooltipStyleNameProgram = programResource.style().tooltipActive(); tooltipStyleNameProgram = programResource.style().tooltip(); activeExcursionStyleName = programResource.style().pagerButtonActive(); overflowNameProgram = programResource.style().overflow(); downNameProgram = programResource.style().down(); pagerContainerStyleName = programResource.style().pagerContainer(); pagerDivStyleName = programResource.style().pagerDiv(); pagerButtonContainerStyleName = programResource.style().pagerButtonContainer(); pagerButtonStyleName = programResource.style().pagerButton(); asWidget().addAttachHandler(this); } @Override public void onAttachOrDetach(AttachEvent attachEvent) { if (attachEvent.isAttached()) { bindGwtQuery(); isBound = true; } } @Override public void untoggleTooltipClick(Element e) { $("." + activeStyleNameProgram).removeClass(activeStyleNameProgram); $("." + activeTooltipStyleNameProgram).removeClass(activeTooltipStyleNameProgram); } @Override public void untoggleTooltip() { $("." + activeStyleNameProgram).removeClass(activeStyleNameProgram); $("." + activeTooltipStyleNameProgram).removeClass(activeTooltipStyleNameProgram); } @Override public void pauseCarousel() { pauseCarouselNative(); } public static native void pauseCarouselNative() /*-{ $wnd.$('#myCarouselProgram').bind('slid', function () { $wnd.$('#myCarouselProgram').carousel('pause'); }); }-*/; private void bindGwtQuery() { //Tooltip clicking $("." + tooltipStyleNameProgram).unbind("click"); $("." + tooltipStyleNameProgram).click(new Function() { @Override public void f(Element e) { getEvent().stopPropagation(); } }); $("a", divButtons).unbind("click"); $("a", divButtons).click(new Function() { @Override public void f(Element e) { $("." + activeStyleName).removeClass(activeStyleName); $("." + downNameProgram).removeClass(downNameProgram); if ($(e).hasClass("firstButton")) { $("." + overflowNameProgram).addClass(downNameProgram); } $(e).addClass(activeStyleName); pauseCarousel(); } }); $(divCalendar).unbind("click"); $(divCalendar).click(new Function() { @Override public void f(Element e) { untoggleTooltipClick(e); } }); $("." + eventStyleNameProgram, divCalendar).unbind("click"); $("." + eventStyleNameProgram, divCalendar).click(new Function() { @Override public void f(Element e) { if ($(e).hasClass(activeStyleNameProgram)) { untoggleTooltipClick(e); } else { untoggleTooltipClick(e); $(e).addClass(activeStyleNameProgram); $("." + tooltipStyleNameProgram, e).addClass(activeTooltipStyleNameProgram); } getEvent().stopPropagation(); } }); $("." + pagerButtonContainerStyleName + " a").unbind("click"); $("." + pagerButtonContainerStyleName + " a").click(new Function() { @Override public void f(Element e) { GQuery gQueryPager = $(e).parents("." + pagerContainerStyleName); int positionIndex = gQueryPager.find("." + pagerButtonStyleName).index(e) + 1; //Reset all butons and divs gQueryPager.find("." + pagerButtonStyleName).removeClass(activeExcursionStyleName); gQueryPager.find("." + pagerDivStyleName).hide(); //Activate good button and div $(e).addClass(activeExcursionStyleName); gQueryPager.find("." + pagerDivStyleName + ":nth-child(" + positionIndex + ")").show(); } }); } }