ViewCustomizePluginのカスタマイズ

[Redmineのプラグイン「view customize plugin」のカスタマイズ例](https://qiita.com/wfigo7/items/f13a89e1d3522f4a73b6)と
[RedmineのViewCustomizePluginのカスタマイズ事例](https://qiita.com/tamaki-kz/items/6055afd7833a82098aec)を参考にして、自分が適用したカスタマイズ内容。

# 全般
### ホーム(URL直下)にアクセスしたらプロジェクトへ自動遷移 
```js:JavaScript
/*
ホーム(URL直下)にアクセスしたらプロジェクトへ自動遷移 
Path pattern:/$ 
Type:JavaScript 
*/
$(function(){
    if(($('#loggedas').length)){
        window.location.href = "./projects";        
    }else{
        window.location.href = "./login";        
    }
});
```

### メニューバーを編集
ここでは、以下のように編集。
画像ファイルは、CSSの読み込まれ方の問題で特定できないので、テキトーに必ずパスが通る場所に置く。

- ホームを削除。
- ガントチャート(Easy Gantt)を削除。(無料だと使えないから)
- ヘルプを削除。
- マイチケットを追加。
- ボード(Agileプラグイン)を追加。

```css:StyleSheet
/*
メニュー用のCSS追加
Path pattern: .*
Type: Stylesheet
*/
/* 追加メニューの全体設定 */
/* .agile-board はコンテンツ内に同一クラス名が利用されているのでNG */
#top-menu a.my-tickets, #top-menu a.agile-board-menu {
    background-position: 0% 40%;
    background-repeat: no-repeat;
    padding-left: 20px;
    padding-top: 2px;
    padding-bottom: 3px;
}

/* マイチケット */
.my-tickets {
  background-image: url(/redmine/custom_images/projects.png);
}

/* ボード */
.agile-board-menu {
  background-image: url(/redmine/custom_images/projects.png);
}
```

```js:JavaScript
/*
メニューのカスタマイズ
- ホームを削除
- ガントチャートを削除
- ヘルプを削除
- マイチケットを追加
- ボードを追加
Path pattern:.*
Type: JavaScript
*/
$(function(){
  // メニューからホームを削除
  if( $('#top-menu a.home').length ){
    $('#top-menu a.home').parent().remove();
  }
  
  // メニューからガントチャートを削除
  if( $('#top-menu a.easy-gantt').length ){
    $('#top-menu a.easy-gantt').parent().remove();
  }
  
  // メニューからヘルプを削除
  if( $('#top-menu a.help').length ){
    $('#top-menu a.help').parent().remove();
  }
  
  // プロジェクトの右にマイチケットを追加
  if( $('#top-menu a.projects').length ){
    $('#top-menu a.projects').parent().after('<li><a class="my-tickets" href="/redmine/issues?query_id=2">マイチケット</a></li>');
  }

  // マイチケットの右にボードを追加
  if( $('#top-menu a.my-tickets').length ){
    $('#top-menu a.my-tickets').parent().after('<li><a class="agile-board-menu" href="/redmine/agile/board">ボード</a></li>');
  }
});
```


# プロジェクト
### 一覧の見た目を変更
```css:StyleSheet
/*
プロジェクト一覧の表現変更
Path pattern: /projects$
Type: Stylesheet
*/
#projects-index {
  column-count: 1;
  column-width: auto;
  -webkit-column-count: 1;
  -webkit-column-width: auto;
  -moz-column-count: 1;
  -moz-column-width: auto;
}
```

# チケット
### 全プロジェクトのチケット一覧を表示時、対象バージョンにプロジェクト名を含めない
```js:JavaScript
/*
全プロジェクトのチケット表示時、対象バージョンにプロジェクト名を含めない。
Path pattern: ^/issues$
Type: JavaScript
*/
$(function(){
  $('.fixed_version a').each(function(k, v) {
    var projectName = $(v).parents('tr').find('.project a').text();
    var versionName = $(v).text();
    var regex = new RegExp(projectName + ' - ', 'g');
    $(v).text(versionName.replace(regex, ''));
  });
});
```

### チケット作成時の初期値を変更
```js:JavaScript
/*
チケット作成時の初期値変更
Path pattern: /issues/new$
Type: JavaScript
*/
$(function(){
    // トラッカーのデフォルトを設定
    // value=4は求めるトラッカーIDを指定
    $('#issue_tracker_id option').removeAttr('selected');
    $('#issue_tracker_id option[value=4]').attr('selected', true).trigger('change');

    // 担当者のデフォルトを自分に
    $('#issue_assigned_to_id option:contains("自分")').attr('selected', true);
});
```

### チケット編集時、日付項目とかでエンターによるSubmit禁止
```js:JavaScript
/*
チケット編集時のエンターキー誤送信防止
Path pattern: /issues/(new|[0-9]+)$
Type: JavaScript
*/
$(function(){
    $(document).on('keypress', 'input', function(event) {
        if(event.keyCode == 13) {
            return false;
        }
    });
});
```

# リポジトリ
### リビジョン比較で色の説明を追記
```css:StyleSheet
/*
リビジョン比較で色の説明用のCSS
Path pattern: /repository(/diff|/revisions/[0-9]+/diff)
Type: StyleSheet
*/
.color_description {
  display: inline-block;
  width: 50px;
  text-align: center;
}
```

```js:JavaScript
/*
リビジョン比較で色の説明を追加
Path pattern: /repository(/diff|/revisions/[0-9]+/diff)
Type: JavaScript
*/
$(function(){
    $('#content > form > p').append('<br />');
    $('#content > form > p')
        .append('<span class="color_description diff_in">追加行</span>&nbsp;');
    $('#content > form > p')
        .append('<span class="color_description diff_out">削除行</span>');
});
```

# Agile board
### オプション（表示列）をすべて強制表示させる
```js:JavaSciprt
/*
Agile board を開いた直後は、全ステータスを列表示する。
Path pattern: /agile/board$
Type: JavaScript
*/
$(function(){
  // クエリパラメータがある時は何もしない
  if ($(location).attr('search') != '') {
    return;
  }

  // オプションがすべてチェック済みの時は何もしない
  if ($('[name^=f_status]:not(:checked)').length < 1) {
    return;
  }

  // チェックがついていないオプションをチェックしてsubmitする
  $('[name^=f_status]:not(:checked)').each(function(k, v) {
    $(v).prop('checked', true);
  });
  $("#query_form").submit();
});
```