You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2010/02/03 06:17:19 UTC

svn commit: r905887 - in /incubator/jspwiki/trunk/src/java/org/apache/wiki/tags: TabTag.java TabbedSectionTag.java

Author: ajaquith
Date: Wed Feb  3 05:17:19 2010
New Revision: 905887

URL: http://svn.apache.org/viewvc?rev=905887&view=rev
Log:
TabbedSectionTag gains an onclick() attribute that passes contents through to the underlying <div>. This feature is super-useful and enables the new preview functionality. Refactored TabTag to make it simpler.

Modified:
    incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabTag.java
    incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabbedSectionTag.java

Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabTag.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabTag.java?rev=905887&r1=905886&r2=905887&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabTag.java (original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabTag.java Wed Feb  3 05:17:19 2010
@@ -64,6 +64,8 @@
  * If the event is not specified, the default event will be used. If both
  * {@code url} and {@code beanclass} are specified, {@code beanclass} wins.
  * <em>Optional.</em></li>
+ * <li><b>onclick</b>(Pass-through) JavaScript to be executed after the
+ * tab is clicked, but before the contents are displayed. <em>Optional.</em></li>
  * </ul>
  * 
  * @since v2.3.63
@@ -72,199 +74,61 @@
 {
     private static final long serialVersionUID = -8534125226484616489L;
     
-    private final TabInfo m_tabInfo = new TabInfo();
+    private final Info m_info = new Info();
     
     /**
      * Lightweight class that holds information about TabTags.
      */
-    public static class TabInfo 
+    public static class Info implements Cloneable
     {
-        private String m_id = null;
-        
-        private String m_accesskey = null;
-
-        private String m_tabTitle = null;
-
-        private String m_tabTitleKey = null;
+        static final String ACCESS_KEY = "accessKey";
 
-        private String m_url = null;
-        
-        private Class<? extends ActionBean> m_beanclass = null;
-        
-        private String m_event = null;
+        static final String EVENT = "event";
         
-        private Map<String, String> m_containedParams;
-        
-        /**
-         * Sets the tab access key.
-         * 
-         * @param accessKey the access key
-         */
-        public void setAccesskey( String accessKey )
-        {
-            m_accesskey = TextUtil.replaceEntities( accessKey ); // take only the
-            // first char
-        }
+        static final String ID = "id";
 
-        /**
-         * Sets the tab beanclass.
-         * @param beanclass the ActionBean class name
-         * @throws ClassNotFoundException 
-         */
-        @SuppressWarnings("unchecked")
-        public void setBeanclass( String beanclass ) throws ClassNotFoundException
-        {
-            m_beanclass = (Class<? extends ActionBean>)Class.forName( beanclass );
-        }
-        
-        /**
-         * Sets the tab event.
-         * @param event the ActionBean event handler name
-         */
-        public void setEvent( String event )
-        {
-            m_event = TextUtil.replaceEntities( event );
-        }
-        
-        /**
-         * Sets the id.
-         * @param id
-         */
-        public void setId( String id )
-        {
-            m_id = id;
-        }
-        
-        /**
-         * Sets the tab title.
-         * 
-         * @param title the tab title
-         */
-        public void setTitle( String title )
-        {
-            m_tabTitle = TextUtil.replaceEntities( title );
-        }
+        static final String ON_CLICK = "onClick";
 
-        /**
-         * Sets the tab title key.
-         * 
-         * @param key the tab title key
-         */
-        public void setTitleKey( String key )
-        {
-            m_tabTitleKey = TextUtil.replaceEntities( key );
-        }
+        static final String TITLE = "tabTitle";
 
-        /**
-         * Sets the tab URL.
-         * 
-         * @param url the URL
-         */
-        public void setUrl( String url )
-        {
-            m_url = TextUtil.replaceEntities( url );
-        }
-        
-        /**
-         * Returns the tab access key.
-         * 
-         * @return the access key
-         */
-        public String getAccesskey()
-        {
-            return m_accesskey;
-        }
-        
-        /**
-         * Returns the tab's ActionBean class name for generating an URL.
-         * @return the bean class
-         */
-        public Class<? extends ActionBean> getBeanclass()
-        {
-            return m_beanclass;
-        }
-        
-        /**
-         * Returns any parameters passed to the Tab tag.
-         * @return the params
-         */
-        public Map<String,String> getContainedParameters()
-        {
-            if ( m_containedParams == null )
-            {
-                m_containedParams = new HashMap<String,String>();
-            }
-            return m_containedParams;
-        }
-        
-        /**
-         * Returns the tab's ActionBean event name for generating an URL.
-         * @return the ActionBean event name, or {@code null} if the default
-         * should be used
-         */
-        public String getEvent()
-        {
-            return m_event;
-        }
-        
-        /**
-         * Returns the ID for this tab.
-         * @return id
-         */
-        public String getId()
-        {
-            return m_id;
-        }
+        static final String TITLE_KEY = "tabTitleKey";
+
+        static final String URL = "url";
         
         /**
-         * Returns the tab title.
-         * @return the title
+         * The tab's ActionBean class name for generating an URL.
          */
-        public String getTitle()
-        {
-            return m_tabTitle;
-        }
+        Class<? extends ActionBean> beanclass = null;
         
         /**
-         * Returns the i18n key used to generate the tab title.
-         * @return the title key
+         * Parameters passed to the Tab tag.
          */
-        public String getTitleKey()
-        {
-            return m_tabTitleKey;
-        }
+        final Map<String, String> containedParams = new HashMap<String,String>();
         
         /**
-         * Returns the URL for this tab, if supplied.
-         * 
-         * @return the URL
+         * The String options passed to the TabTag object.
          */
-        public String getUrl()
-        {
-            return m_url;
-        }
+        final Map<String,String> options = new HashMap<String,String>();
 
         /**
-         * Adds a nested parameter value to the tab
-         * @param name the parameter name
-         * @param value the value
+         * Clones the Info object.
          */
-        public void setContainedParameter( String name, String value )
+        public Object clone()
         {
-            if( name != null )
+            Info info = new Info();
+            if ( beanclass != null )
             {
-                if( m_containedParams == null )
-                {
-                    m_containedParams = new HashMap<String, String>();
-                }
-                m_containedParams.put( name, value );
+                info.beanclass = beanclass;
             }
+            info.containedParams.putAll( containedParams );
+            info.options.putAll( options );
+            return info;
         }
     }
 
-    protected TabInfo getTabInfo()
+    protected Info getTabInfo()
     {
-        return m_tabInfo;
+        return m_info;
     }
     
     /**
@@ -294,13 +158,9 @@
     public void doFinally()
     {
         super.doFinally();
-        m_tabInfo.m_accesskey = null;
-        m_tabInfo.m_beanclass = null;
-        m_tabInfo.m_containedParams = null;
-        m_tabInfo.m_event = null;
-        m_tabInfo.m_tabTitle = null;
-        m_tabInfo.m_tabTitleKey = null;
-        m_tabInfo.m_url = null;
+        m_info.beanclass = null;
+        m_info.containedParams.clear();
+        m_info.options.clear();
     }
 
     /**
@@ -316,7 +176,8 @@
         {
             throw new JspTagException( "Tab Tag without \"id\" attribute" );
         }
-        if( m_tabInfo.m_tabTitle == null && m_tabInfo.m_tabTitleKey == null )
+        if( m_info.options.get( Info.TITLE ) == null && 
+            m_info.options.get( Info.TITLE_KEY ) == null )
         {
             throw new JspTagException( "Tab Tag without \"tabTitle\" or \"tabTitleKey\" attribute" );
         }
@@ -338,13 +199,14 @@
     }
     
     /**
-     * {@inheritDoc}. Also sets the ID for the embedded {@link TabInfo object}.
+     * {@inheritDoc}. Also sets the ID for the embedded {@link Info object}.
+     * This attribute is required.
      */
     @Override
     public void setId( String id )
     {
         super.setId( id );
-        m_tabInfo.setId( id );
+        m_info.options.put( Info.ID, id );
     }
     
     /**
@@ -354,7 +216,10 @@
      */
     public void setAccesskey( String accessKey )
     {
-        m_tabInfo.setAccesskey( accessKey );
+        if ( accessKey != null && accessKey.length() > 0 )
+        {
+            m_info.options.put( Info.ACCESS_KEY, accessKey.substring( 0, 1 ) );
+        }
     }
     
     /**
@@ -363,9 +228,10 @@
      * @param beanclass the ActionBean class name
      * @throws ClassNotFoundException if the bean class cannot be located or loaded
      */
+    @SuppressWarnings("unchecked")
     public void setBeanclass( String beanclass ) throws ClassNotFoundException
     {
-        m_tabInfo.setBeanclass( beanclass );
+        m_info.beanclass = (Class<? extends ActionBean>)Class.forName( beanclass );
     }
 
     /**
@@ -373,7 +239,7 @@
      */
     public void setContainedParameter( String name, String value )
     {
-        m_tabInfo.setContainedParameter( name, value );
+        m_info.containedParams.put( name, value );
     }
 
     /**
@@ -384,17 +250,27 @@
      */
     public void setEvent( String event )
     {
-        m_tabInfo.setEvent( event );
+        m_info.options.put( Info.EVENT, TextUtil.replaceEntities( event ) );
     }
 
     /**
+     * Sets the JavaScript to execute after the tab is clicked, but before
+     * the contents are shown.
+     * @param onclick the code
+     */
+    public void setOnclick( String onclick )
+    {
+        m_info.options.put( Info.ON_CLICK, onclick );
+    }
+    
+    /**
      * Sets the tab title.
      * 
      * @param title the tab title
      */
     public void setTitle( String title )
     {
-        m_tabInfo.setTitle( title );
+        m_info.options.put( Info.TITLE, TextUtil.replaceEntities( title ) );
     }
 
     /**
@@ -404,7 +280,7 @@
      */
     public void setTitleKey( String key )
     {
-        m_tabInfo.setTitleKey( key );
+        m_info.options.put( Info.TITLE_KEY, TextUtil.replaceEntities( key ) );
     }
 
     /**
@@ -414,6 +290,6 @@
      */
     public void setUrl( String url )
     {
-        m_tabInfo.setUrl( url );
+        m_info.options.put( Info.URL, TextUtil.replaceEntities( url ) );
     }
 }

Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabbedSectionTag.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabbedSectionTag.java?rev=905887&r1=905886&r2=905887&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabbedSectionTag.java (original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/TabbedSectionTag.java Wed Feb  3 05:17:19 2010
@@ -38,7 +38,7 @@
 
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.i18n.InternationalizationManager;
-import org.apache.wiki.tags.TabTag.TabInfo;
+import org.apache.wiki.tags.TabTag.Info;
 
 /**
  * <p>
@@ -128,7 +128,7 @@
             super();
         }
 
-        private final List<TabTag.TabInfo> m_tabs = new ArrayList<TabTag.TabInfo>();
+        private final List<TabTag.Info> m_tabs = new ArrayList<TabTag.Info>();
 
         /**
          * Adds a child TabTag to the TabCollection. When the TabbedSection tag
@@ -148,29 +148,7 @@
                 throw new JspTagException( "Cannot add null TabTag." );
             }
 
-            TabInfo tabInfo = new TabInfo();
-            tabInfo.setAccesskey( tab.getTabInfo().getAccesskey() );
-            if ( tab.getTabInfo().getBeanclass() != null )
-            {
-                try
-                {
-                    tabInfo.setBeanclass( tab.getTabInfo().getBeanclass().getName() );
-                }
-                catch( ClassNotFoundException e )
-                {
-                    throw new JspTagException( "Could not set beanclass: " + e.getMessage() );
-                }
-            }
-            for ( Map.Entry<String,String> entry : tab.getTabInfo().getContainedParameters().entrySet() )
-            {
-                tabInfo.setContainedParameter( entry.getKey(), entry.getValue() );
-            }
-            tabInfo.setEvent( tab.getTabInfo().getEvent() );
-            tabInfo.setId( tab.getTabInfo().getId() );
-            tabInfo.setTitle( tab.getTabInfo().getTitle() );
-            tabInfo.setTitleKey( tab.getTabInfo().getTitleKey() );
-            tabInfo.setUrl( tab.getTabInfo().getUrl() );
-            m_tabs.add( tabInfo );
+            m_tabs.add( (Info)tab.getTabInfo().clone() );
         }
 
         /**
@@ -178,7 +156,7 @@
          * 
          * @return the list of tab
          */
-        public List<TabTag.TabInfo> getTabs()
+        public List<TabTag.Info> getTabs()
         {
             return m_tabs;
         }
@@ -233,7 +211,7 @@
 
         // Figure out the active (default) tab
         TabCollection tc = getTabContext( pageContext.getRequest() );
-        List<TabTag.TabInfo> tabs = tc.getTabs();
+        List<TabTag.Info> tabs = tc.getTabs();
 
         try
         {
@@ -242,18 +220,19 @@
             JspWriter writer = this.getPreviousOut();
 
             writer.append( "<div class=\"tabmenu\">\n" );
-            for( TabTag.TabInfo tab : tabs )
+            for( TabTag.Info tab : tabs )
             {
                 // Is this the default tab?
-                if( tab.getId().equals( m_defaultTabID ) )
+                String id = tab.options.get( Info.ID );
+                if( id.equals( m_defaultTabID ) )
                 {
-                    m_defaultTabID = tab.getId();
+                    m_defaultTabID = id;
                 }
 
-                // If default tag still not 't set, use the first one
+                // If default tag still not set, use the first one
                 if( m_defaultTabID == null || m_defaultTabID.length() == 0 )
                 {
-                    m_defaultTabID = tab.getId();
+                    m_defaultTabID = id;
                 }
 
                 // Generate each menu item div
@@ -295,32 +274,39 @@
      * Outputs a single menu item <code>div</code> element for a supplied tag.
      * 
      * @param writer the JspWriter to write the output to
-     * @param tab the TabInfo object containing information about the tab
+     * @param tab the TabTag.Info object containing information about the tab
      * @throws IOException
      */
-    private void writeTabMenuItem( JspWriter writer, TabTag.TabInfo tab ) throws IOException
+    private void writeTabMenuItem( JspWriter writer, TabTag.Info tab ) throws IOException
     {
         writer.append( "  <a" );
 
         // Generate the ID
-        writer.append( " id=\"menu-" + tab.getId() + "\"" );
+        String id = tab.options.get( Info.ID );
+        writer.append( " id=\"menu-" + id + "\"" );
 
         // Active tab?
-        if( tab.getId().equals( m_defaultTabID ) )
+        if( id.equals( m_defaultTabID ) )
         {
             writer.append( " class=\"activetab\"" );
         }
+
+        // Onclick event?
+        if ( tab.options.get( Info.ON_CLICK ) != null )
+        {
+            writer.append( " onclick=\""+ tab.options.get( Info.ON_CLICK ) + "\"" );
+        }
         
         // Generate the ActionBean event URL, if supplied
-        if ( tab.getBeanclass() != null )
+        if ( tab.beanclass != null )
         {
             HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
-            UrlBuilder builder = new UrlBuilder( request.getLocale(), tab.getBeanclass(), true );
-            if ( tab.getEvent() != null )
+            UrlBuilder builder = new UrlBuilder( request.getLocale(), tab.beanclass, true );
+            if ( tab.options.get( Info.EVENT ) != null )
             {
-                builder.setEvent( tab.getEvent() );
+                builder.setEvent( tab.options.get( Info.EVENT ) );
             }
-            for ( Map.Entry<String, String> entry : tab.getContainedParameters().entrySet() )
+            for ( Map.Entry<String, String> entry : tab.containedParams.entrySet() )
             {
                 builder.addParameter( entry.getKey(), entry.getValue() );
             }
@@ -333,27 +319,27 @@
         }
 
         // Generate the URL, if supplied
-        else if( tab.getUrl() != null )
+        else if( tab.options.get( Info.URL ) != null )
         {
-            writer.append( " href='" + tab.getUrl() + "'" );
+            writer.append( " href='" + tab.options.get( Info.URL ) + "'" );
         }
 
         // Generate the tab title
         String tabTitle = null;
-        if( tab.getTitleKey() != null )
+        if( tab.options.get( Info.TITLE_KEY ) != null )
         {
             Locale locale = pageContext.getRequest().getLocale();
             InternationalizationManager i18n = m_engine.getInternationalizationManager();
-            tabTitle = i18n.get( InternationalizationManager.TEMPLATES_BUNDLE, locale, tab.getTitleKey() );
+            tabTitle = i18n.get( InternationalizationManager.TEMPLATES_BUNDLE, locale, tab.options.get( Info.TITLE_KEY ) );
         }
         if( tabTitle == null )
         {
-            tabTitle = tab.getTitle();
+            tabTitle = tab.options.get( Info.TITLE );
         }
         writer.append( ">" );
 
         // Output the tab title
-        String accesskey = tab.getAccesskey();
+        String accesskey = tab.options.get( Info.ACCESS_KEY );
         if( tabTitle != null )
         {
             // Generate the access key, if supplied