您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add average ratings of 99designs contests to the contest listing
// ==UserScript== // @name 99clients // @version 2016.04.25.2303 // @description Add average ratings of 99designs contests to the contest listing // @author 99clients Team // @homepage https://99clients.org // @include http://*.99designs.com/* // @include https://*.99designs.com/* // @include http://99designs.com/* // @include https://99designs.com/* // @include http://*.99designs.de/* // @include https://*.99designs.de/* // @namespace https://greasyfork.org/users/40437 // ==/UserScript== /* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ function makeXhrQuery(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.send(null); var resp = JSON.parse(xhr.response); return resp; } // thanks dcro on StackOverflow for this // http://stackoverflow.com/a/18251730 function rfc3986EncodeURIComponent(str) { return encodeURIComponent(str).replace(/[!'()*]/g, escape); } var ct_rating_style = "style='background-color: #999; display: inline-block; color: #fff; font-size: 0.75em; border-radius: 3px; text-transform: uppercase; padding: 1px 2px;'"; var ct_link_style = "style='display: inline-block; font-size: 0.75em; text-transform: uppercase; margin-left: 5px;'"; var ch_rating_style = "style='font-family: \"Atlas Grotesk Web\", sans-serif; display: inline-block; margin-left: 1em; font-style: normal; text-transform: uppercase; font-size: 0.8em; border: 1px solid #999; border-radius: 3px; padding: 1px 2px'"; var NNC = "https://99clients.org/api/multi.php"; var contest_titles = document.getElementsByClassName("listing-details__title__link"); var ch_names = document.getElementsByClassName("listing-details__display-name display-name display-name--link"); var ct_ids = new Array(); var ch_ids = new Array(); for (var i = 0; i < contest_titles.length; i++) { var ct_node = contest_titles[i]; var ct_link = ct_node.href; var ct_link_arr = ct_link.split("-"); var ct_id = ct_link_arr[ct_link_arr.length - 1]; ct_ids.push(ct_id); ch_ids.push(ch_names[i].href.split("/")[4]); } var url = NNC + "?ct_ids=" + ct_ids.join(",") + "&ch_ids=" + ch_ids.join(","); var data = makeXhrQuery(url); for (var i = 0; i < contest_titles.length; i++) { var ct_node = contest_titles[i]; var ct_link = ct_node.href; var ct_link_arr = ct_link.split("-"); var ct_id = ct_link_arr[ct_link_arr.length - 1]; var ct_rating = data["ct_" + ct_id]["avg_rating"]; var ct_num_revs = data["ct_" + ct_id]["num_reviews"]; if (ct_num_revs == 0) { var ct_text = "<div " + ct_rating_style + ">no reviews for this contest yet</div>"; } else { if (ct_num_revs > 1) { var review_or_reviews = "reviews"; } else { var review_or_reviews = "review"; } var ct_text = "<div " + ct_rating_style + ">rated " + ct_rating + " (" + ct_num_revs + " " + review_or_reviews + ")</div>"; } // compute slug, build "review this contest" link var ct_link_full = ct_link.split("//")[1]; var ctlfa = ct_link_full.split("/"); ctlfa.shift(); var slug = ctlfa.join("/"); var ct_title = rfc3986EncodeURIComponent(ct_node.innerHTML); var ch_name = ch_names[i].innerHTML; var ch_id = ch_names[i].href.split("/")[4]; ct_text += "<div " + ct_link_style + "><a target='_blank' href='https://99clients.org/review?slug=" + slug + "&ct_title=" + ct_title + "&ch_name=" + ch_name + "&ch_id=" + ch_id + "'>review this contest</a></div>"; ct_node.insertAdjacentHTML('afterend', "<br/>" + ct_text); var ch_link_node = ch_names[i]; var ch_link = ch_link_node.href; var ch_link_arr = ch_link.split("/"); var ch_id = ch_link_arr[ch_link_arr.length - 1]; var ch_rating = data["ch_" + ch_id]["avg_rating"]; var ch_num_revs = data["ch_" + ch_id]["num_reviews"]; if (ch_num_revs == 0) { var ch_text = "<div " + ch_rating_style + ">no reviews for this CH yet</div>"; } else { if (ch_num_revs > 1) { var review_or_reviews = "reviews"; } else { var review_or_reviews = "review"; } var ch_text = "<div " + ch_rating_style + ">CH rated " + ct_rating + " (" + ct_num_revs + " " + review_or_reviews + ")</div>"; } ch_link_node.insertAdjacentHTML('afterend', ch_text); }