利用者:Sakoppi/LTag.js

提供:Wikisource

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
$(function(){
	//ボタンの設置
	if( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
		$(".editButtons").append("<input id='ltag_btn' title='著作権チェック及び適切な著作権タグの選択' type='button' value='著作権タグ出力'/>");
	}
	
	//modalのチェック
	$(document).on("change", "#ltag-type", function(){
		
		$("#ltag-ryukyu").prop("checked", false);
		
		if($(this).val() == "gov"){
			//表示する項目
			$("#ltag-year-area, #ltag-ryukyu-area").show();
			
			//表示しない項目
			$("#ltag-death-area").hide();
		}else if($(this).val() == "org"){
			//表示する項目
			$("#ltag-year-area").show();
			
			//表示しない項目
			$("#ltag-death-area, #ltag-ryukyu-area").hide();
			
		}else if($(this).val() == "people"){
			//表示する項目
			$("#ltag-year-area, #ltag-death-area").show();
			
			//表示しない項目
			$("#ltag-ryukyu-area").hide();
		}else{
			$("#ltag-year-area").show();
			$("#ltag-death-area, #ltag-ryukyu-area").hide();
		}
	});
	
	
	//modal本体
	$(document).on("click", ".editButtons #ltag_btn", function(){
		$("<div />").attr({"id":"ltag-dialog", "title":"著作権タグ出力(日本の著作物限定)"})
			.append($("<form />")
				.append($("<table />")
					.attr({"class":"wikitable"})
					.append($("<tr />")
						.attr({"id":"ltag-type-area", "style":"padding-top:1em; padding-left:0.5em;"})
						.append($("<th />")
							.append($("<label />")
								.attr("for", "ltag-type").text("種類")
							)
						)
					
						.append($("<td />")
							.append($("<select id='ltag-type' />")
								.append("<option value='nothing'>選択してください</option>")
								.append("<option value='gov'>法令等(著作権法第13条該当)</option>")
								.append("<option value='org'>団体著作物</option>")
								.append("<option value='people'>個人著作物</option>")
							)
						)
					)
					.append($("<tr />")
						.attr({"id":"ltag-year-area", "style":"padding-top:1em; padding-left:0.5em;"})
						.append($("<th />")
							.append($("<label />")
								.attr("for", "ltag-year").text("公表年")
							)
						)
						.append($("<td />")
							.append($("<input type='number' />")
								.attr({"id": "ltag-year"})
							)
						)
					)
					.append($("<tr />")
						.attr({"id":"ltag-death-area", "style":"padding-top:1em; padding-left:0.5em; display:none;"})
						.append($("<th />")
							.append($("<label />")
								.attr("for", "ltag-death").text("没年(個人)")
							)
						)
						.append($("<td />")
							.append($("<input type='number' />")
								.attr({"id": "ltag-death"})
							)
						)
					)
					
					.append($("<tr />")
						.attr({"id":"ltag-ryukyu-area", "style":"padding-top:1em; padding-left:0.5em; display:none;"})
						.append($("<th />")
							.append($("<label />")
								.attr("for", "ltag-ryukyu").text("アメリカ合衆国統治下の沖縄")
							)
						)
						.append($("<td />")
							.append($("<input type='checkbox' />")
								.attr({"id":"ltag-ryukyu"})
							)
						)
					)
				)
				.append($("<div />")
					.text("タグ出力後プレビューを行い、表示される著作権の状態を確認してください")
				)
			)
		.dialog({
			"minHeight":200,
			"width":400,
			"modal":true,
			"buttons":[{
				"text":"生成",
				"click":function(){
					var $dialog = $(this);
					var templateText = "{{subst:LTag" + 
											"|country=JP" + 
											"|type=" + $("#ltag-type").val() + 
											"|year=" + $("#ltag-year").val() +
											($("#ltag-type").val() != "gov" ? "|death=" + $("#ltag-death").val() : "") + 
											($("#ltag-type").val() == "gov" ? "|ryukyu=" + ($("#ltag-ryukyu").prop("checked") ? "yes" : "") : "") + 
										"}}";
					insertAtCaret("#editform textarea", templateText);
					$dialog.dialog("close");
					$(this).off();
				}
			}]
		});
	});
});

function insertAtCaret(target, str) {
	var obj = $(target);
	obj.focus();
	if(navigator.userAgent.match(/MSIE/)) {
		var r = document.selection.createRange();
		r.text = str;
		r.select();
	} else {
		var s = obj.val();
		var p = obj.get(0).selectionStart;
		var np = p + str.length;
		obj.val(s.substr(0, p) + str + s.substr(p));
		obj.get(0).setSelectionRange(np, np);
	}
}