Beginnings of a Bootstrap rewrite of the Roller editor/admin UI, using Struts-Bootstrap plugin. The main menu and edit weblog page are essentially complete.
Project: http://git-wip-us.apache.org/repos/asf/roller/repo Commit: http://git-wip-us.apache.org/repos/asf/roller/commit/2da6c3c2 Tree: http://git-wip-us.apache.org/repos/asf/roller/tree/2da6c3c2 Diff: http://git-wip-us.apache.org/repos/asf/roller/diff/2da6c3c2 Branch: refs/heads/bootstrap-ui Commit: 2da6c3c2e28419f68244e0c362c15be96013d5f9 Parents: 624ad3b Author: Dave Johnson <[email protected]> Authored: Mon Dec 21 10:40:29 2015 -0500 Committer: Dave Johnson <[email protected]> Committed: Mon Dec 21 10:40:29 2015 -0500 ---------------------------------------------------------------------- app/pom.xml | 6 + .../resources/ApplicationResources.properties | 21 +- app/src/main/webapp/WEB-INF/jsps/core/Login.jsp | 230 +- .../main/webapp/WEB-INF/jsps/core/MainMenu.jsp | 235 +- .../WEB-INF/jsps/core/MainMenuSidebar.jsp | 36 +- .../webapp/WEB-INF/jsps/editor/EntryEdit.jsp | 591 +- .../webapp/WEB-INF/jsps/editor/EntryEditor.jsp | 76 +- .../webapp/WEB-INF/jsps/editor/MediaFileAdd.jsp | 1 - .../webapp/WEB-INF/jsps/taglibs-struts2.jsp | 12 +- .../webapp/WEB-INF/jsps/tiles/bannerStatus.jsp | 118 +- .../webapp/WEB-INF/jsps/tiles/head-ajax.jsp | 21 +- app/src/main/webapp/WEB-INF/jsps/tiles/head.jsp | 21 +- app/src/main/webapp/WEB-INF/jsps/tiles/menu.jsp | 76 +- .../WEB-INF/jsps/tiles/tiles-mainmenupage.jsp | 80 +- .../WEB-INF/jsps/tiles/tiles-simplepage.jsp | 61 +- .../WEB-INF/jsps/tiles/tiles-tabbedpage.jsp | 82 +- .../webapp/WEB-INF/jsps/tiles/userStatus.jsp | 38 + app/src/main/webapp/WEB-INF/tiles.xml | 54 +- .../css/bootstrap-theme.css | 587 ++ .../css/bootstrap-theme.min.css | 6 + .../bootstrap-3.3.6-dist/css/bootstrap.css | 6760 ++++++++++++++++++ .../bootstrap-3.3.6-dist/css/bootstrap.min.css | 6 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../bootstrap-3.3.6-dist/js/bootstrap.js | 2363 ++++++ .../bootstrap-3.3.6-dist/js/bootstrap.min.js | 7 + .../roller-ui/bootstrap-3.3.6-dist/js/npm.js | 13 + app/src/main/webapp/roller-ui/styles/roller.css | 821 +-- 31 files changed, 11081 insertions(+), 1529 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/pom.xml ---------------------------------------------------------------------- diff --git a/app/pom.xml b/app/pom.xml index 7266ad9..9adfed9 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -262,6 +262,12 @@ </dependency> <dependency> + <groupId>com.jgeppert.struts2.bootstrap</groupId> + <artifactId>struts2-bootstrap-plugin</artifactId> + <version>2.0.3</version> + </dependency> + + <dependency> <groupId>xml-security</groupId> <artifactId>xmlsec</artifactId> <version>1.3.0</version> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/resources/ApplicationResources.properties ---------------------------------------------------------------------- diff --git a/app/src/main/resources/ApplicationResources.properties b/app/src/main/resources/ApplicationResources.properties index 0a2f8c5..2b753ce 100644 --- a/app/src/main/resources/ApplicationResources.properties +++ b/app/src/main/resources/ApplicationResources.properties @@ -640,9 +640,9 @@ issued during the upgrade process: # ----------------------------------------------------------------------- Login loginPage.title=Welcome to Roller -loginPage.prompt=Please enter your username and password to login. -loginPage.openIdPrompt=Please login via OpenID -loginPage.openIdHybridPrompt=Or, login with your username and password +loginPage.prompt=Please login +loginPage.openIdPrompt=Login with OpenID +loginPage.openIdHybridPrompt=Or with username loginPage.userName=Username loginPage.password=Password loginPage.openID=OpenID username @@ -707,8 +707,8 @@ macro.weblog.noEntriesForCategory=No entries found for specified category mainPage.category=Category mainPage.searchWeblogs=Search for blogs mainPage.actions=Actions -mainPage.loggedInAs=logged in as -mainPage.currentWebsite=editing weblog +mainPage.loggedInAs=Logged in as +mainPage.currentWebsite=Editing weblog mainPage.mainMenu=Main Menu # ------------------------------------------------------------------ Maintenance @@ -1493,7 +1493,7 @@ weblogEdit.publishedEntries=Recent Entries weblogEdit.post=Post to Weblog weblogEdit.permaLink=Permalink weblogEdit.published=Published -weblogEdit.pubTime=Pub Time +weblogEdit.pubTime=Publishing Time weblogEdit.save=Save as Draft weblogEdit.scheduled=Scheduled weblogEdit.scheduledEntries=Scheduled Entries @@ -1749,19 +1749,20 @@ activate your user account by clicking the link that is sent to you via e-mail. # ---------------------------------------------------------------- Your Weblogs -yourWebsites.title=Main Menu - yourWebsites.actions=Actions +yourWebsites.title=Your Weblogs +yourWebsites.actions=Actions -yourWebsites.prompt.noBlog=You''ve got a user account, but no weblog. \ +yourWebsites.prompt.noBlog=You have a user account, but no weblog. \ Would you like to yourWebsites.createOne=create one? -yourWebsites.prompt.hasBlog=Select a weblog to edit, manage, or configure. +yourWebsites.prompt.hasBlog=Access your weblogs here or create a new one. yourWebsites.accept=accept yourWebsites.decline=decline yourWebsites.resign=Resign +yourWebsites.youHave=You have yourWebsites.permission=Permission yourWebsites.confirmResignation=Are you sure you wish to resign from weblog [{0}]? yourWebsites.weblog=Link http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp b/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp index bf9914d..fbb87df 100644 --- a/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp @@ -18,150 +18,130 @@ <%-- Body of the login page, invoked from login.jsp --%> <%@ page import="org.apache.roller.weblogger.config.WebloggerConfig" %> -<%@ page import="org.apache.roller.weblogger.config.AuthMethod" %> <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> <%! -String securityCheckUrl = null; -boolean cmaEnabled = "CMA".equals(WebloggerConfig.getAuthMethod()); + String securityCheckUrl = null; + boolean cmaEnabled = "CMA".equals( WebloggerConfig.getAuthMethod() ); %> <% -if (cmaEnabled) { - securityCheckUrl = "/j_security_check"; -} else { - securityCheckUrl = "/roller_j_security_check"; -} + if (cmaEnabled) { + securityCheckUrl = "/j_security_check"; + } else { + securityCheckUrl = "/roller_j_security_check"; + } %> -<s:if test="authMethod == 'OPENID' || authMethod == 'DB_OPENID'"> - - <p><s:text name="loginPage.openIdPrompt" /></p> - - <form method="post" id="loginOpenIDForm" - action="/roller/roller_j_openid_security_check" - onsubmit="saveOpenidIdentifier(this)"> - <!-- action="<c:url value='roller_j_openid_security_check'/>" --> - <table width="80%"> - <tr> - <td width="20%" align="right"><s:text name="loginPage.openID" /></td> - <td width="80%"> - <input type="text" name="openid_identifier" id="openid_identifier" class="f_openid_identifier" size="40" maxlength="255" style="width: 35%"/> - </td> - </tr> - <tr> - <td width="20%"></td> - <td width="80%"> - <input type="submit" name="submit" id="submit" value="<s:text name='loginPage.loginOpenID'/>" /> - </td> - </tr> - </table> - </form> -</s:if> - -<s:if test="authMethod != 'OPENID'"> - - <s:if test="authMethod == 'DB_OPENID'"> - <p><s:text name="loginPage.openIdHybridPrompt" /></p> +<div class="container"> + + <s:if test="authMethod == 'OPENID' || authMethod == 'DB_OPENID'"> + + <form method="post" id="loginOpenIDForm" class="form-signin" + action="/roller/roller_j_openid_security_check" onsubmit="saveOpenidIdentifier(this)"> + + <h2 class="form-signin-heading"><s:text name="loginPage.openIdPrompt"/></h2> + + <label for="openid_identifier" class="sr-only"><s:text name="loginPage.openID"/></label> + <input class="form-control" type="text" name="openid_identifier" id="openid_identifier"/> + + <button type="submit" name="submit" id="submit" class="btn btn-lg btn-primary btn-block" + value="<s:text name='loginPage.loginOpenID'/>"></button> + + </form> + </s:if> - - <s:else> - <p><s:text name="loginPage.prompt" /></p> - </s:else> - - <form method="post" id="loginForm" - action="<c:url value="<%= securityCheckUrl %>"/>" - onsubmit="saveUsername(this)"> - - <table width="80%"> - - <tr> - <td width="20%" align="right"><s:text name="loginPage.userName" /></td> - <td width="80%"> - <input type="text" name="j_username" id="j_username" size="25" /> - </td> - </tr> - - <tr> - <td width="20%" align="right"><s:text name="loginPage.password" /></td> - <td width="80%"> - <input type="password" name="j_password" id="j_password" size="20" /> - </td> - </tr> + + <s:if test="authMethod != 'OPENID'"> + + + <form method="post" id="loginForm" class="form-signin" + action="<c:url value="<%= securityCheckUrl %>"/>" + onsubmit="saveUsername(this)"> + + <s:if test="authMethod == 'DB_OPENID'"> + <h2 class="form-signin-heading"><s:text name="loginPage.openIdHybridPrompt"/></h2> + </s:if> + + <s:else> + <h2 class="form-signin-heading"><s:text name="loginPage.prompt"/></h2> + </s:else> + + <label for="j_username" class="sr-only"> <s:text name="loginPage.userName"/> </label> + <input type="text" class="form-control" name="j_username" id="j_username" placeholder="Username"/> + + <label for="j_password" class="sr-only"> <s:text name="loginPage.password"/> </label> + <input type="password" class="form-control" name="j_password" id="j_password" placeholder="Password"/> <c:if test="${rememberMeEnabled}"> - <tr> - <td width="20%"></td> - <td width="80%"> - <input type="checkbox" name="_spring_security_remember_me" id="_spring_security_remember_me" /> - <label for="rememberMe"> - <s:text name="loginPage.rememberMe" /> - </label> - </td> - </tr> + <label> + <input type="checkbox" name="_spring_security_remember_me" id="_spring_security_remember_me"/> + <s:text name="loginPage.rememberMe"/> + </label> </c:if> - <tr> - <td width="20%"></td> - <td width="80%"> - <input type="submit" name="login" id="login" value="<s:text name='loginPage.login' />" /> - <input type="reset" name="reset" id="reset" value="<s:text name='loginPage.reset' />" - onclick="document.getElementById('j_username').focus()" /> - </td> - </tr> + <button class="btn btn-lg btn-primary btn-block" type="submit" name="login" id="login"> + <s:text name='loginPage.login'/> + </button> - </table> - </form> -</s:if> + <button class="btn btn-lg btn-primary btn-block" type="reset" name="reset" id="reset" + onclick="document.getElementById('j_username').focus()"> + <s:text name='loginPage.reset'/> + </button> + + </form> + </s:if> + +</div> <script> -<s:if test="authMethod == 'OPENID' || authMethod == 'DB_OPENID'"> -function focusToOpenidForm() { - return (document.getElementById && document.getElementById("j_username") === null) || - getCookie("favorite_authentication_method") !== "username"; -} - -if (document.getElementById) { - if (document.getElementById && getCookie("openid_identifier") !== null) { - document.getElementById("openid_identifier").value = getCookie("openid_identifier"); + <s:if test="authMethod == 'OPENID' || authMethod == 'DB_OPENID'"> + function focusToOpenidForm() { + return (document.getElementById && document.getElementById("j_username") === null) || + getCookie("favorite_authentication_method") !== "username"; + } + + if (document.getElementById) { + if (document.getElementById && getCookie("openid_identifier") !== null) { + document.getElementById("openid_identifier").value = getCookie("openid_identifier"); + } + if (focusToOpenidForm()) { + document.getElementById("openid_identifier").focus(); + } } - if (focusToOpenidForm()) { - document.getElementById("openid_identifier").focus(); + + function saveOpenidIdentifier(theForm) { + var expires = new Date(); + expires.setTime(expires.getTime() + 24 * 30 * 60 * 60 * 1000); // sets it for approx 30 days. + setCookie("openid_identifier", theForm.openid_identifier.value, expires); + setCookie("favorite_authentication_method", "openid"); } -} - -function saveOpenidIdentifier(theForm) { - var expires = new Date(); - expires.setTime(expires.getTime() + 24 * 30 * 60 * 60 * 1000); // sets it for approx 30 days. - setCookie("openid_identifier",theForm.openid_identifier.value,expires); - setCookie("favorite_authentication_method", "openid"); -} -</s:if> - -<s:if test="authMethod != 'OPENID'"> -function focusToUsernamePasswordForm() { - return (document.getElementById && document.getElementById("openid_identifier") === null) || - getCookie("favorite_authentication_method") === "username"; -} - -if (document.getElementById) { - if (getCookie("username") != null) { - if (document.getElementById) { - document.getElementById("j_username").value = getCookie("username"); - if (focusToUsernamePasswordForm()) { - document.getElementById("j_password").focus(); + </s:if> + + <s:if test="authMethod != 'OPENID'"> + function focusToUsernamePasswordForm() { + return (document.getElementById && document.getElementById("openid_identifier") === null) || + getCookie("favorite_authentication_method") === "username"; + } + + if (document.getElementById) { + if (getCookie("username") != null) { + if (document.getElementById) { + document.getElementById("j_username").value = getCookie("username"); + if (focusToUsernamePasswordForm()) { + document.getElementById("j_password").focus(); + } } + } else if (focusToUsernamePasswordForm()) { + document.getElementById("j_username").focus(); } - } else if (focusToUsernamePasswordForm()) { - document.getElementById("j_username").focus(); } -} - -function saveUsername(theForm) { - var expires = new Date(); - expires.setTime(expires.getTime() + 24 * 30 * 60 * 60 * 1000); // sets it for approx 30 days. - setCookie("username",theForm.j_username.value,expires); - setCookie("favorite_authentication_method", "username"); -} -</s:if> + + function saveUsername(theForm) { + var expires = new Date(); + expires.setTime(expires.getTime() + 24 * 30 * 60 * 60 * 1000); // sets it for approx 30 days. + setCookie("username", theForm.j_username.value, expires); + setCookie("favorite_authentication_method", "username"); + } + </s:if> </script> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp b/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp index 6b10819..6a5b547 100644 --- a/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp @@ -59,123 +59,126 @@ <s:iterator id="perms" value="existingPermissions"> - <div class="yourWeblogBox"> - - <span class="mm_weblog_name"><img src='<c:url value="/images/folder.png"/>' /> <s:property value="#perms.weblog.name" /></span> - - <table class="mm_table" width="100%" cellpadding="0" cellspacing="0"> - <tr> - <td valign="top"> - - <table cellpadding="0" cellspacing="0"> - - <tr> - <td class="mm_subtable_label"><s:text name='yourWebsites.weblog'/></td> - <td><a href='<s:property value="#perms.weblog.absoluteURL" />'> - <s:property value="#perms.weblog.absoluteURL" /> - </a></td> - </tr> - - <tr> - <td class="mm_subtable_label"><s:text name='yourWebsites.permission'/></td> - <td><s:if test='#perms.hasAction("admin")' >ADMIN</s:if> - <s:if test='#perms.hasAction("post")' >AUTHOR</s:if> - <s:if test='#perms.hasAction("edit_draft")' >LIMITED</s:if></td> - </tr> - - <tr> - <td class="mm_subtable_label"><s:text name='generic.description' /></td> - <td><s:property value="#perms.weblog.about" escape="false" /></td> - </tr> - - <tr> - <td class="mm_subtable_label"><s:text name='yourWebsites.userCount' /></td> - <td><s:property value="#perms.weblog.userCount" /></td> - </tr> - - <tr> - <td class="mm_subtable_label"><s:text name='yourWebsites.todaysHits' /></td> - <td><s:property value="#perms.weblog.todaysHits" /></td> - </tr> - - </table> - - </td> - - <td class="mm_table_actions" width="20%" align="left" > - - <s:url action="entryAdd" namespace="/roller-ui/authoring" id="newEntry"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - <img src='<s:url value="/images/table_edit.png"/>' /> - <s:a href="%{newEntry}"><s:text name="yourWebsites.newEntry" /></s:a> - <br /> - - <%-- Show Entries link with count for users above LIMITED permission --%> - <s:if test='!(#perms.hasAction("edit_draft"))'> - <s:url action="entries" namespace="/roller-ui/authoring" id="editEntries"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - <img src='<s:url value="/images/table_multiple.png"/>' /> - <s:a href="%{editEntries}"><s:text name="yourWebsites.editEntries" /> (<s:property value="#perms.weblog.entryCount" />)</s:a> - <br /> - </s:if> - - <%-- Show Comments link with count for users above LIMITED permission --%> - <s:if test='!(#perms.hasAction("edit_draft"))'> - <s:url action="comments" namespace="/roller-ui/authoring" id="manageComments"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - <img src='<s:url value="/images/page_white_edit.png"/>' /> - <s:a href="%{manageComments}"><s:text name="yourWebsites.manageComments" /> (<s:property value="#perms.weblog.commentCount" />)</s:a> - <br /> - </s:if> - - <%-- Only admins get access to theme and config settings --%> - <s:if test='#perms.hasAction("admin")'> - - <%-- And only show theme option if custom themes are enabled --%> - <s:if test="getProp('themes.customtheme.allowed')"> - <s:if test="#perms.weblog.editorTheme == 'custom'"> - <s:url action="templates" namespace="/roller-ui/authoring" id="weblogTheme"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - </s:if> - <s:else> - <s:url action="themeEdit" namespace="/roller-ui/authoring" id="weblogTheme"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - </s:else> - <img src='<s:url value="/roller-ui/images/layout.png"/>' /> - <a href='<s:property value="weblogTheme" />'> - <s:text name="yourWebsites.theme" /></a> - <br /> - </s:if> - - <s:url action="weblogConfig" namespace="/roller-ui/authoring" id="manageWeblog"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - <img src='<s:url value="/images/cog.png"/>' /> - <a href='<s:property value="manageWeblog" />'> - <s:text name="yourWebsites.manage" /></a> - <br /> - </s:if> - - <%-- don't allow last admin to resign from blog --%> - <s:if test='!(#perms.hasAction("admin") && #perms.weblog.adminUserCount == 1)'> - <img src='<c:url value="/images/delete.png"/>' /> - <s:url action="memberResign" namespace="/roller-ui/authoring" id="resignWeblog"> - <s:param name="weblog" value="#perms.weblog.handle" /> - </s:url> - <a href='<s:property value="resignWeblog" />'> - <s:text name='yourWebsites.resign' /> - </a> - </s:if> - - </td> - </tr> - </table> + <div class="well yourWeblogBox"> + + <h3 class="mm_weblog_name"> + <span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span> + <s:property value="#perms.weblog.name" /> + </h3> + + <p> <a href='<s:property value="#perms.weblog.absoluteURL" />'> + <s:property value="#perms.weblog.absoluteURL" /></a></p> + + <p><s:property value="#perms.weblog.about" escape="false" /></p> + <p>You have + <s:if test='#perms.hasAction("admin")'>ADMIN</s:if> + <s:if test='#perms.hasAction("post")'>AUTHOR</s:if> + <s:if test='#perms.hasAction("edit_draft")'>LIMITED</s:if> + <s:text name='yourWebsites.permission'/></p> + + <div class="btn-group" role="group" aria-label="..."> + + <%-- New entry button --%> + <button type="button" class="btn btn-default"> + <s:url action="entryAdd" namespace="/roller-ui/authoring" id="newEntry"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> + <s:a href="%{newEntry}"><s:text name="yourWebsites.newEntry"/></s:a> + </button> + + <s:if test='!(#perms.hasAction("edit_draft"))'> + + <%-- Show Entries button with count for users above LIMITED permission --%> + <button type="button" class="btn btn-default"> + <s:url action="entries" namespace="/roller-ui/authoring" id="editEntries"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + <span class="glyphicon glyphicon-list" aria-hidden="true"></span> + <s:a href="%{editEntries}"><s:text name="yourWebsites.editEntries"/></s:a> + <span class="badge"><s:property value="#perms.weblog.entryCount"/></span> + </button> + + </s:if> + + <s:if test='!(#perms.hasAction("edit_draft"))'> + + <%-- Show Comments button with count for users above LIMITED permission --%> + <button type="button" class="btn btn-default"> + <s:url action="comments" namespace="/roller-ui/authoring" id="manageComments"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + <span class="glyphicon glyphicon-comment" aria-hidden="true"></span> + <s:a href="%{manageComments}"><s:text name="yourWebsites.manageComments"/></s:a> + <span class="badge"><s:property value="#perms.weblog.commentCount"/></span> + </button> + + </s:if> + + + <%-- Only admins get access to theme and config settings --%> + <s:if test='#perms.hasAction("admin")'> + + <%-- And only show theme option if custom themes are enabled --%> + <s:if test="getProp('themes.customtheme.allowed')"> + + <s:if test="#perms.weblog.editorTheme == 'custom'"> + + <%-- Templates button --%> + <button type="button" class="btn btn-default"> + <s:url action="templates" namespace="/roller-ui/authoring" id="weblogTheme"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + </button> + + </s:if> + <s:else> + + <%-- Theme edit button --%> + <button type="button" class="btn btn-default"> + <s:url action="themeEdit" namespace="/roller-ui/authoring" id="weblogTheme"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + <span class="glyphicon glyphicon-eye-close" aria-hidden="true"></span> + <a href='<s:property value="weblogTheme" />'> + <s:text name="yourWebsites.theme"/></a> + </button> + + </s:else> + + </s:if> + + + <%-- Resign button --%> + <button type="button" class="btn btn-default"> + <s:url action="weblogConfig" namespace="/roller-ui/authoring" id="manageWeblog"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + <span class="glyphicon glyphicon-cog" aria-hidden="true"></span> + <a href='<s:property value="manageWeblog" />'> + <s:text name="yourWebsites.manage"/></a> + </button> + + </s:if> + + <%-- don't allow last admin to resign from blog --%> + <s:if test='!(#perms.hasAction("admin") && #perms.weblog.adminUserCount == 1)'> + + <button type="button" class="btn btn-default"> + <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> + <s:url action="memberResign" namespace="/roller-ui/authoring" id="resignWeblog"> + <s:param name="weblog" value="#perms.weblog.handle"/> + </s:url> + <a href='<s:property value="resignWeblog" />'> + <s:text name='yourWebsites.resign'/> + </a> + </button> + + </s:if> + + </div> + </div> </s:iterator> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp b/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp index 4aa6ef9..ba13272 100644 --- a/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/core/MainMenuSidebar.jsp @@ -22,29 +22,47 @@ <div class="menu-tl"> <div class="sidebarInner"> - <h3><s:text name="yourWebsites.actions" /></h3> + <%-- + <h4><s:text name="yourWebsites.actions" /></h4> <hr size="1" noshade="noshade" /> - - <h3><a href="<s:url action="profile"/>"><s:text name="yourWebsites.editProfile" /></a></h3> + --%> + + <%-- Edit profile --%> + + <h4><span class="glyphicon glyphicon-user" aria-hidden="true"></span> + <a href="<s:url action="profile"/>"><s:text name="yourWebsites.editProfile" /></a></h4> <p><s:text name="yourWebsites.editProfile.desc" /></p> + <%-- Edit profile --%> + <s:if test="getBooleanProp('webservices.enableAtomPub') && getProp('webservices.atomPubAuth') == 'oauth'"> - <h3><a href="<s:url action="oauthKeys" />"><s:text name="yourWebsites.oauthKeys" /></a></h3> + <h4><span class="glyphicon glyphicon-lock" aria-hidden="true"></span> + <a href="<s:url action="oauthKeys" />"><s:text name="yourWebsites.oauthKeys" /></a></h4> <p><s:text name="yourWebsites.oauthKeys.desc" /></p> </s:if> + <%-- Create weblog --%> + <s:if test="getBooleanProp('site.allowUserWeblogCreation') && (getBooleanProp('groupblogging.enabled') || (existingPermissions.isEmpty && pendingPermissions.isEmpty))"> - <h3><a href="<s:url action="createWeblog" />"><s:text name="yourWebsites.createWeblog" /></a></h3> + <h4><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> + <a href="<s:url action="createWeblog" />"><s:text name="yourWebsites.createWeblog" /></a></h4> <p><s:text name="yourWebsites.createWeblog.desc" /></p> </s:if> - <s:if test="userIsAdmin"> - <h3><a href="<s:url action="globalConfig" namespace="/roller-ui/admin" />"><s:text name="yourWebsites.globalAdmin" /></a></h3> + <s:if test="userIsAdmin"> + + <%-- Roller settings --%> + + <h4><span class="glyphicon glyphicon-wrench" aria-hidden="true"></span> + <a href="<s:url action="globalConfig" namespace="/roller-ui/admin" />"><s:text name="yourWebsites.globalAdmin" /></a></h4> <p><s:text name="yourWebsites.globalAdmin.desc" /></p> + + <%-- Planet settings --%> - <s:if test="getBooleanProp('planet.aggregator.enabled')"> - <h3><a href="<s:url action="planetConfig" namespace="/roller-ui/admin" />"><s:text name="yourWebsites.planetAdmin" /></a></h3> + <s:if test="getBooleanProp('planet.aggregator.enabled')"> + <h4><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> + <a href="<s:url action="planetConfig" namespace="/roller-ui/admin" />"><s:text name="yourWebsites.planetAdmin" /></a></h4> <p><s:text name="yourWebsites.planetAdmin.desc" /></p> </s:if> </s:if> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/editor/EntryEdit.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/EntryEdit.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/EntryEdit.jsp index 45c5224..1a54a2f 100644 --- a/app/src/main/webapp/WEB-INF/jsps/editor/EntryEdit.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/editor/EntryEdit.jsp @@ -17,16 +17,16 @@ --%> <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> -<link rel="stylesheet" media="all" href='<s:url value="/roller-ui/jquery-ui-1.11.0/jquery-ui.min.css"/>' /> +<link rel="stylesheet" media="all" href='<s:url value="/roller-ui/jquery-ui-1.11.0/jquery-ui.min.css"/>'/> <script src="<s:url value="/roller-ui/scripts/jquery-2.1.1.min.js" />"></script> <script src='<s:url value="/roller-ui/jquery-ui-1.11.0/jquery-ui.min.js"/>'></script> <style> -#tagAutoCompleteWrapper { - width:40em; /* set width here or else widget will expand to fit its container */ - padding-bottom:2em; -} + #tagAutoCompleteWrapper { + width: 40em; /* set width here or else widget will expand to fit its container */ + padding-bottom: 2em; + } </style> <%-- Titling, processing actions different between entry add and edit --%> @@ -40,325 +40,358 @@ </s:else> <p class="subtitle"> - <s:text name="%{#subtitleKey}" > - <s:param value="actionWeblog.handle" /> + <s:text name="%{#subtitleKey}"> + <s:param value="actionWeblog.handle"/> </s:text> </p> -<s:form id="entry"> - <s:hidden name="salt" /> - <s:hidden name="weblog" /> - <s:hidden name="bean.status" /> +<s:form id="entry" theme="bootstrap" cssClass="form-horizontal"> + <s:hidden name="salt"/> + <s:hidden name="weblog"/> + <s:hidden name="bean.status"/> <s:if test="actionName == 'entryEdit'"> - <s:hidden name="bean.id" /> + <s:hidden name="bean.id"/> </s:if> <%-- ================================================================== --%> <%-- Title, category, dates and other metadata --%> - <table class="entryEditTable" cellpadding="0" cellspacing="0" style="width:100%"> - - <tr> - <td class="entryEditFormLabel"> - <label for="title"><s:text name="weblogEdit.title" /></label> - </td> - <td> - <s:textfield name="bean.title" size="70" maxlength="255" tabindex="1" style="width:60%"/> - </td> - </tr> - - <tr> - <td class="entryEditFormLabel"> - <label for="status"><s:text name="weblogEdit.status" /></label> - </td> - <td> - <s:if test="bean.published"> - <span style="color:green; font-weight:bold"> - <s:text name="weblogEdit.published" /> - (<s:text name="weblogEdit.updateTime" /> - <s:date name="entry.updateTime" />) - </span> - </s:if> - <s:elseif test="bean.draft"> - <span style="color:orange; font-weight:bold"> - <s:text name="weblogEdit.draft" /> - (<s:text name="weblogEdit.updateTime" /> - <s:date name="entry.updateTime" />) - </span> - </s:elseif> - <s:elseif test="bean.pending"> - <span style="color:orange; font-weight:bold"> - <s:text name="weblogEdit.pending" /> - (<s:text name="weblogEdit.updateTime" /> - <s:date name="entry.updateTime" />) - </span> - </s:elseif> - <s:elseif test="bean.scheduled"> - <span style="color:orange; font-weight:bold"> - <s:text name="weblogEdit.scheduled" /> - (<s:text name="weblogEdit.updateTime" /> - <s:date name="entry.updateTime" />) - </span> - </s:elseif> - <s:else> - <span style="color:red; font-weight:bold"><s:text name="weblogEdit.unsaved" /></span> - </s:else> - </td> - </tr> + <%-- title --%> + <s:textfield label="%{getText('weblogEdit.title')}" name="bean.title" maxlength="255" tabindex="1"/> + <%-- status --%> + <div class="form-group"> + <label class="col-sm-3 control-label" for="weblogEdit.status"><s:text name="weblogEdit.status"/></label> - <s:if test="actionName == 'entryEdit'"> - <tr> - <td class="entryEditFormLabel"> - <label for="permalink"><s:text name="weblogEdit.permaLink" /></label> - </td> - <td> - <s:if test="bean.published"> - <a id="entry_bean_permalink" href='<s:property value="entry.permalink" />'><s:property value="entry.permalink" /></a> - <img src='<s:url value="/images/launch-link.png"/>' /> - </s:if> - <s:else> - <s:property value="entry.permalink" /> - </s:else> - </td> - </tr> - </s:if> + <div class="col-sm-9 controls"> + <s:if test="bean.published"> + <span class="label label-success"> + <s:text name="weblogEdit.published"/> + (<s:text name="weblogEdit.updateTime"/> + <s:date name="entry.updateTime"/>) + </span> + </s:if> + <s:elseif test="bean.draft"> + <span class="label label-info"> + <s:text name="weblogEdit.draft"/> + (<s:text name="weblogEdit.updateTime"/> + <s:date name="entry.updateTime"/>) + </span> + </s:elseif> + <s:elseif test="bean.pending"> + <span class="label label-warning"> + <s:text name="weblogEdit.pending"/> + (<s:text name="weblogEdit.updateTime"/> + <s:date name="entry.updateTime"/>) + </span> + </s:elseif> + <s:elseif test="bean.scheduled"> + <span class="label label-info"> + <s:text name="weblogEdit.scheduled"/> + (<s:text name="weblogEdit.updateTime"/> + <s:date name="entry.updateTime"/>) + </span> + </s:elseif> + <s:else> + <span class="label label-danger"><s:text name="weblogEdit.unsaved"/></span> + </s:else> + </div> - <tr> - <td class="entryEditFormLabel"> - <label for="categoryId"><s:text name="weblogEdit.category" /></label> - </td> - <td> - <s:select name="bean.categoryId" list="categories" listKey="id" listValue="name" size="1" /> - </td> - </tr> - - <tr> - <td class="entryEditFormLabel"> - <label for="title"><s:text name="weblogEdit.tags" /></label> - </td> - <td> - <s:textfield id="tagAutoComplete" cssClass="entryEditTags" name="bean.tagsAsString" size="70" maxlength="255" tabindex="3" style="width:30%"/> - </td> - </tr> - - <s:if test="actionWeblog.enableMultiLang"> - <tr> - <td class="entryEditFormLabel"> - <label for="locale"><s:text name="weblogEdit.locale" /></label> - </td> - <td> - <s:select name="bean.locale" size="1" list="localesList" listValue="displayName" /> - </td> - </tr> - </table> - </s:if> - <s:else> - </table> - <s:hidden name="bean.locale"/> - </s:else> + </div> + + <%-- permalink --%> + <s:if test="actionName == 'entryEdit'"> + <div class="form-group"> + <label for="entry_bean_permalink"><s:text name="weblogEdit.permaLink"/></label> + <s:if test="bean.published"> + <a id="entry_bean_permalink" href='<s:property value="entry.permalink" />'> + <s:property value="entry.permalink"/> + </a> + <img src='<s:url value="/images/launch-link.png"/>'/> + </s:if> + <s:else> + <s:property value="entry.permalink"/> + </s:else> + </div> + </s:if> + <%-- tags --%> + <s:textfield label="%{getText('weblogEdit.tags')}" id="tagAutoComplete" name="bean.tagsAsString" + maxlength="255" tabindex="3"/> - <%-- ================================================================== --%> - <%-- Weblog editor --%> + <%-- category --%> + <s:select label="%{getText('weblogEdit.category')}" name="bean.categoryId" + list="categories" listKey="id" listValue="name"/> - <s:include value="%{editor.jspPage}" /> + <s:if test="actionWeblog.enableMultiLang"> + <s:select label="%{getText('weblogEdit.locale')}" name="bean.locale" size="1" + list="localesList" listValue="displayName"/> + </s:if> - <br /> + <s:else> + <s:hidden name="bean.locale"/> + </s:else> - <%-- ================================================================== --%> - <%-- plugin chooser --%> - <s:if test="!entryPlugins.isEmpty"> - <div id="pluginControlToggle" class="controlToggle"> - <span id="ipluginControl">+</span> - <a class="controlToggle" onclick="javascript:toggleControl('pluginControlToggle','pluginControl')"> - <s:text name="weblogEdit.pluginsToApply" /></a> - </div> - <div id="pluginControl" class="miscControl" style="display:none"> - <s:checkboxlist theme="roller" name="bean.plugins" list="entryPlugins" listKey="name" listValue="name" /> - </div> - </s:if> + <div class="panel-group" id="accordion"> + <%-- Weblog editor --%> - <%-- ================================================================== --%> - <%-- advanced settings --%> + <s:include value="%{editor.jspPage}"/> + + <%-- Plugins --%> + + <s:if test="!entryPlugins.isEmpty"> + + <div class="panel panel-default" id="panel-plugins"> + <div class="panel-heading"> + + <h4 class="panel-title"> + <a aria-expanded="false" + data-toggle="collapse" data-target="#collapsePlugins" href="#collapsePlugins"> + <s:text name="weblogEdit.pluginsToApply"/> </a> + </h4> + + </div> + <div id="collapsePlugins" class="panel-collapse collapse in"> + <div class="panel-body"> + + <s:checkboxlist name="bean.plugins" list="entryPlugins" listKey="name" listValue="name"/> + + </div> + </div> + </div> - <div id="miscControlToggle" class="controlToggle"> - <span id="imiscControl">+</span> - <a class="controlToggle" onclick="javascript:toggleControl('miscControlToggle','miscControl')"> - <s:text name="weblogEdit.miscSettings" /></a> - </div> - <div id="miscControl" class="miscControl" style="display:none"> - - <label for="link"><s:text name="weblogEdit.pubTime" /></label> - <div> - <s:select name="bean.hours" list="hoursList" /> - : - <s:select name="bean.minutes" list="minutesList" /> - : - <s:select name="bean.seconds" list="secondsList" /> - - <script> - $(function() { - $( "#entry_bean_dateString" ).datepicker({ - showOn: "button", - buttonImage: "../../images/calendar.png", - buttonImageOnly: true, - changeMonth: true, - changeYear: true - }); - }); - </script> - <s:textfield name="bean.dateString" size="12" readonly="true"/> - <s:property value="actionWeblog.timeZone" /> - </div> - <br /> - - <s:checkbox name="bean.allowComments" /> - <s:text name="weblogEdit.allowComments" /> - <s:text name="weblogEdit.commentDays" /> - <s:select name="bean.commentDays" list="commentDaysList" size="1" listKey="key" listValue="value" /> - <br /> - - <s:checkbox name="bean.rightToLeft" /> - <s:text name="weblogEdit.rightToLeft" /> - <br /> - - <s:if test="authenticatedUser.hasGlobalPermission('admin')"> - <s:checkbox name="bean.pinnedToMain" /> - <s:text name="weblogEdit.pinnedToMain" /><tags:help key="weblogEdit.pinnedToMain.tooltip"/> - <br /> </s:if> - <br /> - - <table> - <tr> - <td><s:text name="weblogEdit.searchDescription" />:<tags:help key="weblogEdit.searchDescription.tooltip"/></td> - <td><s:textfield name="bean.searchDescription" size="60" maxlength="255" style="width:100%"/> </td> - </tr> - <tr> - <td><s:text name="weblogEdit.enclosureURL" />:<tags:help key="weblogEdit.enclosureURL.tooltip"/></td> - <td><s:textfield name="bean.enclosureURL" size="40" maxlength="255" style="width:100%"/></td> - </tr> - <s:if test="actionName == 'entryEdit'"> - <tr> - <td></td> - <td><s:if test="bean.enclosureURL != null"> - <s:text name="weblogEdit.enclosureType" />: <s:property value='entry.findEntryAttribute("att_mediacast_type")' /> - <s:text name="weblogEdit.enclosureLength" />: <s:property value='entry.findEntryAttribute("att_mediacast_length")' /> - </s:if></td> - </tr> - </s:if> - </table> - </div> + <%-- Advanced settings --%> + + <div class="panel panel-default" id="panel-settings"> + <div class="panel-heading"> + + <h4 class="panel-title"> + <a class="accordion-toggle" aria-expanded="false" + data-toggle="collapse" data-parent="#collapseAdvanced" href="#collapseAdvanced"> + <s:text name="weblogEdit.miscSettings"/> </a> + </h4> + + </div> + <div id="collapseAdvanced" class="panel-collapse collapse in"> + <div class="panel-body"> + + <div class="form-group"> + + <label class="col-sm-3 control-label"><s:text name="weblogEdit.pubTime"/></label> + + <div class="col-sm-9 controls"> + + <s:select theme="simple" name="bean.hours" list="hoursList"/> : + <s:select theme="simple" name="bean.minutes" list="minutesList"/> : + <s:select theme="simple" name="bean.seconds" list="secondsList"/> + + <script> + $(function () { + $("#entry_bean_dateString").datepicker({ + showOn: "button", + buttonImage: "../../images/calendar.png", + buttonImageOnly: true, + changeMonth: true, + changeYear: true + }); + }); + </script> + + <s:textfield theme="simple" name="bean.dateString" readonly="true"/> + + <s:property value="actionWeblog.timeZone"/> + + </div> + + </div> + + + <%-- + <s:checkbox label="%{getText('weblogEdit.allowComments')}" name="bean.allowComments"/> + <s:select label="%{getText('weblogEdit.commentDays')}" name="bean.commentDays" + list="commentDaysList" listKey="key" listValue="value"/> + --%> + + <%-- use raw HTML tags here, Struts-Bootstrap does not provide this --%> + <div class="form-group"> + + <label class="col-sm-3 control-label" for="entry_bean_allowComments"> + <s:text name="weblogEdit.allowComments" /> + </label> + + <div class="col-sm-9 controls"> + + <div class="input-group"> + + <span class="input-group-addon"> + <input type="checkbox" name="bean.allowComments" + value="true" checked="checked" id="entry_bean_allowComments"/> + <input type="hidden" id="__checkbox_entry_bean_allowComments" + name="__checkbox_bean.allowComments" value="true"/> + </span> + + <select name="bean.commentDays" id="entry_bean_commentDays" class="form-control"> + <option value="0" selected="selected">unlimited days</option> + <option value="3">3 days</option> + <option value="7">7 days</option> + <option value="14">14 days</option> + <option value="30">30 days</option> + <option value="60">60 days</option> + <option value="90">90 days</option> + </select> + + </div> <!-- /input-group --> + + </div> + + </div> <!-- /form-group --> + + <s:checkbox label="%{getText('weblogEdit.rightToLeft')}" name="bean.rightToLeft"/> + + <%-- global admin can pin items to front page weblog --%> + <s:if test="authenticatedUser.hasGlobalPermission('admin')"> + <s:checkbox label="%{getText('weblogEdit.pinnedToMain')}" name="bean.pinnedToMain" + tooltop="%{getText('weblogEdit.pinnedToMain.tooltip')}" /> + </s:if> + + <s:textfield label="%{getText('weblogEdit.searchDescription')}" name="bean.searchDescription" + maxlength="255" tooltip="%{getText('weblogEdit.searchDescription.tooltip')}" /> + + <s:textfield label="%{getText('weblogEdit.enclosureURL')}" name="bean.enclosureURL" + maxlength="255" tooltip="%{getText('weblogEdit.enclosureURL.tooltip')}" /> + + <s:if test="actionName == 'entryEdit'"> + <s:if test="bean.enclosureURL != null"> + <s:text name="weblogEdit.enclosureType"/>: + <s:property value='entry.findEntryAttribute("att_mediacast_type")'/> + <s:text name="weblogEdit.enclosureLength"/>: + <s:property value='entry.findEntryAttribute("att_mediacast_length")'/> + </s:if> + </s:if> + + </div> + + </div> + + </div> + + </div> + <%-- ================================================================== --%> - <%-- the button box --%> - - <br> - <div class="control"> - <span style="padding-left:7px"> - <s:submit value="%{getText('weblogEdit.save')}" action="%{#mainAction}!saveDraft" /> - <s:if test="actionName == 'entryEdit'"> - <input type="button" name="fullPreview" - value="<s:text name='weblogEdit.fullPreviewMode' />" - onclick="fullPreviewMode()" /> - </s:if> - <s:if test="userAnAuthor"> - <s:submit value="%{getText('weblogEdit.post')}" action="%{#mainAction}!publish"/> - </s:if> - <s:else> - <s:submit value="%{getText('weblogEdit.submitForReview')}" action="%{#mainAction}!publish"/> - </s:else> - </span> + <%-- The button box --%> + <%-- save draft --%> + <s:submit cssClass="btn btn-default" + value="%{getText('weblogEdit.save')}" + action="%{#mainAction}!saveDraft"/> + + <s:if test="actionName == 'entryEdit'"> + + <%-- preview mode --%> + <input class="btn btn-default" type="button" name="fullPreview" + value="<s:text name='weblogEdit.fullPreviewMode' />" + onclick="fullPreviewMode()"/> + </s:if> + <s:if test="userAnAuthor"> + + <%-- publish --%> + <s:submit cssClass="btn btn-default" + value="%{getText('weblogEdit.post')}" + action="%{#mainAction}!publish"/> + </s:if> + <s:else> + + <%-- submit for review --%> + <s:submit cssClass="btn btn-default" + value="%{getText('weblogEdit.submitForReview')}" + action="%{#mainAction}!publish" /> + </s:else> + + <%-- delete --%> <s:if test="actionName == 'entryEdit'"> <span style="float:right"> <s:url var="removeUrl" action="entryRemove"> - <s:param name="weblog" value="actionWeblog.handle" /> - <s:param name="removeId" value="%{entry.id}" /> + <s:param name="weblog" value="actionWeblog.handle"/> + <s:param name="removeId" value="%{entry.id}"/> </s:url> - <input type="button" value="<s:text name='weblogEdit.deleteEntry'/>" onclick="window.location='<s:property value="removeUrl" escape="false" />'" /> + <input class="btn btn-default" type="button" + value="<s:text name='weblogEdit.deleteEntry'/>" + onclick="window.location='<s:property value="removeUrl" escape="false"/>'"/> </span> </s:if> - </div> - + <%-- ================================================================== --%> <%-- Trackback control --%> + <s:if test="actionName == 'entryEdit' && userAnAuthor"> - <br /> - <h2><s:text name="weblogEdit.trackback" /></h2> - <s:text name="weblogEdit.trackbackUrl" /> - <br /> + <br/> + <h2><s:text name="weblogEdit.trackback"/></h2> + <s:text name="weblogEdit.trackbackUrl"/> + <br/> <s:textfield name="trackbackUrl" size="80" maxlength="255" style="width:35%"/> - <s:submit value="%{getText('weblogEdit.sendTrackback')}" action="entryEdit!trackback" /> + <s:submit value="%{getText('weblogEdit.sendTrackback')}" action="entryEdit!trackback"/> </s:if> </s:form> <script> -function fullPreviewMode() { - window.open('<s:property value="previewURL" />'); -} - -//Get cookie to determine state of control -if (getCookie('control_miscControl') != null) { - if(getCookie('control_miscControl') == 'true'){ - toggle('miscControl'); - togglePlusMinus('imiscControl'); - } -} -if (getCookie('control_pluginControl') != null) { - if(getCookie('control_pluginControl') == 'true'){ - toggle('pluginControl'); - togglePlusMinus('ipluginControl'); + function fullPreviewMode() { + window.open('<s:property value="previewURL" />'); } -} -$(function() { -function split( val ) { - return val.split( / \s*/ ); -} -function extractLast( term ) { - return split( term ).pop(); -} -$( "#tagAutoComplete" ) - // don't navigate away from the field on tab when selecting an item - .bind( "keydown", function( event ) { - if ( event.keyCode === $.ui.keyCode.TAB && $( this ).autocomplete( "instance" ).menu.active ) { - event.preventDefault(); + + $(function () { + function split(val) { + return val.split(/ \s*/); } - }) - .autocomplete({ - delay: 500, - source: function(request, response) { - $.getJSON("<s:property value='jsonAutocompleteUrl' />", { format: 'json', prefix: extractLast( request.term ) }, - function(data) { - response($.map(data.tagcounts, function (dataValue) { - return { - value: dataValue.tag - }; - })) - }) - }, - focus: function() { - // prevent value inserted on focus - return false; - }, - select: function( event, ui ) { - var terms = split( this.value ); - // remove the current input - terms.pop(); - // add the selected item - terms.push( ui.item.value ); - // add placeholder to get the space at the end - terms.push( "" ); - this.value = terms.join( " " ); - return false; + + function extractLast(term) { + return split(term).pop(); } + + $("#tagAutoComplete") + // don't navigate away from the field on tab when selecting an item + .bind("keydown", function (event) { + if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active) { + event.preventDefault(); + } + }) + .autocomplete({ + delay: 500, + source: function (request, response) { + $.getJSON("<s:property value='jsonAutocompleteUrl' />", { + format: 'json', + prefix: extractLast(request.term) + }, + function (data) { + response($.map(data.tagcounts, function (dataValue) { + return { + value: dataValue.tag + }; + })) + }) + }, + focus: function () { + // prevent value inserted on focus + return false; + }, + select: function (event, ui) { + var terms = split(this.value); + // remove the current input + terms.pop(); + // add the selected item + terms.push(ui.item.value); + // add placeholder to get the space at the end + terms.push(""); + this.value = terms.join(" "); + return false; + } + }); }); -}); </script> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp index 5050b29..d881f87 100644 --- a/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/editor/EntryEditor.jsp @@ -18,26 +18,52 @@ <%-- This page is designed to be included in EntryEdit.jsp --%> <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> + <%-- ********************************************************************* --%> -<%-- Text editors --%> +<%-- HTML text areas for editing content and summary --%> + +<div class="panel panel-default" id="panel-content"> + <div class="panel-heading"> -<p class="toplabel"> + <h4 class="panel-title"> + <a data-toggle="collapse" data-target="#collapseContentEditor" href="#collapseContentEditor"> + <s:text name="weblogEdit.content"/> </a> + </h4> + + </div> + <div id="collapseContentEditor" class="panel-collapse collapse in"> + <div class="panel-body"> -</p> + <span style="font-weight:normal;float:right;"> + <a href="#" onClick="onClickAddImage();"><s:text name="weblogEdit.insertMediaFile"/></a> + </span> + + <s:textarea id="edit_content" name="bean.text" cols="75" rows="25" tabindex="5"/> -<div id="accordion"> - <h3> - <s:text name="weblogEdit.content" /> - <span style="font-weight:normal;float:right;"> - <a href="#" onClick="onClickAddImage();"><s:text name="weblogEdit.insertMediaFile" /></a> - </span> - </h3> - <div> - <s:textarea id="edit_content" name="bean.text" cols="75" rows="25" cssStyle="width: 100%" tabindex="5"/> + </div> </div> - <h3><s:text name="weblogEdit.summary"/><tags:help key="weblogEdit.summary.tooltip"/></h3> - <div> - <s:textarea id="edit_summary" name="bean.summary" cols="75" rows="10" cssStyle="width: 100%" tabindex="6"/> +</div> + +<%-- summary --%> + +<div class="panel panel-default" id="panel-summary"> + <div class="panel-heading"> + + <h4 class="panel-title"> + <a href="#collapseSummaryEditor" + aria-controls="collapseSummaryEditor" aria-expanded="false" + data-toggle="collapse" data-target="#collapseSummaryEditor" > + <s:text name="weblogEdit.summary"/> + </a> + </h4> + + </div> + <div id="collapseSummaryEditor" class="panel-collapse collapse in"> + <div class="panel-body"> + + <s:textarea id="edit_summary" name="bean.summary" cols="75" rows="10" tabindex="6"/> + + </div> </div> </div> @@ -55,6 +81,7 @@ </iframe> </div> + <%-- ********************************************************************* --%> <%-- Editor event handling, on close, on add image, etc. --%> @@ -79,9 +106,9 @@ function onSelectMediaFile(name, url, isImage) { $("#mediafile_edit_lightbox").dialog("close"); - $("#mediaFileEditor").attr('src','about:blank'); + $("#mediaFileEditor").attr('src', 'about:blank'); if (isImage == "true") { - insertMediaFile('<a href="' + url + '"><img src="' + url + '?t=true" alt="' + name+ '"></img></a>'); + insertMediaFile('<a href="' + url + '"><img src="' + url + '?t=true" alt="' + name + '"></img></a>'); } else { insertMediaFile('<a href="' + url + '">' + name + '</a>'); } @@ -89,13 +116,10 @@ </script> <s:if test="editor.id == 'editor-text.jsp'"> - <%-- Plain text editor (raw HTML entry) --%> + + <%-- Media insertion for plain textarea editor --%> <script> - $(function() { - $( "#accordion" ).accordion({ - }); - }); function insertMediaFile(anchorTag) { insertAtCursor(document.getElementById('edit_content'), anchorTag); } @@ -126,9 +150,11 @@ } } </script> + </s:if> <s:else> - <%-- Rich text editor (Xinha, see: http://trac.xinha.org/wiki/NewbieGuide) --%> + + <%-- Include the Rich text editor (Xinha, see: http://trac.xinha.org/wiki/NewbieGuide) --%> <s:url var="xinhaHome" value="/roller-ui/authoring/editors/xinha-0.96.1"></s:url> <script> @@ -137,6 +163,7 @@ _editor_lang = "en"; // And the language we need to use in the editor. _editor_skin = "blue-look"; // If you want use a skin, add the name (of the folder) here </script> + <script src="<s:property value="xinhaHome" />/XinhaCore.js"></script> <script> @@ -153,6 +180,8 @@ }); }); + <%-- Media insertion for Xinha editor --%> + function insertMediaFile(anchorTag) { xinha_editors.edit_content.insertHTML(anchorTag); } @@ -199,4 +228,5 @@ Xinha._addEvent(window,'load', xinha_init); </script> + </s:else> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAdd.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAdd.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAdd.jsp index 08d7e4a..e2e96a9 100644 --- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAdd.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAdd.jsp @@ -16,7 +16,6 @@ directory of this distribution. --%> <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> -<script src="<s:url value="/roller-ui/scripts/jquery-2.1.1.min.js" />"></script> <script> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp b/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp index fbef230..9156adc 100644 --- a/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/taglibs-struts2.jsp @@ -16,11 +16,17 @@ directory of this distribution. --%> <% response.setContentType("text/html; charset=UTF-8"); %> + <%@ page language="java" contentType="text/html; charset=UTF-8" %> + <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> -<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib uri="/struts-tags" prefix="s" %> + +<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://jakarta.apache.org/taglibs/string-1.1" prefix="str" %> -<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%> + +<%@ taglib uri="/struts-tags" prefix="s" %> +<%@ taglib uri="/struts-bootstrap-tags" prefix="sboo" %> + +<%@ taglib tagdir="/WEB-INF/tags" prefix="tags" %> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp index 03ea6f9..4258949 100644 --- a/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp @@ -17,50 +17,104 @@ --%> <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> -<div class="bannerStatusBox"> - - <table class="bannerStatusBox" cellpadding="0" cellspacing="0"> - <tr> - <td class="bannerLeft"> - - <s:if test="authenticatedUser != null"> - <s:text name="mainPage.loggedInAs" /> - <a href="<s:url action="menu" namespace="/roller-ui" />"><s:property value="authenticatedUser.userName"/></a> - </s:if> - +<nav class="navbar navbar-default navbar-static-top navbar-inverse"> + <div class="container"> + <div id="navbar" class="navbar-collapse collapse"> + + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" + data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Apache Roller</a> + </div> + + <ul class="nav navbar-nav"> +i + <%-- <s:if test="authenticatedUser != null"> + <li> + <a href="<s:url action="menu" namespace="/roller-ui" />"> + <s:text name="mainPage.loggedInAs" />: <s:property value="authenticatedUser.userName"/> + </a> + </li> + </s:if> --%> <s:if test="actionWeblog != null"> - - <s:text name="mainPage.currentWebsite" /> - <b><a href='<s:property value="actionWeblog.absoluteURL" />'> - <s:property value="actionWeblog.handle" /> - </a></b> + + <%-- <li> + <a href='<s:property value="actionWeblog.absoluteURL" />'> + <s:text name="mainPage.currentWebsite" />: <s:property value="actionWeblog.handle" /> + </a> + </li> --%> + + <s:set name="tabMenu" value="menu"/> + <s:if test="#tabMenu != null"> + <s:iterator id="tab" value="#tabMenu.tabs"> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" + aria-haspopup="true" aria-expanded="false"> + <s:text name="%{#tab.key}"/> <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <s:iterator id="tabItem" value="#tab.items" status="stat"> + <li> + <a href="<s:url action="%{#tabItem.action}"> + <s:param name="weblog" value="actionWeblog.handle"/></s:url>"> + <s:text name="%{#tabItem.key}"/> + </a> + </li> + </s:iterator> + </ul> + </li> + </s:iterator> + </s:if> </s:if> - - </td> + + </ul> - <td class="bannerRight"> - - <a href="<s:url value='/'/>"><s:property value="getProp('site.shortName')"/></a> - - | <a href="<s:url action='menu' namespace='/roller-ui' />"><s:text name="mainPage.mainMenu" /></a> + <ul class="nav navbar-nav navbar-right"> + <li><a href="<s:url value='/'/>"><s:property value="getProp('site.shortName')"/></a></li> + + <li> + <a href="<s:url action='menu' namespace='/roller-ui' />"> + <s:text name="mainPage.mainMenu" /></a> + </li> + <s:if test="authenticatedUser != null"> - | <a href="<s:url action='logout' namespace='/roller-ui' />"><s:text name="navigationBar.logout"/></a> + <li> + <a href="<s:url action='logout' namespace='/roller-ui' />"> + <s:text name="navigationBar.logout"/></a> + </li> </s:if> <s:else> - | <a href="<s:url action='login-redirect' namespace='/roller-ui' />"><s:text name="navigationBar.login"/></a> - + <li> + <a href="<s:url action='login-redirect' namespace='/roller-ui' />"> + <s:text name="navigationBar.login"/></a> + </li> + <s:if test="getBooleanProp('users.registration.enabled') && getProp('authentication.method') != 'ldap'"> - | <a href="<s:url action='register' namespace='/roller-ui' />"><s:text name="navigationBar.register"/></a> + <li> + <a href="<s:url action='register' namespace='/roller-ui' />"> + <s:text name="navigationBar.register"/></a> + </li> </s:if> + <s:elseif test="getProp('users.registration.url') != null && getProp('users.registration.url') > 0"> - | <a href="<s:property value="getProp('users.registration.url')"/>"><s:text name="navigationBar.register"/></a> + <li> + <a href="<s:property value="getProp('users.registration.url')"/>"> + <s:text name="navigationBar.register"/></a> + </li> </s:elseif> </s:else> - </td> - </tr> - </table> - -</div> + </ul> + </div><!--/.nav-collapse --> + </div> +</nav> + + http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/tiles/head-ajax.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/head-ajax.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/head-ajax.jsp index f890ec9..2acbab6 100644 --- a/app/src/main/webapp/WEB-INF/jsps/tiles/head-ajax.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/tiles/head-ajax.jsp @@ -2,18 +2,35 @@ This default stuff goes in the HTML head element of each page You can override it with your own file via WEB-INF/tiles-def.xml --%> + <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> +<%-- <link rel="stylesheet" media="all" href="<s:url value='/roller-ui/yui3/cssreset/cssreset-min.css'/>" /> <link rel="stylesheet" media="all" href="<s:url value='/roller-ui/yui3/cssfonts/cssfonts-min.css'/>" /> <link rel="stylesheet" media="all" href="<s:url value='/roller-ui/yui3/cssbase/cssbase-min.css'/>" /> - <link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/layout.css"/>' /> <link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/roller.css"/>' /> <link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/menu.css"/>' /> - <link rel="stylesheet" media="all" href="<s:url value="/roller-ui/theme/"/><s:property value="getProp('editor.theme')" />/colors.css" /> +--%> + +<%-- jquery and bootstrap --%> +<script src="<s:url value="/roller-ui/scripts/jquery-2.1.1.min.js" />"></script> +<link rel="stylesheet" media="all" + href='<s:url value="/roller-ui/bootstrap-3.3.6-dist/css/bootstrap.min.css"/>' /> +<link rel="stylesheet" media="all" + href='<s:url value="/roller-ui/bootstrap-3.3.6-dist/css/bootstrap-theme.min.css"/>' /> +<script src="<s:url value="/roller-ui/bootstrap-3.3.6-dist/js/bootstrap.min.js"/>"></script> + +<%-- the links generated by the Struts-Bootstrap plugin are 404s --%> + +<sb:head includeScripts="false" includeScriptsValidation="false"/> + +<%-- roller Javascropt and styles --%> + +<link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/roller.css"/>' /> <script src="<s:url value="/theme/scripts/roller.js"/>"></script> <%-- struts2 head disabled until we need it --%> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/tiles/head.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/head.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/head.jsp index 912cd4b..23efc18 100644 --- a/app/src/main/webapp/WEB-INF/jsps/tiles/head.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/tiles/head.jsp @@ -2,16 +2,33 @@ This default stuff goes in the HTML head element of each page You can override it with your own file via WEB-INF/tiles-def.xml --%> + <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> +<%-- <link rel="stylesheet" media="all" href="<s:url value='/roller-ui/yui3/cssreset/cssreset-min.css'/>" /> <link rel="stylesheet" media="all" href="<s:url value='/roller-ui/yui3/cssfonts/cssfonts-min.css'/>" /> <link rel="stylesheet" media="all" href="<s:url value='/roller-ui/yui3/cssbase/cssbase-min.css'/>" /> - <link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/layout.css"/>' /> <link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/roller.css"/>' /> <link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/menu.css"/>' /> +<link rel="stylesheet" media="all" href="<s:url value="/roller-ui/theme/"/><s:property value="getProp('editor.theme')" />/colors.css" /> +--%> + +<%-- jquery and bootstrap --%> -<link rel="stylesheet" media="all" href="<s:url value="/roller-ui/theme/"/><s:property value="getProp('editor.theme')"/>/colors.css" /> +<script src="<s:url value="/roller-ui/scripts/jquery-2.1.1.min.js" />"></script> +<link rel="stylesheet" media="all" + href='<s:url value="/roller-ui/bootstrap-3.3.6-dist/css/bootstrap.min.css"/>' /> +<link rel="stylesheet" media="all" + href='<s:url value="/roller-ui/bootstrap-3.3.6-dist/css/bootstrap-theme.min.css"/>' /> +<script src="<s:url value="/roller-ui/bootstrap-3.3.6-dist/js/bootstrap.min.js"/>"></script> +<%-- the links generated by the Struts-Bootstrap plugin are 404s --%> + +<sb:head includeScripts="false" includeScriptsValidation="false"/> + +<%-- roller Javascropt and styles --%> + +<link rel="stylesheet" media="all" href='<s:url value="/roller-ui/styles/roller.css"/>' /> <script src="<s:url value="/theme/scripts/roller.js"/>"></script> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/tiles/menu.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/menu.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/menu.jsp index 3928e07..6166efb 100644 --- a/app/src/main/webapp/WEB-INF/jsps/tiles/menu.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/tiles/menu.jsp @@ -20,41 +20,47 @@ <s:set name="tabMenu" value="menu"/> <s:if test="#tabMenu != null"> -<table class="menuTabTable" cellspacing="0" > -<tr> -<s:iterator id="tab" value="#tabMenu.tabs" > - <s:if test="#tab.selected"> - <s:set name="selectedTab" value="#tab" /> - <td class="menuTabSelected"> - </s:if> - <s:else> - <td class="menuTabUnselected"> - </s:else> - <div class="menu-tr"> - <div class="menu-tl"> - <a href="<s:url action="%{#tab.action}"><s:param name="weblog" value="actionWeblog.handle"/></s:url>"><s:text name="%{#tab.key}" /></a> - </div> - </div> - </td> - <td class="menuTabSeparator"></td> -</s:iterator> -</tr> -</table> - -<table class="menuItemTable" cellspacing="0" > - <tr> - <td class="padleft"> - <s:iterator id="tabItem" value="#selectedTab.items" status="stat"> - <s:if test="!#stat.first">|</s:if> - <s:if test="#tabItem.selected"> - <a class="menuItemSelected" href="<s:url action="%{#tabItem.action}"><s:param name="weblog" value="actionWeblog.handle"/></s:url>"><s:text name="%{#tabItem.key}" /></a> - </s:if> - <s:else> - <a class="menuItemUnselected" href="<s:url action="%{#tabItem.action}"><s:param name="weblog" value="actionWeblog.handle"/></s:url>"><s:text name="%{#tabItem.key}" /></a> - </s:else> + <%-- + <nav class="navbar navbar-default"> + <div class="container-fluid"> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + + <s:iterator id="tab" value="#tabMenu.tabs"> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" + aria-haspopup="true" aria-expanded="false"> + <s:text name="%{#tab.key}"/> <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <s:iterator id="tabItem" value="#tab.items" status="stat"> + <li> + <a href="<s:url action="%{#tabItem.action}"><s:param name="weblog" value="actionWeblog.handle"/></s:url>"> + <s:text name="%{#tabItem.key}"/> + </a> + </li> + </s:iterator> + </ul> + </li> + </s:iterator> + + </ul> + </div> <!--/.nav-collapse --> + </div> <!--/.container-fluid --> + </nav> + + <s:iterator id="tab" value="#tabMenu.tabs"> + + <h3><s:text name="%{#tab.key}"/></h3> + + <div class="list-group"> + <s:iterator id="tabItem" value="#tab.items" status="stat"> + <a class="list-group-item" href="<s:url action="%{#tabItem.action}"><s:param name="weblog" value="actionWeblog.handle"/></s:url>"> + <s:text name="%{#tabItem.key}"/></a> </s:iterator> - </td> - </tr> -</table> + </div> + </s:iterator> + --%> + </s:if> http://git-wip-us.apache.org/repos/asf/roller/blob/2da6c3c2/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp index 3613fc3..9f5c3c5 100644 --- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp @@ -18,47 +18,49 @@ <%@ 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> +<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> - - <div id="banner"> - <tiles:insertAttribute name="bannerStatus" /> - </div> - - <div id="content"> - <div id="leftcontent_wrap"> - <div id="leftcontent"> - </div> - </div> - - <div id="centercontent_wrap"> - <div id="centercontent"> - <h1><s:property value="pageTitle" /></h1> - <tiles:insertAttribute name="messages" /> - <tiles:insertAttribute name="content" /> - </div> - </div> - - <div id="rightcontent_wrap"> - <div id="rightcontent"> - <tiles:insertAttribute name="sidebar" /> - </div> + <tiles:insertAttribute name="head"/> + <style> + <tiles:insertAttribute name="styles" /> + </style> +</head> +<body> + +<tiles:insertAttribute name="bannerStatus"/> + +<div class="row"> + + <div class="col-md-3 roller-column-left"> + <div class="panel panel-default"> + <div class="panel-body"> + <tiles:insertAttribute name="sidebar"/> </div> </div> - - <div id="footer"> - <tiles:insertAttribute name="footer" /> + </div> + + <div class="col-md-9 roller-column-right"> + + <div class="panel panel-default"> + <div class="panel-body"> + <h1><s:property value="pageTitle"/></h1> + <tiles:insertAttribute name="messages"/> + <tiles:insertAttribute name="content"/> + </div> </div> - - </body> + + </div> +</div> + +<footer class="footer"> + <div class="container"> + <tiles:insertAttribute name="footer"/> + </div> +</footer> + +</body> </html>
