您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
save selection
当前为
- // ==UserScript==
- // @name wirelyre select save
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description save selection
- // @author 13pake
- // @match https://wirelyre.github.io/tetra-tools/pc-solver.html*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=github.io
- // @grant GM_addStyle
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- GM_addStyle("#solutions > a { border-radius: 4px; }");
- GM_addStyle("#solutions { row-gap: 20px; }");
- GM_addStyle("#select-save { background-color: rgba(0,0,0,0.2); color: #fff; border: 1px solid rgba(0,0,0,0.3); margin-left: 5px; }");
- GM_addStyle("#label-save { margin-top: 10px; }");
- // Constants
- var pieces = ['T', 'I', 'L', 'J', 'S', 'Z', 'O'];
- var colors = [
- 'rgb(180, 81, 172)', // purple
- 'rgb(65, 175, 222)', // cyan
- 'rgb(239, 149, 54)', // orange
- 'rgb(24, 131, 191)', // blue
- 'rgb(102, 198, 92)', // green
- 'rgb(239, 98, 77)', // red
- 'rgb(247, 211, 62)', // yellow
- ];
- window.onload = function() {
- // Add save selection
- var label = document.createElement('label');
- label.id = 'label-save';
- label.innerHTML = 'Save';
- document.querySelectorAll('#query > div:nth-child(6)')[0].appendChild(label);
- var select = document.createElement('select');
- label.appendChild(select);
- select.id = 'select-save';
- var selectOptions = ['All', ...pieces];
- for (var i = 0; i < selectOptions.length; i++) {
- var option = document.createElement('option');
- option.value = selectOptions[i];
- option.text = selectOptions[i];
- select.appendChild(option);
- }
- // On select change
- select.onchange = function(event) {
- selectSave(event.target.value);
- }
- function selectSave(value) {
- if (value !== 'All') {
- document.querySelectorAll('#solutions > a').forEach(function(a) {
- a.style.display = 'none';
- a.style.borderTopWidth = '0';
- });
- document.querySelectorAll('#solutions > a.' + value).forEach(function(a) {
- a.style.display = 'block';
- });
- } else if (value == 'All') {
- document.querySelectorAll('#solutions > a').forEach(function(a) {
- a.style.display = 'block';
- a.style.borderTopWidth = '10px';
- });
- }
- }
- // Add listener for solutions
- var targetNode = document.getElementById('solutions');
- var config = {
- // attributes: true,
- childList: true,
- subtree: true
- };
- var observer = new MutationObserver(function(mutationsList) {
- var queue = document.getElementById('queue').value;
- // check if queue is just pieces
- var piecesOnlyMatch = queue.match(/^[TILJSZO]*$/);
- if (piecesOnlyMatch) {
- //console.log('good queue');
- } else {
- return;
- }
- var queuePieces = pieces.map(function(piece) {
- return (queue.split(piece).length - 1);
- });
- // We're just gonna assume the queue length is correct !!!
- //console.log('queue pieces', queuePieces);
- for (var mutation of mutationsList) {
- if (mutation.type == 'childList') {
- // console.log('A child node has been added or removed.', mutation.addedNodes[0]);
- try {
- var aNode = mutation.addedNodes[0];
- var dataField = aNode.firstChild.getAttribute('data-field');
- var solutionPieces = pieces.map(function(piece) {
- return (dataField.split(piece).length - 1) / 4;
- });
- //console.log('pieces used', solutionPieces);
- // get difference between arrays
- var differentIndex = -1;
- for (let i = 0; i < queuePieces.length; i++) {
- if (queuePieces[i] !== solutionPieces[i]) {
- differentIndex = i;
- }
- }
- //console.log('saved piece', pieces[differentIndex]);
- aNode.style.borderTop = "10px solid " + colors[differentIndex];
- aNode.classList.add(pieces[differentIndex]);
- } catch (e) {
- // do nothing lol
- }
- }
- }
- });
- observer.observe(targetNode, config);
- }
- })();