您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add fine tuned garden rotation, custom garden sizes, and show/hide buttons for toolbox/type box!
// ==UserScript== // @name MVGP++ // @namespace none // @version 2020.01.03.1618 // @description Add fine tuned garden rotation, custom garden sizes, and show/hide buttons for toolbox/type box! // @author technical13 // @supportURL https://discord.me/TheShoeStore // @match http://gardenpainter.ide.sk/paint.php // @grant none // ==/UserScript== // jshint esversion: 6 var isDebug = false; var intVerbosity = 0; const ver = '2020.01.03.1618'; const scriptName = 'MVGP++ v' + ver; const intAlertWidth = 760; function toBoolean( val ) { const arrTrue = [ undefined, null, '', true, 'true', 1, '1', 'on', 'yes' ]; val = ( typeof( val ) === 'string' ? val.toLowerCase() : val ); log( 4, 'log', 'toBoolean() is returning: %o', ( arrTrue.indexOf( val ) !== -1 ? true : false ) ); return ( arrTrue.indexOf( val ) !== -1 ? true : false ); } function log( intV, strConsole, strLog, ...arrArgs ) { if ( strConsole === undefined ) { strConsole = 'log'; } if ( strLog === undefined ) { strLog = '%o'; } if ( intVerbosity >= intV && ( strConsole === 'groupEnd' ) ) { console[ strConsole ](); } if ( intV === 0 || ( isDebug && intVerbosity >= intV ) ) { console[ strConsole ]( '[%i]: %s: ' + strLog, intV, scriptName, ...arrArgs ); } } const intParamsStart = ( document.URL.indexOf( '?' ) + 1 ); const strParams = document.URL.substr( intParamsStart ); const arrParamSets = strParams.split( '&' ); var objParams = {}; arrParamSets.forEach( function( strParam ) { let arrParam = strParam.split( '=' ); let strParamName = ( arrParam[ 0 ].toLowerCase() || '' ); if ( strParamName === 'verbosity' ) { isDebug = true; intVerbosity = ( arrParam[ 1 ] ? ( parseInt( arrParam[ 1 ] ) < 0 ? 0 : ( parseInt( arrParam[ 1 ] ) > 9 ? 9 : parseInt( arrParam[ 1 ] ) ) ) : 9 ); } else if ( strParamName === 'debug' ) { isDebug = toBoolean( arrParam[ 1 ] ); intVerbosity = 1; } } ); log( 1, 'warn', 'Debug mode is on with verbosity level: %o', intVerbosity ); log( 1, 'groupCollapsed', 'Verbosity options: (click to expand)' ); log( 1, 'log', '1) Summary\n2) Parameters retrieved from URL\n3) Variables set to objParams\n4) Function returns\n9) ALL debugging info and this notice.' ); log( 1, 'groupEnd' ); ( function() { 'use strict'; log( 0, 'info', 'Script loaded.' ); document.getElementById( 'permalinktext' ).align = 'right'; var toggleToolbox = document.createElement( 'input' ); toggleToolbox.id = 'toggleToolbox'; toggleToolbox.type = 'button'; toggleToolbox.setAttribute( 'class', 'btnToggle' ); toggleToolbox.title = 'Toggle display of types box.'; toggleToolbox.value = 'Hide Toolbox'; toggleToolbox.style = 'float: left;'; var toggleTypes = document.createElement( 'input' ); toggleTypes.id = 'toggleTypes'; toggleTypes.type = 'button'; toggleTypes.setAttribute( 'class', 'btnToggle' ); toggleTypes.title = 'Toggle display of types box.'; toggleTypes.value = 'Hide Types'; toggleTypes.style = 'float: right;'; var toggleButtons = document.createElement( 'div' ); toggleButtons.id = 'toggleButtons'; toggleButtons.append( toggleToolbox ); toggleButtons.append( toggleTypes ); document.getElementById( 'maptiles' ).append( toggleButtons ); var arrToggleBtns = document.getElementsByClassName( 'btnToggle' ); for ( var i = 0; i < arrToggleBtns.length; i++ ) { arrToggleBtns[ i ].addEventListener( 'click', function ( event ) { var isHideShow = event.target.value.split( ' ' )[ 0 ]; var forBtn = event.target.value.split( ' ' )[ 1 ]; try { var doHideShow = ( isHideShow === 'Hide' ? 'Show' : 'Hide' ); event.target.value = doHideShow + ' ' + forBtn; if ( forBtn === 'Toolbox' ) { document.getElementById( 'toolbox' ).style.display = ( isHideShow === 'Hide' ? 'none' : 'inline-block' ); } else if ( forBtn === 'Types' ) { document.getElementById( 'munzee-types' ).style.display = ( isHideShow === 'Hide' ? 'none' : 'inherit' ); } } catch ( errToggle ) { log( 0, 'error', 'Failed while attempting to %s %o\n\t: %o', isHideShow, forBtn, errToggle ); } } ); } var customGrid = document.createElement( 'img' ); customGrid.id = 'customGrid'; customGrid.setAttribute( 'class', 'btn' ); customGrid.width = '50'; customGrid.height = '50'; customGrid.title = 'Grid size ? × ?'; customGrid.src = 'https://cdn.discordapp.com/attachments/662752932151820308/662772347174125568/MVGP_Custom_Size.png'; document.querySelectorAll( 'div#toolbox img.btn' )[ 8 ].after( customGrid ); document.getElementById( 'customGrid' ).addEventListener( 'click', function ( event ) { var askSize = prompt( 'Grids must have matching widths and heights.\nGrids larger than 120×120 may not load well.\n\n\tWhat size would you like your grid?', 120 ); n = parseInt( askSize ); if ( isNaN( n ) ) { alert( '"' + askSize + '" is not a number. Please try again and enter a single number.' ); } else if ( n > 120 ) { var amSure = confirm( '"' + n + '×' + n + '" is greater than 120×120.\nGrids larger than 120×120 are more likely to crash your browser.\n\n\tARE YOU SURE YOU WANT TO TRY?' ); if ( amSure ) { setupCrosses(); setupPins(); setGridSize( n ); } } else { setupCrosses(); setupPins(); setGridSize( n ); } } );//*/ var rotateRightOne = document.createElement( 'img' ); rotateRightOne.id = 'rotateRightOne'; rotateRightOne.setAttribute( 'class', 'btn' ); rotateRightOne.title = 'Rotate the grid right by 1 degree.'; rotateRightOne.src = 'https://cdn.discordapp.com/attachments/662752932151820308/662753267276841035/grid_rotate4.png'; rotateRightOne.setAttribute( 'onclick', 'rotateGridRight(1)' ); document.querySelectorAll( 'div#toolbox img.btn' )[ 5 ].after( rotateRightOne ); var rotateLeftOne = document.createElement( 'img' ); rotateLeftOne.id = 'rotateLeftOne'; rotateLeftOne.setAttribute( 'class', 'btn' ); rotateLeftOne.title = 'Rotate the grid left by 1 degree.'; rotateLeftOne.src = 'https://cdn.discordapp.com/attachments/662752932151820308/662753258221076490/grid_rotate3.png'; rotateLeftOne.setAttribute( 'onclick', 'rotateGridLeft(1)' ); document.querySelectorAll( 'div#toolbox img.btn' )[ 4 ].before( rotateLeftOne ); } )();