ファイルをダウンロード
// ==UserScript== // @name 3gokushi-MapStar-chrome // @namespace 3gokushi // @description ブラウザ三国志のマップに★の数を表示します。クローム対応版 // @include http://*.3gokushi.jp/map.php* // ==/UserScript== var LOCAL_STORAGE = "bro3_mapstar"; //main (function(){ //window.addEventListener("load",function() { initGMWrapper(); if (typeof GM_addStyle == "undefined") { GM_addStyle = function(css) { var style = document.createElement('style'); style.textContent = css; document.getElementsByTagName('head')[0].appendChild(style); }; } GM_VAL_PREFIX = "GMMS_"; /** * 設定データ初期化 */ var dataTable = { w : new Array("#FFFFFF", "#000000", GM_getValue(GM_VAL_PREFIX + "w", true)), // white r : new Array("#FF0000", "#FFFFFF", GM_getValue(GM_VAL_PREFIX + "r", true)), // red g : new Array("#00FF00", "#000000", GM_getValue(GM_VAL_PREFIX + "g", true)), // green b : new Array("#0000FF", "#FFFFFF", GM_getValue(GM_VAL_PREFIX + "b", true)), // blue y : new Array("#FFFF00", "#000000", GM_getValue(GM_VAL_PREFIX + "y", true)), // yellow p : new Array("#FF00FF", "#FFFFFF", GM_getValue(GM_VAL_PREFIX + "p", true)), // pink bk : new Array("#000000", "#FFFFFF", GM_getValue(GM_VAL_PREFIX + "bk", true)), // black bg : new Array("#0066FF", "#FFFFFF", GM_getValue(GM_VAL_PREFIX + "bg", true)), // sky blue o : new Array("#FFA500", "#000000", GM_getValue(GM_VAL_PREFIX + "o", true)) // orange }; /** * styleの追加 */ GM_addStyle([ ".mapStar_outer{ width:10px;height:10px;margin:2px 4px 2px 0px;float:left;border:1px solid #000000;cursor:pointer; }", ".mapStar_on{ filter:alpha(opacity=100);opacity:1; }", ".mapStar_off{ filter:alpha(opacity=30);opacity:0.3;border:1px solid #999999; }", ".mapStar_box{ filter:alpha(opacity=60);opacity:0.6; position: absolute; width: 8px; height: 8px; padding: 0px 0px 2px 3px; font-size: 8px;}", ].join("\n")); /** * 設定on/off処理関数 */ function onSettingClick() { var key = this.getAttribute("type"); var gmv = GM_getValue(GM_VAL_PREFIX + key, true); GM_setValue(GM_VAL_PREFIX + key, !gmv); var clsName; var displayVal; if (gmv) { clsName = "mapStar_off"; visibleVal = "hidden"; } else { clsName = "mapStar_on"; visibleVal = "visible"; } var XPath = '//div[@class="mapStar_margin mapStar_box mapStar_' + key + '"]'; var list = document.evaluate(XPath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for ( var i = 0; i < list.snapshotLength; i++) { list.snapshotItem(i).style.visibility = visibleVal; } XPath = '//div[@type="' + key + '"]'; document.evaluate(XPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.className = "mapStar_outer " + clsName; } /** * 設定ボックスの挿入 */ var insset = document.getElementById('mapboxInner'); if (insset != null) { var set = document.createElement('div'); set.style.backgroundColor = "#FFFFFF"; set.setAttribute("id","mapStarBox"); insset.appendChild(set); var cssText = ""; for ( var key in dataTable) { var onoff = dataTable[key][2] ? "mapStar_on" : "mapStar_off"; var setItem = document.createElement('div'); setItem.className = "mapStar_outer " + onoff; setItem.style.backgroundColor = dataTable[key][0]; set.appendChild(setItem); setItem.setAttribute("type", key); setItem.addEventListener("click", onSettingClick,false); cssText += ".mapStar_"+key+"{background-color:"+dataTable[key][0]+"; color:"+dataTable[key][1]+"} "; } } GM_addStyle(cssText); /** * MAPサイズ取得 */ var mapSize = document.getElementById('rollover').style.zIndex - 1; /** * 地図データの取得 */ var mapMap = new Array(mapSize + 1); var mapAreaDoc = document.getElementById('mapsAll'); var imgRegCmp = new RegExp(/img\/panel\/[^_]*_([^_]*)_/); var imgMap = mapAreaDoc.getElementsByTagName('img'); for ( var i = 0; i < imgMap.length; i++) { var clstxt = imgMap[i].className; if ((clstxt != null) && (clstxt.search(/mapAll(\d+)/) != -1)) { var mapIndex = RegExp.$1 - 0; var imgSrc = imgMap[i].src; if (imgRegCmp.exec(imgSrc)) { var imgRegCmp = new RegExp(/img\/panel\/[^_]*_([^_]*)_/); mapMap[mapIndex] = RegExp.$1; } else if (0 <= imgSrc.indexOf("blanc")) { mapMap[mapIndex] = "wall"; } } } /** * 地図へ埋め込み * */ var areas = mapAreaDoc.getElementsByTagName('area'); // mapSizeからzIndexの値とmarginSizeを決定する var marginSize = "32px 0px 0px 23px"; var zIndex = mapSize + 2; if (200 < zIndex && zIndex < 400) { marginSize = "25px 0px 0px 17px"; } else if (400 <= zIndex) { marginSize = "16px 0px 0px 12px"; } cssText = ".mapStar_margin{ margin:"+marginSize+"; z-index:"+zIndex+"; }"; GM_addStyle(cssText); var regCmp = new RegExp( /(\'[^\']*\'[^\']*){5}\'(\u2605+)\'.*overOperation\(\'.*\'.*\'(.*)\'.*\'(.*)\'/); var j = 0; var alpha = 6; for ( var i = 1; i < mapMap.length; i++) { if (mapMap[i] != "undefined" && mapMap[i] == "wall") { continue; } if (areas[j] == "undefined") { break; } var mo = areas[j++].getAttribute('onmouseover'); if (mo.search(/\u2605/) < 0) { continue; } if (regCmp.test(mo)) { var dataKey = (typeof mapMap[i] == "undefined") ? "w" : mapMap[i]; var div = document.createElement('div'); if (!dataTable[dataKey][2]) { div.style.visibility = "hidden"; } div.className = "mapStar_margin mapStar_box mapStar_" + dataKey; div.setAttribute("id","mapStar_"+i); div.style.left = RegExp.$3; div.style.top = RegExp.$4; div.innerHTML = RegExp.$2.length; if (RegExp.$2.length >= 5) { div.style.border = "1px solid"; } if (RegExp.$2.length >= 3) { div.style.fontWeight = "bold"; } mapAreaDoc.appendChild(div); } } //},false); })(); //Google Chrome用GM_*系ラッパー関数 function initGMWrapper() { // @copyright 2009, James Campos // @license cc-by-3.0; http://creativecommons.org/licenses/by/3.0/ if ((typeof GM_getValue == 'undefined') || (GM_getValue('a', 'b') == undefined)) { GM_addStyle = function(css) { var style = document.createElement('style'); style.textContent = css; document.getElementsByTagName('head')[0].appendChild(style); } GM_deleteValue = function(name) { localStorage.removeItem(LOCAL_STORAGE + "." + name); } GM_getValue = function(name, defaultValue) { var value = localStorage.getItem(LOCAL_STORAGE + "." + name); if (!value) return defaultValue; var type = value[0]; value = value.substring(1); switch (type) { case 'b': return value == 'true'; case 'n': return Number(value); default: return value; } } GM_log = function(message) { console.log(message); } GM_registerMenuCommand = function(name, funk) { //todo } GM_setValue = function(name, value) { value = (typeof value)[0] + value; localStorage.setItem(LOCAL_STORAGE + "." + name, value); } //by froo GM_listValues = function() { var res = new Array(); for (var i = 0; i < localStorage.length; i++) { var key = localStorage.key(i); if (key.indexOf(LOCAL_STORAGE + ".", 0) == 0) { res.push(key.replace(/^.*?\./, "")); } } return res; } } }
0 件のコメント:
コメントを投稿