// Copyright 2012 Google Inc. All Rights Reserved.
//
// 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.google.collide.client.code;
import com.google.collide.client.AppContext;
import com.google.collide.client.history.HistoryUtils;
import com.google.collide.client.util.AnimationController;
import com.google.collide.client.util.CssUtils;
import com.google.collide.client.util.Elements;
import com.google.collide.mvp.CompositeView;
import com.google.collide.mvp.UiComponent;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import elemental.client.Browser;
import elemental.events.Event;
import elemental.events.EventListener;
import elemental.html.Element;
import elemental.html.InputElement;
/**
* The presenter for the pane that asks the user to share the workspace.
*/
public class ShareWorkspacePane extends UiComponent<ShareWorkspacePane.View>
implements HistoryUtils.SetHistoryListener {
/**
* Static factory method for obtaining an instance of ShareWorkspacePane.
*/
static ShareWorkspacePane create(View view, AppContext context) {
AnimationController ruleAnimator = new AnimationController.Builder()
.setCollapse(true)
.setFade(true)
.setFixedHeight(true)
.build();
return new ShareWorkspacePane(view, ruleAnimator);
}
public interface Css extends CssResource {
String label();
String root();
String rule();
String url();
}
interface Resources extends ClientBundle {
@Source("ShareWorkspacePane.css")
Css workspaceNavigationShareWorkspacePaneCss();
}
static class View extends CompositeView<Void> {
private final Css css;
private Element label;
private Element rule;
private InputElement url;
View(Resources res) {
this.css = res.workspaceNavigationShareWorkspacePaneCss();
setElement(createShareContents());
}
Element createShareContents() {
Element root = Elements.createDivElement(css.root());
rule = Elements.createDivElement(css.rule());
label = Elements.createElement("p", css.label());
label.setTextContent("Collaborate with others by pasting this link into an email or IM.");
url = Elements.createInputTextElement(css.url());
url.addEventListener(Event.CLICK, new EventListener() {
@Override
public void handleEvent(Event evt) {
url.setSelectionRange(0, url.getValue().length());
}
}, false);
// TODO: the elements above aren't added because we don't want them -- but I'm
// not actually removing them because I want ot reduce code change
return root;
}
}
private final AnimationController ruleAnimator;
private ShareWorkspacePane(View view, AnimationController ruleAnimator) {
super(view);
this.ruleAnimator = ruleAnimator;
HistoryUtils.addSetHistoryListener(this);
}
@Override
public void onHistorySet(String historyString) {
getView().url.setValue(Browser.getWindow().getLocation().getHref());
}
public void setInstructionsVisible(boolean visible, AnimationController animator) {
View view = getView();
CssUtils.setDisplayVisibility2(view.label, visible);
CssUtils.setDisplayVisibility2(view.rule, !visible);
}
}