kune-commits
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
January 2009
- 3 participants
- 24 discussions
Author: shevek
Date: 2009-01-29 19:42:08 +0100 (Thu, 29 Jan 2009)
New Revision: 1042
Modified:
trunk/doc/kune-ene-09.pdf
Log:
PDF generated
Modified: trunk/doc/kune-ene-09.pdf
===================================================================
(Binary files differ)
1
0
Author: shevek
Date: 2009-01-29 19:28:29 +0100 (Thu, 29 Jan 2009)
New Revision: 1041
Modified:
trunk/TODO
trunk/doc/kune-ene-09.odp
Log:
Ultimate video
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2009-01-27 01:24:24 UTC (rev 1040)
+++ trunk/TODO 2009-01-29 18:28:29 UTC (rev 1041)
@@ -85,7 +85,13 @@
2007-12-21 10:35:16,197 [btpool0-5] DEBUG - ContentManagerDefault.createContent EXCEPTION => javax.persistence.Entity
** vjrj <v> IconHyperlink.java and IconLabel.java to gwt1.5
-* MIND-TERM
+* MID-TERM
+** <s> Bastien's extension to emite, for assemblies:
+Possible extension of the Chat utility: make it a tool to take notes
+during a meeting. Something where someone can define topics, where
+the logs can be exported in .odt (with user-defined sequences, maybe
+corresponding to the topics...) -- I don't have a precise idea of what
+I am talking about, but I'm sure there is something to do.
** vjrj <v> Login: Follow incubation recomendations. See:
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e8e1…
** vjrj <v> kune debian package:
Modified: trunk/doc/kune-ene-09.odp
===================================================================
(Binary files differ)
1
0
Author: vjrj
Date: 2009-01-27 02:24:24 +0100 (Tue, 27 Jan 2009)
New Revision: 1040
Added:
trunk/src/main/java/org/ourproject/kune/platf/RichText.gwt.xml
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImpl.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplIE6.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplMozilla.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplOpera.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplSafari.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplStandard.java
Modified:
trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml
trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElement.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java
trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html
Log:
RichTextArea copy and extension to add insertHtml
Modified: trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml 2009-01-27 01:24:24 UTC (rev 1040)
@@ -4,7 +4,7 @@
<inherits name='com.google.gwt.user.User' />
<inherits name='com.google.gwt.i18n.I18N' />
<inherits name="com.google.gwt.user.UserAgent" />
-
+ <inherits name="org.ourproject.kune.platf.RichText" />
<public path="public" />
</module>
Added: trunk/src/main/java/org/ourproject/kune/platf/RichText.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/RichText.gwt.xml 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/RichText.gwt.xml 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,59 @@
+<!-- -->
+<!-- Copyright 2008 Google Inc. -->
+<!-- Licensed under the Apache License, Version 2.0 (the "License"); you -->
+<!-- may not use this file except in compliance with the License. You may -->
+<!-- may obtain a copy of the License at -->
+<!-- -->
+<!-- http://www.apache.org/licenses/LICENSE-2.0 -->
+<!-- -->
+<!-- Unless required by applicable law or agreed to in writing, software -->
+<!-- distributed under the License is distributed on an "AS IS" BASIS, -->
+<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -->
+<!-- implied. License for the specific language governing permissions and -->
+<!-- limitations under the License. -->
+
+<!-- Deferred binding rules for browser selection. -->
+<!-- -->
+<module>
+ <inherits name="com.google.gwt.core.Core" />
+ <inherits name="com.google.gwt.user.UserAgent" />
+
+ <!-- IE-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplIE6">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <when-property-is name="user.agent" value="ie6" />
+ </replace-with>
+
+ <!-- Mozilla-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplMozilla">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <any>
+ <when-property-is name="user.agent" value="gecko1_8" />
+ <when-property-is name="user.agent" value="gecko" />
+ </any>
+ </replace-with>
+
+ <!-- Safari-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplSafari">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <any>
+ <when-property-is name="user.agent" value="safari" />
+ </any>
+ </replace-with>
+
+ <!-- Opera-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplOpera">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <any>
+ <when-property-is name="user.agent" value="opera" />
+ </any>
+ </replace-with>
+</module>
Added: 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-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,451 @@
+/*
+ * Copyright 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.ui.FocusWidget;
+import com.google.gwt.user.client.ui.HasHTML;
+import com.google.gwt.user.client.ui.MouseListener;
+import com.google.gwt.user.client.ui.MouseListenerCollection;
+import com.google.gwt.user.client.ui.SourcesMouseEvents;
+
+/**
+ * A rich text editor that allows complex styling and formatting.
+ *
+ * Because some browsers do not support rich text editing, and others support
+ * only a limited subset of functionality, there are two formatter interfaces,
+ * accessed via {@link #getBasicFormatter()} and {@link #getExtendedFormatter()}
+ * . A browser that does not support rich text editing at all will return
+ * <code>null</code> for both of these, while one that supports only the basic
+ * functionality will return <code>null</code> for the latter.
+ *
+ * <p>
+ * <img class='gallery' src='RichTextArea.png'/>
+ * </p>
+ *
+ * <h3>CSS Style Rules</h3> <ul class="css"> <li>.gwt-RichTextArea { }</li>
+ * </ul>
+ */
+public class RichTextArea extends FocusWidget implements HasHTML, SourcesMouseEvents {
+
+ /**
+ * This interface is used to access basic formatting options, when
+ * available. If the implementation supports basic formatting, then
+ * {@link RichTextArea#getBasicFormatter()} will return an instance of this
+ * class.
+ */
+ public interface BasicFormatter {
+
+ /**
+ * Gets the background color.
+ *
+ * @return the background color
+ */
+ String getBackColor();
+
+ /**
+ * Gets the foreground color.
+ *
+ * @return the foreground color
+ */
+ String getForeColor();
+
+ /**
+ * Is the current region bold?
+ *
+ * @return true if the current region is bold
+ */
+ boolean isBold();
+
+ /**
+ * Is the current region italic?
+ *
+ * @return true if the current region is italic
+ */
+ boolean isItalic();
+
+ /**
+ * Is the current region subscript?
+ *
+ * @return true if the current region is subscript
+ */
+ boolean isSubscript();
+
+ /**
+ * Is the current region superscript?
+ *
+ * @return true if the current region is superscript
+ */
+ boolean isSuperscript();
+
+ /**
+ * Is the current region underlined?
+ *
+ * @return true if the current region is underlined
+ */
+ boolean isUnderlined();
+
+ /**
+ * Selects all the text.
+ */
+ void selectAll();
+
+ /**
+ * Sets the background color.
+ *
+ * @param color
+ * the new background color
+ */
+ void setBackColor(String color);
+
+ /**
+ * Sets the font name.
+ *
+ * @param name
+ * the new font name
+ */
+ void setFontName(String name);
+
+ /**
+ * Sets the font size.
+ *
+ * @param fontSize
+ * the new font size
+ */
+ void setFontSize(FontSize fontSize);
+
+ /**
+ * Sets the foreground color.
+ *
+ * @param color
+ * the new foreground color
+ */
+ void setForeColor(String color);
+
+ /**
+ * Sets the justification.
+ *
+ * @param justification
+ * the new justification
+ */
+ void setJustification(Justification justification);
+
+ /**
+ * Toggles bold.
+ */
+ void toggleBold();
+
+ /**
+ * Toggles italic.
+ */
+ void toggleItalic();
+
+ /**
+ * Toggles subscript.
+ */
+ void toggleSubscript();
+
+ /**
+ * Toggles superscript.
+ */
+ void toggleSuperscript();
+
+ /**
+ * Toggles underline.
+ */
+ void toggleUnderline();
+ }
+
+ /**
+ * This interface is used to access full formatting options, when available.
+ * If the implementation supports full formatting, then
+ * {@link RichTextArea#getExtendedFormatter()} will return an instance of
+ * this class.
+ */
+ public interface ExtendedFormatter extends BasicFormatter {
+
+ /**
+ * Creates a link to the supplied URL.
+ *
+ * @param url
+ * the URL to be linked to
+ */
+ void createLink(String url);
+
+ /**
+ * Inserts a horizontal rule.
+ */
+ void insertHorizontalRule();
+
+ /**
+ * Inserts html
+ */
+ void insertHtml(String html);
+
+ /**
+ * Inserts an image element.
+ *
+ * @param url
+ * the url of the image to be inserted
+ */
+ void insertImage(String url);
+
+ /**
+ * Starts an numbered list. Indentation will create nested items.
+ */
+ void insertOrderedList();
+
+ /**
+ * Starts an bulleted list. Indentation will create nested items.
+ */
+ void insertUnorderedList();
+
+ /**
+ * Is the current region strikethrough?
+ *
+ * @return true if the current region is strikethrough
+ */
+ boolean isStrikethrough();
+
+ /**
+ * Left indent.
+ */
+ void leftIndent();
+
+ /**
+ * Removes all formatting on the selected text.
+ */
+ void removeFormat();
+
+ /**
+ * Removes any link from the selected text.
+ */
+ void removeLink();
+
+ /**
+ * Right indent.
+ */
+ void rightIndent();
+
+ /**
+ * Toggles strikethrough.
+ */
+ void toggleStrikethrough();
+ }
+
+ /**
+ * Font size enumeration. Represents the seven basic HTML font sizes, as
+ * defined in CSS.
+ */
+ public static class FontSize {
+
+ /**
+ * Represents an XX-Small font.
+ */
+ public static final FontSize XX_SMALL = new FontSize(1);
+
+ /**
+ * Represents an X-Small font.
+ */
+ public static final FontSize X_SMALL = new FontSize(2);
+
+ /**
+ * Represents a Small font.
+ */
+ public static final FontSize SMALL = new FontSize(3);
+
+ /**
+ * Represents a Medium font.
+ */
+ public static final FontSize MEDIUM = new FontSize(4);
+
+ /**
+ * Represents a Large font.
+ */
+ public static final FontSize LARGE = new FontSize(5);
+
+ /**
+ * Represents an X-Large font.
+ */
+ public static final FontSize X_LARGE = new FontSize(6);
+
+ /**
+ * Represents an XX-Large font.
+ */
+ public static final FontSize XX_LARGE = new FontSize(7);
+
+ private final int number;
+
+ private FontSize(int number) {
+ this.number = number;
+ }
+
+ /**
+ * Gets the HTML font number associated with this font size.
+ *
+ * @return an integer from 1 to 7 inclusive
+ */
+ public int getNumber() {
+ return number;
+ }
+
+ @Override
+ public String toString() {
+ return Integer.toString(number);
+ }
+ }
+
+ /**
+ * Justification enumeration. The three values are <code>left</code>,
+ * <code>right</code>, <code>center</code>.
+ */
+ public static class Justification {
+
+ /**
+ * Center justification.
+ */
+ public static final Justification CENTER = new Justification("Center");
+
+ /**
+ * Left justification.
+ */
+ public static final Justification LEFT = new Justification("Left");
+
+ /**
+ * Right justification.
+ */
+ public static final Justification RIGHT = new Justification("Right");
+
+ private final String tag;
+
+ private Justification(String tag) {
+ this.tag = tag;
+ }
+
+ @Override
+ public String toString() {
+ return "Justify " + tag;
+ }
+ }
+
+ private final RichTextAreaImpl impl = GWT.create(RichTextAreaImpl.class);
+ private MouseListenerCollection mouseListeners;
+
+ /**
+ * Creates a new, blank {@link RichTextArea} object with no stylesheet.
+ */
+ public RichTextArea() {
+ setElement(impl.getElement());
+ setStyleName("gwt-RichTextArea");
+ }
+
+ public void addMouseListener(MouseListener listener) {
+ if (mouseListeners == null) {
+ mouseListeners = new MouseListenerCollection();
+ }
+ mouseListeners.add(listener);
+ }
+
+ /**
+ * Gets the basic rich text formatting interface.
+ *
+ * @return <code>null</code> if basic formatting is not supported
+ */
+ public BasicFormatter getBasicFormatter() {
+ if ((impl instanceof BasicFormatter) && (impl.isBasicEditingSupported())) {
+ return (BasicFormatter) impl;
+ }
+ return null;
+ }
+
+ /**
+ * Gets the full rich text formatting interface.
+ *
+ * @return <code>null</code> if full formatting is not supported
+ */
+ public ExtendedFormatter getExtendedFormatter() {
+ if ((impl instanceof ExtendedFormatter) && (impl.isExtendedEditingSupported())) {
+ return (ExtendedFormatter) impl;
+ }
+ return null;
+ }
+
+ public String getHTML() {
+ return impl.getHTML();
+ }
+
+ public String getText() {
+ return impl.getText();
+ }
+
+ @Override
+ public void onBrowserEvent(Event event) {
+ switch (DOM.eventGetType(event)) {
+ case Event.ONMOUSEDOWN:
+ case Event.ONMOUSEUP:
+ case Event.ONMOUSEMOVE:
+ case Event.ONMOUSEOVER:
+ case Event.ONMOUSEOUT:
+ if (mouseListeners != null) {
+ mouseListeners.fireMouseEvent(this, event);
+ }
+ break;
+
+ default:
+ // ClickEvents, KeyboardEvents, and FocusEvents
+ super.onBrowserEvent(event);
+ }
+ }
+
+ public void removeMouseListener(MouseListener listener) {
+ if (mouseListeners != null) {
+ mouseListeners.remove(listener);
+ }
+ }
+
+ @Override
+ public void setFocus(boolean focused) {
+ // There are different problems on each browser when you try to focus an
+ // unattached rich text iframe, so just cut it off early.
+ if (isAttached()) {
+ impl.setFocus(focused);
+ }
+ }
+
+ public void setHTML(String html) {
+ impl.setHTML(html);
+ }
+
+ public void setText(String text) {
+ impl.setText(text);
+ }
+
+ @Override
+ protected void onAttach() {
+ super.onAttach();
+ impl.initElement();
+ }
+
+ @Override
+ protected void onDetach() {
+ super.onDetach();
+ impl.uninitElement();
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImpl.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImpl.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImpl.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte.impl;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.Event;
+
+/**
+ * Base class for RichText platform implementations. The default version simply
+ * creates a text area with no rich text support.
+ *
+ * This is not currently used by any user-agent, but will provide a
+ * <textarea> fallback in the event a future browser fails to implement
+ * rich text editing.
+ */
+public class RichTextAreaImpl {
+
+ protected Element elem;
+
+ public RichTextAreaImpl() {
+ elem = createElement();
+ }
+
+ public Element getElement() {
+ return elem;
+ }
+
+ public String getHTML() {
+ return DOM.getElementProperty(elem, "value");
+ }
+
+ public String getText() {
+ return DOM.getElementProperty(elem, "value");
+ }
+
+ public void initElement() {
+ onElementInitialized();
+ }
+
+ public boolean isBasicEditingSupported() {
+ return false;
+ }
+
+ public boolean isExtendedEditingSupported() {
+ return false;
+ }
+
+ public native void setFocus(boolean focused) /*-{
+ if (focused) {
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.focus();
+ } else {
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.blur();
+ }
+ }-*/;
+
+ public void setHTML(String html) {
+ DOM.setElementProperty(elem, "value", html);
+ }
+
+ public void setText(String text) {
+ DOM.setElementProperty(elem, "value", text);
+ }
+
+ public void uninitElement() {
+ }
+
+ protected Element createElement() {
+ return DOM.createTextArea();
+ }
+
+ protected void hookEvents() {
+ DOM.sinkEvents(elem, Event.MOUSEEVENTS | Event.KEYEVENTS | Event.ONCHANGE | Event.ONCLICK | Event.FOCUSEVENTS);
+ }
+
+ protected void onElementInitialized() {
+ hookEvents();
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplIE6.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplIE6.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplIE6.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte.impl;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+
+/**
+ * IE6-specific implementation of rich-text editing.
+ */
+public class RichTextAreaImplIE6 extends RichTextAreaImplStandard {
+
+ @Override
+ public Element createElement() {
+ Element elem = super.createElement();
+ DOM.setElementProperty(elem, "src", "javascript:''");
+ return elem;
+ }
+
+ @Override
+ public native void initElement() /*-{
+ var _this = this;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+
+ setTimeout(function() {
+ if (_this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing == false) {
+ return;
+ }
+
+ // Attempt to set the iframe document's body to 'contentEditable' mode.
+ // There's no way to know when the body will actually be available, so
+ // keep trying every so often until it is.
+ // Note: The body seems to be missing only rarely, so please don't remove
+ // this retry loop just because it's hard to reproduce.
+ var elem = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var doc = elem.contentWindow.document;
+ if (!doc.body) {
+ // Retry in 50 ms. Faster would run the risk of pegging the CPU. Slower
+ // would increase the probability of a user-visible delay.
+ setTimeout(arguments.callee, 50);
+ return;
+ }
+ doc.body.contentEditable = true;
+
+ // Send notification that the iframe has reached design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+ }, 1);
+ }-*/;
+
+ @Override
+ protected native String getTextImpl() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ return elem.contentWindow.document.body.innerText;
+ }-*/;
+
+ @Override
+ protected native void hookEvents() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var body = elem.contentWindow.document.body;
+
+ var handler = function() {
+ if (elem.__listener) {
+ // Weird: this code has the context of the script frame, but we need the
+ // event from the edit iframe's window.
+ var evt = elem.contentWindow.event;
+ elem.__listener.@org.ourproject.kune.platf.client.ui.rte.RichTextArea::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+ }
+ };
+
+ body.onkeydown =
+ body.onkeyup =
+ body.onkeypress =
+ body.onmousedown =
+ body.onmouseup =
+ body.onmousemove =
+ body.onmouseover =
+ body.onmouseout =
+ body.onclick = handler;
+
+ elem.contentWindow.onfocus =
+ elem.contentWindow.onblur = handler;
+ }-*/;
+
+ @Override
+ protected native void setTextImpl(String text) /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ elem.contentWindow.document.body.innerText = text;
+ }-*/;
+
+ @Override
+ protected native void unhookEvents() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var body = elem.contentWindow.document.body;
+
+ if (body) {
+ // The body can be undefined in the relatively obscure case that the RTA
+ // is attached and detached before it has a chance to finish initializing.
+ body.onkeydown =
+ body.onkeyup =
+ body.onkeypress =
+ body.onmousedown =
+ body.onmouseup =
+ body.onmousemove =
+ body.onmouseover =
+ body.onmouseout =
+ body.onclick = null;
+
+ elem.contentWindow.onfocus =
+ elem.contentWindow.onblur = null;
+ }
+ }-*/;
+
+ @Override
+ boolean isRichEditingActive(Element elem) {
+ return true;
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplMozilla.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplMozilla.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplMozilla.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte.impl;
+
+/**
+ * Mozilla-specific implementation of rich-text editing.
+ */
+public class RichTextAreaImplMozilla extends RichTextAreaImplStandard {
+
+ @Override
+ public native void initElement() /*-{
+ // Mozilla doesn't allow designMode to be set reliably until the iframe is
+ // fully loaded.
+ var _this = this;
+ var iframe = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+
+ iframe.onload = function() {
+ // Some Mozillae have the nasty habit of calling onload again when you set
+ // designMode, so let's avoid doing it more than once.
+ iframe.onload = null;
+
+ // Send notification that the iframe has finished loading.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+
+ // Don't set designMode until the RTA actually gets focused. This is
+ // necessary because editing won't work on Mozilla if the iframe is
+ // *hidden, but attached*. Waiting for focus gets around this issue.
+ //
+ // Note: This onfocus will not conflict with the addEventListener('focus',
+ // ...) // in RichTextAreaImplStandard.
+ iframe.contentWindow.onfocus = function() {
+ iframe.contentWindow.onfocus = null;
+ iframe.contentWindow.document.designMode = 'On';
+ };
+ };
+ }-*/;
+
+ @Override
+ public void setBackColor(String color) {
+ // Gecko uses 'BackColor' for the *entire area's* background.
+ // 'HiliteColor'
+ // does what we actually want.
+ execCommand("HiliteColor", color);
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplOpera.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplOpera.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplOpera.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte.impl;
+
+/**
+ * Opera implementation of rich-text editing.
+ */
+public class RichTextAreaImplOpera extends RichTextAreaImplStandard {
+
+ @Override
+ public void setBackColor(String color) {
+ // Opera uses 'BackColor' for the *entire area's* background.
+ // 'HiliteColor'
+ // does what we actually want.
+ execCommand("HiliteColor", color);
+ }
+
+ @Override
+ public native void setFocus(boolean focused) /*-{
+ // Opera needs the *iframe* focused, not its window.
+ if (focused) {
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.focus();
+ } else {
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.blur();
+ }
+ }-*/;
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplSafari.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplSafari.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplSafari.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2007 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte.impl;
+
+import com.google.gwt.user.client.Element;
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize;
+
+/**
+ * Safari rich text platform implementation.
+ */
+public class RichTextAreaImplSafari extends RichTextAreaImplStandard {
+
+ private static final String[] sizeNumberCSSValues = new String[] { "medium", "xx-small", "x-small", "small",
+ "medium", "large", "x-large", "xx-large" };
+
+ private static int webKitVersion = getWebKitVersion();
+
+ /**
+ * WebKit v420 began suppporting full rich text editing.
+ */
+ private static boolean extendedEditingSupported = (webKitVersion >= 420);
+
+ /**
+ * WebKit v420 changed BackColor to HiliteColor.
+ */
+ private static boolean useHiliteColor = (webKitVersion >= 420);
+
+ /**
+ * WebKit version up to *and including* 420 require CSS font-size values
+ * (e.g. 'medium', 'x-large') rather than size numbers. All subsequent
+ * versions use size numbers like other browsers.
+ */
+ private static boolean oldSchoolSizeValues = (webKitVersion <= 420);
+
+ private static native int getWebKitVersion() /*-{
+ var exp = / AppleWebKit\/([\d]+)/;
+ var result = exp.exec(navigator.userAgent);
+ if (result) {
+ var version = parseInt(result[1]);
+ if (version) {
+ return version;
+ }
+ }
+
+ // Intentionally conservative fallback.
+ return 0;
+ }-*/;;
+
+ @Override
+ public Element createElement() {
+ return super.createElement();
+ }
+
+ @Override
+ public native boolean isBold() /*-{
+ return !!this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.__gwt_isBold;
+ }-*/;
+
+ @Override
+ public boolean isExtendedEditingSupported() {
+ return extendedEditingSupported;
+ }
+
+ @Override
+ public native boolean isItalic() /*-{
+ return !!this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.__gwt_isItalic;
+ }-*/;
+
+ @Override
+ public native boolean isUnderlined() /*-{
+ return !!this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.__gwt_isUnderlined;
+ }-*/;
+
+ @Override
+ public void setBackColor(String color) {
+ if (useHiliteColor) {
+ execCommand("HiliteColor", color);
+ } else {
+ super.setBackColor(color);
+ }
+ }
+
+ @Override
+ public native void setFocus(boolean focused) /*-{
+ // Safari needs the *iframe* focused, not its window.
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ if (focused) {
+ elem.focus();
+ if (elem.__gwt_restoreSelection) {
+ elem.__gwt_restoreSelection();
+ }
+ } else {
+ elem.blur();
+ }
+ }-*/;
+
+ @Override
+ public void setFontSize(FontSize fontSize) {
+ if (oldSchoolSizeValues) {
+ // Safari2 only accepts css-style 'small, medium, large, etc'
+ // values.
+ // Setting these doesn't seem to hurt Safari3.
+ int number = fontSize.getNumber();
+ if ((number >= 0) && (number <= 7)) {
+ execCommand("FontSize", sizeNumberCSSValues[number]);
+ }
+ } else {
+ super.setFontSize(fontSize);
+ }
+ }
+
+ @Override
+ protected native String getTextImpl() /*-{
+ return this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.body.innerText;
+ }-*/;
+
+ @Override
+ protected native void hookEvents() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var wnd = elem.contentWindow;
+ var doc = wnd.document;
+
+ // Create an expando on the element to hold the selection state.
+ elem.__gwt_selection = { baseOffset:0, extentOffset:0, baseNode:null,
+ extentNode:null };
+
+ // A function for restoring the selection state.
+ elem.__gwt_restoreSelection = function() {
+ var sel = elem.__gwt_selection;
+
+ // wnd.getSelection is not defined if the iframe isn't attached.
+ if (wnd.getSelection) {
+ wnd.getSelection().setBaseAndExtent(sel.baseNode, sel.baseOffset,
+ sel.extentNode, sel.extentOffset);
+ }
+ };
+
+ // Generic event dispatcher. Also stores selection state.
+ elem.__gwt_handler = function(evt) {
+ // Store the editor's selection state.
+ var s = wnd.getSelection();
+ elem.__gwt_selection = {
+ baseOffset:s.baseOffset,
+ extentOffset:s.extentOffset,
+
+ baseNode:s.baseNode,
+ extentNode:s.extentNode
+ };
+
+ // Hang on to bold/italic/underlined states.
+ elem.__gwt_isBold = doc.queryCommandState('Bold');
+ elem.__gwt_isItalic = doc.queryCommandState('Italic');
+ elem.__gwt_isUnderlined = doc.queryCommandState('Underline');
+
+ // Dispatch the event.
+ if (elem.__listener) {
+ elem.__listener.@org.ourproject.kune.platf.client.ui.rte.RichTextArea::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+ }
+ };
+
+ wnd.addEventListener('keydown', elem.__gwt_handler, true);
+ wnd.addEventListener('keyup', elem.__gwt_handler, true);
+ wnd.addEventListener('keypress', elem.__gwt_handler, true);
+ wnd.addEventListener('mousedown', elem.__gwt_handler, true);
+ wnd.addEventListener('mouseup', elem.__gwt_handler, true);
+ wnd.addEventListener('mousemove', elem.__gwt_handler, true);
+ wnd.addEventListener('mouseover', elem.__gwt_handler, true);
+ wnd.addEventListener('mouseout', elem.__gwt_handler, true);
+ wnd.addEventListener('click', elem.__gwt_handler, true);
+
+ // Focus/blur event handlers. For some reason, [add|remove]eventListener()
+ // doesn't work on the iframe element (at least not for focus/blur). Don't
+ // dispatch through the normal handler method, as some of the querying we do
+ // there interferes with focus.
+ elem.onfocus = function(evt) {
+ if (elem.__listener) {
+ elem.__listener.@org.ourproject.kune.platf.client.ui.rte.RichTextArea::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+ }
+ };
+
+ elem.onblur = function(evt) {
+ if (elem.__listener) {
+ elem.__listener.@org.ourproject.kune.platf.client.ui.rte.RichTextArea::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+ }
+ };
+ }-*/;
+
+ @Override
+ protected native void setTextImpl(String text) /*-{
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.body.innerText = text;
+ }-*/;
+
+ @Override
+ protected native void unhookEvents() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var wnd = elem.contentWindow;
+
+ wnd.removeEventListener('keydown', elem.__gwt_handler, true);
+ wnd.removeEventListener('keyup', elem.__gwt_handler, true);
+ wnd.removeEventListener('keypress', elem.__gwt_handler, true);
+ wnd.removeEventListener('mousedown', elem.__gwt_handler, true);
+ wnd.removeEventListener('mouseup', elem.__gwt_handler, true);
+ wnd.removeEventListener('mousemove', elem.__gwt_handler, true);
+ wnd.removeEventListener('mouseover', elem.__gwt_handler, true);
+ wnd.removeEventListener('mouseout', elem.__gwt_handler, true);
+ wnd.removeEventListener('click', elem.__gwt_handler, true);
+
+ elem.__gwt_restoreSelection = null;
+ elem.__gwt_handler = null;
+
+ elem.onfocus = null;
+ elem.onblur = null;
+ }-*/;
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplStandard.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplStandard.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/impl/RichTextAreaImplStandard.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -0,0 +1,406 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.ourproject.kune.platf.client.ui.rte.impl;
+
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize;
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea.Justification;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+
+/**
+ * Basic rich text platform implementation.
+ */
+public abstract class RichTextAreaImplStandard extends RichTextAreaImpl implements RichTextArea.BasicFormatter,
+ RichTextArea.ExtendedFormatter {
+
+ /**
+ * Holds a cached copy of any user setHTML/setText actions until the real
+ * text area is fully initialized. Becomes <code>null</code> after init.
+ */
+ private Element beforeInitPlaceholder = DOM.createDiv();
+
+ /**
+ * Set to true when the {@link RichTextArea} is attached to the page and
+ * {@link #initElement()} is called. If the {@link RichTextArea} is detached
+ * before {@link #onElementInitialized()} is called, this will be set to
+ * false. See issue 1897 for details.
+ */
+ protected boolean initializing;
+
+ @Override
+ public native Element createElement() /*-{
+ return $doc.createElement('iframe');
+ }-*/;
+
+ public void createLink(String url) {
+ execCommand("CreateLink", url);
+ }
+
+ public String getBackColor() {
+ return queryCommandValue("BackColor");
+ }
+
+ public String getForeColor() {
+ return queryCommandValue("ForeColor");
+ }
+
+ @Override
+ public final String getHTML() {
+ return beforeInitPlaceholder == null ? getHTMLImpl() : DOM.getInnerHTML(beforeInitPlaceholder);
+ }
+
+ @Override
+ public final String getText() {
+ return beforeInitPlaceholder == null ? getTextImpl() : DOM.getInnerText(beforeInitPlaceholder);
+ }
+
+ @Override
+ public native void initElement() /*-{
+ // Most browsers don't like setting designMode until slightly _after_
+ // the iframe becomes attached to the DOM. Any non-zero timeout will do
+ // just fine.
+ var _this = this;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+ setTimeout(function() {
+ // Turn on design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
+
+ // Send notification that the iframe has reached design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+ }, 1);
+ }-*/;
+
+ public void insertHorizontalRule() {
+ execCommand("InsertHorizontalRule", null);
+ }
+
+ public void insertHtml(String html) {
+ execCommand("InsertHtml", html);
+ }
+
+ public void insertImage(String url) {
+ execCommand("InsertImage", url);
+ }
+
+ public void insertOrderedList() {
+ execCommand("InsertOrderedList", null);
+ }
+
+ public void insertUnorderedList() {
+ execCommand("InsertUnorderedList", null);
+ }
+
+ @Override
+ public boolean isBasicEditingSupported() {
+ return true;
+ }
+
+ public boolean isBold() {
+ return queryCommandState("Bold");
+ }
+
+ @Override
+ public boolean isExtendedEditingSupported() {
+ return true;
+ }
+
+ public boolean isItalic() {
+ return queryCommandState("Italic");
+ }
+
+ public boolean isStrikethrough() {
+ return queryCommandState("Strikethrough");
+ }
+
+ public boolean isSubscript() {
+ return queryCommandState("Subscript");
+ }
+
+ public boolean isSuperscript() {
+ return queryCommandState("Superscript");
+ }
+
+ public boolean isUnderlined() {
+ return queryCommandState("Underline");
+ }
+
+ public void leftIndent() {
+ execCommand("Outdent", null);
+ }
+
+ public void removeFormat() {
+ execCommand("RemoveFormat", null);
+ }
+
+ public void removeLink() {
+ execCommand("Unlink", "false");
+ }
+
+ public void rightIndent() {
+ execCommand("Indent", null);
+ }
+
+ public void selectAll() {
+ execCommand("SelectAll", null);
+ }
+
+ public void setBackColor(String color) {
+ execCommand("BackColor", color);
+ }
+
+ @Override
+ public native void setFocus(boolean focused) /*-{
+ if (focused) {
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.focus();
+ } else {
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.blur();
+ }
+ }-*/;
+
+ public void setFontName(String name) {
+ execCommand("FontName", name);
+ }
+
+ public void setFontSize(FontSize fontSize) {
+ execCommand("FontSize", Integer.toString(fontSize.getNumber()));
+ }
+
+ public void setForeColor(String color) {
+ execCommand("ForeColor", color);
+ }
+
+ @Override
+ public final void setHTML(String html) {
+ if (beforeInitPlaceholder == null) {
+ setHTMLImpl(html);
+ } else {
+ DOM.setInnerHTML(beforeInitPlaceholder, html);
+ }
+ }
+
+ public void setJustification(Justification justification) {
+ if (justification == Justification.CENTER) {
+ execCommand("JustifyCenter", null);
+ } else if (justification == Justification.LEFT) {
+ execCommand("JustifyLeft", null);
+ } else if (justification == Justification.RIGHT) {
+ execCommand("JustifyRight", null);
+ }
+ }
+
+ @Override
+ public final void setText(String text) {
+ if (beforeInitPlaceholder == null) {
+ setTextImpl(text);
+ } else {
+ DOM.setInnerText(beforeInitPlaceholder, text);
+ }
+ }
+
+ public void toggleBold() {
+ execCommand("Bold", "false");
+ }
+
+ public void toggleItalic() {
+ execCommand("Italic", "false");
+ }
+
+ public void toggleStrikethrough() {
+ execCommand("Strikethrough", "false");
+ }
+
+ public void toggleSubscript() {
+ execCommand("Subscript", "false");
+ }
+
+ public void toggleSuperscript() {
+ execCommand("Superscript", "false");
+ }
+
+ public void toggleUnderline() {
+ execCommand("Underline", "False");
+ }
+
+ @Override
+ public void uninitElement() {
+ // Issue 1897: initElement uses a timeout, so its possible to call this
+ // method after calling initElement, but before the event system is in
+ // place.
+ if (initializing) {
+ initializing = false;
+ return;
+ }
+
+ // Unhook all custom event handlers when the element is detached.
+ unhookEvents();
+
+ // Recreate the placeholder element and store the iframe's contents in
+ // it.
+ // This is necessary because some browsers will wipe the iframe's
+ // contents
+ // when it is removed from the DOM.
+ String html = getHTML();
+ beforeInitPlaceholder = DOM.createDiv();
+ DOM.setInnerHTML(beforeInitPlaceholder, html);
+ }
+
+ protected native String getHTMLImpl() /*-{
+ return this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.body.innerHTML;
+ }-*/;
+
+ protected native String getTextImpl() /*-{
+ return this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.body.textContent;
+ }-*/;
+
+ @Override
+ protected native void hookEvents() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var wnd = elem.contentWindow;
+
+ elem.__gwt_handler = function(evt) {
+ if (elem.__listener) {
+ elem.__listener.@org.ourproject.kune.platf.client.ui.rte.RichTextArea::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+ }
+ };
+
+ elem.__gwt_focusHandler = function(evt) {
+ if (elem.__gwt_isFocused) {
+ return;
+ }
+
+ elem.__gwt_isFocused = true;
+ elem.__gwt_handler(evt);
+ };
+
+ elem.__gwt_blurHandler = function(evt) {
+ if (!elem.__gwt_isFocused) {
+ return;
+ }
+
+ elem.__gwt_isFocused = false;
+ elem.__gwt_handler(evt);
+ };
+
+ wnd.addEventListener('keydown', elem.__gwt_handler, true);
+ wnd.addEventListener('keyup', elem.__gwt_handler, true);
+ wnd.addEventListener('keypress', elem.__gwt_handler, true);
+ wnd.addEventListener('mousedown', elem.__gwt_handler, true);
+ wnd.addEventListener('mouseup', elem.__gwt_handler, true);
+ wnd.addEventListener('mousemove', elem.__gwt_handler, true);
+ wnd.addEventListener('mouseover', elem.__gwt_handler, true);
+ wnd.addEventListener('mouseout', elem.__gwt_handler, true);
+ wnd.addEventListener('click', elem.__gwt_handler, true);
+
+ wnd.addEventListener('focus', elem.__gwt_focusHandler, true);
+ wnd.addEventListener('blur', elem.__gwt_blurHandler, true);
+ }-*/;
+
+ @Override
+ protected void onElementInitialized() {
+ // Issue 1897: This method is called after a timeout, during which time
+ // the
+ // element might by detached.
+ if (!initializing) {
+ return;
+ }
+ initializing = false;
+
+ super.onElementInitialized();
+
+ // When the iframe is ready, ensure cached content is set.
+ if (beforeInitPlaceholder != null) {
+ setHTMLImpl(DOM.getInnerHTML(beforeInitPlaceholder));
+ beforeInitPlaceholder = null;
+ }
+ }
+
+ protected native void setHTMLImpl(String html) /*-{
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.body.innerHTML = html;
+ }-*/;
+
+ protected native void setTextImpl(String text) /*-{
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.body.textContent = text;
+ }-*/;
+
+ protected native void unhookEvents() /*-{
+ var elem = this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var wnd = elem.contentWindow;
+
+ wnd.removeEventListener('keydown', elem.__gwt_handler, true);
+ wnd.removeEventListener('keyup', elem.__gwt_handler, true);
+ wnd.removeEventListener('keypress', elem.__gwt_handler, true);
+ wnd.removeEventListener('mousedown', elem.__gwt_handler, true);
+ wnd.removeEventListener('mouseup', elem.__gwt_handler, true);
+ wnd.removeEventListener('mousemove', elem.__gwt_handler, true);
+ wnd.removeEventListener('mouseover', elem.__gwt_handler, true);
+ wnd.removeEventListener('mouseout', elem.__gwt_handler, true);
+ wnd.removeEventListener('click', elem.__gwt_handler, true);
+
+ wnd.removeEventListener('focus', elem.__gwt_focusHandler, true);
+ wnd.removeEventListener('blur', elem.__gwt_blurHandler, true);
+
+ elem.__gwt_handler = null;
+ elem.__gwt_focusHandler = null;
+ elem.__gwt_blurHandler = null;
+ }-*/;
+
+ void execCommand(String cmd, String param) {
+ if (isRichEditingActive(elem)) {
+ // When executing a command, focus the iframe first, since some
+ // commands
+ // don't take properly when it's not focused.
+ setFocus(true);
+ execCommandAssumingFocus(cmd, param);
+ }
+ }
+
+ native void execCommandAssumingFocus(String cmd, String param) /*-{
+ this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.execCommand(cmd, false, param);
+ }-*/;
+
+ native boolean isRichEditingActive(Element e) /*-{
+ return ((e.contentWindow.document.designMode).toUpperCase()) == 'ON';
+ }-*/;
+
+ boolean queryCommandState(String cmd) {
+ if (isRichEditingActive(elem)) {
+ // When executing a command, focus the iframe first, since some
+ // commands
+ // don't take properly when it's not focused.
+ setFocus(true);
+ return queryCommandStateAssumingFocus(cmd);
+ } else {
+ return false;
+ }
+ }
+
+ native boolean queryCommandStateAssumingFocus(String cmd) /*-{
+ return !!this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.queryCommandState(cmd);
+ }-*/;
+
+ String queryCommandValue(String cmd) {
+ // When executing a command, focus the iframe first, since some commands
+ // don't take properly when it's not focused.
+ setFocus(true);
+ return queryCommandValueAssumingFocus(cmd);
+ }
+
+ native String queryCommandValueAssumingFocus(String cmd) /*-{
+ return this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.queryCommandValue(cmd);
+ }-*/;
+}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml 2009-01-27 01:24:24 UTC (rev 1040)
@@ -1,48 +1,48 @@
<!DOCTYPE document SYSTEM "src/main/java/gwt-module.dtd">
<module>
- <inherits name='org.ourproject.kune.platf.Kune-Platform' />
- <inherits name="com.google.gwt.core.Core" />
- <inherits name="com.google.gwt.user.UserAgent" />
- <!-- RTE css inject -->
- <!-- See gwt-user: com/google/gwt/user/RichText.gwt.xml -->
+ <inherits name='org.ourproject.kune.platf.Kune-Platform' />
+ <inherits name="com.google.gwt.core.Core" />
+ <inherits name="com.google.gwt.user.UserAgent" />
+ <!-- RTE css inject -->
+ <!-- See gwt-user: com/google/gwt/user/RichText.gwt.xml -->
- <!-- IE-specific implementation -->
- <replace-with
- class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplIE6">
- <when-type-is
- class="com.google.gwt.user.client.ui.impl.RichTextAreaImpl" />
- <when-property-is name="user.agent" value="ie6" />
- </replace-with>
+ <!-- IE-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplIE6">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <when-property-is name="user.agent" value="ie6" />
+ </replace-with>
- <!-- Mozilla-specific implementation -->
- <replace-with
- class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplMozilla">
- <when-type-is
- class="com.google.gwt.user.client.ui.impl.RichTextAreaImpl" />
- <any>
- <when-property-is name="user.agent" value="gecko1_8" />
- <when-property-is name="user.agent" value="gecko" />
- </any>
- </replace-with>
+ <!-- Mozilla-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplMozilla">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <any>
+ <when-property-is name="user.agent" value="gecko1_8" />
+ <when-property-is name="user.agent" value="gecko" />
+ </any>
+ </replace-with>
- <!-- Safari-specific implementation -->
- <replace-with
- class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplSafari">
- <when-type-is
- class="com.google.gwt.user.client.ui.impl.RichTextAreaImpl" />
- <any>
- <when-property-is name="user.agent" value="safari" />
- </any>
- </replace-with>
+ <!-- Safari-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplSafari">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <any>
+ <when-property-is name="user.agent" value="safari" />
+ </any>
+ </replace-with>
- <!-- Opera-specific implementation -->
- <replace-with
- class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplOpera">
- <when-type-is
- class="com.google.gwt.user.client.ui.impl.RichTextAreaImpl" />
- <any>
- <when-property-is name="user.agent" value="opera" />
- </any>
- </replace-with>
+ <!-- Opera-specific implementation -->
+ <replace-with
+ class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplOpera">
+ <when-type-is
+ class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+ <any>
+ <when-property-is name="user.agent" value="opera" />
+ </any>
+ </replace-with>
</module>
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -21,13 +21,13 @@
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElement;
import org.ourproject.kune.workspace.client.skel.Toolbar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.MessageBox;
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -22,6 +22,7 @@
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.platf.client.ui.KuneUiUtils;
import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElement;
import com.calclab.suco.client.events.Listener;
@@ -36,7 +37,6 @@
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.PushButton;
-import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
@@ -62,7 +62,7 @@
public EventListener(TextEditorInsertElement insertElement) {
this.insertElement = insertElement;
- insertElement.onInsert(new Listener2<String, String>() {
+ insertElement.addOnCreateLink(new Listener2<String, String>() {
public void onEvent(String name, String url) {
extended.createLink(url);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -19,7 +19,7 @@
*/
package org.ourproject.kune.workspace.client.editor;
-import com.google.gwt.user.client.ui.impl.RichTextAreaImplIE6;
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplIE6;
/**
* A wrapper used to inject css into RTA. As published in:
@@ -35,33 +35,33 @@
@Override
public native void initElement() /*-{
- var _this = this;
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::initializing = true;
+ var _this = this;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
- setTimeout(function() {
- if (_this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::initializing == false) {
- return;
- }
+ setTimeout(function() {
+ if (_this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing == false) {
+ return;
+ }
- // Attempt to set the iframe document's body to 'contentEditable' mode.
- // There's no way to know when the body will actually be available, so
- // keep trying every so often until it is.
- // Note: The body seems to be missing only rarely, so please don't remove
- // this retry loop just because it's hard to reproduce.
- var elem = [email protected]::elem;
- var doc = elem.contentWindow.document;
- if (!doc.body) {
- // Retry in 50 ms. Faster would run the risk of pegging the CPU. Slower
- // would increase the probability of a user-visible delay.
- setTimeout(arguments.callee, 50);
- return;
- }
- var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
- doc.write( ct );
- doc.body.contentEditable = true;
+ // Attempt to set the iframe document's body to 'contentEditable' mode.
+ // There's no way to know when the body will actually be available, so
+ // keep trying every so often until it is.
+ // Note: The body seems to be missing only rarely, so please don't remove
+ // this retry loop just because it's hard to reproduce.
+ var elem = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var doc = elem.contentWindow.document;
+ if (!doc.body) {
+ // Retry in 50 ms. Faster would run the risk of pegging the CPU. Slower
+ // would increase the probability of a user-visible delay.
+ setTimeout(arguments.callee, 50);
+ return;
+ }
+ var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
+ doc.write( ct );
+ doc.body.contentEditable = true;
- // Send notification that the iframe has reached design mode.
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::onElementInitialized()();
- }, 1);
- }-*/;
+ // Send notification that the iframe has reached design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+ }, 1);
+ }-*/;
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -19,7 +19,7 @@
*/
package org.ourproject.kune.workspace.client.editor;
-import com.google.gwt.user.client.ui.impl.RichTextAreaImplMozilla;
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplMozilla;
/**
* A wrapper used to inject css into RTA. As published in:
@@ -35,48 +35,48 @@
@Override
public native void initElement() /*-{
- // Mozilla doesn't allow designMode to be set reliably until the iframe is
- // fully loaded.
- var _this = this;
- var iframe = [email protected]::elem;
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::initializing = true;
+ // Mozilla doesn't allow designMode to be set reliably until the iframe is
+ // fully loaded.
+ var _this = this;
+ var iframe = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
- iframe.onload = function() {
- // Some Mozillae have the nasty habit of calling onload again when you set
- // designMode, so let's avoid doing it more than once.
- iframe.onload = null;
+ iframe.onload = function() {
+ // Some Mozillae have the nasty habit of calling onload again when you set
+ // designMode, so let's avoid doing it more than once.
+ iframe.onload = null;
- // patch ccs inject:
+ // patch ccs inject:
- var doc = [email protected]::elem.contentWindow.document;
- head=doc.getElementsByTagName('head')[0];
- link=document.createElement('link');
- link.setAttribute('rel',"stylesheet");
- link.setAttribute('type',"text/css");
- link.setAttribute('href',"css/richtext.css" );
- head.appendChild(link);
+ var doc = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document;
+ head=doc.getElementsByTagName('head')[0];
+ link=document.createElement('link');
+ link.setAttribute('rel',"stylesheet");
+ link.setAttribute('type',"text/css");
+ link.setAttribute('href',"css/richtext.css" );
+ head.appendChild(link);
- var styles = document.createElement('style');
- styles.setAttribute('type', 'text/css');
- var newStyle = document.createTextNode('\n<!--\nbody{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:\'\';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}body{font:13px/1.22 arial,helvetica,clean,sans-serif;font-size:small;font:x-small;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;font-size:108%;line-height:99%;}h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:700;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:700;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;width:11.9em;}body{font-family:arial, sans;margin:5px}\n-->\n');
- styles.appendChild(newStyle);
- head.appendChild(styles);
+ var styles = document.createElement('style');
+ styles.setAttribute('type', 'text/css');
+ var newStyle = document.createTextNode('\n<!--\nbody{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:\'\';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}body{font:13px/1.22 arial,helvetica,clean,sans-serif;font-size:small;font:x-small;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;font-size:108%;line-height:99%;}h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:700;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:700;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;width:11.9em;}body{font-family:arial, sans;margin:5px}\n-->\n');
+ styles.appendChild(newStyle);
+ head.appendChild(styles);
- // -- patch
+ // -- patch
- // Send notification that the iframe has finished loading.
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::onElementInitialized()();
+ // Send notification that the iframe has finished loading.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
- // Don't set designMode until the RTA actually gets focused. This is
- // necessary because editing won't work on Mozilla if the iframe is
- // *hidden, but attached*. Waiting for focus gets around this issue.
- //
- // Note: This onfocus will not conflict with the addEventListener('focus',
- // ...) // in RichTextAreaImplStandard.
- iframe.contentWindow.onfocus = function() {
- iframe.contentWindow.onfocus = null;
- iframe.contentWindow.document.designMode = 'On';
- };
- };
- }-*/;
+ // Don't set designMode until the RTA actually gets focused. This is
+ // necessary because editing won't work on Mozilla if the iframe is
+ // *hidden, but attached*. Waiting for focus gets around this issue.
+ //
+ // Note: This onfocus will not conflict with the addEventListener('focus',
+ // ...) // in RichTextAreaImplStandard.
+ iframe.contentWindow.onfocus = function() {
+ iframe.contentWindow.onfocus = null;
+ iframe.contentWindow.document.designMode = 'On';
+ };
+ };
+ }-*/;
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -18,30 +18,30 @@
*
*/package org.ourproject.kune.workspace.client.editor;
-import com.google.gwt.user.client.ui.impl.RichTextAreaImplOpera;
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplOpera;
public class WrappedRichTextAreaImplOpera extends RichTextAreaImplOpera {
@Override
public native void initElement() /*-{
- // Most browsers don't like setting designMode until slightly _after_
- // the iframe becomes attached to the DOM. Any non-zero timeout will do
- // just fine.
- var _this = this;
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::initializing = true;
- setTimeout(function() {
- // Turn on design mode.
- [email protected]::elem.contentWindow.document.designMode = 'On';
- // patch css inject:
- var elem = [email protected]::elem;
- var doc = elem.contentWindow.document;
- var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
- doc.write( ct );
- // -- patch
+ // Most browsers don't like setting designMode until slightly _after_
+ // the iframe becomes attached to the DOM. Any non-zero timeout will do
+ // just fine.
+ var _this = this;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+ setTimeout(function() {
+ // Turn on design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
+ // patch css inject:
+ var elem = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var doc = elem.contentWindow.document;
+ var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
+ doc.write( ct );
+ // -- patch
- // Send notification that the iframe has reached design mode.
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::onElementInitialized()();
- }, 1);
- }-*/;
+ // Send notification that the iframe has reached design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+ }, 1);
+ }-*/;
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -18,31 +18,31 @@
*
*/package org.ourproject.kune.workspace.client.editor;
-import com.google.gwt.user.client.ui.impl.RichTextAreaImplSafari;
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplSafari;
public class WrappedRichTextAreaImplSafari extends RichTextAreaImplSafari {
@Override
public native void initElement() /*-{
- // Most browsers don't like setting designMode until slightly _after_
- // the iframe becomes attached to the DOM. Any non-zero timeout will do
- // just fine.
- var _this = this;
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::initializing = true;
- setTimeout(function() {
- // Turn on design mode.
- [email protected]::elem.contentWindow.document.designMode = 'On';
-
- // patch css inject:
- var elem = [email protected]::elem;
- var doc = elem.contentWindow.document;
- var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
- doc.write( ct );
- // -- patch
+ // Most browsers don't like setting designMode until slightly _after_
+ // the iframe becomes attached to the DOM. Any non-zero timeout will do
+ // just fine.
+ var _this = this;
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+ setTimeout(function() {
+ // Turn on design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
- // Send notification that the iframe has reached design mode.
- _this.@com.google.gwt.user.client.ui.impl.RichTextAreaImplStandard::onElementInitialized()();
- }, 1);
- }-*/;
+ // patch css inject:
+ var elem = _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+ var doc = elem.contentWindow.document;
+ var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
+ doc.write( ct );
+ // -- patch
+ // Send notification that the iframe has reached design mode.
+ _this.@org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+ }, 1);
+ }-*/;
+
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElement.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElement.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElement.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -6,8 +6,8 @@
public interface TextEditorInsertElement extends AbstractOptions {
- void fireOnInsert(String name, String link);
+ void addOnCreateLink(Listener2<String, String> slot);
- void onInsert(Listener2<String, String> slot);
+ void fireOnCreateLink(String name, String link);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPresenter.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPresenter.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -7,22 +7,27 @@
public class TextEditorInsertElementPresenter extends AbstractOptionsPresenter implements TextEditorInsertElement {
- private final Event2<String, String> onInsert;
+ private final Event2<String, String> onCreateLink;
public TextEditorInsertElementPresenter() {
- this.onInsert = new Event2<String, String>("onInsert");
+ this.onCreateLink = new Event2<String, String>("onCreateLink");
}
- public void fireOnInsert(String name, String link) {
- onInsert.fire(name, link);
+ public void addOnCreateLink(final Listener2<String, String> slot) {
+ onCreateLink.add(slot);
+ }
+
+ public void fireOnCreateLink(String name, String link) {
+ onCreateLink.fire(name, link);
super.hide();
}
+ public void fireOnInsertHtml(String name, String link) {
+ onCreateLink.fire(name, link);
+ super.hide();
+ }
+
public void init(TextEditorInsertElementView view) {
super.init(view);
}
-
- public void onInsert(final Listener2<String, String> slot) {
- onInsert.add(slot);
- }
}
\ No newline at end of file
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java 2009-01-27 01:24:24 UTC (rev 1040)
@@ -22,7 +22,7 @@
}
public void onInsert(String name, String link) {
- editorInsertElement.fireOnInsert(name, link);
+ editorInsertElement.fireOnCreateLink(name, link);
reset();
}
Modified: trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html
===================================================================
--- trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html 2009-01-26 23:25:53 UTC (rev 1039)
+++ trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html 2009-01-27 01:24:24 UTC (rev 1040)
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>{{ content.group_short_name }}: {{ content.title }}</title>
- <link rel="shortcut icon" href="/kune/servlets/EntityLogoDownloadManager?token={{ content.statetoken }} />
+ <link rel="shortcut icon" href="/kune/servlets/EntityLogoDownloadManager?token={{ content.statetoken }}" />
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset/reset-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/base/base-min.css">
1
0
Author: vjrj
Date: 2009-01-27 00:25:53 +0100 (Tue, 27 Jan 2009)
New Revision: 1039
Removed:
trunk/org.ourproject-kune-0.0.5-0.deb
Modified:
trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java
trunk/src/main/rails/publicspace/app/models/content.rb
trunk/src/main/rails/publicspace/public/templates/basic/basic.css
trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html
Log:
Some changes in public space. Other minor changes
Deleted: trunk/org.ourproject-kune-0.0.5-0.deb
===================================================================
(Binary files differ)
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java 2009-01-26 20:38:12 UTC (rev 1038)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java 2009-01-26 23:25:53 UTC (rev 1039)
@@ -20,41 +20,37 @@
import javax.persistence.Embeddable;
-import org.hibernate.search.annotations.Field;
-
@Embeddable
public class BasicMimeType {
- @Field(name = "mimetype")
- private String type;
- @Field(name = "mimesubtype")
- private String subtype;
+ private String mimetype;
+ private String mimesubtype;
public BasicMimeType() {
- this(null, null);
+ this(null, null);
}
public BasicMimeType(final String mimetype) {
- if (mimetype != null) {
- final String[] split = mimetype.split("/", 2);
- type = split[0];
- if (split.length > 1 && split[1].length() > 0) {
- subtype = split[1];
- }
- }
+ if (mimetype != null) {
+ final String[] split = mimetype.split("/", 2);
+ this.mimetype = split[0];
+ if (split.length > 1 && split[1].length() > 0) {
+ this.mimesubtype = split[1];
+ }
+ }
}
public BasicMimeType(final String type, final String subtype) {
- this.type = type;
- this.subtype = subtype;
+ this.mimetype = type;
+ this.mimesubtype = subtype;
}
public String getSubtype() {
- return subtype;
+ return mimesubtype;
}
public String getType() {
- return type;
+ return mimetype;
}
/**
@@ -63,7 +59,7 @@
* @return
*/
public boolean isImage() {
- return type != null && type.equals("image");
+ return mimetype != null && mimetype.equals("image");
}
/**
@@ -72,7 +68,7 @@
* @return
*/
public boolean isPdf() {
- return type != null && subtype != null && type.equals("application") && subtype.equals("pdf");
+ return mimetype != null && mimesubtype != null && mimetype.equals("application") && mimesubtype.equals("pdf");
}
/**
@@ -81,20 +77,20 @@
* @return
*/
public boolean isText() {
- return type != null && subtype != null && type.equals("text") && subtype.equals("plain");
+ return mimetype != null && mimesubtype != null && mimetype.equals("text") && mimesubtype.equals("plain");
}
public void setSubtype(final String subtype) {
- this.subtype = subtype;
+ this.mimesubtype = subtype;
}
public void setType(final String type) {
- this.type = type;
+ this.mimetype = type;
}
@Override
public String toString() {
- return subtype == null ? type : type + "/" + subtype;
+ return mimesubtype == null ? mimetype : mimetype + "/" + mimesubtype;
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java 2009-01-26 20:38:12 UTC (rev 1038)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java 2009-01-26 23:25:53 UTC (rev 1039)
@@ -249,8 +249,8 @@
if (basic != null) {
subscript = createToggleButton(images.subscript(), i18n.t("Toggle Subscript"));
superscript = createToggleButton(images.superscript(), i18n.t("Toggle Superscript"));
- // topPanel.add(subscript);
- // topPanel.add(superscript);
+ topPanel.add(subscript);
+ topPanel.add(superscript);
topPanel.add(justifyLeft = createPushButton(images.alignleft(), i18n.t("Left Justify")));
topPanel.add(justifyCenter = createPushButton(images.centerpara(), i18n.t("Center")));
topPanel.add(justifyRight = createPushButton(images.alignright(), i18n.t("Right Justify")));
@@ -260,14 +260,14 @@
topPanel.add(indent = createPushButton(images.incrementindent(), i18n.t("Indent Right")));
topPanel.add(outdent = createPushButton(images.decrementindent(), i18n.t("Indent Left")));
hr = createPushButton(images.hfixedline(), i18n.t("Insert Horizontal Rule"));
- // topPanel.add(hr);
+ topPanel.add(hr);
topPanel.add(ol = createPushButton(images.defaultnumbering(), i18n.t("Insert Ordered List")));
topPanel.add(ul = createPushButton(images.defaultbullet(), i18n.t("Insert Unordered List")));
topPanel.add(insertImage = createPushButton(images.images(), i18n.t("Insert Image")));
topPanel.add(createLink = createPushButton(images.link(), i18n.t("Create Link")));
topPanel.add(removeLink = createPushButton(images.linkBreak(), i18n.t("Remove Link")));
removeFormat = createPushButton(images.removeFormat(), i18n.t("Remove Formatting"));
- // topPanel.add(removeFormat);
+ topPanel.add(removeFormat);
}
if (basic != null) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java 2009-01-26 20:38:12 UTC (rev 1038)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java 2009-01-26 23:25:53 UTC (rev 1039)
@@ -90,6 +90,6 @@
}
private void gotoPublic() {
- Window.open(publicUrl, "_blank", "");
+ Window.open(publicUrl, "_kunepublic", "");
}
}
Modified: trunk/src/main/rails/publicspace/app/models/content.rb
===================================================================
--- trunk/src/main/rails/publicspace/app/models/content.rb 2009-01-26 20:38:12 UTC (rev 1038)
+++ trunk/src/main/rails/publicspace/app/models/content.rb 2009-01-26 23:25:53 UTC (rev 1039)
@@ -22,4 +22,13 @@
def body
@content.last_revision.body
end
+
+ def group_short_name
+ @content.container.owner.shortName
+ end
+
+ def statetoken
+ @content.container.owner.shortName + "." + @content.container.toolName + "." + @content.container.id.to_s + "." + @content.id.to_s
+ end
+
end
Modified: trunk/src/main/rails/publicspace/public/templates/basic/basic.css
===================================================================
--- trunk/src/main/rails/publicspace/public/templates/basic/basic.css 2009-01-26 20:38:12 UTC (rev 1038)
+++ trunk/src/main/rails/publicspace/public/templates/basic/basic.css 2009-01-26 23:25:53 UTC (rev 1039)
@@ -1,7 +1,7 @@
-html {background-color: #D6FF2F;}
+html {background-color: #DD8A3D;}
-.page {width: 60em; margin: 2em auto; padding: 1em; background-color: #fff; overflow: hidden;}
-h1 { color: black; font-size:3em; letter-spacing:-0.05em; line-height:1em; margin:1em 0 0.5em 4em; }
+.page {width: 60em; height: 30em; margin: 2em auto; padding: 1em; background-color: #fff; overflow: hidden;}
+.page h1 {color: black; letter-spacing:-0.05em; line-height:1em; margin:1em 0 0.5em 4em; }
.page .menu {float: left; padding: 1em; width: 9em; background-color: #efefef; margin-right: 1em;}
.page .content {}
\ No newline at end of file
Modified: trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html
===================================================================
--- trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html 2009-01-26 20:38:12 UTC (rev 1038)
+++ trunk/src/main/rails/publicspace/public/templates/basic/docs.liquid.html 2009-01-26 23:25:53 UTC (rev 1039)
@@ -1,17 +1,24 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
- <head>
- <title>Kune cositas</title>
- <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset/reset-min.css">
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
- <link rel="stylesheet" type="text/css" href="{{ 'basic.css' | asset }}">
- </head>
- <body>
- <div class="page">
- <h1>{{ content.title }}</h1>
- <div class="menu">aquí va el menu</div>
- <div class="content">{{ content.body }}</div>
- </div>
- </body>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+ <title>{{ content.group_short_name }}: {{ content.title }}</title>
+ <link rel="shortcut icon" href="/kune/servlets/EntityLogoDownloadManager?token={{ content.statetoken }} />
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset/reset-min.css">
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/fonts/fonts-min.css">
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/base/base-min.css">
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
+ <link rel="stylesheet" type="text/css" href="{{ 'basic.css' | asset }}">
+ <!--[if lt IE 7.]>
+ <script defer type="text/javascript" src="js/pngfix.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="page">
+ <h1>{{ content.title }}</h1>
+ <div class="menu">Here the container</div>
+ <div class="content">{{ content.body }}</div>
+ </div>
+ </body>
</html>
1
0
Author: vjrj
Date: 2009-01-26 21:38:12 +0100 (Mon, 26 Jan 2009)
New Revision: 1038
Added:
trunk/org.ourproject-kune-0.0.5-0.deb
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCheckedCondition.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarMenuCheckItemDescriptor.java
Modified:
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarButtonDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserInfoDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfo.java
trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfoServiceDefault.java
trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
Log:
Complete - task Add Publish/Reject content actions
Complete - task Add show deleted items menu option
Added: trunk/org.ourproject-kune-0.0.5-0.deb
===================================================================
(Binary files differ)
Property changes on: trunk/org.ourproject-kune-0.0.5-0.deb
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
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-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2009-01-26 20:38:12 UTC (rev 1038)
@@ -41,4 +41,4 @@
padding: 1px 0px 1px 1px;
text-decoration:none;
}
-*/.x-tree-node .k-ctn-status-normal a span{}.x-tree-node .k-ctn-status-rejdel a span{text-decoration:line-through;color:gray;}.x-tree-node .k-ctn-status-editing a span{font-style:italic;color:gray;}.x-tree-node .k-ctn-status-submitted a span{color:green;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
+*/.x-tree-node .k-ctn-status-normal a span{}.x-tree-node .k-ctn-status-deleted a span{text-decoration:line-through;color:gray;}.x-tree-node .k-ctn-status-rejected a span{text-decoration:line-through;/* color: #FF6633; */color:#F30;}.x-tree-node .k-ctn-status-editing a span{font-style:italic;color:gray;}.x-tree-node .k-ctn-status-submitted a span{color:green;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2009-01-26 20:38:12 UTC (rev 1038)
@@ -700,11 +700,18 @@
.x-tree-node .k-ctn-status-normal a span {
}
-.x-tree-node .k-ctn-status-rejdel a span {
+.x-tree-node .k-ctn-status-deleted a span {
text-decoration: line-through;
color: gray;
}
+.x-tree-node .k-ctn-status-rejected a span {
+ text-decoration: line-through;
+ /* color: #FF6633; */
+ color: #FF3300;
+
+}
+
.x-tree-node .k-ctn-status-editing a span {
font-style: italic;
color: gray;
Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -102,5 +102,6 @@
createDelContainerAction("Delete blog", parentMenuTitleCtx, containersNoRoot);
createDelContentAction(parentMenuTitle, i18n.t("Delete"), contents);
+ createShowDeletedItems(parentMenuTitleCtx, all);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -22,12 +22,14 @@
import org.ourproject.kune.chat.client.ctx.room.AddRoom;
import org.ourproject.kune.docs.client.DocumentClientTool;
import org.ourproject.kune.gallery.client.GalleryClientTool;
+import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.wiki.client.WikiClientTool;
@@ -70,6 +72,7 @@
chatAbout.setIconUrl("images/emite-room.png");
chatAbout.setToolTip("Chat and comment this");
chatAbout.setLeftSeparator(ActionToolbarButtonSeparator.fill);
+ chatAbout.setEnableCondition(notDeleted());
ActionToolbarButtonDescriptor<StateToken> joinRoom = new ActionToolbarButtonDescriptor<StateToken>(
AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
@@ -105,4 +108,14 @@
contextActionRegistry.addAction(addRoom, ChatClientTool.TYPE_ROOT, ChatClientTool.TYPE_ROOM);
contentActionRegistry.addAction(joinRoom, ChatClientTool.TYPE_ROOM);
}
+
+ private ActionEnableCondition<StateToken> notDeleted() {
+ return new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken itemToken) {
+ final boolean isNotDeleted = !(session.isCurrentStateAContent() && session.getContentState().getStatus().equals(
+ ContentStatusDTO.inTheDustbin));
+ return isNotDeleted;
+ }
+ };
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -106,6 +106,7 @@
createDelContainerAction("Delete folder", parentMenuTitleCtx, containersNoRoot);
createDelContentAction(parentMenuTitle, i18n.t("Delete"), contents);
+ createShowDeletedItems(parentMenuTitleCtx, all);
}
@Override
Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -102,6 +102,7 @@
createDelContainerAction("Delete folder", parentMenuTitleCtx, containersNoRoot);
createDelContentAction(parentMenuTitle, i18n.t("Delete"), contents);
+ createShowDeletedItems(parentMenuTitleCtx, all);
}
@Override
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCheckedCondition.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCheckedCondition.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCheckedCondition.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.actions;
+
+public interface ActionCheckedCondition {
+ boolean mustBeChecked();
+}
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-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -86,6 +86,12 @@
this.mustBeAuthenticated = true;
}
+ public ActionDescriptor(final AccessRolDTO accessRolDTO, final Listener<T> onPerformCall,
+ final ActionAddCondition<T> addCondition) {
+ this(accessRolDTO, onPerformCall);
+ this.addCondition = addCondition;
+ }
+
/**
* Instantiates a new action descriptor.
*
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarButtonDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarButtonDescriptor.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarButtonDescriptor.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -34,6 +34,12 @@
public ActionToolbarButtonDescriptor(final AccessRolDTO accessRolDTO,
final ActionToolbarPosition actionToolbarPosition, final Listener<T> onPerformCall,
+ final ActionAddCondition<T> addCondition) {
+ super(accessRolDTO, actionToolbarPosition, onPerformCall, addCondition);
+ }
+
+ public ActionToolbarButtonDescriptor(final AccessRolDTO accessRolDTO,
+ final ActionToolbarPosition actionToolbarPosition, final Listener<T> onPerformCall,
final ActionEnableCondition<T> enableCondition) {
super(accessRolDTO, actionToolbarPosition, onPerformCall, enableCondition);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -33,6 +33,12 @@
}
public ActionToolbarDescriptor(final AccessRolDTO accessRolDTO, final ActionToolbarPosition actionToolbarPosition,
+ final Listener<T> onPerformCall, final ActionAddCondition<T> addCondition) {
+ super(accessRolDTO, onPerformCall, addCondition);
+ this.actionToolbarPosition = actionToolbarPosition;
+ }
+
+ public ActionToolbarDescriptor(final AccessRolDTO accessRolDTO, final ActionToolbarPosition actionToolbarPosition,
final Listener<T> onPerformCall, final ActionEnableCondition<T> enableCondition) {
super(accessRolDTO, onPerformCall, enableCondition);
this.actionToolbarPosition = actionToolbarPosition;
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarMenuCheckItemDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarMenuCheckItemDescriptor.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarMenuCheckItemDescriptor.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -0,0 +1,21 @@
+package org.ourproject.kune.platf.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+
+import com.calclab.suco.client.events.Listener;
+
+public class ActionToolbarMenuCheckItemDescriptor<T> extends ActionToolbarMenuDescriptor<T> {
+
+ private final ActionCheckedCondition mustBeChecked;
+
+ public ActionToolbarMenuCheckItemDescriptor(AccessRolDTO accessRol, ActionToolbarPosition toolbarPosition,
+ Listener<T> onPerformCall, ActionCheckedCondition mustBeChecked) {
+ super(accessRol, toolbarPosition, onPerformCall);
+ this.mustBeChecked = mustBeChecked;
+ }
+
+ public ActionCheckedCondition getMustBeChecked() {
+ return mustBeChecked;
+ }
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -8,6 +8,7 @@
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionToolbarDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarMenuCheckItemDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuRadioDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
@@ -178,6 +179,11 @@
checkItem.setGroup(radioDescriptor.getGroup());
checkItem.setChecked(radioDescriptor.mustBeChecked());
item = checkItem;
+ } else if (action instanceof ActionToolbarMenuCheckItemDescriptor) {
+ CheckItem checkItem = new CheckItem(action.getText());
+ ActionToolbarMenuCheckItemDescriptor<T> checkItemDescriptor = (ActionToolbarMenuCheckItemDescriptor<T>) action;
+ checkItem.setChecked(checkItemDescriptor.getMustBeChecked().mustBeChecked());
+ item = checkItem;
} else {
item = new Item(action.getText());
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserInfoDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserInfoDTO.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserInfoDTO.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -31,6 +31,7 @@
private String userHash;
private List<GroupDTO> groupsIsAdmin;
private List<GroupDTO> groupsIsCollab;
+ private boolean showDeletedContent;
public String getChatName() {
return chatName;
@@ -68,6 +69,10 @@
return user.getShortName();
}
+ public boolean getShowDeletedContent() {
+ return showDeletedContent;
+ }
+
public UserSimpleDTO getUser() {
return user;
}
@@ -97,6 +102,10 @@
this.homePage = homePage;
}
+ public void setShowDeletedContent(boolean showDeletedContent) {
+ this.showDeletedContent = showDeletedContent;
+ }
+
public void setUser(UserSimpleDTO user) {
this.user = user;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -51,7 +51,7 @@
StateContainerDTO addRoom(String user, StateToken parentToken, String name) throws DefaultException;
- void delContent(String userHash, StateToken token) throws DefaultException;
+ StateContentDTO delContent(String userHash, StateToken token) throws DefaultException;
StateAbstractDTO getContent(String userHash, StateToken token) throws DefaultException;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -51,7 +51,7 @@
void addRoom(String user, StateToken parentToken, String name, AsyncCallback<StateContainerDTO> callback);
- void delContent(String userHash, StateToken token, AsyncCallback<?> asyncCallback);
+ void delContent(String userHash, StateToken token, AsyncCallback<StateContentDTO> asyncCallback);
void getContent(String user, StateToken newState, AsyncCallback<StateAbstractDTO> callback);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -64,20 +64,6 @@
*/
int SESSION_DURATION = 1000 * 60 * 60 * 24 * 14;
- public String getCurrentCCversion();
-
- public LicenseDTO getDefLicense();
-
- public int getImgCropsize();
-
- public int getImgIconsize();
-
- public int getImgResizewidth();
-
- public int getImgThumbsize();
-
- public boolean inSameToken(StateToken token);
-
void check(AsyncCallbackSimple<?> callback);
StateContainerDTO getContainerState();
@@ -88,6 +74,8 @@
Object[][] getCountriesArray();
+ String getCurrentCCversion();
+
I18nLanguageDTO getCurrentLanguage();
StateAbstractDTO getCurrentState();
@@ -98,22 +86,38 @@
UserInfoDTO getCurrentUserInfo();
+ LicenseDTO getDefLicense();
+
String getGalleryPermittedExtensions();
Collection<ToolSimpleDTO> getGroupTools();
+ int getImgCropsize();
+
+ int getImgIconsize();
+
+ int getImgResizewidth();
+
+ int getImgThumbsize();
+
List<I18nLanguageSimpleDTO> getLanguages();
Object[][] getLanguagesArray();
List<LicenseDTO> getLicenses();
+ boolean getShowDeletedContent();
+
Object[][] getTimezones();
String getUserHash();
Collection<ToolSimpleDTO> getUserTools();
+ boolean inSameToken(StateToken token);
+
+ boolean isCurrentStateAContent();
+
boolean isLogged();
void onInitDataReceived(Listener<InitDataDTO> listener);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -158,6 +158,10 @@
return initData.getLicenses();
}
+ public boolean getShowDeletedContent() {
+ return currentUserInfo == null ? false : currentUserInfo.getShowDeletedContent();
+ }
+
public Object[][] getTimezones() {
if (timezonesArray == null) {
mapTimezones();
@@ -177,6 +181,10 @@
return getCurrentStateToken().equals(token);
}
+ public boolean isCurrentStateAContent() {
+ return currentState instanceof StateContentDTO;
+ }
+
public boolean isLogged() {
return userHash != null;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -37,8 +37,6 @@
Content createContent(String title, String body, User author, Container container, String typeId);
- void delContent(User user, Long contentId) throws DefaultException;
-
boolean findIfExistsTitle(Container container, String title);
Double getRateAvg(Content content);
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -103,12 +103,6 @@
return persist(newContent);
}
- public void delContent(final User user, final Long contentId) throws DefaultException {
- final Content content = finder.getContent(contentId);
- content.setStatus(ContentStatus.inTheDustbin);
- content.setDeletedOn(new Date());
- }
-
public boolean findIfExistsTitle(Container container, String title) {
return (contentFinder.findIfExistsTitle(container, title) > 0)
|| (containerFinder.findIfExistsTitle(container, title) > 0);
@@ -215,7 +209,12 @@
switch (status) {
case publishedOnline:
content.setPublishedOn(new Date());
+ content.setDeletedOn(null);
break;
+ case inTheDustbin:
+ content.setDeletedOn(new Date());
+ content.setPublishedOn(null);
+ break;
default:
break;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -204,10 +204,9 @@
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public void delContent(final String userHash, final StateToken token) throws DefaultException {
+ public StateContentDTO delContent(final String userHash, final StateToken token) throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final User user = getCurrentUser();
- contentManager.delContent(user, contentId);
+ return getState(getCurrentUser(), contentManager.setStatus(contentId, ContentStatus.inTheDustbin));
}
@Authenticated(mandatory = false)
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfo.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfo.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfo.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -34,6 +34,7 @@
private List<Group> groupsIsAdmin;
private List<Group> groupsIsCollab;
private String userHash;
+ private boolean showDeletedContent;
public String getChatName() {
return chatName;
@@ -71,6 +72,10 @@
return user.getShortName();
}
+ public boolean getShowDeletedContent() {
+ return showDeletedContent;
+ }
+
public User getUser() {
return user;
}
@@ -99,6 +104,10 @@
this.homePage = homePage;
}
+ public void setShowDeletedContent(boolean showDeletedContent) {
+ this.showDeletedContent = showDeletedContent;
+ }
+
public void setUser(User user) {
this.user = user;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfoServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfoServiceDefault.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/users/UserInfoServiceDefault.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -48,6 +48,8 @@
info.setChatName(user.getShortName());
info.setChatPassword(user.getPassword());
info.setUserHash(userHash);
+ // FIXME: save this in user properties
+ info.setShowDeletedContent(false);
final Group userGroup = user.getUserGroup();
Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -106,6 +106,7 @@
createDelContainerAction("Delete folder", parentMenuTitleCtx, containersNoRoot);
createDelContentAction(parentMenuTitle, i18n.t("Delete"), contents);
+ createShowDeletedItems(parentMenuTitleCtx, all);
}
@Override
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -1,11 +1,14 @@
package org.ourproject.kune.workspace.client;
+import org.ourproject.kune.platf.client.actions.ActionAddCondition;
+import org.ourproject.kune.platf.client.actions.ActionCheckedCondition;
import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
import org.ourproject.kune.platf.client.actions.ActionMenuItemDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonAndItemDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuAndItemDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarMenuCheckItemDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarMenuRadioDescriptor;
import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
@@ -111,12 +114,11 @@
AccessRolDTO.Administrator, i18n.t("Published online"), parentMenuTitle,
ContentStatusDTO.publishedOnline);
final ActionToolbarMenuRadioDescriptor<StateToken> setEditionInProgressStatus = createSetStatusAction(
- AccessRolDTO.Administrator, i18n.t("Editing in progress"), parentMenuTitle,
- ContentStatusDTO.editingInProgress);
+ AccessRolDTO.Editor, i18n.t("Editing in progress"), parentMenuTitle, ContentStatusDTO.editingInProgress);
final ActionToolbarMenuRadioDescriptor<StateToken> setRejectStatus = createSetStatusAction(
AccessRolDTO.Administrator, i18n.t("Rejected"), parentMenuTitle, ContentStatusDTO.rejected);
final ActionToolbarMenuRadioDescriptor<StateToken> setSubmittedForPublishStatus = createSetStatusAction(
- AccessRolDTO.Administrator, i18n.t("Submitted for publish"), parentMenuTitle,
+ AccessRolDTO.Editor, i18n.t("Submitted for publish"), parentMenuTitle,
ContentStatusDTO.submittedForEvaluation);
final ActionToolbarMenuRadioDescriptor<StateToken> setInTheDustBinStatus = createSetStatusAction(
AccessRolDTO.Administrator, i18n.t("In the rubbish bin"), parentMenuTitle,
@@ -126,6 +128,10 @@
contentActionRegistry.addAction(setRejectStatus, contentsModerated);
contentActionRegistry.addAction(setSubmittedForPublishStatus, contentsModerated);
contentActionRegistry.addAction(setInTheDustBinStatus, contentsModerated);
+ createPublishAction("images/accept.png", i18n.t("Publish online"), ContentStatusDTO.publishedOnline,
+ contentsModerated);
+ createPublishAction("images/cancel.png", i18n.t("Reject publication"), ContentStatusDTO.rejected,
+ contentsModerated);
}
protected void createContentRenameAction(String parentMenuTitle, String textDescription, String... registerInTypes) {
@@ -137,6 +143,7 @@
});
renameCtn.setTextDescription(textDescription);
renameCtn.setParentMenuTitle(parentMenuTitle);
+ renameCtn.setEnableCondition(notDeleted());
contentActionRegistry.addAction(renameCtn, registerInTypes);
}
@@ -160,10 +167,13 @@
AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
contentServiceProvider.get().delContent(session.getUserHash(), token,
- new AsyncCallbackSimple<String>() {
- public void onSuccess(final String result) {
+ new AsyncCallbackSimple<StateContentDTO>() {
+ public void onSuccess(final StateContentDTO state) {
+ session.setCurrentState(state);
final StateToken parent = token.copy().clearDocument();
stateManager.gotoToken(parent);
+ contextNavigator.clear();
+ contextNavigator.refreshState();
}
});
}
@@ -173,12 +183,7 @@
delContent.setMustBeConfirmed(true);
delContent.setConfirmationTitle(i18n.t("Please confirm"));
delContent.setConfirmationText(i18n.t("Are you sure?"));
- delContent.setEnableCondition(new ActionEnableCondition<StateToken>() {
- public boolean mustBeEnabled(final StateToken itemToken) {
- final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent().getStateToken();
- return !itemToken.equals(defContentToken);
- }
- });
+ delContent.setEnableCondition(notDefAndNotDeleted());
contentActionRegistry.addAction(delContent, registerInTypes);
}
@@ -266,6 +271,7 @@
editContent.setTextDescription(i18n.tWithNT("Edit", "used in button"));
editContent.setIconUrl("images/content_edit.png");
editContent.setLeftSeparator(ActionToolbarButtonSeparator.spacer);
+ editContent.setEnableCondition(notDeleted());
contentActionRegistry.addAction(editContent, registerInTypes);
return editContent;
}
@@ -361,6 +367,28 @@
protected void createPostSessionInitActions() {
}
+ protected void createPublishAction(String icon, String tooltip, final ContentStatusDTO status,
+ String... registerInTypes) {
+ ActionToolbarButtonDescriptor<StateToken> pubAction = new ActionToolbarButtonDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+ public void onEvent(StateToken stateToken) {
+ setContentStatus(status, stateToken);
+ }
+ }, new ActionAddCondition<StateToken>() {
+ public boolean mustBeAdded(StateToken param) {
+ if (session.isCurrentStateAContent()
+ && session.getContentState().getStatus().equals(ContentStatusDTO.submittedForEvaluation)) {
+ return true;
+ }
+ return false;
+ }
+ });
+ pubAction.setMustBeAuthenticated(true);
+ pubAction.setToolTip(tooltip);
+ pubAction.setIconUrl(icon);
+ contentActionRegistry.addAction(pubAction, registerInTypes);
+ }
+
protected ActionToolbarMenuDescriptor<StateToken> createRefreshCntAction(String parentMenuTitle,
String... registerInTypes) {
final ActionToolbarMenuDescriptor<StateToken> refreshCnt = new ActionToolbarMenuDescriptor<StateToken>(
@@ -428,12 +456,7 @@
});
setAsDefGroupContent.setTextDescription(i18n.t("Set this as the default group page"));
setAsDefGroupContent.setIconUrl("images/group-home.png");
- setAsDefGroupContent.setEnableCondition(new ActionEnableCondition<StateToken>() {
- public boolean mustBeEnabled(final StateToken itemToken) {
- final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent().getStateToken();
- return !itemToken.equals(defContentToken);
- }
- });
+ setAsDefGroupContent.setEnableCondition(notDefAndNotDeleted());
setAsDefGroupContent.setParentMenuTitle(parentMenuTitle);
contentActionRegistry.addAction(setAsDefGroupContent, registerInTypes);
return setAsDefGroupContent;
@@ -444,22 +467,7 @@
final ActionToolbarMenuRadioDescriptor<StateToken> action = new ActionToolbarMenuRadioDescriptor<StateToken>(
rol, ActionToolbarPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
- final AsyncCallbackSimple<StateAbstractDTO> callback = new AsyncCallbackSimple<StateAbstractDTO>() {
- public void onSuccess(final StateAbstractDTO state) {
- if (session.inSameToken(stateToken)) {
- session.setCurrentState(state);
- publicLink.setState(state);
- }
- contextNavigator.setItemStatus(stateToken, status);
- }
- };
- if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)
- || status.equals(ContentStatusDTO.inTheDustbin)) {
- contentServiceProvider.get().setStatusAsAdmin(session.getUserHash(), stateToken, status,
- callback);
- } else {
- contentServiceProvider.get().setStatus(session.getUserHash(), stateToken, status, callback);
- }
+ setContentStatus(status, stateToken);
}
}, "ContentRadioStatus", new RadioMustBeChecked() {
public boolean mustBeChecked() {
@@ -476,6 +484,30 @@
return action;
}
+ protected void createShowDeletedItems(String parentMenuTitle, String... registerInTypes) {
+ ActionToolbarMenuCheckItemDescriptor<StateToken> showDeletedItems = new ActionToolbarMenuCheckItemDescriptor<StateToken>(
+ AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+ public void onEvent(StateToken parameter) {
+ boolean mustShow = !session.getCurrentUserInfo().getShowDeletedContent();
+ session.getCurrentUserInfo().setShowDeletedContent(mustShow);
+ if (!mustShow && session.isCurrentStateAContent()
+ && session.getContentState().getStatus().equals(ContentStatusDTO.inTheDustbin)) {
+ stateManager.gotoToken(session.getCurrentStateToken().getGroup());
+ }
+ contextNavigator.clear();
+ contextNavigator.refreshState();
+ }
+ }, new ActionCheckedCondition() {
+ public boolean mustBeChecked() {
+ return session.getShowDeletedContent();
+ }
+ });
+ showDeletedItems.setParentMenuTitle(parentMenuTitle);
+ showDeletedItems.setTextDescription("Show deleted items");
+ showDeletedItems.setMustBeAuthenticated(true);
+ contextActionRegistry.addAction(showDeletedItems, registerInTypes);
+ }
+
protected ActionToolbarButtonDescriptor<StateToken> createTranslateAction(String... registerInTypes) {
ActionToolbarButtonDescriptor<StateToken> translateContent = new ActionToolbarButtonDescriptor<StateToken>(
AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener<StateToken>() {
@@ -487,6 +519,7 @@
translateContent.setToolTip(i18n.t("Translate this document to other languages"));
translateContent.setIconUrl("images/language.gif");
translateContent.setLeftSeparator(ActionToolbarButtonSeparator.spacer);
+ translateContent.setEnableCondition(notDeleted());
contentActionRegistry.addAction(translateContent, registerInTypes);
return translateContent;
}
@@ -560,6 +593,28 @@
return setGroupLogo;
}
+ private ActionEnableCondition<StateToken> notDefAndNotDeleted() {
+ return new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken itemToken) {
+ final boolean isNotDefContentToken = !session.getCurrentState().getGroup().getDefaultContent().getStateToken().equals(
+ itemToken);
+ final boolean isNotDeleted = !(session.isCurrentStateAContent() && session.getContentState().getStatus().equals(
+ ContentStatusDTO.inTheDustbin));
+ return isNotDefContentToken && isNotDeleted;
+ }
+ };
+ }
+
+ private ActionEnableCondition<StateToken> notDeleted() {
+ return new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken itemToken) {
+ final boolean isNotDeleted = !(session.isCurrentStateAContent() && session.getContentState().getStatus().equals(
+ ContentStatusDTO.inTheDustbin));
+ return isNotDeleted;
+ }
+ };
+ }
+
private void register(ActionToolbarMenuAndItemDescriptor<StateToken> action, Position position,
String... registerInTypes) {
switch (position) {
@@ -572,4 +627,23 @@
}
}
+ private void setContentStatus(final ContentStatusDTO status, final StateToken stateToken) {
+ final AsyncCallbackSimple<StateAbstractDTO> callback = new AsyncCallbackSimple<StateAbstractDTO>() {
+ public void onSuccess(final StateAbstractDTO state) {
+ if (session.inSameToken(stateToken)) {
+ session.setCurrentState(state);
+ publicLink.setState(state);
+ foldableContent.refreshState();
+ }
+ contextNavigator.setItemStatus(stateToken, status);
+ }
+ };
+ if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)
+ || status.equals(ContentStatusDTO.inTheDustbin)) {
+ contentServiceProvider.get().setStatusAsAdmin(session.getUserHash(), stateToken, status, callback);
+ } else {
+ contentServiceProvider.get().setStatus(session.getUserHash(), stateToken, status, callback);
+ }
+ }
+
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -317,8 +317,10 @@
node.setCls("k-ctn-status-normal");
break;
case inTheDustbin:
+ node.setCls("k-ctn-status-deleted");
+ break;
case rejected:
- node.setCls("k-ctn-status-rejdel");
+ node.setCls("k-ctn-status-rejected");
break;
case editingInProgress:
node.setCls("k-ctn-status-editing");
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -167,7 +167,6 @@
private ActionItemCollection<StateToken> addItem(final String title, final String contentTypeId,
final BasicMimeTypeDTO mimeType, final ContentStatusDTO status, final StateToken stateToken,
final StateToken parentStateToken, final AccessRightsDTO rights, final boolean isNodeSelected) {
-
final ActionItemCollection<StateToken> toolbarActions = actionRegistry.getCurrentActions(stateToken,
contentTypeId, session.isLogged(), rights, true);
@@ -178,7 +177,11 @@
&& rights.isAdministrable(), capabilitiesRegistry.isDropable(contentTypeId)
&& rights.isAdministrable(), actionRegistry.getCurrentActions(stateToken, contentTypeId,
session.isLogged(), rights, false));
- view.addItem(item);
+ if (status.equals(ContentStatusDTO.inTheDustbin) && !session.getShowDeletedContent()) {
+ // Don't show
+ } else {
+ view.addItem(item);
+ }
return toolbarActions;
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java 2009-01-26 17:13:03 UTC (rev 1037)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java 2009-01-26 20:38:12 UTC (rev 1038)
@@ -169,7 +169,7 @@
participate.setToolTip(i18n.t("Request to participate in this group"));
participate.setMustBeAuthenticated(false);
participate.setAddCondition(new ActionAddCondition<StateToken>() {
- public boolean mustBeAdded(StateToken token) {
+ public boolean mustBeAdded(StateToken param) {
return !isMember(session.getCurrentState().getGroupRights());
}
});
1
0
Author: vjrj
Date: 2009-01-26 18:13:03 +0100 (Mon, 26 Jan 2009)
New Revision: 1037
Modified:
trunk/TODO
trunk/pom.xml
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java
trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java
trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLink.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/RenameAction.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
Log:
Content status UI improved.
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/TODO 2009-01-26 17:13:03 UTC (rev 1037)
@@ -11,6 +11,7 @@
* SHORT-TERM (URGENT)
** TODO <v> User preferences storing
+ (See also variables in 'Styling braimstorming')
We need a way to store (in db) User preferences (like emite chat configurations) in a extensible way.
Something similar to java.util.prefs.Preferences or Mozilla about:config
http://java.sun.com/developer/technicalArticles/releases/preferences/
@@ -19,8 +20,33 @@
http://stackoverflow.com/questions/194349/what-is-the-proper-way-to-store-a…
** vjrj Styling braimstorming
*** layouts
-*** screenshot
+ - name :: greenforrest
+ - screenshot :: images/greenforrest.png
+ - varsgroupname :: layout.greenforrest
*** html+css+variables
+**** css:
+
+**** variables
+ prefgroups
+ - id :: 1
+ - groupname :: emite.ui
+
+ pref
+ - id :: 1
+ - group :: 1
+ - name :: usercolor
+ - description :: (optional) The color of the self alias color in chat conversations
+ - vartype :: (int/boolean/String) red
+ - defvalue :: ?? #000000
+
+ userpref
+ - id :: 1
+ - userid :: 123
+ - varid :: 1
+ - group :: 1
+ - name :: usercolor
+ - status :: (setted|def) setted
+ - value :: red
*** logos
*** caching
** danigb,vjrj URLs public/workspace braimstorming
@@ -75,6 +101,9 @@
http://vafer.org/blog/20070918215154
Related info:
http://java.debian.net/building.html
+** <v> implement pubsub in emite
+ http://xmpp.org/extensions/attic/jep-0060-1.6.html
+ see: svn checkout svn://anonsvn.it.su.se/su-smack su-smack
** TODO <v> study different embeded video solutions
- for ogg :: http://www.flumotion.net/cortado/
- for mp3+ogg :: flowplayer
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/pom.xml 2009-01-26 17:13:03 UTC (rev 1037)
@@ -309,10 +309,10 @@
<id>Codehaus Snapshots</id>
<url>http://snapshots.repository.codehaus.org/</url>
<snapshots>
- <enabled>true</enabled>
+ <enabled>false</enabled>
</snapshots>
<releases>
- <enabled>true</enabled> <!-- Workaround for MNG-2974, see note below -->
+ <enabled>false</enabled> <!-- Workaround for MNG-2974, see note below -->
</releases>
</pluginRepository>
</pluginRepositories>
@@ -478,6 +478,7 @@
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</plugin>
+ <!--
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>deb-maven-plugin</artifactId>
@@ -497,6 +498,7 @@
</execution>
</executions>
</plugin>
+ -->
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-plugin</artifactId>
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-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2009-01-26 17:13:03 UTC (rev 1037)
@@ -41,4 +41,4 @@
padding: 1px 0px 1px 1px;
text-decoration:none;
}
-*/.k-textlinethrough{text-decoration:line-through;color:red;}.k-textnormal{text-decoration:inherit;color:green;}.k-textunderline{text-decoration:underline;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
+*/.x-tree-node .k-ctn-status-normal a span{}.x-tree-node .k-ctn-status-rejdel a span{text-decoration:line-through;color:gray;}.x-tree-node .k-ctn-status-editing a span{font-style:italic;color:gray;}.x-tree-node .k-ctn-status-submitted a span{color:green;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2009-01-26 17:13:03 UTC (rev 1037)
@@ -697,18 +697,21 @@
}
*/
-.k-textlinethrough {
+.x-tree-node .k-ctn-status-normal a span {
+}
+
+.x-tree-node .k-ctn-status-rejdel a span {
text-decoration: line-through;
- color: red;
+ color: gray;
}
-.k-textnormal {
- text-decoration: inherit;
- color: green;
+.x-tree-node .k-ctn-status-editing a span {
+ font-style: italic;
+ color: gray;
}
-.k-textunderline {
- text-decoration: underline;
+.x-tree-node .k-ctn-status-submitted a span {
+ color: green;
}
.k-info-links {
Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -40,6 +40,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import com.calclab.suco.client.ioc.Provider;
@@ -52,11 +53,12 @@
final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
- final BlogViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider) {
+ final BlogViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
+ final SitePublicSpaceLink publicLink) {
super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,
contentServiceProvider, fileUploaderProvider, contextNavigator, contentActionRegistry,
contextActionRegistry, fileDownloadProvider, textEditorProvider, contextProvEditorProvider,
- documentViewer, entityLogo);
+ documentViewer, entityLogo, publicLink);
}
@Override
@@ -86,8 +88,8 @@
createRefreshCntAction(parentMenuTitle, contents);
createRefreshCxtAction(parentMenuTitleCtx, containers);
- createUploadAction(i18n.t("Upload file"), "images/nav/upload.png",
- i18n.t("Upload files (images, PDFs...)"), null, containersNoRoot);
+ createUploadAction(i18n.t("Upload file"), "images/nav/upload.png", i18n.t("Upload files (images, PDFs...)"),
+ null, containersNoRoot);
createSetAsDefContent(parentMenuTitle, contents);
Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -48,6 +48,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
@@ -77,7 +78,7 @@
$$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
$(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
$(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(BlogViewer.class),
- $$(ContextPropEditor.class));
+ $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
}
});
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -40,6 +40,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import com.calclab.suco.client.ioc.Provider;
@@ -52,11 +53,12 @@
final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
- final DocumentViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider) {
+ final DocumentViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
+ final SitePublicSpaceLink publicLink) {
super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,
contentServiceProvider, fileUploaderProvider, contextNavigator, contentActionRegistry,
contextActionRegistry, fileDownloadProvider, textEditorProvider, contextProvEditorProvider,
- documentViewer, entityLogo);
+ documentViewer, entityLogo, publicLink);
}
@Override
@@ -89,8 +91,8 @@
createSetAsDefContent(parentMenuTitle, contents);
- createUploadAction(i18n.t("Upload file"), "images/nav/upload.png",
- i18n.t("Upload files (images, PDFs...)"), null, containers);
+ createUploadAction(i18n.t("Upload file"), "images/nav/upload.png", i18n.t("Upload files (images, PDFs...)"),
+ null, containers);
createDownloadActions(TYPE_UPLOADEDFILE);
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -48,6 +48,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
@@ -77,7 +78,7 @@
$$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
$(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
$(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class),
- $(DocumentViewer.class), $$(ContextPropEditor.class));
+ $(DocumentViewer.class), $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
}
});
Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -39,6 +39,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import com.calclab.suco.client.ioc.Provider;
@@ -51,11 +52,12 @@
final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
- final GalleryViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider) {
+ final GalleryViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
+ final SitePublicSpaceLink publicLink) {
super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,
contentServiceProvider, fileUploaderProvider, contextNavigator, contentActionRegistry,
contextActionRegistry, fileDownloadProvider, textEditorProvider, contextProvEditorProvider,
- documentViewer, entityLogo);
+ documentViewer, entityLogo, publicLink);
}
@Override
Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -48,6 +48,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
@@ -77,7 +78,7 @@
$$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
$(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
$(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(GalleryViewer.class),
- $$(ContextPropEditor.class));
+ $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
}
});
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -63,9 +63,9 @@
void removeAuthor(String userHash, StateToken token, String authorShortName) throws DefaultException;
- String renameContainer(String userHash, StateToken token, String newName) throws DefaultException;
+ StateAbstractDTO renameContainer(String userHash, StateToken token, String newName) throws DefaultException;
- String renameContent(String userHash, StateToken token, String newName) throws DefaultException;
+ StateAbstractDTO renameContent(String userHash, StateToken token, String newName) throws DefaultException;
void save(String user, StateToken token, String content) throws DefaultException;
@@ -75,9 +75,9 @@
void setPublishedOn(String userHash, StateToken token, Date date) throws DefaultException;
- void setStatus(String userHash, StateToken stateToken, ContentStatusDTO status);
+ StateAbstractDTO setStatus(String userHash, StateToken stateToken, ContentStatusDTO status);
- void setStatusAsAdmin(String userHash, StateToken stateToken, ContentStatusDTO status);
+ StateAbstractDTO setStatusAsAdmin(String userHash, StateToken stateToken, ContentStatusDTO status);
TagCloudResultDTO setTags(String userHash, StateToken token, String tags) throws DefaultException;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -63,9 +63,10 @@
void removeAuthor(String userHash, StateToken token, String authorShortName, AsyncCallback<?> asyncCallback);
- void renameContainer(String userHash, StateToken token, String newName, AsyncCallback<String> asyncCallback);
+ void renameContainer(String userHash, StateToken token, String newName,
+ AsyncCallback<StateAbstractDTO> asyncCallback);
- void renameContent(String userHash, StateToken token, String newName, AsyncCallback<String> asyncCallback);
+ void renameContent(String userHash, StateToken token, String newName, AsyncCallback<StateAbstractDTO> asyncCallback);
void save(String user, StateToken token, String content, AsyncCallback<?> asyncCallback);
@@ -76,10 +77,11 @@
void setPublishedOn(String userHash, StateToken token, Date publishedOn, AsyncCallback<?> asyncCallback);
- void setStatus(String userHash, StateToken stateToken, ContentStatusDTO status, AsyncCallback<?> asyncCallback);
+ void setStatus(String userHash, StateToken stateToken, ContentStatusDTO status,
+ AsyncCallback<StateAbstractDTO> asyncCallback);
void setStatusAsAdmin(String userHash, StateToken stateToken, ContentStatusDTO status,
- AsyncCallback<?> asyncCallback);
+ AsyncCallback<StateAbstractDTO> asyncCallback);
void setTags(String userHash, StateToken token, String tags, AsyncCallback<TagCloudResultDTO> asyncCallback);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -76,6 +76,8 @@
public int getImgThumbsize();
+ public boolean inSameToken(StateToken token);
+
void check(AsyncCallbackSimple<?> callback);
StateContainerDTO getContainerState();
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -173,6 +173,10 @@
return initData.getUserTools();
}
+ public boolean inSameToken(StateToken token) {
+ return getCurrentStateToken().equals(token);
+ }
+
public boolean isLogged() {
return userHash != null;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManager.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManager.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -36,7 +36,7 @@
boolean findIfExistsTitle(Container container, String title);
- String renameFolder(Group group, Container container, String newName) throws DefaultException;
+ Container renameFolder(Group group, Container container, String newName) throws DefaultException;
SearchResult<Container> search(String search);
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManagerDefault.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContainerManagerDefault.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -95,7 +95,7 @@
|| (containerFinder.findIfExistsTitle(container, title) > 0);
}
- public String renameFolder(final Group group, final Container container, final String newName)
+ public Container renameFolder(final Group group, final Container container, final String newName)
throws DefaultException {
FilenameUtils.checkBasicFilename(newName);
String newNameWithoutNT = FilenameUtils.chomp(newName);
@@ -107,7 +107,7 @@
}
container.setName(newNameWithoutNT);
persist(container);
- return newNameWithoutNT;
+ return container;
}
public SearchResult<Container> search(final String search) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -51,7 +51,7 @@
void removeAuthor(User user, Long contentId, String authorShortName) throws DefaultException;
- String renameContent(User user, Long contentId, String newName) throws DefaultException;
+ Content renameContent(User user, Long contentId, String newName) throws DefaultException;
Content save(User editor, Content content, String body);
@@ -63,7 +63,7 @@
void setPublishedOn(User user, Long contentId, Date publishedOn) throws DefaultException;
- void setStatus(Long contentId, ContentStatus contentStatus);
+ Content setStatus(Long contentId, ContentStatus contentStatus);
void setTags(User user, Long contentId, String tags) throws DefaultException;
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -156,7 +156,7 @@
content.removeAuthor(author);
}
- public String renameContent(final User user, final Long contentId, final String newTitle) throws DefaultException {
+ public Content renameContent(final User user, final Long contentId, final String newTitle) throws DefaultException {
String newTitleWithoutNL = FilenameUtils.chomp(newTitle);
FilenameUtils.checkBasicFilename(newTitleWithoutNL);
final Content content = finder.getContent(contentId);
@@ -164,7 +164,7 @@
throw new NameInUseException();
}
content.getLastRevision().setTitle(newTitleWithoutNL);
- return newTitle;
+ return content;
}
public Content save(final User editor, final Content content, final String body) {
@@ -209,7 +209,7 @@
content.setPublishedOn(publishedOn);
}
- public void setStatus(final Long contentId, final ContentStatus status) {
+ public Content setStatus(final Long contentId, final ContentStatus status) {
final Content content = finder.getContent(contentId);
content.setStatus(status);
switch (status) {
@@ -219,6 +219,7 @@
default:
break;
}
+ return content;
}
public void setTags(final User user, final Long contentId, final String tags) throws DefaultException {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -125,8 +125,7 @@
public void addAuthor(final String userHash, final StateToken token, final String authorShortName)
throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
contentManager.addAuthor(user, contentId, authorShortName);
}
@@ -135,8 +134,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public CommentDTO addComment(final String userHash, final StateToken token, final Long parentCommentId,
final String commentText) throws DefaultException {
- final UserSession userSession = getUserSession();
- final User author = userSession.getUser();
+ final User author = getCurrentUser();
final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.addComment(author, contentId, commentText, parentCommentId);
return mapper.map(comment, CommentDTO.class);
@@ -147,8 +145,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public CommentDTO addComment(final String userHash, final StateToken token, final String commentText)
throws DefaultException {
- final UserSession userSession = getUserSession();
- final User author = userSession.getUser();
+ final User author = getCurrentUser();
final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.addComment(author, contentId, commentText);
return mapper.map(comment, CommentDTO.class);
@@ -159,14 +156,11 @@
@Transactional(type = TransactionType.READ_WRITE)
public StateContentDTO addContent(final String userHash, final StateToken parentToken, final String title,
final String typeId) throws DefaultException {
- final Group group = groupManager.findByShortName(parentToken.getGroup());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final Container container = accessService.accessToContainer(ContentUtils.parseId(parentToken.getFolder()),
user, AccessRol.Editor);
final Content addedContent = creationService.createContent(title, "", user, container, typeId);
- final StateContent state = stateService.create(user, addedContent);
- return mapStateSiblings(state, user, group);
+ return getState(user, addedContent);
}
@Authenticated
@@ -174,13 +168,10 @@
@Transactional(type = TransactionType.READ_WRITE)
public StateContainerDTO addFolder(final String userHash, final StateToken parentToken, final String title,
final String contentTypeId) throws DefaultException {
- final Group group = groupManager.findByShortName(parentToken.getGroup());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final Container container = createFolder(parentToken.getGroup(), ContentUtils.parseId(parentToken.getFolder()),
title, contentTypeId);
- StateContainer state = stateService.create(user, container);
- return mapStateSiblings(state, user, group);
+ return getState(user, container);
}
@Authenticated
@@ -189,19 +180,15 @@
public StateContainerDTO addRoom(final String userHash, final StateToken parentToken, final String roomName)
throws DefaultException {
final String groupShortName = parentToken.getGroup();
- final Group group = groupManager.findByShortName(groupShortName);
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final String userShortName = user.getShortName();
- final ChatConnection connection = xmppManager.login(userShortName, userSession.getUser().getPassword(),
- userHash);
+ final ChatConnection connection = xmppManager.login(userShortName, user.getPassword(), userHash);
xmppManager.createRoom(connection, roomName, userShortName + userHash);
xmppManager.disconnect(connection);
try {
final Container container = createFolder(groupShortName, ContentUtils.parseId(parentToken.getFolder()),
roomName, ChatServerTool.TYPE_ROOM);
- StateContainer state = stateService.create(user, container);
- return mapStateSiblings(state, user, group);
+ return getState(user, container);
} catch (final ContentNotFoundException e) {
xmppManager.destroyRoom(connection, roomName);
throw new ContentNotFoundException();
@@ -219,8 +206,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public void delContent(final String userHash, final StateToken token) throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
contentManager.delContent(user, contentId);
}
@@ -228,10 +214,8 @@
@Transactional(type = TransactionType.READ_ONLY)
public StateAbstractDTO getContent(final String userHash, final StateToken token) throws DefaultException {
Group defaultGroup;
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
- final boolean userIsLoggedIn = userSession.isUserLoggedIn();
- if (userIsLoggedIn) {
+ final User user = getCurrentUser();
+ if (isUserLoggedIn()) {
defaultGroup = groupManager.getGroupOfUserWithId(user.getId());
if (groupManager.findEnabledTools(defaultGroup.getId()).size() == 0) {
// Groups with no homepage
@@ -265,8 +249,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public CommentDTO markCommentAsAbuse(final String userHash, final StateToken token, final Long commentId)
throws DefaultException {
- final UserSession userSession = getUserSession();
- final User informer = userSession.getUser();
+ final User informer = getCurrentUser();
final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.markAsAbuse(informer, contentId, commentId);
return mapper.map(comment, CommentDTO.class);
@@ -277,11 +260,10 @@
@Transactional(type = TransactionType.READ_WRITE)
public RateResultDTO rateContent(final String userHash, final StateToken token, final Double value)
throws DefaultException {
- final UserSession userSession = getUserSession();
- final User rater = userSession.getUser();
+ final User rater = getCurrentUser();
final Long contentId = ContentUtils.parseId(token.getDocument());
- if (userSession.isUserLoggedIn()) {
+ if (isUserLoggedIn()) {
RateResult result = contentManager.rateContent(rater, contentId, value);
return mapper.map(result, RateResultDTO.class);
} else {
@@ -295,32 +277,32 @@
public void removeAuthor(final String userHash, final StateToken token, final String authorShortName)
throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
contentManager.removeAuthor(user, contentId, authorShortName);
}
@Authenticated
@Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor, mustCheckMembership = false)
@Transactional(type = TransactionType.READ_WRITE)
- public String renameContainer(final String userHash, final StateToken token, final String newName)
+ public StateAbstractDTO renameContainer(final String userHash, final StateToken token, final String newName)
throws DefaultException {
- return renameFolder(token.getGroup(), ContentUtils.parseId(token.getFolder()), newName);
+ renameFolder(token.getGroup(), ContentUtils.parseId(token.getFolder()), newName);
+ return getContent(userHash, token);
}
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor, mustCheckMembership = false)
@Transactional(type = TransactionType.READ_WRITE)
- public String renameContent(final String userHash, final StateToken token, final String newName)
+ public StateAbstractDTO renameContent(final String userHash, final StateToken token, final String newName)
throws DefaultException {
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
try {
accessService.accessToContent(ContentUtils.parseId(token.getDocument()), user, AccessRol.Editor);
} catch (final NoResultException e) {
throw new AccessViolationException();
}
- return renameContent(token.getDocument(), newName);
+ renameContent(token.getDocument(), newName);
+ return getContent(userHash, token);
}
@Authenticated
@@ -329,8 +311,7 @@
public void save(final String userHash, final StateToken token, final String textContent) throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final Content content = accessService.accessToContent(contentId, user, AccessRol.Editor);
creationService.saveContent(user, content, textContent);
}
@@ -344,26 +325,13 @@
return mapper.map(content, ContentSimpleDTO.class);
}
- // @Authenticated
- // @Authorizated(accessRolRequired = AccessRol.Administrator,
- // actionLevel=ActionLevel.container)
- // @Transactional(type = TransactionType.READ_WRITE)
- // public ContentSimpleDTO setFolderAsDefaultContent(final String userHash,
- // final StateToken token) {
- // Container container =
- // containerManager.find(ContentUtils.parseId(token.getFolder()));
- // groupManager.setDefaultContent(token.getGroup(), container);
- // return mapper.map(content, ContentSimpleDTO.class);
- // }
-
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor, mustCheckMembership = false)
@Transactional(type = TransactionType.READ_WRITE)
public I18nLanguageDTO setLanguage(final String userHash, final StateToken token, final String languageCode)
throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
return mapper.map(contentManager.setLanguage(user, contentId, languageCode), I18nLanguageDTO.class);
}
@@ -373,26 +341,31 @@
public void setPublishedOn(final String userHash, final StateToken token, final Date publishedOn)
throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
contentManager.setPublishedOn(user, contentId, publishedOn);
}
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public void setStatus(final String userHash, final StateToken token, final ContentStatusDTO status) {
- if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)) {
+ public StateAbstractDTO setStatus(final String userHash, final StateToken token, final ContentStatusDTO status) {
+ if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)
+ || status.equals(ContentStatusDTO.inTheDustbin)) {
throw new AccessViolationException();
}
- contentManager.setStatus(ContentUtils.parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
+ Content content = contentManager.setStatus(ContentUtils.parseId(token.getDocument()),
+ ContentStatus.valueOf(status.toString()));
+ return getState(getCurrentUser(), content);
}
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public void setStatusAsAdmin(final String userHash, final StateToken token, final ContentStatusDTO status) {
- contentManager.setStatus(ContentUtils.parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
+ public StateAbstractDTO setStatusAsAdmin(final String userHash, final StateToken token,
+ final ContentStatusDTO status) {
+ Content content = contentManager.setStatus(ContentUtils.parseId(token.getDocument()),
+ ContentStatus.valueOf(status.toString()));
+ return getState(getCurrentUser(), content);
}
@Authenticated
@@ -401,8 +374,7 @@
public TagCloudResultDTO setTags(final String userHash, final StateToken token, final String tags)
throws DefaultException {
final Long contentId = ContentUtils.parseId(token.getDocument());
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final Group group = groupManager.findByShortName(token.getGroup());
contentManager.setTags(user, contentId, tags);
return getSummaryTags(group);
@@ -413,8 +385,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public CommentDTO voteComment(final String userHash, final StateToken token, final Long commentId,
final boolean votePositive) throws DefaultException {
- final UserSession userSession = getUserSession();
- final User voter = userSession.getUser();
+ final User voter = getCurrentUser();
final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.vote(voter, contentId, commentId, votePositive);
return mapper.map(comment, CommentDTO.class);
@@ -422,8 +393,7 @@
private Container createFolder(final String groupShortName, final Long parentFolderId, final String title,
final String typeId) throws DefaultException {
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final Group group = groupManager.findByShortName(groupShortName);
final Container container = creationService.createFolder(group, parentFolderId, title, user.getLanguage(),
typeId);
@@ -437,14 +407,28 @@
Long id = content.getId();
if (id != null) {
// Content
- return mapStateSiblings(stateService.create(user, content), user, content.getContainer().getOwner());
+ return mapState(stateService.create(user, content), user);
} else {
// Container
final Container container = content.getContainer();
- return mapStateSiblings(stateService.create(user, container), user, container.getOwner());
+ return mapState(stateService.create(user, container), user);
}
}
+ private User getCurrentUser() {
+ return getUserSession().getUser();
+ }
+
+ private StateContainerDTO getState(User user, Container container) {
+ StateContainer state = stateService.create(user, container);
+ return mapState(state, user);
+ }
+
+ private StateContentDTO getState(User user, Content content) {
+ StateContent state = stateService.create(user, content);
+ return mapState(state, user);
+ }
+
private TagCloudResultDTO getSummaryTags(final Group group) {
TagCloudResult result = tagManager.getTagCloudResultByGroup(group);
return new TagCloudResultDTO(mapper.mapList(result.getTagCountList(), TagCountDTO.class), result.getMaxValue(),
@@ -455,6 +439,10 @@
return userSessionProvider.get();
}
+ private boolean isUserLoggedIn() {
+ return getUserSession().isUserLoggedIn();
+ }
+
private void mapContentRightsInstate(final User user, final AccessLists groupAccessList,
final ContentSimpleDTO siblingDTO) {
final Content sibling = contentManager.find(siblingDTO.getId());
@@ -462,9 +450,9 @@
siblingDTO.setRights(mapper.map(rightsService.get(user, lists), AccessRightsDTO.class));
}
- private StateContainerDTO mapStateSiblings(final StateContainer state, final User user, final Group group) {
+ private StateContainerDTO mapState(final StateContainer state, final User user) {
final StateContainerDTO stateDTO = mapper.map(state, StateContainerDTO.class);
- final AccessLists groupAccessList = group.getSocialNetwork().getAccessLists();
+ final AccessLists groupAccessList = state.getGroup().getSocialNetwork().getAccessLists();
for (final ContentSimpleDTO siblingDTO : stateDTO.getRootContainer().getContents()) {
mapContentRightsInstate(user, groupAccessList, siblingDTO);
}
@@ -474,9 +462,9 @@
return stateDTO;
}
- private StateContentDTO mapStateSiblings(final StateContent state, final User user, final Group group) {
+ private StateContentDTO mapState(final StateContent state, final User user) {
final StateContentDTO stateDTO = mapper.map(state, StateContentDTO.class);
- final AccessLists groupAccessList = group.getSocialNetwork().getAccessLists();
+ final AccessLists groupAccessList = state.getGroup().getSocialNetwork().getAccessLists();
for (final ContentSimpleDTO siblingDTO : stateDTO.getRootContainer().getContents()) {
mapContentRightsInstate(user, groupAccessList, siblingDTO);
}
@@ -486,19 +474,17 @@
return stateDTO;
}
- private String renameContent(final String documentId, final String newName) throws ContentNotFoundException,
+ private Content renameContent(final String documentId, final String newName) throws ContentNotFoundException,
DefaultException {
final Long contentId = ContentUtils.parseId(documentId);
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
return contentManager.renameContent(user, contentId, newName);
}
- private String renameFolder(final String groupShortName, final Long folderId, final String newName)
+ private Container renameFolder(final String groupShortName, final Long folderId, final String newName)
throws DefaultException {
final Group group = groupManager.findByShortName(groupShortName);
- final UserSession userSession = getUserSession();
- final User user = userSession.getUser();
+ final User user = getCurrentUser();
final Container container = accessService.accessToContainer(folderId, user, AccessRol.Editor);
return containerManager.renameFolder(group, container, newName);
}
Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -40,6 +40,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import com.calclab.suco.client.ioc.Provider;
@@ -52,11 +53,12 @@
final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
- final WikiViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider) {
+ final WikiViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
+ final SitePublicSpaceLink publicLink) {
super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,
contentServiceProvider, fileUploaderProvider, contextNavigator, contentActionRegistry,
contextActionRegistry, fileDownloadProvider, textEditorProvider, contextProvEditorProvider,
- documentViewer, entityLogo);
+ documentViewer, entityLogo, publicLink);
}
@Override
Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -48,6 +48,7 @@
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
@@ -77,7 +78,7 @@
$$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
$(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
$(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(WikiViewer.class),
- $$(ContextPropEditor.class));
+ $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
}
});
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -17,6 +17,7 @@
import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.GroupDTO;
import org.ourproject.kune.platf.client.dto.InitDataDTO;
+import org.ourproject.kune.platf.client.dto.StateAbstractDTO;
import org.ourproject.kune.platf.client.dto.StateContainerDTO;
import org.ourproject.kune.platf.client.dto.StateContentDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -37,6 +38,7 @@
import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.site.Site;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
import org.ourproject.kune.workspace.client.socialnet.RadioMustBeChecked;
import com.calclab.suco.client.events.Listener;
@@ -66,6 +68,7 @@
protected final FoldableContent foldableContent;
protected final DeferredCommandWrapper deferredCommandWrapper;
protected final EntityHeader entityLogo;
+ private final SitePublicSpaceLink publicLink;
public AbstractFoldableContentActions(Session session, StateManager stateManager, I18nUITranslationService i18n,
KuneErrorHandler errorHandler, DeferredCommandWrapper deferredCommandWrapper,
@@ -74,7 +77,7 @@
ContentActionRegistry contentActionRegistry, ContextActionRegistry contextActionRegistry,
Provider<FileDownloadUtils> fileDownloadProvider, Provider<TextEditor> textEditorProvider,
Provider<ContextPropEditor> contextPropEditorProvider, FoldableContent foldableContent,
- EntityHeader entityLogo) {
+ EntityHeader entityLogo, SitePublicSpaceLink publicLink) {
this.session = session;
this.stateManager = stateManager;
this.i18n = i18n;
@@ -91,6 +94,7 @@
this.contextPropEditorProvider = contextPropEditorProvider;
this.foldableContent = foldableContent;
this.entityLogo = entityLogo;
+ this.publicLink = publicLink;
createActions();
session.onInitDataReceived(new Listener<InitDataDTO>() {
public void onEvent(InitDataDTO parameter) {
@@ -113,7 +117,7 @@
AccessRolDTO.Administrator, i18n.t("Rejected"), parentMenuTitle, ContentStatusDTO.rejected);
final ActionToolbarMenuRadioDescriptor<StateToken> setSubmittedForPublishStatus = createSetStatusAction(
AccessRolDTO.Administrator, i18n.t("Submitted for publish"), parentMenuTitle,
- ContentStatusDTO.publishedOnline);
+ ContentStatusDTO.submittedForEvaluation);
final ActionToolbarMenuRadioDescriptor<StateToken> setInTheDustBinStatus = createSetStatusAction(
AccessRolDTO.Administrator, i18n.t("In the rubbish bin"), parentMenuTitle,
ContentStatusDTO.inTheDustbin);
@@ -247,7 +251,7 @@
foldableContent.attach();
contextPropEditorProvider.get().detach();
contextNavigator.attach();
- if (session.getCurrentStateToken().equals(stateToken)) {
+ if (session.inSameToken(stateToken)) {
contextNavigator.refreshState();
foldableContent.refreshState();
}
@@ -440,13 +444,17 @@
final ActionToolbarMenuRadioDescriptor<StateToken> action = new ActionToolbarMenuRadioDescriptor<StateToken>(
rol, ActionToolbarPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
- final AsyncCallbackSimple<Object> callback = new AsyncCallbackSimple<Object>() {
- public void onSuccess(final Object result) {
- session.getContentState().setStatus(status);
+ final AsyncCallbackSimple<StateAbstractDTO> callback = new AsyncCallbackSimple<StateAbstractDTO>() {
+ public void onSuccess(final StateAbstractDTO state) {
+ if (session.inSameToken(stateToken)) {
+ session.setCurrentState(state);
+ publicLink.setState(state);
+ }
contextNavigator.setItemStatus(stateToken, status);
}
};
- if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)) {
+ if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)
+ || status.equals(ContentStatusDTO.inTheDustbin)) {
contentServiceProvider.get().setStatusAsAdmin(session.getUserHash(), stateToken, status,
callback);
} else {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -138,9 +138,8 @@
presenter.gotoToken(getToken(node));
}
});
+ setNodeStatus(child, item.getContentStatus());
parent.appendChild(child);
- ContentStatusDTO status = item.getContentStatus();
- setNodeStatus(child, status);
} else {
Log.error("Error building file tree, parent folder " + item.getParentId() + " not found");
}
@@ -314,17 +313,18 @@
private void setNodeStatus(final TreeNode node, ContentStatusDTO status) {
switch (status) {
- // FIXME: while not finished
case publishedOnline:
- // node.setCls("k-textnormal");
+ node.setCls("k-ctn-status-normal");
break;
case inTheDustbin:
case rejected:
- // node.setCls("k-textlinethrough");
+ node.setCls("k-ctn-status-rejdel");
break;
case editingInProgress:
+ node.setCls("k-ctn-status-editing");
+ break;
case submittedForEvaluation:
- // node.setCls("k-textunderline");
+ node.setCls("k-ctn-status-submitted");
break;
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -86,7 +86,7 @@
this.renameAction = renameAction;
actionsByItem = new HashMap<StateToken, ActionItemCollection<StateToken>>();
editOnNextStateChange = false;
- confRenameListener();
+ addRenameListener();
}
public void addFileUploaderListener(FileUploader uploader) {
@@ -121,32 +121,15 @@
view.editItem(genId(stateToken));
}
- public void gotoToken(final String token) {
- stateManager.gotoToken(token);
- }
-
public void init(final ContextNavigatorView view) {
this.view = view;
- session.onUserSignIn(new Listener<UserInfoDTO>() {
- public void onEvent(final UserInfoDTO parameter) {
- clear();
- }
- });
- session.onUserSignOut(new Listener0() {
- public void onEvent() {
- clear();
- }
- });
+ addListeners();
}
public boolean isSelected(final StateToken stateToken) {
return view.isSelected(genId(stateToken));
}
- public boolean mustEditOnNextStateChange() {
- return editOnNextStateChange;
- }
-
public void refreshState() {
StateAbstractDTO currentState = session.getCurrentState();
if (currentState instanceof StateContainerDTO) {
@@ -165,80 +148,16 @@
}
public void setItemStatus(final StateToken stateToken, ContentStatusDTO status) {
- view.setItemStatus(genId(stateToken), status);
+ clear();
+ refreshState();
}
public void setState(final StateContainerDTO state, final boolean select) {
setStateContainer(state, select);
}
- public void setStateContainer(final StateContainerDTO state, final boolean select) {
- // TODO: separate in two methods for stateConent and stateContainer
-
- final StateToken stateToken = state.getStateToken();
- boolean isContent = (state instanceof StateContentDTO);
- StateContentDTO stateContent = null;
-
- final ContainerDTO container = state.getContainer();
- final AccessRightsDTO containerRights = state.getContainerRights();
- AccessRightsDTO rights;
-
- if (isContent) {
- stateContent = (StateContentDTO) state;
- rights = stateContent.getContentRights();
- } else {
- rights = containerRights;
- }
- view.setEditable(rights.isEditable());
-
- // If root sended (container is not a root folder) process root (add
- // childs to view)
- final ContainerDTO root = state.getRootContainer();
- if (root != null) {
- view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken());
- createChildItems(root, containerRights);
- }
-
- // Do the path to our current content
- createTreePath(stateToken, container.getAbsolutePath(), containerRights);
-
- // Process our current content/container
- final ActionItemCollection<StateToken> actionItems = new ActionItemCollection<StateToken>();
- if (isContent) {
- rights = stateContent.getContentRights();
- final ActionItemCollection<StateToken> contentActions = addItem(state.getTitle(), state.getTypeId(),
- stateContent.getMimeType(), stateContent.getStatus(), stateToken, container.getStateToken(),
- rights, false);
- final ActionItemCollection<StateToken> containerActions = actionRegistry.getCurrentActions(
- container.getStateToken(), container.getTypeId(), session.isLogged(), containerRights, true);
- actionItems.addAll(containerActions);
- actionItems.addAll(contentActions);
-
- } else {
- rights = containerRights;
- final ActionItemCollection<StateToken> containerActions = addItem(container.getName(),
- container.getTypeId(), null, ContentStatusDTO.publishedOnline, container.getStateToken(),
- container.getStateToken().copy().setFolder(container.getParentFolderId()), containerRights, false);
- actionItems.addAll(containerActions);
- }
-
- actionsByItem.put(stateToken, actionItems);
-
- // Process container childs
- createChildItems(container, containerRights);
-
- // Finaly
- if (mustEditOnNextStateChange()) {
- // Code smell
- selectItem(stateToken);
- editItem(stateToken);
- setEditOnNextStateChange(false);
- } else {
- if (select) {
- selectItem(stateToken);
- }
- }
- toolbar.attach();
+ protected void gotoToken(final String token) {
+ stateManager.gotoToken(token);
}
protected void onItemRename(final String token, final String newName, final String oldName) {
@@ -263,18 +182,31 @@
return toolbarActions;
}
- private void confRenameListener() {
+ private void addListeners() {
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
+ public void onEvent(final UserInfoDTO parameter) {
+ clear();
+ }
+ });
+ session.onUserSignOut(new Listener0() {
+ public void onEvent() {
+ clear();
+ }
+ });
+ }
+
+ private void addRenameListener() {
Listener2<StateToken, String> onSuccess = new Listener2<StateToken, String>() {
public void onEvent(StateToken token, String newName) {
setItemText(token, newName);
}
};
- renameAction.onSuccess(onSuccess);
Listener2<StateToken, String> onFail = new Listener2<StateToken, String>() {
public void onEvent(StateToken token, String oldName) {
setItemText(token, oldName);
}
};
+ renameAction.onSuccess(onSuccess);
renameAction.onFail(onFail);
}
@@ -306,7 +238,7 @@
}
private String genId(final StateToken token) {
- return "k-" + token.toString().replace(StateToken.SEPARATOR, "-");
+ return "k-cnav-" + token.toString().replace(StateToken.SEPARATOR, "-");
}
private String getIcon(final StateToken token, final String contentTypeId, final BasicMimeTypeDTO mimeType) {
@@ -328,7 +260,78 @@
}
}
+ private void selectOrEditNode(final boolean select, final StateToken stateToken) {
+ // Finaly
+ if (editOnNextStateChange) {
+ // Code smell
+ selectItem(stateToken);
+ editItem(stateToken);
+ setEditOnNextStateChange(false);
+ } else {
+ if (select) {
+ selectItem(stateToken);
+ }
+ }
+ }
+
private void setItemText(final StateToken stateToken, final String name) {
view.setItemText(genId(stateToken), name);
}
+
+ private void setStateContainer(final StateContainerDTO state, final boolean select) {
+ final StateToken stateToken = state.getStateToken();
+ boolean isContent = (state instanceof StateContentDTO);
+ StateContentDTO stateContent = null;
+
+ final ContainerDTO container = state.getContainer();
+ final AccessRightsDTO containerRights = state.getContainerRights();
+ AccessRightsDTO rights;
+
+ showRootFolder(state, containerRights);
+
+ // Do the path to our current content
+ createTreePath(stateToken, container.getAbsolutePath(), containerRights);
+
+ // Process our current content/container
+ final ActionItemCollection<StateToken> actionItems = new ActionItemCollection<StateToken>();
+
+ if (isContent) {
+ stateContent = (StateContentDTO) state;
+ rights = stateContent.getContentRights();
+ final ActionItemCollection<StateToken> contentActions = addItem(state.getTitle(), state.getTypeId(),
+ stateContent.getMimeType(), stateContent.getStatus(), stateToken, container.getStateToken(),
+ rights, false);
+ final ActionItemCollection<StateToken> containerActions = actionRegistry.getCurrentActions(
+ container.getStateToken(), container.getTypeId(), session.isLogged(), containerRights, true);
+ actionItems.addAll(containerActions);
+ actionItems.addAll(contentActions);
+ } else {
+ rights = containerRights;
+ final ActionItemCollection<StateToken> containerActions = addItem(container.getName(),
+ container.getTypeId(), null, ContentStatusDTO.publishedOnline, container.getStateToken(),
+ container.getStateToken().copy().setFolder(container.getParentFolderId()), containerRights, false);
+ actionItems.addAll(containerActions);
+ }
+ view.setEditable(rights.isEditable());
+
+ actionsByItem.put(stateToken, actionItems);
+
+ // Process container childs
+ createChildItems(container, containerRights);
+
+ selectOrEditNode(select, stateToken);
+
+ toolbar.attach();
+ }
+
+ private void showRootFolder(final StateContainerDTO state, final AccessRightsDTO containerRights) {
+ // If container is not a root folder process root (add
+ // childs to view)
+ final ContainerDTO root = state.getRootContainer();
+ if (root != null) {
+ // container is not root
+ view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken());
+ createChildItems(root, containerRights);
+ }
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLink.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLink.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLink.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -18,8 +18,12 @@
*
*/package org.ourproject.kune.workspace.client.sitebar.sitepublic;
+import org.ourproject.kune.platf.client.dto.StateAbstractDTO;
+
public interface SitePublicSpaceLink {
+ void setState(StateAbstractDTO state);
+
void setVisible(boolean visible);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -21,7 +21,6 @@
import org.ourproject.kune.platf.client.services.Images;
import org.ourproject.kune.platf.client.ui.IconLabel;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.skel.SimpleToolbar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -45,7 +44,7 @@
publicHP = new HorizontalPanel();
gotoPublic = new IconLabel(img.anybody(), i18n.t("Public Space"), false);
gotoPublic.ensureDebugId(SITE_GOTO_PUBLIC);
- contentNoPublic = new IconLabel(img.anybody(), i18n.t("This content is not public"));
+ contentNoPublic = new IconLabel(img.anybody(), i18n.t("This is not public"));
contentNoPublic.ensureDebugId(SITE_CONTENT_NO_PUBLIC);
publicHP.add(gotoPublic);
publicHP.add(contentNoPublic);
@@ -60,9 +59,10 @@
gotoPublic();
}
});
- gotoPublic.setTitle(i18n.t("Leave the workspace and go to this group public space") + Site.IN_DEVELOPMENT);
+ gotoPublic.setTitle(i18n.t("Leave the workspace and go to this group public space"));
gotoPublic.addStyleName("k-sitebar-labellink");
contentNoPublic.addStyleName("k-sitebar-labellink");
+
}
public void attach() {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -19,9 +19,11 @@
*/package org.ourproject.kune.workspace.client.sitebar.sitepublic;
import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.GroupListDTO;
import org.ourproject.kune.platf.client.dto.StateAbstractDTO;
import org.ourproject.kune.platf.client.dto.StateContainerDTO;
+import org.ourproject.kune.platf.client.dto.StateContentDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.state.StateManager;
@@ -34,11 +36,7 @@
public SitePublicSpaceLinkPresenter(final StateManager stateManager) {
stateManager.onStateChanged(new Listener<StateAbstractDTO>() {
public void onEvent(final StateAbstractDTO state) {
- if (state instanceof StateContainerDTO) {
- setState((StateContainerDTO) state);
- } else {
- view.detach();
- }
+ setState(state);
}
});
}
@@ -51,21 +49,34 @@
this.view = view;
}
+ public void setState(final StateAbstractDTO state) {
+ if (state instanceof StateContainerDTO) {
+ final StateToken token = state.getStateToken();
+ if (((StateContainerDTO) state).getAccessLists().getViewers().getMode().equals(GroupListDTO.EVERYONE)) {
+ final String publicUrl = token.getPublicUrl();
+ view.setContentGotoPublicUrl(publicUrl);
+ if (state instanceof StateContentDTO) {
+ StateContentDTO content = (StateContentDTO) state;
+ if (content.getStatus().equals(ContentStatusDTO.publishedOnline)) {
+ view.setContentPublic(true);
+ } else {
+ view.setContentPublic(false);
+ }
+ } else {
+ view.setContentPublic(true);
+ }
+ } else {
+ view.setContentPublic(false);
+ }
+ view.attach();
+ view.setVisible(true);
+ } else {
+ view.detach();
+ }
+ }
+
public void setVisible(final boolean visible) {
view.setVisible(visible);
}
- private void setState(final StateContainerDTO state) {
- final StateToken token = state.getStateToken();
- if (state.getAccessLists().getViewers().getMode().equals(GroupListDTO.EVERYONE)) {
- final String publicUrl = token.getPublicUrl();
- view.setContentGotoPublicUrl(publicUrl);
- view.setContentPublic(true);
- } else {
- view.setContentPublic(false);
- }
- view.attach();
- view.setVisible(true);
- }
-
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -78,5 +78,4 @@
public void setContentTitleVisible(final boolean visible) {
titleLabel.setVisible(visible);
}
-
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -59,7 +59,7 @@
}
}
});
- createRenameListeners();
+ addRenameListeners();
}
public View getView() {
@@ -83,18 +83,18 @@
renameAction.rename(token, oldName, newName);
}
- private void createRenameListeners() {
+ private void addRenameListeners() {
Listener2<StateToken, String> onSuccess = new Listener2<StateToken, String>() {
public void onEvent(StateToken token, String newName) {
view.setContentTitle(newName);
}
};
- renameAction.onSuccess(onSuccess);
Listener2<StateToken, String> onFail = new Listener2<StateToken, String>() {
public void onEvent(StateToken token, String oldName) {
view.setContentTitle(oldName);
}
};
+ renameAction.onSuccess(onSuccess);
renameAction.onFail(onFail);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/RenameAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/RenameAction.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/RenameAction.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -1,5 +1,6 @@
package org.ourproject.kune.workspace.client.title;
+import org.ourproject.kune.platf.client.dto.StateAbstractDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.NameInUseException;
import org.ourproject.kune.platf.client.errors.NameNotPermittedException;
@@ -39,7 +40,7 @@
public void rename(final StateToken token, final String oldName, final String newName) {
if (!newName.equals(oldName)) {
Site.showProgress(i18n.t("Renaming"));
- final AsyncCallback<String> asyncCallback = new AsyncCallback<String>() {
+ final AsyncCallback<StateAbstractDTO> asyncCallback = new AsyncCallback<StateAbstractDTO>() {
public void onFailure(final Throwable caught) {
Site.hideProgress();
try {
@@ -56,9 +57,10 @@
onFail.fire(token, oldName);
}
- public void onSuccess(final String finalNewName) {
+ public void onSuccess(final StateAbstractDTO state) {
Site.hideProgress();
- onSuccess.fire(token, finalNewName);
+ session.setCurrentState(state);
+ onSuccess.fire(token, state.getTitle());
}
};
if (token.isComplete()) {
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2009-01-21 01:38:59 UTC (rev 1036)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2009-01-26 17:13:03 UTC (rev 1037)
@@ -13,6 +13,7 @@
import org.ourproject.kune.docs.server.DocumentServerTool;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
import org.ourproject.kune.platf.client.dto.ContentSimpleDTO;
+import org.ourproject.kune.platf.client.dto.StateAbstractDTO;
import org.ourproject.kune.platf.client.dto.StateContainerDTO;
import org.ourproject.kune.platf.client.dto.StateContentDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -88,9 +89,9 @@
final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(),
newFolder.getId().toString(), null);
- String result = contentService.renameContainer(getHash(), folderToken, newTitle);
+ StateAbstractDTO result = contentService.renameContainer(getHash(), folderToken, newTitle);
- assertEquals(newTitle, result);
+ assertEquals(newTitle, result.getTitle());
final StateToken newFolderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(),
newFolder.getId().toString(), null);
@@ -128,9 +129,9 @@
final String newTitle = "folder new name";
final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(),
folder.getId().toString(), null);
- final String result = contentService.renameContainer(getHash(), folderToken, newTitle);
+ final StateAbstractDTO result = contentService.renameContainer(getHash(), folderToken, newTitle);
- assertEquals(newTitle, result);
+ assertEquals(newTitle, result.getTitle());
final ContainerDTO folderAgain = getSiteDefaultContent().getContainer();
@@ -193,9 +194,9 @@
newTitle = "folder last name";
- final String result = contentService.renameContainer(getHash(), newState.getStateToken(), newTitle);
+ final StateAbstractDTO result = contentService.renameContainer(getHash(), newState.getStateToken(), newTitle);
- assertEquals(newTitle, result);
+ assertEquals(newTitle, result.getTitle());
final StateContainerDTO folderAgain = (StateContainerDTO) contentService.getContent(getHash(),
newState.getStateToken());
1
0
Author: vjrj
Date: 2009-01-21 02:38:59 +0100 (Wed, 21 Jan 2009)
New Revision: 1036
Modified:
trunk/TODO
Log:
blog/wiki converters in TODO
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2009-01-20 20:22:07 UTC (rev 1035)
+++ trunk/TODO 2009-01-21 01:38:59 UTC (rev 1036)
@@ -349,6 +349,9 @@
CLOSED: [2009-01-03 sáb 01:37]
* LONG-TERM
+** <s> integrate some blog/wiki converter:
+ http://code.google.com/p/google-blog-converters-appengine/
+ http://toolserver.org/~merphant/wiki2html/
** Think about recommendations/suggestions
http://taste.sourceforge.net/
* IDEAS
1
0
Author: jdelacueva
Date: 2009-01-20 21:22:07 +0100 (Tue, 20 Jan 2009)
New Revision: 1035
Modified:
trunk/doc/kune-ene-09.pdf
Log:
Reflecting in pdf changes made in odp file: slides 5, 7, 9, 10, 11, 13, 14, 16, 17, 20, 21 and 22
Modified: trunk/doc/kune-ene-09.pdf
===================================================================
(Binary files differ)
1
0
Author: jdelacueva
Date: 2009-01-20 21:01:35 +0100 (Tue, 20 Jan 2009)
New Revision: 1034
Modified:
trunk/doc/kune-ene-09.odp
Log:
Changes made in slides 5, 7, 9, 10, 11, 13, 14, 16, 17, 20, 21 and 22
Modified: trunk/doc/kune-ene-09.odp
===================================================================
(Binary files differ)
1
0
Author: vjrj
Date: 2009-01-19 10:17:59 +0100 (Mon, 19 Jan 2009)
New Revision: 1033
Added:
trunk/src/main/java/org/ourproject/kune/app/public/css/img/link.gif
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstract.java
Modified:
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
trunk/src/main/java/org/ourproject/kune/platf/client/app/TextEditorInsertElementGroup.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementView.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmail.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmailPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExt.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtView.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocal.java
trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocalPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/options/AbstractOptionsPanel.java
trunk/src/test/java/org/ourproject/kune/platf/client/ui/TextUtilsTest.java
Log:
Complete - task Insert link improvements (preview, better url checks, form reset)
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-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2009-01-19 09:17:59 UTC (rev 1033)
@@ -41,4 +41,4 @@
padding: 1px 0px 1px 1px;
text-decoration:none;
}
-*/.k-textlinethrough{text-decoration:line-through;color:red;}.k-textnormal{text-decoration:inherit;color:green;}.k-textunderline{text-decoration:underline;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
+*/.k-textlinethrough{text-decoration:line-through;color:red;}.k-textnormal{text-decoration:inherit;color:green;}.k-textunderline{text-decoration:underline;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
Added: trunk/src/main/java/org/ourproject/kune/app/public/css/img/link.gif
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/app/public/css/img/link.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2009-01-19 09:17:59 UTC (rev 1033)
@@ -817,6 +817,10 @@
vertical-align: bottom;
}
+.k-link-icon {
+ background-image: url(img/link.gif) !important;
+}
+
.k-options-icon {
background-image: url(img/emblem-system.gif) !important;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/app/TextEditorInsertElementGroup.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/app/TextEditorInsertElementGroup.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/app/TextEditorInsertElementGroup.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -18,6 +18,8 @@
*
*/package org.ourproject.kune.platf.client.app;
+import org.ourproject.kune.workspace.client.editor.insert.abstractlink.TextEditorInsertAbstract;
+
import com.calclab.suco.client.ioc.Container;
import com.calclab.suco.client.ioc.Provider;
import com.calclab.suco.client.ioc.decorator.ProviderCollection;
@@ -37,7 +39,7 @@
public void resetAll() {
for (final Provider<?> p : getProviders()) {
- // (TextEditorInsertAbstractView) p.get().get).clear();
+ ((TextEditorInsertAbstract) p.get()).reset();
}
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -85,6 +85,7 @@
import org.ourproject.kune.workspace.client.editor.insert.linkext.TextEditorInsertLinkExt;
import org.ourproject.kune.workspace.client.editor.insert.linkext.TextEditorInsertLinkExtPanel;
import org.ourproject.kune.workspace.client.editor.insert.linkext.TextEditorInsertLinkExtPresenter;
+import org.ourproject.kune.workspace.client.editor.insert.linkext.TextEditorInsertLinkExtView;
import org.ourproject.kune.workspace.client.editor.insert.linklocal.TextEditorInsertLinkLocal;
import org.ourproject.kune.workspace.client.editor.insert.linklocal.TextEditorInsertLinkLocalPanel;
import org.ourproject.kune.workspace.client.editor.insert.linklocal.TextEditorInsertLinkLocalPresenter;
@@ -403,7 +404,7 @@
public TextEditorInsertLinkExt create() {
final TextEditorInsertLinkExtPresenter presenter = new TextEditorInsertLinkExtPresenter(
$(TextEditorInsertElement.class));
- final TextEditorInsertLinkExtPanel panel = new TextEditorInsertLinkExtPanel(presenter,
+ final TextEditorInsertLinkExtView panel = new TextEditorInsertLinkExtPanel(presenter,
$(I18nTranslationService.class));
presenter.init(panel);
return presenter;
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-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -18,7 +18,6 @@
*
*/package org.ourproject.kune.platf.client.ui.dialogs;
-import com.allen_sauer.gwt.log.client.Log;
import com.gwtext.client.core.Position;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.PaddedPanel;
@@ -93,7 +92,6 @@
}
public void reset() {
- Log.info("Reset------------------");
form.getForm().reset();
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPanel.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementPanel.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -15,10 +15,10 @@
public TextEditorInsertElementPanel(final TextEditorInsertElementPresenter presenter, final WorkspaceSkeleton ws,
Images images, I18nTranslationService i18n, final TextEditorInsertElementGroup textEditorInsertElementGroup) {
- super(TEXT_EDT_INSERT_DIALOG, i18n.tWithNT("Insert an element",
+ super(TEXT_EDT_INSERT_DIALOG, i18n.tWithNT("Insert a link",
"Option in a text editor to insert links and other elements"), 380, HEIGHT + 90, 380, HEIGHT + 90,
true, images, TEXT_EDT_INSERT_DIALOG_ERROR_ID);
- // super.setIconCls("k-options-icon");
+ super.setIconCls("k-link-icon");
this.textEditorInsertElementGroup = textEditorInsertElementGroup;
super.addHideListener(new Listener0() {
public void onEvent() {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementView.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/TextEditorInsertElementView.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -4,5 +4,5 @@
import org.ourproject.kune.workspace.client.options.AbstractOptionsView;
public interface TextEditorInsertElementView extends AbstractOptionsView, View {
- int HEIGHT = 200;
+ int HEIGHT = 225;
}
Added: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstract.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstract.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstract.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -0,0 +1,7 @@
+package org.ourproject.kune.workspace.client.editor.insert.abstractlink;
+
+public interface TextEditorInsertAbstract {
+
+ void reset();
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/TextEditorInsertAbstractPresenter.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -3,7 +3,7 @@
import org.ourproject.kune.platf.client.View;
import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElement;
-public class TextEditorInsertAbstractPresenter {
+public class TextEditorInsertAbstractPresenter implements TextEditorInsertAbstract {
private TextEditorInsertAbstractView view;
private final TextEditorInsertElement editorInsertElement;
@@ -23,6 +23,10 @@
public void onInsert(String name, String link) {
editorInsertElement.fireOnInsert(name, link);
+ reset();
+ }
+
+ public void reset() {
view.reset();
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmail.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmail.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmail.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -1,5 +1,7 @@
package org.ourproject.kune.workspace.client.editor.insert.linkemail;
-public interface TextEditorInsertLinkEmail {
+import org.ourproject.kune.workspace.client.editor.insert.abstractlink.TextEditorInsertAbstract;
+public interface TextEditorInsertLinkEmail extends TextEditorInsertAbstract {
+
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmailPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmailPresenter.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/TextEditorInsertLinkEmailPresenter.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -10,7 +10,4 @@
super(editorInsertElement);
}
- public void init(TextEditorInsertLinkEmailView view) {
- super.init(view);
- }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExt.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExt.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExt.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -1,5 +1,7 @@
package org.ourproject.kune.workspace.client.editor.insert.linkext;
-public interface TextEditorInsertLinkExt {
+import org.ourproject.kune.workspace.client.editor.insert.abstractlink.TextEditorInsertAbstract;
+public interface TextEditorInsertLinkExt extends TextEditorInsertAbstract {
+
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPanel.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPanel.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -1,19 +1,24 @@
package org.ourproject.kune.workspace.client.editor.insert.linkext;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
+import org.ourproject.kune.platf.client.ui.TextUtils;
import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm;
import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElementView;
+import com.google.gwt.user.client.ui.Frame;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.PaddedPanel;
+import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
-import com.gwtext.client.widgets.form.VType;
+import com.gwtext.client.widgets.layout.FitLayout;
public class TextEditorInsertLinkExtPanel extends DefaultForm implements TextEditorInsertLinkExtView {
public static final String LINK_FIELD = "k-teilep-link-f";
- private final TextField linkField;
+ final TextField linkField;
+ final Panel previewPanel;
public TextEditorInsertLinkExtPanel(final TextEditorInsertLinkExtPresenter presenter,
final I18nTranslationService i18n) {
@@ -23,7 +28,8 @@
linkField = new TextField();
linkField.setTabIndex(1);
linkField.setFieldLabel(i18n.t("External link (URL)"));
- linkField.setVtype(VType.URL);
+ linkField.setRegex(TextUtils.URL_REGEXP);
+ linkField.setRegexText(i18n.t("The link should be a URL in the format 'http://www.domain.com'"));
linkField.setName(LINK_FIELD);
linkField.setWidth(DEF_FIELD_WIDTH);
linkField.setAllowBlank(false);
@@ -32,19 +38,47 @@
linkField.setValidationEvent(false);
linkField.setId(LINK_FIELD);
add(linkField);
+ previewPanel = new Panel();
+ previewPanel.setLayout(new FitLayout());
+ previewPanel.setHeight(125);
+ add(new PaddedPanel(previewPanel, 0));
+ Button preview = new Button(i18n.t("Preview"));
+ preview.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(Button button, EventObject e) {
+ presenter.onPreview();
+ }
+ });
+ addButton(preview);
+
Button insert = new Button(i18n.t("Insert"));
insert.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(Button button, EventObject e) {
- if (getFormPanel().getForm().isValid()) {
- presenter.onInsert("", linkField.getRawValue());
- }
+ presenter.onInsert();
}
});
addButton(insert);
}
- public void clear() {
+ public String getUrl() {
+ return linkField.getRawValue();
+ }
+
+ @Override
+ public void reset() {
super.reset();
+ previewPanel.clear();
}
+
+ public void setPreviewUrl(String url) {
+ Frame previewFrame = new Frame(url);
+ previewPanel.clear();
+ previewPanel.add(previewFrame);
+ previewPanel.doLayout();
+ }
+
+ public void setUrl(String url) {
+ linkField.setValue(url);
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPresenter.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtPresenter.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -1,16 +1,60 @@
package org.ourproject.kune.workspace.client.editor.insert.linkext;
+import org.ourproject.kune.platf.client.ui.TextUtils;
import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElement;
import org.ourproject.kune.workspace.client.editor.insert.abstractlink.TextEditorInsertAbstractPresenter;
public class TextEditorInsertLinkExtPresenter extends TextEditorInsertAbstractPresenter implements
TextEditorInsertLinkExt {
+ interface Action {
+ void onValid(String url);
+ }
+
+ private TextEditorInsertLinkExtView view;
+
public TextEditorInsertLinkExtPresenter(TextEditorInsertElement editorInsertElement) {
super(editorInsertElement);
}
public void init(TextEditorInsertLinkExtView view) {
super.init(view);
+ this.view = view;
}
+
+ public void onInsert() {
+ doActionIfValid(new Action() {
+ public void onValid(String url) {
+ onInsert("", url);
+ }
+ });
+ }
+
+ public void onPreview() {
+ doActionIfValid(new Action() {
+ public void onValid(String url) {
+ view.setPreviewUrl(url);
+ }
+ });
+ }
+
+ private void doActionIfValid(Action action) {
+ String url = view.getUrl();
+ if (url.matches(TextUtils.URL_REGEXP)) {
+ action.onValid(url);
+ } else {
+ if (!url.startsWith("http://")) {
+ url = "http://" + url;
+ if (url.matches(TextUtils.URL_REGEXP)) {
+ view.setUrl(url);
+ action.onValid(url);
+ } else {
+ view.isValid();
+ }
+ } else {
+ // Seems is not valid
+ view.isValid();
+ }
+ }
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtView.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/TextEditorInsertLinkExtView.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -3,4 +3,12 @@
import org.ourproject.kune.workspace.client.editor.insert.abstractlink.TextEditorInsertAbstractView;
public interface TextEditorInsertLinkExtView extends TextEditorInsertAbstractView {
+
+ public String getUrl();
+
+ public boolean isValid();
+
+ public void setPreviewUrl(String url);
+
+ public void setUrl(String url);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocal.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocal.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocal.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -1,5 +1,7 @@
package org.ourproject.kune.workspace.client.editor.insert.linklocal;
-public interface TextEditorInsertLinkLocal {
+import org.ourproject.kune.workspace.client.editor.insert.abstractlink.TextEditorInsertAbstract;
+public interface TextEditorInsertLinkLocal extends TextEditorInsertAbstract {
+
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocalPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocalPresenter.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/TextEditorInsertLinkLocalPresenter.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -10,7 +10,4 @@
super(editorInsertElement);
}
- public void init(TextEditorInsertLinkLocalView view) {
- super.init(view);
- }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/options/AbstractOptionsPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/options/AbstractOptionsPanel.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/options/AbstractOptionsPanel.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -137,6 +137,7 @@
private void createDialog() {
dialog = new BasicDialog(dialogId, title, modal, true, width, height, minWidth, minHeight);
+ dialog.setCollapsible(false);
messageErrorBar = new MessageToolbar(images, errorLabelId);
dialog.setBottomToolbar(messageErrorBar.getToolbar());
tabPanel = new TabPanel();
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/ui/TextUtilsTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/ui/TextUtilsTest.java 2009-01-16 13:29:28 UTC (rev 1032)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/TextUtilsTest.java 2009-01-19 09:17:59 UTC (rev 1033)
@@ -23,4 +23,21 @@
assertTrue(email.matches(TextUtils.EMAIL_REGEXP));
}
+ @Test
+ public void matchUrlWithHttp() {
+ String gnuUrl = "http://gnu.org";
+ assertTrue(gnuUrl.matches(TextUtils.URL_REGEXP));
+ }
+
+ @Test
+ public void matchUrlWithoutHttp() {
+ String gnuUrl = "gnu.org";
+ assertTrue(!gnuUrl.matches(TextUtils.URL_REGEXP));
+ }
+
+ @Test
+ public void notMatchWrongUrl() {
+ String someWrong = "some(a)email.com";
+ assertTrue(!someWrong.matches(TextUtils.URL_REGEXP));
+ }
}
1
0