osu!pp.js

From NAT, 5 Years ago, written in JavaScript, viewed 421 times.
URL https://code.nat.moe/view/8c02513a Embed
Download Paste or View Raw
  1. // ==UserScript==
  2. // @name         osu!pp
  3. // @namespace    http://nat.moe/
  4. // @version      0.1
  5. // @description  show FC PP on osu info page.
  6. // @author       NAT
  7. // @match        https://osu.ppy.sh/*
  8. // @grant        none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12.     'use strict';
  13.  
  14.     var bmid = 0,
  15.         si = document.getElementById('songinfo');
  16.  
  17.     if(!si) return 0;
  18.     else si = si.children[0];
  19.  
  20.     try {
  21.        bmid = parseInt(
  22.           si.children[6].children[2].children[3].href
  23.             .split('/')[4]
  24.         );
  25.     } catch (e) {
  26.       // whatever.
  27.     }
  28.  
  29.     if (bmid == 0) return 0;
  30.  
  31.     Array.prototype.chunk = function(chunkSize) {
  32.       var R = [];
  33.       for (var i=0; i<this.length; i+=chunkSize)
  34.         R.push(this.slice(i,i+chunkSize));
  35.       return R;
  36.     };
  37.  
  38.     var api_url = 'https://api.nat.moe/oppai.cgi?' + bmid;
  39.     var apiGet = () => {
  40.       return new Promise(function (resolve, reject) {
  41.         var xhr = new XMLHttpRequest();
  42.         xhr.open('GET', api_url);
  43.         xhr.onload = function () {
  44.           if (this.status == 200) {
  45.             var res = JSON.parse(xhr.response);
  46.             if(res.ok) resolve(res.info);
  47.             else reject({err: res.err});
  48.           }
  49.           else reject({err: xhr.statusText});
  50.         };
  51.         xhr.onerror = function () {
  52.           reject({err: xhr.statusText});
  53.         };
  54.         xhr.send();
  55.       });
  56.     };
  57.  
  58.     var target_infos = [
  59.       {name: 'FC PP:', prop: 'pp'},
  60.       {name: 'Speed *:', prop: 'speed_stars'},
  61.       {name: 'Aim *:', prop: 'aim_stars'},
  62.       {name: 'Circles:', prop: 'num_circles'},
  63.       {name: 'Sliders:', prop: 'num_sliders'},
  64.       {name: 'Spinners:', prop: 'num_spinners'}
  65.     ];
  66.  
  67.     var DescTr = function(items, vals) {
  68.       var tr = document.createElement('tr');
  69.       items.forEach((item) => {
  70.         var td_title = document.createElement('td');
  71.         var td_val = document.createElement('td');
  72.         td_title.width = '0%';
  73.         td_val.className = "colour";
  74.         td_title.innerHTML = item.name;
  75.         td_val.innerHTML = vals[item.prop];
  76.         tr.appendChild(td_title);
  77.         tr.appendChild(td_val);
  78.       });
  79.       return tr;
  80.     };
  81.  
  82.     var handler = (oppai) => {
  83.       target_infos.chunk(3).forEach((infoset) => {
  84.         si.insertBefore(new DescTr(infoset, oppai), si.children[3]);
  85.       });
  86.     };
  87.  
  88.     apiGet().then(handler).catch(console.log);
  89. })();
  90.  

Replies to osu!pp.js rss

Title Name Language When
Re: osu!pp.js NAT javascript 5 Years ago.

Reply to "osu!pp.js"

Here you can reply to the paste above

captcha