gitlab_code_reviewer_helper

hello world

// ==UserScript==
// @name         gitlab_code_reviewer_helper
// @namespace    http://tampermonkey.net/
// @version      0.5.7
// @description  hello world
// @author       You
// @resource      http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
// @match        https://code.byted.org/*/*/merge_requests/*
// @match        https://codebase.byted.org/standalone-page/repository/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=byted.org
// @grant        none
// @license      no
// ==/UserScript==

const optionsStrList = [
  '风格问题-lint可修复',
  '风格问题-lint无法自动修复',
  '风格问题-未确定规范',
  '单测问题',
  '逻辑问题(bug)',
  'debug代码未还原',
  '存在性能隐患',
  '存在安全隐患',
  '不确定,仅咨询',
  '不符合现有规范',
  '可优化'
]
const reg = /(\[风格问题-lint可修复\].+|\[风格问题-lint无法自动修复\].+|\[风格问题-未确定规范\].+|\[单测问题\].+|\[逻辑问题\(bug\)\].+|\[debug代码未还原\].+|\[存在性能隐患\].+|\[存在安全隐患\].+|\[不确定,仅咨询\].+|\[不符合现有规范\].+|\[可优化\])/g
const replaceReg = /(\[风格问题-lint可修复\]|\[风格问题-lint无法自动修复\]|\[风格问题-未确定规范\]|\[单测问题\]|\[逻辑问题\(bug\)\]|\[debug代码未还原\]|\[存在性能隐患\]|\[存在安全隐患\]|\[不确定,仅咨询\]|\[不符合现有规范\]|\[可优化\])/g
const disabledStyle = `background-color:#eee!important;
                      cursor:not-allowed!important;
                      color:#b2b2b2!important;
                      border: 1px solid #e5e6e8!important;
                      margin-left: 8px; `
const cancelDisableStyle = `
                          cursor:pointer!important;
                          margin-left: 8px!important;`                        
function addCateBtn()  {
  const btnContainer = $('.codebase-dv-thread')

  btnContainer.each((index,item)=>{
      if($(item).find('.xbw-select-wrap')?.length){
          $(item).find('textarea').trigger('input')
          return
      }

      let ele = $(`<span class=xbw-select-wrap><select style="width:100px;height:20px;font-size:10px;"><option value="">请选择分类</option>${optionsStrList.map((item,index)=>{
          return `<option value=${item}>${item}</option>`
      }).join('\n')}</select></span>`);

      let selectedValue = ""
      ele.on('input', function (e) {
          setTimeout(()=>{
              let val = $($(item).find('textarea')[0]).val()
              selectedValue = $(item).find('option:selected').val()
              if (selectedValue) {
                  replaceReg.lastIndex = 0
                  if(replaceReg.test(val)){
                      const str = val.replace(replaceReg, `[${selectedValue}]`)
                      $($(item).find('textarea')[0]).val(str)
                  }else{
                      val = `[${selectedValue}]${val}`
                      $($(item).find('textarea')[0]).val(val)
                  }
                  $(item).find('textarea').trigger('input')
              }
          })
      })

      $(item).find('textarea').on('input', function (e) {
          setTimeout(()=>{
              const isCancel = $($(item).find('button')[1]).html() === 'Cancel'
              const blueBg = ['Start a review', 'Submit', 'Add review comment']
              const isStartAReview = blueBg.includes($($(item).find('button')[0]).html())
              reg.lastIndex = 0
              const hasSelect = $(item).find('.xbw-select-wrap').length
              if (hasSelect && reg.test(e.target.value)) {
                  $($(item).find('button')[0]).attr('disabled',false)
                  $($(item).find('button')[1]).attr('disabled',false)
                  $($(item).find('button')[0]).css("cssText",cancelDisableStyle);
              } else if (!hasSelect) {
              } else {
                  $($(item).find('button')[0]).attr({disabled:'disabled'})
                  $($(item).find('button')[1]).attr('disabled',!isCancel)
              }

              if($($(item).find('button')[0]).attr('disabled')){  // 禁用状态  样式修改
                  $($(item).find('button')[0]).css("cssText", disabledStyle);
                  
                  $($(item).find('button')[0]).attr({title:"w请选择分类"})
                  if(!isCancel){
                      $($(item).find('button')[1]).css("cssText", disabledStyle);
                      $($(item).find('button')[1]).attr({title:"请选择分类"})
                  }
              }else{
                  $($(item).find('button')[0]).css("cssText",cancelDisableStyle);
                  $($(item).find('button')[0]).attr({title:''})
                  if(!isCancel){
                      $($(item).find('button')[1]).css("cssText",cancelDisableStyle);
                      $($(item).find('button')[1]).attr({title:''})
                  }
                  if (isStartAReview) { 
                      $($(item).find('button')[0]).css("cssText",`border: 1px solid #3f51b5!important;background-color: #3f51b5!important;margin-left: 8px!important;`);
                  }
              }
          })
      })
      $(item).find('textarea').trigger('input')
      setTimeout(()=>{
          const value = $($(item).find('textarea')[0]).val()
          replaceReg.lastIndex = 0
          if($(item).find('.md-preview').length && replaceReg.test(value)){
              $($(item).find("[data-name='Preview']").parent()[0]).after(ele)
          }else if($(item).find('.md-preview').length){
          }else{
              $($(item).find("[data-name='Preview']").parent()[0]).after(ele)
          }
      })
  })
}

