[kune-commits] r1083 - in trunk: . src/main/java src/main/java/org/ourproject/kune/app/client src/main/java/org/ourproject/kune/blogs/client src/main/java/org/ourproject/kune/docs/client src/main/java/org/ourproject/kune/platf src/main/java/org/ourproject/kune/platf/client/actions/toolbar src/main/java/org/ourproject/kune/platf/client/services src/main/java/org/ourproject/kune/platf/client/ui/dialogs src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed src/main/java/org/ourproject/kune/platf/client/ui/rte src/main/java/org/ourproject/kune/platf/client/ui/rte/basic src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/editor src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/preview src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/asian src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/occidental src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/utf8 src/main/java/org/ourproject/kune/platf/client/ui/rte/saving src/main/java/org/ourproject/kune/wiki/client src/main/java/org/ourproject/kune/workspace/client src/main/java/org/ourproject/kune/workspace/client/editor src/main/java/org/ourproject/kune/workspace/client/editor/insertlocalimg src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink src/main/java/org/ourproject/kune/workspace/client/options src/main/java/org/ourproject/kune/workspace/client/options/license src/main/java/org/ourproject/kune/workspace/client/options/logo src/main/java/org/ourproject/kune/workspace/client/options/pscape src/main/java/org/ourproject/kune/workspace/client/options/tools src/main/java/org/ourproject/kune/workspace/client/search

vjrj vjrj at ourproject.org
Mon Mar 23 20:21:40 CET 2009


Author: vjrj
Date: 2009-03-23 20:21:30 +0100 (Mon, 23 Mar 2009)
New Revision: 1083

Added:
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkExecutableUtils.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherField.java
Removed:
   trunk/src/main/java/com/
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java
Modified:
   trunk/COPYRIGHT
   trunk/TODO
   trunk/TODO_done
   trunk/pom.xml
   trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
   trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
   trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
   trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialog.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/editor/EditHtmlEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/preview/EditHtmlPreviewPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialog.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfo.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstract.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/asian/InsertSpecialAsianCharPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/occidental/InsertSpecialOccCharPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/utf8/InsertSpecialUTF8CharPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocalimg/InsertImageLocalPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/options/EntityOptions.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/options/license/EntityOptionsDefLicensePresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/options/logo/EntityOptionsLogoPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/options/pscape/EntityOptionsPublicSpaceConfPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/options/tools/EntityOptionsToolsConfPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherPanel.java
Log:
Incomplete - task RTE Create link improved 


Modified: trunk/COPYRIGHT
===================================================================
--- trunk/COPYRIGHT	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/COPYRIGHT	2009-03-23 19:21:30 UTC (rev 1083)
@@ -109,7 +109,7 @@
    Copyright: under GNU Lesser General Public License
    http://www.gnu.org/licenses/lgpl.html
 
-dom region and diff libraries:
+dom region library:
    XWiki Platform
    http://www.xwiki.org/
    Copyright: under GNU Lesser General Public License

Modified: trunk/TODO
===================================================================
--- trunk/TODO	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/TODO	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,7 +22,6 @@
      <a href="http://example.com">s^amp^le</a>   --- Parse and edit
      <a href="http://example.com">s^a<em>kk</em>mp^le</a>   --- Parse, get contains and edit
      ^some text <a href="http://example.com">samp^le</a>   --- new link with get inner content?
-**** with different menus (File/Blog ...)
 **** bidi support
 **** images (local/remote) with preview
 **** youtube videos/podcasts
@@ -113,6 +112,12 @@
 ** vjrj <v> IconHyperlink.java and IconLabel.java to gwt1.5
 
 * MID-TERM
+** vjrj <v> shortcuts enhacement
+*** Clarify the keycodes vs utf8 chars Shortcut definition (Function keys and so on...)
+*** shortcuts in tool actions no registered in GlobalShorcuts
+*** Links:
+    http://www.quirksmode.org/js/keys.html
+    http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx
 ** TODO <s> tag UI refactorization
    Think about wikipedia suggestions:
    http://www.mediawiki.org/wiki/API
@@ -424,6 +429,8 @@
    http://creativecommons.org/license/zero/
 ** TODO <v> Revise use the HP and VP in gwt code
    http://groups.google.com/group/Google-Web-Toolkit/browse_frm/thread/5d01cd806d93b94e/2909d30d1b2ddfb7?lnk=gst&q=GWT+%2B+FlowPanel+%2B+CSS+#2909d30d1b2ddfb7
+** TODO <v> captcha in anonymous comments/edits 
+   http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/99c259aad06406c6?pli=1
 * LONG-TERM
 ** <s> integrate some blog/wiki converter:
    http://code.google.com/p/google-blog-converters-appengine/

Modified: trunk/TODO_done
===================================================================
--- trunk/TODO_done	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/TODO_done	2009-03-23 19:21:30 UTC (rev 1083)
@@ -39,7 +39,17 @@
   http://extjs.com/deploy/ext/examples/locale/dutch-form.js
   http://groups.google.com/group/gwt-ext/browse_thread/thread/ebec316effea2b80/bfbdadc7239b4e5d?lnk=gst&q=i18n#bfbdadc7239b4e5d
   http://extjs.com/forum/showthread.php?t=20160&highlight=localization
+* FIXED with different menus (File/Blog ...)
+* FIXED with different menus (File/Blog ...)
+  :PROPERTIES:
+  :ARCHIVE_TIME: 2009-03-20 vie 09:12
+  :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO
+  :ARCHIVE_OLPATH: SHORT-TERM (URGENT)/<v> better RTE/Pending
+  :ARCHIVE_CATEGORY: TODO
+  :END:
 
 
 
 
+
+

Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/pom.xml	2009-03-23 19:21:30 UTC (rev 1083)
@@ -94,13 +94,11 @@
       <artifactId>jmagick</artifactId>
       <version>6.2.6-0</version>
     </dependency>
-    <!--
     <dependency>
-      <groupId>com.xpn.xwiki.platform</groupId>
-      <artifactId>xwiki-web-gwt</artifactId>
+      <groupId>org.xwiki.platform</groupId>
+      <artifactId>xwiki-web-gwt-dom</artifactId>
       <version>1.9-SNAPSHOT</version>
     </dependency>
-		-->
 
     <!-- xmpp -->
     <dependency>

Modified: trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -48,7 +48,8 @@
         Log.setUncaughtExceptionHandler();
         GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
             public void onUncaughtException(Throwable e) {
-                Log.error(e.toString());
+                String message = e.getMessage();
+                Log.error("Caught: " + e.toString() + " " + (message != null ? message : ""), e);
             }
         });
 

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -79,7 +79,7 @@
                 Position.ctx, TYPE_BLOG);
 
         createContentRenameAction(parentMenuTitle, i18n.t("Rename"), contents);
-        createEditAction(TYPE_POST);
+        createEditAction(parentMenuTitle, TYPE_POST);
         createContentModeratedActions(parentMenuTitle, contentsModerated);
         createRenameContentInCtxAction(parentMenuTitleCtx, i18n.t("Rename"), containersNoRoot);
 

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -80,7 +80,7 @@
                 Position.ctx, TYPE_ROOT, TYPE_FOLDER);
 
         createContentRenameAction(parentMenuTitle, i18n.t("Rename"), contents);
-        createEditAction(TYPE_DOCUMENT);
+        createEditAction(parentMenuTitle, TYPE_DOCUMENT);
         createContentModeratedActions(parentMenuTitle, contentsModerated);
         createRenameContentInCtxAction(parentMenuTitleCtx, i18n.t("Rename"), containersNoRoot);
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml	2009-03-23 19:21:30 UTC (rev 1083)
@@ -8,7 +8,7 @@
   <inherits name="com.google.gwt.libideas.ImmutableResources" />
   <inherits name="com.google.gwt.libideas.StyleInjector" />
 
-  <inherits name="com.xpn.xwiki.wysiwyg.Wysiwyg" />
+  <inherits name="org.xwiki.gwt.dom.DOM" />
 
   <public path="public" />
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -21,7 +21,6 @@
 
 import org.ourproject.kune.platf.client.actions.ActionDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
-import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 
 public interface ActionToolbar<T> {
@@ -52,7 +51,7 @@
 
     void setNormalStyle();
 
-    void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip, String newTitle);
+    void setParentMenuTitle(ActionToolbarPosition position, String origTitle, String origTooltip, String newTitle);
 
     void setPushButtonPressed(ActionDescriptor<T> action, boolean pressed);
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -167,12 +167,11 @@
         toolbar.setNormalStyle();
     }
 
-    public void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip,
-            String newTitle) {
-        final String menuKey = genMenuKey(action.getActionPosition(), origTitle, origTooltip, null, null);
-        Menu menu = menus.get(menuKey);
-        if (menu != null) {
-            menu.setTitle(newTitle);
+    public void setParentMenuTitle(ActionToolbarPosition position, String origTitle, String origTooltip, String newTitle) {
+        final String menuKey = genMenuKey(position, origTitle, origTooltip, null, null);
+        ToolbarButton button = buttons.get(menuKey);
+        if (button != null) {
+            button.setText(newTitle);
         } else {
             Log.error("Tryng to rename a non existent menu");
         }
@@ -310,6 +309,7 @@
             toolbarMenu.setTooltip(menuTooltip);
         }
         menus.put(menuKey, menu);
+        buttons.put(menuKey, toolbarMenu);
         add(toolbarMenu);
         return menu;
     }
@@ -343,7 +343,7 @@
     private String genMenuKey(final ActionToolbarPosition pos, final String menuTitle, final String menuTooltip,
             final String menuSubTitle, final String actionText) {
 
-        final String basePart = "km-atp-menu-" + pos.toString().substring(0, 2) + "-" + menuTitle + "-" + menuTooltip;
+        final String basePart = "km-atp-menu-" + pos + "-" + menuTitle + "-" + menuTooltip;
         final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
         final String itemPart = actionText != null ? "-item-" + actionText : "";
         return basePart + subMenuPart + itemPart;

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -110,9 +110,8 @@
         view.setNormalStyle();
     }
 
-    public void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip,
-            String newTitle) {
-        view.setParentMenuTitle(action, origTitle, origTooltip, newTitle);
+    public void setParentMenuTitle(ActionToolbarPosition position, String origTitle, String origTooltip, String newTitle) {
+        view.setParentMenuTitle(position, origTitle, origTooltip, newTitle);
     }
 
     public void setPushButtonPressed(ActionDescriptor<T> action, boolean pressed) {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,7 +22,7 @@
 import org.ourproject.kune.platf.client.View;
 import org.ourproject.kune.platf.client.actions.ActionDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionItem;
-import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 
 public interface ActionToolbarView<T> extends View {
 
@@ -49,7 +49,7 @@
 
     void setNormalStyle();
 
-    void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip, String newTitle);
+    void setParentMenuTitle(ActionToolbarPosition position, String origTitle, String origTooltip, String newTitle);
 
     void setPushButtonPressed(ActionDescriptor<T> action, boolean pressed);
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -301,6 +301,27 @@
             }
         });
 
