├── LICENSE ├── README.md ├── javascripts └── theme.js └── stylesheets └── application.css /LICENSE: -------------------------------------------------------------------------------- 1 | farend basic - theme for Redmine 2 | Copyright (C) 2010-2016 FAR END Technologies Corporation 3 | 4 | This program is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License 6 | as published by the Free Software Foundation; either version 2 7 | of the License, or (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program; if not, write to the Free Software 16 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Redmine用テーマ "farend basic" 2 | 3 | ## このテーマについて 4 | 5 | Redmine用のカスタムテーマです。日本語環境で見やすい画面を実現することを目的に、Redmine付属のデフォルトテーマを元に作成したものです。 6 | 7 | デフォルトテーマに対する変更は必要最小限としていますので、見た目が大きく変わることはありません。既にRedmineを運用中の組織でも利用者を混乱させずにスムーズに移行できます。 8 | 9 | このテーマは、Redmimeのクラウドサービス [My Redmine](https://hosting.redmine.jp/) のサービス提供用に開発し、OSSとして公開したものです。 10 | 11 | [](https://hosting.redmine.jp/) 12 | 13 | ## 特徴 14 | 15 | * 日本語フォントを優先して使用するよう設定を行いました。これにより、¥記号がバックスラッシュとして表示されていた問題が解決します(WindowsおよびメイリオがインストールされているMacのみ) 16 | * メイリオフォントがインストールされている環境ではメイリオを使って文字が表示されますので、画面上の文字が読みやすくなります 17 | * 文字と背景のコントラストを高めて読みやすくするために、文字の色を全体的に見直しました 18 | * チケット一覧画面において優先度に対応した色分け表示を行うための設定をRedmine標準添付のAlternateテーマから取り込みました 19 | * チケット一覧画面において期限が超過したチケットをオレンジ色で表示するよう変更しました 20 | * チケット一覧画面において担当者・作者欄の自分の名前を太字で表示するよう変更しました 21 | 22 | ## 利用環境 23 | 24 | ## インストール方法 25 | 26 | ### 1: テーマが格納されたディレクトリを作成 27 | 28 | Redmineのインストールディレクトリで以下のコマンドを実行してください。 29 | 30 | ``` 31 | git clone https://github.com/farend/redmine_theme_farend_basic.git themes/farend_basic 32 | ``` 33 | 34 | #### Redmine5.1以前の場合 35 | 36 | Redmineのインストールディレクトリで以下のコマンドを実行してください。 37 | 38 | ``` 39 | git clone -b redmine5.1 https://github.com/farend/redmine_theme_farend_basic.git public/themes/farend_basic 40 | ``` 41 | 42 | ### 2: テーマの設定を変更 43 | 44 | Redmineの管理画面で新しいテーマを利用する設定を行います。 45 | 46 | 「管理」→「設定」→「表示」画面内の項目「テーマ」で「Farend basic」を選 47 | 択、画面最下部の「保存」ボタンをクリックしてください。 48 | -------------------------------------------------------------------------------- /javascripts/theme.js: -------------------------------------------------------------------------------- 1 | $(document).ajaxSuccess(function() { 2 | // Put the title in the before content without breaking the tooltip (For issues/show time_entries and changesets tabs) 3 | $('body.controller-issues.action-show a[href*="activity"][title*=":"]:not([data-absolute-date*=":"])').each(function(_index, element){ 4 | $(element).attr('data-absolute-date', element.title); 5 | }); 6 | }); 7 | 8 | $(function(){ 9 | /* Change to open external link in another tab */ 10 | $("a.external").attr("target","_blank"); 11 | $("a.help").attr("target","_blank"); 12 | $("div#footer a[href^='https://www.redmine.org/']").attr("target","_blank"); 13 | 14 | if (($("a.help").text() == "ヘルプ" ? "ja" : $("html").attr("lang")) == "ja") { 15 | /* When the language is Japanese, the link destination of help is Redmine.jp */ 16 | $("a.help").attr("href", "https://redmine.jp/guide/"); 17 | 18 | /* Show scope in search in search box placeholder */ 19 | $("body").attr("class").match(/controller-[\S]+/); 20 | var controllerName = RegExp.lastMatch; 21 | var placeholderText = "Redmine内を検索" 22 | var placeholderStrings = [ 23 | {controller: "controller-issues", text: "チケットを検索"}, 24 | {controller: "controller-news", text: "ニュースを検索"}, 25 | {controller: "controller-documents", text: "文書を検索"}, 26 | {controller: "controller-changesets", text: "更新履歴を検索"}, 27 | {controller: "controller-wiki_pages", text: "Wikiページを検索"}, 28 | {controller: "controller-messages", text: "メッセージを検索"} 29 | ]; 30 | jQuery.each(placeholderStrings, function() { 31 | if (controllerName === this.controller) { 32 | placeholderText = this.text; 33 | return false; 34 | } 35 | }); 36 | $("#quick-search input#q").attr("placeholder", placeholderText); 37 | } 38 | 39 | // Put the title in the before content without breaking the tooltip 40 | $('a[href*="activity"][title*=":"]').each(function(_index, element){ 41 | $(element).attr("data-absolute-date", element.title); 42 | }); 43 | }); 44 | -------------------------------------------------------------------------------- /stylesheets/application.css: -------------------------------------------------------------------------------- 1 | @import url(../../../stylesheets/application.css); 2 | 3 | /* 4 | * color: #2A5685 -> #0c4d7f; 5 | * 6 | * color: #444 -> #222; 7 | * color: #555 -> #333; 8 | * color: #484848 -> #222; 9 | * color: #666 -> #484848; 10 | * color: #777 -> #484848; 11 | * color: #808080 -> #484848; 12 | * color: #999 -> #666; 13 | * 14 | * opacity: 0.4 -> 0.7; 15 | * 16 | */ 17 | 18 | body { 19 | font-family: Meiryo, "Hiragino Kaku Gothic Pro", "MS PGothic", Verdana, sans-serif; 20 | color: #222; 21 | } 22 | 23 | h1, h2, h3, h4 { 24 | font-family: Meiryo, "Hiragino Kaku Gothic Pro", "MS PGothic", Verdana, sans-serif 25 | } 26 | 27 | #header h1 { 28 | text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.3); 29 | } 30 | 31 | #content h1, h2, h3, h4 { 32 | color: #222; 33 | } 34 | 35 | #sidebar h3 { 36 | color: #484848 37 | } 38 | 39 | #main-menu li a.selected, #main-menu li a.selected:hover { 40 | color: #222; 41 | box-shadow: 3px -2px 2px rgba(0, 0, 0, 0.1); 42 | } 43 | 44 | 45 | /***** Links *****/ 46 | 47 | a.issue.closed, a.issue.closed:link, a.issue.closed:visited { 48 | color: #666 49 | } 50 | 51 | a#toggle-completed-versions { 52 | color:#666; 53 | } 54 | 55 | /***** Tables *****/ 56 | 57 | table.list th { 58 | padding: 4px 2px 59 | } 60 | 61 | tr.changeset td.author { 62 | text-align: center; 63 | width: 15%; 64 | } 65 | 66 | tr.changeset td.committed_on { 67 | text-align: center; 68 | width: 15%; 69 | } 70 | 71 | /* assinged to me, created by me */ 72 | 73 | tr.version.closed, tr.version.closed a { 74 | color: #666 75 | } 76 | 77 | table.list.issues tr.closed td { 78 | opacity: 0.7; 79 | } 80 | 81 | td.parent { 82 | white-space: normal; 83 | text-align: left; 84 | } 85 | 86 | /* overdue */ 87 | 88 | tr.odd.overdue { 89 | background: #ffd8b2 90 | } 91 | 92 | tr.even.overdue { 93 | background: #ffe5cc 94 | } 95 | 96 | tr.odd.overdue td, tr.even.overdue td { 97 | border-color: #fcc 98 | } 99 | 100 | /* Issues grid styles by priorities (provided by Wynn Netherland) */ 101 | 102 | /* table.list tr.issue a { color: #484848; } _NO__DOTCOMMA__AFTER__*/ 103 | 104 | tr.odd.priority-highest, table.list tbody tr.odd.priority-highest:hover { 105 | color: #900; 106 | font-weight: bold; 107 | } 108 | 109 | tr.odd.priority-highest { 110 | background: #ffc4c4 111 | } 112 | 113 | tr.even.priority-highest, table.list tbody tr.even.priority-highest:hover { 114 | color: #900; 115 | font-weight: bold; 116 | } 117 | 118 | tr.odd.priority-highest td, tr.even.priority-highest td { 119 | border-color: #ffb4b4 120 | } 121 | 122 | tr.even.priority-highest { 123 | background: #ffd4d4 124 | } 125 | 126 | tr.priority-highest a, tr.priority-highest:hover a { 127 | color: #900 128 | } 129 | 130 | tr.odd.priority-high2, table.list tbody tr.odd.priority-high2:hover { 131 | color: #900 132 | } 133 | 134 | tr.odd.priority-high2 { 135 | background: #ffc4c4 136 | } 137 | 138 | tr.even.priority-high2, table.list tbody tr.even.priority-high2:hover { 139 | color: #900 140 | } 141 | 142 | tr.odd.priority-high2 td, tr.even.priority-high2 td { 143 | border-color: #ffb4b4 144 | } 145 | 146 | tr.even.priority-high2 { 147 | background: #ffd4d4 148 | } 149 | 150 | tr.priority-high2 a { 151 | color: #900 152 | } 153 | 154 | tr.odd.priority-high3, table.list tbody tr.odd.priority-high3:hover { 155 | color: #900 156 | } 157 | 158 | tr.odd.priority-high3 { 159 | background: #fee 160 | } 161 | 162 | tr.even.priority-high3, table.list tbody tr.even.priority-high3:hover { 163 | color: #900 164 | } 165 | 166 | tr.odd.priority-high3 td, tr.even.priority-high3 td { 167 | border-color: #fcc 168 | } 169 | 170 | tr.even.priority-high3 { 171 | background: #fff2f2 172 | } 173 | 174 | tr.priority-high3 a { 175 | color: #900 176 | } 177 | 178 | tr.odd.priority-lowest, table.list tbody tr.odd.priority-lowest:hover { 179 | color: #559 180 | } 181 | 182 | tr.odd.priority-lowest { 183 | background: #eaf7ff 184 | } 185 | 186 | tr.even.priority-lowest, table.list tbody tr.even.priority-lowest:hover { 187 | color: #559 188 | } 189 | 190 | tr.odd.priority-lowest td, tr.even.priority-lowest td { 191 | border-color: #add7f3 192 | } 193 | 194 | tr.even.priority-lowest { 195 | background: #f2faff 196 | } 197 | 198 | tr.priority-lowest a { 199 | color: #559 200 | } 201 | 202 | #watchers a.delete { 203 | opacity: 0.7 204 | } 205 | 206 | .box { 207 | color: #222; 208 | } 209 | 210 | .issue .contextual { 211 | margin: 0; 212 | padding: 2px 3px; 213 | border-radius: 3px; 214 | background: #fffff2; 215 | border: 1px solid #e6e6cf; 216 | } 217 | 218 | /* proportional でない場合にフォントを変更 */ 219 | body:not(.textarea-proportional) input[type="text"], body:not(.textarea-proportional) textarea.wiki-edit { 220 | font-family: "Osaka-Mono", "MS Gothic", monospace; 221 | } 222 | 223 | textarea.wiki-edit { 224 | font-size: 0.875rem; 225 | } 226 | 227 | div.issue { 228 | background-color: #ffffe6; /* HSV(60,10,100) */ 229 | } 230 | 231 | div.issue div.subject p { 232 | color: #666 233 | } 234 | 235 | div.issue .next-prev-links { 236 | color:#666; 237 | } 238 | 239 | div#activity dt .time { 240 | color: #484848 241 | } 242 | 243 | div#activity dd span.description, #search-results dd span.description { 244 | color: #484848 245 | } 246 | 247 | table#time-report tbody tr { 248 | color: #484848 249 | } 250 | 251 | form .attributes { 252 | margin-bottom: 8px 253 | } 254 | 255 | form .attributes p { 256 | padding-top: 1px; 257 | padding-bottom: 2px; 258 | } 259 | 260 | div.wiki-page .contextual a { 261 | opacity: 0.7 262 | } 263 | 264 | ul.projects div.root a.project { 265 | font-family: Meiryo, "Hiragino Kaku Gothic Pro", "MS PGothic" 266 | } 267 | 268 | p.other-formats { 269 | color: #484848; 270 | } 271 | 272 | /***** Wiki *****/ 273 | 274 | div.wiki pre { 275 | /* farend_basic: preで横スクロールバーを表示させずに折り返す */ 276 | white-space: pre-wrap; 277 | } 278 | 279 | div.wiki p { 280 | line-height: 165%; 281 | } 282 | 283 | div.wiki li { 284 | margin-bottom: 4px; 285 | } 286 | 287 | /***** My page layout *****/ 288 | .mypage-box { 289 | color:#222; 290 | } 291 | 292 | #top-menu #loggedas { 293 | color: #ccc; 294 | } 295 | 296 | #login-form input#username, #login-form input#password { 297 | font-size: 0.9375rem; 298 | padding: 3px; 299 | } 300 | 301 | div.attributes[id="attributes"] { 302 | border: 1px 0 0 0 0 solid #f00; 303 | } 304 | 305 | /***** calendar *****/ 306 | table.cal div.closed { 307 | text-decoration: line-through; 308 | } 309 | 310 | table.cal div.overdue { 311 | background: #ffe5cc 312 | } 313 | 314 | table.cal div.assigned-to-me a { 315 | font-weight: bold; 316 | } 317 | 318 | /***** attachments *****/ 319 | #content .wiki-page + .attachments { 320 | border-top: 1px dashed #ccc; 321 | } 322 | 323 | /* 作成日・更新日に実際の日時を表示 */ 324 | a[href*="activity"][data-absolute-date*=":"] { 325 | margin: 0 3px; 326 | box-shadow: inset 0 -1.5em 0 rgba(0, 0, 0, 0.08); 327 | display: inline-block; 328 | padding: 0 3px; 329 | border-radius: 3px; 330 | } 331 | a[href*="activity"][data-absolute-date*=":"]:before { 332 | content: ' [' attr(data-absolute-date) '] '; 333 | } 334 | 335 | div.projects.box > ul > li > a { 336 | font-weight: bold; 337 | } 338 | 339 | /* journal */ 340 | div.journal { 341 | margin-bottom: 0.5em; 342 | } 343 | 344 | div.journal ul.details { 345 | color: #444; 346 | background: #f6f6f6; 347 | border-radius: 3px; 348 | padding-top: 3px; 349 | padding-bottom: 3px; 350 | margin-top: 10px; 351 | } 352 | 353 | div.journal ul.details i:before { 354 | content: '['; 355 | font-style: normal; 356 | } 357 | 358 | div.journal ul.details i:after { 359 | content: ']'; 360 | font-style: normal; 361 | } 362 | 363 | div.journal h4.note-header { 364 | color: #444; 365 | } 366 | 367 | /* news */ 368 | body.controller-news.action-index h3 { 369 | margin-bottom: 4px; 370 | } 371 | 372 | body.controller-news.action-index .author { 373 | margin-top: 0; 374 | border-bottom: 1px dotted #BBBBBB; 375 | } 376 | 377 | body.controller-news.action-index .wiki { 378 | margin: 12px 0 20px 30px; 379 | } 380 | 381 | /* アイコン間のマージンを調整して識別しやすく */ 382 | .contextual .icon, .buttons .icon { 383 | margin-left: 5px; 384 | } 385 | 386 | .contextual .icon:first-child, .buttons .icon:first-child { 387 | margin-left: 0; 388 | } 389 | 390 | /* リポジトリ画面でコミットメッセージを目立たせる */ 391 | table.revision-info { 392 | color: #959595; 393 | } 394 | 395 | table.revision-info a { 396 | color:#70A7CD; 397 | } 398 | 399 | table.revision-info a:hover { 400 | color:#D14848; 401 | } 402 | --------------------------------------------------------------------------------