Support image upload by drag and drop
Change-Id: I0fb2dd66b92f60c17634dfd6dd1437765f7847d8
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java
index e086af1..6adc46f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImageUploadScreen.java
@@ -33,7 +33,7 @@
setStyleName("imagare-image-upload-screen");
add(new UploadByFileSelection());
- add(new UploadByPastePanel());
+ add(new UploadByDropOrPastePanel());
uploadedPanel = new UploadedImagesPanel();
add(uploadedPanel);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByPastePanel.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByDropOrPastePanel.java
similarity index 74%
rename from src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByPastePanel.java
rename to src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByDropOrPastePanel.java
index ff03843..f782e17 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByPastePanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/UploadByDropOrPastePanel.java
@@ -17,18 +17,19 @@
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
-public class UploadByPastePanel extends VerticalPanel {
+public class UploadByDropOrPastePanel extends VerticalPanel {
- UploadByPastePanel() {
+ UploadByDropOrPastePanel() {
init0();
setStyleName("imagare-image-upload-panel");
getElement().setAttribute("contenteditable", "true");
getElement().setAttribute("onpaste", "imagarePasteHandler(this, event)");
+ getElement().setAttribute("ondrop", "imagareDropHandler(this, event)");
- Label pasteLabel = new Label("Paste image here with " + (isMac() ? "Cmd+V" : "Ctrl+V") + ".");
- pasteLabel.setStyleName("imagare-paste-label");
- add(pasteLabel);
+ add(new Label("drag and drop image here"));
+ add(new Label("or"));
+ add(new Label("paste image from clipboard with " + (isMac() ? "Cmd+V" : "Ctrl+V")));
}
private static native boolean isMac() /*-{
@@ -99,5 +100,27 @@
elem.innerHTML = savedContent;
@com.googlesource.gerrit.plugins.imagare.client.ImageUploader::uploadImage(Ljava/lang/String;)(imageData);
}
+
+ $wnd.imagareDropHandler = function handleDrop(elem, event) {
+ if (window.chrome) {
+ event.preventDefault();
+ }
+ var savedContent = elem.innerHTML;
+ var f = event.dataTransfer.files[0];
+ if (f) {
+ var r = new FileReader();
+ r.onload = function(e) {
+ elem.innerHTML = savedContent;
+ if (f.type.match('image/.*')) {
+ @com.googlesource.gerrit.plugins.imagare.client.ImageUploader::uploadImage(Ljava/lang/String;Ljava/lang/String;)(e.target.result, f.name);
+ } else {
+ $wnd.Gerrit.showError('no image file');
+ }
+ }
+ r.readAsDataURL(f);
+ } else {
+ $wnd.Gerrit.showError('Failed to load file.');
+ }
+ }
}-*/;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/public/imagare.css b/src/main/java/com/googlesource/gerrit/plugins/imagare/public/imagare.css
index f168a66..75578a5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/public/imagare.css
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/public/imagare.css
@@ -8,14 +8,15 @@
}
.imagare-image-upload-panel {
- width: 275px;
- height: 100px;
+ width: 350px;
border: 1px solid #B3B2B2;
border-spacing: 5px 5px;
}
-.imagare-paste-label {
+.imagare-image-upload-panel td {
+ text-align: center;
font-size: 18px;
+ margin-bottom: 3px;
}
.imagare-uploaded-images-label {