(function() {
var $DOM_CONTAINER = $('.js-panel-container'); // パネルを表示するコンテナ要素
var $ZONE_NAV = $('.js-nav-fixed.diff-style-a .js-ctrl-wrap'); // ゾーンナビ要素
var SEARCH_DATA_URL = '/jp/imagesgig5/fjm_forum_data_tcm102-4808523_tcm102-2750236-32.txt'; // アイテムcsvのURL
var SEARCH_URL = '/jp/imagesgig5/search_tcm102-4808156_tcm102-2750236-32.txt'; // 検索メニューcsvのURL
var THEME_INDEX = 19; // csv中テーマインデックス
var ZONE_INDEX = 20; // csv中ゾーンインデックス
var ZONE_BTN_CLS = 'js-zoneBtnTemp'; // ゾーンナビ仮ボタン用仮クラス名(任意、最終的に削除)
var itemDataList; // アイテムcsv変換配列
var menuDataList; // メニューcsv変換配列
var resultItems; // ページ用アイテム検索結果配列
/**
* 初期化コンストラクタ
*/
function init() {
initNav();
load();
}
/**
* 別ファイルスクリプトでのオートスクルロールイベントリスナー登録用に事前に仮ボタン要素を作成(load後ではリスナー登録されない)
*/
function initNav() {
$ZONE_NAV.parent().css('visibility', 'hidden'); // DOM作成完了までは見栄えの為非表示
for (var i = 1; i < 100; ++i) {
$ZONE_NAV.append('
');
}
}
/**
* 検索用CSV読み込み
*/
function load() {
loadData(SEARCH_DATA_URL, function(data) { itemDataList = csvToArray(data) });
loadData(SEARCH_URL, function(data) { menuDataList = csvToArray(data) });
}
/**
* ファイルの読み込み
* @param url {String} - ファイルURL
* @param func {Func} - ロード完了後メソッド
*/
function loadData(url, func) {
$.ajax({
url: url,
}).success(function(data) {
func(data);
if (itemDataList && menuDataList) onLoaded(); // 全てのロード完了
}).error(function(XMLHttpRequest, textStatus, errorThrown) {
console.log("XMLHttpRequest : " + XMLHttpRequest.status);
console.log("textStatus : " + textStatus);
console.log("errorThrown : " + errorThrown.message);
});
}
/**
* CSVを2次元配列に変換
*/
function csvToArray(data) {
var arr = [];
var lines = data.split(String.fromCharCode(10));
for (var i = 0; i < lines.length; ++i) {
var cells = lines[i].trim().split(",");
arr.push(cells);
}
return arr;
}
/**
* ロード完了後処理
*/
function onLoaded() {
initItems();
makeView();
}
/**
* 読み込んだCSV配列から現在のページ用のリストを検索抽出
*/
function initItems() {
// パスネームからテーマ名抽出
var themeName = menuDataList.filter(function(item, index) {
if (item[2] == location.pathname) return true;
})[0][0];
// テーマ名からアイテム検索
resultItems = itemDataList.filter(function(item, index) {
if (item[THEME_INDEX] == themeName) return true;
});
// ゾーン名でソート
resultItems.sort(function(a, b) {
return (a[ZONE_INDEX] - b[ZONE_INDEX]);
});
}
/**
* パネルカセットとナビをDOMに表示
*/
function makeView() {
var $temp = $DOM_CONTAINER.find('.panel'); // パネルカセットテンプレート
var zone = '';
var zoneCount = 0;
for (var i = 0; i < resultItems.length; i++) {
var item = resultItems[i];
// H2ゾーンタイトル、ゾーンナビ作成
if (zone != item[20]) {
zone = item[20];
$ZONE_NAV.find('>li').eq(zoneCount).find('>a').html(zone).removeClass(ZONE_BTN_CLS);
zoneCount++;
$DOM_CONTAINER.append('' + zone + '
');
}
// 出展社リンク抽出
var linkList1 = '';
for (var i2 = 0; i2 < 2; i2++) {
var cell = 2 + (i2 * 3);
if (item[cell]) linkList1 += '' + item[cell] + '';
}
// リンクリスト抽出
var linkList2 = '';
for (var i2 = 0; i2 < 3; i2++) {
var cell = 8 + (i2 * 3);
if (item[cell]) linkList2 += '' + item[cell] + '';
}
// パネル作成
var $panel = $temp.clone().appendTo($DOM_CONTAINER);
$panel.find('.hdg-d').html(item[0]); // 展示タイトル
$panel.find('.disc').html(item[1]); // 概要
if (linkList1) $panel.find('.text-wrap').prepend(''); // 出展社リンク
if (linkList2) $panel.find('.text-wrap').append(''); // リンクリスト
if (item[18]) $panel.find('.btn-b').attr('href', item[18]); // 資料ダウンロード
if (!item[18]) $panel.find('.btn-wrap').remove();
}
// ナビ表示
$ZONE_NAV.parent().css('visibility', 'visible');
// 不要な要素を削除
if (zoneCount <= 1) $ZONE_NAV.parent().remove();
$('.'+ZONE_BTN_CLS).parent().remove();
$temp.remove();
}
init();
})();