[kune-commits] r1078 - in trunk: .
src/main/java/org/ourproject/kune/app/public/css
src/main/java/org/ourproject/kune/chat/client
src/main/java/org/ourproject/kune/platf/client
src/main/java/org/ourproject/kune/platf/client/actions
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/shortcuts
src/main/java/org/ourproject/kune/platf/client/ui
src/main/java/org/ourproject/kune/platf/client/ui/dialogs
src/main/java/org/ourproject/kune/platf/client/ui/palette
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/img
src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink
src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable
src/main/java/org/ourproject/kune/platf/client/ui/rte/saving
src/main/java/org/ourproject/kune/workspace/client
src/main/java/org/ourproject/kune/workspace/client/events
src/main/java/org/ourproject/kune/workspace/client/hello
src/test/java/org/ourproject/kune/platf/client/actions
vjrj
vjrj at ourproject.org
Mon Mar 16 05:13:40 CET 2009
Author: vjrj
Date: 2009-03-16 05:13:36 +0100 (Mon, 16 Mar 2009)
New Revision: 1078
Added:
trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/
trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcut.java
trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcutRegister.java
trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/GlobalShortcutRegister.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/film.png
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/AbstractWysiwygClientTest.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java
Removed:
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java
trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java
Modified:
trunk/TODO
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css
trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.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/img/RTEImgResources.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css
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/saving/RTESavingEditorPresenter.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/hello/HelloWorldModule.java
trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java
Log:
Complete - task Insert Table Dialog
Complete - task Better RTE (Rich Text Editor) support
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/TODO 2009-03-16 04:13:36 UTC (rev 1078)
@@ -10,6 +10,45 @@
Use org-mode in emacs to easy manage this file
* SHORT-TERM (URGENT)
+** vjrj use xwiki maven repo
+ http://maven.xwiki.org/releases/com/xpn/xwiki/platform/xwiki-web-wysiwyg/1.8-rc-2/
+** vjrj <v> better RTE
+*** Pending
+**** W3C Range/Selection support in RTE
+ https://developer.mozilla.org/en/DOM/selection
+ http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
+ As an intro:
+ http://www.quirksmode.org/dom/range_intro.html
+ http://maven.xwiki.org/site/xwiki-web/xwiki-web-wysiwyg/apidocs/com/xpn/xwiki/wysiwyg/client/dom/internal/AbstractRange.html
+ other links:
+ http://groups.google.com/group/rocket-gwt/browse_frm/thread/e56540d4168479c0/d25dca75958ba923?hl=en-GB&lnk=gst&q=Range#d25dca75958ba923
+ http://code.google.com/p/gwt-html-editor/source/browse/branches/gwt1.4/src/com/gc/gwt/wysiwyg/public/fckeditor/editor/_source/classes/fckdomrange_ie.js?r=81
+**** Insert/Edit link
+***** use cases
+ ^<a href="http://example.com">sample</a>^ --- Parse and edit
+ <a href="http://example.com">s^ample</a> --- Parse and edit
+ <a href="http://example.com">s^amp^le</a> --- Parse and edit
+ ^some text <a href="http://example.com">samp^le</a> --- new link with get inner content?
+**** Quite urgent: Shortcuts propagation to browser
+ http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/Event.html#preventDefault
+ http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/panel/ExtendedDockPanel.java?revision=1.20&view=markup
+ http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/util/Keyboard.java?revision=1.20&view=markup
+ http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/
+**** with different menus (File/Blog ...)
+**** bidi support
+**** Insert special chars (for table or from unicode).
+**** images (local/remote) with preview
+**** youtube videos/podcasts
+**** Edit HTML
+**** File > Rename (F2)
+**** Insert > Special char
+**** Insert > Page break (for printing)
+**** Shortcut to fonts (Ctrl + numbers)
+*** Links
+ http://www.ongwt.com/post/2009/01/08/XWiki-:-Wysiwyg-editor-based-on-GWT
+ http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/ie55/EditRegions/default.asp
+ http://www.mozilla.org/editor/midas-spec.html
+ http://mozilla.org/editor/midasdemo/
** vjrj <v> GWT 1.6
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6cc3b35ad98a
http://code.google.com/p/google-web-toolkit/wiki/WAR_Design_1_6
@@ -77,43 +116,6 @@
http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/DevGuideHistory
http://en.wikipedia.org/wiki/Fragment_identifier
http://www.w3.org/DesignIssues/Fragment.html
-** vjrj <v> better RTE
-*** Pending
-**** W3C Range/Selection support in RTE
- https://developer.mozilla.org/en/DOM/selection
- http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
- As an intro:
- http://www.quirksmode.org/dom/range_intro.html
- http://maven.xwiki.org/site/xwiki-web/xwiki-web-wysiwyg/apidocs/com/xpn/xwiki/wysiwyg/client/dom/internal/AbstractRange.html
- other links:
- http://groups.google.com/group/rocket-gwt/browse_frm/thread/e56540d4168479c0/d25dca75958ba923?hl=en-GB&lnk=gst&q=Range#d25dca75958ba923
- http://code.google.com/p/gwt-html-editor/source/browse/branches/gwt1.4/src/com/gc/gwt/wysiwyg/public/fckeditor/editor/_source/classes/fckdomrange_ie.js?r=81
-**** Insert/Edit link
-***** use cases
- ^<a href="http://example.com">sample</a>^ --- Parse and edit
- <a href="http://example.com">s^ample</a> --- Parse and edit
- <a href="http://example.com">s^amp^le</a> --- Parse and edit
- ^some text <a href="http://example.com">samp^le</a> --- new link with get inner content?
-**** Quite urgent: Shortcuts propagation to browser
- http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/Event.html#preventDefault
- http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/panel/ExtendedDockPanel.java?revision=1.20&view=markup
- http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/util/Keyboard.java?revision=1.20&view=markup
- http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/
-**** with different menus (File/Blog ...)
-**** bidi support
-**** Insert special chars (for table or from unicode).
-**** images (local/remote) with preview
-**** youtube videos/podcasts
-**** Edit HTML
-**** File > Rename (F2)
-**** Insert > Special char
-**** Insert > Page break (for printing)
-**** Shortcut to fonts (Ctrl + numbers)
-*** Links
- http://www.ongwt.com/post/2009/01/08/XWiki-:-Wysiwyg-editor-based-on-GWT
- http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/ie55/EditRegions/default.asp
- http://www.mozilla.org/editor/midas-spec.html
- http://mozilla.org/editor/midasdemo/
** vjrj <v> rails group-shortname.kune-site-domain/tool-name/folder-id/doc-id routing, maybe use:
http://agilewebdevelopment.com/plugins/request_routing
http://wiki.rubyonrails.org/rails/pages/Request+Routing
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2009-03-16 04:13:36 UTC (rev 1078)
@@ -35,7 +35,7 @@
}
*/.kune-NavigationBar .topBar .gwt-Image{margin:0 2px 0 5px;}.kune-NavigationBar .Items{margin:2px 0;}.kune-NavigationBar .Items .gwt-Image{margin:2px 0;vertical-align:middle;}.kune-NavigationBar .Items .gwt-Hyperlink a{color:green;/* FIXME: other color */}.kune-NavigationBar .topBar .topBar-margin{margin-left:5px;}.kune-NavigationBar .pathMenu{vertical-align:middle;}.kune-NavigationBar .pathMenu .gwt-MenuItem{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;white-space:nowrap;padding:3px 6px;}.kune-NavigationBar .pathMenu .gwt-MenuItem-selected{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#000;}.kune-NavigationBar .kune-IconHyperlink{vertical-align:middle;margin-left:5px;}.kune-NavigationBar .kune-IconHyperlink a{color:green;text-decoration:none;}.kune-NavigationBar .kune-IconHyperlink .gwt-Image{margin-right:3px;vertical-align:middle;}/* Social Network */.kune-StackedDropDownPanel{}.kune-StackedDropDownPanel .gwt-StackPanelItem{border-top:1px solid #CCC;border-bottom:1px solid #CCC;background-color:#EFA;cursor:pointer;padding:1px 3px 0 6px;overflow:hidden;}.kune-StackedDropDownPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-StackedDropDownPanel .kune-DropDownInner table{width:100%;}.kune-StackedDropDownPanel .gwt-StackPanelItem-selected{}.kune-StackedDropDownPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-StackedDropDownPanel .kune-DropDownInner{padding:0;}/* StackedDropDownPanel Members */.kune-StackSubItemLabel{overflow:hidden;}.kune-StackSubItemLabel .gwt-MenuItem{white-space:nowrap;cursor:pointer;border-bottom:1px solid #F2F2F2;}.kune-StackSubItemLabel table{width:100%;}.kune-StackSubItemLabel .gwt-MenuItem img{vertical-align:middle;margin-top:1px;margin-bottom:1px;margin-left:5px;margin-right:3px;}.kune-StackSubItemLabel .gwt-MenuItem-selected{background-color:#FFE6D5;}.kune-StackSubItemActions{background-color:#F2F2F2;border:1px solid #999;vertical-align:middle;padding:5px 0;margin-left:-120px;margin-top:-2px;}.kune-StackSubItemActions .gwt-MenuItem{cursor:pointer;padding:1px 10px;white-space:nowrap;}.kune-StackSubItemActions .gwt-MenuItem img{vertical-align:middle;margin-right:3px;}.kune-StackSubItemActions .gwt-MenuItem-selected{background-color:#FFB958;}/* AccessList */.kune-AccessListSubLabel{font-style:italic;}.kune-AccessList{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel-open{width:100%;}.kune-AccessList .gwt-DisclosurePanel-closed{width:100%;}.kune-AccessList .header{margin:0 0 3px;text-decoration:none;width:100%;background-color:#8DD35F;}.kune-AccessList .header table{margin:0 5px 0 0;width:100%;color:#FFF;}.kune-AccessList .header img{margin:0 3px 0 0;}.kune-AccessList .content{margin:0 0 0 7px;width:100%;}.kune-AccessList .content table{margin-bottom:5px;width:100%;}/* Rate */.kune-RatePanel-Label{white-space:nowrap;vertical-align:middle;}.kune-RatePanel-Stars{margin-left:5px;vertical-align:middle;}.kune-RatePanel-Stars-RateIt{cursor:pointer;}/* Licenses */.kune-License-CC-Header{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}.kune-License-CC-Header .gwt-Label{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}/* Theme */.kune-IconBottomPanel .gwt-MenuItem{cursor:pointer;background-color:#FFF;margin:2px 2px 2px 5px;}.kune-IconBottomPanel .gwt-MenuItem-selected{background-color:#F2F2F2;}.gwt-MenuBar-bottomMenu{margin-left:-60px;margin-top:-120px;}/* i18n */.kune-I18nTranslatorCell{white-space:normal;}.kune-i18nTranslator-recommend{margin:10px;}.kune-i18nTranslator-recommend h1{font-size:131%;font-weight:700;}.kune-i18nTranslator-recommend h2{font-size:116%;font-weight:700;}.kune-i18nTranslator-recommend h3{font-size:108%;font-weight:700;font-style:italic;}.kune-i18nTranslator-recommend em{font-weight:700;}.kune-i18nTranslator-recommend strong{font-weight:700;}/* Admin Context */.kune-AdminContextPanel{margin:6px;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem{background:transparent url(img/arrow-right-white.gif) no-repeat scroll 3px 2px;cursor:pointer;padding:3px 10px 1px 20px;overflow:hidden;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-AdminContextPanel .gwt-StackPanelItem-selected{background:transparent url(img/arrow-down-white.gif) no-repeat scroll 3px 2px;background-color:#DEE3DB;}.kune-AdminContextPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-AdminContextPanel-inner{background-color:#FFF;}.kune-AdminContextPanel-inner-wrap{margin:5px;}.kune-EditableLabel{}.kune-EditableLabel .kune-EditableLabel-editable{}.kune-EditableLabel-high{background-color:#FFFBC1;cursor:pointer;}.kune-EditableLabel-high span{background-color:#FFFBC1;}.kune-EditableLabel a{margin-left:5px;}.kune-EditableLabel a:link{color:green;}.kune-EditableLabel a:hover{text-decoration:underline;}.kune-EditableLabel a:visited{color:olive;}.kune-EditableLabel img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable span{margin:3px;}.kune-EditableLabel span{margin:3px;}.kune-BottomIconsTrayPanel{width:165px;height:21px;vertical-align:middle;background-color:#EFEFEF;}.kune-Content-Main{margin:5px;}/* Yahoo ui base.css */.kune-Content-Main h1{font-size:138.5%;}.kune-Content-Main h2{font-size:123.099998%;}.kune-Content-Main h3{font-size:108%;}.kune-Content-Main h1{margin:1em 0;}.kune-Content-Main h2{margin:1em 0;}.kune-Content-Main h3{margin:1em 0;}.kune-Content-Main h1{font-weight:700;}.kune-Content-Main h2{font-weight:700;}.kune-Content-Main h3{font-weight:700;}.kune-Content-Main h4{font-weight:700;}.kune-Content-Main h5{font-weight:700;}.kune-Content-Main h6{font-weight:700;}.kune-Content-Main strong{font-weight:700;}.kune-Content-Main abbr{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main acronym{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main em{font-style:italic;}.kune-Content-Main blockquote{margin:1em;}.kune-Content-Main ul{margin:1em;}.kune-Content-Main ol{margin:1em;}.kune-Content-Main dl{margin:1em;}.kune-Content-Main ol{margin-left:2em;}.kune-Content-Main ul{margin-left:2em;}.kune-Content-Main dl{margin-left:2em;}.kune-Content-Main ol{list-style:decimal outside;}.kune-Content-Main li{list-style:decimal outside;}.kune-Content-Main li{list-style:disc outside;}.kune-Content-Main ul{list-style:disc outside;}.kune-Content-Main dl{margin-left:1em;}.kune-Content-Main dd{margin-left:1em;}.kune-Content-Main th{border:1px solid #000;padding:.5em;font-weight:700;text-align:center;}.kune-Content-Main td{border:1px solid #000;padding:.5em;}.kune-Content-Main caption{margin-bottom:.5em;text-align:center;}.kune-Content-Main p{margin-bottom:1em;}.kune-Content-Main fieldset{margin-bottom:1em;}.kune-Content-Main table{margin-bottom:1em;}.kune-Content-Main pre{margin-bottom:1em;}.kune-Content-Main input[type=text]{width:12.25em;width:11.9em;}.kune-Content-Main input[type=password]{width:12.25em;width:11.9em;}.kune-Content-Main textarea{width:12.25em;width:11.9em;}.search-icon{background-image:url(img/search.gif)!important;}.i18n-icon{background-image:url(img/language.gif)!important;}/* RTE Text editor */.kune-TexEditorPanel-TextArea{margin:3px;}.gwt-RichTextArea{/* border: 1px solid #000;
background-color: #FFF; */border:1px solid #4D4D4D;background-color:#FFF;margin:5px 0 5px 10px;}.gwt-RichTextToolbar{/* background-color: #F2F2F2;
- padding: 5px; */height:24px;vertical-align:middle;}.gwt-RichTextToolbar table{vertical-align:middle;}.gwt-RichTextToolbar .gwt-ToggleButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-PushButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-PushButton-down{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-PushButton-down-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-ToggleButton-down{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .x-btn{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lSpace{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lrSpace{float:left;}.RichTextToolbar-menu{float:left;margin-top:2px;z-index:4;}.RichTextToolbar-menu table{border-collapse:collapse;border-spacing:0;margin:0;z-index:4;}.RichTextToolbar-menu .gwt-MenuItem{margin-right:2px;border:1px solid #F2F2F2;}.RichTextToolbar-menu .gwt-MenuItem-selected{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.RichTextToolbar-submenu{background-color:#FFFCD5;border:1px solid #D38D5F;cursor:default;z-index:4;}.RichTextToolbar-submenu .gwt-MenuItem{cursor:default;white-space:nowrap;border:1px solid #FFFCD5;padding:0 4px;}.RichTextToolbar-submenu .gwt-MenuItem-selected{background-color:#FFB958;border:1px solid #C83737;}.kune-WebSafePalette{background-color:#FFF;border:1px solid #AAA;margin:1px;}.kune-WebSafePalette-popup{z-index:9999!important;}.kune-WebSafePalette td{width:12px;height:10px;}.k-site-traybar{background:#FFF none repeat scroll 0 50%;}.k-blank-toolbar{background:#FFF none repeat scroll 0 50%;}.k-sitebar .kune-IconHyperlink{white-space:nowrap;}.k-sitebar .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.k-sitebar .kune-IconHyperlink a:hover{text-decoration:underline;}.k-sitebar .kune-IconHyperlink a:visited{color:#B3B3B3;}.k-sitebar-labellink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-sitebar{margin-right:10px;height:16px;background:#FFF;}.k-sitebar .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:1px;color:#B3B3B3;}.k-sitebar .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.k-sitebar .gwt-PushButton{cursor:pointer;}.k-sitebar-LabelLink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-entity-summary{border-left-color:#FFF;border-left-width:5px;border-bottom-color:#FFF;border-bottom-width:5px;}.k-entitytextlogo-border{border:2px solid #F2F2F2;}.k-entitytextlogo-no-border{border:none;}.k-entitytextlogo{height:60px;margin:0 0 4px;overflow:hidden;width:468px;}.k-entitytextlogo table{vertical-align:middle;}.k-elogo-l-l{font-size:272%;}.k-elogo-l-m{font-size:167%;}.k-elogo-l-s{font-size:108%;}.k-entitytextlogo .gwt-Label{font-weight:700;margin:5px;height:27px;}.k-entitytextlogo-default .gwt-Label{color:#69312F;}.k-entitytextlogo-green .gwt-Label{color:#250;}.k-entitytextlogo-blue .gwt-Label{color:navy;}.k-entitytextlogo-grey .gwt-Label{color:#1A1A1A;}.k-entitytextlogo-purple .gwt-Label{color:#405;}.k-entitytextlogo-red .gwt-Label{color:maroon;}.k-elogo-plink{color:#CCC;font-size:85%;margin:5px;text-decoration:underline;white-space:nowrap;background-color:#FFF;}.k-elogop-expand{background-color:transparent;}.k-entity-default .x-layout-split,.k-entity-default .x-layout-collapsed{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-green .x-layout-split,.k-entity-green .x-layout-collapsed{background:#5FD35F none repeat scroll 0 50%;}.k-entity-blue .x-layout-split,.k-entity-blue .x-layout-collapsed{background:#06F none repeat scroll 0 50%;}.k-entity-grey .x-layout-split,.k-entity-grey .x-layout-collapsed{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-purple .x-layout-split,.k-entity-purple .x-layout-collapsed{background:#660080 none repeat scroll 0 50%;}.k-entity-red .x-layout-split,.k-entity-red .x-layout-collapsed{background:#D40000 none repeat scroll 0 50%;}.k-entityworkspace .x-layout-split,.k-entityworkspace .x-layout-collapsed{background:transparent none repeat scroll 0 50%;}.k-entityworkspace-default .x-layout-split,.k-entityworkspace-default .x-layout-collapsed{background:#DEAA87 none repeat scroll 0 50%;}.k-entityworkspace-green .x-layout-split,.k-entityworkspace-green .x-layout-collapsed{background:#DCE8AB none repeat scroll 0 50%;}.k-entityworkspace-blue .x-layout-split,.k-entityworkspace-blue .x-layout-collapsed{background:#D5D5FF none repeat scroll 0 50%;}.k-entityworkspace-grey .x-layout-split,.k-entityworkspace-grey .x-layout-collapsed{background:#999 none repeat scroll 0 50%;}.k-entityworkspace-purple .x-layout-split,.k-entityworkspace-purple .x-layout-collapsed{background:#A793AC none repeat scroll 0 50%;}.k-entityworkspace-red .x-layout-split,.k-entityworkspace-red .x-layout-collapsed{background:#F55 none repeat scroll 0 50%;}.k-entity-title{border-left-style:solid;border-left-width:2px;}.k-entity-title div{line-height:22px;white-space:nowrap;}.k-entity-subtitle{}.k-entity-subtitle div{line-height:22px;white-space:nowrap;}.k-entity-title-rd-default{background:#DD8A3D;}.k-entity-title-rd-green{background:#5FD35F;}.k-entity-title-rd-blue{background:#06F;}.k-entity-title-rd-grey{background:#4D4D4D;}.k-entity-title-rd-purple{background:#660080;}.k-entity-title-rd-red{background:#D40000;}.k-entity-title-default{background:#F1BB59 none repeat scroll 0 50%;border-left-color:#DD8A3D;}.k-entity-title-green{background:#AFA none repeat scroll 0 50%;border-left-color:#5FD35F;}.k-entity-title-blue{background:#AFDDE9 none repeat scroll 0 50%;border-left-color:#06F;}.k-entity-title-grey{background:#CCC none repeat scroll 0 50%;border-left-color:#4D4D4D;}.k-entity-title-purple{background:#DDAFE9 none repeat scroll 0 50%;border-left-color:#660080;}.k-entity-title-red{background:#FF8080 none repeat scroll 0 50%;border-left-color:#D40000;}.k-entity-title-default div{color:#69312F;}.k-entity-title-green div{color:#250;}.k-entity-title-blue div{color:navy;}.k-entity-title-grey div{color:#1A1A1A;}.k-entity-title-purple div{color:#405;}.k-entity-title-red div{color:maroon;}.k-entity-subtitle-default{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-subtitle-green{background:#5FD35F none repeat scroll 0 50%;}.k-entity-subtitle-blue{background:#06F none repeat scroll 0 50%;}.k-entity-subtitle-grey{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-subtitle-purple{background:#660080 none repeat scroll 0 50%;}.k-entity-subtitle-red{background:#D40000 none repeat scroll 0 50%;}.k-entity-subtitle-default div{color:#FFF;}.k-entity-subtitle-green div{color:#FFF;}.k-entity-subtitle-blue div{color:#FFF;}.k-entity-subtitle-grey div{color:#FFF;}.k-entity-subtitle-purple div{color:#FFF;}.k-entity-subtitle-red div{color:#FFF;}.k-entity-bottom-rd-default,.k-entity-bottom-default,.k-toolselectoritem-sel-default{background:#DD8A3D;}.k-entity-bottom-rd-green,.k-entity-bottom-green,.k-toolselectoritem-sel-green{background:#5FD35F;}.k-entity-bottom-rd-blue,.k-entity-bottom-blue,.k-toolselectoritem-sel-blue{background:#06F;}.k-entity-bottom-rd-grey,.k-entity-bottom-grey,.k-toolselectoritem-sel-grey{background:#4D4D4D;}.k-entity-bottom-rd-purple,.k-entity-bottom-purple,.k-toolselectoritem-sel-purple{background:#660080;}.k-entity-bottom-rd-red,.k-entity-bottom-red,.k-toolselectoritem-sel-red{background:#D40000;}.k-entity-context-default div,.k-entity-context-default .x-tree .x-panel-body{background:#FFD09D none repeat scroll 0 50%;}.k-entity-context-green div,.k-entity-context-green .x-tree .x-panel-body{background:#CFA none repeat scroll 0 50%;}.k-entity-context-blue div,.k-entity-context-blue .x-tree .x-panel-body{background:#ACF none repeat scroll 0 50%;}.k-entity-context-grey div,.k-entity-context-grey .x-tree .x-panel-body{background:#B3B3B3 none repeat scroll 0 50%;}.k-entity-context-purple div,.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-context-red div,.k-entity-context-red .x-tree .x-panel-body{background:#FAA none repeat scroll 0 50%;}.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-bottom div{/* line-height: 24px; */color:#FFF;}.k-toolbar-top-line{border-top-color:#d0d0d0;border-top-style:solid;border-top-width:1px;}.k-toolbar-bottom-line{border-bottom-color:#d0d0d0;border-bottom-style:solid;border-bottom-width:1px;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial, sans;line-height:19px;}.k-toolbar-sep{padding-top:4px;padding-left:5px;}/* Custom gwt-ext styles */.ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.ytb-spacer{width:2px;}.x-grid-group-hd{border-bottom:2px solid grey;cursor:pointer;padding-top:3px;}/* Drop down */.k-dropdownouter{background-color:grey;}.k-dropdownouter-members{}.k-dropdownouter-members-default{background-color:#DF5244;}.k-dropdownouter-members-green{background-color:green;}.k-dropdownouter-members-blue{background-color:#5500D4;}.k-dropdownouter-members-grey{background-color:#4D4D4D;}.k-dropdownouter-members-purple{background-color:#672178;}.k-dropdownouter-members-red{background-color:#A02C2C;}.k-dropdownouter-part{}.k-dropdownouter-part-default{background-color:#CA5842;}.k-dropdownouter-part-green{background-color:#0A0;}.k-dropdownouter-part-blue{background-color:#60F;}.k-dropdownouter-part-grey{background-color:#666;}.k-dropdownouter-part-purple{background-color:#892CA0;}.k-dropdownouter-part-red{background-color:#C83737;}.k-dropdownouter-tags{}.k-dropdownouter-tags-default{background-color:#87501E;}.k-dropdownouter-tags-green{background-color:#00D400;}.k-dropdownouter-tags-blue{background-color:#95F;}.k-dropdownouter-tags-grey{background-color:gray;}.k-dropdownouter-tags-purple{background-color:#AB37C8;}.k-dropdownouter-tags-red{background-color:#D35F5F;}.k-dropdownouter-summary{}.k-dropdownouter-summary-default{background-color:#9F734B;}.k-dropdownouter-summary-green{background-color:#4CE14C;}.k-dropdownouter-summary-blue{background-color:#69A5FF;}.k-dropdownouter-summary-grey{background-color:#A6A6A6;}.k-dropdownouter-summary-purple{background-color:#C473D8;}.k-dropdownouter-summary-red{background-color:#E08F8F;}.k-dropdowninner{margin:0 3px 1px;background:green;background-color:#FFF;/* padding: 3px; */}.k-dropdownlabel{color:#FFF;cursor:pointer;}.k-dropdownlabel .gwt-Label{margin:0 5px 0 0;width:100%;}.k-dropdownlabel img{margin:0 3px 0 1px;}/* WsTheme */.k-wstheme-icon-default{background:#FF8C00;}.k-wstheme-icon-green{background:green;}.k-wstheme-icon-blue{background:blue;}.k-wstheme-icon-grey{background:grey;}.k-wstheme-icon-purple{background:purple;}.k-wstheme-icon-red{background:red;}/* Tool selector items */.k-toolselectoritem{width:auto;margin-bottom:5px;cursor:pointer;}.k-toolselectoritem-sel{}.k-toolselectoritem-notsel-default{background:#FFE9A5;}.k-toolselectoritem-notsel-green{background:#D6F4D6;}.k-toolselectoritem-notsel-blue{background:#D7D7F4;}.k-toolselectoritem-notsel-grey{background:#E6E6E6;}.k-toolselectoritem-notsel-purple{background:#EED7F4;}.k-toolselectoritem-notsel-red{background:#FFD5D5;}.k-toolselectoritem-sel a{color:#FFF;padding:0 9px;text-decoration:none;}.k-toolselectoritem-sel a:hover{text-decoration:none;}.k-toolselectoritem-notsel{}.k-toolselectoritem-notsel a{color:#00F;padding:0 9px;text-decoration:none;}.k-toolselectoritem-notsel a:hover{text-decoration:underline;}/* others *//*
+ padding: 5px; */height:24px;vertical-align:middle;}.gwt-RichTextToolbar table{vertical-align:middle;}.gwt-RichTextToolbar .gwt-ToggleButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-PushButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-PushButton-down{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-PushButton-down-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-ToggleButton-down{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .x-btn{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lSpace{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lrSpace{float:left;}.RichTextToolbar-menu{float:left;margin-top:2px;z-index:4;}.RichTextToolbar-menu table{border-collapse:collapse;border-spacing:0;margin:0;z-index:4;}.RichTextToolbar-menu .gwt-MenuItem{margin-right:2px;border:1px solid #F2F2F2;}.RichTextToolbar-menu .gwt-MenuItem-selected{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.RichTextToolbar-submenu{background-color:#FFFCD5;border:1px solid #D38D5F;cursor:default;z-index:4;}.RichTextToolbar-submenu .gwt-MenuItem{cursor:default;white-space:nowrap;border:1px solid #FFFCD5;padding:0 4px;}.RichTextToolbar-submenu .gwt-MenuItem-selected{background-color:#FFB958;border:1px solid #C83737;}.kune-WebSafePalette{background-color:#FFF;border:1px solid #AAA;margin:1px;}.kune-WebSafePalette-popup{z-index:9999!important;background-color:#FFF;}.kune-WebSafePalette td{width:12px;height:10px;}.k-site-traybar{background:#FFF none repeat scroll 0 50%;}.k-blank-toolbar{background:#FFF none repeat scroll 0 50%;}.k-sitebar .kune-IconHyperlink{white-space:nowrap;}.k-sitebar .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.k-sitebar .kune-IconHyperlink a:hover{text-decoration:underline;}.k-sitebar .kune-IconHyperlink a:visited{color:#B3B3B3;}.k-sitebar-labellink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-sitebar{margin-right:10px;height:16px;background:#FFF;}.k-sitebar .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:1px;color:#B3B3B3;}.k-sitebar .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.k-sitebar .gwt-PushButton{cursor:pointer;}.k-sitebar-LabelLink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-entity-summary{border-left-color:#FFF;border-left-width:5px;border-bottom-color:#FFF;border-bottom-width:5px;}.k-entitytextlogo-border{border:2px solid #F2F2F2;}.k-entitytextlogo-no-border{border:none;}.k-entitytextlogo{height:60px;margin:0 0 4px;overflow:hidden;width:468px;}.k-entitytextlogo table{vertical-align:middle;}.k-elogo-l-l{font-size:272%;}.k-elogo-l-m{font-size:167%;}.k-elogo-l-s{font-size:108%;}.k-entitytextlogo .gwt-Label{font-weight:700;margin:5px;height:27px;}.k-entitytextlogo-default .gwt-Label{color:#69312F;}.k-entitytextlogo-green .gwt-Label{color:#250;}.k-entitytextlogo-blue .gwt-Label{color:navy;}.k-entitytextlogo-grey .gwt-Label{color:#1A1A1A;}.k-entitytextlogo-purple .gwt-Label{color:#405;}.k-entitytextlogo-red .gwt-Label{color:maroon;}.k-elogo-plink{color:#CCC;font-size:85%;margin:5px;text-decoration:underline;white-space:nowrap;background-color:#FFF;}.k-elogop-expand{background-color:transparent;}.k-entity-default .x-layout-split,.k-entity-default .x-layout-collapsed{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-green .x-layout-split,.k-entity-green .x-layout-collapsed{background:#5FD35F none repeat scroll 0 50%;}.k-entity-blue .x-layout-split,.k-entity-blue .x-layout-collapsed{background:#06F none repeat scroll 0 50%;}.k-entity-grey .x-layout-split,.k-entity-grey .x-layout-collapsed{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-purple .x-layout-split,.k-entity-purple .x-layout-collapsed{background:#660080 none repeat scroll 0 50%;}.k-entity-red .x-layout-split,.k-entity-red .x-layout-collapsed{background:#D40000 none repeat scroll 0 50%;}.k-entityworkspace .x-layout-split,.k-entityworkspace .x-layout-collapsed{background:transparent none repeat scroll 0 50%;}.k-entityworkspace-default .x-layout-split,.k-entityworkspace-default .x-layout-collapsed{background:#DEAA87 none repeat scroll 0 50%;}.k-entityworkspace-green .x-layout-split,.k-entityworkspace-green .x-layout-collapsed{background:#DCE8AB none repeat scroll 0 50%;}.k-entityworkspace-blue .x-layout-split,.k-entityworkspace-blue .x-layout-collapsed{background:#D5D5FF none repeat scroll 0 50%;}.k-entityworkspace-grey .x-layout-split,.k-entityworkspace-grey .x-layout-collapsed{background:#999 none repeat scroll 0 50%;}.k-entityworkspace-purple .x-layout-split,.k-entityworkspace-purple .x-layout-collapsed{background:#A793AC none repeat scroll 0 50%;}.k-entityworkspace-red .x-layout-split,.k-entityworkspace-red .x-layout-collapsed{background:#F55 none repeat scroll 0 50%;}.k-entity-title{border-left-style:solid;border-left-width:2px;}.k-entity-title div{line-height:22px;white-space:nowrap;}.k-entity-subtitle{}.k-entity-subtitle div{line-height:22px;white-space:nowrap;}.k-entity-title-rd-default{background:#DD8A3D;}.k-entity-title-rd-green{background:#5FD35F;}.k-entity-title-rd-blue{background:#06F;}.k-entity-title-rd-grey{background:#4D4D4D;}.k-entity-title-rd-purple{background:#660080;}.k-entity-title-rd-red{background:#D40000;}.k-entity-title-default{background:#F1BB59 none repeat scroll 0 50%;border-left-color:#DD8A3D;}.k-entity-title-green{background:#AFA none repeat scroll 0 50%;border-left-color:#5FD35F;}.k-entity-title-blue{background:#AFDDE9 none repeat scroll 0 50%;border-left-color:#06F;}.k-entity-title-grey{background:#CCC none repeat scroll 0 50%;border-left-color:#4D4D4D;}.k-entity-title-purple{background:#DDAFE9 none repeat scroll 0 50%;border-left-color:#660080;}.k-entity-title-red{background:#FF8080 none repeat scroll 0 50%;border-left-color:#D40000;}.k-entity-title-default div{color:#69312F;}.k-entity-title-green div{color:#250;}.k-entity-title-blue div{color:navy;}.k-entity-title-grey div{color:#1A1A1A;}.k-entity-title-purple div{color:#405;}.k-entity-title-red div{color:maroon;}.k-entity-subtitle-default{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-subtitle-green{background:#5FD35F none repeat scroll 0 50%;}.k-entity-subtitle-blue{background:#06F none repeat scroll 0 50%;}.k-entity-subtitle-grey{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-subtitle-purple{background:#660080 none repeat scroll 0 50%;}.k-entity-subtitle-red{background:#D40000 none repeat scroll 0 50%;}.k-entity-subtitle-default div{color:#FFF;}.k-entity-subtitle-green div{color:#FFF;}.k-entity-subtitle-blue div{color:#FFF;}.k-entity-subtitle-grey div{color:#FFF;}.k-entity-subtitle-purple div{color:#FFF;}.k-entity-subtitle-red div{color:#FFF;}.k-entity-bottom-rd-default,.k-entity-bottom-default,.k-toolselectoritem-sel-default{background:#DD8A3D;}.k-entity-bottom-rd-green,.k-entity-bottom-green,.k-toolselectoritem-sel-green{background:#5FD35F;}.k-entity-bottom-rd-blue,.k-entity-bottom-blue,.k-toolselectoritem-sel-blue{background:#06F;}.k-entity-bottom-rd-grey,.k-entity-bottom-grey,.k-toolselectoritem-sel-grey{background:#4D4D4D;}.k-entity-bottom-rd-purple,.k-entity-bottom-purple,.k-toolselectoritem-sel-purple{background:#660080;}.k-entity-bottom-rd-red,.k-entity-bottom-red,.k-toolselectoritem-sel-red{background:#D40000;}.k-entity-context-default div,.k-entity-context-default .x-tree .x-panel-body{background:#FFD09D none repeat scroll 0 50%;}.k-entity-context-green div,.k-entity-context-green .x-tree .x-panel-body{background:#CFA none repeat scroll 0 50%;}.k-entity-context-blue div,.k-entity-context-blue .x-tree .x-panel-body{background:#ACF none repeat scroll 0 50%;}.k-entity-context-grey div,.k-entity-context-grey .x-tree .x-panel-body{background:#B3B3B3 none repeat scroll 0 50%;}.k-entity-context-purple div,.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-context-red div,.k-entity-context-red .x-tree .x-panel-body{background:#FAA none repeat scroll 0 50%;}.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-bottom div{/* line-height: 24px; */color:#FFF;}.k-toolbar-top-line{border-top-color:#d0d0d0;border-top-style:solid;border-top-width:1px;}.k-toolbar-bottom-line{border-bottom-color:#d0d0d0;border-bottom-style:solid;border-bottom-width:1px;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial, sans;line-height:19px;}.k-toolbar-sep{padding-top:4px;padding-left:5px;}/* Custom gwt-ext styles */.ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.ytb-spacer{width:2px;}.x-grid-group-hd{border-bottom:2px solid grey;cursor:pointer;padding-top:3px;}/* Drop down */.k-dropdownouter{background-color:grey;}.k-dropdownouter-members{}.k-dropdownouter-members-default{background-color:#DF5244;}.k-dropdownouter-members-green{background-color:green;}.k-dropdownouter-members-blue{background-color:#5500D4;}.k-dropdownouter-members-grey{background-color:#4D4D4D;}.k-dropdownouter-members-purple{background-color:#672178;}.k-dropdownouter-members-red{background-color:#A02C2C;}.k-dropdownouter-part{}.k-dropdownouter-part-default{background-color:#CA5842;}.k-dropdownouter-part-green{background-color:#0A0;}.k-dropdownouter-part-blue{background-color:#60F;}.k-dropdownouter-part-grey{background-color:#666;}.k-dropdownouter-part-purple{background-color:#892CA0;}.k-dropdownouter-part-red{background-color:#C83737;}.k-dropdownouter-tags{}.k-dropdownouter-tags-default{background-color:#87501E;}.k-dropdownouter-tags-green{background-color:#00D400;}.k-dropdownouter-tags-blue{background-color:#95F;}.k-dropdownouter-tags-grey{background-color:gray;}.k-dropdownouter-tags-purple{background-color:#AB37C8;}.k-dropdownouter-tags-red{background-color:#D35F5F;}.k-dropdownouter-summary{}.k-dropdownouter-summary-default{background-color:#9F734B;}.k-dropdownouter-summary-green{background-color:#4CE14C;}.k-dropdownouter-summary-blue{background-color:#69A5FF;}.k-dropdownouter-summary-grey{background-color:#A6A6A6;}.k-dropdownouter-summary-purple{background-color:#C473D8;}.k-dropdownouter-summary-red{background-color:#E08F8F;}.k-dropdowninner{margin:0 3px 1px;background:green;background-color:#FFF;/* padding: 3px; */}.k-dropdownlabel{color:#FFF;cursor:pointer;}.k-dropdownlabel .gwt-Label{margin:0 5px 0 0;width:100%;}.k-dropdownlabel img{margin:0 3px 0 1px;}/* WsTheme */.k-wstheme-icon-default{background:#FF8C00;}.k-wstheme-icon-green{background:green;}.k-wstheme-icon-blue{background:blue;}.k-wstheme-icon-grey{background:grey;}.k-wstheme-icon-purple{background:purple;}.k-wstheme-icon-red{background:red;}/* Tool selector items */.k-toolselectoritem{width:auto;margin-bottom:5px;cursor:pointer;}.k-toolselectoritem-sel{}.k-toolselectoritem-notsel-default{background:#FFE9A5;}.k-toolselectoritem-notsel-green{background:#D6F4D6;}.k-toolselectoritem-notsel-blue{background:#D7D7F4;}.k-toolselectoritem-notsel-grey{background:#E6E6E6;}.k-toolselectoritem-notsel-purple{background:#EED7F4;}.k-toolselectoritem-notsel-red{background:#FFD5D5;}.k-toolselectoritem-sel a{color:#FFF;padding:0 9px;text-decoration:none;}.k-toolselectoritem-sel a:hover{text-decoration:none;}.k-toolselectoritem-notsel{}.k-toolselectoritem-notsel a{color:#00F;padding:0 9px;text-decoration:none;}.k-toolselectoritem-notsel a:hover{text-decoration:underline;}/* others *//*
.x-tree-node a span, .x-dd-drag-ghost a span {
color:#000000;
padding: 1px 0px 1px 1px;
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css 2009-03-16 04:13:36 UTC (rev 1078)
@@ -142,7 +142,8 @@
}
.kune-WebSafePalette-popup {
- z-index: 9999 !important;
+ z-index: 9999 !important;
+ background-color: #FFF;
}
.kune-WebSafePalette td {
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -33,6 +33,7 @@
import org.ourproject.kune.platf.client.i18n.I18nUITranslationService;
import org.ourproject.kune.platf.client.registry.ContentCapabilitiesRegistry;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
@@ -83,8 +84,10 @@
register(ToolGroup.class, new Factory<ChatEngine>(ChatEngine.class) {
@Override
public ChatEngine create() {
- return new ChatEngineDefault($(I18nUITranslationService.class), $(WorkspaceSkeleton.class),
- $(Application.class), $(Session.class), $$(EmiteUIDialog.class), $$(FileDownloadUtils.class));
+ final ChatEngineDefault chatEngineDefault = new ChatEngineDefault($(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class), $(Application.class), $(Session.class), $$(EmiteUIDialog.class),
+ $$(FileDownloadUtils.class), $(GlobalShortcutRegister.class));
+ return chatEngineDefault;
}
});
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -27,6 +27,8 @@
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.dto.UserInfoDTO;
import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.ui.WindowUtils;
import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
@@ -59,15 +61,24 @@
private final Provider<FileDownloadUtils> downloadUtils;
private Collection<RosterItem> roster;
private final Event0 onRosterChanged;
+ private final ActionShortcut shortcut;
public ChatEngineDefault(final I18nTranslationService i18n, final WorkspaceSkeleton ws, Application application,
Session session, final Provider<EmiteUIDialog> emiteUIProvider,
- final Provider<FileDownloadUtils> downloadUtils) {
+ final Provider<FileDownloadUtils> downloadUtils, GlobalShortcutRegister globalShortcutRegister) {
this.i18n = i18n;
this.ws = ws;
this.emiteUIProvider = emiteUIProvider;
this.downloadUtils = downloadUtils;
this.onRosterChanged = new Event0("onRosterChanged");
+ shortcut = new ActionShortcut(false, true, false, 'C');
+ globalShortcutRegister.put(shortcut, new Listener0() {
+ public void onEvent() {
+ if (isDialogStarted()) {
+ toggleShow();
+ }
+ }
+ });
session.onInitDataReceived(new Listener<InitDataDTO>() {
public void onEvent(final InitDataDTO initData) {
checkChatDomain(initData.getChatDomain());
@@ -132,6 +143,10 @@
return false;
}
+ public boolean isDialogStarted() {
+ return !emiteUIProvider.get().isDialogNotStarted();
+ }
+
public boolean isLoggedIn() {
return emiteUIProvider.get().isLoggedIn();
}
@@ -177,16 +192,12 @@
emiteUIProvider.get().show(OwnStatus.online);
if (traybarButton == null) {
traybarButton = new ToolbarButton();
- traybarButton.setTooltip(i18n.t("Show/hide the chat window"));
+ traybarButton.setTooltip(i18n.t("Show/hide the chat window" + shortcut.toString()));
traybarButton.setIcon("images/e-icon.gif");
traybarButton.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(final Button button, final EventObject e) {
- if (emiteUIProvider.get().isVisible()) {
- emiteUIProvider.get().hide();
- } else {
- emiteUIProvider.get().show();
- }
+ toggleShow();
}
});
ws.getSiteTraybar().addButton(traybarButton);
@@ -240,6 +251,14 @@
}
}
+ public void toggleShow() {
+ if (emiteUIProvider.get().isVisible()) {
+ emiteUIProvider.get().hide();
+ } else {
+ emiteUIProvider.get().show();
+ }
+ }
+
private XmppURI getLocalUserJid(String shortName) {
return XmppURI.jid(shortName + "@" + chatOptions.domain);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -21,6 +21,7 @@
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.services.ImageDescriptor;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
import com.calclab.suco.client.events.Listener;
import com.calclab.suco.client.events.Listener0;
Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,125 +0,0 @@
-package org.ourproject.kune.platf.client.actions;
-
-import org.ourproject.kune.platf.client.i18n.Resources;
-
-import com.google.gwt.user.client.ui.KeyboardListener;
-
-public class ActionShortcut {
-
- private static final String NO_KEYNAME = "nokeyname";
-
- private static boolean has(int modifiers, int modifier) {
- return ((modifiers & modifier) == modifier);
- }
-
- private final boolean alt;
- private final boolean ctrl;
- private final boolean shift;
- private final char key;
- private final String keyName;
-
- public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key) {
- this(ctrl, alt, shift, key, NO_KEYNAME);
- }
-
- public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key, String keyName) {
- this.alt = alt;
- this.ctrl = ctrl;
- this.shift = shift;
- this.key = key;
- this.keyName = keyName;
- }
-
- public ActionShortcut(boolean ctrl, boolean shift, char key) {
- this(ctrl, false, shift, key, NO_KEYNAME);
- }
-
- public ActionShortcut(boolean ctrl, boolean shift, char key, String keyName) {
- this(ctrl, false, shift, key, keyName);
- }
-
- public ActionShortcut(boolean ctrl, char key) {
- this(ctrl, false, false, key, NO_KEYNAME);
- }
-
- public ActionShortcut(boolean ctrl, char key, String keyName) {
- this(ctrl, false, false, key, keyName);
- }
-
- public ActionShortcut(char key, int modifiers) {
- this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
- modifiers, KeyboardListener.MODIFIER_SHIFT), key, NO_KEYNAME);
- }
-
- public ActionShortcut(char key, int modifiers, String keyName) {
- this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
- modifiers, KeyboardListener.MODIFIER_SHIFT), key, keyName);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- ActionShortcut other = (ActionShortcut) obj;
- if (alt != other.alt) {
- return false;
- }
- if (ctrl != other.ctrl) {
- return false;
- }
- if (key != other.key) {
- return false;
- }
- if (shift != other.shift) {
- return false;
- }
- return true;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + (alt ? 1231 : 1237);
- result = prime * result + (ctrl ? 1231 : 1237);
- result = prime * result + key;
- result = prime * result + (shift ? 1231 : 1237);
- return result;
- }
-
- public boolean is(char keyCode, int modifiers) {
- return (keyCode == keyCode && same(modifiers, KeyboardListener.MODIFIER_ALT, alt)
- && same(modifiers, KeyboardListener.MODIFIER_CTRL, ctrl) && same(modifiers,
- KeyboardListener.MODIFIER_SHIFT, shift));
- }
-
- public boolean same(int modifiers, int modifier, boolean keyValue) {
- return (has(modifiers, modifier) == keyValue);
- }
-
- @Override
- public String toString() {
- String s = " (";
- s += sKey(alt, "Alt");
- s += sKey(ctrl, "Ctrl");
- s += sKey(shift, "Shift");
- s += keyName != NO_KEYNAME ? translateKey(keyName) + ")" : String.valueOf(key).toUpperCase() + ")";
- return s;
- }
-
- private String sKey(boolean key, String specialKeyName) {
- return key ? translateKey(specialKeyName) + "+" : "";
- }
-
- private String translateKey(String keyNameToTranslate) {
- return Resources.i18n.tWithNT(keyNameToTranslate, "The '" + keyNameToTranslate + "' keyboard key");
- }
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,60 +0,0 @@
-package org.ourproject.kune.platf.client.actions;
-
-import java.util.HashMap;
-
-import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-
-import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.events.Listener0;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.KeyboardListenerCollection;
-
-public class ActionShortcutRegister {
-
- @SuppressWarnings("unchecked")
- private final HashMap<ActionShortcut, ActionItem> shortcuts;
-
- @SuppressWarnings("unchecked")
- public ActionShortcutRegister() {
- shortcuts = new HashMap<ActionShortcut, ActionItem>();
- }
-
- @SuppressWarnings("unchecked")
- public ActionItem get(ActionShortcut shortcut) {
- return shortcuts.get(shortcut);
- }
-
- @SuppressWarnings("unchecked")
- public ActionItem get(Event event) {
- int modifiers = KeyboardListenerCollection.getKeyboardModifiers(event);
- if (event.getTypeInt() == Event.ONKEYDOWN && modifiers != 0) {
- ActionShortcut shortcut = new ActionShortcut((char) event.getKeyCode(), modifiers);
- Log.debug("Shortcut pressed" + shortcut.toString());
- return shortcuts.get(shortcut);
- }
- // if (modifiers != 0) {
- // Log.debug("Not action associated with this shortcut");
- // }
- return null;
- }
-
- @SuppressWarnings("unchecked")
- public void put(ActionShortcut shortcut, ActionItem actionItem) {
- if (shortcuts.get(shortcut) != null) {
- Log.warn("Shortcut" + shortcut + " already registered");
- }
- shortcuts.put(shortcut, actionItem);
- }
-
- @SuppressWarnings("unchecked")
- public void put(ActionShortcut shortcut, final Listener0 listener) {
- ActionDescriptor descriptor = new ActionDescriptor(AccessRolDTO.Viewer, new Listener0() {
- public void onEvent() {
- listener.onEvent();
- }
- });
- ActionItem item = new ActionItem(descriptor, null);
- put(shortcut, item);
- }
-
-}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,7 +1,7 @@
package org.ourproject.kune.platf.client.actions.toolbar;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
import org.ourproject.kune.platf.client.actions.ActionToolbarDescriptor;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
import com.calclab.suco.client.events.Listener0;
import com.gwtext.client.core.EventObject;
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -36,6 +36,7 @@
import org.ourproject.kune.platf.client.rpc.I18nServiceAsync;
import org.ourproject.kune.platf.client.rpc.UserService;
import org.ourproject.kune.platf.client.rpc.UserServiceAsync;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
import org.ourproject.kune.platf.client.state.ContentProvider;
import org.ourproject.kune.platf.client.state.ContentProviderDefault;
import org.ourproject.kune.platf.client.state.Session;
@@ -48,6 +49,9 @@
import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalettePanel;
import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalettePresenter;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalette;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalettePanel;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalettePresenter;
import org.ourproject.kune.platf.client.ui.rte.TestRTEDialog;
import org.ourproject.kune.platf.client.ui.rte.basic.RTEActionSndToolbar;
import org.ourproject.kune.platf.client.ui.rte.basic.RTEActionTopToolbar;
@@ -55,9 +59,9 @@
import org.ourproject.kune.platf.client.ui.rte.basic.RTEditorPanel;
import org.ourproject.kune.platf.client.ui.rte.basic.RTEditorPresenter;
import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlDialog;
-import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlGroup;
import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlDialogPanel;
import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlDialogPresenter;
+import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlGroup;
import org.ourproject.kune.platf.client.ui.rte.edithtml.editor.EditHtmlEditor;
import org.ourproject.kune.platf.client.ui.rte.edithtml.editor.EditHtmlEditorPanel;
import org.ourproject.kune.platf.client.ui.rte.edithtml.editor.EditHtmlEditorPresenter;
@@ -66,16 +70,16 @@
import org.ourproject.kune.platf.client.ui.rte.edithtml.preview.EditHtmlPreviewPresenter;
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.insertimg.InsertImageGroup;
import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialogPanel;
import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialogPresenter;
+import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageGroup;
import org.ourproject.kune.platf.client.ui.rte.insertimg.ext.InsertImageExt;
import org.ourproject.kune.platf.client.ui.rte.insertimg.ext.InsertImageExtPanel;
import org.ourproject.kune.platf.client.ui.rte.insertimg.ext.InsertImageExtPresenter;
import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
-import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkGroup;
import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogPanel;
import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogPresenter;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkGroup;
import org.ourproject.kune.platf.client.ui.rte.insertlink.email.InsertLinkEmail;
import org.ourproject.kune.platf.client.ui.rte.insertlink.email.InsertLinkEmailPanel;
import org.ourproject.kune.platf.client.ui.rte.insertlink.email.InsertLinkEmailPresenter;
@@ -83,6 +87,9 @@
import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.InsertLinkExtPanel;
import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.InsertLinkExtPresenter;
import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.InsertLinkExtView;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialog;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialogPanel;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialogPresenter;
import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditor;
import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPanel;
import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPresenter;
@@ -250,6 +257,16 @@
}
});
+ register(Singleton.class, new Factory<SimplePalette>(SimplePalette.class) {
+ @Override
+ public SimplePalette create() {
+ final SimplePalettePresenter presenter = new SimplePalettePresenter();
+ final SimplePalettePanel panel = new SimplePalettePanel(presenter, i18n);
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
register(NoDecoration.class, new Factory<RTEActionTopToolbar>(RTEActionTopToolbar.class) {
@Override
public RTEActionTopToolbar create() {
@@ -281,9 +298,9 @@
final RTEditorPresenter presenter = new RTEditorPresenter($(I18nTranslationService.class),
$(Session.class), topBar, sndBar, $(RTEImgResources.class), $(InsertLinkDialog.class),
$(ColorWebSafePalette.class), $$(EditHtmlDialog.class), $$(InsertImageDialog.class),
- $(DeferredCommandWrapper.class));
+ $$(InsertTableDialog.class), $(DeferredCommandWrapper.class));
final RTEditorPanel panel = new RTEditorPanel(presenter, $(I18nUITranslationService.class),
- $(ActionManager.class));
+ $(ActionManager.class), $(GlobalShortcutRegister.class));
presenter.init(panel);
return presenter;
}
@@ -357,8 +374,8 @@
@Override
public InsertImageDialog create() {
final InsertImageDialogPresenter presenter = new InsertImageDialogPresenter();
- final InsertImageDialogPanel panel = new InsertImageDialogPanel(presenter, $(I18nTranslationService.class),
- $(Images.class), $(InsertImageGroup.class));
+ final InsertImageDialogPanel panel = new InsertImageDialogPanel(presenter,
+ $(I18nTranslationService.class), $(Images.class), $(InsertImageGroup.class));
presenter.init(panel);
return presenter;
}
@@ -385,32 +402,37 @@
}
});
- 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<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) {
+ 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));
+ 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() {
+ final InsertTableDialogPresenter presenter = new InsertTableDialogPresenter();
+ final InsertTableDialogPanel panel = new InsertTableDialogPanel(presenter, i18n,
+ $$(SimplePalette.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
$(ApplicationComponentGroup.class).createAll();
$(ToolGroup.class).createAll();
$(Application.class).start();
Copied: trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcut.java (from rev 1076, trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java 2009-03-15 17:29:41 UTC (rev 1076)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcut.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,125 @@
+package org.ourproject.kune.platf.client.shortcuts;
+
+import org.ourproject.kune.platf.client.i18n.Resources;
+
+import com.google.gwt.user.client.ui.KeyboardListener;
+
+public class ActionShortcut {
+
+ private static final String NO_KEYNAME = "nokeyname";
+
+ private static boolean has(int modifiers, int modifier) {
+ return ((modifiers & modifier) == modifier);
+ }
+
+ private final boolean alt;
+ private final boolean ctrl;
+ private final boolean shift;
+ private final char key;
+ private final String keyName;
+
+ public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key) {
+ this(ctrl, alt, shift, key, NO_KEYNAME);
+ }
+
+ public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key, String keyName) {
+ this.alt = alt;
+ this.ctrl = ctrl;
+ this.shift = shift;
+ this.key = key;
+ this.keyName = keyName;
+ }
+
+ public ActionShortcut(boolean ctrl, boolean shift, char key) {
+ this(ctrl, false, shift, key, NO_KEYNAME);
+ }
+
+ public ActionShortcut(boolean ctrl, boolean shift, char key, String keyName) {
+ this(ctrl, false, shift, key, keyName);
+ }
+
+ public ActionShortcut(boolean ctrl, char key) {
+ this(ctrl, false, false, key, NO_KEYNAME);
+ }
+
+ public ActionShortcut(boolean ctrl, char key, String keyName) {
+ this(ctrl, false, false, key, keyName);
+ }
+
+ public ActionShortcut(char key, int modifiers) {
+ this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
+ modifiers, KeyboardListener.MODIFIER_SHIFT), key, NO_KEYNAME);
+ }
+
+ public ActionShortcut(char key, int modifiers, String keyName) {
+ this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
+ modifiers, KeyboardListener.MODIFIER_SHIFT), key, keyName);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ActionShortcut other = (ActionShortcut) obj;
+ if (alt != other.alt) {
+ return false;
+ }
+ if (ctrl != other.ctrl) {
+ return false;
+ }
+ if (key != other.key) {
+ return false;
+ }
+ if (shift != other.shift) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (alt ? 1231 : 1237);
+ result = prime * result + (ctrl ? 1231 : 1237);
+ result = prime * result + key;
+ result = prime * result + (shift ? 1231 : 1237);
+ return result;
+ }
+
+ public boolean is(char keyCode, int modifiers) {
+ return (keyCode == keyCode && same(modifiers, KeyboardListener.MODIFIER_ALT, alt)
+ && same(modifiers, KeyboardListener.MODIFIER_CTRL, ctrl) && same(modifiers,
+ KeyboardListener.MODIFIER_SHIFT, shift));
+ }
+
+ public boolean same(int modifiers, int modifier, boolean keyValue) {
+ return (has(modifiers, modifier) == keyValue);
+ }
+
+ @Override
+ public String toString() {
+ String s = " (";
+ s += sKey(alt, "Alt");
+ s += sKey(ctrl, "Ctrl");
+ s += sKey(shift, "Shift");
+ s += keyName != NO_KEYNAME ? translateKey(keyName) + ")" : String.valueOf(key).toUpperCase() + ")";
+ return s;
+ }
+
+ private String sKey(boolean key, String specialKeyName) {
+ return key ? translateKey(specialKeyName) + "+" : "";
+ }
+
+ private String translateKey(String keyNameToTranslate) {
+ return Resources.i18n.tWithNT(keyNameToTranslate, "The '" + keyNameToTranslate + "' keyboard key");
+ }
+
+}
Copied: trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcutRegister.java (from rev 1076, trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java 2009-03-15 17:29:41 UTC (rev 1076)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcutRegister.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,62 @@
+package org.ourproject.kune.platf.client.shortcuts;
+
+import java.util.HashMap;
+
+import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionItem;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.events.Listener0;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.ui.KeyboardListenerCollection;
+
+public class ActionShortcutRegister {
+
+ @SuppressWarnings("unchecked")
+ private final HashMap<ActionShortcut, ActionItem> shortcuts;
+
+ @SuppressWarnings("unchecked")
+ public ActionShortcutRegister() {
+ shortcuts = new HashMap<ActionShortcut, ActionItem>();
+ }
+
+ @SuppressWarnings("unchecked")
+ public ActionItem get(ActionShortcut shortcut) {
+ return shortcuts.get(shortcut);
+ }
+
+ @SuppressWarnings("unchecked")
+ public ActionItem get(Event event) {
+ int modifiers = KeyboardListenerCollection.getKeyboardModifiers(event);
+ if (event.getTypeInt() == Event.ONKEYDOWN && modifiers != 0) {
+ ActionShortcut shortcut = new ActionShortcut((char) event.getKeyCode(), modifiers);
+ Log.debug("Shortcut pressed" + shortcut.toString());
+ return shortcuts.get(shortcut);
+ }
+ // if (modifiers != 0) {
+ // Log.debug("Not action associated with this shortcut");
+ // }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void put(ActionShortcut shortcut, ActionItem actionItem) {
+ if (shortcuts.get(shortcut) != null) {
+ Log.warn("Shortcut" + shortcut + " already registered");
+ }
+ shortcuts.put(shortcut, actionItem);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void put(ActionShortcut shortcut, final Listener0 listener) {
+ ActionDescriptor descriptor = new ActionDescriptor(AccessRolDTO.Viewer, new Listener0() {
+ public void onEvent() {
+ listener.onEvent();
+ }
+ });
+ ActionItem item = new ActionItem(descriptor, null);
+ put(shortcut, item);
+ }
+
+}
Copied: trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/GlobalShortcutRegister.java (from rev 1076, trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java 2009-03-15 17:29:41 UTC (rev 1076)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/GlobalShortcutRegister.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,37 @@
+package org.ourproject.kune.platf.client.shortcuts;
+
+import org.ourproject.kune.platf.client.actions.ActionItem;
+import org.ourproject.kune.platf.client.actions.ActionManager;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.EventPreview;
+
+public class GlobalShortcutRegister extends ActionShortcutRegister {
+
+ private final EventPreview eventPreview;
+
+ public GlobalShortcutRegister(final ActionManager actionManager) {
+ eventPreview = new EventPreview() {
+ @SuppressWarnings("unchecked")
+ public boolean onEventPreview(Event event) {
+ ActionItem actionItem = get(event);
+ if (actionItem != null) {
+ // Log.debug("Not propagating event");
+ DOM.eventPreventDefault(event);
+ actionManager.doAction(actionItem);
+ return false;
+ }
+ return true;
+ }
+ };
+ }
+
+ public void disable() {
+ DOM.removeEventPreview(eventPreview);
+ }
+
+ public void enable() {
+ DOM.addEventPreview(eventPreview);
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -34,6 +34,8 @@
public static final String UNIX_NAME = "^[a-z0-9_\\-]+$";
+ public static final String NUM_REGEXP = "^[0-9]+$";
+
/*
* This method escape only some dangerous html chars
*/
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -29,10 +29,11 @@
public class DefaultForm {
- protected static final int DEF_FIELD_WIDTH = 200;
- protected static final int DEF_SMALL_FIELD_WIDTH = 100;
- protected static final int DEF_MEDIUM_FIELD_WIDTH = 150;
- protected static final int DEF_FIELD_LABEL_WITH = 75;
+ public static final int DEF_FIELD_WIDTH = 200;
+ public static final int DEF_SMALL_FIELD_WIDTH = 100;
+ public static final int DEF_XSMALL_FIELD_WIDTH = 50;
+ public static final int DEF_MEDIUM_FIELD_WIDTH = 150;
+ public static final int DEF_FIELD_LABEL_WITH = 75;
private final FormPanel form;
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,11 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import com.calclab.suco.client.events.Listener;
+
+public interface AbstractPalette {
+
+ void hide();
+
+ void show(int left, int top, Listener<String> onColorSelected);
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,32 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public abstract class AbstractPalettePanel {
+ private PopupPanel popupPalette;
+ Widget widget;
+
+ public void hide() {
+ if (popupPalette != null) {
+ popupPalette.hide();
+ }
+ }
+
+ public void show(final int left, final int top) {
+ if (widget == null) {
+ createPalette();
+ }
+ popupPalette = new PopupPanel(true, true);
+ popupPalette.addStyleName("kune-WebSafePalette-popup");
+ popupPalette.setVisible(false);
+ popupPalette.show();
+ popupPalette.setPopupPosition(left, top);
+ popupPalette.setWidget(widget);
+ popupPalette.setVisible(true);
+ }
+
+ protected void createPalette() {
+ }
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,28 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import com.calclab.suco.client.events.Listener;
+
+public abstract class AbstractPalettePresenter {
+
+ protected Listener<String> onColorSelected;
+ private AbstractPaletteView view;
+
+ public void hide() {
+ this.view.hide();
+ }
+
+ public void init(final AbstractPaletteView view) {
+ this.view = view;
+ }
+
+ public void show(final int left, final int top, final Listener<String> onColorSelected) {
+ view.show(left, top);
+ this.onColorSelected = onColorSelected;
+ }
+
+ protected void onColorSelected(final String color) {
+ onColorSelected.onEvent(color);
+ view.hide();
+ }
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,11 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import org.ourproject.kune.platf.client.View;
+
+public interface AbstractPaletteView extends View {
+
+ void hide();
+
+ void show(int left, int top);
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -19,12 +19,7 @@
\*/
package org.ourproject.kune.platf.client.ui.palette;
-import com.calclab.suco.client.events.Listener;
-public interface ColorWebSafePalette {
+public interface ColorWebSafePalette extends AbstractPalette {
- void hide();
-
- void show(int left, int top, Listener<String> onColorSelected);
-
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -21,7 +21,6 @@
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.SourcesTableEvents;
import com.google.gwt.user.client.ui.TableListener;
@@ -31,38 +30,18 @@
* http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors
*
*/
-public class ColorWebSafePalettePanel implements ColorWebSafePaletteView {
+public class ColorWebSafePalettePanel extends AbstractPalettePanel implements ColorWebSafePaletteView {
- Grid paletteGrid;
private final ColorWebSafePalettePresenter presenter;
- private PopupPanel popupPalette;
public ColorWebSafePalettePanel(final ColorWebSafePalettePresenter initPresenter) {
this.presenter = initPresenter;
}
- public void hide() {
- if (popupPalette != null) {
- popupPalette.hide();
- }
- }
+ @Override
+ protected void createPalette() {
+ Grid paletteGrid = new Grid(ROWS, COLS);
- public void show(final int left, final int top) {
- if (paletteGrid == null) {
- createPalette();
- }
- popupPalette = new PopupPanel(true, true);
- popupPalette.addStyleName("kune-WebSafePalette-popup");
- popupPalette.setVisible(false);
- popupPalette.show();
- popupPalette.setPopupPosition(left, top);
- popupPalette.setWidget(paletteGrid);
- popupPalette.setVisible(true);
- }
-
- private void createPalette() {
- paletteGrid = new Grid(ROWS, COLS);
-
paletteGrid.setCellSpacing(1);
// Put color values in the grid cells
@@ -88,5 +67,6 @@
presenter.onColorSelected(row, col);
}
});
+ widget = paletteGrid;
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -19,32 +19,11 @@
*/
package org.ourproject.kune.platf.client.ui.palette;
-import com.calclab.suco.client.events.Listener;
+public class ColorWebSafePalettePresenter extends AbstractPalettePresenter implements ColorWebSafePalette {
-public class ColorWebSafePalettePresenter implements ColorWebSafePalette {
-
- private Listener<String> onColorSelected;
- private ColorWebSafePaletteView view;
-
- public ColorWebSafePalettePresenter() {
- }
-
- public void hide() {
- this.view.hide();
- }
-
- public void init(final ColorWebSafePaletteView view) {
- this.view = view;
- }
-
- public void show(final int left, final int top, final Listener<String> onColorSelected) {
- view.show(left, top);
- this.onColorSelected = onColorSelected;
- }
-
protected void onColorSelected(final int row, final int col) {
final String color = getColor(row, col);
- onColorSelected.onEvent(color);
+ onColorSelected(color);
}
private String getColor(final int row, final int col) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -19,7 +19,7 @@
*/
package org.ourproject.kune.platf.client.ui.palette;
-public interface ColorWebSafePaletteView {
+public interface ColorWebSafePaletteView extends AbstractPaletteView {
int ROWS = 18;
@@ -27,8 +27,4 @@
String COLORS[] = { "0", "3", "6", "9", "C", "F" };
- void hide();
-
- void show(int left, int top);
-
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,4 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+public interface SimplePalette extends AbstractPalette {
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,30 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+
+import com.gwtext.client.widgets.ColorPalette;
+import com.gwtext.client.widgets.event.ColorPaletteListenerAdapter;
+
+public class SimplePalettePanel extends AbstractPalettePanel implements SimplePaletteView {
+
+ private final SimplePalettePresenter presenter;
+ private final I18nTranslationService i18n;
+
+ public SimplePalettePanel(final SimplePalettePresenter presenter, I18nTranslationService i18n) {
+ this.presenter = presenter;
+ this.i18n = i18n;
+ }
+
+ @Override
+ protected void createPalette() {
+ ColorPalette colorPalette = new ColorPalette();
+ colorPalette.setTitle(i18n.t("Pick a color"));
+ colorPalette.addListener(new ColorPaletteListenerAdapter() {
+ @Override
+ public void onSelect(ColorPalette colorPalette, String color) {
+ presenter.onColorSelected(color);
+ }
+ });
+ widget = colorPalette;
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,6 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+
+public class SimplePalettePresenter extends AbstractPalettePresenter implements SimplePalette {
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+
+public interface SimplePaletteView extends AbstractPaletteView {
+}
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -18,6 +18,7 @@
import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.IFrameElement;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FocusWidget;
@@ -25,6 +26,7 @@
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.
@@ -391,6 +393,28 @@
}
/**
+ * NOTE: If the current browser doesn't support rich text editing this
+ * method returns <code>null</code>. You should test the returned value and
+ * fail save to an appropriate behavior!<br/>
+ * The appropriate test would be: <code><pre>
+ * if (rta.isAttached() && rta.getDocument() == null) {
+ * // The current browser doesn't support rich text editing.
+ * }
+ * </pre></code>
+ *
+ * @return The DOM document being edited with this rich text area.
+ *
+ * copied from xwiki
+ */
+ public Document getDocument() {
+ if (getElement().getTagName().equalsIgnoreCase("iframe")) {
+ return IFrameElement.as(getElement()).getContentDocument().cast();
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Gets the full rich text formatting interface.
*
* @return <code>null</code> if full formatting is not supported
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -16,18 +16,17 @@
import org.ourproject.kune.platf.client.actions.ActionItem;
import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
-import org.ourproject.kune.platf.client.actions.ActionShortcutRegister;
import org.ourproject.kune.platf.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcutRegister;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.IFrameElement;
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.Document;
import com.xpn.xwiki.wysiwyg.client.dom.DocumentFragment;
import com.xpn.xwiki.wysiwyg.client.dom.Range;
import com.xpn.xwiki.wysiwyg.client.dom.Selection;
@@ -49,18 +48,20 @@
private final RTEditorPresenter presenter;
private final ActionManager actionManager;
private final ActionShortcutRegister shortcutRegister;
+ private final GlobalShortcutRegister globalShortcutReg;
public RTEditorPanel(final RTEditorPresenter presenter, I18nUITranslationService i18n,
- final ActionManager actionManager) {
+ final ActionManager actionManager, GlobalShortcutRegister globalShortcutReg) {
this.presenter = presenter;
this.i18n = i18n;
this.actionManager = actionManager;
+ this.globalShortcutReg = globalShortcutReg;
basic = getBasicFormatter();
extended = getExtendedFormatter();
shortcutRegister = new ActionShortcutRegister();
EventListener listener = new EventListener();
addFocusListener(listener);
- setWidth("97%");
+ setWidth("96%");
setHeight("100%");
}
@@ -107,28 +108,6 @@
setFocus(true);
}
- /**
- * NOTE: If the current browser doesn't support rich text editing this
- * method returns <code>null</code>. You should test the returned value and
- * fail save to an appropriate behavior!<br/>
- * The appropriate test would be: <code><pre>
- * if (rta.isAttached() && rta.getDocument() == null) {
- * // The current browser doesn't support rich text editing.
- * }
- * </pre></code>
- *
- * @return The DOM document being edited with this rich text area.
- *
- * copied from xwiki
- */
- public Document getDocument() {
- if (getElement().getTagName().equalsIgnoreCase("iframe")) {
- return IFrameElement.as(getElement()).getContentDocument().cast();
- } else {
- return null;
- }
- }
-
public void insertComment(String author) {
String comment = null;
createCommentAndSelectIt(author, comment);
@@ -221,7 +200,8 @@
super.onBrowserEvent(event);
break;
case Event.ONKEYDOWN:
- ActionItem actionItem = shortcutRegister.get(event);
+ ActionItem rtaActionItem = shortcutRegister.get(event);
+ ActionItem actionItem = rtaActionItem != null ? rtaActionItem : globalShortcutReg.get(event);
if (actionItem != null) {
updateStatus();
fireEdit();
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -7,7 +7,6 @@
import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
import org.ourproject.kune.platf.client.actions.ActionItem;
import org.ourproject.kune.platf.client.actions.ActionItemCollection;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
@@ -15,7 +14,9 @@
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.platf.client.ui.TextUtils;
import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
@@ -23,6 +24,7 @@
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.inserttable.InsertTableDialog;
import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
import com.calclab.suco.client.events.Event0;
@@ -66,11 +68,17 @@
private final ActionAddCondition<Object> canBeExtended;
private final Provider<EditHtmlDialog> editHtmlDialog;
private final Provider<InsertImageDialog> insertImageDialog;
+ private final Provider<InsertTableDialog> insertTableDialog;
+ private Listener<String> insertTableListener;
+ private Listener2<String, String> insertLinkListener;
+ private Listener<String> updateHtmlListener;
+ private ActionToolbarButtonDescriptor<Object> insertTableBtn;
public RTEditorPresenter(I18nTranslationService i18n, Session session, RTEActionTopToolbar topBar,
RTEActionSndToolbar sndBar, RTEImgResources imgResources, InsertLinkDialog textEditorInsertElement,
ColorWebSafePalette palette, Provider<EditHtmlDialog> editHtmlDialog,
- Provider<InsertImageDialog> insertImageDialog, DeferredCommandWrapper deferred) {
+ Provider<InsertImageDialog> insertImageDialog, Provider<InsertTableDialog> insertTableDialog,
+ DeferredCommandWrapper deferred) {
this.i18n = i18n;
this.session = session;
this.topBar = topBar;
@@ -79,6 +87,7 @@
this.palette = palette;
this.editHtmlDialog = editHtmlDialog;
this.insertImageDialog = insertImageDialog;
+ this.insertTableDialog = insertTableDialog;
this.deferred = deferred;
styleToolbar(sndBar);
sndBar.attach();
@@ -399,14 +408,18 @@
ActionToolbarMenuDescriptor<Object> editHtml = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
new Listener0() {
+
public void onEvent() {
+ if (updateHtmlListener == null) {
+ updateHtmlListener = new Listener<String>() {
+ public void onEvent(String html) {
+ view.setHTML(html);
+ fireOnEdit();
+ }
+ };
+ }
EditHtmlDialog dialog = editHtmlDialog.get();
- dialog.setUpdateListener(new Listener<String>() {
- public void onEvent(String html) {
- view.setHTML(html);
- fireOnEdit();
- }
- });
+ dialog.setUpdateListener(updateHtmlListener);
dialog.show();
dialog.setHtml(view.getHTML());
}
@@ -558,12 +571,15 @@
public void onEvent() {
deferred.addCommand(new Listener0() {
public void onEvent() {
- insertElement.setOnCreateLink(new Listener2<String, String>() {
- public void onEvent(String name, String url) {
- view.createLink(url);
- fireOnEdit();
- }
- });
+ if (insertLinkListener == null) {
+ insertLinkListener = new Listener2<String, String>() {
+ public void onEvent(String name, String url) {
+ view.createLink(url);
+ fireOnEdit();
+ }
+ };
+ }
+ insertElement.setOnCreateLink(insertLinkListener);
insertElement.show();
}
});
@@ -599,10 +615,21 @@
removeFormat.setAddCondition(canBeExtended);
removeFormat.setRightSeparator(ActionToolbarButtonSeparator.separator);
+ final ActionToolbarMenuDescriptor<Object> insertMedia = new ActionToolbarMenuDescriptor<Object>(accessRol,
+ topbar, new Listener0() {
+ public void onEvent() {
+ NotifyUser.info(TextUtils.IN_DEVELOPMENT);
+ }
+ });
+ insertMedia.setIconCls(getCssName(imgResources.film()));
+ insertMedia.setTextDescription(i18n.t("Insert Media ..."));
+ insertMedia.setAddCondition(canBeExtended);
+ insertMedia.setParentMenuTitle(i18n.t(INSERT_MENU));
+
final ActionToolbarMenuDescriptor<Object> insertTable = new ActionToolbarMenuDescriptor<Object>(accessRol,
topbar, new Listener0() {
public void onEvent() {
- insertSimpleTable();
+ onInsertTablePressed();
}
});
insertTable.setIconCls(getCssName(imgResources.inserttable()));
@@ -610,12 +637,11 @@
insertTable.setAddCondition(canBeExtended);
insertTable.setParentMenuTitle(i18n.t(INSERT_MENU));
- final ActionToolbarButtonDescriptor<Object> insertTableBtn = new ActionToolbarButtonDescriptor<Object>(
- accessRol, sndbar, new Listener0() {
- public void onEvent() {
- insertSimpleTable();
- }
- });
+ insertTableBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, new Listener0() {
+ public void onEvent() {
+ onInsertTablePressed();
+ }
+ });
insertTableBtn.setIconCls(getCssName(imgResources.inserttable()));
insertTableBtn.setToolTip(i18n.t("Insert Table"));
insertTableBtn.setAddCondition(canBeExtended);
@@ -624,7 +650,7 @@
final ActionToolbarButtonDescriptor<Object> fontColor = new ActionToolbarButtonDescriptor<Object>(accessRol,
sndbar, new Listener0() {
public void onEvent() {
- palette.show(getActionLeftPosition(sndBar, removeFormat), getActionTopPosition(sndBar,
+ palette.show(getActionLeftPosition(sndBar, insertTableBtn), getActionTopPosition(sndBar,
removeFormat), new Listener<String>() {
public void onEvent(String color) {
palette.hide();
@@ -710,6 +736,7 @@
actions.add(withNoItem(removeLink));
actions.add(withNoItem(insertTableBtn));
actions.add(withNoItem(insertTable));
+ actions.add(withNoItem(insertMedia));
actions.add(withNoItem(comment));
actions.add(withNoItem(undoBtn));
actions.add(withNoItem(redoBtn));
@@ -772,14 +799,6 @@
return RTEImgResources.SUFFIX + imageResource.getName();
}
- private void insertSimpleTable() {
- view.insertHtml("<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\">\n" + "<tbody>\n"
- + "<tr>\n" + "<td width=\"50%\"><br>\n" + "</td>\n" + "<td width=\"50%\"><br>\n" + "</td>\n"
- + "</tr>\n" + "<tr>\n" + "<td width=\"50%\"><br>\n" + "</td>\n" + "<td width=\"50%\"><br>\n"
- + "</td>\n" + "</tr>\n</tbody>\n</table>");
- fireOnEdit();
- }
-
private boolean isExtended() {
return extended && view.canBeExtended();
}
@@ -792,6 +811,23 @@
};
}
+ private void onInsertTablePressed() {
+ if (insertTableListener == null) {
+ insertTableListener = new Listener<String>() {
+ public void onEvent(String table) {
+ if (view.isAnythingSelected()) {
+ // FIXME
+ // move to end of selection?
+ }
+ view.insertHtml(table);
+ fireOnEdit();
+ }
+ };
+ }
+ insertTableDialog.get().setOnInsertTable(insertTableListener);
+ insertTableDialog.get().show();
+ }
+
private void styleToolbar(ActionToolbar<Object> bar) {
bar.setNormalStyle();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -47,6 +47,9 @@
@Resource("edithtml.png")
public ImageResource edithtml();
+ @Resource("film.png")
+ public ImageResource film();
+
@Resource("fontcolor.png")
public ImageResource fontcolor();
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/film.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/film.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css 2009-03-16 04:13:36 UTC (rev 1078)
@@ -10,6 +10,10 @@
gwt-image: 'subscript';
}
+ at sprite div .k-rte-film {
+ gwt-image: 'film';
+}
+
@sprite div .k-rte-strikeout {
gwt-image: 'strikeout';
}
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/AbstractRichTextAreaTest.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -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 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 }, from the given HTML. The
+ * is method is needed because the Selection implementation for Internet
+ * Explorer adds {@code } 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(" ", "");
+ }
+
+ /**
+ * 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);
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,55 @@
+/*
+ * 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 com.google.gwt.dom.client.Document;
+import com.google.gwt.junit.client.GWTTestCase;
+
+/**
+ * Base class for all WYSIWYG client tests. It returns the name of the module in {@link #getModuleName()} so you don't
+ * have to do it in each test.
+ *
+ * @version $Id$
+ */
+public abstract class AbstractWysiwygClientTest extends GWTTestCase
+{
+ /**
+ * {@inheritDoc}
+ *
+ * @see GWTTestCase#getModuleName()
+ */
+ public String getModuleName()
+ {
+ return "com.xpn.xwiki.wysiwyg.Wysiwyg";
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see GWTTestCase#gwtSetUp()
+ */
+ protected void gwtSetUp() throws Exception
+ {
+ super.gwtSetUp();
+
+ // We have to remove the default body border because it affects the range detection in IE.
+ Document.get().getBody().getStyle().setProperty("borderStyle", "none");
+ }
+}
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,14 +1,15 @@
package org.ourproject.kune.platf.client.ui.rte.insertlink;
import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.junit.client.GWTTestCase;
-import com.google.gwt.user.client.ui.Hyperlink;
+import com.xpn.xwiki.wysiwyg.client.dom.Range;
+import com.xpn.xwiki.wysiwyg.client.dom.Selection;
-public class LinkInfoTest extends GWTTestCase {
+public class LinkInfoTest extends AbstractRichTextAreaTest {
- private static final String TEXT = "some link";
+ private static final String TEXT = "somelink";
private static final String HREF = "http://example.com";
private static final String TITLE = "on over";
+ private static final String _BLANK = "_blank";
@Override
public String getModuleName() {
@@ -16,13 +17,29 @@
}
public void testSimpleLink() {
- Hyperlink link = new Hyperlink(TEXT, HREF);
- link.setTitle(TITLE);
- Log.info(link.getHTML());
- LinkInfo linkParsed = LinkInfo.parse(link.getElement());
- assertEquals(TEXT, linkParsed.getText());
- assertEquals(HREF, linkParsed.getUrl());
- assertEquals(TITLE, linkParsed.getTitle());
- assertEquals(false, linkParsed.isInNewWindow());
+ // String html = createHtmlLink(HREF, TITLE, _BLANK, TEXT);
+ rta.setHTML(TEXT);
+ Log.debug(rta.getHTML());
+
+ Range range = rta.getDocument().createRange();
+ range.setStart(getBody().getFirstChild(), 1);
+ range.setEnd(getBody().getFirstChild(), 3);
+ String selectedText = "om";
+
+ 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());
}
+
+ private String createHtmlLink(String href, String title, String target, String text) {
+ return "<a title=\"" + title + "\" href=\"" + href + "\" target=\"" + target + "\">" + text + "</a>";
+ }
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,13 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import com.calclab.suco.client.events.Listener;
+
+public interface InsertTableDialog {
+
+ void hide();
+
+ void setOnInsertTable(Listener<String> listener);
+
+ void show();
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,185 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.ui.TextUtils;
+import org.ourproject.kune.platf.client.ui.dialogs.BasicDialog;
+import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalette;
+
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.ioc.Provider;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.Grid;
+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.Checkbox;
+import com.gwtext.client.widgets.form.Field;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.form.event.FieldListenerAdapter;
+
+public class InsertTableDialogPanel extends BasicDialog implements InsertTableDialogView {
+
+ private static final String INSERT_LINK_ID = "itdp-diag";
+ private static final String R_FIELD = "itdp-wfield";
+ private static final String C_FIELD = "itdp-cfield";
+ private final TextField rowsField;
+ private final TextField colsField;
+ private final Checkbox sameWidth;
+ private final DefaultForm form;
+ private final TextField backColorField;
+ private final TextField borderField;
+ private final I18nTranslationService i18n;
+ private final TextField borderColorField;
+
+ public InsertTableDialogPanel(final InsertTableDialogPresenter presenter, I18nTranslationService i18n,
+ final Provider<SimplePalette> simplePalette) {
+ super(INSERT_LINK_ID, i18n.t("Insert Table"), true, false, 320, 260);
+ this.i18n = i18n;
+ form = new DefaultForm();
+ form.setAutoWidth(true);
+ form.setAutoHeight(true);
+
+ rowsField = new TextField();
+ rowsField.setTabIndex(4);
+ rowsField.setFieldLabel(i18n.t("Rows"));
+ rowsField.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH);
+ rowsField.setName(R_FIELD);
+ rowsField.setRegex(TextUtils.NUM_REGEXP);
+ rowsField.setRegexText(i18n.t("This must be a number"));
+ rowsField.setAllowBlank(false);
+ rowsField.setValidationEvent(false);
+ rowsField.setId(R_FIELD);
+ rowsField.setValue("2");
+
+ colsField = new TextField();
+ colsField.setTabIndex(5);
+ colsField.setFieldLabel(i18n.t("Columns"));
+ colsField.setName(C_FIELD);
+ colsField.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH);
+ colsField.setRegex(TextUtils.NUM_REGEXP);
+ colsField.setRegexText(i18n.t("This must be a number"));
+ colsField.setAllowBlank(false);
+ colsField.setValidationEvent(false);
+ colsField.setId(C_FIELD);
+ colsField.setValue("2");
+
+ borderField = new TextField();
+ borderField.setTabIndex(5);
+ borderField.setFieldLabel(i18n.t("Border Size"));
+ borderField.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH);
+ borderField.setRegex(TextUtils.NUM_REGEXP);
+ borderField.setRegexText(i18n.t("This must be a number"));
+ borderField.setAllowBlank(false);
+ borderField.setValidationEvent(false);
+ borderField.setValue("0");
+
+ sameWidth = new Checkbox(i18n.t("Columns of equal width"));
+ sameWidth.setChecked(true);
+
+ backColorField = createColorField(i18n.t("Background color"));
+ borderColorField = createColorField(i18n.t("Border color"));
+
+ FieldListenerAdapter colorListener = new FieldListenerAdapter() {
+ @Override
+ public void onFocus(final Field field) {
+ super.onFocus(field);
+ simplePalette.get().show(field.getAbsoluteLeft() + 10, field.getAbsoluteTop() + 10,
+ new Listener<String>() {
+ public void onEvent(String color) {
+ setBackgroupFieldColor(field, color);
+ field.setValue("#" + color);
+ }
+ });
+ }
+ };
+ backColorField.addListener(colorListener);
+ borderColorField.addListener(colorListener);
+
+ form.add(rowsField);
+ form.add(colsField);
+ form.add(sameWidth);
+ form.add(backColorField);
+ form.add(borderField);
+ form.add(borderColorField);
+
+ Button insert = new Button(i18n.t("Insert"));
+ insert.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(Button button, EventObject e) {
+ if (form.getFormPanel().getForm().isValid()) {
+ presenter.onInsert(rowsField.getValueAsString(), colsField.getValueAsString(),
+ borderField.getValueAsString());
+ }
+ }
+ });
+ Button cancel = new Button(i18n.t("Cancel"));
+ cancel.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(Button button, EventObject e) {
+ presenter.onCancel();
+ }
+ });
+
+ super.add(form.getFormPanel());
+ super.addButton(insert);
+ super.addButton(cancel);
+ }
+
+ public String generateTable(int rows, int cols, boolean sameColWidth, String backgroundColor, int border,
+ String borderColor) {
+ Grid table = new Grid(rows, cols);
+ table.setWidth("100%");
+ if (backgroundColor != null) {
+ DOM.setElementAttribute(table.getElement(), "bgcolor", backgroundColor);
+ }
+
+ if (borderColor != null) {
+ DOM.setElementAttribute(table.getElement(), "bordercolor", borderColor);
+ }
+
+ table.setBorderWidth(border);
+ table.setCellPadding(3);
+ table.setCellSpacing(0);
+ if (sameColWidth) {
+ int colWith = 100 / cols;
+ for (int i = 0; i < cols; i++) {
+ table.getColumnFormatter().setWidth(i, colWith + "%");
+ }
+ }
+ return table.getElement().getString();
+ }
+
+ public String getBackgroundColor() {
+ return backColorField.getValueAsString();
+ }
+
+ public String getBorderColor() {
+ return borderColorField.getValueAsString();
+ }
+
+ public boolean getSameColWidth() {
+ return sameWidth.getValue();
+ }
+
+ public void reset() {
+ form.getFormPanel().getForm().reset();
+ rowsField.setValue("2");
+ colsField.setValue("2");
+ borderField.setValue("0");
+ sameWidth.setChecked(true);
+ setBackgroupFieldColor(backColorField, "FFFFFF");
+ setBackgroupFieldColor(borderColorField, "FFFFFF");
+ }
+
+ private TextField createColorField(String text) {
+ TextField field = new TextField(text);
+ field.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH + 15);
+ field.setTitle(i18n.t("Click to change"));
+ return field;
+ }
+
+ private void setBackgroupFieldColor(Field field, String color) {
+ field.setStyle("background-color: #" + color + ";background-image:none;");
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,56 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import com.calclab.suco.client.events.Listener;
+
+public class InsertTableDialogPresenter implements InsertTableDialog {
+
+ private static final int MAX_ROWS = 100;
+ private static final int MAX_COLS = 25;
+ private static final int MAX_BORDER = 50;
+ private InsertTableDialogView view;
+ private Listener<String> onInsertTable;
+
+ public InsertTableDialogPresenter() {
+ }
+
+ public void hide() {
+ view.hide();
+ }
+
+ public void init(InsertTableDialogView view) {
+ this.view = view;
+ }
+
+ public void onCancel() {
+ view.hide();
+ view.reset();
+ }
+
+ public void onInsert(String rowsS, String colsS, String borderS) {
+ if (onInsertTable != null) {
+ Integer rows = new Integer(rowsS);
+ Integer cols = new Integer(colsS);
+ Integer border = new Integer(borderS);
+ boolean validRows = rows < MAX_ROWS && rows > 0;
+ boolean validCols = cols < MAX_COLS && cols > 0;
+ boolean validBorder = border < MAX_BORDER && border > 0;
+ onInsertTable.onEvent(createTable(validRows ? rows : MAX_ROWS, validCols ? cols : MAX_COLS,
+ validBorder ? border : MAX_BORDER));
+ }
+ view.hide();
+ view.reset();
+ }
+
+ public void setOnInsertTable(Listener<String> listener) {
+ this.onInsertTable = listener;
+ }
+
+ public void show() {
+ view.show();
+ }
+
+ private String createTable(int rows, int cols, int border) {
+ return view.generateTable(rows, cols, view.getSameColWidth(), view.getBackgroundColor(), border,
+ view.getBorderColor());
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,21 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import org.ourproject.kune.platf.client.View;
+
+public interface InsertTableDialogView extends View {
+
+ String generateTable(int rows, int cols, boolean sameColWidth, String backgroundColor, int border,
+ String borderColor);
+
+ String getBackgroundColor();
+
+ String getBorderColor();
+
+ boolean getSameColWidth();
+
+ void hide();
+
+ void reset();
+
+ void show();
+}
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,12 +1,12 @@
package org.ourproject.kune.platf.client.ui.rte.saving;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
import org.ourproject.kune.platf.client.actions.BeforeActionListener;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor;
import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -468,7 +468,7 @@
});
action.setTextDescription(textDescription);
action.setParentMenuTitle(PUBLICATION_MENU);
- // action.setParentSubMenuTitle(i18n.t("Change the status"));
+ action.setParentMenuIconUrl("images/anybody.png");
contentActionRegistry.addAction(action, contentsModerated);
}
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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -42,6 +42,7 @@
import org.ourproject.kune.platf.client.services.ErrorHandler;
import org.ourproject.kune.platf.client.services.ImageUtils;
import org.ourproject.kune.platf.client.services.Images;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
@@ -82,7 +83,6 @@
import org.ourproject.kune.workspace.client.entityheader.maxmin.MaxMinWorkspace;
import org.ourproject.kune.workspace.client.entityheader.maxmin.MaxMinWorkspacePanel;
import org.ourproject.kune.workspace.client.entityheader.maxmin.MaxMinWorkspacePresenter;
-import org.ourproject.kune.workspace.client.events.GlobalShortcutRegister;
import org.ourproject.kune.workspace.client.i18n.I18nTranslator;
import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPanel;
import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPresenter;
Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,38 +0,0 @@
-package org.ourproject.kune.workspace.client.events;
-
-import org.ourproject.kune.platf.client.actions.ActionItem;
-import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionShortcutRegister;
-
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.EventPreview;
-
-public class GlobalShortcutRegister extends ActionShortcutRegister {
-
- private final EventPreview eventPreview;
-
- public GlobalShortcutRegister(final ActionManager actionManager) {
- eventPreview = new EventPreview() {
- @SuppressWarnings("unchecked")
- public boolean onEventPreview(Event event) {
- ActionItem actionItem = get(event);
- if (actionItem != null) {
- // Log.debug("Not propagating event");
- DOM.eventPreventDefault(event);
- actionManager.doAction(actionItem);
- return false;
- }
- return true;
- }
- };
- }
-
- public void disable() {
- DOM.removeEventPreview(eventPreview);
- }
-
- public void enable() {
- DOM.addEventPreview(eventPreview);
- }
-}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -20,15 +20,15 @@
package org.ourproject.kune.workspace.client.hello;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.dto.UserSimpleDTO;
import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
import org.ourproject.kune.platf.client.i18n.I18nTranslationServiceMocked;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
-import org.ourproject.kune.workspace.client.events.GlobalShortcutRegister;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.socialnet.UserActionRegistry;
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java 2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java 2009-03-16 04:13:36 UTC (rev 1078)
@@ -5,6 +5,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
import com.google.gwt.user.client.ui.KeyboardListener;
More information about the kune-commits
mailing list