Reuse code that was moved to gwtexpui
All of this code has been refactored into the non-application specific package gwtexpui. Instead of keeping our own copies lets use the more common package version of it. Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -2,6 +2,10 @@
|
||||
<inherits name='com.google.gwt.user.User'/>
|
||||
<inherits name='com.google.gwtjsonrpc.GWTJSONRPC'/>
|
||||
<inherits name='com.google.gwtorm.GWTORM'/>
|
||||
<inherits name='com.google.gwtexpui.clippy.Clippy'/>
|
||||
<inherits name='com.google.gwtexpui.progress.Progress'/>
|
||||
<inherits name='com.google.gwtexpui.safehtml.SafeHtml'/>
|
||||
|
||||
<inherits name='com.google.gwt.user.theme.chrome.Chrome'/>
|
||||
<inherits name='com.google.gerrit.UserAgent'/>
|
||||
<extend-property name="locale" values="en"/>
|
||||
|
@@ -15,12 +15,12 @@
|
||||
package com.google.gerrit.client;
|
||||
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.client.ui.AutoCenterDialogBox;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.ClickListener;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtexpui.user.client.AutoCenterDialogBox;
|
||||
import com.google.gwtjsonrpc.client.RemoteJsonException;
|
||||
|
||||
/** A dialog box showing an error message, when bad things happen. */
|
||||
|
@@ -20,7 +20,6 @@ import com.google.gerrit.client.openid.OpenIdLoginPanel;
|
||||
import com.google.gerrit.client.reviewdb.Account;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gerrit.client.ui.AutoCenterDialogBox;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.user.client.Command;
|
||||
import com.google.gwt.user.client.DeferredCommand;
|
||||
@@ -29,6 +28,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtexpui.user.client.AutoCenterDialogBox;
|
||||
import com.google.gwtjsonrpc.client.CallbackHandle;
|
||||
|
||||
/**
|
||||
|
@@ -20,7 +20,6 @@ import com.google.gerrit.client.reviewdb.AccountExternalId;
|
||||
import com.google.gerrit.client.reviewdb.ContactInformation;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gerrit.client.ui.AutoCenterDialogBox;
|
||||
import com.google.gerrit.client.ui.TextSaveButtonListener;
|
||||
import com.google.gwt.i18n.client.LocaleInfo;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
@@ -40,6 +39,7 @@ import com.google.gwt.user.client.ui.TextArea;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtexpui.user.client.AutoCenterDialogBox;
|
||||
import com.google.gwtjsonrpc.client.VoidResult;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
|
@@ -21,12 +21,12 @@ import com.google.gerrit.client.reviewdb.Branch;
|
||||
import com.google.gerrit.client.reviewdb.Change;
|
||||
import com.google.gerrit.client.ui.AccountDashboardLink;
|
||||
import com.google.gerrit.client.ui.ChangeLink;
|
||||
import com.google.gerrit.client.ui.CopyableText;
|
||||
import com.google.gerrit.client.ui.ProjectOpenLink;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
|
||||
import com.google.gwtexpui.clippy.client.CopyableLabel;
|
||||
|
||||
public class ChangeInfoBlock extends Composite {
|
||||
private static final int R_OWNER = 0;
|
||||
@@ -84,7 +84,7 @@ public class ChangeInfoBlock extends Composite {
|
||||
|
||||
final FlowPanel fp = new FlowPanel();
|
||||
fp.add(new ChangeLink(Util.C.changePermalink(), chg.getId()));
|
||||
fp.add(new CopyableText(ChangeLink.permalink(chg.getId()), false));
|
||||
fp.add(new CopyableLabel(ChangeLink.permalink(chg.getId()), false));
|
||||
table.setWidget(R_PERMALINK, 1, fp);
|
||||
}
|
||||
}
|
||||
|
@@ -31,7 +31,6 @@ import com.google.gerrit.client.reviewdb.Project;
|
||||
import com.google.gerrit.client.reviewdb.UserIdentity;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gerrit.client.ui.CopyableText;
|
||||
import com.google.gerrit.client.ui.DomUtil;
|
||||
import com.google.gerrit.client.ui.RefreshListener;
|
||||
import com.google.gwt.user.client.Window;
|
||||
@@ -45,6 +44,7 @@ import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Panel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
|
||||
import com.google.gwtexpui.clippy.client.CopyableLabel;
|
||||
import com.google.gwtjsonrpc.client.VoidResult;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -181,7 +181,7 @@ class PatchSetPanel extends Composite implements DisclosureHandler {
|
||||
r.append(changeDetail.getChange().getChangeId());
|
||||
r.append("/");
|
||||
r.append(patchSet.getPatchSetId());
|
||||
downloads.add(new CopyableText(r.toString()));
|
||||
downloads.add(new CopyableLabel(r.toString()));
|
||||
}
|
||||
|
||||
if (changeDetail.isAllowsAnonymous()
|
||||
@@ -196,7 +196,7 @@ class PatchSetPanel extends Composite implements DisclosureHandler {
|
||||
r.append(projectName);
|
||||
r.append(" ");
|
||||
r.append(patchSet.getRefName());
|
||||
downloads.add(new CopyableText(r.toString()));
|
||||
downloads.add(new CopyableLabel(r.toString()));
|
||||
|
||||
} else if (Gerrit.isSignedIn() && Gerrit.getUserAccount() != null
|
||||
&& Gerrit.getUserAccount().getSshUserName() != null
|
||||
@@ -216,7 +216,7 @@ class PatchSetPanel extends Composite implements DisclosureHandler {
|
||||
r.append(projectName);
|
||||
r.append(" ");
|
||||
r.append(patchSet.getRefName());
|
||||
downloads.add(new CopyableText(r.toString()));
|
||||
downloads.add(new CopyableLabel(r.toString()));
|
||||
}
|
||||
|
||||
infoTable.setWidget(R_DOWNLOAD, 1, downloads);
|
||||
|
@@ -19,12 +19,12 @@ import com.google.gerrit.client.reviewdb.Patch;
|
||||
import com.google.gerrit.client.reviewdb.PatchSet;
|
||||
import com.google.gerrit.client.ui.DomUtil;
|
||||
import com.google.gerrit.client.ui.FancyFlexTable;
|
||||
import com.google.gerrit.client.ui.ProgressMeter;
|
||||
import com.google.gwt.user.client.DeferredCommand;
|
||||
import com.google.gwt.user.client.History;
|
||||
import com.google.gwt.user.client.IncrementalCommand;
|
||||
import com.google.gwt.user.client.ui.SourcesTableEvents;
|
||||
import com.google.gwt.user.client.ui.TableListener;
|
||||
import com.google.gwtexpui.progress.client.ProgressBar;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -160,7 +160,7 @@ public class PatchTable extends FancyFlexTable<Patch> {
|
||||
private int stage;
|
||||
private int row;
|
||||
private double start;
|
||||
private ProgressMeter meter;
|
||||
private ProgressBar meter;
|
||||
|
||||
private DisplayCommand(final List<Patch> list) {
|
||||
this.list = list;
|
||||
@@ -216,7 +216,7 @@ public class PatchTable extends FancyFlexTable<Patch> {
|
||||
void initMeter() {
|
||||
if (meter == null) {
|
||||
resetHtml("<tr><td></td></tr>");
|
||||
meter = new ProgressMeter(Util.M.loadingPatchSet(psid.get()));
|
||||
meter = new ProgressBar(Util.M.loadingPatchSet(psid.get()));
|
||||
table.setWidget(0, 0, meter);
|
||||
}
|
||||
updateMeter();
|
||||
|
@@ -1,63 +0,0 @@
|
||||
// Copyright 2008 Google 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.google.gerrit.client.ui;
|
||||
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.WindowResizeListener;
|
||||
import com.google.gwt.user.client.ui.DialogBox;
|
||||
|
||||
/** A DialogBox that automatically re-centers itself if the window changes */
|
||||
public class AutoCenterDialogBox extends DialogBox {
|
||||
private WindowResizeListener recenter;
|
||||
|
||||
public AutoCenterDialogBox() {
|
||||
}
|
||||
|
||||
public AutoCenterDialogBox(final boolean autoHide) {
|
||||
super(autoHide);
|
||||
}
|
||||
|
||||
public AutoCenterDialogBox(final boolean autoHide, final boolean modal) {
|
||||
super(autoHide, modal);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
if (recenter == null) {
|
||||
recenter = new WindowResizeListener() {
|
||||
public void onWindowResized(final int width, final int height) {
|
||||
onResize(width, height);
|
||||
}
|
||||
};
|
||||
Window.addWindowResizeListener(recenter);
|
||||
}
|
||||
super.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUnload() {
|
||||
if (recenter != null) {
|
||||
Window.removeWindowResizeListener(recenter);
|
||||
recenter = null;
|
||||
}
|
||||
super.onUnload();
|
||||
}
|
||||
|
||||
protected void onResize(final int width, final int height) {
|
||||
if (isAttached()) {
|
||||
center();
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,121 +0,0 @@
|
||||
// Copyright 2009 Google 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.google.gerrit.client.ui;
|
||||
|
||||
import com.google.gwt.user.client.Command;
|
||||
import com.google.gwt.user.client.DeferredCommand;
|
||||
import com.google.gwt.user.client.ui.ClickListener;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.FocusListener;
|
||||
import com.google.gwt.user.client.ui.InlineLabel;
|
||||
import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
public class CopyableText extends Composite implements ClickListener {
|
||||
private static final CopyableTextImpl impl;
|
||||
|
||||
static {
|
||||
if (UserAgent.hasFlash) {
|
||||
impl = new CopyableTextImplFlash();
|
||||
} else {
|
||||
impl = new CopyableTextImpl();
|
||||
}
|
||||
}
|
||||
|
||||
private final FlowPanel content;
|
||||
private final String text;
|
||||
private Label textLabel;
|
||||
private TextBox textBox;
|
||||
|
||||
public CopyableText(final String str) {
|
||||
this(str, true);
|
||||
}
|
||||
|
||||
public CopyableText(final String str, final boolean showLabel) {
|
||||
content = new FlowPanel();
|
||||
content.setStyleName("gerrit-CopyableText");
|
||||
initWidget(content);
|
||||
|
||||
text = str;
|
||||
if (showLabel) {
|
||||
textLabel = new InlineLabel(getText());
|
||||
textLabel.setStyleName("gerrit-CopyableText-Label");
|
||||
textLabel.addClickListener(this);
|
||||
content.add(textLabel);
|
||||
}
|
||||
impl.inject(this);
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void onClick(final Widget source) {
|
||||
if (textLabel == source) {
|
||||
showTextBox();
|
||||
}
|
||||
}
|
||||
|
||||
private void showTextBox() {
|
||||
if (textBox == null) {
|
||||
textBox = new TextBox();
|
||||
textBox.setText(getText());
|
||||
textBox.setVisibleLength(getText().length());
|
||||
textBox.addKeyboardListener(new KeyboardListenerAdapter() {
|
||||
@Override
|
||||
public void onKeyPress(final Widget sender, final char kc, final int mod) {
|
||||
if ((mod & MODIFIER_CTRL) == MODIFIER_CTRL
|
||||
|| (mod & MODIFIER_META) == MODIFIER_META) {
|
||||
switch (kc) {
|
||||
case 'c':
|
||||
case 'x':
|
||||
DeferredCommand.addCommand(new Command() {
|
||||
public void execute() {
|
||||
hideTextBox();
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
textBox.addFocusListener(new FocusListener() {
|
||||
public void onFocus(Widget arg0) {
|
||||
}
|
||||
|
||||
public void onLostFocus(Widget arg0) {
|
||||
hideTextBox();
|
||||
}
|
||||
});
|
||||
content.insert(textBox, 1);
|
||||
}
|
||||
|
||||
textLabel.setVisible(false);
|
||||
textBox.setVisible(true);
|
||||
textBox.selectAll();
|
||||
textBox.setFocus(true);
|
||||
}
|
||||
|
||||
private void hideTextBox() {
|
||||
if (textBox != null) {
|
||||
textBox.removeFromParent();
|
||||
textBox = null;
|
||||
}
|
||||
textLabel.setVisible(true);
|
||||
}
|
||||
}
|
@@ -1,20 +0,0 @@
|
||||
// Copyright 2009 Google 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.google.gerrit.client.ui;
|
||||
|
||||
class CopyableTextImpl {
|
||||
void inject(final CopyableText widget) {
|
||||
}
|
||||
}
|
@@ -1,71 +0,0 @@
|
||||
// Copyright 2009 Google 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.google.gerrit.client.ui;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.http.client.URL;
|
||||
import com.google.gwt.user.client.DOM;
|
||||
import com.google.gwt.user.client.Element;
|
||||
|
||||
class CopyableTextImplFlash extends CopyableTextImpl {
|
||||
private static final int SWF_WIDTH = 110;
|
||||
private static final int SWF_HEIGHT = 14;
|
||||
private static final String swfUrl =
|
||||
GWT.getModuleBaseURL() + "clippy1.cache.swf";
|
||||
|
||||
@Override
|
||||
void inject(final CopyableText widget) {
|
||||
final String flashVars = "text=" + URL.encodeComponent(widget.getText());
|
||||
final StringBuilder html = new StringBuilder();
|
||||
|
||||
final Element span = DOM.createSpan();
|
||||
DOM.setElementProperty(span, "className", "gerrit-CopyableText-SWF");
|
||||
html.append("<object");
|
||||
html.append(" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"");
|
||||
html.append(" width=\"" + SWF_WIDTH + "\"");
|
||||
html.append(" height=\"" + SWF_HEIGHT + "\"");
|
||||
html.append(">");
|
||||
param(html, "movie", swfUrl);
|
||||
param(html, "FlashVars", flashVars);
|
||||
|
||||
html.append("<embed ");
|
||||
html.append(" type=\"application/x-shockwave-flash\"");
|
||||
html.append(" width=\"" + SWF_WIDTH + "\"");
|
||||
html.append(" height=\"" + SWF_HEIGHT + "\"");
|
||||
attribute(html, "src", swfUrl);
|
||||
attribute(html, "FlashVars", flashVars);
|
||||
html.append("/>");
|
||||
|
||||
html.append("</object>");
|
||||
|
||||
DOM.setInnerHTML(span, html.toString());
|
||||
DOM.appendChild(widget.getElement(), span);
|
||||
}
|
||||
|
||||
private static void param(StringBuilder html, String name, String value) {
|
||||
html.append("<param");
|
||||
attribute(html, "name", name);
|
||||
attribute(html, "value", value);
|
||||
html.append("/>");
|
||||
}
|
||||
|
||||
private static void attribute(StringBuilder html, String name, String value) {
|
||||
html.append(" ");
|
||||
html.append(name);
|
||||
html.append("=\"");
|
||||
html.append(DomUtil.escape(value));
|
||||
html.append("\"");
|
||||
}
|
||||
}
|
@@ -14,92 +14,29 @@
|
||||
|
||||
package com.google.gerrit.client.ui;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
|
||||
|
||||
/** Utilities for dealing with the DOM. */
|
||||
public abstract class DomUtil {
|
||||
private static final Impl INSTANCE;
|
||||
|
||||
static {
|
||||
if (GWT.isClient())
|
||||
INSTANCE = new ClientImpl();
|
||||
else
|
||||
INSTANCE = new JavaImpl();
|
||||
}
|
||||
|
||||
/** Escape XML/HTML special characters in the input string. */
|
||||
public static String escape(final String in) {
|
||||
return INSTANCE.escape(in);
|
||||
return new SafeHtmlBuilder().append(in).asString();
|
||||
}
|
||||
|
||||
/** Convert bare URLs into <a href> tags. */
|
||||
public static String linkify(final String in) {
|
||||
return INSTANCE.linkify(in);
|
||||
return in.replaceAll("(https?://[^ \n\r\t]*)", "<a href=\"$1\">$1</a>");
|
||||
}
|
||||
|
||||
/** Do wiki style formatting to make it pretty */
|
||||
public static String wikify(String in) {
|
||||
in = INSTANCE.escape(in);
|
||||
in = INSTANCE.linkify(in);
|
||||
in = INSTANCE.wikify(in);
|
||||
in = escape(in);
|
||||
in = linkify(in);
|
||||
in = in.replaceAll("(^|\n)([ \t][^\n]*)", "$1<span class=\"gerrit-preformat\">$2</span><br />");
|
||||
in = in.replaceAll("\n\n", "<p>\n");
|
||||
return in;
|
||||
}
|
||||
|
||||
private DomUtil() {
|
||||
}
|
||||
|
||||
private static abstract class Impl {
|
||||
abstract String escape(String in);
|
||||
|
||||
String wikify(String s) {
|
||||
s = s.replaceAll("(^|\n)([ \t][^\n]*)", "$1<span class=\"gerrit-preformat\">$2</span><br />");
|
||||
s = s.replaceAll("\n\n", "<p>\n");
|
||||
return s;
|
||||
}
|
||||
|
||||
String linkify(String in) {
|
||||
return in.replaceAll("(https?://[^ \n\r\t]*)", "<a href=\"$1\">$1</a>");
|
||||
}
|
||||
}
|
||||
|
||||
private static class ClientImpl extends Impl {
|
||||
@Override
|
||||
native String escape(String src)
|
||||
/*-{ return src.replace(/&/g,'&')
|
||||
.replace(/>/g,'>')
|
||||
.replace(/</g,'<')
|
||||
.replace(/"/g,'"')
|
||||
.replace(/'/g,''')
|
||||
; }-*/;
|
||||
}
|
||||
|
||||
private static class JavaImpl extends Impl {
|
||||
@Override
|
||||
String escape(final String in) {
|
||||
final StringBuilder r = new StringBuilder(in.length());
|
||||
for (int i = 0; i < in.length(); i++) {
|
||||
final char c = in.charAt(i);
|
||||
switch (c) {
|
||||
case '&':
|
||||
r.append("&");
|
||||
break;
|
||||
case '>':
|
||||
r.append(">");
|
||||
break;
|
||||
case '<':
|
||||
r.append("<");
|
||||
break;
|
||||
case '"':
|
||||
r.append(""");
|
||||
break;
|
||||
case '\'':
|
||||
r.append("'");
|
||||
break;
|
||||
default:
|
||||
r.append(c);
|
||||
}
|
||||
}
|
||||
return r.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,55 +0,0 @@
|
||||
// Copyright 2009 Google 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.google.gerrit.client.ui;
|
||||
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
|
||||
public class ProgressMeter extends Composite {
|
||||
private final String callerText;
|
||||
private final Label bar;
|
||||
private final Label msg;
|
||||
|
||||
public ProgressMeter() {
|
||||
this("");
|
||||
}
|
||||
|
||||
public ProgressMeter(final String text) {
|
||||
if (text == null || text.length() == 0) {
|
||||
callerText = "";
|
||||
} else {
|
||||
callerText = text + " ";
|
||||
}
|
||||
|
||||
final FlowPanel body = new FlowPanel();
|
||||
body.setStyleName("gerrit-ProgressMeter");
|
||||
|
||||
msg = new Label(callerText);
|
||||
msg.setStyleName("gerrit-ProgressMeterText");
|
||||
body.add(msg);
|
||||
|
||||
bar = new Label("");
|
||||
bar.setStyleName("gerrit-ProgressMeterBar");
|
||||
body.add(bar);
|
||||
|
||||
initWidget(body);
|
||||
}
|
||||
|
||||
public void setValue(final int v) {
|
||||
bar.setWidth("" + (2 * v) + "px");
|
||||
msg.setText(callerText + v + "%");
|
||||
}
|
||||
}
|
@@ -1,50 +0,0 @@
|
||||
// Copyright 2009 Google 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.google.gerrit.client.ui;
|
||||
|
||||
/**
|
||||
* User agent feature tests we don't create permutations for.
|
||||
* <p>
|
||||
* Some features aren't worth creating full permutations in GWT for, as it each
|
||||
* new boolean permutation (only two settings) doubles the compile time
|
||||
* required. If the setting only affects a couple of lines of JavaScript code,
|
||||
* the slightly larger cache files for user agents that lack the functionality
|
||||
* requested is trivial compared to the time developers lose building Gerrit.
|
||||
*/
|
||||
public class UserAgent {
|
||||
/** Does the browser have ShockwaveFlash plugin enabled? */
|
||||
public static final boolean hasFlash = hasFlash();
|
||||
|
||||
private static native boolean hasFlash()
|
||||
/*-{
|
||||
if (navigator.plugins && navigator.plugins.length) {
|
||||
if (navigator.plugins['Shockwave Flash']) return true;
|
||||
if (navigator.plugins['Shockwave Flash 2.0']) return true;
|
||||
|
||||
} else if (navigator.mimeTypes && navigator.mimeTypes.length) {
|
||||
var mimeType = navigator.mimeTypes['application/x-shockwave-flash'];
|
||||
if (mimeType && mimeType.enabledPlugin) return true;
|
||||
|
||||
} else {
|
||||
try { new ActiveXObject('ShockwaveFlash.ShockwaveFlash.7'); return true; } catch (e) {}
|
||||
try { new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6'); return true; } catch (e) {}
|
||||
try { new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); return true; } catch (e) {}
|
||||
}
|
||||
return false;
|
||||
}-*/;
|
||||
|
||||
private UserAgent() {
|
||||
}
|
||||
}
|
@@ -72,42 +72,6 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.gerrit-ProgressMeter {
|
||||
position: relative;
|
||||
border: 1px solid #6B90DA;
|
||||
height: 20px;
|
||||
width: 200px;
|
||||
}
|
||||
.gerrit-ProgressMeterText {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
width: 200px;
|
||||
padding-bottom: 3px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
font-size: smaller;
|
||||
}
|
||||
.gerrit-ProgressMeterBar {
|
||||
background: #F0F7F9;
|
||||
border-right: 1px solid #D0D7D9;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.gerrit-CopyableText {
|
||||
}
|
||||
.gerrit-CopyableText-Label {
|
||||
vertical-align: top;
|
||||
}
|
||||
.gerrit-CopyableText-SWF {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
|
||||
/** Menu **/
|
||||
.gwt-MenuItem a,
|
||||
|
Binary file not shown.
@@ -1,93 +0,0 @@
|
||||
// Copyright 2008 Google 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.google.gerrit.server;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.FilterConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* Forces GWT resources to cache for a very long time.
|
||||
* <p>
|
||||
* GWT compiled JavaScript and ImageBundles can be cached indefinitely by a
|
||||
* browser and/or an edge proxy, as they never contain user-specific data and
|
||||
* are named by a unique checksum. If their content is ever modified then the
|
||||
* URL changes, so user agents would request a different resource. We force
|
||||
* these resources to have very long expiration times.
|
||||
*/
|
||||
public class CacheControlFilter implements Filter {
|
||||
public void init(final FilterConfig config) {
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
public void doFilter(final ServletRequest sreq, final ServletResponse srsp,
|
||||
final FilterChain chain) throws IOException, ServletException {
|
||||
final HttpServletRequest req = (HttpServletRequest) sreq;
|
||||
final HttpServletResponse rsp = (HttpServletResponse) srsp;
|
||||
final String pathInfo = pathInfo(req);
|
||||
|
||||
if (cacheForever(pathInfo)) {
|
||||
rsp.setHeader("Cache-Control", "max-age=31536000,public");
|
||||
rsp.setDateHeader("Expires", System.currentTimeMillis() + 31536000000L);
|
||||
} else if (nocache(pathInfo)) {
|
||||
rsp.setHeader("Expires", "Fri, 01 Jan 1980 00:00:00 GMT");
|
||||
rsp.setHeader("Pragma", "no-cache");
|
||||
rsp.setHeader("Cache-Control", "no-cache, must-revalidate");
|
||||
}
|
||||
|
||||
chain.doFilter(req, rsp);
|
||||
}
|
||||
|
||||
private static boolean cacheForever(final String pathInfo) {
|
||||
if (pathInfo.endsWith(".cache.gif")) {
|
||||
return true;
|
||||
}
|
||||
if (pathInfo.endsWith(".cache.html")) {
|
||||
return true;
|
||||
}
|
||||
if (pathInfo.endsWith(".cache.png")) {
|
||||
return true;
|
||||
}
|
||||
if (pathInfo.endsWith(".cache.jar")) {
|
||||
return true;
|
||||
}
|
||||
if (pathInfo.endsWith(".cache.swf")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean nocache(final String pathInfo) {
|
||||
if (pathInfo.endsWith(".nocache.js")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static String pathInfo(final HttpServletRequest req) {
|
||||
final String uri = req.getRequestURI();
|
||||
final String ctx = req.getContextPath();
|
||||
return uri.startsWith(ctx) ? uri.substring(ctx.length()) : uri;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user