/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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.uberfire.client.screen; import javax.enterprise.inject.Alternative; import com.google.gwt.core.client.Scheduler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.IsWidget; import org.uberfire.client.mvp.PlaceManager; import org.uberfire.client.mvp.WorkbenchScreenActivity; import org.uberfire.mvp.PlaceRequest; import org.uberfire.security.ResourceType; import org.uberfire.workbench.model.ActivityResourceType; import org.uberfire.workbench.model.CompassPosition; import org.uberfire.workbench.model.Position; import org.uberfire.workbench.model.menu.Menus; import org.uberfire.workbench.model.toolbar.ToolBar; @Alternative public class JSWorkbenchScreenActivity implements WorkbenchScreenActivity { private final PlaceManager placeManager; private PlaceRequest place; private JSNativeScreen nativePlugin; public JSWorkbenchScreenActivity(final JSNativeScreen nativePlugin, final PlaceManager placeManager) { this.nativePlugin = nativePlugin; this.placeManager = placeManager; } @Override public void onStartup(PlaceRequest place) { this.place = place; nativePlugin.onStartup(place); } public void setNativePlugin(JSNativeScreen nativePlugin) { this.nativePlugin = nativePlugin; } @Override public PlaceRequest getPlace() { return place; } @Override public String getIdentifier() { return nativePlugin.getId(); } @Override public ResourceType getResourceType() { return ActivityResourceType.SCREEN; } @Override public boolean onMayClose() { return nativePlugin.onMayClose(); } @Override public void onClose() { nativePlugin.onClose(); } @Override public void onShutdown() { nativePlugin.onShutdown(); } @Override public Position getDefaultPosition() { return CompassPosition.ROOT; } @Override public PlaceRequest getOwningPlace() { return null; } @Override public void onFocus() { nativePlugin.onFocus(); } @Override public void onLostFocus() { nativePlugin.onLostFocus(); } @Override public String getTitle() { return nativePlugin.getTitle(); } @Override public IsWidget getTitleDecoration() { return null; } @Override public IsWidget getWidget() { return new HTML(nativePlugin.getElement().getInnerHTML()); } @Override public Menus getMenus() { return null; } @Override public ToolBar getToolBar() { return null; } @Override public void onOpen() { Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { if (nativePlugin.getType() != null && nativePlugin.getType().equalsIgnoreCase("angularjs")) { bind(); } nativePlugin.onOpen(); placeManager.executeOnOpenCallback(place); } }); } // Alias registerPlugin with a global JS function. private native String bind() /*-{ var apps = $wnd.document.querySelectorAll('[ng-app]'), i; for (i = 0; i < apps.length; ++i) { var element = $wnd.angular.element(apps[i]); if (!element.injector()) { var value = apps[i].attributes["ng-app"].value; if (value) { $wnd.angular.bootstrap(element, [value]); } else { $wnd.angular.bootstrap(element, []); } } } }-*/; @Override public String contextId() { return nativePlugin.getContextId(); } @Override public int preferredHeight() { return -1; } @Override public int preferredWidth() { return -1; } }