本文主要描述了jira7如何經過添加全局js引用,給文本編輯區自定義快捷鍵用以快速填充模板內容.javascript
jira 3/4/5可參考官方api https://developer.atlassian.com/server/jira/platform/adding-javascript-to-all-pages-for-google-analytics/ (未作過實驗)java
注意這一步比如下兩部更重要, 當web.xml改錯會致使jira沒法啓動讓人慾哭無淚 , 當心駛得萬行船, 萬一出錯, 還能還原.jquery
該文件位於"C:\Program Files\Atlassian\JIRA\atlassian-jira\WEB-INF\web.xml"git
刪除web.xml中的含有如下17個名稱對應的servlet-mapping,web
由於如下jsp文件中都包含了<%@ include file="/includes/decorators/aui-layout/head-resources.jsp" %>,api
至於爲什麼包含了head-resources.jsp要刪除servlet-mapping目前徹底意義不明,瀏覽器
如此操做來源於https://jira.atlassian.com/browse/JRASERVER-59587 jira的feedback, 另外該feedback還說起須要刪除head-resources.jsp對應的servlet-mapping,但本人不刪仍正常.服務器
1 /displayError.jsp: 2 /decorators/navigator.jsp: 3 /decorators/admin.jsp: 4 /decorators/general.jsp: 5 /decorators/popups.jsp: 6 /decorators/printable.jsp: 7 /decorators/onboarding.jsp: 8 /decorators/message.jsp: 9 /decorators/issueaction.jsp: 10 /decorators/general-head-pre.jsp: 11 /decorators/blank.jsp: 12 /decorators/error.jsp: 13 /decorators/userprofile.jsp: 14 /decorators/panel-admin.jsp: 15 /decorators/panel-general.jsp: 16 /decorators/content-panel-only.jsp: 17 /decorators/login.jsp:
上一步的具體意思爲刪除web.xml中的如下17個servlet-mapping,默認摺疊請自行展開, 注意它們在web.xml並不是都以下排在一塊兒,須要您手動搜索後當心刪之.網絡
<servlet-mapping> <servlet-name>jsp.displayError_jsp</servlet-name> <url-pattern>/displayError.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.navigator_jsp</servlet-name> <url-pattern>/decorators/navigator.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.admin_jsp</servlet-name> <url-pattern>/decorators/admin.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.general_jsp</servlet-name> <url-pattern>/decorators/general.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.popups_jsp</servlet-name> <url-pattern>/decorators/popups.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.printable_jsp</servlet-name> <url-pattern>/decorators/printable.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.onboarding_jsp</servlet-name> <url-pattern>/decorators/onboarding.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.message_jsp</servlet-name> <url-pattern>/decorators/message.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.issueaction_jsp</servlet-name> <url-pattern>/decorators/issueaction.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.general_002dhead_002dpre_jsp</servlet-name> <url-pattern>/decorators/general-head-pre.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.blank_jsp</servlet-name> <url-pattern>/decorators/blank.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.error_jsp</servlet-name> <url-pattern>/decorators/error.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.userprofile_jsp</servlet-name> <url-pattern>/decorators/userprofile.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.panel_002dadmin_jsp</servlet-name> <url-pattern>/decorators/panel-admin.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.panel_002dgeneral_jsp</servlet-name> <url-pattern>/decorators/panel-general.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.content_002dpanel_002donly_jsp</servlet-name> <url-pattern>/decorators/content-panel-only.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp.decorators.login_jsp</servlet-name> <url-pattern>/decorators/login.jsp</url-pattern> </servlet-mapping>
該文件位於 "C:\Program Files\Atlassian\JIRA\atlassian-jira\includes\decorators\aui-layout\head-resources.jsp" app
在head-resources.jsp文件末尾添加一行語句以下
<script type="text/javascript" src="https://gitee.com/KingBoBo/codes/wijfrq2utahc9k05o3nby72/raw?blob_name=jira-header-extension.js" charset="utf-8"></script>
其中https://gitee.com/KingBoBo/codes/wijfrq2utahc9k05o3nby72/raw?blob_name=jira-header-extension.js 這個地址指向的是互聯網上的一個js文件,用於給全局的jira頁面添加js效果.
jira-header-extension.js文件內容參考以下:
$(function(){ //jira7.2使用jquery-1.7.2.min.js,須要用live,這裏用on效果沒法徹底發揮,jquery1.9以後用on比較穩妥 //http://blog.csdn.net/aya19880214/article/details/39998117 $("textarea").live("keydown",function(e) { var ev = window.event || e; var code = ev.keyCode || ev.which; console.log("King "+code + " | "+ e.ctrlKey); if(e.ctrlKey){ switch(code){ case 49://1 alertHelp(this);//友情提示 preventDefaultEvent(ev); break; case 50://2 createIssue(this);//建立問題 preventDefaultEvent(ev); break; case 51://3 handleProblem(this);//處理問題 preventDefaultEvent(ev); break; case 52://4 testAllGood(this);//測試徹底經過 preventDefaultEvent(ev); break; case 53://5 testPartGood(this);//測試部分經過 preventDefaultEvent(ev); break; case 54://6 testAllBad(this);//測試全不經過 preventDefaultEvent(ev); break; case 55://7 waitingForYou(this);//待定 preventDefaultEvent(ev); break; case 56://8 waitingForYou(this);//待定 preventDefaultEvent(ev); break; case 57://9 waitingForYou(this);//待定 preventDefaultEvent(ev); break; case 48://0 waitingForYou(this);//待定 preventDefaultEvent(ev); break; default: break; } } }); }) function wikiEditExistAndEmpty(wikiEdit){ var target = $(wikiEdit); if(target.length != 0){ if(target.val().trim() == ""){ return true; }else{ return false; } }else{ return false; } } function alertHelp(wikiEdit){//友情提示 alert("【友情提示】空文本才觸發如下模板填充效果 \n ctrl+2 : 建立問題 \n ctrl+3 : 處理問題 \n ctrl+4 : 測試徹底經過\n ctrl+5 : 測試部分經過\n ctrl+6 : 測試全不經過\n "); } function createIssue(wikiEdit){//建立問題 if(wikiEditExistAndEmpty(wikiEdit)){ $(wikiEdit).val("登錄帳號:\n"+ "機構:填寫出單機構\n"+ "產品:涉及產品\n"+ "單號:例如:對車承保來講,寫投保單號/保單號;沒有單號的,寫清楚車架號\n"+ "問題描述:\n"+ "重現步驟:\n"+ "實際結果:(可選)\n"+ "預期結果:\n"+ "SQL:"); } } function handleProblem(wikiEdit){//處理問題 if(wikiEditExistAndEmpty(wikiEdit)){ $(wikiEdit).val("{panel:title=開發修改記錄1| borderStyle=dashed| borderColor=#ccc| titleBGColor=#C0C0C0| bgColor=#87CEFA}\n"+ "- *問題描述*\n"+ "- *解決方法*\n"+ "- *提交內容* \n"+ "-- *數據腳本*\n"+ "-- *自測單號*\n"+ "{panel}"); } } function testAllGood(wikiEdit){//測試徹底經過 if(wikiEditExistAndEmpty(wikiEdit)){ $(wikiEdit).val("{panel:title=測試徹底經過反饋 修改記錄1| borderStyle=dashed| borderColor=#C0C0C0| titleBGColor=#C0C0C0| bgColor=#00FF7F}\n"+ "*測試經過* (/)\n"+ "*測試內容*: \n"+ "出單機構:浙江分公司\n"+ "工號:133501773\n"+ "單據號:2993301010220170000019\n"+ "*簡單描述測試覆蓋的場景*\n"+ "{panel}"); } } function testPartGood(wikiEdit){//測試部分經過 if(wikiEditExistAndEmpty(wikiEdit)){ $(wikiEdit).val("{quote}\n"+ "{panel:title=測試部分經過反饋 修改記錄1 |borderStyle=dashed| borderColor=#ccc| titleBGColor=#ccc| bgColor=#FFE4C4}\n"+ "- *測試內容* \n"+ "\n"+ "- *遺留問題列表* \n"+ "-# 問題1 \n"+ "-# 問題2 \n"+ "- *遺留問題BUG*\n"+ "-# JIRA號\n"+ "{panel}"); } } function testAllBad(wikiEdit){//處理全不經過 if(wikiEditExistAndEmpty(wikiEdit)){ $(wikiEdit).val("{panel:title=測試全不經過反饋 修改記錄-01| borderStyle=dashed| borderColor=#ccc| titleBGColor=#C0C0C0| bgColor=#FFC0CB}\n"+ "- *測試內容*\n"+ "\n"+ "- *問題列表* \n"+ "-# 反饋問題1\n"+ "-# 反饋問題2\n"+ "- *反饋問題BUG*\n"+ "新建JIRA號\n"+ "{panel}\n"); } } function waitingForYou(wikiEdit){//waiting寶貴建議 if(wikiEditExistAndEmpty(wikiEdit)){ $(wikiEdit).val("ctrl+7/8/9/0 模板徵集中,您有任何珍貴的建議,請聯繫【逸檀 or 英姿】."); } } function preventDefaultEvent(ev){//阻止瀏覽器默認事件 if (ev.preventDefault) { ev.preventDefault(); ev.stopPropagation(); } else { ev.keyCode = 0; ev.returnValue = false; } }
以後若有新的頁面需求,您能夠引用一個新的js文件用以擴展或修改功能.
在head-resources.jsp文件末尾添加一行語句以下
<script type="text/javascript" src="<%=request.getContextPath()%>/static/king/js/jira-header-extension.js" charset="utf-8"></script>
把3.1外網版的jira-header-extension.js內容複製到C:/Program Files/Atlassian/JIRA/atlassian-jira/static/king/js/jira-header-extension.js , 其中static文件夾後的/king/js/jira-header-extension.js須要本身建文件夾和文件. 而後使用文本編輯器另存爲UTF-8版 , 最後在瀏覽器打開jira地址 http://localhost:8080/static/king/js/jira-header-extension.js ,只要能正常打開,且不亂碼,那麼基本上是成功了.
以後若有新的頁面需求,您能夠引用一個新的js文件用以擴展或修改功能.
經屢次測試,在內網版的 head-resources.jsp文件中<script ....... charset="utf-8"></script> 的charset使用"utf-8"和charset="gb2312" 均可以,甚至能夠不指定, 由此推測 jira項目的filter層可能默認對資源文件作了utf-8編碼轉換, 因此只要文件自己是utf-8格式的,那麼charset 就不關心了.
此外內網版還存在一個"偶發性"問題
當修改jira-header-extension.js文件後, 若是在瀏覽器打開jira地址 http://localhost:8080/static/king/js/jira-header-extension.js 看到的仍是未修改前的舊文件,那麼咱們須要作如下2步操做:
而後刷新jira頁,面便可看到加載了新的jira-header-extension2.js. 方法自創, 但緣由不明, 猜想是jira可能只會加載一次static目錄下的靜態資源文件,就算重啓有時候也仍是舊的, 須要讓head-resources.jsp引用一份新的js 或 直接訪問 http://localhost:8080/static/king/js/jira-header-extension-newName.js 以加載新資源.
筆者更偏向於外網版.
外網版
肉網版:
重啓jira的只針對"第2步--修改web.xml文件" 以後才須要操做. 第3步的操做實際上是不須要重啓jira的.
當指針焦點在編輯區時,按ctrl+1能夠彈出【友情提示】效果,按ctrl+2/3/4/5/6/7/8/9/0時能夠給非空狀態的編輯區填充模板.
開發過程碰見如下問題,均可以先還原再重來.
百度網盤: https://pan.baidu.com/s/1kVZRj6J
若是徹底理解上文,現想要在編輯區添加自定義按鈕(請自行思考,同理).