gitlab_code_reviewer_helper

hello world

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

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