+        register(InsertLinkGroup.class, new Factory<InsertLinkExt>(InsertLinkExt.class) {
+            @Override
+            public InsertLinkExt create() {
+                final InsertLinkExtPresenter presenter = new InsertLinkExtPresenter($(InsertLinkDialog.class));
+                final InsertLinkExtView panel = new InsertLinkExtPanel(presenter, $(I18nTranslationService.class));
+                presenter.init(panel);
+                return presenter;
+            }
+        });
+
+        register(InsertLinkGroup.class, new Factory<InsertLinkEmail>(InsertLinkEmail.class) {;
+
+            @Override
+            public InsertLinkEmail create() {
+                final InsertLinkEmailPresenter presenter = new InsertLinkEmailPresenter($(InsertLinkDialog.class));
+                final InsertLinkEmailPanel panel = new InsertLinkEmailPanel(presenter, $(I18nTranslationService.class));
+                presenter.init(panel);
+                return presenter;
+            }
+        });
+
         register(NoDecoration.class, new Factory<RTEditor>(RTEditor.class) {
             @Override
             public RTEditor create() {
@@ -413,26 +434,6 @@
             }
         });
 
-        register(InsertLinkGroup.class, new Factory<InsertLinkExt>(InsertLinkExt.class) {
-            @Override
-            public InsertLinkExt create() {
-                final InsertLinkExtPresenter presenter = new InsertLinkExtPresenter($(InsertLinkDialog.class));
-                final InsertLinkExtView panel = new InsertLinkExtPanel(presenter, $(I18nTranslationService.class));
-                presenter.init(panel);
-                return presenter;
-            }
-        });
-
-        register(InsertLinkGroup.class, new Factory<InsertLinkEmail>(InsertLinkEmail.class) {
-            @Override
-            public InsertLinkEmail create() {
-                final InsertLinkEmailPresenter presenter = new InsertLinkEmailPresenter($(InsertLinkDialog.class));
-                final InsertLinkEmailPanel panel = new InsertLinkEmailPanel(presenter, $(I18nTranslationService.class));
-                presenter.init(panel);
-                return presenter;
-            }
-        });
-
         register(Singleton.class, new Factory<InsertTableDialog>(InsertTableDialog.class) {
             @Override
             public InsertTableDialog create() {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -21,11 +21,13 @@
 
 import com.gwtext.client.core.Position;
 import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.Component;
 import com.gwtext.client.widgets.PaddedPanel;
 import com.gwtext.client.widgets.form.Field;
 import com.gwtext.client.widgets.form.FieldSet;
 import com.gwtext.client.widgets.form.FormPanel;
 import com.gwtext.client.widgets.form.Label;
+import com.gwtext.client.widgets.form.event.FormPanelListener;
 
 public class DefaultForm {
 
@@ -81,6 +83,10 @@
         form.addButton(button);
     }
 
+    public void addListener(FormPanelListener listener) {
+        form.addListener(listener);
+    }
+
     public void addStyleName(final String cls) {
         form.addStyleName(cls);
     }
@@ -93,6 +99,10 @@
         return form;
     }
 
+    public void insert(int index, Component component) {
+        form.insert(index, component);
+    }
+
     public boolean isValid() {
         return form.getForm().isValid();
     }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialog.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialog.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -28,8 +28,10 @@
 
     public void setErrorMessage(String message, Level level);
 
-    void addOptionTab(View view);
+    void addTab(View view);
 
+    void insertTab(int index, View view);
+
     void show();
 
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -83,14 +83,8 @@
         }
     }
 
-    public void addOptionTab(View view) {
-        if (view instanceof Panel) {
-            addTab((Panel) view);
-        } else if (view instanceof DefaultForm) {
-            addTab(((DefaultForm) view).getFormPanel());
-        } else {
-            Log.error("Programatic error: Unexpected element added to GroupOptions");
-        }
+    public void addTab(View view) {
+        addTabPanel(castPanel(view));
         doLayoutIfNeeded();
     }
 
@@ -117,6 +111,11 @@
         }
     }
 
+    public void insertTab(int index, View view) {
+        insertTabPanel(index, castPanel(view));
+        doLayoutIfNeeded();
+    }
+
     public boolean isVisible() {
         createDialogIfNecessary();
         return dialog.isVisible();
@@ -163,11 +162,24 @@
         });
     }
 
-    private void addTab(Panel newTab) {
+    private void addTabPanel(Panel newTab) {
         createDialogIfNecessary();
         tabPanel.add(newTab);
     }
 
+    private Panel castPanel(View view) {
+        Panel panel;
+        if (view instanceof Panel) {
+            panel = (Panel) view;
+        } else if (view instanceof DefaultForm) {
+            panel = ((DefaultForm) view).getFormPanel();
+        } else {
+            panel = null;
+            Log.error("Programatic error: Unexpected element added to GroupOptions");
+        }
+        return panel;
+    }
+
     private void createDialog() {
         dialog = new BasicDialog(dialogId, title, modal, true, width, height, minWidth, minHeight);
         dialog.setCollapsible(false);
@@ -192,4 +204,9 @@
             createDialog();
         }
     }
