Hudsonにへっぽこパッチをあてて,TinyMCEを組み込んでみた

Hudsonの「説明を記入」はなかなか便利なんだけど,素のテキストエリアで使い勝手がイマイチだったので,TinyMCEを組み込んでみた。

組み込み方

  • TinyMCEを '$HUDSON_HOME/main/war/resources/scripts' に放り込む。
  • あと,こんなパッチあててビルドする(つってもコンパイル不要なんで,実行環境に直接あててもいい)。
Index: core/src/main/resources/hudson/model/AbstractModelObject/descriptionForm.jelly
===================================================================
--- core/src/main/resources/hudson/model/AbstractModelObject/descriptionForm.jelly	Thu Apr 03 11:39:23 JST 2008
+++ core/src/main/resources/hudson/model/AbstractModelObject/descriptionForm.jelly	Thu Apr 03 11:39:23 JST 2008
@@ -4,7 +4,7 @@
 <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:f="/lib/form" xmlns:l="/lib/layout">
   <l:ajax>
     <form action="submitDescription" method="post">
-      <f:textarea name="description" value="${it.description}" />
+      <f:textarea name="description" id="description_editor" value="${it.description}" />
       <div align="right">
         <f:submit value="Submit" />
       </div>


Index: core/src/main/resources/lib/layout/layout.jelly
===================================================================
--- core/src/main/resources/lib/layout/layout.jelly	Thu Apr 03 11:02:26 JST 2008
+++ core/src/main/resources/lib/layout/layout.jelly	Thu Apr 03 11:02:26 JST 2008
@@ -63,7 +63,8 @@
     </j:if>
 
     <script src="${resURL}/scripts/hudson-behavior.js" type="text/javascript"></script>
+    <script src="${resURL}/scripts/tiny_mce/tiny_mce.js" type="text/javascript"></script>
-    
+
     <link rel="stylesheet" href="${resURL}/scripts/yui/container/assets/container.css" type="text/css"/>
     <link rel="stylesheet" href="${resURL}/scripts/yui/assets/skins/sam/skin.css" type="text/css" />
     <link rel="stylesheet" href="${resURL}/scripts/yui/button/assets/skins/sam/button.css" type="text/css" />


Index: war/resources/scripts/hudson-behavior.js
===================================================================
--- war/resources/scripts/hudson-behavior.js	Thu Apr 03 11:47:33 JST 2008
+++ war/resources/scripts/hudson-behavior.js	Thu Apr 03 11:47:33 JST 2008
@@ -447,6 +447,19 @@
           onComplete : function(x) {
             d.innerHTML = x.responseText;
             Behaviour.applySubtree(d);
+            tinyMCE.init({
+              mode : "exact",
+              elements : "description_editor",
+              theme : "advanced",
+              theme_advanced_toolbar_location : "top",
+              theme_advanced_toolbar_align : "left",
+              plugins : "table,contextmenu,searchreplace",
+              theme_advanced_layout_manager : "SimpleLayout",
+              theme_advanced_buttons1 : "search,replace,separator,bold,italic,insertdate,underline,strikethrough,separator,bullist,numlist,outdent,indent,formatselect,separator,hr,table,link,unlink,separator,cleanup,help,code",
+              theme_advanced_buttons2 : "",
+              theme_advanced_buttons3 : ""
+
+            });
             d.getElementsByTagName("TEXTAREA")[0].focus();
           }
         }

参考リンク


リサイズのハンドルが効かないとか,まだ調整の余地はあるけど,当初の目的は果たしたからもういいや(tinyMCE.init()のオプション,お好みで調整してちょ)。
WYSIWYGで編集できるんで便利なんだけど,TinyMCEってGPL(もしくはLGPL)なのね。できてから気付いたんで,ガッカリした。:-(


ps.
それはそうと,Hudsonの「説明を記入」はホントウに便利だよ。
よくやるのは,プロジェクトページにTODOメモっとくのと,失敗ビルドんときに何でコケたのかメモるのに使ってる(ついでに,「Keep this build forever」でビルド自体も保存しとく)。