// JavaScript Document
// 年表グラフスクリプト [ver2017/12/17]
//初期設定
function setInit() {
//予約フィールド名(変更可能)
field_bun = "区分"; //分類項目
field_link = "名前"; //wikipediaとのリンク項目(不要な場合は空欄に)
field_st = "生年"; //グラフの始め
field_ed = "没年"; //グラフの終わり
field_link2 = "差替"; //リンク差し替え
field_st2 = "始年"; //期間の始め
field_ed2 = "終年"; //期間の終わり
//色設定(変更可能)
hcolor1 = "#ffff99"; //ヘッダー背景色
hcolor2 = "#3333cc"; //ヘッダー文字色(年表あり)
hcolor3 = "#999999"; //ヘッダー文字色(年表なし)
tcolor1 = "#ff99cc"; //グラフ文字色
tcolor2 = "#555555"; //生没年文字色
gcolor1 = "#ffccff"; //グラフ背景色(生没期間)
gcolor2 = "#cc66cc"; //グラフ背景色(任意期間)
gcolor3 = "#ffcc33"; //グラフ背景色(選択時)
gcolor4 = "#ffddff"; //リンク背景色(マウス反応時)
nocolor = "#ffffff"; //無色
//初期値(変更可能)
age_st = 0; //年齢表記の初値(1なら数え年)
ed_unknown = 0; //没年不明の表示
view_age = 0; //年表グラフ表示
line_number = 0; //行番号表示
line_row = 0; //列と行の同時反転
//初期値(変更可能)
fld_sort = true; //ヘッダーのフィールド名に並替リンクを表示
fld_unit = true; //ヘッダーのフィールド名に単位を表示
fld_nowrap = true; //フィールド内の折返禁止
b_move = true; //表位置の移動メニューを表示
auto_history = true; //棒グラフモードの場合、自動的に年表データを作成
b_comma = true; //数値にカンマを付ける(数値は自動判定)
p_point = 2; //百分率計算時の小数点以下桁数(マルチグラフモード)
age_ed = false; //没年齢の表示
txt_age_ed = "才没"; //没年齢表示後テキスト
txt_ylist = "歴年表"; //歴年表用リンク
txt_nlist = "一覧表"; //一覧表用リンク
dataMark = "▶ "; //年表データの区切記号
link_wiki = "http://ja.wikipedia.org/wiki/"; //wikipedia等へのリンク
link_target = "wikipedia";
link_back = "http://www.shurey.com/"; //リンク元ページが不明の場合の戻り先
//個別設定の変数(変更しないこと)
dtitle = ""; //このページのタイトル
dcomment = ""; //説明書き
db_code = ""; //区分名
db_file = ""; //データベースファイル
hs_file = ""; //年表ファイル(オプション)
year_st = 1; //年表の最小値
year_ed = 100; //年表の最大値
//規定値(変更しないこと)
bun = -1; //区分のフィールド番号
fst = -1; //生年のフィールド番号
fed = -1; //没年のフィールド番号
gst = -1; //始年のフィールド番号
ged = -1; //終年のフィールド番号
nam = -1; //名前のフィールド番号(field_link)
nam2 = -1; //差替のフィールド番号(field_link2)
sort_current = -1; //表示中の並替フィールドの番号
list_d = new Array(); //データベース
list_h = new Array(); //年表データ(入力順)
list_y = new Array(); //年表データ(年代順)
list_n = new Array(); //名前データのリンク
b_graph = false; //存命期間グラフ表示
b_graph2 = false; //任意期間グラフ表示
b_bar = false; //棒グラフ表示
b_bar2 = false; //棒グラフモード一覧あり
b_multi = false; //マルチグラフモード
b_his = false; //情報ウィンドウの表示固定
blank = "."; //空白の代替
liveNow = "-"; //存命中(任期中)のフラグ
repeat_zero = repeat("0",p_point); //事前に小数点以下の桁数分取得
}
//メイン処理
function startMain() {
//変数変換処理
ed_unknown = (ed_unknown == 0); //没年不明の表示
view_age = (view_age == 1); //年表グラフ表示
line_number = (line_number == 1); //行番号表示
year_ed++; //終了年修正
//タイトル表示
if (dtitle == "") dtitle = "グラフ年表";
document.title = dtitle;
document.getElementById("title").innerHTML = dtitle;
//説明書き
document.getElementById("comment").innerHTML = dcomment;
//区分名
code = db_code.split(",");
//IE
br_IE = (document.all);
//タッチパッド
np = navigator.platform;
if ((np == "iPhone") || (np == "iPad")) np = "PAD";
//CSS
var s = ""
document.write(s); //IE & Firefox
resetHistory(); //情報ウィンドウCSS初期設定
//検索部の取得
var get_text = document.location.search;
get_text = get_text.substring(1,get_text.length);
//テストモード
testmode = false;
if (get_text == "test") {
testmode = true; //テストモード表示
} else if (get_text != "") {
//db_file = get_text; //読込ファイル差替
}
//ファイルの読込
loadTextFile(db_file);
}
//起動時の表の出力
function output_list() {
var s;
//準備開始
s = "Loading complete...";
document.getElementById("list_table").innerHTML = s;
//フィールド名取得
setFields();
s = s + ".";
document.getElementById("list_table").innerHTML = s;
//並替フォーム出力
setSelecter();
s = s + ".";
document.getElementById("list_table").innerHTML = s;
//年表の設定
setHistory();
s = s + ".";
document.getElementById("list_table").innerHTML = s;
//データの検査
testData();
s = s + ".";
document.getElementById("list_table").innerHTML = s;
//表幅設定
setWidth(0,0);
s = s + ".";
document.getElementById("list_table").innerHTML = s;
//データ並替
setSort();
s = s + ".";
document.getElementById("list_table").innerHTML = s;
//年表表示
setList();
}
//表幅の変更
function changeWidth(mode,num) {
setWidth(mode,num);
setList();
}
//並替の変更
function changeSort(num) {
//並替順入替
if (sort_current == num) {
if (sort_rule[num] == "+") sort_rule[num] = "-";
else sort_rule[num] = "+";
}
sort_current = num;
setSort();
setList();
}
//フィールド名取得
function setFields() {
var n,m,i,s,rule,fld,f_num;
//接頭文字
rule = new Array("!","+","-","*");
//code = new Array(); //区分名
//フィールド数
f_num = list_d[0].length;
//各フィールドの補助設定
dataMax = new Array(f_num); //最大値取得
sort_rule = new Array(f_num); //並替順位
dataUnit = new Array(f_num); //単位
//フィールド名取得
for (fld=0;fld 0) && (n < m)) {
dataUnit[fld] = s.substring(n+1,m);
s = s.substring(0,n) + s.substring(m+1,s.length);
}
//フィールド名
list_d[0][fld] = s;
//区分のフィールド番号
if (s == field_bun) bun = fld;
//生年のフィールド番号
if (s == field_st) fst = fld;
//没年のフィールド番号
if (s == field_ed) fed = fld;
//始年のフィールド番号
if (s == field_st2) gst = fld;
//終年のフィールド番号
if (s == field_ed2) ged = fld;
//field_linkのフィールド番号
if (s == field_link) nam = fld;
//field_link2のフィールド番号
if (s == field_link2) nam2 = fld;
}
}
//並替フォーム出力
function setSelecter() {
var t,fld,f_num;
t = ""; //出力フォーム
//フィールド数
f_num = list_d[0].length;
//フィールド名取得
for (fld=0;fld";
}
}
//存命期間の可否
b_graph = ((fst > -1) && (fed > -1)); //生年・没年がある場合
//任意期間の可否
b_graph2 = ((gst > -1) && (ged > -1)); //始年・終年がある場合
//棒グラフモード
b_bar = ((b_graph) && (fst == fed));
//フォーム出力
if (t != "") {
document.getElementById("selecter").innerHTML = "並替:[" + t + "]";
sort_current = 0; //初期値
}
}
//年表データの準備
function setHistory() {
var n,m,data,s;
//棒グラフ用一覧データの作成
if ((auto_history) && (b_bar) && (hs_file == "")) setHistoryData();
//日付
data = new Array();
//年代別に入れ直す
list_y = new Array();
//一覧データがある場合
if (hs_file != "") {
for (n=0;n -1) data[0] = data[0].replace(/\?/g,""); //?を除去
m = data[0].indexOf(".");
if (m < 0) m = data[0].indexOf("/");
if (m > 0) {
list_h[n][0] = eval(data[0].substring(0,m));
list_h[n][1] = data[0].substring(m+1,data[0].length) + " " + data[1];
} else {
list_h[n][0] = eval(data[0]);
}
data[0] = list_h[n][0];
data[1] = list_h[n][1];
}
if (list_y[data[0]] == undefined) {
list_y[data[0]] = dataMark + data[1];
} else {
list_y[data[0]] = list_y[data[0]] + "
" + dataMark + data[1];
}
}
//一覧ウィンドウ用リンク
if (list_h.length > 0) {
s = txt_ylist;
if (b_bar) s = txt_nlist; //棒グラフ
document.getElementById("link_his").innerHTML = "【】";
}
}
}
//棒グラフ用一覧データの作成
function setHistoryData() {
var line;
if ((fst > -1) && (nam > -1)) {
//データベースデータの転用
for (line=1;line b);
} else {
b_sort = (a < b);
}
//入れ換え
if (b_sort) {
//レコードを入れ換える
t = list_h[m];
list_h[m] = list_h[m+1];
list_h[m+1] = t;
}
}
}
}
//情報ウィンドウ初期設定
function resetHistory() {
document.getElementById("history_view").style.position = "fixed";
document.getElementById("history_view").style.top = "10px";
document.getElementById("history_view").style.bottom = "auto";
document.getElementById("history_view").style.right = "10px";
document.getElementById("history_view").style.left = "auto";
document.getElementById("history_view").style.visibility = "hidden";
document.getElementById("history_view").style.borderStyle = "ridge";
document.getElementById("history_view").style.padding = "5px";
document.getElementById("history_view").style.backgroundColor = "#ffffcc";
document.getElementById("history_view").style.overflow = "auto";
document.getElementById("history_view").innerHTML = "";
b_his = false;
}
//データの検査
function testData() {
var s,line,fld,f_num;
//フィールド検査
for (line=1;line -1) {
s = list_d[line][nam2];
if (s == "!") {
list_n[line] = true; //名前のリンクなし
}
}
}
//存命中
if (b_graph) {
for (line=1;line num) year_st = num;
if (b_bar && (num < 0)) year_st = 0; //棒グラフ時
if ((year_ed - year_st) < 10) year_st = year_ed - 10; //10年未満の表は禁止
} else if (mode == 2) {
if (year_st < num) year_ed = num;
} else if (mode > 2) {
//mode == 3 or 4
n = year_ed - year_st;
if (b_bar && (num < 0)) num = 0; //棒グラフ時
year_st = num;
year_ed = num + n;
}
if ((year_ed - year_st) < 10) year_ed = year_st + 10; //10年未満の表は禁止(mode=0 or 2)
t = " 表幅:";
t += "前";
t += "[" + getWidthAnchor(1,year_st,-10) + "<<10]";
t += "[" + getWidthAnchor(1,year_st,10) + ">>10]";
t += "後";
t += "[" + getWidthAnchor(2,year_ed,-10) + "10<<]";
t += "[" + getWidthAnchor(2,year_ed,10) + "10>>]";
if (b_move) {
t += " 位置:";
t += "[" + getWidthAnchor(3,year_st,-1) + "<1<]";
t += "[" + getWidthAnchor(3,year_st,1) + ">1>]";
t += "[" + getWidthAnchor(4,year_st,-10) + "<10<]";
t += "[" + getWidthAnchor(4,year_st,10) + ">10>]";
if (year_ed -year_st > 99) {
t += "[" + getWidthAnchor(5,year_st,-100) + "<100<]";
t += "[" + getWidthAnchor(5,year_st,100) + ">100>]";
}
}
t += "";
//幅調整メニューの表示切り換え
document.getElementById("year_level").innerHTML = t;
//年表幅表示
document.getElementById("title").innerHTML = dtitle + " " + getWidthYear();
}
}
//年表幅表示
function getWidthYear() {
var st,ed;
st = year_st;
if (st == 0) st = 1;
ed = year_ed - 1;
if (ed == 0) ed = -1;
return "【" + mYear(st) + head_unit + "~" + mYear(ed) + head_unit + "】";
}
//表幅のリンク設定
function getWidthAnchor(num,n,m) {
var s,n2;
if (num < 3) {
n2 = n - (num - 1);
s = "