jira7經過全局js給編輯區自定義快捷鍵【原】

jira7編輯區自定義快捷鍵

本文主要描述了jira7如何經過添加全局js引用,給文本編輯區自定義快捷鍵用以快速填充模板內容.javascript

jira 3/4/5可參考官方api https://developer.atlassian.com/server/jira/platform/adding-javascript-to-all-pages-for-google-analytics/  (未作過實驗)java

第1步--備份web.xml文件

注意這一步比如下兩部更重要, 當web.xml改錯會致使jira沒法啓動讓人慾哭無淚 , 當心駛得萬行船, 萬一出錯, 還能還原.jquery

第2步--修改web.xml文件

該文件位於"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>
View Code

 

第3步--修改head-resources.jsp文件

該文件位於 "C:\Program Files\Atlassian\JIRA\atlassian-jira\includes\decorators\aui-layout\head-resources.jsp" app

第3.1步--外網版 (若是公司全員都能連外網,建議用該版)

在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; } }
View Code

 

以後若有新的頁面需求,您能夠引用一個新的js文件用以擴展或修改功能.  

第3.2步--內網版 (若是公司有人不能連外網,建議用該版)

在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步操做:

  1.  將head-resources.jsp文件末尾一行的src="...jira-header-extension.js"修改爲src="...jira-header-extension-newName.js"
  2.  C:/Program Files/Atlassian/JIRA/atlassian-jira/static/king/js/jira-header-extension.js 複製並命名成jira-header-extension-newName.js

 

 而後刷新jira頁,面便可看到加載了新的jira-header-extension2.js. 方法自創, 但緣由不明, 猜想是jira可能只會加載一次static目錄下的靜態資源文件,就算重啓有時候也仍是舊的, 須要讓head-resources.jsp引用一份新的js 或 直接訪問 http://localhost:8080/static/king/js/jira-header-extension-newName.js 以加載新資源.

 

第3.3補充--內外網版優缺點分析

筆者更偏向於外網版.

外網版

  • 優勢: 有新需求時,只要改動相關網站以前上傳的js文件,而不須要再去找jira 服務器上C:/Program Files/Atlassian/JIRA/atlassian-jira/static/king/js/jira-header-extension.js 文件了, 至關於徹底獨立於jira
  • 缺點: 不能連外網時,會致使js無效,而且<script>加載該外網地址時較卡.

肉網版:

  • 優勢: 穩定, 不擔憂網絡問題
  • 缺點: 有新需求時,定位該文件稍微麻煩點,須要記住該路徑, 文件改動後常常不生效,緣由不明,不生效時須要引用新的js

 

第4步--重啓jira

 重啓jira的只針對"第2步--修改web.xml文件" 以後才須要操做. 第3步的操做實際上是不須要重啓jira的.

效果演示 

當指針焦點在編輯區時,按ctrl+1能夠彈出【友情提示】效果,按ctrl+2/3/4/5/6/7/8/9/0時能夠給非空狀態的編輯區填充模板.

碰見問題

開發過程碰見如下問題,均可以先還原再重來.

  • web.xml配置錯誤致使jira沒法啓動
  • head-resources.jsp中引用的js語法嚴重錯誤的時候致使全部jira界面沒法打開

 

改版後的文件

百度網盤: https://pan.baidu.com/s/1kVZRj6J

擴展

若是徹底理解上文,現想要在編輯區添加自定義按鈕(請自行思考,同理).

相關文章
相關標籤/搜索