// ==UserScript== // @name PixivAverage // @namespace http://www14.atwiki.jp/pixivhacker/ // @version 1.6 // @description PIXIV平均点表示 // @include http://www.pixiv.net/member_illust.php*mode=medium* // @require https://gist.github.com/raw/3242/9dc0cdee5e975d275c7ab71f581d272eb316674f/dollarX.js // ==/UserScript== (function() { var ratingDiv = unsafeWindow.$('unit'); var rating = unsafeWindow.$('rating'); if(rating){ var tmp = rating.className; tmp = tmp.replace("loading",""); rating.className = tmp; } if(ratingDiv){ var ul = $X('.//ul[@class="unit-rating"]', ratingDiv)[0]; var h4 = $X('./h4',ratingDiv)[0]; } if(ul){ addStarAndText(h4,ul); //コールバックはあきらめた //var on_loaded_save_bak = unsafeWindow.on_loaded_save; //unsafeWindow.on_loaded_save = function(obj){ // on_loaded_save_bak(obj); // addStarAndText(h4,ul); //}; }else{ ul = document.createElement("ul"); ul.className = "unit-rating"; ratingDiv.insertBefore(ul, ratingDiv.lastChild); addStarAndText(h4,ul); } function addStarAndText(h4,ul){ //平均値を計算 var ave = calcAverage(h4); //「平均:xxx」を追加 addText(ave,h4); //星グラフを追加 addStarDiv(ave, ul); } function addText(ave,h4){ var insDiv = document.createElement("b"); insDiv.innerHTML = "平均:" + (Math.round(ave * 100) / 100) + " "; h4.insertBefore(insDiv, h4.firstChild); } function addStarDiv( ave, ul ){ /* グラフの幅を計算 */ var size = calcSize(ave); /* 星の画像URLを取得 */ var imgURL = getBackImg(ul); /* 黄色星グラフの枠となるdivタグを作って挿入する */ var li = document.createElement("li"); ul.insertBefore(li, ul.firstChild); var divR0 = document.createElement("div"); divR0.className = "r0-unit"; li.appendChild(divR0); /* 黄色い星グラフのスタイルシート */ GM_addStyle( ".unit-rating li div.r0-unit {" + " background: transparent url(" + imgURL + ") repeat scroll left bottom;" + " z-index:1;" + " width:" + size.width + "px;" + " height:" + size.height + "px;" + " }" ); /* 自分の今日押した星があったら消す */ var cur = $X('./li[@class="current-rating"]',ul)[0] if(cur){ GM_addStyle( ".unit-rating li.current-rating { display:none; }" ); } } function getBackImg(ul){ var img = "http://source.pixiv.net/source/images/rating.png"; try{ var style = document.defaultView.getComputedStyle(ul,"") .getPropertyValue("background-image"); }catch(e){ GM_log(e); GM_log(e.location.line); } if(style){ img = style.replace(/\s*url\(\s*"?\s*(.*?)\s*"?\s*\)\s*/,"$1"); } return img; } function calcSize(ave){ var PADDING = 4; var STARWIDTH = 26; var STARHEIGHT = 26; var stars = Math.floor(ave); var width = stars * STARWIDTH; var amari = ave - stars; if(amari >= 0.01){ /*※の-1は黄色のほうが広く見える錯覚の補正*/ var plus = Math.round((STARWIDTH - PADDING*2 -1 /*※*/ ) * amari); width += (PADDING + plus); } return {width:width, height:STARHEIGHT}; } function calcAverage(div){ var vols = div.textContent.split(/\s+/); var cnt,sum; for(var i = 0;i 0 ){ ave = sum / cnt; } return ave; } })();