「javascript/truename」の編集履歴(バックアップ)一覧に戻る

javascript/truename - (2021/07/23 (金) 03:30:25) のソース

#js(){{{{{
<script type="text/javascript">
/* -----------------------------------------------------
 #divid(truename) : [□真名隠しを解除する] チェックボックスを表示する
 &spanclass(truename){新宿のアーチャー}    平文をspanで包む →ジェームズ・モリアーティと表示される
 &spanclass(truenameRuby) ルビを表示 →ジェームズ・モリアーティ
 &spanclass(truenameShort) 短縮名を表示 →モリアーティ
 [[新宿のアーチャー]] リンクはspanいらず →ジェームズ・モリアーティ
 &spanclass(truenameShort){[[新宿のアーチャー]]} 表示テキスト&popupが変わる。aタグよりspanを優先して処理してるので →モリアーティ
 &spanclass(truename){[[フランのパパ>新宿のアーチャー]]} 表示名はフランのパパなので変わらない
--------------------------------------------------------*/
var TrueName = {
	Key : 'truename',
	List: [
		{'id':202100,'no':184,'alias':'アーチャー・インフェルノ','aliasShort':'アーチャー・インフェルノ','aliasRuby':'アーチャー・インフェルノ','name':'巴御前','nameShort':'巴御前','nameRuby':'トモエゴゼン'},
		{'id':202300,'no':156,'alias':'新宿のアーチャー','aliasShort':'新宿のアーチャー','aliasRuby':'シンジュクノアーチャー','name':'ジェームズ・モリアーティ','nameShort':'モリアーティ','nameRuby':'ジェームズ・モリアーティ'},
		{'id':402500,'no':172,'alias':'レジスタンスのライダー','aliasShort':'レジスタンスのライダー','aliasRuby':'レジスタンスノライダー','name':'クリストファー・コロンブス','nameShort':'コロンブス','nameRuby':'クリストファー・コロンブス'},
		{'id':503000,'no':169,'alias':'不夜城のキャスター','aliasShort':'不夜城のキャスター','aliasRuby':'フヤジョウノキャスター','name':'シェヘラザード','nameShort':'シェヘラザード','nameRuby':'シェヘラザード'},
		{'id':503300,'no':192,'alias':'オケアノスのキャスター','aliasShort':'オケアノスのキャスター','aliasRuby':'オケアノスノキャスター','name':'キルケー','nameShort':'キルケー','nameRuby':'キルケー'},
		{'id':503400,'no':194,'alias':'ミドラーシュのキャスター','aliasShort':'ミドラーシュのキャスター','aliasRuby':'ミドラーシュノキャスター','name':'シバの女王','nameShort':'シバの女王','nameRuby':'シバノジョウオウ'},
		{'id':602600,'no':159,'alias':'新宿のアサシン','aliasShort':'新宿のアサシン','aliasRuby':'シンジュクノアサシン','name':'燕青','nameShort':'燕青','nameRuby':'エンセイ'},
		{'id':602700,'no':170,'alias':'不夜城のアサシン','aliasShort':'不夜城のアサシン','aliasRuby':'フヤジョウノアサシン','name':'武則天','nameShort':'武則天','nameRuby':'ブソクテン'},
		{'id':602900,'no':185,'alias':'アサシン・パライソ','aliasShort':'アサシン・パライソ','aliasRuby':'アサシン・パライソ','name':'望月千代女','nameShort':'望月千代女','nameRuby':'モチヅキチヨメ'},
		{'id':702700,'no':171,'alias':'エルドラドのバーサーカー','aliasShort':'エルドラドのバーサーカー','aliasRuby':'エルドラドノバーサーカー','name':'ペンテシレイア','nameShort':'ペンテシレイア','nameRuby':'ペンテシレイア'},
		{'id':1100500,'no':158,'alias':'新宿のアヴェンジャー','aliasShort':'新宿のアヴェンジャー','aliasRuby':'シンジュクノアヴェンジャー','name':'ヘシアン・ロボ','nameShort':'ヘシアン・ロボ','nameRuby':'ヘシアン・ロボ'},
		{'id':105000,'no':310,'alias':'妖精騎士ガウェイン','aliasShort':'妖精騎士ガウェイン','aliasRuby':'ヨウセイキシガウェイン','name':'バーゲスト','nameShort':'バーゲスト','nameRuby':'バーゲスト'},
		{'id':204300,'no':311,'alias':'妖精騎士トリスタン','aliasShort':'妖精騎士トリスタン','aliasRuby':'ヨウセイキシトリスタン','name':'バーヴァン・シー','nameShort':'バーヴァン・シー','nameRuby':'バーヴァン・シー'},
		{'id':304800,'no':312,'alias':'妖精騎士ランスロット','aliasShort':'妖精騎士ランスロット','aliasRuby':'ヨウセイキシランスロット','name':'メリュジーヌ','nameShort':'メリュジーヌ','nameRuby':'メリュジーヌ'},
	],
	IsAllowed: function() { 
		return (localStorage[this.Key] || '') == 'true';
	},
	SetAllow : function(perm) {
		localStorage[this.Key] = perm == true;
	},
	ReplaceAll : function() {
		var self = this;
		if (self.IsAllowed()) {
			// 真名表示
			$('span[class^="truename"]').add('a').each(function() {
				var text = $(this).text().trim(); 
				if (!text)
					return true;
				var opt  = ($(this).attr('class') || ''), opt = opt.match(/^truename(Ruby|Short)?$/), opt = RegExp.$1 || '';
				for (var i = 0; i < self.List.length; i++) {
					var item = self.List[i];
					var keyword = '';
					if (text.indexOf(item.alias) != -1) keyword = item.alias;
					else if (text.indexOf(item.aliasShort) != -1) keyword = item.aliasShort;
					else if (text.indexOf(item.aliasRuby) != -1) keyword = item.aliasRuby;
					if (keyword.length > 0) {
						var text2 = (opt == 'Ruby') ? item.nameRuby : (opt == 'Short') ? item.nameShort : item.name;
						var reg = new RegExp(keyword, "g");
						text2 = $(this).html().replace(reg, text2);
						if (text2.length > 0)
							$(this).html(text2);
						break;
					}
				}
			});
			// 宝具隠しを外す
			$('.truenameNoble > *, .truenameNoble > table > tbody > tr:first-child > td:nth-last-of-type(n+1)').hide();
			$('.truenameNoble > table, .truenameNoble > table > tbody > tr:first-child > td:nth-last-of-type(1)').show();
		}
	}
};

document.addEventListener('DOMContentLoaded', function() {
	// 今後JSプラグインでstyleが使えなくなるのに備えてインラインCSSでスタイル定義する。
	var css = '<style type="text/css">'+
	'div#truename { padding:10px; }'+
	'div#truename label { cursor:pointer; font-weight:bold; font-size:15px; display:inline-block; margin-bottom:5px; }'+
	'input#truenamecheck { cursor:pointer; margin-right:10px; }'+
	'</style>';
	$(css).appendTo('head');
	// チェックボックスを作成する(左メニューに置くことを想定)
	$('div#truename').each(function() {
		var elem = $('<label>').attr('for', 'truenamecheck');
		$('<input>').attr({'type': 'checkbox', 'id':   'truenamecheck'})
			.prop('checked', TrueName.IsAllowed())
			.change(function(){
				TrueName.SetAllow($(this).prop('checked'));
			})
			.appendTo(elem);
		elem.append('真名隠しを解除する');
		$(this).empty().append(elem);
	});
	TrueName.ReplaceAll();
});
</script>
}}}}}