From: <udi...@us...> - 2022-02-10 13:57:53
|
Revision: 1432 http://sourceforge.net/p/j-trac/code/1432 Author: udittmer Date: 2022-02-10 13:57:51 +0000 (Thu, 10 Feb 2022) Log Message: ----------- make background colors configurable (#175) Modified Paths: -------------- trunk/jtrac/src/main/java/info/jtrac/Jtrac.java trunk/jtrac/src/main/java/info/jtrac/JtracImpl.java trunk/jtrac/src/main/java/info/jtrac/domain/Config.java trunk/jtrac/src/main/java/info/jtrac/mail/MailSender.java trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java trunk/jtrac/src/main/java/info/jtrac/wicket/SpacePermissionsPage.html trunk/jtrac/src/main/resources/messages.properties trunk/jtrac/src/main/resources/messages_de.properties trunk/jtrac/src/main/resources/messages_en.properties trunk/jtrac/src/main/webapp/resources/jtrac.css Modified: trunk/jtrac/src/main/java/info/jtrac/Jtrac.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/Jtrac.java 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/Jtrac.java 2022-02-10 13:57:51 UTC (rev 1432) @@ -112,6 +112,7 @@ Map<String, String> loadAllConfig(); void storeConfig(Config config); String loadConfig(String param); + String loadConfig(String param, String defaultValue); //======================================================== void rebuildIndexes(BatchInfo batchInfo); boolean validateTextSearchQuery(String text); Modified: trunk/jtrac/src/main/java/info/jtrac/JtracImpl.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/JtracImpl.java 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/JtracImpl.java 2022-02-10 13:57:51 UTC (rev 1432) @@ -765,6 +765,15 @@ return value; } + public String loadConfig(String param, String defaultValue) { + String val = loadConfig(param); + if (val == null) { + return defaultValue; + } else { + return val; + } + } + //======================================================== public void rebuildIndexes(BatchInfo batchInfo) { Modified: trunk/jtrac/src/main/java/info/jtrac/domain/Config.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/domain/Config.java 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/domain/Config.java 2022-02-10 13:57:51 UTC (rev 1432) @@ -54,6 +54,8 @@ PARAMS.add("jtrac.url.base"); PARAMS.add("jtrac.header.picture"); PARAMS.add("jtrac.header.text"); + PARAMS.add("jtrac.bgcolor.gray"); + PARAMS.add("jtrac.bgcolor.blue"); PARAMS.add("jtrac.edit.item"); PARAMS.add("locale.default"); PARAMS.add("session.timeout"); Modified: trunk/jtrac/src/main/java/info/jtrac/mail/MailSender.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/mail/MailSender.java 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/mail/MailSender.java 2022-02-10 13:57:51 UTC (rev 1432) @@ -20,6 +20,7 @@ import info.jtrac.domain.ItemUser; import info.jtrac.domain.User; import info.jtrac.util.ItemUtils; +import info.jtrac.wicket.JtracApplication; import java.io.File; import java.util.ArrayList; @@ -261,6 +262,7 @@ } MimeMessage message = sender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, "UTF-8"); + String bgColorGray = JtracApplication.get().getJtrac().loadConfig("jtrac.bgcolor.gray", "#CCCCCC"); try { helper.setTo(user.getEmail()); helper.setSubject(prefix + " " + fmt("loginMailSubject", locale)); @@ -269,11 +271,11 @@ + user.getName() + ",</p>"); sb.append("<p>" + fmt("loginMailLine1", locale) + "</p>"); sb.append("<table class='jtrac'>"); - sb.append("<tr><th style='background: #CCCCCC'>" + sb.append("<tr><th style='background: "+bgColorGray+"'>" + fmt("loginName", locale) + "</th><td style='border: 1px solid black'>" + user.getLoginName() + "</td></tr>"); - sb.append("<tr><th style='background: #CCCCCC'>" + sb.append("<tr><th style='background: "+bgColorGray+"'>" + fmt("password", locale) + "</th><td style='border: 1px solid black'>" + clearText + "</td></tr>"); Modified: trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java 2022-02-10 13:57:51 UTC (rev 1432) @@ -192,7 +192,9 @@ } private static String getAsHtml (Item item, HttpServletRequest request, HttpServletResponse response, MessageSource ms, Locale loc) { - boolean isWeb = request != null && response != null; + boolean isWeb = request != null && response != null; + String bgColorBlue = JtracApplication.get().getJtrac().loadConfig("jtrac.bgcolor.blue", "#E1ECFE"); + String bgColorGray = JtracApplication.get().getJtrac().loadConfig("jtrac.bgcolor.gray", "#CCCCCC"); String tableStyle = " class='jtrac'"; String tdStyle = ""; @@ -205,9 +207,9 @@ String tdCommonStyle = "border: 1px solid black"; tableStyle = " class='jtrac' style='border-collapse: collapse; font-family: Arial; font-size: 75%'"; tdStyle = " style='" + tdCommonStyle + "'"; - thStyle = " style='" + tdCommonStyle + "; background: #CCCCCC'"; - altStyle = " style='background: #e1ecfe'"; - labelStyle = " style='" + tdCommonStyle + "; background: #CCCCCC; font-weight: bold; text-align: right'"; + thStyle = " style='" + tdCommonStyle + "; background: "+bgColorGray+"'"; + altStyle = " style='background: "+bgColorBlue+"'"; + labelStyle = " style='" + tdCommonStyle + "; background: "+bgColorGray+"; font-weight: bold; text-align: right'"; } StringBuffer sb = new StringBuffer(); Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java 2022-02-10 13:57:51 UTC (rev 1432) @@ -1,85 +1,100 @@ -/* - * Copyright 2002-2005 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package info.jtrac.wicket; - -import info.jtrac.Jtrac; -import info.jtrac.domain.ColumnHeading.Name; -import info.jtrac.domain.Space; -import info.jtrac.domain.User; -import java.util.EnumMap; -import java.util.Map; -import org.apache.wicket.Component; -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.model.StringResourceModel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * base class for all wicket pages, this provides - * a way to access the spring managed service layer - * as well as other convenience common methods - * also takes care of the standard template for all - * pages which is using wicket markup inheritance - */ -public abstract class BasePage extends WebPage { - - protected static final Logger logger = LoggerFactory.getLogger(BasePage.class); - - // helper to avoid polluting non-wicket packages (e.g. excel export, import) with Wicket i18n - public static Map<Name, String> getLocalizedLabels(Component c) { - Map<Name, String> map = new EnumMap<Name, String>(Name.class); - for(Name name : Name.values()) { - map.put(name, c.getLocalizer().getString("item_list." + name.getText(), null)); - } - return map; - } - - protected Jtrac getJtrac() { - return JtracApplication.get().getJtrac(); - } - - protected User getPrincipal() { - return JtracSession.get().getUser(); - } - - protected void setCurrentSpace(Space space) { - JtracSession.get().setCurrentSpace(space); - } - - protected Space getCurrentSpace() { - return JtracSession.get().getCurrentSpace(); - } - - protected String localize(String key) { - return getLocalizer().getString(key, null); - } - - protected String localize(String key, Object... params) { - StringResourceModel m = new StringResourceModel(key, null, null, params); - m.setLocalizer(getLocalizer()); - return m.getString(); - } - - public BasePage() { - add(new IndividualHeadPanel().setRenderBodyOnly(true)); - add(new HeaderPanel().setRenderBodyOnly(true)); - String jtracVersion = getJtrac().getReleaseVersion(); - add(new Label("version", jtracVersion)); - } - -} +/* + * Copyright 2002-2005 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package info.jtrac.wicket; + +import info.jtrac.Jtrac; +import info.jtrac.domain.ColumnHeading.Name; +import info.jtrac.domain.Space; +import info.jtrac.domain.User; +import java.util.EnumMap; +import java.util.Map; + +import org.apache.wicket.Component; +import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.markup.html.IHeaderContributor; +import org.apache.wicket.markup.html.IHeaderResponse; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.StringResourceModel; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * base class for all wicket pages, this provides + * a way to access the spring managed service layer + * as well as other convenience common methods + * also takes care of the standard template for all + * pages which is using wicket markup inheritance + */ +public abstract class BasePage extends WebPage { + + protected static final Logger logger = LoggerFactory.getLogger(BasePage.class); + + // helper to avoid polluting non-wicket packages (e.g. excel export, import) with Wicket i18n + public static Map<Name, String> getLocalizedLabels(Component c) { + Map<Name, String> map = new EnumMap<Name, String>(Name.class); + for(Name name : Name.values()) { + map.put(name, c.getLocalizer().getString("item_list." + name.getText(), null)); + } + return map; + } + + protected Jtrac getJtrac() { + return JtracApplication.get().getJtrac(); + } + + protected User getPrincipal() { + return JtracSession.get().getUser(); + } + + protected void setCurrentSpace(Space space) { + JtracSession.get().setCurrentSpace(space); + } + + protected Space getCurrentSpace() { + return JtracSession.get().getCurrentSpace(); + } + + protected String localize(String key) { + return getLocalizer().getString(key, null); + } + + protected String localize(String key, Object... params) { + StringResourceModel m = new StringResourceModel(key, null, null, params); + m.setLocalizer(getLocalizer()); + return m.getString(); + } + + public BasePage() { + String bgColorBlue = JtracApplication.get().getJtrac().loadConfig("jtrac.bgcolor.blue", "#E1ECFE"); + String bgColorGray = JtracApplication.get().getJtrac().loadConfig("jtrac.bgcolor.gray", "#CCCCCC"); + + add(new IndividualHeadPanel().setRenderBodyOnly(true)); + add(new HeaderPanel().setRenderBodyOnly(true)); + String jtracVersion = getJtrac().getReleaseVersion(); + add(new Label("version", jtracVersion)); + add(new HeaderContributor(new IHeaderContributor() { + public void renderHead(IHeaderResponse response) { + String js = "var r = document.querySelector(':root');\n" + + "r.style.setProperty('--blue', '"+bgColorBlue+"');\n" + + "r.style.setProperty('--gray', '"+bgColorGray+"');\n"; + response.renderOnDomReadyJavascript(js); + } + })); + } +} Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/SpacePermissionsPage.html =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/wicket/SpacePermissionsPage.html 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/java/info/jtrac/wicket/SpacePermissionsPage.html 2022-02-10 13:57:51 UTC (rev 1432) @@ -1,14 +1,6 @@ <html> <head> - <wicket:head> - <style> - .workflow { border-style: solid; border-width: 0 1px 1px 0; border-color: black; } - .workflow td { border-style: solid; border-width: 1px 0 0 1px; padding-left: 0.2em; padding-right: 0.2em; } - .state { background: #e1ecfe; } - .mirror { background: #CCCCCC; } - .transition { font-style: italic; } - </style> - </wicket:head> + <wicket:head /> </head> <body> <wicket:extend> Modified: trunk/jtrac/src/main/resources/messages.properties =================================================================== --- trunk/jtrac/src/main/resources/messages.properties 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/resources/messages.properties 2022-02-10 13:57:51 UTC (rev 1432) @@ -200,6 +200,8 @@ config.jtrac.url.base = Base URL of your JTrac installation ( e.g. http://myserver/jtrac ) required for links in the e-mails to work config.jtrac.header.picture = Individual header picture config.jtrac.header.text = Individual header text +config.jtrac.bgcolor.gray = Background color for labels (default #CCCCCC) +config.jtrac.bgcolor.blue = Background color for header (default #E1ECFE) config.jtrac.edit.item = Should the owner of the task edit their items? (set to true, default is false) config.locale.default = Default language used for this JTrac installation e.g. "de" for German config.session.timeout = Time in minutes after which user session expires (default 30 minutes) Modified: trunk/jtrac/src/main/resources/messages_de.properties =================================================================== --- trunk/jtrac/src/main/resources/messages_de.properties 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/resources/messages_de.properties 2022-02-10 13:57:51 UTC (rev 1432) @@ -193,13 +193,15 @@ # DKIM properties for additional mail authenticity config.mail.dkim.signingDomain = Dom\u00e4ne f\u00fcr die signiert wird -config.mail.dkim.selector = Selektor (default ist "default") +config.mail.dkim.selector = Selektor (Default ist "default") config.mail.dkim.derFile = Pfad zum DER-kodierten privaten RSA Schl\u00fcssel -config.mail.dkim.identity = Identit\u00e4t (default ist "mail.from") +config.mail.dkim.identity = Identit\u00e4t (Default ist "mail.from") config.jtrac.url.base = URL dieser Installation (z.B. http://myserver/jtrac) wird ben\u00F6tigt f\u00FCr Links in den Emails -config.jtrac.header.picture = Inidividuelles Bild oben auf Seite -config.jtrac.header.text = Individueller Text oben auf Seite +config.jtrac.header.picture = Individuelles Bild im Header +config.jtrac.header.text = Individueller Text oim Header +config.jtrac.bgcolor.gray = Hintergrundfarbe \u00dcberschriften (Default ist #CCCCCC) +config.jtrac.bgcolor.blue = Hintergrundfarbe Header (Default ist #E1ECFE) config.jtrac.edit.item = Soll der Autor eines Eintrages diesen editieren k\u00f6nnen? (auf true setzen, Default ist false) config.locale.default = Default Sprache, z.B. "de" f\u00FCr Deutsch config.session.timeout = Session Timeout in Minuten (Default 30 Minuten) Modified: trunk/jtrac/src/main/resources/messages_en.properties =================================================================== --- trunk/jtrac/src/main/resources/messages_en.properties 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/resources/messages_en.properties 2022-02-10 13:57:51 UTC (rev 1432) @@ -200,6 +200,8 @@ config.jtrac.url.base = Base URL of your JTrac installation ( e.g. http://myserver/jtrac ) required for links in the e-mails to work config.jtrac.header.picture = Individual header picture config.jtrac.header.text = Individual header text +config.jtrac.bgcolor.gray = Background color for labels (default #CCCCCC) +config.jtrac.bgcolor.blue = Background color for header (default #E1ECFE) config.jtrac.edit.item = Should the owner of the task edit their items? (set to true, default is false) config.locale.default = Default language used for this JTrac installation e.g. "de" for German config.session.timeout = Time in minutes after which user session expires (default 30 minutes) Modified: trunk/jtrac/src/main/webapp/resources/jtrac.css =================================================================== --- trunk/jtrac/src/main/webapp/resources/jtrac.css 2022-02-09 10:51:21 UTC (rev 1431) +++ trunk/jtrac/src/main/webapp/resources/jtrac.css 2022-02-10 13:57:51 UTC (rev 1432) @@ -1,42 +1,52 @@ -body { font-family: Arial; background: #FFF; font-size: 80%; } -table.jtrac th, table.jtrac td.label { background: #CCCCCC; padding-left: 0.2em; padding-right: 0.2em; } -tr.center td { text-align: center; } -.label { font-weight: bold; text-align: right; } -a { color: #0000D9; } -a:hover { color: black; } -img { border: none; vertical-align: middle; } -.multiselect { overflow: auto; background: #FFF; text-align: left; border: 1px solid #CCCCCC; } -.scrollable { height: 10em; } -.error-input { border: 1px solid #CC2200; } -div.error-input { float: left; } -div.error-input select { border: none; } -.error { color: #CC2200; font-weight: bold; margin-bottom: 1em; } -.error-back { background: #FFB6C1; } -.info { color: #0000D9; font-weight: bold; } -.heading { color: #0000D9; font-weight: bold; margin-bottom: 1em; } -.alt { background: #e1ecfe; } -.selected, table.jtrac .selected { background: #c3d9ff; } -.bdr-bottom, tr.bdr-bottom td { border-bottom: 1px solid #CCCCCC; } -.nav-header { background: #CCCCCC; padding: 0.1em; } -.nav-header table, .jtrac-list, .jtrac-view { font-size: 95%; } -.jtrac-view { border: 1px solid #CCCCCC; } -.nav-header img, img.nav-link { margin-top: 1px; margin-right: 0.3em; } -.nav-header img, a img.nav-link { vertical-align: top; display: block; float: left; } -.nav-header td, .nav-table td { font-weight: bold; text-align: right; padding: 0 10px 0 10px; background-color: #e1ecfe; } -.nav-table td.icon { padding: 0; text-align: center; width: 4em; } -.nav-table td a { width: 100%; display: block; } -.bdr-collapse { border-collapse: collapse; } -.bdr-collapse td { padding: 0; } -.page-links { font-weight: bold; } -.nav-header td { padding-left: 0.7em; } -.space-below { padding-bottom: 0.5em; } -tr.sortable th { background-position: right; background-repeat: no-repeat; } -tr.sortable th.order-none { background-image: url("arrow_off.gif"); } -tr.sortable th.order-up { background-color: #c3d9ff; background-image: url("arrow_up.gif"); } -tr.sortable th.order-down { background-color: #c3d9ff; background-image: url("arrow_down.gif"); } -tr.sortable a { color: black; } -tr.sortable a:hover { color: #0000D9; } -/* { list-style-image: url("error.gif"); } */ -li.feedbackPanelINFO { list-style-image: url("success.gif"); padding-left: 0.4em; } -li.feedbackPanelERROR { list-style-image: url("error.gif"); padding-left: 0.4em; } -.menu-option div { font-weight: bold; background-color: #e1ecfe; padding-left: 1em; padding-right: 1em; margin-bottom: 1.5em; } +:root { + --blue: #E1ECFE; + --gray: #CCCCCC; +} +body { font-family: Arial; background: #FFF; font-size: 80%; } +table.jtrac th, table.jtrac td.label { background: var(--gray); padding-left: 0.2em; padding-right: 0.2em; } +tr.center td { text-align: center; } +.label { font-weight: bold; text-align: right; } +a { color: #0000D9; } +a:hover { color: black; } +img { border: none; vertical-align: middle; } +.multiselect { overflow: auto; background: #FFF; text-align: left; border: 1px solid var(--gray); } +.scrollable { height: 10em; } +.error-input { border: 1px solid #CC2200; } +div.error-input { float: left; } +div.error-input select { border: none; } +.error { color: #CC2200; font-weight: bold; margin-bottom: 1em; } +.error-back { background: #FFB6C1; } +.info { color: #0000D9; font-weight: bold; } +.heading { color: #0000D9; font-weight: bold; margin-bottom: 1em; } +.alt { background: var(--blue); } +.selected, table.jtrac .selected { background: #c3d9ff; } +.bdr-bottom, tr.bdr-bottom td { border-bottom: 1px solid var(--gray); } +.nav-header { background: var(--gray); padding: 0.1em; } +.nav-header table, .jtrac-list, .jtrac-view { font-size: 95%; } +.jtrac-view { border: 1px solid var(--gray); } +.nav-header img, img.nav-link { margin-top: 1px; margin-right: 0.3em; } +.nav-header img, a img.nav-link { vertical-align: top; display: block; float: left; } +.nav-header td, .nav-table td { font-weight: bold; text-align: right; padding: 0 10px 0 10px; background-color: var(--blue); } +.nav-table td.icon { padding: 0; text-align: center; width: 4em; } +.nav-table td a { width: 100%; display: block; } +.bdr-collapse { border-collapse: collapse; } +.bdr-collapse td { padding: 0; } +.page-links { font-weight: bold; } +.nav-header td { padding-left: 0.7em; } +.space-below { padding-bottom: 0.5em; } +tr.sortable th { background-position: right; background-repeat: no-repeat; } +tr.sortable th.order-none { background-image: url("arrow_off.gif"); } +tr.sortable th.order-up { background-color: #c3d9ff; background-image: url("arrow_up.gif"); } +tr.sortable th.order-down { background-color: #c3d9ff; background-image: url("arrow_down.gif"); } +tr.sortable a { color: black; } +tr.sortable a:hover { color: #0000D9; } +/* { list-style-image: url("error.gif"); } */ +li.feedbackPanelINFO { list-style-image: url("success.gif"); padding-left: 0.4em; } +li.feedbackPanelERROR { list-style-image: url("error.gif"); padding-left: 0.4em; } +.menu-option div { font-weight: bold; background-color: var(--blue); padding-left: 1em; padding-right: 1em; margin-bottom: 1.5em; } + +.workflow { border-style: solid; border-width: 0 1px 1px 0; border-color: black; } +.workflow td { border-style: solid; border-width: 1px 0 0 1px; padding-left: 0.2em; padding-right: 0.2em; } +.state { background: var(--blue); } +.mirror { background: var(--gray); } +.transition { font-style: italic; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |