diff --git a/modules/gwtorganise/.classpath b/modules/gwtorganise/.classpath
index a240a4e4..f3207544 100644
--- a/modules/gwtorganise/.classpath
+++ b/modules/gwtorganise/.classpath
@@ -4,8 +4,9 @@
-
-
+
+
+
diff --git a/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs b/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs
index 1a43c478..2d415391 100644
--- a/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs
+++ b/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs
@@ -1,3 +1,3 @@
-#Sun Aug 30 20:30:24 NZST 2009
+#Tue Dec 22 13:14:57 NZDT 2009
eclipse.preferences.version=1
-filesCopiedToWebInfLib=appengine-api-1.0-sdk-1.2.2.jar|datanucleus-appengine-1.0.2.final.jar|datanucleus-core-1.1.4-gae.jar|datanucleus-jpa-1.1.4.jar|geronimo-jpa_3.0_spec-1.1.1.jar|geronimo-jta_1.1_spec-1.1.1.jar|jdo2-api-2.3-ea.jar
+filesCopiedToWebInfLib=appengine-api-1.0-sdk-1.2.5.jar|appengine-api-labs-1.2.5.jar|datanucleus-appengine-1.0.3.jar|datanucleus-core-1.1.5.jar|datanucleus-jpa-1.1.5.jar|geronimo-jpa_3.0_spec-1.1.1.jar|geronimo-jta_1.1_spec-1.1.1.jar|jdo2-api-2.3-eb.jar
diff --git a/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs b/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs
new file mode 100644
index 00000000..62909a5c
--- /dev/null
+++ b/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs
@@ -0,0 +1,3 @@
+#Thu Dec 31 12:58:02 NZDT 2009
+eclipse.preferences.version=1
+jarsExcludedFromWebInfLib=
diff --git a/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs b/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs
index 3e2783ad..661aaef1 100644
--- a/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs
+++ b/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs
@@ -1,4 +1,5 @@
-#Thu Sep 24 11:47:04 NZST 2009
+#Tue Jan 26 16:51:26 NZDT 2010
eclipse.preferences.version=1
+entryPointModules=
filesCopiedToWebInfLib=gwt-servlet.jar
gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBW11dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\=
diff --git a/modules/gwtorganise/controllers/admin_upload_configure.php b/modules/gwtorganise/controllers/admin_upload_configure.php
new file mode 100644
index 00000000..27266194
--- /dev/null
+++ b/modules/gwtorganise/controllers/admin_upload_configure.php
@@ -0,0 +1,45 @@
+validate()) {
+
+ upload_configuration::extractForm($form);
+ message::success(t("GWTOrganise Module Configured!"));
+ }
+ }
+ else
+ {
+ upload_configuration::populateForm($form);
+ }
+
+ print $form;
+ }
+}
diff --git a/modules/gwtorganise/controllers/json_album.php b/modules/gwtorganise/controllers/json_album.php
index da36fd98..848167e5 100644
--- a/modules/gwtorganise/controllers/json_album.php
+++ b/modules/gwtorganise/controllers/json_album.php
@@ -53,7 +53,6 @@ class Json_Album_Controller extends Controller {
}
function albums($item_id) {
-
print $this->child_elements($item_id, array(array("type", "=", "album")));
}
@@ -128,7 +127,6 @@ class Json_Album_Controller extends Controller {
->where("weight", ">=", $target_weight)
->where("parent_id", "=", $album->id)
->execute();
-
// Insert source items into the hole
foreach ($source_ids as $source_id) {
db::build()
@@ -241,7 +239,7 @@ class Json_Album_Controller extends Controller {
}
if ($degrees) {
- graphics::rotate($item->file_path(), $item->file_path(), array("degrees" => $degrees));
+ gallery_graphics::rotate($item->file_path(), $item->file_path(), array("degrees" => $degrees));
list($item->width, $item->height) = getimagesize($item->file_path());
$item->resize_dirty= 1;
@@ -262,5 +260,18 @@ class Json_Album_Controller extends Controller {
print json_encode(self::child_json_encode($item));
}
+ public function resize_config(){
+ if (upload_configuration::isResize())
+ {
+ print json_encode(array(
+ "resize" => true,
+ "max_width" => upload_configuration::getMaxWidth(),
+ "max_height" => upload_configuration::getMaxHeight()));
+ }
+ else
+ {
+ print json_encode(array("resize" => false));
+ }
+ }
}
\ No newline at end of file
diff --git a/modules/gwtorganise/helpers/gwtorganise_installer.php b/modules/gwtorganise/helpers/gwtorganise_installer.php
index f06e911d..ca3f6842 100644
--- a/modules/gwtorganise/helpers/gwtorganise_installer.php
+++ b/modules/gwtorganise/helpers/gwtorganise_installer.php
@@ -22,6 +22,9 @@ class gwtorganise_installer
{
static function install(){
module::set_version("gwtorganise", 1);
+ upload_configuration::setResize(false);
+ upload_configuration::setMaxWidth(500);
+ upload_configuration::setMaxHeight(400);
}
static function activate() {
}
diff --git a/modules/gwtorganise/helpers/upload_configuration.php b/modules/gwtorganise/helpers/upload_configuration.php
new file mode 100644
index 00000000..41c20770
--- /dev/null
+++ b/modules/gwtorganise/helpers/upload_configuration.php
@@ -0,0 +1,70 @@
+ "gConfigureForm"));
+ $group = $form->group("configure")->label(t("Configure Upload Options"));
+ $group->checkbox("resize")->label(t("Resize before upload"))->id("gResize");
+ $group->input("max_width")->label(t("Max Width"))->id("gMaxWidth");
+ $group->input("max_height")->label(t("Max Height"))->id("gMax Height");
+ $group->submit("")->value(t("Save"));
+ return $form;
+ }
+
+ static function populateForm($form){
+ $form->configure->resize->checked(upload_configuration::isResize());
+ $form->configure->max_width->value(upload_configuration::getMaxWidth());
+ $form->configure->max_height->value(upload_configuration::getMaxHeight());
+ }
+
+ static function extractForm($form){
+ $resize = $form->configure->resize->value;
+ $max_width = $form->configure->max_width->value;
+ $max_height= $form->configure->max_height->value;
+ upload_configuration::setResize($resize);
+ upload_configuration::setMaxWidth($max_width);
+ upload_configuration::setMaxHeight($max_height);
+ }
+
+ static function isResize(){
+ return module::get_var("gwtorganise","resize");
+ }
+
+ static function getMaxWidth(){
+ return intval(module::get_var("gwtorganise","max_width"));
+ }
+
+ static function getMaxHeight(){
+ return intval(module::get_var("gwtorganise","max_height"));
+ }
+
+ static function setResize($isResize){
+ module::set_var("gwtorganise","resize",$isResize);
+ }
+
+ static function setMaxWidth($max_width){
+ module::set_var("gwtorganise","max_width",$max_width);
+ }
+
+ static function setMaxHeight($max_height){
+ module::set_var("gwtorganise","max_height",$max_height);
+ }
+}
\ No newline at end of file
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml b/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml
index 02bcf924..389a35ef 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml
@@ -2,8 +2,10 @@
-
+
+
+
+
@@ -11,4 +13,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java
index 7667005a..cb0be367 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java
@@ -62,7 +62,7 @@ public class Album extends TreeItem {
public Album(JSONObject jsonObject, G3Viewer a_Container)
{
- m_ID = (int)((JSONNumber)jsonObject.get("id")).doubleValue();
+ m_ID = Utils.extractId(jsonObject.get("id"));
m_Title = ((JSONString)jsonObject.get("title")).stringValue();
m_Sort = ((JSONString)jsonObject.get("sort")).stringValue();
@@ -233,7 +233,9 @@ public class Album extends TreeItem {
for (int i = 0; i < jsonArray.size(); ++i)
{
JSONObject jso = (JSONObject)jsonArray.get(i);
- int id = (int)((JSONNumber)jso.get("id")).doubleValue();
+
+
+ int id = Utils.extractId(jso.get("id"));
if (m_IDtoAlbum.containsKey(id))
{
@@ -268,7 +270,7 @@ public class Album extends TreeItem {
* moves the given array of ids to this album
*/
public void moveTo(JSONArray a_Ids){
- Loading.getInstance().loading();
+ Loading.getInstance().loading("Moving Items..");
m_Container.doJSONRequest(G3Viewer.MOVE_TO_ALBUM_URL + getId() + "?sourceids=" + a_Ids.toString(),
new HttpSuccessHandler() {
@@ -287,7 +289,7 @@ public class Album extends TreeItem {
*/
public void rearrangeTo(JSONArray a_Ids, Item m_CompareTo, boolean m_Before){
- Loading.getInstance().loading();
+ Loading.getInstance().loading("Re-arranging..");
String bora = m_Before?"before":"after";
m_Container.doJSONRequest(G3Viewer.REARRANGE_URL + m_CompareTo.getID() + "/" + bora
@@ -334,7 +336,7 @@ public class Album extends TreeItem {
public void select() {
- Loading.getInstance().loading();
+ Loading.getInstance().loading("Loading Contents..");
m_Container.doJSONRequest(G3Viewer.VIEW_CHILDREN_URL + getId(),
new HttpSuccessHandler() {
@@ -362,7 +364,7 @@ public class Album extends TreeItem {
for (int i = 0; i < jsonArray.size(); ++i)
{
jso = (JSONObject)jsonArray.get(i);
- id = (int)((JSONNumber)jso.get("id")).doubleValue();
+ id = Utils.extractId(jso.get("id"));
if (m_IDtoItem.containsKey(id)){
item = m_IDtoItem.get(id);
@@ -414,24 +416,40 @@ public class Album extends TreeItem {
desktop.openFiles(new OpenFilesHandler() {
public void onOpenFiles(OpenFilesEvent event) {
- File[] files = event.getFiles();
- UploadFile uf;
- for (File file : files){
- uf = new UploadFile(Album.this, file);
- m_View.addToView(uf);
- m_UploadQueue.addLast(uf);
- }
-
- if (!m_Running){
- m_Running = true;
- next();
- }
-
+ uploadFiles(event.getFiles());
}
}, false);
}
+ public void uploadFiles(final File[] files){
+
+ m_Container.doJSONRequest(G3Viewer.RESIZE_DETAILS_URL, new HttpSuccessHandler() {
+
+ public void success(JSONValue a_Value) {
+ JSONObject jso = a_Value.isObject();
+ if (jso != null) {
+
+ ResizeOptions ro = new ResizeOptions(jso);
+ UploadFile uf;
+ for (File file : files){
+ uf = new UploadFile(Album.this, file, ro);
+ m_View.addToView(uf);
+ m_UploadQueue.addLast(uf);
+ m_Container.addUpload(uf);
+ }
+
+ if (!m_Running){
+ m_Running = true;
+ next();
+ }
+ }
+ }
+ },false);
+
+
+ }
+
public void addPendingDownloads()
{
for (UploadFile uf: m_UploadQueue)
@@ -443,6 +461,7 @@ public class Album extends TreeItem {
public void finishedUpload(UploadFile uf, JSONValue a_Return)
{
m_UploadQueue.remove(uf);
+ m_Container.removeUpload(uf);
next();
JSONObject jo = a_Return.isObject();
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java
new file mode 100644
index 00000000..03a7aaaf
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java
@@ -0,0 +1,58 @@
+package com.gloopics.g3viewer.client;
+
+import com.gloopics.g3viewer.client.canvas.Canvas;
+
+import com.google.gwt.core.client.RunAsyncCallback;
+import com.google.gwt.gears.client.blob.Blob;
+
+public class AsyncResizer implements RunAsyncCallback{
+
+ private final Blob m_Blob;
+
+ private final UploadFile m_UploadFile;
+
+ private final ResizeOptions m_ResizeOptions;
+
+ public AsyncResizer(Blob a_Blob, UploadFile a_UploadFile){
+ m_Blob = a_Blob;
+ m_UploadFile = a_UploadFile;
+ m_ResizeOptions = a_UploadFile.getResizeOptions();
+ }
+
+ @Override
+ public void onFailure(Throwable reason) {
+ G3Viewer.displayError("Error Resizing image", reason.toString());
+ }
+
+ @Override
+ public void onSuccess() {
+ // resize file
+ Canvas upThumb = com.gloopics.g3viewer.client.canvas.Factory.getInstance().createCanvas();
+ upThumb.decode(m_Blob);
+
+
+ int imageWidth = upThumb.getWidth();
+ int imageHeight = upThumb.getHeight();
+
+ int widthRatio = imageWidth/m_ResizeOptions.getMaxWidth();
+ int heightRatio = imageHeight/m_ResizeOptions.getMaxHeight();
+
+ if (widthRatio > heightRatio){
+ if (widthRatio > 1) {
+ upThumb.resize(m_ResizeOptions.getMaxWidth(), imageHeight / widthRatio );
+ m_UploadFile.uploadBlob(upThumb.encode());
+ }
+ }
+ else
+ {
+ if (heightRatio > 1){
+ upThumb.resize(imageWidth / heightRatio, m_ResizeOptions.getMaxHeight());
+ m_UploadFile.uploadBlob(upThumb.encode());
+ }
+ }
+
+
+ }
+
+
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java
index a05f1f8c..d520319b 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java
@@ -19,6 +19,7 @@ package com.gloopics.g3viewer.client;
import com.allen_sauer.gwt.dnd.client.PickupDragController;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.InputElement;
+import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.RequestBuilder;
@@ -30,6 +31,7 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalSplitPanel;
@@ -128,12 +130,22 @@ public class G3Viewer {
* rotate url
*/
public static final String ROTATE_URL = BASE_URL + "index.php/json_album/rotate/";
-
+
+ /**
+ * Resize details URL
+ */
+ public static final String RESIZE_DETAILS_URL = BASE_URL + "index.php/json_album/resize_config";
+
/*
* tree
*/
private final AlbumTree m_Tree;
+ /**
+ * the info panel
+ */
+ private final InformationBar m_InfoBar;
+
/**
* the only image dialog box
*/
@@ -221,7 +233,9 @@ public class G3Viewer {
m_DragController.setBehaviorDragStartSensitivity(5);
m_DragController.setBehaviorDragProxy(true);
+ m_InfoBar = new InformationBar(this);
m_Tree = new AlbumTree(this);
+
checkAdmin();
}
@@ -293,6 +307,13 @@ public class G3Viewer {
return m_View;
}
+ public void addUpload(UploadFile a_UF){
+ m_InfoBar.addUpload(a_UF);
+ }
+
+ public void removeUpload(UploadFile a_UF){
+ m_InfoBar.removeUpload(a_UF);
+ }
public void doDialog(String a_Url, HttpDialogHandler a_Handler)
@@ -328,8 +349,24 @@ public class G3Viewer {
@Override
public void onError(Throwable aThrowable) {
- displayError("Unexpected Error",
+
+ if (aThrowable.getCause() != null)
+ {
+ StringBuffer stack = new StringBuffer();
+ StackTraceElement[] stes = aThrowable.getCause().getStackTrace();
+ for (StackTraceElement ste: stes){
+ stack.append(ste.toString());
+ stack.append(" \n ");
+ }
+ displayError("a Unexpected Error ",
+ aThrowable.toString() + " - " + a_URL + "\n " + stack.toString());
+
+ }
+ else
+ {
+ displayError("a Unexpected Error ",
aThrowable.toString() + " - " + a_URL);
+ }
}}
));
@@ -356,8 +393,10 @@ public class G3Viewer {
SimplePanel sp = new SimplePanelEx();
sp.add(m_SplitPanel);
-
- RootPanel.get("main").add(sp);
+
+ m_InfoBar.initializeForm();
+ RootPanel.get("main").add(sp);
+ RootPanel.get("main").add(m_InfoBar);
}
}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java
index 8c61e9cd..b40cfc34 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java
@@ -61,7 +61,7 @@ public class HttpDialogBox extends DialogBox{
}
HttpDialogBox.this.hide();
- Loading.getInstance().loading();
+ Loading.getInstance().loading("Please Wait..");
}
});
@@ -155,7 +155,7 @@ public class HttpDialogBox extends DialogBox{
public void doDialog(String url, HttpDialogHandler a_Callback){
m_Callback = a_Callback;
- Loading.getInstance().loading();
+ Loading.getInstance().loading("Please Wait");
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
try {
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java
index 49dda06a..5b95d116 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java
@@ -42,7 +42,7 @@ public class ImageDialogBox extends PopupPanel{
public void doDialog(String a_Image){
- Loading.getInstance().loading();
+ Loading.getInstance().loading("Loading Image..");
if (m_Image != null){
m_Image.removeFromParent();
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java
new file mode 100644
index 00000000..1e26df5d
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java
@@ -0,0 +1,77 @@
+package com.gloopics.g3viewer.client;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Label;
+
+public class InformationBar extends FlowPanel{
+
+ private final G3Viewer m_Container;
+
+ private final Label m_Label = new Label();
+
+ private final Set m_Uploads = new HashSet();
+
+ public InformationBar(G3Viewer a_Container){
+ m_Container = a_Container;
+ setStylePrimaryName("infobar");
+ }
+
+ public void initializeForm(){
+ Anchor button = new Anchor("Upload Options");
+ button.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ m_Container.doDialog("index.php/admin/upload_configure", new HttpDialogHandler() {
+ @Override
+ public void success(String aResult) {
+ }
+ });
+
+
+ }
+ });
+
+ add(button);
+
+ updateInformation();
+ add(m_Label);
+ }
+
+ private void updateInformation()
+ {
+ int size = m_Uploads.size();
+ if (size == 0){
+ m_Label.setText("");
+ }
+ else
+ {
+ if (size == 1){
+ m_Label.setText("Uploading file.");
+ }
+ else{
+ m_Label.setText("Uploading " + size + " files.");
+ }
+
+ }
+ }
+
+ public void addUpload(UploadFile a_Upload)
+ {
+ m_Uploads.add(a_Upload);
+ updateInformation();
+ }
+
+ public void removeUpload(UploadFile a_Upload)
+ {
+ m_Uploads.remove(a_Upload);
+ updateInformation();
+ }
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java
index c2c5744c..46119aa9 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java
@@ -1,5 +1,11 @@
package com.gloopics.g3viewer.client;
+import java.util.Iterator;
+
+import com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile;
+import com.gloopics.g3viewer.client.dnddesktop.DesktopDroppableWidget;
+import com.gloopics.g3viewer.client.dnddesktop.DndDesktopFactory;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.event.dom.client.ContextMenuHandler;
import com.google.gwt.event.dom.client.DoubleClickEvent;
@@ -20,6 +26,7 @@ import com.google.gwt.event.dom.client.MouseWheelHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.gears.client.desktop.File;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
@@ -34,9 +41,10 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.Widget;
-public class Item extends Composite implements HasAllMouseHandlers{
+public class Item extends Composite implements HasAllMouseHandlers, DesktopDroppableWidget{
private final int m_ID;
@@ -69,7 +77,7 @@ public class Item extends Composite implements HasAllMouseHandlers{
m_Container = a_Container;
m_View = a_Container.getView();
m_Parent = a_Parent;
- m_ID = (int)((JSONNumber)a_Value.get("id")).doubleValue();
+ m_ID = Utils.extractId(a_Value.get("id"));
m_Title = ((JSONString)a_Value.get("title")).stringValue();
m_Thumb = ((JSONString)a_Value.get("thumb")).stringValue();
m_Type = ((JSONString)a_Value.get("type")).stringValue();
@@ -78,6 +86,7 @@ public class Item extends Composite implements HasAllMouseHandlers{
m_IsPhoto = m_Type.equals("photo");
FlowPanel dp = new FlowPanel();
+
m_ThumbImage = new Image(m_Thumb);
dp.add(m_ThumbImage);
@@ -114,6 +123,11 @@ public class Item extends Composite implements HasAllMouseHandlers{
},DoubleClickEvent.getType());
a_Container.getDragController().makeDraggable(this);
+
+ if (m_IsAlbum)
+ {
+ ((DndDesktopFactory)GWT.create(DndDesktopFactory.class)).getInstance(this);
+ }
}
@@ -176,6 +190,20 @@ public class Item extends Composite implements HasAllMouseHandlers{
}
public void showPopupMenu(ContextMenuEvent event){
+ Iterator iter = m_Container.getDragController().getSelectedWidgets().iterator();
+
+ // show views popup menu if items are selected
+ if (iter.hasNext())
+ {
+ iter.next();
+ if (iter.hasNext())
+ {
+ m_View.showPopupMenu(event);
+ return;
+ }
+
+ }
+
this.addStyleName("popped");
final PopupPanel popupPanel = new PopupPanel(true);
popupPanel.setAnimationEnabled(true);
@@ -332,6 +360,20 @@ public class Item extends Composite implements HasAllMouseHandlers{
public HandlerRegistration addMouseWheelHandler(MouseWheelHandler handler) {
return addDomHandler(handler, MouseWheelEvent.getType());
}
+
+ @Override
+ public void dropFiles(File[] aFile) {
+ if (m_IsAlbum)
+ {
+ m_LinkedAlbum.uploadFiles(aFile);
+ }
+
+ }
+
+ @Override
+ public Widget getActualWidget() {
+ return this;
+ }
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java
index 9d7fead4..5b453e2f 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java
@@ -1,54 +1,78 @@
package com.gloopics.g3viewer.client;
+
+import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
-public class Loading extends AbsolutePanel{
-
+public class Loading{
+
+ public static final String URL = GWT.getModuleBaseURL() + "loading.gif";
+
private static final Loading INSTANCE = new Loading();
- public static final String URL = "images/loading.gif";
-
- /**
- * the image widget
- */
- private Image m_Image = new Image("images/loading.gif");
+ /**
+ * the image widget
+ */
+ private final Image m_Image = new Image(URL);
+
+ private final Label m_Label = new Label();
+
+ private final HTML m_Back = new HTML();
- private Loading(){
- HTML back = new HTML();
- back.addStyleName("loading");
- add(back, 0, 0);
- Image.prefetch(URL);
- }
-
- /**
- * get instance
- */
- public static Loading getInstance(){
- return INSTANCE;
- }
-
- public void loading(){
- int width = RootPanel.get().getOffsetWidth();
- int height = RootPanel.get().getOffsetHeight();
- height = height / 2 - 25;
- width = width / 2 - 25;
- add(m_Image);
- this.setWidgetPosition(m_Image, width, height);
- RootPanel.get().add(this);
- }
-
- public void endLoading(){
- if (m_Image.isAttached()){
- remove(m_Image);
+ private Loading(){
+ m_Back.addStyleName("loading");
+ m_Label.setStyleName("loading-label");
+ m_Image.setStyleName("loading-image");
}
- RootPanel.get().remove(this);
- }
-
- public void hideAnimation(){
- remove(m_Image);
- }
-
+
+ /**
+ * get instance
+ */
+ public static Loading getInstance(){
+ return INSTANCE;
+ }
+
+ public void loading(String message){
+ RootPanel.get().add(m_Back);
+
+ int width = RootPanel.get().getOffsetWidth();
+ int height = RootPanel.get().getOffsetHeight();
+ height = height / 2 - 20;
+ width = width / 2 - 40;
+ RootPanel.get().add(m_Image, width, height);
+
+ if (message != null)
+ {
+ m_Label.setText(message);
+ RootPanel.get().add(m_Label, 0, height + 45);
+ }
+
+ //RootPanel.get().add(this);
+ }
+
+ public void endLoading(){
+ if (m_Image.isAttached()){
+ RootPanel.get().remove(m_Image);
+ }
+ if (m_Label.isAttached()){
+ RootPanel.get().remove(m_Label);
+ }
+ if (m_Back.isAttached()){
+ RootPanel.get().remove(m_Back);
+ }
+ }
+
+ public void hideAnimation(){
+ if (m_Image.isAttached()){
+ RootPanel.get().remove(m_Image);
+ }
+ if (m_Label.isAttached()){
+ RootPanel.get().remove(m_Label);
+ }
+ }
+
}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java
new file mode 100644
index 00000000..e83c21bd
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java
@@ -0,0 +1,50 @@
+package com.gloopics.g3viewer.client;
+
+import com.google.gwt.json.client.JSONBoolean;
+import com.google.gwt.json.client.JSONNumber;
+import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONString;
+
+public class ResizeOptions {
+
+ private final boolean m_Resize;
+
+ private final int m_MaxWidth;
+
+ private final int m_MaxHeight;
+
+
+ public ResizeOptions(JSONObject a_Value){
+ JSONBoolean jbool = a_Value.get("resize").isBoolean();
+ if (jbool == null)
+ {
+ throw new RuntimeException("JBool was null.");
+ }
+ m_Resize = jbool.booleanValue();
+ if (m_Resize)
+ {
+ m_MaxWidth = Integer.parseInt(a_Value.get("max_width").toString());
+ m_MaxHeight = Integer.parseInt(a_Value.get("max_height").toString());
+ }
+ else
+ {
+ m_MaxWidth = 0;
+ m_MaxHeight = 0;
+ }
+ }
+
+ public boolean isResize()
+ {
+ return m_Resize;
+ }
+
+ public int getMaxHeight()
+ {
+ return m_MaxHeight;
+ }
+
+ public int getMaxWidth()
+ {
+ return m_MaxWidth;
+ }
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java
index 1d858d44..ef234ab4 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java
@@ -1,19 +1,28 @@
package com.gloopics.g3viewer.client;
-import com.google.gwt.user.client.ui.AbsolutePanel;
+import com.gloopics.g3viewer.client.canvas.Canvas;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.gears.client.Factory;
+import com.google.gwt.gears.client.blob.Blob;
import com.google.gwt.gears.client.desktop.File;
import com.google.gwt.gears.client.httprequest.HttpRequest;
import com.google.gwt.gears.client.httprequest.ProgressEvent;
import com.google.gwt.gears.client.httprequest.ProgressHandler;
import com.google.gwt.gears.client.httprequest.RequestCallback;
+import com.google.gwt.gears.client.localserver.ResourceStore;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
-public class UploadFile extends AbsolutePanel{
+public class UploadFile extends Composite{
+ private final static ResourceStore RS = Factory.getInstance().createLocalServer().createStore("temp");
+
+
private class ProgressBar extends SimplePanel{
private final SimplePanel m_ProgressInner;
public ProgressBar(){
@@ -29,35 +38,66 @@ public class UploadFile extends AbsolutePanel{
}
}
- private final File m_LocalFile;
+ private final ResizeOptions m_ResizeOptions;
private final String m_Name;
private final Album m_Parent;
- //private final Label m_PendingLabel = new Label("Upload Pending");
+ private final Blob m_Blob;
+
+ //private final Canvas m_UpThumb;
+
+ private final Label m_Label = new Label("Pending..");
private final ProgressBar m_ProgressBar = new ProgressBar();
- public UploadFile(Album a_Parent, File a_File){
+
+ /**
+ * Loads an image into this Canvas, replacing the Canvas' current dimensions
+ * and contents.
+ *
+ * @param blob The Blob to decode. The image should be in PNG or JPEG format.
+ */
+ public final native void captureBlob(ResourceStore rs, Blob blob, String a_Url) /*-{
+ rs.captureBlob(blob, a_Url, "image/JPEG");
+ }-*/;
+
+ /**
+ * Loads an image into this Canvas, replacing the Canvas' current dimensions
+ * and contents.
+ *
+ * @param blob The Blob to decode. The image should be in PNG or JPEG format.
+ */
+ public final native void removeCapture(ResourceStore rs, String a_Url) /*-{
+ rs.remove(a_Url);
+ }-*/;
+
+ public UploadFile(Album a_Parent, File a_File, ResizeOptions a_ResizeOptions){
+ m_ResizeOptions = a_ResizeOptions;
m_Parent = a_Parent;
- m_LocalFile = a_File;
m_Name = a_File.getName();
- Label name = new Label(m_Name);
- name.addStyleName("label");
- add(name,5,20);
+ m_Blob = a_File.getBlob();
+ captureBlob(RS, m_Blob , m_Name);
+
+ Image img = new Image(m_Name);
+ FlowPanel dp = new FlowPanel();
- add(m_ProgressBar,0,80);
+ dp.add(img);
+
+ dp.add(m_ProgressBar);
+ dp.add(m_Label);
+
+ initWidget(dp);
setStylePrimaryName("item");
addStyleName("iUpload");
}
- public void startUpload(){
+ protected void uploadBlob(Blob a_Blob){
+ m_Label.setText("Uploading..");
HttpRequest request = Factory.getInstance().createHttpRequest();
request.open("POST", G3Viewer.UPLOAD_URL + m_Parent.getId() + "?filename="
+ m_Name + "&csrf=" + G3Viewer.getCSRF());
- //request.setRequestHeader("Content-Type", "image/jpg");
- //request.setRequestHeader("Content-Type", "image/jpg");
request.getUpload().setProgressHandler(new ProgressHandler() {
@@ -78,17 +118,39 @@ public class UploadFile extends AbsolutePanel{
{
G3Viewer.displayError("Upload Error", request.getResponseText() + request.getStatus() + request.getStatusText());
}
+ removeCapture(RS, m_Name);
+
try{
- JSONValue jv = JSONParser.parse(request.getResponseText());
- m_Parent.finishedUpload(UploadFile.this, jv);
- } catch (Exception e)
- {
+ JSONValue jv = JSONParser.parse(request.getResponseText());
+ m_Parent.finishedUpload(UploadFile.this, jv);
+ }
+ catch (Exception e){
G3Viewer.displayError("Exception on Upload", e.toString() + " " + request.getResponseText());
}
+
+
}
});
- request.send(m_LocalFile.getBlob());
+ request.send(a_Blob);
+
+ }
+
+ public ResizeOptions getResizeOptions(){
+ return m_ResizeOptions;
+ }
+
+ public void startUpload(){
+
+ if (m_ResizeOptions.isResize())
+ {
+ m_Label.setText("Resizing..");
+ GWT.runAsync(new AsyncResizer(m_Blob, this));
+ }
+ else
+ {
+ uploadBlob(m_Blob);
+ }
}
}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java
new file mode 100644
index 00000000..f1432276
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java
@@ -0,0 +1,18 @@
+package com.gloopics.g3viewer.client;
+
+import com.google.gwt.json.client.JSONNumber;
+import com.google.gwt.json.client.JSONValue;
+
+public class Utils {
+ public static int extractId(JSONValue a_Value){
+ JSONNumber jn = a_Value.isNumber();
+ if (jn != null){
+ return (int) jn.doubleValue();
+ }
+ else{
+ String val = a_Value.isString().stringValue();
+ return Integer.parseInt(val);
+ }
+ }
+
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java
index 602db116..7035683c 100644
--- a/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java
@@ -3,17 +3,35 @@ package com.gloopics.g3viewer.client;
import java.util.ArrayList;
import java.util.List;
+import com.allen_sauer.gwt.dnd.client.DragController;
+import com.allen_sauer.gwt.dnd.client.PickupDragController;
+import com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile;
+import com.gloopics.g3viewer.client.dnddesktop.DesktopDroppableWidget;
+import com.gloopics.g3viewer.client.dnddesktop.DndDesktopFactory;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ContextMenuEvent;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.gears.client.desktop.File;
+import com.google.gwt.json.client.JSONValue;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.MenuBar;
+import com.google.gwt.user.client.ui.MenuItem;
+import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;
-public class View extends FlowPanel{
+public class View extends FlowPanel implements DesktopDroppableWidget{
/**
* the current album being viewed
*/
private Album m_Album;
+
/**
* the list of drop zones
*/
@@ -24,12 +42,15 @@ public class View extends FlowPanel{
public View(G3Viewer a_Container){
m_Container = a_Container;
+ ((DndDesktopFactory)GWT.create(DndDesktopFactory.class)).getInstance(this);
}
+
private void clearView(){
+ PickupDragController pdc = m_Container.getDragController();
if (m_DropZones.size() > 0){
for (DropZoneController dropController : m_DropZones){
- m_Container.getDragController().unregisterDropController(dropController);
+ pdc.unregisterDropController(dropController);
}
m_DropZones.clear();
}
@@ -39,6 +60,7 @@ public class View extends FlowPanel{
((Item)widget).hidding();
}
}
+ pdc.clearSelection();
clear();
}
@@ -93,6 +115,58 @@ public class View extends FlowPanel{
public Album getCurrentAlbum(){
return m_Album;
}
+
+
+ @Override
+ public void dropFiles(File[] aFile) {
+ if (m_Album != null){
+ m_Album.uploadFiles(aFile);
+ }
+ }
+
+
+ @Override
+ public Widget getActualWidget() {
+ return this;
+ }
+
+ public void showPopupMenu(ContextMenuEvent event){
+ final PopupPanel popupPanel = new PopupPanel(true);
+ popupPanel.setAnimationEnabled(true);
+ popupPanel.setStyleName("popup");
+ MenuBar popupMenuBar = new MenuBar(true);
+
+ MenuItem deleteItem = new MenuItem("Delete Selected Items", true, new Command() {
+
+ @Override
+ public void execute() {
+ /*
+ m_Container.doDialog("index.php/quick/form_delete/" + m_ID, new HttpDialogHandler() {
+ public void success(String aResult) {
+ m_View.removeFromView(Item.this);
+ if (m_LinkedAlbum != null){
+ m_LinkedAlbum.remove();
+ }
+ }
+ });
+ */
+ popupPanel.hide();
+
+ }
+ });
+ deleteItem.addStyleName("popup-item");
+ popupMenuBar.addItem(deleteItem);
+
+ popupMenuBar.setVisible(true);
+ popupPanel.add(popupMenuBar);
+
+ int x = DOM.eventGetClientX((Event)event.getNativeEvent());
+ int y = DOM.eventGetClientY((Event)event.getNativeEvent());
+ popupPanel.setPopupPosition(x, y);
+
+ popupPanel.show();
+
+ }
}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java
new file mode 100644
index 00000000..3e47a126
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java
@@ -0,0 +1,178 @@
+/*
+ * 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.gloopics.g3viewer.client.canvas;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.gears.client.blob.Blob;
+
+/**
+ * The Canvas module is a graphics API that is inspired by the HTML5 canvas, with additional methods to decode from and encode to
+ * binary formats (such as PNG and JPEG), represented by Blobs. A Gears Canvas
+ * is not yet a complete implementation of the HTML5 canvas specification, and
+ * there are two significant differences:
+ *
+ *
A Gears Canvas is off-screen, in that creating a Canvas object doesn't
+ * directly paint any pixels on the screen. Furthermore, for technical reasons,
+ * a Gears Canvas is not a DOM Element. On the other hand, you can create a
+ * Gears Canvas in a Worker.
+ *
A Gears Canvas does not implement getContext, and in
+ * particular does not provide a 2D context.
+ *
+ *
+ * Permission
+ *
+ * This API requires user permission. If you would like to customize the default
+ * dialog, you can explicitly call
+ * {@link com.google.gwt.gears.client.Factory#getPermission()}.
+ */
+public class Canvas extends JavaScriptObject {
+
+ public static final String MIMETYPE_JPEG = "image/jpeg";
+ public static final String MIMETYPE_PNG = "image/png";
+
+ protected Canvas() {
+ // required for overlay types
+ }
+
+ /**
+ * Crops the Canvas. The crop happens "in-place", as opposed to returning a
+ * new Canvas.
+ *
+ * @param x The left co-ordinate of the crop rectangle.
+ * @param y The top co-ordinate of the crop rectangle.
+ * @param w The width of the crop rectangle.
+ * @param h The height of the crop rectangle.
+ */
+ public final native void crop(int x, int y, int w, int h) /*-{
+ this.crop(x, y, w, h);
+ }-*/;
+
+ /**
+ * Loads an image into this Canvas, replacing the Canvas' current dimensions
+ * and contents.
+ *
+ * @param blob The Blob to decode. The image should be in PNG or JPEG format.
+ */
+ public final native void decode(Blob blob) /*-{
+ this.decode(blob);
+ }-*/;
+
+ /**
+ * Saves the Canvas' contents to PNG format.
+ *
+ * @return A new Blob encoding the Canvas' image data.
+ */
+ public final native Blob encode() /*-{
+ return this.encode();
+ }-*/;
+
+ /**
+ * Saves the Canvas' contents to a binary format, such as PNG or JPEG.
+ *
+ * @param mimeType The image format to encode to. Valid values include
+ * "image/png" and "image/jpeg".
+ * @return A new Blob encoding the Canvas' image data.
+ */
+ public final native Blob encode(String mimeType) /*-{
+ return this.encode(mimeType);
+ }-*/;
+
+ /**
+ * Saves the Canvas' contents to JPEG format.
+ *
+ * @param quality the JPEG quality as a number between 0.0 and 1.0 inclusive.
+ * @return A new Blob encoding the Canvas' image data.
+ */
+ public final native Blob encodeJpeg(float quality) /*-{
+ return this.encode("image/jpeg", { quality: quality });
+ }-*/;
+
+ /**
+ * Returns the height of the Canvas. The default value is 150.
+ *
+ * @return the canvas height.
+ */
+ public final native int getHeight()/*-{
+ return this.height;
+ }-*/;
+
+ /**
+ * Returns the width of the Canvas. The default value is 300.
+ *
+ * @return the canvas width.
+ */
+ public final native int getWidth() /*-{
+ return this.width;
+ }-*/;
+
+ /**
+ * Resizes the Canvas. The resize happens "in-place", as opposed to returning
+ * a new Canvas.
+ *
+ * Uses bi-linear filtering.
+ *
+ * @param w The new width.
+ * @param h The new height.
+ */
+ public final native void resize(int w, int h) /*-{
+ this.resize(w, h);
+ }-*/;
+
+ /**
+ * Resizes the Canvas. The resize happens "in-place", as opposed to returning
+ * a new Canvas.
+ *
+ * @param w The new width.
+ * @param h The new height.
+ * @param filter The image filter.
+ */
+ public final void resize(int w, int h, ResizeFilter filter) {
+ resize(w, h, filter.getFilter());
+ }
+
+ /**
+ * Resizes the Canvas. The resize happens "in-place", as opposed to returning
+ * a new Canvas.
+ *
+ * @param w The new width.
+ * @param h The new height.
+ * @param filter A string specifying the image filter. There are two options:
+ * "nearest" for nearest-neighbor filtering, and "bilinear" for
+ * bi-linear filtering.
+ */
+ public final native void resize(int w, int h, String filter) /*-{
+ this.resize(w, h, filter);
+ }-*/;
+
+ /**
+ * Sets the height of the Canvas. The default value is 150.
+ *
+ * @param height the canvas height.
+ */
+ public final native void setHeight(int height) /*-{
+ this.height = height;
+ }-*/;
+
+ /**
+ * Sets the width of the Canvas. The default value is 300.
+ *
+ * @param width the canvas width.
+ */
+ public final native void setWidth(int width) /*-{
+ this.width = width;
+ }-*/;
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java
new file mode 100644
index 00000000..8ac5ba59
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java
@@ -0,0 +1,69 @@
+/*
+ * 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.gloopics.g3viewer.client.canvas;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+/**
+ * Factory class used to create all other Gears objects.
+ */
+public final class Factory extends JavaScriptObject {
+ /**
+ * String used to request a BlobBuilder instance from Gears.
+ */
+ public static final String BLOBBUILDER = "beta.blobbuilder";
+
+ /**
+ * String used to request a Canvas instance from Gears.
+ */
+ public static final String CANVAS = "beta.canvas";
+
+
+ /**
+ * Returns the singleton instance of the Factory class or null
+ * if Gears is not installed or accessible.
+ *
+ * @return singleton instance of the Factory class or null if
+ * Gears is not installed or accessible
+ */
+ public static native Factory getInstance() /*-{
+ return $wnd.google && $wnd.google.gears && $wnd.google.gears.factory;
+ }-*/;
+
+ protected Factory() {
+ // Required for overlay types
+ }
+
+ /**
+ * Creates a new {@link Canvas} instance.
+ *
+ * @return a new {@link Canvas} instance
+ */
+ public Canvas createCanvas() {
+ return create(CANVAS);
+ }
+
+ /**
+ * Creates an instance of the specified Gears object.
+ *
+ * @param Gears object type to return
+ * @param className name of the object to create
+ * @return an instance of the specified Gears object
+ */
+ private native T create(String className) /*-{
+ return this.create(className);
+ }-*/;
+}
\ No newline at end of file
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java
new file mode 100644
index 00000000..198ad8ea
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.gloopics.g3viewer.client.canvas;
+
+/**
+ * Filters used when resizing a Canvas.
+ */
+public enum ResizeFilter {
+ NEAREST {
+ @Override
+ public String getFilter() {
+ return "nearest";
+ }
+ },
+ BILINEAR {
+ @Override
+ public String getFilter() {
+ return "bilinear";
+ }
+ };
+
+ public abstract String getFilter();
+}
\ No newline at end of file
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java
new file mode 100644
index 00000000..17373305
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java
@@ -0,0 +1,61 @@
+package com.gloopics.g3viewer.client.dnddesktop;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.gears.client.Factory;
+import com.google.gwt.gears.client.desktop.Desktop;
+import com.google.gwt.gears.client.desktop.File;
+import com.google.gwt.user.client.ui.Widget;
+
+public abstract class DesktopDropBase {
+ private final DesktopDroppableWidget m_DropFile;
+ protected final Widget m_Widget;
+ private final Desktop m_Desktop;
+
+ public DesktopDropBase (DesktopDroppableWidget a_Widget){
+ m_DropFile = a_Widget;
+ m_Widget = a_Widget.getActualWidget();
+
+ m_Desktop = Factory.getInstance().createDesktop();
+ }
+
+ public void onDragEnter(JavaScriptObject e)
+ {
+ m_Widget.addStyleName("drop-target");
+ setDropEffect(m_Desktop, e);
+ finishDrag(e);
+ }
+
+ public final native void finishDrag(JavaScriptObject e) /*-{
+ if (e.stopPropagation) e.stopPropagation();
+ else e.cancelBubble = true;
+ if (e.preventDefault) e.preventDefault();
+ else e.returnValue = false;
+ }-*/;
+
+ public void onDragLeave(JavaScriptObject e)
+ {
+ m_Widget.removeStyleName("drop-target");
+ finishDrag(e);
+
+ }
+
+ public void onDrop(JavaScriptObject e)
+ {
+ File[] files = getDragData(m_Desktop, e);
+ if (files != null)
+ {
+ m_DropFile.dropFiles(files);
+ }
+
+ onDragLeave(e);
+ }
+
+ public final native File[] getDragData(Desktop d, JavaScriptObject e) /*-{
+ var data = d.getDragData(e, 'application/x-gears-files');
+ return data && data.files;
+ }-*/;
+
+ public final native File[] setDropEffect(Desktop d, JavaScriptObject e) /*-{
+ var data = d.setDropEffect(e, 'copy');
+ }-*/;
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java
new file mode 100644
index 00000000..c44f7eea
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java
@@ -0,0 +1,69 @@
+package com.gloopics.g3viewer.client.dnddesktop;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.gears.client.Factory;
+import com.google.gwt.gears.client.desktop.Desktop;
+import com.google.gwt.gears.client.desktop.File;
+import com.google.gwt.user.client.Window.Navigator;
+import com.google.gwt.user.client.ui.Widget;
+
+public class DesktopDropFile extends DesktopDropBase{
+
+ public DesktopDropFile(DesktopDroppableWidget a_Widget){
+ super(a_Widget);
+ String nav = Navigator.getUserAgent().toLowerCase();
+
+ addDropEvents(m_Widget.getElement());
+ }
+
+
+ public native void addDropEvents(Element e) /*-{
+ var t = this;
+
+ e.addEventListener('dragenter',
+ function(e)
+ {
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDragEnter(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ }
+ , false);
+
+
+ e.addEventListener('dragleave',
+ function(e)
+ {
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDragLeave(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ }
+ , false);
+
+ e.addEventListener('dragexit',
+ function(e)
+ {
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDragLeave(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ }
+ , false);
+
+ e.addEventListener('dragover',
+ function(e)
+ {
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::finishDrag(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ }
+ , false);
+
+ e.addEventListener('dragdrop',
+ function(e)
+ {
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDrop(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ }
+ , false);
+
+ e.addEventListener('drop',
+ function(e)
+ {
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDrop(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ }
+ , false);
+
+ }-*/;
+
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java
new file mode 100644
index 00000000..ae0773d0
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java
@@ -0,0 +1,44 @@
+package com.gloopics.g3viewer.client.dnddesktop;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.Element;
+
+public class DesktopDropFileIE extends DesktopDropBase{
+
+ public DesktopDropFileIE(DesktopDroppableWidget a_Widget){
+ super(a_Widget);
+ addDropEvents(m_Widget.getElement());
+ }
+
+
+ public native void addDropEvents(Element e) /*-{
+ var t = this;
+ e.attachEvent('ondragenter',
+ function(e){
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDragEnter(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ return false;
+
+ });
+
+ e.attachEvent('ondragover',
+ function(e){
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::finishDrag(Lcom/google/gwt/core/client/JavaScriptObject;)(e);
+ return false;
+ });
+
+ e.attachEvent('ondragleave',
+ function(e){
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDragLeave(Lcom/google/gwt/core/client/JavaScriptObject;)(e)
+ return false;
+ });
+
+ e.attachEvent('ondrop',
+ function(e){
+ t.@com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile::onDrop(Lcom/google/gwt/core/client/JavaScriptObject;)(e)
+ return false;
+ });
+
+ }-*/;
+
+
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java
new file mode 100644
index 00000000..a3efaaf0
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java
@@ -0,0 +1,11 @@
+package com.gloopics.g3viewer.client.dnddesktop;
+
+import com.google.gwt.gears.client.desktop.File;
+import com.google.gwt.user.client.ui.Widget;
+
+public interface DesktopDroppableWidget {
+
+ Widget getActualWidget();
+
+ void dropFiles(File[] a_File);
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java
new file mode 100644
index 00000000..14939d25
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java
@@ -0,0 +1,9 @@
+package com.gloopics.g3viewer.client.dnddesktop;
+
+public class DndDesktopFactory {
+
+ public DesktopDropBase getInstance(DesktopDroppableWidget a_Widget)
+ {
+ return new DesktopDropFile(a_Widget);
+ }
+}
diff --git a/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java
new file mode 100644
index 00000000..d0ab032f
--- /dev/null
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java
@@ -0,0 +1,9 @@
+package com.gloopics.g3viewer.client.dnddesktop;
+
+public class DndDesktopFactoryIE extends DndDesktopFactory{
+
+ public DesktopDropBase getInstance(DesktopDroppableWidget a_Widget)
+ {
+ return new DesktopDropFileIE(a_Widget);
+ }
+}
diff --git a/modules/gwtorganise/war/G3viewer.css b/modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css
similarity index 76%
rename from modules/gwtorganise/war/G3viewer.css
rename to modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css
index 622f3c48..e9b7d304 100644
--- a/modules/gwtorganise/war/G3viewer.css
+++ b/modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css
@@ -4,16 +4,20 @@
.error {width:300px; height:200px;}
-.item {width:100px; height: 100px; padding:3px; border: 2px solid #FFF; overflow: hidden; float:left; text-align:center; position:relative;margin:3px;}
+.item {width:100px; height: 130px; padding:3px; border: 2px solid #FFF; overflow: hidden; float:left; text-align:center; position:relative;margin:3px;}
.item img{max-width:96px; max-height:76px; *width:96px; *height:76px; border:2px solid #AAA;}
.item h3{font-size:10px; font-weight:normal; position:absolute; bottom:5px; left:0px; width:100%; text-align:center; padding:0; margin:0;}
.ialbum {background-color: #e3effb; border: 2px solid #91c0ef; }
.popped {background-color: #e3effb;}
-.view {padding:3px;}
+.view {height: 100%;}
.DropZone {height: 100px; width:6px; margin: 0 -3px 0 -3px; padding: 0; float:left; text-align:center; position:relative;}
-
-.loading{position:absolute; top:0px; left:0px; width:100%; height: 100%; background-color:#888; opacity: 0.3; filter: alpha(opacity = 30);}
-
+.infobar {background-color: #fff; position: absolute; bottom:0px; border-width: 4px 4px 0 4px; border-style: solid;
+ border-color: #d2e1f6; height: 15px; width: 240px; right: 50px; font-size:10px; padding: 2px 5px 1px 5px;}
+.infobar div {float:right; }
+.infobar a {float:left;}
+.loading{position:absolute; top:0px; left:0px; width:100%; height: 100%; background-color:#FFF; opacity: 0.7; filter: alpha(opacity = 70);}
+.loading-label{z-index:10; position:absolute; width:100%; left:0px; text-align:center;}
+.loading-image{z-index:10;}
.gwt-TreeItem-selected .Tree-Album {background-color: #333; color: #FFF;}
.Tree-Album {padding: 1px;}
.Tree-Album:hover{text-decoration:underline;}
diff --git a/modules/gwtorganise/war/images/loading.gif b/modules/gwtorganise/src/com/gloopics/g3viewer/public/loading.gif
similarity index 100%
rename from modules/gwtorganise/war/images/loading.gif
rename to modules/gwtorganise/src/com/gloopics/g3viewer/public/loading.gif
diff --git a/modules/gwtorganise/views/gwtorganise_view.html.php b/modules/gwtorganise/views/gwtorganise_view.html.php
index 7f246ec5..25d4a702 100644
--- a/modules/gwtorganise/views/gwtorganise_view.html.php
+++ b/modules/gwtorganise/views/gwtorganise_view.html.php
@@ -1,6 +1,6 @@
$base = url::base(false, "http");
- $url = "$base/modules/gwtorganise/war/index.php?url=$base";
+ $url = $base."modules/gwtorganise/war/index.php?url=".urlencode($base);
?>
diff --git a/modules/gwtorganise/war/WEB-INF/appengine-web.xml b/modules/gwtorganise/war/WEB-INF/appengine-web.xml
deleted file mode 100644
index 99223a5a..00000000
--- a/modules/gwtorganise/war/WEB-INF/appengine-web.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- 1
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml b/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml
new file mode 100644
index 00000000..5f56aa19
--- /dev/null
+++ b/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml
new file mode 100644
index 00000000..389a35ef
--- /dev/null
+++ b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class
new file mode 100644
index 00000000..03e8d371
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class
new file mode 100644
index 00000000..75765a5c
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class
new file mode 100644
index 00000000..91129746
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class
new file mode 100644
index 00000000..8e6d5234
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class
new file mode 100644
index 00000000..ab033485
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class
new file mode 100644
index 00000000..fbc37486
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class
new file mode 100644
index 00000000..7a0a2b59
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class
new file mode 100644
index 00000000..cf455ca2
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class
new file mode 100644
index 00000000..66118607
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5$1.class
new file mode 100644
index 00000000..33365323
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class
new file mode 100644
index 00000000..6db9d264
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class
new file mode 100644
index 00000000..a4ac7459
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class
new file mode 100644
index 00000000..25eddc4f
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class
new file mode 100644
index 00000000..35d138d2
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class
new file mode 100644
index 00000000..4260f422
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class
new file mode 100644
index 00000000..ee9e0a6e
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class
new file mode 100644
index 00000000..d6a3aa43
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class
new file mode 100644
index 00000000..b5142ea0
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class
new file mode 100644
index 00000000..0f8db508
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class
new file mode 100644
index 00000000..b540915a
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class
new file mode 100644
index 00000000..392ed4f2
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class
new file mode 100644
index 00000000..f8fed7cf
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class
new file mode 100644
index 00000000..28ec08b1
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class
new file mode 100644
index 00000000..3b9c4601
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class
new file mode 100644
index 00000000..b7fe6c19
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class
new file mode 100644
index 00000000..7075faa5
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class
new file mode 100644
index 00000000..f2b3519f
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class
new file mode 100644
index 00000000..d54caa33
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class
new file mode 100644
index 00000000..a7ce7a58
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class
new file mode 100644
index 00000000..a872cfc3
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class
new file mode 100644
index 00000000..620a5286
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class
new file mode 100644
index 00000000..454e2fe2
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class
new file mode 100644
index 00000000..7d9a5c74
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class
new file mode 100644
index 00000000..18bd62d6
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class
new file mode 100644
index 00000000..ced48bc3
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class
new file mode 100644
index 00000000..f5dc523a
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class
new file mode 100644
index 00000000..bce80447
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class
new file mode 100644
index 00000000..d390264c
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class
new file mode 100644
index 00000000..c1ff1330
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class
new file mode 100644
index 00000000..6d9c834b
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class
new file mode 100644
index 00000000..6ffb0d5b
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class
new file mode 100644
index 00000000..e09159d3
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class
new file mode 100644
index 00000000..bebe68d3
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class
new file mode 100644
index 00000000..444af50b
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class
new file mode 100644
index 00000000..cd9258fa
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class
new file mode 100644
index 00000000..4f3fe711
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class
new file mode 100644
index 00000000..2ace32b3
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class
new file mode 100644
index 00000000..a6073ad0
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class
new file mode 100644
index 00000000..61e51f61
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class
new file mode 100644
index 00000000..082b7397
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class
new file mode 100644
index 00000000..329187d4
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class
new file mode 100644
index 00000000..5d43e6be
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class
new file mode 100644
index 00000000..de9cac81
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class
new file mode 100644
index 00000000..c02cd8b3
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class
new file mode 100644
index 00000000..f9fe4dc4
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class
new file mode 100644
index 00000000..9a4a1041
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class
new file mode 100644
index 00000000..77c496c5
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class
new file mode 100644
index 00000000..3d90297b
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class
new file mode 100644
index 00000000..78d986d0
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class
new file mode 100644
index 00000000..05ed41b1
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class
new file mode 100644
index 00000000..a193937b
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/NoGears.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/NoGears.class
new file mode 100644
index 00000000..268a3117
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/NoGears.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class
new file mode 100644
index 00000000..dc4050a7
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class
new file mode 100644
index 00000000..bc8f7ecb
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class
new file mode 100644
index 00000000..4b915dda
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class
new file mode 100644
index 00000000..d01d465d
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class
new file mode 100644
index 00000000..9d888857
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class
new file mode 100644
index 00000000..3c7d9d9e
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class
new file mode 100644
index 00000000..71b9cb7e
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class
new file mode 100644
index 00000000..ec1a7780
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class
new file mode 100644
index 00000000..e3224e8c
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class
new file mode 100644
index 00000000..8431ae44
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class
new file mode 100644
index 00000000..a7211aca
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class
new file mode 100644
index 00000000..de43b25f
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class
new file mode 100644
index 00000000..e7a21338
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class
new file mode 100644
index 00000000..b6e58e1d
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class
new file mode 100644
index 00000000..0f3950bb
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class
new file mode 100644
index 00000000..b7717c7e
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class
new file mode 100644
index 00000000..9aaaf96d
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class
new file mode 100644
index 00000000..ebf79bbf
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class
new file mode 100644
index 00000000..b31054d1
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css
new file mode 100644
index 00000000..e9b7d304
--- /dev/null
+++ b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css
@@ -0,0 +1,44 @@
+* {padding:0; margin:0;}
+
+#main {position:relative; width:100%; height:100%}
+
+.error {width:300px; height:200px;}
+
+.item {width:100px; height: 130px; padding:3px; border: 2px solid #FFF; overflow: hidden; float:left; text-align:center; position:relative;margin:3px;}
+.item img{max-width:96px; max-height:76px; *width:96px; *height:76px; border:2px solid #AAA;}
+.item h3{font-size:10px; font-weight:normal; position:absolute; bottom:5px; left:0px; width:100%; text-align:center; padding:0; margin:0;}
+.ialbum {background-color: #e3effb; border: 2px solid #91c0ef; }
+.popped {background-color: #e3effb;}
+.view {height: 100%;}
+.DropZone {height: 100px; width:6px; margin: 0 -3px 0 -3px; padding: 0; float:left; text-align:center; position:relative;}
+.infobar {background-color: #fff; position: absolute; bottom:0px; border-width: 4px 4px 0 4px; border-style: solid;
+ border-color: #d2e1f6; height: 15px; width: 240px; right: 50px; font-size:10px; padding: 2px 5px 1px 5px;}
+.infobar div {float:right; }
+.infobar a {float:left;}
+.loading{position:absolute; top:0px; left:0px; width:100%; height: 100%; background-color:#FFF; opacity: 0.7; filter: alpha(opacity = 70);}
+.loading-label{z-index:10; position:absolute; width:100%; left:0px; text-align:center;}
+.loading-image{z-index:10;}
+.gwt-TreeItem-selected .Tree-Album {background-color: #333; color: #FFF;}
+.Tree-Album {padding: 1px;}
+.Tree-Album:hover{text-decoration:underline;}
+.drop-target{background-color: #91c0ef; color: #000;}
+
+.popup {padding: 2px; border: 1px solid #91c0ef;background-color:#FFF}
+
+.dialog fieldset{ border: none; padding: 0px; margin: 0px;}
+.dialog legend{ display: none;}
+.dialog ul {padding:0; margin:0;}
+.dialog ul ul li {float:left;}
+.dialog li {list-style: none; padding:0;margin:0;}
+.dialog form input[type="password"], .dialog form input[type="text"], .dialog form textarea .dialog form select {border: 1px solid #000; padding: 0.2em; display:block; clear: both;}
+.dialog form input[type="password"], .dialog form input[type="text"], .dialog form textarea {width: 100%}
+.dialog form textarea {height: 12em;}
+
+.label {width:90px; text-align:center;}
+.progressBar {border: 1px solid #cccccc; width: 100px; height: 10px;}
+.progessInner {background: #34628c;width: 0px;height: 10px;}
+
+.dContents {padding: 2px 5px 2px 5px;}
+.dButtons {text-align: right}
+
+.hideme {overflow:hidden; width:0; height:0; margin:0; padding:0;}
\ No newline at end of file
diff --git a/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif
new file mode 100644
index 00000000..8f56a82c
Binary files /dev/null and b/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif differ
diff --git a/modules/gwtorganise/war/WEB-INF/classes/log4j.properties b/modules/gwtorganise/war/WEB-INF/classes/log4j.properties
new file mode 100644
index 00000000..d9c3edc9
--- /dev/null
+++ b/modules/gwtorganise/war/WEB-INF/classes/log4j.properties
@@ -0,0 +1,24 @@
+# A default log4j configuration for log4j users.
+#
+# To use this configuration, deploy it into your application's WEB-INF/classes
+# directory. You are also encouraged to edit it as you like.
+
+# Configure the console as our one appender
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n
+
+# tighten logging on the DataNucleus Categories
+log4j.category.DataNucleus.JDO=WARN, A1
+log4j.category.DataNucleus.Persistence=WARN, A1
+log4j.category.DataNucleus.Cache=WARN, A1
+log4j.category.DataNucleus.MetaData=WARN, A1
+log4j.category.DataNucleus.General=WARN, A1
+log4j.category.DataNucleus.Utility=WARN, A1
+log4j.category.DataNucleus.Transaction=WARN, A1
+log4j.category.DataNucleus.Datastore=WARN, A1
+log4j.category.DataNucleus.ClassLoading=WARN, A1
+log4j.category.DataNucleus.Plugin=WARN, A1
+log4j.category.DataNucleus.ValueGeneration=WARN, A1
+log4j.category.DataNucleus.Enhancer=WARN, A1
+log4j.category.DataNucleus.SchemaTool=WARN, A1
diff --git a/modules/gwtorganise/war/WEB-INF/logging.properties b/modules/gwtorganise/war/WEB-INF/logging.properties
deleted file mode 100644
index 4a78b7f3..00000000
--- a/modules/gwtorganise/war/WEB-INF/logging.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-# A default java.util.logging configuration.
-# (All App Engine logging is through java.util.logging by default).
-#
-# To use this configuration, copy it into your application's WEB-INF
-# folder and add the following to your appengine-web.xml:
-#
-#
-#
-#
-#
-
-# Set the default logging level for all loggers to WARNING
-.level = WARNING
-
-# Set the default logging level for ORM, specifically, to WARNING
-DataNucleus.JDO.level=WARNING
-DataNucleus.Persistence.level=WARNING
-DataNucleus.Cache.level=WARNING
-DataNucleus.MetaData.level=WARNING
-DataNucleus.General.level=WARNING
-DataNucleus.Utility.level=WARNING
-DataNucleus.Transaction.level=WARNING
-DataNucleus.Datastore.level=WARNING
-DataNucleus.ClassLoading.level=WARNING
-DataNucleus.Plugin.level=WARNING
-DataNucleus.ValueGeneration.level=WARNING
-DataNucleus.Enhancer.level=WARNING
-DataNucleus.SchemaTool.level=WARNING
diff --git a/modules/gwtorganise/war/WEB-INF/web.xml b/modules/gwtorganise/war/WEB-INF/web.xml
deleted file mode 100644
index e552dd69..00000000
--- a/modules/gwtorganise/war/WEB-INF/web.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
- greetServlet
- com.gloopics.g3viewer.server.GreetingServiceImpl
-
-
-
- greetServlet
- /g3viewer/greet
-
-
-
-
- G3viewer.html
-
-
-
diff --git a/modules/gwtorganise/war/g3viewer/0031994593072F3F8665BB367C2904F3.cache.html b/modules/gwtorganise/war/g3viewer/0031994593072F3F8665BB367C2904F3.cache.html
new file mode 100644
index 00000000..198faab1
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/0031994593072F3F8665BB367C2904F3.cache.html
@@ -0,0 +1,1839 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/063AB00068E7F94442F89D1B4262AD00.cache.html b/modules/gwtorganise/war/g3viewer/063AB00068E7F94442F89D1B4262AD00.cache.html
new file mode 100644
index 00000000..f19e7d27
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/063AB00068E7F94442F89D1B4262AD00.cache.html
@@ -0,0 +1,313 @@
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png b/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png
new file mode 100644
index 00000000..08671ce8
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png differ
diff --git a/modules/gwtorganise/war/g3viewer/2625E6CD0659684104018A069A188996.cache.html b/modules/gwtorganise/war/g3viewer/2625E6CD0659684104018A069A188996.cache.html
new file mode 100644
index 00000000..319f475f
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/2625E6CD0659684104018A069A188996.cache.html
@@ -0,0 +1,1811 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/36CF5446615AAE9D0FDDA0B123643155.cache.html b/modules/gwtorganise/war/g3viewer/36CF5446615AAE9D0FDDA0B123643155.cache.html
new file mode 100644
index 00000000..e46fe353
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/36CF5446615AAE9D0FDDA0B123643155.cache.html
@@ -0,0 +1,308 @@
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/373CE923F09A0C2270E1B0F2D934E253.cache.html b/modules/gwtorganise/war/g3viewer/373CE923F09A0C2270E1B0F2D934E253.cache.html
new file mode 100644
index 00000000..e1f106b9
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/373CE923F09A0C2270E1B0F2D934E253.cache.html
@@ -0,0 +1,326 @@
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png b/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png
new file mode 100644
index 00000000..009e9872
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png differ
diff --git a/modules/gwtorganise/war/g3viewer/4FEE434A493BF0E4969DA18CF936A5FD.cache.html b/modules/gwtorganise/war/g3viewer/4FEE434A493BF0E4969DA18CF936A5FD.cache.html
new file mode 100644
index 00000000..e24602d9
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/4FEE434A493BF0E4969DA18CF936A5FD.cache.html
@@ -0,0 +1,1807 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/5DDD50A96AC2DC41C6BF0EB870994C49.cache.html b/modules/gwtorganise/war/g3viewer/5DDD50A96AC2DC41C6BF0EB870994C49.cache.html
new file mode 100644
index 00000000..1f4fd91f
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/5DDD50A96AC2DC41C6BF0EB870994C49.cache.html
@@ -0,0 +1,1793 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/6B11280F72B8881FCDF44A0B47F1E96A.cache.html b/modules/gwtorganise/war/g3viewer/6B11280F72B8881FCDF44A0B47F1E96A.cache.html
new file mode 100644
index 00000000..073bb0dc
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/6B11280F72B8881FCDF44A0B47F1E96A.cache.html
@@ -0,0 +1,314 @@
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png b/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png
new file mode 100644
index 00000000..ded37855
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png differ
diff --git a/modules/gwtorganise/war/g3viewer/8E9AF58E0E2BDFC35328028FC368ECD2.cache.html b/modules/gwtorganise/war/g3viewer/8E9AF58E0E2BDFC35328028FC368ECD2.cache.html
new file mode 100644
index 00000000..dbce1394
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/8E9AF58E0E2BDFC35328028FC368ECD2.cache.html
@@ -0,0 +1,1834 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png b/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png
new file mode 100644
index 00000000..fbae9473
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png differ
diff --git a/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png b/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png
new file mode 100644
index 00000000..030ffab4
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png differ
diff --git a/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png b/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png
new file mode 100644
index 00000000..714cbb11
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png differ
diff --git a/modules/gwtorganise/war/g3viewer/F0ACC41901D1A45069B29563B600C0E1.cache.html b/modules/gwtorganise/war/g3viewer/F0ACC41901D1A45069B29563B600C0E1.cache.html
new file mode 100644
index 00000000..9cf0edc6
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/F0ACC41901D1A45069B29563B600C0E1.cache.html
@@ -0,0 +1,1835 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/FFDD2B79ACD26336C36A836612DAEC0A.cache.html b/modules/gwtorganise/war/g3viewer/FFDD2B79ACD26336C36A836612DAEC0A.cache.html
new file mode 100644
index 00000000..6380f246
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/FFDD2B79ACD26336C36A836612DAEC0A.cache.html
@@ -0,0 +1,311 @@
+
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/G3viewer.css b/modules/gwtorganise/war/g3viewer/G3viewer.css
new file mode 100644
index 00000000..e9b7d304
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/G3viewer.css
@@ -0,0 +1,44 @@
+* {padding:0; margin:0;}
+
+#main {position:relative; width:100%; height:100%}
+
+.error {width:300px; height:200px;}
+
+.item {width:100px; height: 130px; padding:3px; border: 2px solid #FFF; overflow: hidden; float:left; text-align:center; position:relative;margin:3px;}
+.item img{max-width:96px; max-height:76px; *width:96px; *height:76px; border:2px solid #AAA;}
+.item h3{font-size:10px; font-weight:normal; position:absolute; bottom:5px; left:0px; width:100%; text-align:center; padding:0; margin:0;}
+.ialbum {background-color: #e3effb; border: 2px solid #91c0ef; }
+.popped {background-color: #e3effb;}
+.view {height: 100%;}
+.DropZone {height: 100px; width:6px; margin: 0 -3px 0 -3px; padding: 0; float:left; text-align:center; position:relative;}
+.infobar {background-color: #fff; position: absolute; bottom:0px; border-width: 4px 4px 0 4px; border-style: solid;
+ border-color: #d2e1f6; height: 15px; width: 240px; right: 50px; font-size:10px; padding: 2px 5px 1px 5px;}
+.infobar div {float:right; }
+.infobar a {float:left;}
+.loading{position:absolute; top:0px; left:0px; width:100%; height: 100%; background-color:#FFF; opacity: 0.7; filter: alpha(opacity = 70);}
+.loading-label{z-index:10; position:absolute; width:100%; left:0px; text-align:center;}
+.loading-image{z-index:10;}
+.gwt-TreeItem-selected .Tree-Album {background-color: #333; color: #FFF;}
+.Tree-Album {padding: 1px;}
+.Tree-Album:hover{text-decoration:underline;}
+.drop-target{background-color: #91c0ef; color: #000;}
+
+.popup {padding: 2px; border: 1px solid #91c0ef;background-color:#FFF}
+
+.dialog fieldset{ border: none; padding: 0px; margin: 0px;}
+.dialog legend{ display: none;}
+.dialog ul {padding:0; margin:0;}
+.dialog ul ul li {float:left;}
+.dialog li {list-style: none; padding:0;margin:0;}
+.dialog form input[type="password"], .dialog form input[type="text"], .dialog form textarea .dialog form select {border: 1px solid #000; padding: 0.2em; display:block; clear: both;}
+.dialog form input[type="password"], .dialog form input[type="text"], .dialog form textarea {width: 100%}
+.dialog form textarea {height: 12em;}
+
+.label {width:90px; text-align:center;}
+.progressBar {border: 1px solid #cccccc; width: 100px; height: 10px;}
+.progessInner {background: #34628c;width: 0px;height: 10px;}
+
+.dContents {padding: 2px 5px 2px 5px;}
+.dButtons {text-align: right}
+
+.hideme {overflow:hidden; width:0; height:0; margin:0; padding:0;}
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/clear.cache.gif b/modules/gwtorganise/war/g3viewer/clear.cache.gif
new file mode 100644
index 00000000..e565824a
Binary files /dev/null and b/modules/gwtorganise/war/g3viewer/clear.cache.gif differ
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/0031994593072F3F8665BB367C2904F3/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/0031994593072F3F8665BB367C2904F3/1.cache.js
new file mode 100644
index 00000000..28aba6f0
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/0031994593072F3F8665BB367C2904F3/1.cache.js
@@ -0,0 +1,6 @@
+function sS(){}
+function ES(){return dP}
+function IS(){var a;while(xS){a=xS;xS=xS.c;!xS&&(yS=null);qo(a.b)}}
+function FS(){AS=true;zS=(CS(),new sS);jy((gy(),fy),1);!!$stats&&$stats(Py(irb,kib,null,null));zS.ac();!!$stats&&$stats(Py(irb,jrb,null,null))}
+function qo(a){var b,c,d,e,f;e=($wnd.google&&$wnd.google.gears&&$wnd.google.gears.factory).create(hrb);e.decode(a.b);d=e.width;c=e.height;f=~~(d/a.c.c);b=~~(c/a.c.b);if(f>b){if(f>1){e.resize(a.c.c,~~(c/f));fv(a.d,e.encode())}}else{if(b>1){e.resize(~~(d/b),a.c.b);fv(a.d,e.encode())}}}
+var krb='AsyncLoader1',hrb='beta.canvas',irb='runCallbacks1';_=sS.prototype=new tS;_.gC=ES;_.ac=IS;_.tI=0;var dP=P3(Xob,krb);FS();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/0031994593072F3F8665BB367C2904F3/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/0031994593072F3F8665BB367C2904F3/2.cache.js
new file mode 100644
index 00000000..f801762e
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/0031994593072F3F8665BB367C2904F3/2.cache.js
@@ -0,0 +1,4 @@
+function ry(){my(fy)}
+function my(a){jy(a,a.e)}
+function jy(a,b){var c;c=b==a.e?iib:jib+b;oy(c,jrb,O4(b),null);if(ly(a,b)){Ay(a.f);Y6(a.b,O4(b));qy(a)}}
+var jrb='end';ry();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/063AB00068E7F94442F89D1B4262AD00/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/063AB00068E7F94442F89D1B4262AD00/1.cache.js
new file mode 100644
index 00000000..51ec2fbc
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/063AB00068E7F94442F89D1B4262AD00/1.cache.js
@@ -0,0 +1,7 @@
+function _g(){}
+function Zg(){}
+function eh(){}
+function Yg(){}
+function bh(){bh=op;ah=new Zg}
+function dh(){ah=(bh(),new Yg);dc((ac(),_b),1);!!$stats&&$stats(Fc(Ir,Jr,null,null));ah.m();!!$stats&&$stats(Fc(Ir,Kr,null,null))}
+var Ir='runCallbacks1';_=Zg.prototype=new O;_.m=_g;_.tI=0;_=Yg.prototype=new Zg;_.m=eh;_.tI=0;var ah;dh();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/063AB00068E7F94442F89D1B4262AD00/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/063AB00068E7F94442F89D1B4262AD00/2.cache.js
new file mode 100644
index 00000000..e32edc87
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/063AB00068E7F94442F89D1B4262AD00/2.cache.js
@@ -0,0 +1,75 @@
+function $b(){}
+function lc(){}
+function uc(){}
+function xc(){}
+function Nc(){}
+function Hk(){}
+function Gk(){}
+function tn(){}
+function An(){}
+function Fn(){}
+function wo(){}
+function Ho(){}
+function Qo(){}
+function kc(){fc(_b)}
+function fc(a){dc(a,a.c)}
+function Bc(a){Ac(this,a)}
+function qc(a){a.b=0;a.c=0}
+function tc(a){return a.c-a.b}
+function Mk(){return this.a}
+function Nk(){return this.a}
+function Go(){return this.b}
+function Po(){return No(this)}
+function rc(a){return a.a[a.b]}
+function pc(a,b){a.a[a.c++]=b}
+function wc(a,b){Hd();return a}
+function zc(a,b){a.a=b;return a}
+function Kk(a,b){a.a=b;return a}
+function Cn(a,b){a.a=b;return a}
+function sc(a){return a.a[a.b++]}
+function zn(){return this.b.a.d}
+function Dn(){return _m(this.a.a)}
+function xn(a){return Pl(this.a,a)}
+function Oo(){return this.b!=this.d.a}
+function Kn(){return Bo(pg(this,24),0)}
+function So(a){a.a=a.b=a;return a}
+function Pc(a,b,c){a.b=b;a.a=c;return a}
+function vn(a,b,c){a.a=b;a.b=c;return a}
+function Fo(a){return To(new Qo,a,this.a),++this.b,true}
+function Eo(a){if(a.b==0){throw hp(new fp)}}
+function yo(a){a.a=So(new Qo);a.b=0;return a}
+function Ao(a,b,c){To(new Qo,b,c);++a.b}
+function Ko(a,b,c,d){a.d=d;a.b=c;a.a=b;return a}
+function To(a,b,c){a.c=b;a.a=c;a.b=c.b;c.b.a=a;c.b=a;return a}
+function oc(a,b){a.a=_f(Cg,0,-1,b,1);return a}
+function Rk(){Rk=op;Qk=_f(Eg,0,12,256,0)}
+function ac(){ac=op;_b=cc(new $b,2,ag(Cg,0,-1,[]))}
+function Fl(a){var b;b=im(new cm,a);return vn(new tn,a,b)}
+function En(){var a;a=pg(an(this.a.a),20).D();return a}
+function yn(){var a;a=rm(new pm,this.b.a);return Cn(new An,a)}
+function In(a,b){var c;c=Bo(this,a);Ao(c.d,b,c.b);++c.a;c.c=null}
+function Co(a){var b;Eo(a);--a.b;b=a.a.a;b.a.b=b.b;b.b.a=b.a;b.a=b.b=b;return b.c}
+function Lk(a){return a!=null&&ng(a.tI,12)&&pg(a,12).a==this.a}
+function Lc(b,c){function d(a){c.h(a)}
+return __gwtStartLoadingFragment(b,d)}
+function Pl(a,b){if(a.c&&io(a.b,b)){return true}else if(Ol(a,b)){return true}else if(Ml(a,b)){return true}return false}
+function kk(c,a){var b=c;c.onreadystatechange=$entry(function(){a.i(b)})}
+function ek(b){var a=b;$wnd.setTimeout(function(){a.onreadystatechange=new Function},0)}
+function lk(){if($wnd.XMLHttpRequest){return new XMLHttpRequest}else{try{return new ActiveXObject(Pr)}catch(a){return new ActiveXObject(Qr)}}}
+function No(a){if(a.b==a.d.a){throw hp(new fp)}a.c=a.b;a.b=a.b.a;++a.a;return a.c.c}
+function cc(a,b,c){ac();a.a=ho(new fo);a.f=yo(new wo);a.c=b;a.b=c;a.e=oc(new lc,b+1);return a}
+function Mc(a,b){var c,d;c=Lc(a,b);if(c==null){return}d=lk();d.open(Or,c,true);kk(d,Pc(new Nc,d,b));d.send(null)}
+function dc(a,b){var c;c=b==a.c?Lr:Mr+b;hc(c,Kr,Ok(b),null);if(ec(a,b)){sc(a.d);Zl(a.a,Ok(b));jc(a)}}
+function Bo(a,b){var c,d;(b<0||b>a.b)&&Vm(b,a.b);if(b>=a.b>>1){d=a.a;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c-129&&a<128){b=a+128;c=(Rk(),Qk)[b];!c&&(c=Qk[b]=Kk(new Gk,a));return c}return Kk(new Gk,a)}
+function Jn(b){var a,d;d=Bo(this,b);try{return No(d)}catch(a){a=Og(a);if(sg(a,23)){throw Fk(new Ck,Rr+b)}else throw a}}
+function Rn(a,b){if(b.b.a.d==0){return false}Array.prototype.splice.apply(a.a,[a.b,0].concat(xl(b,_f(Fg,0,0,b.b.a.d,0))));a.b+=b.b.a.d;return true}
+function Ac(b,c){var a,e,f,g,h,i;h=On(new Ln);while(tc(b.a.e)>0){Pn(h,pg(Co(b.a.f),2));sc(b.a.e)}qc(b.a.e);Rn(h,Fl(b.a.a));Ll(b.a.a);i=null;for(g=$m(new Xm,h);g.a1){return}if(tc(a.d)>0){c=rc(a.d);hc(c==a.c?Lr:Mr+c,Jr,Ok(c),null);Mc(c,zc(new xc,a));return}while(tc(a.e)>0){c=sc(a.e);b=pg(Co(a.f),2);hc(c==a.c?Lr:Mr+c,Jr,Ok(c),null);Mc(c,b)}}
+var Rr="Can't get element ",Or='GET',Pr='MSXML2.XMLHTTP.3.0',Qr='Microsoft.XMLHTTP',Jr='begin',Mr='download',Kr='end',Lr='leftoversDownload',Nr='runAsync';_=$b.prototype=new O;_.tI=0;_.b=null;_.c=0;_.d=null;_.e=null;var _b;_=lc.prototype=new O;_.tI=0;_.a=null;_.b=0;_.c=0;_=uc.prototype=new mb;_.tI=7;_=xc.prototype=new O;_.h=Bc;_.tI=8;_.a=null;_=Nc.prototype=new O;_.i=Qc;_.tI=0;_.a=null;_.b=null;_=Hk.prototype=new O;_.tI=27;_=Gk.prototype=new Hk;_.eQ=Lk;_.hC=Mk;_.w=Nk;_.tI=30;_.a=0;var Qk;_=tn.prototype=new ul;_.y=xn;_.s=yn;_.z=zn;_.tI=0;_.a=null;_.b=null;_=An.prototype=new O;_.u=Dn;_.v=En;_.tI=0;_.a=null;_=Fn.prototype=new Nm;_.F=In;_.G=Jn;_.s=Kn;_.tI=41;_=wo.prototype=new Fn;_.x=Fo;_.z=Go;_.tI=45;_.a=null;_.b=0;_=Ho.prototype=new O;_.u=Oo;_.v=Po;_.tI=0;_.a=0;_.b=null;_.c=null;_.d=null;_=Qo.prototype=new O;_.tI=0;_.a=null;_.b=null;_.c=null;var Cg=new rk,Eg=new rk;kc();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/2625E6CD0659684104018A069A188996/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/2625E6CD0659684104018A069A188996/1.cache.js
new file mode 100644
index 00000000..a0015130
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/2625E6CD0659684104018A069A188996/1.cache.js
@@ -0,0 +1,6 @@
+function _R(){}
+function lS(){return OO}
+function pS(){var a;while(eS){a=eS;eS=eS.c;!eS&&(fS=null);jo(a.b)}}
+function mS(){hS=true;gS=(jS(),new _R);cy((_x(),$x),1);!!$stats&&$stats(Iy(uqb,Bhb,null,null));gS.Zb();!!$stats&&$stats(Iy(uqb,vqb,null,null))}
+function jo(a){var b,c,d,e,f;e=($wnd.google&&$wnd.google.gears&&$wnd.google.gears.factory).create(tqb);e.decode(a.b);d=e.width;c=e.height;f=~~(d/a.c.c);b=~~(c/a.c.b);if(f>b){if(f>1){e.resize(a.c.c,~~(c/f));$u(a.d,e.encode())}}else{if(b>1){e.resize(~~(d/b),a.c.b);$u(a.d,e.encode())}}}
+var wqb='AsyncLoader1',tqb='beta.canvas',uqb='runCallbacks1';_=_R.prototype=new aS;_.gC=lS;_.Zb=pS;_.tI=0;var OO=e3(job,wqb);mS();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/2625E6CD0659684104018A069A188996/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/2625E6CD0659684104018A069A188996/2.cache.js
new file mode 100644
index 00000000..4b86a30d
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/2625E6CD0659684104018A069A188996/2.cache.js
@@ -0,0 +1,4 @@
+function ky(){fy($x)}
+function fy(a){cy(a,a.e)}
+function cy(a,b){var c;c=b==a.e?zhb:Ahb+b;hy(c,vqb,d4(b),null);if(ey(a,b)){ty(a.f);n6(a.b,d4(b));jy(a)}}
+var vqb='end';ky();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/36CF5446615AAE9D0FDDA0B123643155/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/36CF5446615AAE9D0FDDA0B123643155/1.cache.js
new file mode 100644
index 00000000..8ac56017
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/36CF5446615AAE9D0FDDA0B123643155/1.cache.js
@@ -0,0 +1,7 @@
+function Yg(){}
+function Wg(){}
+function bh(){}
+function Vg(){}
+function $g(){$g=ep;Zg=new Wg}
+function ah(){Zg=($g(),new Vg);ac((Zb(),Yb),1);!!$stats&&$stats(Cc(mr,nr,null,null));Zg.m();!!$stats&&$stats(Cc(mr,or,null,null))}
+var mr='runCallbacks1';_=Wg.prototype=new O;_.m=Yg;_.tI=0;_=Vg.prototype=new Wg;_.m=bh;_.tI=0;var Zg;ah();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/36CF5446615AAE9D0FDDA0B123643155/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/36CF5446615AAE9D0FDDA0B123643155/2.cache.js
new file mode 100644
index 00000000..26150e15
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/36CF5446615AAE9D0FDDA0B123643155/2.cache.js
@@ -0,0 +1,75 @@
+function Xb(){}
+function ic(){}
+function rc(){}
+function uc(){}
+function Kc(){}
+function xk(){}
+function wk(){}
+function jn(){}
+function qn(){}
+function vn(){}
+function mo(){}
+function xo(){}
+function Go(){}
+function hc(){cc(Yb)}
+function cc(a){ac(a,a.d)}
+function yc(a){xc(this,a)}
+function nc(a){a.c=0;a.d=0}
+function qc(a){return a.d-a.c}
+function Ck(){return this.b}
+function Dk(){return this.b}
+function wo(){return this.c}
+function Fo(){return Do(this)}
+function oc(a){return a.b[a.c]}
+function mc(a,b){a.b[a.d++]=b}
+function tc(a,b){Dd();return a}
+function wc(a,b){a.b=b;return a}
+function Ak(a,b){a.b=b;return a}
+function sn(a,b){a.b=b;return a}
+function pc(a){return a.b[a.c++]}
+function pn(){return this.c.b.e}
+function tn(){return Rm(this.b.b)}
+function nn(a){return Fl(this.b,a)}
+function Eo(){return this.c!=this.e.b}
+function An(){return ro(mg(this,24),0)}
+function Io(a){a.b=a.c=a;return a}
+function Mc(a,b,c){a.c=b;a.b=c;return a}
+function ln(a,b,c){a.b=b;a.c=c;return a}
+function lc(a,b){a.b=Yf(zg,0,-1,b,1);return a}
+function qo(a,b,c){Jo(new Go,b,c);++a.c}
+function Ao(a,b,c,d){a.e=d;a.c=c;a.b=b;return a}
+function Jo(a,b,c){a.d=b;a.b=c;a.c=c.c;c.c.b=a;c.c=a;return a}
+function oo(a){a.b=Io(new Go);a.c=0;return a}
+function uo(a){if(a.c==0){throw Zo(new Xo)}}
+function vo(a){return Jo(new Go,a,this.b),++this.c,true}
+function Zb(){Zb=ep;Yb=_b(new Xb,2,Zf(zg,0,-1,[]))}
+function Hk(){Hk=ep;Gk=Yf(Bg,0,12,256,0)}
+function un(){var a;a=mg(Sm(this.b.b),20).D();return a}
+function vl(a){var b;b=$l(new Ul,a);return ln(new jn,a,b)}
+function on(){var a;a=hm(new fm,this.c.b);return sn(new qn,a)}
+function yn(a,b){var c;c=ro(this,a);qo(c.e,b,c.c);++c.b;c.d=null}
+function so(a){var b;uo(a);--a.c;b=a.b.b;b.b.c=b.c;b.c.b=b.b;b.b=b.c=b;return b.d}
+function Bk(a){return a!=null&&kg(a.tI,12)&&mg(a,12).b==this.b}
+function ec(a,b,c,d){!!$stats&&$stats(Cc(a,b,c,d))}
+function Ic(b,c){function d(a){c.i(a)}
+return __gwtStartLoadingFragment(b,d)}
+function Fl(a,b){if(a.d&&Zn(a.c,b)){return true}else if(El(a,b)){return true}else if(Cl(a,b)){return true}return false}
+function Do(a){if(a.c==a.e.b){throw Zo(new Xo)}a.d=a.c;a.c=a.c.b;++a.b;return a.d.d}
+function _b(a,b,c){Zb();a.b=Yn(new Wn);a.g=oo(new mo);a.d=b;a.c=c;a.f=lc(new ic,b+1);return a}
+function Jc(a,b){var c,d;c=Ic(a,b);if(c==null){return}d=bk();d.open(sr,c,true);ak(d,Mc(new Kc,d,b));d.send(null)}
+function ac(a,b){var c;c=b==a.d?pr:qr+b;ec(c,or,Ek(b),null);if(bc(a,b)){pc(a.e);Pl(a.b,Ek(b));gc(a)}}
+function ro(a,b){var c,d;(b<0||b>a.c)&&Lm(b,a.c);if(b>=a.c>>1){d=a.b;for(c=a.c;c>b;--c){d=d.c}}else{d=a.b.b;for(c=0;c-129&&a<128){b=a+128;c=(Hk(),Gk)[b];!c&&(c=Gk[b]=Ak(new wk,a));return c}return Ak(new wk,a)}
+function Hn(a,b){if(b.c.b.e==0){return false}Array.prototype.splice.apply(a.b,[a.c,0].concat(nl(b,Yf(Cg,0,0,b.c.b.e,0))));a.c+=b.c.b.e;return true}
+function xc(b,c){var a,e,f,g,h,i;h=En(new Bn);while(qc(b.b.f)>0){Fn(h,mg(so(b.b.g),2));pc(b.b.f)}nc(b.b.f);Hn(h,vl(b.b.b));Bl(b.b.b);i=null;for(g=Qm(new Nm,h);g.b1){return}if(qc(a.e)>0){c=oc(a.e);ec(c==a.d?pr:qr+c,nr,Ek(c),null);Jc(c,wc(new uc,a));return}while(qc(a.f)>0){c=pc(a.f);b=mg(so(a.g),2);ec(c==a.d?pr:qr+c,nr,Ek(c),null);Jc(c,b)}}
+var vr="Can't get element ",sr='GET',tr='MSXML2.XMLHTTP.3.0',ur='Microsoft.XMLHTTP',nr='begin',qr='download',or='end',pr='leftoversDownload',rr='runAsync';_=Xb.prototype=new O;_.tI=0;_.c=null;_.d=0;_.e=null;_.f=null;var Yb;_=ic.prototype=new O;_.tI=0;_.b=null;_.c=0;_.d=0;_=rc.prototype=new mb;_.tI=7;_=uc.prototype=new O;_.i=yc;_.tI=8;_.b=null;_=Kc.prototype=new O;_.j=Nc;_.tI=0;_.b=null;_.c=null;_=xk.prototype=new O;_.tI=27;_=wk.prototype=new xk;_.eQ=Bk;_.hC=Ck;_.w=Dk;_.tI=30;_.b=0;var Gk;_=jn.prototype=new kl;_.y=nn;_.s=on;_.z=pn;_.tI=0;_.b=null;_.c=null;_=qn.prototype=new O;_.u=tn;_.v=un;_.tI=0;_.b=null;_=vn.prototype=new Dm;_.F=yn;_.G=zn;_.s=An;_.tI=41;_=mo.prototype=new vn;_.x=vo;_.z=wo;_.tI=45;_.b=null;_.c=0;_=xo.prototype=new O;_.u=Eo;_.v=Fo;_.tI=0;_.b=0;_.c=null;_.d=null;_.e=null;_=Go.prototype=new O;_.tI=0;_.b=null;_.c=null;_.d=null;var zg=new hk,Bg=new hk;hc();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/373CE923F09A0C2270E1B0F2D934E253/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/373CE923F09A0C2270E1B0F2D934E253/1.cache.js
new file mode 100644
index 00000000..6625256a
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/373CE923F09A0C2270E1B0F2D934E253/1.cache.js
@@ -0,0 +1,7 @@
+function jh(){}
+function hh(){}
+function oh(){}
+function gh(){}
+function lh(){lh=sp;kh=new hh}
+function nh(){kh=(lh(),new gh);ac((Zb(),Yb),1);!!$stats&&$stats(Cc(Dr,Er,null,null));kh.q();!!$stats&&$stats(Cc(Dr,Fr,null,null))}
+var Dr='runCallbacks1';_=hh.prototype=new O;_.q=jh;_.tI=0;_=gh.prototype=new hh;_.q=oh;_.tI=0;var kh;nh();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/373CE923F09A0C2270E1B0F2D934E253/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/373CE923F09A0C2270E1B0F2D934E253/2.cache.js
new file mode 100644
index 00000000..4cd6961e
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/373CE923F09A0C2270E1B0F2D934E253/2.cache.js
@@ -0,0 +1,75 @@
+function Xb(){}
+function ic(){}
+function rc(){}
+function uc(){}
+function Kc(){}
+function Ik(){}
+function Hk(){}
+function xn(){}
+function En(){}
+function Jn(){}
+function Ao(){}
+function Lo(){}
+function Uo(){}
+function hc(){cc(Yb)}
+function cc(a){ac(a,a.d)}
+function yc(a){xc(this,a)}
+function nc(a){a.c=0;a.d=0}
+function qc(a){return a.d-a.c}
+function Nk(){return this.b}
+function Ok(){return this.b}
+function Ko(){return this.c}
+function To(){return Ro(this)}
+function oc(a){return a.b[a.c]}
+function mc(a,b){a.b[a.d++]=b}
+function tc(a,b){Ed();return a}
+function wc(a,b){a.b=b;return a}
+function Lk(a,b){a.b=b;return a}
+function Gn(a,b){a.b=b;return a}
+function pc(a){return a.b[a.c++]}
+function Dn(){return this.c.b.e}
+function Hn(){return dn(this.b.b)}
+function Bn(a){return Tl(this.b,a)}
+function So(){return this.c!=this.e.b}
+function On(){return Fo(yg(this,24),0)}
+function Wo(a){a.b=a.c=a;return a}
+function Mc(a,b,c){a.c=b;a.b=c;return a}
+function zn(a,b,c){a.b=b;a.c=c;return a}
+function Jo(a){return Xo(new Uo,a,this.b),++this.c,true}
+function Io(a){if(a.c==0){throw lp(new jp)}}
+function Co(a){a.b=Wo(new Uo);a.c=0;return a}
+function Eo(a,b,c){Xo(new Uo,b,c);++a.c}
+function Oo(a,b,c,d){a.e=d;a.c=c;a.b=b;return a}
+function Xo(a,b,c){a.d=b;a.b=c;a.c=c.c;c.c.b=a;c.c=a;return a}
+function lc(a,b){a.b=ig(Mg,0,-1,b,1);return a}
+function Sk(){Sk=sp;Rk=ig(Og,0,12,256,0)}
+function In(){var a;a=yg(en(this.b.b),20).H();return a}
+function Cn(){var a;a=vm(new tm,this.c.b);return Gn(new En,a)}
+function Jl(a){var b;b=mm(new gm,a);return zn(new xn,a,b)}
+function Zb(){Zb=sp;Yb=_b(new Xb,2,jg(Mg,0,-1,[]))}
+function ec(a,b,c,d){!!$stats&&$stats(Cc(a,b,c,d))}
+function Ic(b,c){function d(a){c.i(a)}
+return __gwtStartLoadingFragment(b,d)}
+function Mn(a,b){var c;c=Fo(this,a);Eo(c.e,b,c.c);++c.b;c.d=null}
+function Go(a){var b;Io(a);--a.c;b=a.b.b;b.b.c=b.c;b.c.b=b.b;b.b=b.c=b;return b.d}
+function lk(c,a){var b=c;c.onreadystatechange=$entry(function(){a.j(b)})}
+function fk(b){var a=b;$wnd.setTimeout(function(){a.onreadystatechange=new Function},0)}
+function Nn(b){var a,d;d=Fo(this,b);try{return Ro(d)}catch(a){a=Yg(a);if(Bg(a,23)){throw Gk(new Dk,Mr+b)}else throw a}}
+function Ro(a){if(a.c==a.e.b){throw lp(new jp)}a.d=a.c;a.c=a.c.b;++a.b;return a.d.d}
+function _b(a,b,c){Zb();a.b=lo(new jo);a.g=Co(new Ao);a.d=b;a.c=c;a.f=lc(new ic,b+1);return a}
+function Tl(a,b){if(a.d&&mo(a.c,b)){return true}else if(Sl(a,b)){return true}else if(Ql(a,b)){return true}return false}
+function ac(a,b){var c;c=b==a.d?Gr:Hr+b;ec(c,Fr,Pk(b),null);if(bc(a,b)){pc(a.e);bm(a.b,Pk(b));gc(a)}}
+function Jc(a,b){var c,d;c=Ic(a,b);if(c==null){return}d=mk();d.open(Jr,c,true);lk(d,Mc(new Kc,d,b));d.send(null)}
+function bc(a,b){var c,d,e,f;if(b==a.d){return true}for(d=a.c,e=0,f=d.length;e-129&&a<128){b=a+128;c=(Sk(),Rk)[b];!c&&(c=Rk[b]=Lk(new Hk,a));return c}return Lk(new Hk,a)}
+function Sl(e,a){var b=e.f;for(var c in b){if(c.charCodeAt(0)==58){var d=b[c];if(e.F(a,d)){return true}}}return false}
+function Ql(i,a){var b=i.b;for(var c in b){if(c==parseInt(c)){var d=b[c];for(var e=0,f=d.length;e0){Tn(h,yg(Go(b.b.g),2));pc(b.b.f)}nc(b.b.f);Vn(h,Jl(b.b.b));Pl(b.b.b);i=null;for(g=cn(new _m,h);g.b1){return}if(qc(a.e)>0){c=oc(a.e);ec(c==a.d?Gr:Hr+c,Er,Pk(c),null);Jc(c,wc(new uc,a));return}while(qc(a.f)>0){c=pc(a.f);b=yg(Go(a.g),2);ec(c==a.d?Gr:Hr+c,Er,Pk(c),null);Jc(c,b)}}
+function Fo(a,b){var c,d;(b<0||b>a.c)&&Zm(b,a.c);if(b>=a.c>>1){d=a.b;for(c=a.c;c>b;--c){d=d.c}}else{d=a.b.b;for(c=0;cb){if(f>1){e.resize(a.b.b,~~(c/f));Yu(a.c,e.encode())}}else{if(b>1){e.resize(~~(d/b),a.b.a);Yu(a.c,e.encode())}}}
+var grb='AsyncLoader1',drb='beta.canvas',erb='runCallbacks1';_=hS.prototype=new iS;_.gC=tS;_.Zb=xS;_.tI=0;var RO=K3(Pob,grb);uS();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/4FEE434A493BF0E4969DA18CF936A5FD/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/4FEE434A493BF0E4969DA18CF936A5FD/2.cache.js
new file mode 100644
index 00000000..6cb0eb93
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/4FEE434A493BF0E4969DA18CF936A5FD/2.cache.js
@@ -0,0 +1,4 @@
+function ly(){gy(_x)}
+function gy(a){dy(a,a.d)}
+function dy(a,b){var c;c=b==a.d?Yhb:Zhb+b;iy(c,frb,J4(b),null);if(fy(a,b)){uy(a.e);S6(a.a,J4(b));ky(a)}}
+var frb='end';ly();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/5DDD50A96AC2DC41C6BF0EB870994C49/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/5DDD50A96AC2DC41C6BF0EB870994C49/1.cache.js
new file mode 100644
index 00000000..dc57ad14
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/5DDD50A96AC2DC41C6BF0EB870994C49/1.cache.js
@@ -0,0 +1,6 @@
+function YR(){}
+function iS(){return MO}
+function mS(){var a;while(bS){a=bS;bS=bS.c;!bS&&(cS=null);io(a.b)}}
+function jS(){eS=true;dS=(gS(),new YR);ay((Zx(),Yx),1);!!$stats&&$stats(Gy(cqb,nhb,null,null));dS.$b();!!$stats&&$stats(Gy(cqb,dqb,null,null))}
+function io(a){var b,c,d,e,f;e=($wnd.google&&$wnd.google.gears&&$wnd.google.gears.factory).create(bqb);e.decode(a.b);d=e.width;c=e.height;f=~~(d/a.c.c);b=~~(c/a.c.b);if(f>b){if(f>1){e.resize(a.c.c,~~(c/f));Yu(a.d,e.encode())}}else{if(b>1){e.resize(~~(d/b),a.c.b);Yu(a.d,e.encode())}}}
+var eqb='AsyncLoader1',bqb='beta.canvas',cqb='runCallbacks1';_=YR.prototype=new ZR;_.gC=iS;_.$b=mS;_.tI=0;var MO=R2(Unb,eqb);jS();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/5DDD50A96AC2DC41C6BF0EB870994C49/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/5DDD50A96AC2DC41C6BF0EB870994C49/2.cache.js
new file mode 100644
index 00000000..304e5f17
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/5DDD50A96AC2DC41C6BF0EB870994C49/2.cache.js
@@ -0,0 +1,4 @@
+function iy(){dy(Yx)}
+function dy(a){ay(a,a.e)}
+function ay(a,b){var c;c=b==a.e?lhb:mhb+b;fy(c,dqb,Q3(b),null);if(cy(a,b)){ry(a.f);_5(a.b,Q3(b));hy(a)}}
+var dqb='end';iy();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/6B11280F72B8881FCDF44A0B47F1E96A/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/6B11280F72B8881FCDF44A0B47F1E96A/1.cache.js
new file mode 100644
index 00000000..4629cb0b
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/6B11280F72B8881FCDF44A0B47F1E96A/1.cache.js
@@ -0,0 +1,7 @@
+function Xg(){}
+function Vg(){}
+function ah(){}
+function Ug(){}
+function Zg(){Zg=fp;Yg=new Vg}
+function _g(){Yg=(Zg(),new Ug);ac((Zb(),Yb),1);!!$stats&&$stats(Cc(qr,rr,null,null));Yg.m();!!$stats&&$stats(Cc(qr,sr,null,null))}
+var qr='runCallbacks1';_=Vg.prototype=new O;_.m=Xg;_.tI=0;_=Ug.prototype=new Vg;_.m=ah;_.tI=0;var Yg;_g();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/6B11280F72B8881FCDF44A0B47F1E96A/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/6B11280F72B8881FCDF44A0B47F1E96A/2.cache.js
new file mode 100644
index 00000000..4f19fa5f
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/6B11280F72B8881FCDF44A0B47F1E96A/2.cache.js
@@ -0,0 +1,75 @@
+function Xb(){}
+function ic(){}
+function rc(){}
+function uc(){}
+function Kc(){}
+function yk(){}
+function xk(){}
+function kn(){}
+function rn(){}
+function wn(){}
+function no(){}
+function yo(){}
+function Ho(){}
+function hc(){cc(Yb)}
+function cc(a){ac(a,a.d)}
+function yc(a){xc(this,a)}
+function nc(a){a.c=0;a.d=0}
+function qc(a){return a.d-a.c}
+function Dk(){return this.b}
+function Ek(){return this.b}
+function xo(){return this.c}
+function Go(){return Eo(this)}
+function oc(a){return a.b[a.c]}
+function mc(a,b){a.b[a.d++]=b}
+function tc(a,b){Ed();return a}
+function wc(a,b){a.b=b;return a}
+function Bk(a,b){a.b=b;return a}
+function tn(a,b){a.b=b;return a}
+function pc(a){return a.b[a.c++]}
+function qn(){return this.c.b.e}
+function un(){return Sm(this.b.b)}
+function on(a){return Gl(this.b,a)}
+function Fo(){return this.c!=this.e.b}
+function Bn(){return so(lg(this,24),0)}
+function Jo(a){a.b=a.c=a;return a}
+function Mc(a,b,c){a.c=b;a.b=c;return a}
+function mn(a,b,c){a.b=b;a.c=c;return a}
+function wo(a){return Ko(new Ho,a,this.b),++this.c,true}
+function vo(a){if(a.c==0){throw $o(new Yo)}}
+function po(a){a.b=Jo(new Ho);a.c=0;return a}
+function ro(a,b,c){Ko(new Ho,b,c);++a.c}
+function Bo(a,b,c,d){a.e=d;a.c=c;a.b=b;return a}
+function Ko(a,b,c){a.d=b;a.b=c;a.c=c.c;c.c.b=a;c.c=a;return a}
+function lc(a,b){a.b=Xf(yg,0,-1,b,1);return a}
+function Ik(){Ik=fp;Hk=Xf(Ag,0,12,256,0)}
+function Zb(){Zb=fp;Yb=_b(new Xb,2,Yf(yg,0,-1,[]))}
+function wl(a){var b;b=_l(new Vl,a);return mn(new kn,a,b)}
+function vn(){var a;a=lg(Tm(this.b.b),20).D();return a}
+function pn(){var a;a=im(new gm,this.c.b);return tn(new rn,a)}
+function zn(a,b){var c;c=so(this,a);ro(c.e,b,c.c);++c.b;c.d=null}
+function to(a){var b;vo(a);--a.c;b=a.b.b;b.b.c=b.c;b.c.b=b.b;b.b=b.c=b;return b.d}
+function Ck(a){return a!=null&&jg(a.tI,12)&&lg(a,12).b==this.b}
+function ec(a,b,c,d){!!$stats&&$stats(Cc(a,b,c,d))}
+function Ic(b,c){function d(a){c.i(a)}
+return __gwtStartLoadingFragment(b,d)}
+function Gl(a,b){if(a.d&&$n(a.c,b)){return true}else if(Fl(a,b)){return true}else if(Dl(a,b)){return true}return false}
+function Eo(a){if(a.c==a.e.b){throw $o(new Yo)}a.d=a.c;a.c=a.c.b;++a.b;return a.d.d}
+function _b(a,b,c){Zb();a.b=Zn(new Xn);a.g=po(new no);a.d=b;a.c=c;a.f=lc(new ic,b+1);return a}
+function Xj(b){var a=b;$wnd.setTimeout(function(){a.onreadystatechange=new Function},0)}
+function bk(c,a){var b=c;c.onreadystatechange=$entry(function(){a.j(b)})}
+function Fl(e,a){var b=e.f;for(var c in b){if(c.charCodeAt(0)==58){var d=b[c];if(e.B(a,d)){return true}}}return false}
+function Dl(i,a){var b=i.b;for(var c in b){if(c==parseInt(c)){var d=b[c];for(var e=0,f=d.length;ea.c)&&Mm(b,a.c);if(b>=a.c>>1){d=a.b;for(c=a.c;c>b;--c){d=d.c}}else{d=a.b.b;for(c=0;c-129&&a<128){b=a+128;c=(Ik(),Hk)[b];!c&&(c=Hk[b]=Bk(new xk,a));return c}return Bk(new xk,a)}
+function ck(){if($wnd.XMLHttpRequest){return new XMLHttpRequest}else{try{return new ActiveXObject(xr)}catch(a){return new ActiveXObject(yr)}}}
+function xc(b,c){var a,e,f,g,h,i;h=Fn(new Cn);while(qc(b.b.f)>0){Gn(h,lg(to(b.b.g),2));pc(b.b.f)}nc(b.b.f);In(h,wl(b.b.b));Cl(b.b.b);i=null;for(g=Rm(new Om,h);g.b1){return}if(qc(a.e)>0){c=oc(a.e);ec(c==a.d?tr:ur+c,rr,Fk(c),null);Jc(c,wc(new uc,a));return}while(qc(a.f)>0){c=pc(a.f);b=lg(to(a.g),2);ec(c==a.d?tr:ur+c,rr,Fk(c),null);Jc(c,b)}}
+var zr="Can't get element ",wr='GET',xr='MSXML2.XMLHTTP.3.0',yr='Microsoft.XMLHTTP',rr='begin',ur='download',sr='end',tr='leftoversDownload',vr='runAsync';_=Xb.prototype=new O;_.tI=0;_.c=null;_.d=0;_.e=null;_.f=null;var Yb;_=ic.prototype=new O;_.tI=0;_.b=null;_.c=0;_.d=0;_=rc.prototype=new mb;_.tI=7;_=uc.prototype=new O;_.i=yc;_.tI=8;_.b=null;_=Kc.prototype=new O;_.j=Nc;_.tI=0;_.b=null;_.c=null;_=yk.prototype=new O;_.tI=27;_=xk.prototype=new yk;_.eQ=Ck;_.hC=Dk;_.w=Ek;_.tI=30;_.b=0;var Hk;_=kn.prototype=new ll;_.y=on;_.s=pn;_.z=qn;_.tI=0;_.b=null;_.c=null;_=rn.prototype=new O;_.u=un;_.v=vn;_.tI=0;_.b=null;_=wn.prototype=new Em;_.F=zn;_.G=An;_.s=Bn;_.tI=41;_=no.prototype=new wn;_.x=wo;_.z=xo;_.tI=45;_.b=null;_.c=0;_=yo.prototype=new O;_.u=Fo;_.v=Go;_.tI=0;_.b=0;_.c=null;_.d=null;_.e=null;_=Ho.prototype=new O;_.tI=0;_.b=null;_.c=null;_.d=null;var yg=new ik,Ag=new ik;hc();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/8E9AF58E0E2BDFC35328028FC368ECD2/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/8E9AF58E0E2BDFC35328028FC368ECD2/1.cache.js
new file mode 100644
index 00000000..c628482d
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/8E9AF58E0E2BDFC35328028FC368ECD2/1.cache.js
@@ -0,0 +1,6 @@
+function zS(){}
+function LS(){return fP}
+function PS(){var a;while(ES){a=ES;ES=ES.b;!ES&&(FS=null);ko(a.a)}}
+function MS(){HS=true;GS=(JS(),new zS);gy((dy(),cy),1);!!$stats&&$stats(My(zsb,Oib,null,null));GS.Zb();!!$stats&&$stats(My(zsb,Asb,null,null))}
+function ko(a){var b,c,d,e,f;e=($wnd.google&&$wnd.google.gears&&$wnd.google.gears.factory).create(ysb);e.decode(a.a);d=e.width;c=e.height;f=~~(d/a.b.b);b=~~(c/a.b.a);if(f>b){if(f>1){e.resize(a.b.b,~~(c/f));$u(a.c,e.encode())}}else{if(b>1){e.resize(~~(d/b),a.b.a);$u(a.c,e.encode())}}}
+var Bsb='AsyncLoader1',ysb='beta.canvas',zsb='runCallbacks1';_=zS.prototype=new AS;_.gC=LS;_.Zb=PS;_.tI=0;var fP=z4(gqb,Bsb);MS();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/8E9AF58E0E2BDFC35328028FC368ECD2/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/8E9AF58E0E2BDFC35328028FC368ECD2/2.cache.js
new file mode 100644
index 00000000..22bb2db7
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/8E9AF58E0E2BDFC35328028FC368ECD2/2.cache.js
@@ -0,0 +1,4 @@
+function oy(){jy(cy)}
+function jy(a){gy(a,a.d)}
+function gy(a,b){var c;c=b==a.d?Mib:Nib+b;ly(c,Asb,y5(b),null);if(iy(a,b)){xy(a.e);H7(a.a,y5(b));ny(a)}}
+var Asb='end';oy();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/F0ACC41901D1A45069B29563B600C0E1/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/F0ACC41901D1A45069B29563B600C0E1/1.cache.js
new file mode 100644
index 00000000..f4c58224
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/F0ACC41901D1A45069B29563B600C0E1/1.cache.js
@@ -0,0 +1,6 @@
+function zS(){}
+function LS(){return jP}
+function PS(){var a;while(ES){a=ES;ES=ES.c;!ES&&(FS=null);po(a.b)}}
+function MS(){HS=true;GS=(JS(),new zS);hy((ey(),dy),1);!!$stats&&$stats(Ny(hrb,hib,null,null));GS.cc();!!$stats&&$stats(Ny(hrb,irb,null,null))}
+function po(a){var b,c,d,e,f;e=($wnd.google&&$wnd.google.gears&&$wnd.google.gears.factory).create(grb);e.decode(a.b);d=e.width;c=e.height;f=~~(d/a.c.c);b=~~(c/a.c.b);if(f>b){if(f>1){e.resize(a.c.c,~~(c/f));dv(a.d,e.encode())}}else{if(b>1){e.resize(~~(d/b),a.c.b);dv(a.d,e.encode())}}}
+var jrb='AsyncLoader1',grb='beta.canvas',hrb='runCallbacks1';_=zS.prototype=new AS;_.gC=LS;_.cc=PS;_.tI=0;var jP=R3(Vob,jrb);MS();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/F0ACC41901D1A45069B29563B600C0E1/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/F0ACC41901D1A45069B29563B600C0E1/2.cache.js
new file mode 100644
index 00000000..35b948e8
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/F0ACC41901D1A45069B29563B600C0E1/2.cache.js
@@ -0,0 +1,4 @@
+function py(){ky(dy)}
+function ky(a){hy(a,a.e)}
+function hy(a,b){var c;c=b==a.e?fib:gib+b;my(c,irb,Q4(b),null);if(jy(a,b)){yy(a.f);$6(a.b,Q4(b));oy(a)}}
+var irb='end';py();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/FFDD2B79ACD26336C36A836612DAEC0A/1.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/FFDD2B79ACD26336C36A836612DAEC0A/1.cache.js
new file mode 100644
index 00000000..1ae48cc1
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/FFDD2B79ACD26336C36A836612DAEC0A/1.cache.js
@@ -0,0 +1,7 @@
+function Ug(){}
+function Sg(){}
+function Zg(){}
+function Rg(){}
+function Wg(){Wg=cp;Vg=new Sg}
+function Yg(){Vg=(Wg(),new Rg);ac((Zb(),Yb),1);!!$stats&&$stats(Cc(nr,or,null,null));Vg.m();!!$stats&&$stats(Cc(nr,pr,null,null))}
+var nr='runCallbacks1';_=Sg.prototype=new O;_.m=Ug;_.tI=0;_=Rg.prototype=new Sg;_.m=Zg;_.tI=0;var Vg;Yg();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/deferredjs/FFDD2B79ACD26336C36A836612DAEC0A/2.cache.js b/modules/gwtorganise/war/g3viewer/deferredjs/FFDD2B79ACD26336C36A836612DAEC0A/2.cache.js
new file mode 100644
index 00000000..852a926c
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/deferredjs/FFDD2B79ACD26336C36A836612DAEC0A/2.cache.js
@@ -0,0 +1,75 @@
+function Xb(){}
+function ic(){}
+function rc(){}
+function uc(){}
+function Kc(){}
+function vk(){}
+function uk(){}
+function gn(){}
+function on(){}
+function tn(){}
+function ko(){}
+function vo(){}
+function Eo(){}
+function hc(){cc(Yb)}
+function cc(a){ac(a,a.d)}
+function yc(a){xc(this,a)}
+function nc(a){a.c=0;a.d=0}
+function qc(a){return a.d-a.c}
+function Ak(){return this.b}
+function Bk(){return this.b}
+function uo(){return this.c}
+function Do(){return Bo(this)}
+function oc(a){return a.b[a.c]}
+function mc(a,b){a.b[a.d++]=b}
+function tc(a,b){Ed();return a}
+function wc(a,b){a.b=b;return a}
+function yk(a,b){a.b=b;return a}
+function qn(a,b){a.b=b;return a}
+function pc(a){return a.b[a.c++]}
+function nn(){return this.c.b.e}
+function rn(){return Pm(this.b.b)}
+function ln(a){return Dl(this.b,a)}
+function Co(){return this.c!=this.e.b}
+function yn(){return po(ig(this,24),0)}
+function so(a){if(a.c==0){throw Xo(new Vo)}}
+function Go(a){a.b=a.c=a;return a}
+function Mc(a,b,c){a.c=b;a.b=c;return a}
+function jn(a,b,c){a.b=b;a.c=c;return a}
+function to(a){return Ho(new Eo,a,this.b),++this.c,true}
+function oo(a,b,c){Ho(new Eo,b,c);++a.c}
+function mo(a){a.b=Go(new Eo);a.c=0;return a}
+function yo(a,b,c,d){a.e=d;a.c=c;a.b=b;return a}
+function Ho(a,b,c){a.d=b;a.b=c;a.c=c.c;c.c.b=a;c.c=a;return a}
+function lc(a,b){a.b=Uf(vg,0,-1,b,1);return a}
+function Fk(){Fk=cp;Ek=Uf(xg,0,12,256,0)}
+function Zb(){Zb=cp;Yb=_b(new Xb,2,Vf(vg,0,-1,[]))}
+function tl(a){var b;b=Yl(new Sl,a);return jn(new gn,a,b)}
+function sn(){var a;a=ig(Qm(this.b.b),20).D();return a}
+function mn(){var a;a=fm(new dm,this.c.b);return qn(new on,a)}
+function wn(a,b){var c;c=po(this,a);oo(c.e,b,c.c);++c.b;c.d=null}
+function qo(a){var b;so(a);--a.c;b=a.b.b;b.b.c=b.c;b.c.b=b.b;b.b=b.c=b;return b.d}
+function zk(a){return a!=null&&gg(a.tI,12)&&ig(a,12).b==this.b}
+function ec(a,b,c,d){!!$stats&&$stats(Cc(a,b,c,d))}
+function Ic(b,c){function d(a){c.i(a)}
+return __gwtStartLoadingFragment(b,d)}
+function Dl(a,b){if(a.d&&Xn(a.c,b)){return true}else if(Cl(a,b)){return true}else if(Al(a,b)){return true}return false}
+function Bo(a){if(a.c==a.e.b){throw Xo(new Vo)}a.d=a.c;a.c=a.c.b;++a.b;return a.d.d}
+function _b(a,b,c){Zb();a.b=Wn(new Un);a.g=mo(new ko);a.d=b;a.c=c;a.f=lc(new ic,b+1);return a}
+function Uj(b){var a=b;$wnd.setTimeout(function(){a.onreadystatechange=new Function},0)}
+function $j(c,a){var b=c;c.onreadystatechange=$entry(function(){a.j(b)})}
+function Cl(e,a){var b=e.f;for(var c in b){if(c.charCodeAt(0)==58){var d=b[c];if(e.B(a,d)){return true}}}return false}
+function Al(i,a){var b=i.b;for(var c in b){if(c==parseInt(c)){var d=b[c];for(var e=0,f=d.length;ea.c)&&Jm(b,a.c);if(b>=a.c>>1){d=a.b;for(c=a.c;c>b;--c){d=d.c}}else{d=a.b.b;for(c=0;c-129&&a<128){b=a+128;c=(Fk(),Ek)[b];!c&&(c=Ek[b]=yk(new uk,a));return c}return yk(new uk,a)}
+function _j(){if($wnd.XMLHttpRequest){return new XMLHttpRequest}else{try{return new ActiveXObject(ur)}catch(a){return new ActiveXObject(vr)}}}
+function xc(b,c){var a,e,f,g,h,i;h=Cn(new zn);while(qc(b.b.f)>0){Dn(h,ig(qo(b.b.g),2));pc(b.b.f)}nc(b.b.f);Fn(h,tl(b.b.b));zl(b.b.b);i=null;for(g=Om(new Lm,h);g.b1){return}if(qc(a.e)>0){c=oc(a.e);ec(c==a.d?qr:rr+c,or,Ck(c),null);Jc(c,wc(new uc,a));return}while(qc(a.f)>0){c=pc(a.f);b=ig(qo(a.g),2);ec(c==a.d?qr:rr+c,or,Ck(c),null);Jc(c,b)}}
+var wr="Can't get element ",tr='GET',ur='MSXML2.XMLHTTP.3.0',vr='Microsoft.XMLHTTP',or='begin',rr='download',pr='end',qr='leftoversDownload',sr='runAsync';_=Xb.prototype=new O;_.tI=0;_.c=null;_.d=0;_.e=null;_.f=null;var Yb;_=ic.prototype=new O;_.tI=0;_.b=null;_.c=0;_.d=0;_=rc.prototype=new mb;_.tI=7;_=uc.prototype=new O;_.i=yc;_.tI=8;_.b=null;_=Kc.prototype=new O;_.j=Nc;_.tI=0;_.b=null;_.c=null;_=vk.prototype=new O;_.tI=27;_=uk.prototype=new vk;_.eQ=zk;_.hC=Ak;_.w=Bk;_.tI=30;_.b=0;var Ek;_=gn.prototype=new il;_.y=ln;_.s=mn;_.z=nn;_.tI=0;_.b=null;_.c=null;_=on.prototype=new O;_.u=rn;_.v=sn;_.tI=0;_.b=null;_=tn.prototype=new Bm;_.F=wn;_.G=xn;_.s=yn;_.tI=41;_=ko.prototype=new tn;_.x=to;_.z=uo;_.tI=45;_.b=null;_.c=0;_=vo.prototype=new O;_.u=Co;_.v=Do;_.tI=0;_.b=0;_.c=null;_.d=null;_.e=null;_=Eo.prototype=new O;_.tI=0;_.b=null;_.c=null;_.d=null;var vg=new fk,xg=new fk;hc();
\ No newline at end of file
diff --git a/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js b/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js
new file mode 100644
index 00000000..c70e2b26
--- /dev/null
+++ b/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js
@@ -0,0 +1,11 @@
+function g3viewer(){var M='',nb='" for "gwt:onLoadErrorFn"',lb='" for "gwt:onPropertyErrorFn"',Y='"><\/script>',$='#',Wb='.cache.html',ab='/',Lb='0031994593072F3F8665BB367C2904F3',Mb='063AB00068E7F94442F89D1B4262AD00',Nb='2625E6CD0659684104018A069A188996',Ob='36CF5446615AAE9D0FDDA0B123643155',Pb='373CE923F09A0C2270E1B0F2D934E253',Qb='4FEE434A493BF0E4969DA18CF936A5FD',Rb='5DDD50A96AC2DC41C6BF0EB870994C49',Sb='6B11280F72B8881FCDF44A0B47F1E96A',Tb='8E9AF58E0E2BDFC35328028FC368ECD2',gc='
+
+This html file is for hosted mode support.
+