Repository: roller
Updated Branches:
  refs/heads/bootstrap-ui 77e003d88 -> 840f46c63


More tweaks to Theme Edit page.


Project: http://git-wip-us.apache.org/repos/asf/roller/repo
Commit: http://git-wip-us.apache.org/repos/asf/roller/commit/840f46c6
Tree: http://git-wip-us.apache.org/repos/asf/roller/tree/840f46c6
Diff: http://git-wip-us.apache.org/repos/asf/roller/diff/840f46c6

Branch: refs/heads/bootstrap-ui
Commit: 840f46c63c86cbfe7da092ff0e956eac3fff3567
Parents: 77e003d
Author: Dave Johnson <[email protected]>
Authored: Sun Aug 19 16:26:15 2018 -0400
Committer: Dave Johnson <[email protected]>
Committed: Sun Aug 19 16:26:15 2018 -0400

----------------------------------------------------------------------
 .../weblogger/business/MediaFileManager.java    |   7 +
 .../business/jpa/JPAMediaFileManagerImpl.java   |  21 ++
 .../business/themes/ThemeManagerImpl.java       |  14 +-
 .../resources/ApplicationResources.properties   |   4 +-
 .../webapp/WEB-INF/jsps/editor/ThemeEdit.jsp    | 252 +++++++++++--------
 .../jsps/tiles/tiles-simple-tabbedpage.jsp      |  52 ++++
 app/src/main/webapp/WEB-INF/tiles.xml           |  15 +-
 app/src/main/webapp/roller-ui/styles/roller.css |  19 +-
 8 files changed, 266 insertions(+), 118 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/java/org/apache/roller/weblogger/business/MediaFileManager.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/roller/weblogger/business/MediaFileManager.java 
b/app/src/main/java/org/apache/roller/weblogger/business/MediaFileManager.java
index 71a7bcd..e345ddd 100644
--- 
a/app/src/main/java/org/apache/roller/weblogger/business/MediaFileManager.java
+++ 
b/app/src/main/java/org/apache/roller/weblogger/business/MediaFileManager.java
@@ -53,6 +53,13 @@ public interface MediaFileManager {
             RollerMessages errors) throws WebloggerException;
 
     /**
+     * Create theme media file.
+     * Same as createMediaFile() except no checks are done for uploads 
disabled, etc.
+     */
+    void createThemeMediaFile(Weblog weblog, MediaFile mediaFile,
+            RollerMessages errors) throws WebloggerException;
+
+    /**
      * Update metadata for a media file
      */
     void updateMediaFile(Weblog weblog, MediaFile mediaFile)

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAMediaFileManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAMediaFileManagerImpl.java
 
b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAMediaFileManagerImpl.java
index ab3dc7b..4ebc046 100644
--- 
a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAMediaFileManagerImpl.java
+++ 
b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAMediaFileManagerImpl.java
@@ -221,6 +221,27 @@ public class JPAMediaFileManagerImpl implements 
MediaFileManager {
         }
     }
 
