gitlab_code_reviewer_helper

hello world

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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);
})();