// (function() {
//   'use strict';
//   window.setInterval(() => {
//       $('.codebase-dv-tr').filter((index, item) => {
//           return !$(item).attr('data-cr-marked')
//       }).attr('data-cr-marked', true)
          
//       addCateBtn()
      
//   }, 1000);
// })();



// ======================================================= 以上为老版本 =========================================

function addCateBtn2(){
  const ele = $(`<span class=xbw-select-wrap style="border: 1px solid rgb(229,230,235);"><select style="width:100px;height:20px;font-size:10px;"><option value="">请选择分类</option>${optionsStrList.map((item,index)=>{
    return `<option value=${item}>${item}</option>`
  }).join('\n')}</select></span>`); 

  const btnContainer = $('.discussion-note-body');
  const enumBtttonText = {
    START_A_REVIEW: 'Start a review',
    COMMENT_NOW: 'Comment now',
    ADD_TO_REVIEW: 'Add to review',
    SAVE: 'Save',
  }

  btnContainer.each((index,item)=>{
    if($(item).find('.xbw-select-wrap')?.length) {
      $(item).find('textarea').trigger('input');
      return;
    }

    const textareaJQ = $($(item).find('textarea')[0]);
    let selectedValue = ""
    ele.on('input', function (e) {
      setTimeout(()=>{
        let val = textareaJQ.val()
        selectedValue = $(item).find('option:selected').val()
        if (selectedValue) {
          replaceReg.lastIndex = 0
          if(replaceReg.test(val)){
              const str = val.replace(replaceReg, `[${selectedValue}]`)
              textareaJQ.val(str)
          }else{
              val = `[${selectedValue}]${val}`
              textareaJQ.val(val)
          }
          // $(item).find('textarea').trigger('input')
        }
      })
    })

    
    $(item).find('.vecode-comment-form').each((innerIndex, innerItem) => {
      const innerItemJq = $($(innerItem).find('textarea')[0]);
      const allBtnWrap = $(innerItem).siblings();  // textarea 下边的按钮
      innerItemJq.on('input', function (e) {
        setTimeout(()=>{
          reg.lastIndex = 0
          const hasSelect = $(innerItem).find('.xbw-select-wrap').length
          if (hasSelect && !reg.test(innerItemJq.val())) {
            console.log('allBtnWrap', allBtnWrap)
            $(allBtnWrap.find('button')[1]).attr({disabled:'disabled'})
            $(allBtnWrap.find('button')[1])?.css('cssText', disabledStyle)
            $(allBtnWrap.find('button')[1])?.attr({title:"请选择分类"});
          } else {
            $(allBtnWrap.find('button')[1]).attr('disabled',false)
            $(allBtnWrap.find('button')[1])?.css('cssText', cancelDisableStyle)
            $(allBtnWrap.find('button')[1])?.attr({title:""});
          }
        })
      })
    });
    

    // $(item).find('textarea').trigger('input')
    setTimeout(()=>{
      $($($(item).children()[0]).find("[data-name='Preview']").parent()[0]).after(ele);
      // $($(item).find("[data-name='Preview']").parent()[0]).after(ele);
      // console.log('$(item).find("[data-name', $(item).find("[data-name='Preview']").parent()[0])
    })
  })
}

(function() {
  'use strict';
  window.setInterval(() => {
      $('.codebase-dv-tr').filter((index, item) => {
          return !$(item).attr('data-cr-marked')
      }).attr('data-cr-marked', true)
      addCateBtn()
      addCateBtn2()
  }, 1000);
})();