+    public void createThemeMediaFile(Weblog weblog, MediaFile mediaFile,
+                                RollerMessages errors) throws 
WebloggerException {
+
+        FileContentManager cmgr = 
WebloggerFactory.getWeblogger().getFileContentManager();
+        strategy.store(mediaFile);
+
+        // Refresh associated parent for changes
+        roller.flush();
+        strategy.refresh(mediaFile.getDirectory());
+
+        // update weblog last modified date. date updated by saveWeblog()
+        roller.getWeblogManager().saveWeblog(weblog);
+
+        cmgr.saveFileContent(weblog, mediaFile.getId(),
+            mediaFile.getInputStream());
+
+        if (mediaFile.isImageFile()) {
+            updateThumbnail(mediaFile);
+        }
+    }
+
     private void updateThumbnail(MediaFile mediaFile) {
         try {
             FileContentManager cmgr = WebloggerFactory.getWeblogger()

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
 
b/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
index ed5f6a9..4f6367c 100644
--- 
a/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
+++ 
b/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
@@ -317,19 +317,15 @@ public class ThemeManagerImpl implements ThemeManager {
                                        justName = resourcePath;
 
                                } else {
-                                       justPath = resourcePath.substring(0,
-                                                       
resourcePath.lastIndexOf('/'));
+                                       justPath = resourcePath.substring(0, 
resourcePath.lastIndexOf('/'));
                                        if (!justPath.startsWith("/")) {
                         justPath = "/" + justPath;
                     }
-                                       justName = 
resourcePath.substring(resourcePath
-                                                       .lastIndexOf('/') + 1);
-                                       mdir = 
fileMgr.getMediaFileDirectoryByName(weblog,
-                                                       justPath);
+                                       justName = 
resourcePath.substring(resourcePath.lastIndexOf('/') + 1);
+                                       mdir = 
fileMgr.getMediaFileDirectoryByName(weblog, justPath);
                                        if (mdir == null) {
                                                log.debug("    Creating 
directory: " + justPath);
-                                               mdir = 
fileMgr.createMediaFileDirectory(weblog,
-                                                               justPath);
+                                               mdir = 
fileMgr.createMediaFileDirectory(weblog, justPath);
                                                roller.flush();
                                        }
                                }
@@ -354,7 +350,7 @@ public class ThemeManagerImpl implements ThemeManager {
                                log.debug("    Saving file: " + justName);
                                log.debug("    Saving in directory = " + 
mf.getDirectory());
                                RollerMessages errors = new RollerMessages();
-                               fileMgr.createMediaFile(weblog, mf, errors);
+                               fileMgr.createThemeMediaFile(weblog, mf, 
errors);
                                try {
                                        resource.getInputStream().close();
                                } catch (IOException ex) {

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/resources/ApplicationResources.properties
----------------------------------------------------------------------
diff --git a/app/src/main/resources/ApplicationResources.properties 
b/app/src/main/resources/ApplicationResources.properties
index 7f4b225..ce46a24 100644
--- a/app/src/main/resources/ApplicationResources.properties
+++ b/app/src/main/resources/ApplicationResources.properties
@@ -1285,7 +1285,7 @@ searchSummary.text=Showing {0} - {1} of total {2} search 
results
 # ----------------------------------------------------------------------- Theme
 
 themeEditor.title=Weblog Theme
-themeEditor.subtitle=Select theme for weblog <span>{0}</span>
+themeEditor.subtitle=Define the theme for weblog <span>{0}</span>.
 
 themeEditor.sharedTheme=Shared Theme
 themeEditor.sharedThemeDescription=This option is for users who don''t \
@@ -1303,6 +1303,8 @@ themeEditor.yourThemeStyleSheet=using the <em>Shared 
Theme</em> default styleshe
 
 themeEditor.youAreUsingACustomTheme=This weblog is using a custom theme.
 
+themeEditor.thisTheme=This theme:
+
 themeEditor.proposedChangeToShared=You are proposing to switch from a Custom 
Theme to a new Shared Theme.
 
 themeEditor.proposedSharedThemeChange=You are proposing to switch to a new 
Shared Theme.

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp
----------------------------------------------------------------------
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp 
b/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp
index 4a07c3e..53d27b1 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp
@@ -29,128 +29,142 @@
 
     <%-- Two choices side-by-side: choose Shared or Custom Theme --%>
 
-    <div class="row equal">
-
-        <div id="sharedChooser" class="col-md-6 panel">
-            <div class="panel-heading">
-                <h3 class="panel-title">
-                    <input id="sharedRadio" type="radio" name="themeType" 
value="shared"
-                           <s:if test="!customTheme">checked</s:if> 
onclick="proposeThemeTypeChange($(this))"/>&nbsp;
-                    <s:text name="themeEditor.sharedTheme"/>
-                </h3>
-            </div>
-            <div class="chooser panel-body">
-                <s:text name="themeEditor.sharedThemeDescription"/>
+    <div class="row row-display-flex">
+
+        <div class="col-xs-6">
+            <div class="panel panel-default">
+                <div class="panel-body" id="sharedChooser">
+                    <h3>
+                        <input id="sharedRadio" type="radio" name="themeType" 
value="shared"
+                               <s:if test="!customTheme">checked</s:if> 
onclick="proposeThemeTypeChange($(this))"/>&nbsp;
+                        <s:text name="themeEditor.sharedTheme"/>
+                    </h3>
+                    <s:text name="themeEditor.sharedThemeDescription"/>
+                </div>
             </div>
         </div>
 
-        <div id="customChooser" class="col-md-6 panel">
-            <div class="panel-heading">
-                <h3 class="panel-title">
-                    <input id="customRadio" type="radio" name="themeType" 
value="custom"
-                           <s:if test="customTheme">checked</s:if> 
onclick="proposeThemeTypeChange($(this))"/>&nbsp;
-                    <s:text name="themeEditor.customTheme"/>
-                </h3>
-            </div>
-            <div class="chooser panel-body">
-                <s:text name="themeEditor.customThemeDescription"/>
+        <div class="col-xs-6">
+            <div class="panel panel-default">
+                <div class="panel-body" id="customChooser">
+                    <h3>
+                        <input id="customRadio" type="radio" name="themeType" 
value="custom"
+                               <s:if test="customTheme">checked</s:if> 
onclick="proposeThemeTypeChange($(this))"/>&nbsp;
+                        <s:text name="themeEditor.customTheme"/>
+                    </h3>
+                    <s:text name="themeEditor.customThemeDescription"/>
+                </div>
             </div>
         </div>
 
     </div>
 
-    <%-- 
*********************************************************************************************************
 --%>
+    <%-- ================================================= --%>
 
-        <div id="sharedNoChange" style="display:none;">
-
-            <%-- you have shared theme X --%>
-            <p class="lead">
-                <s:text name="themeEditor.yourCurrentTheme"/>
-                <b><s:property value="actionWeblog.theme.name"/></b>
-                <s:if test="%{sharedThemeCustomStylesheet}">
-                    <s:text name="themeEditor.yourCustomStylesheet"/>
-                </s:if>
-                <s:else>
-                    <s:text name="themeEditor.yourThemeStyleSheet"/>
-                </s:else>
-            </p>
+    <div id="sharedNoChange" style="display:none;">
 
-        </div>
+        <%-- you have shared theme X --%>
+        <p class="lead">
+            <s:text name="themeEditor.yourCurrentTheme"/>
+            <b><s:property value="actionWeblog.theme.name"/></b>
+            <s:if test="%{sharedThemeCustomStylesheet}">
+                <s:text name="themeEditor.yourCustomStylesheet"/>
+            </s:if>
+            <s:else>
+                <s:text name="themeEditor.yourThemeStyleSheet"/>
+            </s:else>
+        </p>
 
-        <div id="themeChooser" style="display:none;">
+    </div>
 
-            <%-- theme selector with preview image --%>
-            <p><s:text name="themeEditor.selectTheme"/></p>
-            <p>
-                <s:select id="themeSelector" name="selectedThemeId" 
list="themes"
-                    listKey="id" listValue="name" size="1"
-                    
onchange="proposeSharedThemeChange(this[selectedIndex].value)"/>
-            </p>
-            <p id="themeDescription"></p>
-            <p><img id="themeThumbnail" src=""/></p>
+    <%-- ================================================= --%>
 
-        </div>
+    <div id="themeChooser" style="display:none;">
 
-        <div id="sharedChangeToShared" style="display:none;">
+        <%-- theme selector with preview image --%>
+        <p class="lead"><s:text name="themeEditor.selectTheme"/></p>
+        <p>
+            <s:select id="themeSelector" name="selectedThemeId" list="themes" 
style="width:20em"
+                listKey="id" listValue="name" size="1"
+                
onchange="proposeSharedThemeChange(this[selectedIndex].value)"/>
+        </p>
+        <p><s:text name="themeEditor.thisTheme"/> <p id="themeDescription"></p>
+        <p><img id="themeThumbnail" src=""/></p>
 
-            <div class="alert-warning" style="margin-top:3em; 
margin-bottom:2em; padding: 1em">
-                <s:text name="themeEditor.proposedSharedThemeChange"/>
-            </div>
+    </div>
 
-            <%-- Preview and Update buttons --%>
-            <p> <s:text name="themeEditor.previewDescription"/> </p>
-            <input type="button" name="themePreview" class="btn"
-                value="<s:text name='themeEditor.preview' />"
-                onclick="fullPreview($('#themeSelector').get(0))"/>
+    <%-- ================================================= --%>
 
-            <s:submit cssClass="btn btn-default" 
value="%{getText('themeEditor.save')}"/>
+    <div id="sharedChangeToShared" style="display:none;">
 
+        <div class="alert-warning" style="margin-top:3em; margin-bottom:2em; 
padding: 1em">
+            <s:text name="themeEditor.proposedSharedThemeChange"/>
         </div>
 
-        <div id="sharedChangeToCustom" style="display:none;">
+        <%-- Preview and Update buttons --%>
+        <p> <s:text name="themeEditor.previewDescription"/> </p>
+        <input type="button" name="themePreview" class="btn"
+            value="<s:text name='themeEditor.preview' />"
+            onclick="fullPreview($('#themeSelector').get(0))"/>
 
-            <div class="alert-warning" style="margin-top:3em; 
margin-bottom:2em; padding: 1em">
-                <s:text name="themeEditor.proposedSharedChangeToCustom"/>
-            </div>
+        <s:submit cssClass="btn btn-default" 
value="%{getText('themeEditor.save')}"/>
 
-            <s:if test="firstCustomization">
-                <p>
-                    <s:text name="themeEditor.importRequired"/>
-                    <s:hidden name="importTheme" value="true"/>
-                </p>
-            </s:if>
-            <s:else>
-                <p><s:text name="themeEditor.existingTemplatesWarning"/></p>
-                <s:checkbox name="importTheme" 
label="%{getText('themeEditor.importAndOverwriteTemplates')}"/>
-            </s:else>
+        <input type="button" class="btn" onclick="cancelChanges()" 
value="<s:text name='generic.cancel'/>" />
 
-            <%-- Update button --%>
-            <s:submit cssClass="btn btn-default" 
value="%{getText('themeEditor.save')}"/>
+    </div>
 
-        </div>
+    <%-- ================================================= --%>
 
-    <%-- 
*********************************************************************************************************
 --%>
+    <div id="sharedChangeToCustom" style="display:none;">
 
-        <div id="customNoChange" style="display:none;">
-            <p class="lead"><s:text 
name="themeEditor.youAreUsingACustomTheme"/></p>
+        <div class="alert-warning" style="margin-top:3em; margin-bottom:2em; 
padding: 1em">
+            <s:text name="themeEditor.proposedSharedChangeToCustom"/>
         </div>
 
-        <div id="customChangeToShared" style="display:none;">
+        <s:if test="firstCustomization">
+            <p>
+                <s:text name="themeEditor.importRequired"/>
+                <s:hidden name="importTheme" value="true"/>
+            </p>
+        </s:if>
+        <s:else>
+            <p><s:text name="themeEditor.existingTemplatesWarning"/></p>
+            <s:checkbox name="importTheme" 
label="%{getText('themeEditor.importAndOverwriteTemplates')}"/>
+        </s:else>
+
+        <%-- Update button --%>
+        <s:submit cssClass="btn btn-default" 
value="%{getText('themeEditor.save')}"/>
 
-            <div class="alert-warning" style="margin-top:3em; 
margin-bottom:2em; padding: 1em">
-                <s:text name="themeEditor.proposedChangeToShared"/>
-            </div>
+        <input type="button" class="btn" onclick="cancelChanges()" 
value="<s:text name='generic.cancel'/>" />
+
+    </div>
+
+    <%-- ================================================= --%>
+
+    <div id="customNoChange" style="display:none;">
+        <p class="lead"><s:text 
name="themeEditor.youAreUsingACustomTheme"/></p>
+    </div>
 
-            <%-- Preview and Update buttons --%>
-            <p> <s:text name="themeEditor.previewDescription"/> </p>
-            <input type="button" name="themePreview" class="btn" 
style="margin-bottom:2em"
-                value="<s:text name='themeEditor.preview' />"
-                onclick="fullPreview($('#themeSelector').get(0))"/>
+    <%-- ================================================= --%>
 
-            <s:submit cssClass="btn btn-default" 
value="%{getText('themeEditor.save')}"/>
+    <div id="customChangeToShared" style="display:none;">
 
+        <div class="alert-warning" style="margin-top:3em; margin-bottom:2em; 
padding: 1em">
+            <s:text name="themeEditor.proposedChangeToShared"/>
         </div>
 
+        <%-- Preview and Update buttons --%>
+        <p> <s:text name="themeEditor.previewDescription"/> </p>
+        <input type="button" name="themePreview" class="btn"
+            value="<s:text name='themeEditor.preview' />"
+            onclick="fullPreview($('#themeSelector').get(0))"/>
+
+        <s:submit cssClass="btn btn-default" 
value="%{getText('themeEditor.save')}"/>
+
+        <input type="button" class="btn" onclick="cancelChanges()" 
value="<s:text name='generic.cancel'/>" />
+
+    </div>
+
 </s:form>
 
 <script type="text/javascript">
@@ -185,6 +199,7 @@
             previewImage(themeSelector.options[index].value)
 
         } else {
+            proposedThemeId = originalThemeId
             proposedChangeType = "custom"
         }
         updateView(selected)
@@ -192,10 +207,39 @@
 
     function proposeSharedThemeChange(themeId) {
         proposedThemeId = themeId;
-        if ( originalType !== "custom" && proposedThemeId !== originalThemeId 
) {
-        }
         previewImage(themeId)
-        updateView($('sharedRadio'))
+        updateView($('#sharedRadio'))
+    }
+
+    function cancelChanges() {
+
+        proposedThemeId = originalThemeId;
+        proposedChangeType = originalType;
+
+        hideAll();
+
+        if ( originalType === "custom" ) {
+            $("#sharedRadio").prop("checked", false);
+            $("#customRadio").prop("checked", true);
+            updateView($("#customRadio"));
+
+        } else {
+            $("#sharedRadio").prop("checked", true);
+            $("#customRadio").prop("checked", false);
+            updateView($("#sharedRadio"));
+            $("#themeSelector").val(originalThemeId).change();
+            previewImage(originalThemeId)
+        }
+
+    }
+
+    function hideAll() {
+        $('#themeChooser').hide();
+        $('#customNoChange').hide();
+        $('#customChangeToShared').hide();
+        $('#sharedChangeToShared').hide();
+        $('#sharedNoChange').hide();
+        $('#sharedChangeToCustom').hide();
     }
 
     function previewImage(themeId) {
@@ -216,21 +260,26 @@
 
     function updateView(selected) {
 
+        changed =
+               (proposedThemeId    !== "" && proposedThemeId    !== 
originalThemeId)
+            || (proposedChangeType !== "" && proposedChangeType !== 
originalType )
+
         if (selected[0].value === 'shared') {
 
-            $('#sharedChooser').addClass("panel-success");
-            $('#customChooser').removeClass("panel-success");
+            $('#sharedChooser').css("background", "#bfb")
+            $('#customChooser').css("background", "white")
 
             $('#themeChooser').show();
 
             $('#customNoChange').hide();
             $('#customChangeToShared').hide();
 
-            if ( proposedThemeId === "") {
+            if ( !changed ) {
+                $('#sharedNoChange').show();
                 $('#sharedChangeToShared').hide();
                 $('#sharedChangeToCustom').hide();
 
-            } else if ( proposedThemeId != originalThemeId ) {
+            } else {
 
                 if ( originalType === "shared" ) {
                     $('#sharedChangeToShared').show();
@@ -244,19 +293,22 @@
 
         } else {
 
-            $('#customChooser').addClass("panel-success");
-            $('#sharedChooser').removeClass("panel-success");
+            $('#sharedChooser').css("background", "white")
+            $('#customChooser').css("background", "#bfb")
 
             $('#themeChooser').hide();
 
             $('#sharedNoChange').hide();
+            $('#sharedChangeToShared').hide();
+            $('#sharedChangeToCustom').hide();
+
             $('#customChangeToShared').hide();
 
-            if ( proposedChangeType !== "" || proposedChangeType !== 
originalType ) {
+            if ( !changed ) {
+                $('#customNoChange').show();
+            } else {
                 $('#sharedChangeToCustom').show();
                 $('#customNoChange').hide();
-            } else {
-                $('#customNoChange').show();
             }
 
         }

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp
----------------------------------------------------------------------
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp 
b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp
new file mode 100644
index 0000000..a2bff81
--- /dev/null
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp
@@ -0,0 +1,52 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <link rel="icon" href="<%= request.getContextPath() %>/favicon.ico" 
type="image/x-icon">
+    <title><s:property value="getProp('site.shortName')"/>: <s:property 
value="pageTitle"/></title>
+    <tiles:insertAttribute name="head"/>
+    <style> <tiles:insertAttribute name="styles" /> </style>
+</head>
+<body>
+
+<tiles:insertAttribute name="bannerStatus"/>
+
+<div class="row">
+    <div class="col-md-12 roller-column-left">
+        <div class="panel panel-default">
+            <div class="panel-body">
+                <tiles:insertAttribute name="messages"/>
+                <h2 class="roller-page-title"><s:property 
value="pageTitle"/></h2>
+                <tiles:insertAttribute name="content"/>
+            </div>
+        </div>
+    </div>
+</div>
+
+<footer class="footer">
+    <div class="container">
+        <tiles:insertAttribute name="footer"/>
+    </div>
+</footer>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/webapp/WEB-INF/tiles.xml
----------------------------------------------------------------------
diff --git a/app/src/main/webapp/WEB-INF/tiles.xml 
b/app/src/main/webapp/WEB-INF/tiles.xml
index 5804b0f..eef1052 100644
--- a/app/src/main/webapp/WEB-INF/tiles.xml
+++ b/app/src/main/webapp/WEB-INF/tiles.xml
@@ -43,7 +43,18 @@
         <put-attribute name="sidebar"      
value="/WEB-INF/jsps/tiles/empty.jsp" />
         <put-attribute name="footer"       
value="/WEB-INF/jsps/tiles/footer.jsp" />
     </definition>
-    
+
+    <definition name=".tiles-simple-tabbedpage" 
template="/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp">
+        <put-attribute name="bannerStatus" 
value="/WEB-INF/jsps/tiles/bannerStatus.jsp" />
+        <put-attribute name="userStatus"   
value="/WEB-INF/jsps/tiles/userStatus.jsp" />
+        <put-attribute name="head"         
value="/WEB-INF/jsps/tiles/head.jsp" />
+        <put-attribute name="styles"       
value="/WEB-INF/jsps/tiles/empty.jsp" />
+        <put-attribute name="menu"         
value="/WEB-INF/jsps/tiles/menu.jsp" />
+        <put-attribute name="messages"     
value="/WEB-INF/jsps/tiles/messages.jsp" />
+        <put-attribute name="content"      value="${content}" />
+        <put-attribute name="footer"       
value="/WEB-INF/jsps/tiles/footer.jsp" />
+    </definition>
+
     <definition name=".tiles-simplepage" 
template="/WEB-INF/jsps/tiles/tiles-simplepage.jsp">
         <put-attribute name="banner"       
value="/WEB-INF/jsps/tiles/empty.jsp" />
         <put-attribute name="bannerStatus" 
value="/WEB-INF/jsps/tiles/bannerStatus.jsp" />
@@ -347,7 +358,7 @@
         <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
     </definition>
     
-    <definition name=".ThemeEdit" extends=".tiles-tabbedpage" >
+    <definition name=".ThemeEdit" extends=".tiles-simple-tabbedpage" >
         <put-attribute name="head" value="/WEB-INF/jsps/tiles/head.jsp" />
         <put-attribute name="content" 
value="/WEB-INF/jsps/editor/ThemeEdit.jsp" />
     </definition>

http://git-wip-us.apache.org/repos/asf/roller/blob/840f46c6/app/src/main/webapp/roller-ui/styles/roller.css
----------------------------------------------------------------------
diff --git a/app/src/main/webapp/roller-ui/styles/roller.css 
b/app/src/main/webapp/roller-ui/styles/roller.css
index 31206a8..319a59a 100644
--- a/app/src/main/webapp/roller-ui/styles/roller.css
+++ b/app/src/main/webapp/roller-ui/styles/roller.css
@@ -293,12 +293,19 @@ div.image-controls input {
     display: inline;
 }
 
-#sharedChooser, #customChooser {
-    height: 7em;
-}
 
-.equal{
-    display: -ms-flexbox;
-    display: -webkit-flex;
+
+/* theme edit */
+
+.row-display-flex {
+    display: flex;
+}
+.row-display-flex > [class*='col-'] {
     display: flex;
+    flex-direction: column;
 }
+
+#sharedChooser, #customChooser {
+    height: 10em;
+}
+

Reply via email to