//*******************************
// casesearch
//*******************************
//URL末尾が#の場合、ロケーション再設定
(function(){
var locat = location.href;
if(locat.slice(-1) == "#") {
location.href = locat.slice(0,-1);
}
}());
(function($) { // コンフリクト対策
// OIC不具合対応:実行済みかどうかを判断する。
$(function(){
if($('body.casesearch').length) {
} else {
// URLで読み込むcsvを変更する
var actDomain = 'www.fujitsu.com';
var nowDomain = window.location.host;
if (nowDomain == actDomain) {
// search file path
var searchPath = '//www.fujitsu.com/downloads/GLOBAL/about/resources/publications/technical-review/csv/searchdata.csv';
// casestudy data file path
var casePath = '//www.fujitsu.com/downloads/GLOBAL/about/resources/publications/technical-review/csv/casedata.csv';
} else {
// search file path
var searchPath = '//www.fujitsu.com/downloads/GLOBAL/about/resources/publications/technical-review/csv/stg-searchdata.csv';
// casestudy data file path
var casePath = '//www.fujitsu.com/downloads/GLOBAL/about/resources/publications/technical-review/csv/stg-casedata.csv';
}
// const
var srcBtnItem = '.search-area-submit'; // searchButton
var searchPage = '/global/about/resources/publications/technicalreview/search/?'; // search page url
//global
var $searchItem = $(); //検索エリア
var $outputItem = $(); //検索結果エリア
var $moreItem = $(); //もっと表示ボタン
var numItem = ''; //ターゲットの表示条件
var searchIdArray = []; //ターゲットの絞り込み条件
var targetName = ''; //ターゲットのネーム
var targetClass = ''; //ターゲットのクラス
var checkClickArray = []; //ターゲットのクリック対象
var searchAreaVisible = Boolean;
/*
件数ゼロ文言
----------------------------------------------------------------------*/
var txtZero = '
';
/*
エラー文言
----------------------------------------------------------------------*/
var txtError = '';
/*
もっと表示
----------------------------------------------------------------------*/
var moreView = 'more';
// handler
//html cut
$(function(){
//dummy Elementを削除する
$('.dummy-li').remove();
});
$(loadAjax);
function loadAjax() {
getAllData();
}
// メイン処理(初回)
function getAllData() {
// searchArea text
$.ajax({
url: searchPath
})
.then(
// callback
function (searchdata) {
// dataArea text
$.ajax({
url: casePath
})
.then(
// callback
function (casedata) {
$('.result-area').each(function() {
var classArray = $(this).attr('class').split(' ');
targetName = $.grep(classArray,function(element,index) { return element.match(/search-result-/); })[0];
targetClass = "." + targetName;
$searchItem = $(targetClass).find('.search-checkbox-area');
$outputItem = $(targetClass).find('.lyt-col-feature-a');
$moreItem = $(targetClass).find('.btn-casestudy-more');
numItem = Number($('.result-area' + targetClass).find('[name="num"]').val());
searchSet(searchdata, casedata);
caseSet(searchdata, casedata);
//初期化
targetName = '';
targetClass = '';
$searchItem = $();
$outputItem = $();
$moreItem = $();
numItem = '';
})
},
// errorback
function () {
outputError();
}
);
},
// errorback
function () {
outputError();
}
);
}
// メイン処理(絞り込み)
function getAjaxData($this) {
// searchArea text
$.ajax({
url: searchPath
})
.then(
// callback
function (searchdata) {
// dataArea text
$.ajax({
url: casePath
})
.then(
// callback
function (casedata) {
var classArray = $this.closest('.search-area').attr('class').split(' ');
targetName = $.grep(classArray,function(element,index) { return element.match(/search-result-/); })[0];
targetClass = "." + targetName;
$searchItem = $(targetClass).find('.search-checkbox-area');
$outputItem = $(targetClass).find('.lyt-col-feature-a');
$moreItem = $(targetClass).find('.btn-casestudy-more');
numItem = Number($('.result-area' + targetClass).find('[name="num"]').val());
caseSet(searchdata, casedata)
//初期化
targetName = '';
targetClass = '';
$searchItem = $();
$outputItem = $();
$moreItem = $();
numItem = '';
},
// errorback
function () {
outputError();
}
);
},
// errorback
function () {
outputError();
}
);
}
// メイン処理(もっと見る)
function getAjaxMoreData($this) {
// searchArea text
$.ajax({
url: searchPath
})
.then(
// callback
function (searchdata) {
// dataArea text
$.ajax({
url: casePath
})
.then(
// callback
function (casedata) {
var classArray = $this.closest('.result-area').attr('class').split(' ');
targetName = $.grep(classArray,function(element,index) { return element.match(/search-result-/); })[0];
targetClass = "." + targetName;
$searchItem = $(targetClass).find('.search-checkbox-area');
$outputItem = $(targetClass).find('.lyt-col-feature-a');
$moreItem = $(targetClass).find('.btn-casestudy-more');
numItem = Number($('.result-area' + targetClass).find('[name="num"]').val());
caseMoreSet(searchdata, casedata);
//初期化
targetName = '';
targetClass = '';
$searchItem = $();
$outputItem = $();
$moreItem = $();
numItem = '';
},
// errorback
function () {
outputError();
}
);
},
// errorback
function () {
outputError();
}
);
}
/*
getAjaxData / error時処理
----------------------------------------------------------------------*/
function outputError() {
$('.c-list-article-a').hide().html(txtError);
$('.c-list-article-a').fadeIn(300);
}
/*
getAjaxData / success時処理
----------------------------------------------------------------------*/
//チェックボックスを生成
function searchSet(data, casedata) {
var categoryList = makeArrOfCheckBox(data);
var src = makeSrcOfCheckBox(categoryList, casedata);
$searchItem.append(src);
}
//検索結果を生成
function caseSet(catedata, casedata) {
var cate = makeArrCategory(catedata);
var arr = makeArr(casedata);
var src = makeSrc(arr, cate, 'new');
$outputItem.hide().html(src);
$outputItem.fadeIn(300);
}
//検索結果を生成(追加)
function caseMoreSet(catedata, casedata) {
var cate = makeArrCategory(catedata);
var arr = makeArr(casedata);
var src = makeSrc(arr, cate, 'add');
$(src).appendTo($outputItem).hide().fadeIn(300);
$outputItem.find('.col').removeAttr('style');
}
////////////////////////////////////////////////////////////////////////////////
// 配列生成
////////////////////////////////////////////////////////////////////////////////
var makeArrOfCheckBox = function (data) {
var obj = data.split('\n');
var header = true;
var categoryList = [];
$(obj).each(function () {
//ヘッダー(先頭行)は処理しない
if (header) {
header = false;
return true; //continueと同義
}
var objElm = this.split('\t');
if (objElm.length >= 3) { //列数
//チェックボックス要素を追加
categoryList.push({ID: objElm[1], NAME: objElm[2] });
}
});
return categoryList;
}
var makeArrCategory = function (data) {
var obj = data.split('\n');
var header = true;
var categoryList = [];
$(obj).each(function () {
//ヘッダー(先頭行)は処理しない
if (header) {
header = false;
return true; //continueと同義
}
var objElm = this.split('\t');
if (objElm.length >= 3) { //列数
categoryList.push({
ID: objElm[1],
NAME: objElm[2]
});
}
});
return categoryList;
}
var makeArr = function (data) {
//チェック状態のオブジェクトを生成
//{ ID先頭1文字: チェックされたIDの配列 ,
// ...
//}
var chk = $searchItem.find('input:checkbox');
var objCheckedId = [];
$(chk).each(function () {
if (this.checked == true) {
objCheckedId.push(this.dataset.id);
}
});
var header = true;
var obj = data.split('\n');
var searchList = [];
$(obj).each(function () {
//ヘッダー(先頭行)は処理しない
if (header) {
header = false;
return true; //continueと同義
}
//表示対象を取得
var objElm = this.split('\t');
if (objElm.length >= 5) { //列数
var idList = trimArray(objElm[9].split(',')); //末尾IDの空文字を除去
if (idList.length > 0) {
if (isDisp(idList, objCheckedId)) { //チェックボックスIDとcasedata1行のIDを比較
var cateList = [];
for (var x = 0; x < idList.length; x++) {
cateList.push(idList[x]);
}
searchList.push({
DATE: objElm[0],
TITLE: objElm[1],
IMAGE_PATH: objElm[5],
DETAILPAGE_PATH: objElm[4],
CATEGORYS: cateList
});
}
}
}
});
return searchList;
//表示対象のデータが否かを判定する
//casedata1行のID配列, チェックIDオブジェクト
function isDisp(idList, objCheckedId) {
//初期は全件表示
var result = true;
for (var key in objCheckedId) {
// 一つでもチェックされたら条件指定開始
var result = false;
if (idList.indexOf(objCheckedId[key]) != -1) {
//※条件を満たす小項目が一つでも存在する場合は表示判定
result = true;
}else{
//※条件を満さない小項目が一つでも存在する場合は非表示反映
result = false;
break;
}
}
return result;
}
}
////////////////////////////////////////////////////////////////////////////////
// ソース生成
////////////////////////////////////////////////////////////////////////////////
var makeSrcOfCheckBox = function (categoryList, casedata) {
var src = '';
var urlParam = decodeURIComponent(location.search.substring(1)); // urlパラメータの引数を取得
$(categoryList).each(function () {
var checkedSrc = '';
if (urlParam) {
if (urlParam == this.NAME) {
checkedSrc = 'checked="checked"';
}
}
src += '\n';
src += '\n';
src += '\n';
src += '\n';
});
return src;
}
var makeSrc = function (arr, cate, opt) {
var src = '';
var viewcount = 0;
if (arr.length == 0) {
src += txtZero;
$moreItem.html('');
} else {
// 描画されているli数をカウント
var listcount = 0;
if (opt == 'add') {
listcount = $outputItem.children('.col').length;
}
$(arr).each(function () {
// 対象件数カウントアップ
viewcount++;
// 既に描画済みのリストは作成しない
if (viewcount > listcount) {
var cate_src = "";
if (this.CATEGORYS.length > 0) {
cate_src += '\n';
for(var i =0; i < this.CATEGORYS.length; i++) {
var _cate = get_obj_by_key_value(cate, 'ID', this.CATEGORYS[i]);
cate_src += '' + _cate[0].NAME + '';
if (i < this.CATEGORYS.length - 1) cate_src += ',';
}
cate_src += '\n';
}
src += '\n';
}
// 追加描画数が設定件数を超ているかチェック
if (viewcount >= numItem + listcount) {
//eachループを抜ける
return false;
}
});
//全データ書き込んだかチェック
if (viewcount < arr.length) {
//まだ書き込むデータがあればもっと読むボタン表示
$moreItem.html(moreView);
} else {
//全データ書き込んだらもっと読むボタン削除
$moreItem.html('');
}
}
return src;
}
//配列内の文字列をトリミングする
function trimArray(ary) {
if (Array.isArray(ary)) {
for (var i in ary) {
if (typeof (ary[i]) == "string") ary[i] = ary[i].trim();
}
}
return ary
}
function get_obj_by_key_value(dataAry, key, value) {
var result = $.grep(dataAry, function (e) {
return e[key] == value;
});
return result;
}
////////////////////////////////////////////////////////////////////////////////
// ナビゲーション
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// 配列 index IE対策
////////////////////////////////////////////////////////////////////////////////
if (!Array.indexOf) {
Array.prototype.indexOf = function (object) {
for (var i = 0; i < this.length; i++) {
if (this[i] == object) return i;
}
return -1;
}
}
// クリックイベント
$(function(){
// もっと見るボタンクリック時
$(document).on('click', '.btn-casestudy-more', function(e) {
e.preventDefault();
getAjaxMoreData($(this));
});
// 検索タグ用チェックボックスクリック時
$(document).on('click', '.search-checkbox-area input[type=checkbox]', function(e) {
var $count = $(".search-checkbox-area input[type=checkbox]:checked").length;
var $not = $('.search-checkbox-area input[type=checkbox]').not(':checked')
//チェックが3つ付いたら、チェックされてないチェックボックスにdisabledを加える
if($count >= 3) {
$not.attr("disabled",true);
}else{
//3つ以下ならisabledを外す
$not.attr("disabled",false);
}
});
// 検索チェックボックスクリック時
$(document).on('click', '.search-area-submit', function(e) {
e.preventDefault();
getAjaxData($(this));
});
});
$('body').addClass('casesearch');
}
});
//gig4rwdでは$jquery224を使用、GIG5環境では$を使用
}( (typeof($jquery224) == 'undefined')? $ : $jquery224) );