$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
View Customize Pluginで出来ること
Search
onozaty
November 28, 2015
Programming
0
160
View Customize Pluginで出来ること
第9回 redmine.tokyo のLTで発表したView Customize Plugin for Redmineの紹介です。
onozaty
November 28, 2015
Tweet
Share
More Decks by onozaty
See All by onozaty
リモートワーク中に買って良かったものベスト3
onozaty
0
190
情報を表現するときのポイント
onozaty
0
25
チームで開発するための環境を整える
onozaty
1
280
Selenium入門(2023年版)
onozaty
1
190
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
0
68
Java8から17へ
onozaty
0
20
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
0
220
Redmine issue assign notice plugin の紹介
onozaty
0
220
最近作ったもの
onozaty
0
32
Other Decks in Programming
See All in Programming
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
150
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
110
認証・認可の基本を学ぼう後編
kouyuume
0
250
俺流レスポンシブコーディング 2025
tak_dcxi
14
9.4k
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
410
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.9k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.7k
愛される翻訳の秘訣
kishikawakatsumi
3
340
チームをチームにするEM
hitode909
0
370
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
170
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
520
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
160
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
570
Writing Fast Ruby
sferik
630
62k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
94
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
2k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
79
Why Our Code Smells
bkeepers
PRO
340
57k
A Soul's Torment
seathinner
1
2k
Transcript
View Customize Pluginで できること 2015-11-28 第9回redmine.tokyo勉強会 Hirokazu Onozato (onozaty)
自己紹介 • Hirokazu Onozato (onozaty) • https://twitter.com/onozaty • https://github.com/onozaty •
http://www.enjoyxstudy.com/ • 株式会社ユニスティ所属 • エンジニア • Redmine使用歴 6年 個人でのPlugin開発は2年前から • Parent issue filter https://www.redmine.org/plugins/redmine_parent_issue_filter • Copy parent issue https://www.redmine.org/plugins/copy_parent_issue_id
View Customize Plugin • View Customize Plugin https://github.com/onozaty/redmine-view-customize • Redmineの画面をカスタマイズするためのPlugin
• 特定の画面に対して、JavaScript、CSSを埋め込む 機能を提供
設定方法 コードを実行するパス(URL)。 正規表現で記載。 実行するコード。 JavaScript または StyleSheet(CSS)で書く。 Redmineの画面で使用され ているjQueryも使える。 (Redmineのバージョンに
よってライブラリが違うの で注意) プライベートにチェックを入れると、作成したユーザ のみに有効 →個人で動作確認して、OKだったら全員に反映すると いったことができる
どういうカスタマイズをするかは ユーザ次第 次からのサンプルを カスタマイズのご参考に
Sample 1 プロジェクト毎にヘッダを変えて プロジェクトを識別しやすいように
プロジェクト毎にヘッダを変える Path pattern: .* Type: StyleSheet Code: body.project-a #top-menu {
background-color: #006400; /* dark green */ } body.project-a #header { background-color: #008000; /* green */ } body.project-b #top-menu { background-color: #696969; /* dimgray */ } body.project-b #header { background-color: #808080; /* gray */ } • body要素にプロジェクト毎にclass(project-<プロジェクト ID>)が設定されるので、それを利用してCSSを設定
プロジェクト毎にヘッダを変える
Sample 2 チケット一覧を識別しやすいように
チケット一覧を識別しやすいように Path pattern: /issues$ Type: StyleSheet Code: /* 自分が担当のチケットは太字 */
tr.issue.assigned-to-me { font-weight: bold; } /* 優先度が今すぐのものは赤字 */ tr.issue.priority-highest, tr.issue.priority-highest a, tr.issue.priority-highest a:link, tr.issue.priority-highest a:visited { color: red; } /* 題名は折り返さない */ tr.issue td.subject { white-space: nowrap; } • チケットの情報に基づくclassが指定されているので、それ を活用。テーマでも同じことができる。
チケット一覧を識別しやすいように 設定前 設定後
Sample 3 よくアクセスするページのリンクを ヘッダメニューに追加する
ヘッダメニューにリンクを追加 Path pattern: .* Type: JavaScript Code: // 全てのチケット一覧リンクをヘッダに $(function()
{ $('#top-menu > ul') .append('<li><a href="/issues">全てのチケット</a></li>'); }); • ドキュメントのロード完了時にヘッダにリンクを追加する • Redmineのすべての画面でjQueryが読み込まれている (2.1.0以降)ので、jQueryの関数使うといろいろ楽になる
ヘッダメニューにリンクを追加
Sample 4 子チケット追加時に親チケットの 情報を引き継いで入力の手間を減らす
子チケット追加時に親チケットの情報を引き 継ぐ Path pattern: /issues/[0-9]+$ Type: JavaScript Code: $(function(){ //
子チケットの追加リンクを取得 var addLink = $('#issue_tree a[href*="/issues/new"]')[0]; if (!addLink) { return; } // 対象バージョンがあれば子チケットの追加リンクにパラメータ追加 var version = $('#issue_fixed_version_id').val(); if (version) { addLink.href += '&issue%5Bfixed_version_id%5D=' + version; } }); • リンクにパラメータを追加してあげることにより、チケッ ト作成時の初期値(カスタムフィールドを含むすべての項 目)を指定可能
子チケット追加時に親チケットの情報を引き 継ぐ 子チケット追加のリンク押下 で新しいチケットを作成した 際に、情報が引き継がれる
Sample 5 サイドバーを開閉式にして 画面を広く使えるようにする
サイドバーを開閉式に Path pattern: .* Type: JavaScript Code: 100行超えるスクリプトになるので、コード全体は下記参照 https://github.com/onozaty/redmine-view-customize- scripts/blob/master/toggle_sidebar.js
• JavaScriptで頑張れば、結構なんでもできる
サイドバーを開閉式に クリックで開閉
Sample 6 進行中のステータスにおける 担当者の入力漏れを防ぐ
進行中のステータスで担当者を必須に Path pattern: /issues/ Type: JavaScript Code: $(function() { $('#issue-form
input[type="submit"]') .on('click', function(event) { var statusId = $('#issue_status_id').val(); var assignedId = $('#issue_assigned_to_id').val(); if (statusId == '2' && !assignedId) { // 2:進行中 alert('進行中にもかかわらず担当者が設定されていません。'); return false; } }); }); • チケット作成、更新時のsubmitにフックして独自にチェッ ク処理を差し込むイメージ
進行中のステータスで担当者を必須に 進行中ステータスの状態で 送信ボタンを押下した際に、 警告ダイアログがでる
Sample 7 チケット作成時にトラッカーに応じて デフォルト値を変更する
トラッカーに応じてデフォルト値を変更 Path pattern: /issues/new$ Type: JavaScript Code: $(function() { $('#all_attributes').change(function(e)
{ if (e.target.id == 'issue_tracker_id') { // トラッカーが変わった場合にデフォルト値を切り替え setDefalutValue(); } }); var setDefalutValue = function() { // トラッカーに応じてデフォルト値を設定 ~ 省略 ~ } // 現在選択されているものをもとに setDefalutValue(); }); コード全体は下記参照 https://github.com/onozaty/redmine-view-customize- scripts/blob/master/set_default_value_at_change_tracker.js
トラッカーに応じてデフォルト値を変更 トラッカーを切り替えたタ イミングでデフォルト値も 切り替わる
ほかにもいろいろ
ほかにもいろいろ • ステータス変更に連動して、その他の項目(担当者 や進捗など)を変える • 新規チケット作成時に担当者をデフォルト自分に • 担当者のセレクトボックスで、特定のルールでグ ループ化して選択しやすいように •
ショートカットキーを追加 • 全画面にお知らせを表示 などなど
参考 • 本資料に書かれた設定を行ったVagrant box • https://atlas.hashicorp.com/onozaty/boxes/redmine- viewcustomize • スクリプトの一覧 •
https://github.com/onozaty/redmine-view-customize- scripts (すいません、これから追加整理予定です) • Redmineの画面で振られているclass属性について - Enjoy*Study • http://blog.enjoyxstudy.com/entry/2014/10/11/000000