サンプル集
国民の祝日APIの使用例をまとめました。
JavaScript(Ajax)
JavaScript(Ajax)での実装例(年間カレンダー)
Source Code
HTML
<div id="ajax-sample"></div>
JavaScript
var ajaxBaseUrlOfNationalHolidays = location.protocol + "//api.national-holidays.jp/";
var dayOfWeeks = [
{ name: "sunday", en: "Sun", ja: "日", },
{ name: "monday", en: "Mon", ja: "月", },
{ name: "tuesday", en: "Tue", ja: "火", },
{ name: "wednesday", en: "Wed", ja: "水", },
{ name: "thursday", en: "Thu", ja: "木", },
{ name: "friday", en: "Fri", ja: "金", },
{ name: "saturday", en: "Sat", ja: "土", },
];
/**
* 年間カレンダーを生成する.
*
* @param target カレンダーを追加するタグオブジェクト
* @param year 年
*/
function AnnualCalendar(target, year) {
if (!year) {
// 今年
year = moment().year();
}
var header = $("<div>");
header.text(year + "年");
header.addClass("col-12");
header.addClass("text-center");
header.addClass("h4");
$(target).append(header);
for (month = 1; month <= 12; month ++) {
var monthlyCalendar = $("<div>");
monthlyCalendar.addClass("col-12");
monthlyCalendar.addClass("col-sm-6");
monthlyCalendar.addClass("col-md-4");
monthlyCalendar.addClass("col-lg-3");
monthlyCalendar.addClass("col-xl-2");
$(monthlyCalendar).append(new MonthlyCalendar(monthlyCalendar, year, month, false, false, true));
// targetで指定された要素にテーブルを追加する
$(target).append(monthlyCalendar);
}
$(target).addClass("row");
}
/**
* 月間カレンダーテーブルを生成する.
*
* @param target 月間カレンダーを追加するタグオブジェクト
* @param year 年
* @param month 月(1~12)
* @param enableNavigation 前月/次月ナビゲーションを表示する場合はtrue
* @param showDaysOfOtherMonth 当月に含まれない日付を表示する場合はtrue
* @param showBlankWeek 第6週が存在しない場合でも表示する場合はtrue
*/
function MonthlyCalendar(target, year, month, enableNavigation, showDaysOfOtherMonth, showBlankWeek) {
// 本日の日付を取得する
var today = moment().startOf("day");
// 月初日を取得する
var epoch;
if (year && month) {
epoch = moment([year, month - 1, 1, 0, 0, 0, 0]);
} else {
epoch = moment(today).startOf("month");
}
year = epoch.format("YYYY");
month = epoch.format("MM");
// テーブルヘッダ:月名
var thead = $("<thead>").addClass("calendar-header");
var tr = $("<tr>").addClass("calendar-header-row");
if (enableNavigation) {
// 前月/次月ナビゲーションを表示する場合:
// 前月へ
tr.append($("<td>").text("<<").attr("id", "lastMonth").addClass("text-left"));
// YYYY年 M月
tr.append($("<th>").text(epoch.format("Y") + "年 " + epoch.format("MMM")).attr("colspan", 5));
// 次月へ
tr.append($("<td>").text(">>").attr("id", "nextMonth").addClass("text-right"));
} else{
// 前月/次月ナビゲーションを表示しない場合:
// M月
tr.append($("<th>").text(epoch.format("MMMM")).attr("colspan", 7));
}
thead.append(tr);
// テーブルボディ:
var tbody = $("<tbody>").addClass("calendar-body");
// 1行目:曜日名
var tr = $("<tr>");
dayOfWeeks.forEach(function(dayOfWeek) {
tr.append($("<th>").text(dayOfWeek.ja).addClass("calendar-header-cell").addClass(dayOfWeek.name));
});
tbody.append(tr);
// 2~7行目:日付
// 月初日(1日)の曜日番号を取得する
var epochDayOfWeek = epoch.weekday();
// 1週目の先頭=日曜日の日付を取得する
var date = moment(epoch).subtract(epochDayOfWeek, "days");
for (var i = 0; i < 6; i ++) {
var tr = $("<tr>").addClass("calendar-body-row");
dayOfWeeks.forEach(function(dayOfWeek) {
var td = $("<td>");
td.text(date.date());
td.addClass("calendar-body-cell");
if (epoch.month() == date.month()) {
// 当月である場合:
td.addClass(dayOfWeek.name);
if (date.isSame(today)) {
// 本日である場合:
td.addClass("today");
}
td.attr("id", date.format("YYYY-MM-DD"));
} else {
// 当月でない場合:
if (showDaysOfOtherMonth) {
// 当月に含まれない日付を表示する場合:
td.addClass(dayOfWeek.name);
// 当月でない範囲は無効化する
td.addClass("disabled");
} else {
// 当月に含まれない日付を表示しない場合:
// 当月でない範囲は空欄にする
td.html(" ");
}
}
tr.append(td);
// 1日進める
date = date.add(1, "days");
});
if (showBlankWeek || i < 5 || date.date() <= 7) {
// 第6週が存在しない場合でも表示する場合か、第5週目までに含まれる場合か、第6週目に当月の日付が含まれる場合:
tbody.append(tr);
}
}
// テーブルを生成する
var table = $("<table>");
table.addClass("calendar");
table.addClass("month");
table.addClass("text-center");
table.append(thead);
table.append(tbody);
// targetで指定された要素にテーブルを追加する
$(target).append(table);
// 該当する月の国民の祝日リストをAjaxで取得する
$.ajax({
url : ajaxBaseUrlOfNationalHolidays + year + "/" + month,
type : "GET",
dataType : "json",
statusCode : {
404: function (result) {
// 国民の祝日が存在しない月もある
},
},
}).then(
function (holidays) {
if (holidays.length > 0) {
holidays.forEach(function(holiday) {
$("#" + holiday.date).addClass("holiday");
$("#" + holiday.date).attr("data-toggle", "tooltip");
$("#" + holiday.date).attr("title", holiday.name);
$("#" + holiday.date).tooltip();
});
}
}
);
}
$(function () {
var calendar = new AnnualCalendar("#ajax-sample");
});
Tabulator
Tabulatorとは
インタラクティブなテーブルを作成する際に便利な Javascript ライブラリで、多機能のテーブルを簡単に作成することができます。
HTMLテーブルを Tabulator に変換して表示する方法と、JSONデータを読み込んで表示する方法があります。
ここでは、Ajaxを用いて国民の祝日APIから全国民の祝日データ
(http://api.national-holidays.jp/all
)を取得し、
フィルタリング(絞り込み)、ソート、ページネーションなどを試しています。
Source Code
HTML
<div id="tabulator-sample"></div>
JavaScript
var table = new Tabulator("#tabulator-sample", {
layout: "fitColumns",
placeholder: "No Data Set.",
pagination: "local",
ajaxURL: location.protocol + "//api.national-holidays.jp/all",
paginationSize: 20,
paginationSizeSelector: [5, 10, 20, 50, 100],
columnHeaderSortMulti: true,
initialSort: [
{ column: "date", dir: "asc" },
],
columns: [
{ title: "日付", field: "date", headerSort: true, headerFilter: "input", },
{ title: "名称", field: "name", headerSort: true, headerFilter: "input", },
{ title: "種別", field: "type", headerSort: true, headerFilter: "input", },
],
});
Java(SpringBoot)
Java(SpringBoot)での実装例
Source Code
Java