您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Help you making life easier when orareview.
当前为
// ==UserScript== // @name Orareview Helper // @namespace https://greasyfork.org/users/3729 // @version 0.1.2 // @description Help you making life easier when orareview. // @match https://orareview.us.oracle.com/* // @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @grant unsafeWindow // @copyright 2014, Rex // ==/UserScript== (function(document,jQuery) { var $=jQuery; var patternPageMap={"onMainPage":/\.com\/\d+$/g, "onDiffPage":/\.com\/\d+\/diff[2]?\/\d+(:\d+)?\/\d+/g}; var paramLineWidth='display_width',patternLineWidth=new RegExp(paramLineWidth); var preferedLineWidth=80; function log(){ unsafeWindow.console.debug.apply(unsafeWindow.console,arguments); } function getPreferedLineWidth(){ var lineNumberColWidth=0, codeViewportWidth=0, windowWidth=jQuery(unsafeWindow).width(); if(!!jQuery('table#table-top').length){ codeViewportWidth=jQuery('table#table-top').width(); jQuery('table#thecode:first tbody tr:eq(1) b').each(function(i,col){ lineNumberColWidth=jQuery(col).width(); }); } if(lineNumberColWidth==0){ lineNumberColWidth=42; if(codeViewportWidth==0){ codeViewportWidth=windowWidth-26; } } return parseInt(((codeViewportWidth-lineNumberColWidth*2)/2)/7); } function onDiffPage(){ //log('onDiffPage'); var patternMatch=false,lineContent=null,filter=null; var lineFilters=[{name:"CreationDate",pattern:/<CreationDate>/},{name:"LastUpdateDate",pattern:/<LastUpdateDate>/},{name:"LastUpdateLogin",pattern:/<LastUpdateLogin>/}];/**['<CreationDate>','<LastUpdateDate>','<LastUpdateLogin>','<BaseFlowParameterId>'];*/ jQuery("table#thecode tbody tr[id*=pair]:has(td[class*=replace])").each(function(i,tr){ tr=jQuery(tr); lineContent=tr.text(); patternMatch=false; for(i in lineFilters){ filter=lineFilters[i]; if(filter && filter.pattern && filter.pattern.test(lineContent)){ //log(lineContent, filter.pattern, tr); patternMatch=true; break; } } if(patternMatch){tr.toggle();}else{//remove spaces only changes TOCONFIG var diffsInline=tr.find("[class*=dark]"); if(!jQuery.trim(diffsInline.text()).length){ if(diffsInline.parents("td:first").index()==0) diffsInline.addClass('oldequal'); else diffsInline.addClass('newequal'); } } });///** //remain current display width when jumping to another file var fileJumper=jQuery('select[onChange*=M_jumpToPatch]:first'); var displayWidth=parseInt(jQuery(":input[name="+paramLineWidth+"]:visible:first").val()); fileJumper.children().each(function(i,opt){ if(i==0 && patternLineWidth.test(opt.value)){ return false; }else if(i==0){ if(isNaN(displayWidth) || displayWidth==80){ displayWidth=getPreferedLineWidth(); } } opt.value+='?display_width='+displayWidth; });//*/ //mark file reviewed/not reviewed var selectedOption=fileJumper.children(':selected:first'); var statusPanel=fileJumper.parent().nextAll('div:has(a[href*=mark_file_reviewed]):first'); var markTrigger=statusPanel.find('a[href*=mark_file_reviewed]:first'); var statusDescriptor=jQuery('<span style="margin-right:5px;"></span>'); statusDescriptor.text('Status: '+jQuery.trim(statusPanel.text()).match(/Status:\s(\w+(\s\w+)?)/)[1]); statusPanel.html('').append(statusDescriptor).append(markTrigger); var currentReviewStatus=null;//true|false var currentReviewStatusText=null;//'Reviewed'|'Not Reviewed' var reviewStatusMap={'Reviewed':true,'Not Reviewed':false,true:'Reviewed',false:'Not Reviewed'}; var getCurrentReviewStatusText=function(){ if(currentReviewStatusText==null){ var matchGroup=statusDescriptor.text().match(/Status:\s(\w+(\s\w+)?)/); if(matchGroup && matchGroup.length>1){ currentReviewStatusText = matchGroup[1]; } } return currentReviewStatusText; } var getCurrentReviewStatus=function(){ if(currentReviewStatus==null){ currentReviewStatusText=getCurrentReviewStatusText(); currentReviewStatus=reviewStatusMap[currentReviewStatusText]; } return currentReviewStatus; } var setClientReviewStatus = function(reviewed){//true|false if(reviewed==currentReviewStatus){ return; } var newStatusText=reviewStatusMap[reviewed]; statusDescriptor.text('Status: '+newStatusText); markTrigger.text('Change Status to '+reviewStatusMap[!reviewed]); //change selected option selectedOption.text(selectedOption.text().replace(/\((R|V)\)/,function(match0,status){ return status=='V'?'(R)':'(V)'; })); } var toggleClientReviewStatus = function(){ setClientReviewStatus(!currentReviewStatus); }; markTrigger.click(function(evt){ //console.log(evt,evt.target,evt.target.href); currentReviewStatus=getCurrentReviewStatus(); jQuery.ajax(evt.target.href,{ success:function(data,status,xhr){ //change to server status only when really successfully loaded currentReviewStatus=!currentReviewStatus; },error:function(xhr,status,errorThrown){ unsafeWindow.alert('Failed to mark file as ['+currentReviewStatusText+'].'); //revert change setReviewStatus(true); } }); //mark successfull immediately. But if error occured later, revert this change. setTimeout(toggleClientReviewStatus,1000); return false; }); } function onMainPage(){ //change default line width of orareview diff page //log('onMainPage'); var diffLink = null; var paramName=paramLineWidth, adjustedParamValue = preferedLineWidth?preferedLineWidth:105, paramRegExp = new RegExp(paramName+'=(\d*)'); jQuery('a[href*=diff]').each(function(i,a){ a=jQuery(a); diffLink = a.attr('href'); if(/^\/\d+\/diff[2]?\/\d+(:\d+)?\/\d+$/.test(diffLink)){ if(!/\?/.test(diffLink)){diffLink+='?';}else{ if(!/\?$/.test(diffLink)){ diffLink+='&'; } } if(paramRegExp.test(diffLink)){ diffLink=diffLink.replace(paramRegExp,paramName+'='+adjustedParamValue); }else{ diffLink+=paramName+'='+adjustedParamValue; } a.attr('href',diffLink); } }); } function main(){ log('Orareview Helper loaded.'); unsafeWindow.jQuery=jQuery; preferedLineWidth=getPreferedLineWidth(); var documentLocation = document.location.href; //log('preferedLW',preferedLineWidth,'documentLocation',documentLocation); var pattern=null; for(fnd in patternPageMap){ pattern=patternPageMap[fnd]; if(pattern.test(documentLocation)){ log(fnd,pattern); eval(fnd+'.apply()'); break; } } } main(); })(window.document,jQuery);