アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

Redmine テーマ minimalflat2 v1.3.5 リリース

November 06, 2017開発minimalflat2, Redmine

Redmine テーマ minimalflat2 v1.3.5 をリリースした。

Redmine v3.4.3 対応

以下の問題が報告されたので

Redmine v3.4.2 と v3.4.3 の application.css を比較して変更点を反映してから修正しようとした。結果、CSS の差分はこの問題に対するものだけであることが判明。

よって Redmine v3.4.3 対応ついでに、チケット一覧のバージョン条件リストに名前の長いものがあっても省略されず表示するようになった。

マイページ画面の table が見切れる問題の修正

だいぶ前に報告されて放置してた

When "my project" is displayed in 1 column mode, the table protrudes - Issue #117

を修正。マイページ画面を表示しながら Web ブラウザーの幅を狭めて 1 カラムにすると <table> が見切れる。標準テーマでは起きないとのことなので調べたら、

  • 標準テーマは body に font-size: 12px を指定している
  • そのため「たまたま」表示幅を狭めても table のコンテンツが収まる
  • minimalflat2 は特別な箇所をのぞき font-size は指定しない設計方針
  • そのため Web ブラウザーの文字サイズによっては <table> コンテンツがはみ出る = 見切れる

ということがわかった。短絡的に修正するなら標準テーマ同様に bodyfont-size: 12px を指定すれば済む。しかし現在の設計方針はユーザーの文字サイズを維持するためのものであり、ひとつの問題のため変えたくはない。マイページの <table> 限定で直すことも可能だが、ここだけ文字サイズが小さくなるのも収まりが悪い。

というわけで修正を断ろうとしたのだが、マイページをよく観察すると「ウォッチしているチケット」などの table は表示幅が狭くなったときに横スクロールバーを提供している。HTML の構造としては

<div class="autoscroll">
  <table class="list issues odd-even sort-by-updated-on sort-desc">
  </table>
</div>

こんな感じ。<table> の親となる <div class="autoscroll">

.autoscroll {
  overflow-x: auto;
  padding: 1px;
  margin-bottom: 1.2em;
  position: relative;
}

となっているおかげでスクロール可能になっていた。ならば「作業時間」などの <table> もこれを指定すれば?と思うだろう。しかしわざわざ <div class="autoscroll"> が用意されていることから分かるように <table> へ指定してもダメだ。可変幅にしたければスクロールは外周の <div> が担当しなければならない。

というわけで theme.js 側に以下の関数を定義して実行するようにした。

// The table can be scrolled when "My Page" is displayed in one column
function setupMyPageAutoScroll () {
  $('#my-page table').each(function () {
    var parent = $(this).parent()
    if (parent.hasClass('autoscroll')) {
      return
    }

    $(this).wrap($('<div class="autoscroll"></div>'))
  })
}

<div class="autoscroll"> で囲われていない <table> 限定で囲いなおしている。これで無事、他のものも横スクロール可能となった。

設計的に一部の <table> だけスクロール可能になってるのは統一感がなくておかしいため、将来の Redmine では同様の修正が入るかもしれない。その場合でも処理的に誤動作することはないはず。

Copyright © 2009 - 2023 akabeko.me All Rights Reserved.