+
+    private void insertTabPanel(int index, Panel newTab) {
+        createDialogIfNecessary();
+        tabPanel.insert(index, newTab);
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -26,8 +26,8 @@
 
     private AbstractTabbedDialogView view;
 
-    public void addOptionTab(View tab) {
-        view.addOptionTab(tab);
+    public void addTab(View tab) {
+        view.addTab(tab);
     }
 
     public View getView() {
@@ -46,6 +46,10 @@
         this.view = view;
     }
 
+    public void insertTab(int index, View tab) {
+        view.insertTab(index, tab);
+    }
+
     public void setErrorMessage(String message, Level level) {
         view.setErrorMessage(message, level);
     }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/tabbed/AbstractTabbedDialogView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -24,7 +24,7 @@
 
 public interface AbstractTabbedDialogView extends View {
 
-    void addOptionTab(View tab);
+    void addTab(View tab);
 
     void createAndShow();
 
@@ -32,6 +32,8 @@
 
     void hideMessages();
 
+    void insertTab(int index, View tab);
+
     void setErrorMessage(final String message, final Level level);
 
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -16,6 +16,7 @@
 package org.ourproject.kune.platf.client.ui.rte;
 
 import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl;
+import org.xwiki.gwt.dom.client.Document;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.IFrameElement;
@@ -26,7 +27,6 @@
 import com.google.gwt.user.client.ui.MouseListener;
 import com.google.gwt.user.client.ui.MouseListenerCollection;
 import com.google.gwt.user.client.ui.SourcesMouseEvents;
-import com.xpn.xwiki.wysiwyg.client.dom.Document;
 
 /**
  * A rich text editor that allows complex styling and formatting.

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -20,16 +20,19 @@
 import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.shortcuts.ShortcutDescriptor;
 import org.ourproject.kune.platf.client.shortcuts.ShortcutRegister;
+import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
 import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkExecutableUtils;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
+import org.xwiki.gwt.dom.client.DocumentFragment;
+import org.xwiki.gwt.dom.client.Range;
+import org.xwiki.gwt.dom.client.Selection;
 
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.FocusListener;
 import com.google.gwt.user.client.ui.Widget;
-import com.xpn.xwiki.wysiwyg.client.dom.DocumentFragment;
-import com.xpn.xwiki.wysiwyg.client.dom.Range;
-import com.xpn.xwiki.wysiwyg.client.dom.Selection;
 
 public class RTEditorPanel extends RichTextArea implements RTEditorView {
 
@@ -108,9 +111,39 @@
         setFocus(true);
     }
 
+    public LinkInfo getLinkInfoIfHref() {
+        LinkInfo linkinfo = null;
+        org.xwiki.gwt.dom.client.Element selectedAnchor = LinkExecutableUtils.getSelectedAnchor(this);
+        if (selectedAnchor != null) {
+            Range range = getDocument().createRange();
+            range.selectNode(selectedAnchor);
+            getSelection().addRange(range);
+            linkinfo = LinkInfo.parse(selectedAnchor);
+        } else {
+            linkinfo = new LinkInfo(getSelectionText());
+        }
+        return linkinfo;
+    }
+
+    public void getRangeInfo() {
+        // Selection selection = getSelection();
+        // String info = "range count: " + selection.getRangeCount() +
+        // "<br/>focus offset: " + selection.getFocusOffset()
+        // + "<br/>anchor offset:" + selection.getAnchorOffset() +
+        // "<br/>range 0 as html: "
+        // + selection.getRangeAt(0).toHTML();
+        // NotifyUser.info(info);
+        String info = "range count: " + getFstRange().getCommonAncestorContainer().getFirstChild().getNodeName();
+        NotifyUser.info(info);
+    }
+
+    public String getSelectionText() {
+        return getFstRange().cloneContents().getInnerText();
+    }
+
     public void insertBlockquote() {
         DocumentFragment extracted = getFstRange().cloneContents();
-        delete();
+        // delete();
         insertHtml("<blockquote>" + extracted.getInnerHTML() + "</blockquote>");
         focus();
     }
@@ -162,6 +195,10 @@
         return basic.isBold();
     }
 
+    public boolean isCollapsed() {
+        return getFstRange().isCollapsed();
+    }
+
     public boolean isItalic() {
         return basic.isItalic();
     }
@@ -346,5 +383,4 @@
     private void updateStatus() {
         presenter.updateStatus();
     }
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -24,14 +24,15 @@
 import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialog;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
 import org.ourproject.kune.platf.client.ui.rte.insertspecialchar.InsertSpecialCharDialog;
 import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialog;
 import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
 
+import com.allen_sauer.gwt.log.client.Log;
 import com.calclab.suco.client.events.Event0;
 import com.calclab.suco.client.events.Listener;
 import com.calclab.suco.client.events.Listener0;
-import com.calclab.suco.client.events.Listener2;
 import com.calclab.suco.client.ioc.Provider;
 import com.google.gwt.libideas.resources.client.ImageResource;
 
@@ -71,7 +72,7 @@
     private final Provider<InsertImageDialog> insertImageDialog;
     private final Provider<InsertTableDialog> insertTableDialog;
     private Listener<String> insertTableListener;
-    private Listener2<String, String> insertLinkListener;
+    private Listener<LinkInfo> insertLinkListener;
     private Listener<String> updateHtmlListener;
     private ActionToolbarButtonDescriptor<Object> insertTableBtn;
     private final Provider<InsertSpecialCharDialog> insertSpecialCharDialog;
@@ -592,13 +593,17 @@
                         deferred.addCommand(new Listener0() {
                             public void onEvent() {
                                 if (insertLinkListener == null) {
-                                    insertLinkListener = new Listener2<String, String>() {
-                                        public void onEvent(String name, String url) {
-                                            view.createLink(url);
+                                    insertLinkListener = new Listener<LinkInfo>() {
+                                        public void onEvent(LinkInfo linkInfo) {
+                                            String link = linkInfo.toString();
+                                            Log.debug("Link: " + link);
+                                            view.focus();
+                                            view.insertHtml(link);
                                             fireOnEdit();
                                         }
                                     };
                                 }
+                                insertElement.setLinkInfo(view.getLinkInfoIfHref());
                                 insertElement.setOnCreateLink(insertLinkListener);
                                 insertElement.show();
                             }
@@ -742,17 +747,7 @@
                     public void onEvent() {
                         deferred.addCommand(new Listener0() {
                             public void onEvent() {
-                                // Selection selection =
-                                // view.getDocument().getSelection();
-                                // String info = "range count: " +
-                                // selection.getRangeCount() +
-                                // "<br/>focus offset: "
-                                // + selection.getFocusOffset() +
-                                // "<br/>anchor offset:"
-                                // + selection.getAnchorOffset() +
-                                // "<br/>range 0 as html: "
-                                // + selection.getRangeAt(0).toHTML();
-                                // NotifyUser.info(info);
+                                view.getRangeInfo();
                             }
                         });
                     }
@@ -799,7 +794,7 @@
         actions.add(withNoItem(hr));
         actions.add(withNoItem(undoBtn));
         actions.add(withNoItem(redoBtn));
-        // actions.add(withNoItem(devInfo));
+        actions.add(withNoItem(devInfo));
 
         for (String fontName : this.fontNames) {
             ActionToolbarMenuDescriptor<Object> fontNameAction = createFontNameAction(canBeBasic, fontName);

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -3,6 +3,7 @@
 import org.ourproject.kune.platf.client.View;
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
 import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
 
 public interface RTEditorView extends View {
 
@@ -26,6 +27,12 @@
 
     String getHTML();
 
+    LinkInfo getLinkInfoIfHref();
+
+    void getRangeInfo();
+
+    String getSelectionText();
+
     String getText();
 
     void insertBlockquote();

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/editor/EditHtmlEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/editor/EditHtmlEditorPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/editor/EditHtmlEditorPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -24,7 +24,7 @@
 
     public void init(EditHtmlEditorView view) {
         this.view = view;
-        editHtml.addOptionTab(view);
+        editHtml.addTab(view);
     }
 
     public void setHtml(String html) {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/preview/EditHtmlPreviewPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/preview/EditHtmlPreviewPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/edithtml/preview/EditHtmlPreviewPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,6 +22,6 @@
 
     public void init(EditHtmlPreviewView view) {
         this.view = view;
-        editHtml.addOptionTab(view);
+        editHtml.addTab(view);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -11,7 +11,7 @@
     }
 
     public void init(InsertImageExtView view) {
-        insertImageDialog.addOptionTab(view);
+        insertImageDialog.addTab(view);
     }
 
     public void onInsert() {

Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -1,161 +0,0 @@
-/*
- * See the NOTICE file distributed with this work for additional
- * information regarding copyright ownership.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.ourproject.kune.platf.client.ui.rte.insertlink;
-
-import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
-
-import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.ui.LoadListener;
-import com.google.gwt.user.client.ui.RootPanel;
-import com.google.gwt.user.client.ui.SourcesLoadEvents;
-import com.google.gwt.user.client.ui.Widget;
-import com.xpn.xwiki.wysiwyg.client.dom.Element;
-import com.xpn.xwiki.wysiwyg.client.dom.Range;
-import com.xpn.xwiki.wysiwyg.client.dom.Selection;
-
-/**
- * Base class for tests running on a rich text area.
- * 
- * @version $Id$
- */
-public class AbstractRichTextAreaTest extends AbstractWysiwygClientTest implements LoadListener {
-    /**
-     * The number of milliseconds we delay the test finish. This delay is needed
-     * because in some browsers the rich text area is initialized after a
-     * timeout.
-     */
-    public static final int FINISH_DELAY = 400;
-
-    /**
-     * The number of milliseconds we delay the test start. This delay is needed
-     * because in some browsers the rich text area is initialized after a
-     * timeout and we want to start the test after the rich text area is fully
-     * initialized.
-     */
-    public static final int START_DELAY = 300;
-
-    /**
-     * The rich text area on which we run the tests.
-     */
-    protected RichTextArea rta;
-
-    /**
-     * {@inheritDoc}
-     * 
-     * @see LoadListener#onError(Widget)
-     */
-    public void onError(Widget sender) {
-        // ignore
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * @see LoadListener#onLoad(Widget)
-     */
-    public void onLoad(Widget sender) {
-        // http://wiki.codetalks.org/wiki/index.php/Docs/Keyboard_navigable_JS_widgets
-        // #Use_setTimeout_with_element.focus.28.29_to_set_focus
-        (new Timer() {
-            @Override
-            public void run() {
-                rta.setFocus(true);
-            }
-        }).schedule(1);
-    }
-
-    /**
-     * Cleans the HTML input. This is needed in order to have uniform tests
-     * between Firefox and Internet Explorer.
-     * 
-     * @param html
-     *            The HTML fragment to be cleaned.
-     * @return The input string in lower case, stripped of new lines.
-     */
-    protected String clean(String html) {
-        return html.replaceAll("\r\n", "").toLowerCase();
-    }
-
-    /**
-     * @return The body element of the DOM document edited with the rich text
-     *         area.
-     */
-    protected Element getBody() {
-        return rta.getDocument().getBody().cast();
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * @see AbstractWysiwygClientTest#gwtSetUp()
-     */
-    @Override
-    protected void gwtSetUp() throws Exception {
-        super.gwtSetUp();
-
-        if (rta == null) {
-            rta = new RichTextArea();
-            // Workaround till GWT provides a way to detect when the rich text
-            // area has finished loading.
-            if (rta.getBasicFormatter() != null && rta.getBasicFormatter() instanceof SourcesLoadEvents) {
-                ((SourcesLoadEvents) rta.getBasicFormatter()).addLoadListener(this);
-            }
-        }
-        RootPanel.get().add(rta);
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
-     * @see AbstractWysiwygClientTest#gwtTearDown()
-     */
-    @Override
-    protected void gwtTearDown() throws Exception {
-        super.gwtTearDown();
-
-        RootPanel.get().remove(rta);
-    }
-
-    /**
-     * Removes the non-breaking spaces, {@code &nbsp;}, from the given HTML. The
-     * is method is needed because the Selection implementation for Internet
-     * Explorer adds {@code &nbsp;} when it cannot place the caret at the
-     * specified place.
-     * 
-     * @param html
-     *            the HTML fragment to be cleaned of non-breaking spaces
-     * @return the input HTML fragment without any non-breaking spaces
-     */
-    protected String removeNonBreakingSpaces(String html) {
-        return html.replace("&nbsp;", "");
-    }
-
-    /**
-     * Selects the given range.
-     * 
-     * @param range
-     *            The range to be selected.
-     */
-    protected void select(Range range) {
-        Selection selection = rta.getDocument().getSelection();
-        selection.removeAllRanges();
-        selection.addRange(range);
-    }
-}

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java (from rev 1078, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java	2009-03-16 04:13:36 UTC (rev 1078)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -0,0 +1,161 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.ourproject.kune.platf.client.ui.rte.insertlink;
+
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
+import org.xwiki.gwt.dom.client.Element;
+import org.xwiki.gwt.dom.client.Range;
+import org.xwiki.gwt.dom.client.Selection;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.LoadListener;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.SourcesLoadEvents;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * Base class for tests running on a rich text area.
+ * 
+ * @version $Id$
+ */
+public class AbstractRichTextAreaTest extends AbstractWysiwygClientTest implements LoadListener {
+    /**
+     * The number of milliseconds we delay the test finish. This delay is needed
+     * because in some browsers the rich text area is initialized after a
+     * timeout.
+     */
+    public static final int FINISH_DELAY = 400;
+
+    /**
+     * The number of milliseconds we delay the test start. This delay is needed
+     * because in some browsers the rich text area is initialized after a
+     * timeout and we want to start the test after the rich text area is fully
+     * initialized.
+     */
+    public static final int START_DELAY = 300;
+
+    /**
+     * The rich text area on which we run the tests.
+     */
+    protected RichTextArea rta;
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see LoadListener#onError(Widget)
+     */
+    public void onError(Widget sender) {
+        // ignore
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see LoadListener#onLoad(Widget)
+     */
+    public void onLoad(Widget sender) {
+        // http://wiki.codetalks.org/wiki/index.php/Docs/Keyboard_navigable_JS_widgets
+        // #Use_setTimeout_with_element.focus.28.29_to_set_focus
+        (new Timer() {
+            @Override
+            public void run() {
+                rta.setFocus(true);
+            }
+        }).schedule(1);
+    }
+
+    /**
+     * Cleans the HTML input. This is needed in order to have uniform tests
+     * between Firefox and Internet Explorer.
+     * 
+     * @param html
+     *            The HTML fragment to be cleaned.
+     * @return The input string in lower case, stripped of new lines.
+     */
+    protected String clean(String html) {
+        return html.replaceAll("\r\n", "").toLowerCase();
+    }
+
+    /**
+     * @return The body element of the DOM document edited with the rich text
+     *         area.
+     */
+    protected Element getBody() {
+        return rta.getDocument().getBody().cast();
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see AbstractWysiwygClientTest#gwtSetUp()
+     */
+    @Override
+    protected void gwtSetUp() throws Exception {
+        super.gwtSetUp();
+
+        if (rta == null) {
+            rta = new RichTextArea();
+            // Workaround till GWT provides a way to detect when the rich text
+            // area has finished loading.
+            if (rta.getBasicFormatter() != null && rta.getBasicFormatter() instanceof SourcesLoadEvents) {
+                ((SourcesLoadEvents) rta.getBasicFormatter()).addLoadListener(this);
+            }
+        }
+        RootPanel.get().add(rta);
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see AbstractWysiwygClientTest#gwtTearDown()
+     */
+    @Override
+    protected void gwtTearDown() throws Exception {
+        super.gwtTearDown();
+
+        RootPanel.get().remove(rta);
+    }
+
+    /**
+     * Removes the non-breaking spaces, {@code &nbsp;}, from the given HTML. The
+     * is method is needed because the Selection implementation for Internet
+     * Explorer adds {@code &nbsp;} when it cannot place the caret at the
+     * specified place.
+     * 
+     * @param html
+     *            the HTML fragment to be cleaned of non-breaking spaces
+     * @return the input HTML fragment without any non-breaking spaces
+     */
+    protected String removeNonBreakingSpaces(String html) {
+        return html.replace("&nbsp;", "");
+    }
+
+    /**
+     * Selects the given range.
+     * 
+     * @param range
+     *            The range to be selected.
+     */
+    protected void select(Range range) {
+        Selection selection = rta.getDocument().getSelection();
+        selection.removeAllRanges();
+        selection.addRange(range);
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialog.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialog.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -21,12 +21,23 @@
 
 import org.ourproject.kune.platf.client.ui.dialogs.tabbed.AbstractTabbedDialog;
 
-import com.calclab.suco.client.events.Listener2;
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.events.Listener0;
 
 public interface InsertLinkDialog extends AbstractTabbedDialog {
 
-    void fireOnCreateLink(String name, String link);
+    void fireOnInsertLink(LinkInfo linkInfo);
 
-    void setOnCreateLink(Listener2<String, String> listener);
+    LinkInfo getLinkInfo();
 
+    void setLinkInfo(LinkInfo linkInfo);
+
+    void setLinkText(String text);
+
+    void setLinkTitle(String title);
+
+    void setOnCreateLink(Listener<LinkInfo> listener);
+
+    void setOnInsertLinkPressed(Listener0 onInsertLinkPressed);
+
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -24,16 +24,19 @@
 import org.ourproject.kune.platf.client.ui.dialogs.tabbed.AbstractTabbedDialogPanel;
 
 import com.calclab.suco.client.events.Listener0;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
 
 public class InsertLinkDialogPanel extends AbstractTabbedDialogPanel implements InsertLinkDialogView {
     public static final String TEXT_EDT_INSERT_DIALOG = "k-ted-iep-dialog";
     public static final String TEXT_EDT_INSERT_DIALOG_ERROR_ID = "k-ted-iep-dialog-err";
     private final InsertLinkGroup textEditorInsertElementGroup;
 
-    public InsertLinkDialogPanel(final InsertLinkDialogPresenter presenter, Images images,
-            I18nTranslationService i18n, final InsertLinkGroup textEditorInsertElementGroup) {
+    public InsertLinkDialogPanel(final InsertLinkDialogPresenter presenter, Images images, I18nTranslationService i18n,
+            final InsertLinkGroup textEditorInsertElementGroup) {
         super(TEXT_EDT_INSERT_DIALOG, i18n.tWithNT("Insert a link",
-                "Option in a text editor to insert links and other elements"), 380, HEIGHT + 90, 380, HEIGHT + 90,
+                "Option in a text editor to insert links and other elements"), 380, HEIGHT + 100, 380, HEIGHT + 100,
                 true, images, TEXT_EDT_INSERT_DIALOG_ERROR_ID);
         super.setIconCls("k-link-icon");
         this.textEditorInsertElementGroup = textEditorInsertElementGroup;
@@ -42,6 +45,25 @@
                 textEditorInsertElementGroup.resetAll();
             }
         });
+
+        Button insert = new Button(i18n.t("Insert"));
+        insert.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                presenter.onInsert();
+            }
+        });
+
+        Button cancel = new Button(i18n.t("Cancel"));
+        cancel.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                presenter.onCancel();
+            }
+        });
+        addButton(insert);
+        addButton(cancel);
+
     }
 
     @Override

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -21,27 +21,53 @@
 
 import org.ourproject.kune.platf.client.ui.dialogs.tabbed.AbstractTabbedDialogPresenter;
 
-import com.calclab.suco.client.events.Listener2;
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.events.Listener0;
 
 public class InsertLinkDialogPresenter extends AbstractTabbedDialogPresenter implements InsertLinkDialog {
 
-    private Listener2<String, String> onCreateListener;
+    private Listener<LinkInfo> onCreateListener;
+    private LinkInfo linkInfo;
+    private Listener0 onInsertLinkPressed;
 
     public InsertLinkDialogPresenter() {
     }
 
-    public void fireOnCreateLink(String name, String link) {
-        onCreateListener.onEvent(name, link);
+    public void fireOnInsertLink(LinkInfo linkInfo) {
+        onCreateListener.onEvent(linkInfo);
         super.hide();
     }
 
-    public void fireOnInsertHtml(String name, String link) {
-        onCreateListener.onEvent(name, link);
+    public LinkInfo getLinkInfo() {
+        return linkInfo;
+    }
+
+    public void onCancel() {
         super.hide();
     }
 
-    public void setOnCreateLink(final Listener2<String, String> listener) {
+    public void setLinkInfo(LinkInfo linkInfo) {
+        this.linkInfo = linkInfo;
+    }
+
+    public void setLinkText(String text) {
+        linkInfo.setText(text);
+    }
+
+    public void setLinkTitle(String title) {
+        linkInfo.setTitle(title);
+    }
+
+    public void setOnCreateLink(final Listener<LinkInfo> listener) {
         this.onCreateListener = listener;
     }
 
+    public void setOnInsertLinkPressed(Listener0 onInsertLinkPressed) {
+        this.onInsertLinkPressed = onInsertLinkPressed;
+    }
+
+    protected void onInsert() {
+        onInsertLinkPressed.onEvent();
+    }
+
 }
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/InsertLinkDialogView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -23,5 +23,7 @@
 import org.ourproject.kune.platf.client.ui.dialogs.tabbed.AbstractTabbedDialogView;
 
 public interface InsertLinkDialogView extends AbstractTabbedDialogView, View {
-    int HEIGHT = 225;
+
+    int HEIGHT = 320;
+
 }

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkExecutableUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkExecutableUtils.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkExecutableUtils.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -0,0 +1,106 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.ourproject.kune.platf.client.ui.rte.insertlink;
+
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
+import org.xwiki.gwt.dom.client.DOMUtils;
+import org.xwiki.gwt.dom.client.Element;
+import org.xwiki.gwt.dom.client.Range;
+
+import com.google.gwt.dom.client.Node;
+
+/**
+ * Utility class to perform functions associated to link executables, such as
+ * detecting the selected anchor. We have this as static function in a distinct
+ * class since there is no way to insert this on both the
+ * {@link CreateLinkExecutable} and {@link UnlinkExecutable} hierarchies.
+ * 
+ * @version $Id$
+ */
+public class LinkExecutableUtils {
+    /**
+     * The tag name of the anchor element.
+     */
+    public static final String ANCHOR_TAG_NAME = "a";
+
+    /**
+     * Returns the currently selected anchor element in the passed
+     * {@link RichTextArea}, as the user perceives the selection. The algorithm
+     * used is as follows:
+     * <ul>
+     * <li>find anchor ancestor of the first leaf of the selection. If the first
+     * leaf is the selection start container and the offset is at the end, then
+     * eliminate this first leaf and analyze the second</li>
+     * <li>find anchor ancestor of the last leaf of the selection. If the last
+     * leaf is the end container and the selection starts at its very beginning,
+     * skip this and analyze the previous leaf</li>
+     * <li>is the two ancestor anchors are not null and are the same, this
+     * anchor is the selected anchor</li>
+     * </ul>
+     * 
+     * @param rta
+     *            the rich text area whose selection to test
+     * @return the anchor in which the current selection is found
+     */
+    public static Element getSelectedAnchor(RichTextArea rta) {
+        // there is no wrapping anchor if there is no selection
+        if (rta.getDocument().getSelection().getRangeCount() == 0) {
+            return null;
+        }
+        // Find the selected anchor by the following algorithm:
+        Range range = rta.getDocument().getSelection().getRangeAt(0);
+        // if the selection is collapsed, we have our answer already
+        if (range.isCollapsed()) {
+            return (Element) DOMUtils.getInstance().getFirstAncestor(range.getStartContainer(), ANCHOR_TAG_NAME);
+        }
+        Element foundAncestorStart = null;
+        Element foundAncestorEnd = null;
+        // get the first leaf of the selection and check it out
+        Node firstLeaf = DOMUtils.getInstance().getFirstLeaf(range);
+        if (firstLeaf == range.getStartContainer()
+                && range.getStartOffset() == DOMUtils.getInstance().getLength(firstLeaf)) {
+            firstLeaf = DOMUtils.getInstance().getNextLeaf(firstLeaf);
+        }
+        foundAncestorStart = (Element) DOMUtils.getInstance().getFirstAncestor(firstLeaf, ANCHOR_TAG_NAME);
+        // if no anchor found for start, it's pointless to keep looking, won't
+        // find anything
+        if (foundAncestorStart == null) {
+            return null;
+        }
+        // check the other end
+        Node lastLeaf = DOMUtils.getInstance().getLastLeaf(range);
+        if (lastLeaf == range.getEndContainer() && range.getEndOffset() == 0) {
+            lastLeaf = DOMUtils.getInstance().getPreviousLeaf(lastLeaf);
+        }
+        foundAncestorEnd = (Element) DOMUtils.getInstance().getFirstAncestor(lastLeaf, ANCHOR_TAG_NAME);
+
+        if (foundAncestorStart == foundAncestorEnd && foundAncestorStart != null) {
+            return foundAncestorStart;
+        }
+
+        return null;
+    }
+
+    /**
+     * Protected constructor.
+     */
+    protected LinkExecutableUtils() {
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfo.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfo.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfo.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -1,9 +1,9 @@
 package org.ourproject.kune.platf.client.ui.rte.insertlink;
 
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.DOM;
 
 public class LinkInfo {
-
     private static final String HREF = "href";
     // private static final String TITLE = "title";
     private static final String TARGET = "target";
@@ -15,19 +15,57 @@
                 && target.equals(_BLANK));
     }
 
+    public static LinkInfo parse(org.xwiki.gwt.dom.client.Element element) {
+        String target = element.getAttribute(TARGET);
+        return new LinkInfo(element.getInnerText(), element.getTitle(), element.getAttribute(HREF), target != null
+                && target.equals(_BLANK));
+    }
+
     private String text;
     private String title;
-    private String url;
+    private String href;
+    private String target;
 
-    private boolean inNewWindow;
+    public LinkInfo(String text) {
+        this(text, null, "", false);
+    }
 
-    public LinkInfo(String text, String title, String url, boolean inNewWindow) {
+    public LinkInfo(String text, String href) {
         this.text = text;
+        this.href = href;
+    }
+
+    public LinkInfo(String text, String title, String href, boolean inNewWindow) {
+        this.text = text;
+        this.href = href;
         this.title = title;
-        this.url = url;
-        this.inNewWindow = inNewWindow;
+        if (inNewWindow) {
+            this.setTarget(_BLANK);
+        }
     }
 
+    public Element getElement() {
+        Element anchor = DOM.createAnchor();
+        com.google.gwt.user.client.Element element = (com.google.gwt.user.client.Element) anchor;
+        DOM.setElementProperty(element, "href", href);
+        if (getTarget() != null) {
+            DOM.setElementProperty(element, TARGET, getTarget());
+        }
+        if (title != null) {
+            DOM.setElementAttribute(element, "title", title);
+        }
+        DOM.setInnerText(element, text);
+        return anchor;
+    }
+
+    public String getHref() {
+        return href;
+    }
+
+    public String getTarget() {
+        return target;
+    }
+
     public String getText() {
         return text;
     }
@@ -36,16 +74,20 @@
         return title;
     }
 
-    public String getUrl() {
-        return url;
+    public boolean inSameWindow() {
+        if (target != null) {
+            return target.equals(_BLANK);
+        } else {
+            return false;
+        }
     }
 
-    public boolean isInNewWindow() {
-        return inNewWindow;
+    public void setHref(String href) {
+        this.href = href;
     }
 
-    public void setInNewWindow(boolean inNewWindow) {
-        this.inNewWindow = inNewWindow;
+    public void setTarget(String target) {
+        this.target = target;
     }
 
     public void setText(String text) {
@@ -56,8 +98,10 @@
         this.title = title;
     }
 
-    public void setUrl(String url) {
-        this.url = url;
+    @Override
+    public String toString() {
+        Element anchor = getElement();
+        return anchor.getString();
     }
 
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -1,8 +1,11 @@
 package org.ourproject.kune.platf.client.ui.rte.insertlink;
 
+import org.xwiki.gwt.dom.client.Element;
+import org.xwiki.gwt.dom.client.Range;
+import org.xwiki.gwt.dom.client.Selection;
+
 import com.allen_sauer.gwt.log.client.Log;
-import com.xpn.xwiki.wysiwyg.client.dom.Range;
-import com.xpn.xwiki.wysiwyg.client.dom.Selection;
+import com.google.gwt.user.client.Timer;
 
 public class LinkInfoTest extends AbstractRichTextAreaTest {
 
@@ -11,35 +14,48 @@
     private static final String TITLE = "on over";
     private static final String _BLANK = "_blank";
 
-    @Override
-    public String getModuleName() {
-        return "org.ourproject.kune.app.Kune";
-    }
-
-    public void testSimpleLink() {
-        // String html = createHtmlLink(HREF, TITLE, _BLANK, TEXT);
-        rta.setHTML(TEXT);
+    public void doTestSimpleLink() {
+        String html = createHtmlLink(HREF, TITLE, _BLANK, TEXT);
+        rta.setHTML(html);
         Log.debug(rta.getHTML());
 
         Range range = rta.getDocument().createRange();
         range.setStart(getBody().getFirstChild(), 1);
-        range.setEnd(getBody().getFirstChild(), 3);
-        String selectedText = "om";
+        range.setEnd(getBody().getFirstChild(), 1);
 
         Selection selection = rta.getDocument().getSelection();
         selection.removeAllRanges();
         selection.addRange(range);
-        assertEquals(selectedText, selection.toString());
-        //
-        // LinkInfo linkParsed =
-        // LinkInfo.parse(getBody().getFirstChildElement());
-        // assertEquals(TEXT, linkParsed.getText());
-        // assertEquals(HREF, linkParsed.getUrl());
-        // assertEquals(TITLE, linkParsed.getTitle());
-        // assertEquals(false, linkParsed.isInNewWindow());
+
+        Element selectedAnchor = LinkExecutableUtils.getSelectedAnchor(rta);
+
+        Log.info(selectedAnchor.getString());
+
+        LinkInfo linkParsed = LinkInfo.parse(getBody().getFirstChildElement());
+        assertEquals(TEXT, linkParsed.getText());
+        assertEquals(HREF, linkParsed.getHref());
+        assertEquals(TITLE, linkParsed.getTitle());
+        assertEquals(_BLANK, linkParsed.getTarget());
     }
 
+    @Override
+    public String getModuleName() {
+        return "org.ourproject.kune.app.Kune";
+    }
+
+    public void testPlainTextSelectionWithoutModification() {
+        delayTestFinish(FINISH_DELAY);
+        (new Timer() {
+            @Override
+            public void run() {
+                doTestSimpleLink();
+                finishTest();
+            }
+        }).schedule(START_DELAY);
+    }
+
     private String createHtmlLink(String href, String title, String target, String text) {
         return "<a title=\"" + title + "\" href=\"" + href + "\" target=\"" + target + "\">" + text + "</a>";
     }
+
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstract.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstract.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstract.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,5 +22,4 @@
 public interface InsertLinkAbstract {
 
     void reset();
-
 }

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -0,0 +1,120 @@
+package org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink;
+
+import org.ourproject.kune.platf.client.i18n.Resources;
+import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogView;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.gwtext.client.core.EventCallback;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.form.Checkbox;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.form.event.FormPanelListenerAdapter;
+
+public class InsertLinkAbstractPanel extends DefaultForm {
+
+    protected TextField textField;
+    protected TextField hrefField;
+    protected TextField onOverField;
+    protected final Checkbox sameWindow;
+
+    public InsertLinkAbstractPanel(String title, final InsertLinkAbstractPresenter presenter) {
+        super(title);
+        super.setAutoWidth(true);
+        super.setHeight(InsertLinkDialogView.HEIGHT);
+
+        hrefField = new TextField();
+        hrefField.setTabIndex(1);
+        hrefField.setWidth(DEF_FIELD_WIDTH);
+        hrefField.setAllowBlank(false);
+        hrefField.setMinLength(3);
+        hrefField.setMaxLength(250);
+        hrefField.setValidationEvent(false);
+
+        textField = new TextField();
+        textField.setTabIndex(2);
+        textField.setFieldLabel(Resources.i18n.t("Text"));
+        textField.setWidth(DEF_FIELD_WIDTH);
+        textField.setValidationEvent(false);
+        textField.setTitle(Resources.i18n.t("The hyper-linked text, like: ")
+                + "<span style=\"font-color:navy !important; text-decoration:underline;\">"
+                + Resources.i18n.t("Click me for more information!"));
+
+        onOverField = new TextField();
+        onOverField.setTabIndex(3);
+        onOverField.setFieldLabel(Resources.i18n.t("Flyover"));
+        onOverField.setWidth(DEF_FIELD_WIDTH);
+        onOverField.setValidationEvent(false);
+        onOverField.setTitle(Resources.i18n.t("The flyover appears when the viewer's mouse cursor is over the link."));
+
+        sameWindow = new Checkbox(Resources.i18n.t("Open link in new window"));
+        sameWindow.setChecked(false);
+
+        textField.addKeyPressListener(new EventCallback() {
+            public void execute(EventObject e) {
+                DeferredCommand.addCommand(new Command() {
+                    public void execute() {
+                        presenter.onTextFieldChanged(textField.getRawValue());
+                    }
+                });
+            }
+        });
+
+        onOverField.addKeyPressListener(new EventCallback() {
+            public void execute(EventObject e) {
+                DeferredCommand.addCommand(new Command() {
+                    public void execute() {
+                        presenter.onOverFieldChanged(onOverField.getRawValue());
+                    }
+                });
+            }
+        });
+
+        super.addListener(new FormPanelListenerAdapter() {
+            @Override
+            public void onActivate(Panel panel) {
+                LinkInfo linkInfo = presenter.getLinkInfo();
+                updateValues(linkInfo);
+                presenter.onActivate();
+            }
+        });
+
+        add(hrefField);
+        add(textField);
+        add(onOverField);
+        add(sameWindow);
+    }
+
+    public String getHref() {
+        return hrefField.getRawValue();
+    }
+
+    public String getText() {
+        return textField.getRawValue();
+    }
+
+    public String getTitle() {
+        return onOverField.getRawValue();
+    }
+
+    public boolean inSameWindow() {
+        return sameWindow.getValue();
+    }
+
+    @Override
+    public void insert(int index, Component component) {
+        super.insert(index, component);
+    }
+
+    protected void updateValues(LinkInfo linkInfo) {
+        textField.setValue(linkInfo.getText());
+        onOverField.setValue(linkInfo.getTitle());
+        if (sameWindow.isVisible()) {
+            sameWindow.setChecked(linkInfo.inSameWindow());
+        }
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -21,31 +21,70 @@
 
 import org.ourproject.kune.platf.client.View;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
 
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.events.Listener0;
+
 public class InsertLinkAbstractPresenter implements InsertLinkAbstract {
 
-    private InsertLinkAbstractView view;
-    private final InsertLinkDialog editorInsertElement;
+    protected InsertLinkAbstractView view;
+    protected final InsertLinkDialog editorInsertDialog;
+    private final Listener0 onInsertLinkPressed;
 
-    public InsertLinkAbstractPresenter(InsertLinkDialog editorInsertElement) {
-        this.editorInsertElement = editorInsertElement;
+    public InsertLinkAbstractPresenter(final InsertLinkDialog editorInsertDialog) {
+        this.editorInsertDialog = editorInsertDialog;
+        onInsertLinkPressed = new Listener0() {
+            public void onEvent() {
+                if (isValid()) {
+                    LinkInfo linkInfo = updateLinkInfo();
+                    editorInsertDialog.fireOnInsertLink(linkInfo);
+                } else {
+                    Log.debug("Form in InsertLink not valid");
+                }
+            }
+        };
     }
 
+    public LinkInfo getLinkInfo() {
+        return editorInsertDialog.getLinkInfo();
+    }
+
     public View getView() {
         return view;
     }
 
     public void init(InsertLinkAbstractView view) {
         this.view = view;
-        editorInsertElement.addOptionTab(view);
+        editorInsertDialog.addTab(view);
     }
 
-    public void onInsert(String name, String link) {
-        editorInsertElement.fireOnCreateLink(name, link);
+    public boolean isValid() {
+        return view.isValid();
+    }
+
+    public void onActivate() {
+        editorInsertDialog.setOnInsertLinkPressed(onInsertLinkPressed);
+    }
+
+    public void onInsert(LinkInfo linkInfo) {
+        editorInsertDialog.fireOnInsertLink(linkInfo);
         reset();
     }
 
+    public void onOverFieldChanged(String title) {
+        editorInsertDialog.setLinkTitle(title);
+    }
+
+    public void onTextFieldChanged(String text) {
+        editorInsertDialog.setLinkText(text);
+    }
+
     public void reset() {
         view.reset();
     }
+
+    protected LinkInfo updateLinkInfo() {
+        return new LinkInfo(view.getText(), view.getTitle(), view.getHref(), view.inSameWindow());
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/abstractlink/InsertLinkAbstractView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -23,6 +23,15 @@
 
 public interface InsertLinkAbstractView extends View {
 
+    String getHref();
+
+    String getText();
+
+    String getTitle();
+
+    boolean inSameWindow();
+
+    boolean isValid();
+
     void reset();
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -20,48 +20,31 @@
 package org.ourproject.kune.platf.client.ui.rte.insertlink.email;
 
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
-import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm;
-import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogView;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractPanel;
 
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.form.TextField;
 import com.gwtext.client.widgets.form.VType;
 
-public class InsertLinkEmailPanel extends DefaultForm implements InsertLinkEmailView {
+public class InsertLinkEmailPanel extends InsertLinkAbstractPanel implements InsertLinkEmailView {
 
-    public static final String EMAIL_FIELD = "k-teilep-email-field";
-    private final TextField emailField;
+    public InsertLinkEmailPanel(final InsertLinkEmailPresenter presenter, I18nTranslationService i18n) {
+        super(i18n.t("Email link"), presenter);
 
-    public InsertLinkEmailPanel(final InsertLinkEmailPresenter presenter,
-            I18nTranslationService i18n) {
-        super(i18n.t("Email link"));
-        super.setAutoWidth(true);
-        super.setHeight(InsertLinkDialogView.HEIGHT);
-        emailField = new TextField();
-        emailField.setTabIndex(4);
-        emailField.setFieldLabel(i18n.t("Email"));
-        emailField.setName(EMAIL_FIELD);
-        emailField.setVtype(VType.EMAIL);
-        emailField.setWidth(DEF_MEDIUM_FIELD_WIDTH);
-        emailField.setAllowBlank(false);
-        emailField.setValidationEvent(false);
-        emailField.setId(EMAIL_FIELD);
-        add(emailField);
-        Button insert = new Button(i18n.t("Insert"));
-        insert.addListener(new ButtonListenerAdapter() {
-            @Override
-            public void onClick(Button button, EventObject e) {
-                if (getFormPanel().getForm().isValid()) {
-                    presenter.onInsert("", "mailto://" + emailField.getRawValue());
-                }
-            }
-        });
-        addButton(insert);
+        hrefField.setFieldLabel(i18n.t("Email"));
+        hrefField.setVtype(VType.EMAIL);
+
+        sameWindow.setVisible(false);
     }
 
     public void clear() {
         super.reset();
     }
+
+    @Override
+    protected void updateValues(LinkInfo linkInfo) {
+        super.updateValues(linkInfo);
+        if (!linkInfo.getHref().startsWith("mailto")) {
+            hrefField.reset();
+        }
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -20,13 +20,24 @@
 package org.ourproject.kune.platf.client.ui.rte.insertlink.email;
 
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractPresenter;
 
-public class InsertLinkEmailPresenter extends InsertLinkAbstractPresenter implements
-        InsertLinkEmail {
+public class InsertLinkEmailPresenter extends InsertLinkAbstractPresenter implements InsertLinkEmail {
 
+    private InsertLinkEmailView view;
+
     public InsertLinkEmailPresenter(InsertLinkDialog editorInsertElement) {
         super(editorInsertElement);
     }
 
+    public void init(InsertLinkEmailView view) {
+        super.init(view);
+        this.view = view;
+    }
+
+    @Override
+    protected LinkInfo updateLinkInfo() {
+        return new LinkInfo(view.getText(), view.getTitle(), "mailto://" + view.getHref(), false);
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/email/InsertLinkEmailView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,4 +22,5 @@
 import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractView;
 
 public interface InsertLinkEmailView extends InsertLinkAbstractView {
+
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -20,9 +20,10 @@
 package org.ourproject.kune.platf.client.ui.rte.insertlink.ext;
 
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.i18n.Resources;
 import org.ourproject.kune.platf.client.ui.TextUtils;
-import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm;
-import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogView;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.LinkInfo;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractPanel;
 
 import com.google.gwt.user.client.ui.Frame;
 import com.gwtext.client.core.EventObject;
@@ -30,37 +31,25 @@
 import com.gwtext.client.widgets.PaddedPanel;
 import com.gwtext.client.widgets.Panel;
 import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.form.TextField;
 import com.gwtext.client.widgets.layout.FitLayout;
 
-public class InsertLinkExtPanel extends DefaultForm implements InsertLinkExtView {
+public class InsertLinkExtPanel extends InsertLinkAbstractPanel implements InsertLinkExtView {
 
-    public static final String LINK_FIELD = "k-teilep-link-f";
-    final TextField linkField;
     final Panel previewPanel;
 
-    public InsertLinkExtPanel(final InsertLinkExtPresenter presenter,
-            final I18nTranslationService i18n) {
-        super(i18n.t("External link"));
-        super.setAutoWidth(true);
-        super.setHeight(InsertLinkDialogView.HEIGHT);
-        linkField = new TextField();
-        linkField.setTabIndex(1);
-        linkField.setFieldLabel(i18n.t("External link (URL)"));
-        linkField.setRegex(TextUtils.URL_REGEXP);
-        linkField.setRegexText(i18n.t("The link should be a URL in the format 'http://www.domain.com'"));
-        linkField.setName(LINK_FIELD);
-        linkField.setWidth(DEF_FIELD_WIDTH);
-        linkField.setAllowBlank(false);
-        linkField.setMinLength(3);
-        linkField.setMaxLength(250);
-        linkField.setValidationEvent(false);
-        linkField.setId(LINK_FIELD);
-        add(linkField);
+    public InsertLinkExtPanel(final InsertLinkExtPresenter presenter, final I18nTranslationService i18n) {
+        super(i18n.t("External link"), presenter);
+
+        hrefField.setFieldLabel(Resources.i18n.t("External link (URL)"));
+        hrefField.setRegex(TextUtils.URL_REGEXP);
+        hrefField.setRegexText(Resources.i18n.t("The link should be a URL in the format 'http://www.domain.com'"));
+
         previewPanel = new Panel();
         previewPanel.setLayout(new FitLayout());
         previewPanel.setHeight(125);
+
         add(new PaddedPanel(previewPanel, 0));
+
         Button preview = new Button(i18n.t("Preview"));
         preview.addListener(new ButtonListenerAdapter() {
             @Override
@@ -69,19 +58,10 @@
             }
         });
         addButton(preview);
-
-        Button insert = new Button(i18n.t("Insert"));
-        insert.addListener(new ButtonListenerAdapter() {
-            @Override
-            public void onClick(Button button, EventObject e) {
-                presenter.onInsert();
-            }
-        });
-        addButton(insert);
     }
 
     public String getUrl() {
-        return linkField.getRawValue();
+        return hrefField.getRawValue();
     }
 
     @Override
@@ -98,6 +78,18 @@
     }
 
     public void setUrl(String url) {
-        linkField.setValue(url);
+        hrefField.setValue(url);
     }
+
+    @Override
+    protected void updateValues(LinkInfo linkInfo) {
+        super.updateValues(linkInfo);
+        String href = linkInfo.getHref();
+        if (href != null && !href.equals("")) {
+            String hrefValue = hrefField.getRawValue();
+            if (hrefValue != null && hrefValue.length() == 0) {
+                hrefField.setValue(href);
+            }
+        }
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -23,13 +23,8 @@
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractPresenter;
 
-public class InsertLinkExtPresenter extends InsertLinkAbstractPresenter implements
-        InsertLinkExt {
+public class InsertLinkExtPresenter extends InsertLinkAbstractPresenter implements InsertLinkExt {
 
-    interface Action {
-        void onValid(String url);
-    }
-
     private InsertLinkExtView view;
 
     public InsertLinkExtPresenter(InsertLinkDialog editorInsertElement) {
@@ -39,41 +34,33 @@
     public void init(InsertLinkExtView view) {
         super.init(view);
         this.view = view;
+        // editorInsertDialog.insertTab(0, view);
     }
 
-    public void onInsert() {
-        doActionIfValid(new Action() {
-            public void onValid(String url) {
-                onInsert("", url);
-            }
-        });
-    }
-
-    public void onPreview() {
-        doActionIfValid(new Action() {
-            public void onValid(String url) {
-                view.setPreviewUrl(url);
-            }
-        });
-    }
-
-    private void doActionIfValid(Action action) {
+    @Override
+    public boolean isValid() {
         String url = view.getUrl();
         if (url.matches(TextUtils.URL_REGEXP)) {
-            action.onValid(url);
+            return true;
         } else {
             if (!url.startsWith("http://")) {
                 url = "http://" + url;
                 if (url.matches(TextUtils.URL_REGEXP)) {
                     view.setUrl(url);
-                    action.onValid(url);
+                    return true;
                 } else {
-                    view.isValid();
+                    return view.isValid();
                 }
             } else {
                 // Seems is not valid
-                view.isValid();
+                return view.isValid();
             }
         }
     }
+
+    public void onPreview() {
+        if (isValid()) {
+            view.setPreviewUrl(view.getUrl());
+        }
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtView.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/ext/InsertLinkExtView.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -30,4 +30,6 @@
     public void setPreviewUrl(String url);
 
     public void setUrl(String url);
+
+    boolean inSameWindow();
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/asian/InsertSpecialAsianCharPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/asian/InsertSpecialAsianCharPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/asian/InsertSpecialAsianCharPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -17,6 +17,6 @@
     public InsertSpecialAsianCharPanel(InsertSpecialCharDialog insertSpecialCharDialog, I18nTranslationService i18n) {
         super(insertSpecialCharDialog, i18n.t("Asian characters"), i18n.t(InsertSpecialCharDialog.DEF_LABEL),
                 SPECIAL_CHARS, 7, 20);
-        insertSpecialCharDialog.addOptionTab(this);
+        insertSpecialCharDialog.addTab(this);
     }
 }
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/occidental/InsertSpecialOccCharPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/occidental/InsertSpecialOccCharPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/occidental/InsertSpecialOccCharPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -20,6 +20,6 @@
     public InsertSpecialOccCharPanel(InsertSpecialCharDialog insertSpecialCharDialog, I18nTranslationService i18n) {
         super(insertSpecialCharDialog, i18n.t("Special characters"), i18n.t(InsertSpecialCharDialog.DEF_LABEL),
                 SPECIAL_CHARS, 11, 20);
-        insertSpecialCharDialog.addOptionTab(this);
+        insertSpecialCharDialog.addTab(this);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/utf8/InsertSpecialUTF8CharPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/utf8/InsertSpecialUTF8CharPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertspecialchar/utf8/InsertSpecialUTF8CharPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -79,7 +79,7 @@
         form.addButton(insert);
 
         super.add(form.getFormPanel());
-        charDialog.addOptionTab(this);
+        charDialog.addTab(this);
     }
 
     private char getCharEntered() {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -18,8 +18,7 @@
 
 public class RTESavingEditorPresenter implements RTESavingEditor {
 
-    @Deprecated
-    public static final String FILE_MENU_OPTION = "File";
+    public static final String FILE_DEF_MENU_OPTION = "File";
     public static final int AUTOSAVE_AFTER_FAILS_IN_MILLISECONS = 20000;
     public static final int AUTOSAVE_IN_MILLISECONDS = 10000;
 
@@ -190,7 +189,7 @@
         ActionToolbarMenuDescriptor<Object> save = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor,
                 RTEditor.topbar, onPerformSaveCall);
         save.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName());
-        save.setParentMenuTitle(i18n.t(FILE_MENU_OPTION));
+        save.setParentMenuTitle(i18n.t(FILE_DEF_MENU_OPTION));
         save.setTextDescription(i18n.t("Save") + (ctrl_S.toString()));
         save.setPosition(0);
 
@@ -200,7 +199,7 @@
                         onCancel();
                     }
                 });
-        close.setParentMenuTitle(i18n.t(FILE_MENU_OPTION));
+        close.setParentMenuTitle(i18n.t(FILE_DEF_MENU_OPTION));
         close.setTextDescription(i18n.t("Close"));
 
         Listener0 onPerformSaveAndCloseCall = new Listener0() {
@@ -215,7 +214,7 @@
         };
         ActionToolbarMenuDescriptor<Object> saveclose = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor,
                 RTEditor.topbar, onPerformSaveAndCloseCall);
-        saveclose.setParentMenuTitle(i18n.t(FILE_MENU_OPTION));
+        saveclose.setParentMenuTitle(i18n.t(FILE_DEF_MENU_OPTION));
         saveclose.setTextDescription(i18n.t("Save & Close"));
 
         ActionToolbarButtonDescriptor<Object> saveCloseBtn = new ActionToolbarButtonDescriptor<Object>(

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -83,7 +83,7 @@
 
         createContentRenameAction(parentMenuTitle, i18n.t("Rename"), contents);
         createRenameContentInCtxAction(parentMenuTitleCtx, i18n.t("Rename"), containersNoRoot);
-        createEditAction(TYPE_WIKIPAGE);
+        createEditAction(parentMenuTitle, TYPE_WIKIPAGE);
 
         // final ActionToolbarMenuDescriptor<StateToken> setAsDefGroupCxt =
         // createSetAsDefContent(parentMenuTitleCtx);

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -228,7 +228,8 @@
         contextActionRegistry.addAction(downloadCtx, typeUploadedfile);
     }
 
-    protected ActionToolbarButtonDescriptor<StateToken> createEditAction(String... registerInTypes) {
+    protected ActionToolbarButtonDescriptor<StateToken> createEditAction(final String fileMenuTitle,
+            String... registerInTypes) {
         ActionToolbarButtonDescriptor<StateToken> editContent = new ActionToolbarButtonDescriptor<StateToken>(
                 AccessRolDTO.Editor, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
@@ -280,6 +281,7 @@
                                         });
                                     }
                                 });
+                                editor.setFileMenuTitle(fileMenuTitle);
                                 NotifyUser.hideProgress();
                             }
                         });

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -810,17 +810,6 @@
             }
         });
 
-        register(InsertLinkGroup.class, new Factory<InsertLinkLocal>(InsertLinkLocal.class) {
-            @Override
-            public InsertLinkLocal create() {
-                final InsertLinkLocalPresenter presenter = new InsertLinkLocalPresenter($(InsertLinkDialog.class));
-                final InsertLinkLocalPanel panel = new InsertLinkLocalPanel(presenter, $(WorkspaceSkeleton.class),
-                        $(I18nTranslationService.class), $(FileDownloadUtils.class));
-                presenter.init(panel);
-                return presenter;
-            }
-        });
-
         register(Singleton.class, new Factory<LanguageSelector>(LanguageSelector.class) {
             @Override
             public LanguageSelector create() {
@@ -956,6 +945,17 @@
             }
         });
 
+        register(InsertLinkGroup.class, new Factory<InsertLinkLocal>(InsertLinkLocal.class) {
+            @Override
+            public InsertLinkLocal create() {
+                final InsertLinkLocalPresenter presenter = new InsertLinkLocalPresenter($(InsertLinkDialog.class));
+                final InsertLinkLocalPanel panel = new InsertLinkLocalPanel(presenter, $(WorkspaceSkeleton.class),
+                        $(I18nTranslationService.class), $(FileDownloadUtils.class));
+                presenter.init(panel);
+                return presenter;
+            }
+        });
+
         $(GlobalShortcutRegister.class).enable();
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -39,6 +39,8 @@
     private final SiteSignOutLink siteSignOutLink;
     private final I18nTranslationService i18n;
     private final EntityTitle entityTitle;
+    private final String fileMenuTitle;
+    private final AbstractToolbar sndbar;
 
     public ContentEditor(RTEditor editor, boolean autoSave, final I18nTranslationService i18n,
             StateManager stateManager, SiteSignOutLink siteSignOutLink, DeferredCommandWrapper deferredCommandWrapper,
@@ -50,6 +52,7 @@
         this.entityTitle = entityTitle;
         super.init(view);
         this.ws = ws;
+        fileMenuTitle = i18n.t(RTESavingEditorPresenter.FILE_DEF_MENU_OPTION);
         Window.addWindowCloseListener(new WindowCloseListener() {
             public void onWindowClosed() {
             }
@@ -79,6 +82,7 @@
             }
         });
         topbar = ((ActionToolbarPanel<Object>) basicEditor.getTopBar().getView()).getToolbar();
+        sndbar = ((ActionToolbarPanel<Object>) basicEditor.getSndBar().getView()).getToolbar();
     }
 
     @Override
@@ -92,6 +96,10 @@
         siteSignOutLink.addBeforeSignOut(getBeforeSavingListener());
     }
 
+    public void setFileMenuTitle(String fileMenuTitleNew) {
+        basicEditor.getTopBar().setParentMenuTitle(RTEditor.topbar, fileMenuTitle, null, fileMenuTitleNew);
+    }
+
     @Override
     protected void onCancelConfirmed() {
         ws.getEntityWorkspace().clearContent();
@@ -107,14 +115,13 @@
                         // basicEditor.setFocus(false);
                     }
                 });
-        rename.setParentMenuTitle(i18n.t(RTESavingEditorPresenter.FILE_MENU_OPTION));
+        rename.setParentMenuTitle(fileMenuTitle);
         rename.setShortcut(new ShortcutDescriptor(false, Keyboard.KEY_F2, i18n.tWithNT("F2", "The F2 Function key")));
         rename.setTextDescription(i18n.t("Rename"));
         basicEditor.addAction(rename);
     }
 
     private void adjHeight(final int height) {
-        AbstractToolbar sndbar = ((ActionToolbarPanel<Object>) basicEditor.getSndBar().getView()).getToolbar();
         int barHeight = sndbar.getOffsetHeight();
         int newHeight = height - 20 - barHeight;
         // Log.debug("Sndbar height: " + barHeight + " new height: " +

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocalimg/InsertImageLocalPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocalimg/InsertImageLocalPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocalimg/InsertImageLocalPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -11,6 +11,6 @@
     }
 
     public void init(InsertImageLocalView view) {
-        insertImageDialog.addOptionTab(view);
+        insertImageDialog.addTab(view);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,30 +22,43 @@
 import org.ourproject.kune.platf.client.dto.LinkDTO;
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
-import org.ourproject.kune.platf.client.ui.WindowUtils;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
-import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogView;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractPanel;
+import org.ourproject.kune.workspace.client.search.AbstractLiveSearcherField;
 import org.ourproject.kune.workspace.client.search.AbstractLiveSearcherPanel;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
 
 import com.calclab.suco.client.events.Listener;
 
-public class InsertLinkLocalPanel extends AbstractLiveSearcherPanel implements InsertLinkLocalView {
+public class InsertLinkLocalPanel extends InsertLinkAbstractPanel implements InsertLinkLocalView {
 
     private static final String DATA_PROXY_URL = "/kune/json/ContentJSONService/search";
 
-    public InsertLinkLocalPanel(final InsertLinkLocalPresenter presenter,
-            final WorkspaceSkeleton ws, I18nTranslationService i18n, FileDownloadUtils downloadUtils) {
-        super(i18n, TEMPLATE_TEXT_PREFIX + downloadUtils.getLogoImageUrl(new StateToken("{shortName}"))
-                + TEMPLATE_TEXT_SUFFIX, DATA_PROXY_URL, new Listener<LinkDTO>() {
-            public void onEvent(LinkDTO link) {
-                // FIXME
-                presenter.onInsert("", WindowUtils.getLocation().getHref() + link.getLink());
-            }
-        });
-        super.setTitle(i18n.t("Local link"));
-        super.setFrame(true);
-        super.setHeight(InsertLinkDialogView.HEIGHT);
-        super.setPaddings(20);
+    private String href;
+
+    public InsertLinkLocalPanel(final InsertLinkLocalPresenter presenter, final WorkspaceSkeleton ws,
+            I18nTranslationService i18n, FileDownloadUtils downloadUtils) {
+        super(i18n.t("Local link"), presenter);
+
+        AbstractLiveSearcherField cb = new AbstractLiveSearcherField(i18n,
+                AbstractLiveSearcherPanel.TEMPLATE_TEXT_PREFIX
+                        + downloadUtils.getLogoImageUrl(new StateToken("{shortName}"))
+                        + AbstractLiveSearcherPanel.TEMPLATE_TEXT_SUFFIX, DATA_PROXY_URL, new Listener<LinkDTO>() {
+                    public void onEvent(LinkDTO link) {
+                        href = (new StateToken(link.getLink())).getPublicUrl();
+                    }
+                });
+        cb.setLabel(i18n.t("Local content"));
+        cb.setHideLabel(false);
+        cb.setAllowBlank(false);
+        cb.setWidth(220);
+        hrefField.setVisible(false);
+        hrefField.disable();
+        super.insert(0, cb);
     }
+
+    @Override
+    public String getHref() {
+        return href;
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insertlocallink/InsertLinkLocalPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -22,8 +22,7 @@
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.abstractlink.InsertLinkAbstractPresenter;
 
-public class InsertLinkLocalPresenter extends InsertLinkAbstractPresenter implements
-        InsertLinkLocal {
+public class InsertLinkLocalPresenter extends InsertLinkAbstractPresenter implements InsertLinkLocal {
 
     public InsertLinkLocalPresenter(InsertLinkDialog editorInsertElement) {
         super(editorInsertElement);

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/options/EntityOptions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/options/EntityOptions.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/options/EntityOptions.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -25,7 +25,7 @@
 
 public interface EntityOptions extends AbstractTabbedDialog {
 
-    public void addOptionTab(View tab);
+    public void addTab(View tab);
 
     public View getView();
 

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/options/license/EntityOptionsDefLicensePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/options/license/EntityOptionsDefLicensePresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/options/license/EntityOptionsDefLicensePresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -59,7 +59,7 @@
 
     public void init(EntityOptionsDefLicenseView view) {
         this.view = view;
-        entityOptions.addOptionTab(view);
+        entityOptions.addTab(view);
         setState();
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/options/logo/EntityOptionsLogoPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/options/logo/EntityOptionsLogoPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/options/logo/EntityOptionsLogoPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -62,7 +62,7 @@
 
     public void init(EntityOptionsLogoView view) {
         this.view = view;
-        entityOptions.addOptionTab(view);
+        entityOptions.addTab(view);
         setState();
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/options/pscape/EntityOptionsPublicSpaceConfPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/options/pscape/EntityOptionsPublicSpaceConfPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/options/pscape/EntityOptionsPublicSpaceConfPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -37,6 +37,6 @@
 
     public void init(EntityOptionsPublicSpaceConfView view) {
         this.view = view;
-        entityOptions.addOptionTab(view);
+        entityOptions.addTab(view);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/options/tools/EntityOptionsToolsConfPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/options/tools/EntityOptionsToolsConfPresenter.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/options/tools/EntityOptionsToolsConfPresenter.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -66,7 +66,7 @@
     public void init(EntityOptionsToolsConfView view) {
         this.view = view;
         setState();
-        entityOptions.addOptionTab(view);
+        entityOptions.addTab(view);
     }
 
     public void onCheck(ToolSimpleDTO tool, boolean checked) {

Added: trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherField.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherField.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherField.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -0,0 +1,78 @@
+package org.ourproject.kune.workspace.client.search;
+
+import org.ourproject.kune.platf.client.dto.LinkDTO;
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+
+import com.calclab.suco.client.events.Listener;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.gwtext.client.core.Connection;
+import com.gwtext.client.core.Template;
+import com.gwtext.client.core.UrlParam;
+import com.gwtext.client.data.DataProxy;
+import com.gwtext.client.data.FieldDef;
+import com.gwtext.client.data.HttpProxy;
+import com.gwtext.client.data.JsonReader;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.data.RecordDef;
+import com.gwtext.client.data.Store;
+import com.gwtext.client.data.StringFieldDef;
+import com.gwtext.client.widgets.form.ComboBox;
+import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
+
+public class AbstractLiveSearcherField extends ComboBox {
+    private static final String LONG_NAME_FIELD = "longName";
+    private static final String SHORT_NAME_FIELD = "shortName";
+    private static final String ICON_URL_FIELD = "iconUrl";
+    private static final String LINK_FIELD = "link";
+    public static final int PAGINATION_SIZE = 10;
+
+    public AbstractLiveSearcherField(I18nTranslationService i18n, String templateText, String dataProxyUrl,
+            final Listener<LinkDTO> listener) {
+        DataProxy dataProxy = new HttpProxy(dataProxyUrl, Connection.POST);
+
+        final JsonReader reader = new JsonReader(new RecordDef(
+                new FieldDef[] { new StringFieldDef(SHORT_NAME_FIELD), new StringFieldDef(LONG_NAME_FIELD),
+                        new StringFieldDef(LINK_FIELD), new StringFieldDef(ICON_URL_FIELD) }));
+        reader.setRoot("list");
+        reader.setTotalProperty("size");
+        reader.setId(SHORT_NAME_FIELD);
+
+        final Store store = new Store(dataProxy, reader);
+
+        store.load(new UrlParam[] { new UrlParam("query", "."), new UrlParam("first", 1),
+                new UrlParam("max", PAGINATION_SIZE) });
+
+        final Template resultTpl = new Template(templateText);
+        super.setStore(store);
+        super.setEmptyText(i18n.t("Write here to search"));
+        super.setDisplayField(LONG_NAME_FIELD);
+        super.setTypeAhead(true);
+        super.setLoadingText(i18n.t("Searching..."));
+        super.setWidth(268);
+        super.setPageSize(PAGINATION_SIZE);
+        super.setTpl(resultTpl);
+        super.setMode(ComboBox.REMOTE);
+        super.setMinChars(2);
+        super.setSelectOnFocus(false);
+        super.setHideTrigger(true);
+        super.setHideLabel(true);
+        // setTitle(i18n.t("User or group"));
+        super.setItemSelector("div.search-item");
+
+        super.addListener(new ComboBoxListenerAdapter() {
+            @Override
+            public void onSelect(final ComboBox comboBox, final Record record, final int index) {
+                DeferredCommand.addCommand(new Command() {
+                    public void execute() {
+                        final LinkDTO link = new LinkDTO(record.getAsString(SHORT_NAME_FIELD),
+                                record.getAsString(LONG_NAME_FIELD), record.getAsString(ICON_URL_FIELD),
+                                record.getAsString(LINK_FIELD));
+                        listener.onEvent(link);
+                    }
+                });
+            }
+        });
+
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherPanel.java	2009-03-18 14:37:36 UTC (rev 1082)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/search/AbstractLiveSearcherPanel.java	2009-03-23 19:21:30 UTC (rev 1083)
@@ -23,88 +23,19 @@
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
 
 import com.calclab.suco.client.events.Listener;
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DeferredCommand;
-import com.gwtext.client.core.Connection;
-import com.gwtext.client.core.Template;
-import com.gwtext.client.core.UrlParam;
-import com.gwtext.client.data.DataProxy;
-import com.gwtext.client.data.FieldDef;
-import com.gwtext.client.data.HttpProxy;
-import com.gwtext.client.data.JsonReader;
-import com.gwtext.client.data.Record;
-import com.gwtext.client.data.RecordDef;
-import com.gwtext.client.data.Store;
-import com.gwtext.client.data.StringFieldDef;
-import com.gwtext.client.widgets.form.ComboBox;
 import com.gwtext.client.widgets.form.FormPanel;
-import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
 
 public class AbstractLiveSearcherPanel extends FormPanel {
 
-    protected static final String TEMPLATE_TEXT_PREFIX = "<div class=\"search-item\"><span class=\"kune-IconHyperlink\"><img src=\"";
-    protected static final String TEMPLATE_TEXT_SUFFIX = "\" style=\"height: 16px; width: 16px;\" />{shortName}:&nbsp;{longName}</span></div>";
+    public static final String TEMPLATE_TEXT_PREFIX = "<div class=\"search-item\"><span class=\"kune-IconHyperlink\"><img src=\"";
+    public static final String TEMPLATE_TEXT_SUFFIX = "\" style=\"height: 16px; width: 16px;\" />{shortName}:&nbsp;{longName}</span></div>";
 
-    private static final String LONG_NAME_FIELD = "longName";
-    private static final String SHORT_NAME_FIELD = "shortName";
-    private static final String ICON_URL_FIELD = "iconUrl";
-    private static final String LINK_FIELD = "link";
-
-    public static final int PAGINATION_SIZE = 10;
-
     public AbstractLiveSearcherPanel(I18nTranslationService i18n, String templateText, String dataProxyUrl,
             final Listener<LinkDTO> listener) {
-        DataProxy dataProxy = new HttpProxy(dataProxyUrl, Connection.POST);
-
-        final JsonReader reader = new JsonReader(new RecordDef(
-                new FieldDef[] { new StringFieldDef(SHORT_NAME_FIELD), new StringFieldDef(LONG_NAME_FIELD),
-                        new StringFieldDef(LINK_FIELD), new StringFieldDef(ICON_URL_FIELD) }));
-        reader.setRoot("list");
-        reader.setTotalProperty("size");
-        reader.setId(SHORT_NAME_FIELD);
-
-        final Store store = new Store(dataProxy, reader);
-
-        store.load(new UrlParam[] { new UrlParam("query", "."), new UrlParam("first", 1),
-                new UrlParam("max", PAGINATION_SIZE) });
-
         super.setBorder(false);
         super.setWidth(275);
         super.setHideLabels(true);
-
-        final Template resultTpl = new Template(templateText);
-        final ComboBox cb = new ComboBox();
-        cb.setStore(store);
-        cb.setEmptyText(i18n.t("Write here to search"));
-        cb.setDisplayField(LONG_NAME_FIELD);
-        cb.setTypeAhead(true);
-        cb.setLoadingText(i18n.t("Searching..."));
-        cb.setWidth(268);
-        cb.setPageSize(PAGINATION_SIZE);
-        cb.setTpl(resultTpl);
-        cb.setMode(ComboBox.REMOTE);
-        cb.setMinChars(2);
-        cb.setSelectOnFocus(false);
-        cb.setHideTrigger(true);
-        cb.setHideLabel(true);
-        // setTitle(i18n.t("User or group"));
-        cb.setItemSelector("div.search-item");
-
-        cb.addListener(new ComboBoxListenerAdapter() {
-            @Override
-            public void onSelect(final ComboBox comboBox, final Record record, final int index) {
-                DeferredCommand.addCommand(new Command() {
-                    public void execute() {
-                        final LinkDTO link = new LinkDTO(record.getAsString(SHORT_NAME_FIELD),
-                                record.getAsString(LONG_NAME_FIELD), record.getAsString(ICON_URL_FIELD),
-                                record.getAsString(LINK_FIELD));
-                        listener.onEvent(link);
-                    }
-                });
-            }
-        });
-
-        super.add(cb);
+        super.add(new AbstractLiveSearcherField(i18n, templateText, dataProxyUrl, listener));
     }
 
     public void reset() {




More information about the kune-commits mailing list