// ==UserScript== // @name 原神Wiki地图工具助手 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 隐藏地图中已经标记的点 // @author You // @match https://wiki.biligame.com/ys/%E5%8E%9F%E7%A5%9E%E5%9C%B0%E5%9B%BE%E5%B7%A5%E5%85%B7* // @grant none // @require https://cdn.staticfile.org/jquery/3.3.0/jquery.min.js // @require https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js // @downloadURL none // ==/UserScript== function run() { // “设置界面”是否已经显示 var g_is_setting_shown = false; // 需要隐藏的选项 var g_marked_hidden_categories = new Set(); // info,error自动清除 定时器ID var g_info_timer = -1; var g_error_timer = -1; function isEmpty(e) { return e==null || e.length==0; } function init() { // 从cookie读取配置 var cookie_YsHelper_markedHiddenCategories = $.cookie('YsHelper_markedHiddenCategories'); if (!isEmpty(cookie_YsHelper_markedHiddenCategories)) { g_marked_hidden_categories = new Set(cookie_YsHelper_markedHiddenCategories.split(',')); } // 添加按钮 const export_icon = ''; const import_icon = ''; const setting_icon = ''; var btn_export = ''; var btn_import = ''; var btn_setting = '' + setting_icon + ''; $('.mapMenu').after(''); $('.mapMenu').after('
' + btn_export + btn_import + btn_setting + '
'); $('.mapMenu').after('
'); $('.mapMenu').after('
'); $('#local_file').change(function(e){ var reader = new FileReader(); var file = e.target.files[0]; reader.readAsText(file); reader.onload = function () { try { var data = JSON.parse(reader.result); if (!(data instanceof Array)) { return error('输入文件格式错误'); } $.cookie('last_marked', getMarked()); var marked = JSON.stringify(data); console.log(marked); setMarked(marked); infoReloadPage('读取成功'); } catch(err) { console.log(err); return error('输入文件格式错误, 无法解析'); } }; reader.onerror = function(){ error('读取本地文件失败 (' + reader.error + ')'); } e.target.value=''; }); info('欢迎使用!'); } function info(msg, timeout) { if (msg != '') { $('#ys-helper-error-msg').html(''); msg = '原神助手[提示]:' + msg; clearTimeout(g_info_timer); if (timeout == null) { timeout = 5000; } if (timeout > 0) { g_info_timer = setTimeout(function(){info('');}, timeout); } } $('#ys-helper-info-msg').html(msg); } function error(msg, timeout) { if (msg != '') { $('#ys-helper-info-msg').html(''); msg = '原神助手[错误]:' + msg; clearTimeout(g_error_timer); if (timeout == null) { timeout = 10000; } if (timeout > 0) { g_error_timer = setTimeout(function(){error('');}, timeout); } } $('#ys-helper-error-msg').html(msg); } function infoReloadPage(prefix, suffix) { var msg = ''; if (prefix && prefix != '') { msg += prefix + ', '; } msg += '请【刷新】本页面'; if (suffix && suffix != '') { msg += ', ' + suffix; } return info(msg, 0); } function showSetting() { $('.ys-helper-btn-upload').show(); $('.ys-helper-btn-download').show(); $('.select-item').css('flex', '0 0 45%'); $(".select-item").each(function(){ var categoryid = $(this).attr('categoryid'); var $cbHidden = $(''); $(this).before($cbHidden); }); } function hideSetting() { $('.ys-helper-btn-upload').hide(); $('.ys-helper-btn-download').hide(); $('.select-item').css('flex', '0 0 50%'); $('.cb-marked-hidden').remove(); } function isMarkedHidden(categoryid) { return g_marked_hidden_categories.has(categoryid); } function setMarkedHidden(categoryid, hidden) { if (hidden) { g_marked_hidden_categories.add(categoryid); } else { g_marked_hidden_categories.delete(categoryid); if (isShown(categoryid)) { clickIcon(categoryid, 2); } } saveSetting(); } function saveSetting() { $.cookie('YsHelper_markedHiddenCategories', Array.from(g_marked_hidden_categories).toString()); } function isChecked(categoryid) { return $('input[type="checkbox"][categoryid="' + categoryid + '"]').prop('checked'); } window.YsHelper_showSetting = function() { if (g_is_setting_shown) { hideSetting(); g_is_setting_shown = false; } else { showSetting(); g_is_setting_shown = true; } } window.YsHelper_checkStateChanged = function(categoryid) { var checked = isChecked(categoryid); setMarkedHidden(categoryid, checked); } function getMarked() { return localStorage.wikiYsOpacData; } function setMarked(marked) { localStorage.wikiYsOpacData = marked; } function getIconSrcByCategoryid(categoryid) { return $('.select-item[categoryid="' + categoryid + '"]').find('.list-img')[0].currentSrc; } function removeParam(url) { var idx = url.indexOf('?'); return idx==-1 ? url : url.substr(0, idx); } function clickIcon(categoryid, times) { times = times ? times : 1; var $el = $('.select-item[categoryid="' + categoryid + '"]')[0]; for (var i = 0; i < times; ++i) { $el.click(); } } function isShown(categoryid) { return $('.select-item[categoryid="' + categoryid + '"]').hasClass('item-active'); } function showIcon(categoryid) { var $elem = $('.select-item[categoryid="' + categoryid + '"]'); if (!$elem.hasClass('item-active')) { $elem[0].click(); } } function hideIcon(categoryid) { var $elem = $('.select-item[categoryid="' + categoryid + '"]'); if ($elem.hasClass('item-active')) { $elem[0].click(); } } function hideMarkedIcon(categoryid) { var $img = $('img'); var count = 0; var iconSrc = removeParam(getIconSrcByCategoryid(categoryid)); for (var i = 0; i < $img.length; ++i) { if (removeParam($img[i].src) == iconSrc && $img[i].id != '') { var yst = $img[i]; if (yst.style.opacity != '1') { yst.parentNode.removeChild(yst); count++; } } } if (count > 0) { console.log(name + ': ' + count); } return count; } function saveToFile(content, filename) { let downLink = document.createElement('a'); downLink.download = filename; let blob = new Blob([content]) downLink.href = URL.createObjectURL(blob) document.body.appendChild(downLink) downLink.click() document.body.removeChild(downLink) } window.YsHelper_import = function() { return $("#local_file").trigger("click"); } window.YsHelper_export = function() { var marked = getMarked(); if (isEmpty(marked)) { return error('当前没有任何已标记的点'); } var filename = '原神wiki_地图工具_标记点_' + getTimeStr(new Date()) + '.txt'; return saveToFile(marked, filename); } function getTimeStr(time) { var date = new Date(time); var year = date.getFullYear(), month = date.getMonth()+1, day = date.getDate(), hour = date.getHours(), min = date.getMinutes(), sec = date.getSeconds(); var str = year + '' + (month < 10? '0' + month : month) + '' + (day < 10? '0' + day : day) + '_' + (hour < 10? '0' + hour : hour) + '' + (min < 10? '0' + min : min) + '' + (sec < 10? '0' + sec : sec); return str; } function refreshMap() { var $items = $('.select-item'); for (var i = 0; i < $items.length; ++i) { var $item = $items.eq(i); if ($item.hasClass('item-active')) { var categoryid = $items.eq(i).attr('categoryid'); clickIcon(categoryid, 2); } } } /**************************************************/ /* */ /* ready */ /* */ /**************************************************/ init(); setInterval(function(){ for (var categoryid of g_marked_hidden_categories) { hideMarkedIcon(categoryid); } }, 1000); } (function() { 'use strict'; run(); })();