/**
* フェイスブック・ブログ連携表示用JavaScript
* fb_blog_view.js
* require : jQuery
*/
(function($){
$(function(){
/**
* 疑似定数
*/
var conf = {
url : { //URL設定
xml : '/shared/system/xml/fb_blog.xml'
},
repCallback : { //置換え用コールバック設定
len : function(str,val){ //文字数制限用
var dot = "";
if(str.length>val){
dot = "...";
}
return str.substr(0,val)+dot;
},
deltag : function(str,val) {//タグ削除用
return $('
').html(str).text();
},
// 日付フォーマット変換用
dtFormat : function(datetime, format) {
// 「年月日」区切り文字
date_period = '\\-';
// 「時分秒」区切り文字
time_period = ':';
var y = m = d = h = i = s = 0;
var regDate = '(\\d{2}|\\d{4})' + date_period + '(\\d{1,2})' + date_period + '(\\d{1,2})';
var regTime = '(\\d{1,2})' + time_period + '(\\d{1,2})' + time_period + '(\\d{1,2})';
var regDateTime = new RegExp('^' + regDate + ' ' + regTime + '$');
var regDate = new RegExp('^' + regDate + '$');
var regTime = new RegExp('^' + regTime + '$');
// 「年月日時分秒」形式取得
if (datetime.match(regDateTime)) {
var dayetime_info = datetime.match(regDateTime);
y = dayetime_info[1];
m = dayetime_info[2];
d = dayetime_info[3];
h = dayetime_info[4];
i = dayetime_info[5];
s = dayetime_info[6];
}
// 「年月日」形式取得
else if (datetime.match(regDate)) {
var dayetime_info = datetime.match(regDate);
y = dayetime_info[1];
m = dayetime_info[2];
d = dayetime_info[3];
}
// 「時分秒」形式取得
else if (datetime.match(regTime)) {
var dayetime_info = datetime.match(regTime);
h = dayetime_info[4];
i = dayetime_info[5];
s = dayetime_info[6];
}
// 形式が不正な場合
else {
return datetime;
}
// 「YYYY年」表記置換
format = format.replace('y', y);
// 「MM月」表記置換
format = format.replace('m', m);
// 「M月」表記置換
format = format.replace('n', Number(m));
// 「DD日」表記置換
format = format.replace('d', d);
// 「D日」表記置換
format = format.replace('j', Number(d));
// 「HH時」表記置換
format = format.replace('H', h);
// 「H時」表記置換
format = format.replace('h', Number(h));
// 「II分」表記置換
format = format.replace('I', i);
// 「I分」表記置換
format = format.replace('i', Number(i));
// 「SS秒」表記置換
format = format.replace('S', s);
// 「S秒」表記置換
format = format.replace('s', Number(s));
return format;
}
}
};
var confDatas = {
//トップページ設定
top : {
sel : '.event_item_twitter',
limit : 1, //表示件数
tpl : { //タイプごとのテンプレート
//↓フェイスブック
1 : '',
//↓Twitter
5 : ''
+ '
Twitter
'
+ '
更新日:#date{dtFormat:m月d日}#
'
+ '
',
//↓その他
def : ''
}
},
//ようこそページ設定
yokoso : {
sel : '.topics_list',
limit : 2, //表示件数
tpl : { //タイプごとのテンプレート
//↓フェイスブック
1 : '',
//↓Twitter
5 : '',
//↓その他
def : ''
}
},
};
/**
* ローカル関数
*/
//エラー処理
var errorDisp = function(errmsg){
console.log(errmsg);
};
//XML取得
var getXml = function(){
var dfd = $.Deferred();
$.get(conf.url.xml,null,function(xml){
var pages = $(xml).find('page');
var xmlDatas = [];
pages.each(function(){
var $this = $(this);
var page = {};
$this.children().each(function(){
var $this = $(this);
//タグがある場合エスケープされているので解除
if ($this.get(0).text != void 0) {
page[$this.get(0).tagName] = $this.get(0).text;
}
else if ($this.get(0).textContent != void 0) {
page[$this.get(0).tagName] = $this.get(0).textContent;
}
else if ($this.html() != void 0) {
page[$this.get(0).tagName] = $('').html($this.html()).text();
}
else {
page[$this.get(0).tagName] = '';
}
});
xmlDatas.push(page);
});
dfd.resolve(xmlDatas);
},'xml').fail(function(){
dfd.reject(conf.err.ajax);
});
return dfd.promise();
};
//表示処理
var dispExec = function(xmlDatas){
// 表示用処理
var disp = function(obj,xmlDatas,tpl,limit, area_name){
obj.html("");
var cnt = 0;
for(var i in xmlDatas){
var data = xmlDatas[i];
// 表示対象のページ情報をカンマ区切りで分割し配列に格納
var disp_page_ary = data.display_page.split(",");
// 現在作成している表示エリアに表示するデータか判定
var disp_flg = 0;
for (var num = 0; num < disp_page_ary.length; num++) {
// trim
target_area = disp_page_ary[num].replace(/(^\s+)|(\s+$)/g, '');
if (area_name == target_area || area_name == 'list') {
// 一覧表示または、指定の表示エリアだった場合はフラグを立てる
disp_flg = 1;
break;
}
}
// 表示対象でない場合は以降の処理をskipする
if (disp_flg == 0) {
continue;
}
if(limit != void 0){
//表示件数が制限されている場合
if(limit <= cnt){
break;
}
cnt++;
}
var tplTmp = (tpl[data.type] == void 0) ? tpl.def : tpl[data.type];
//テンプレートタグの置換
var repMatch = tplTmp.match(/#[^#]+#/g);
$.each(repMatch,function(i,m){
var key = m.replace(/#|{.+}/g,'');
var val = data[key];
var optstr = m.match(/{([^}]+)}/);
if(optstr && optstr[1]){
var opts = optstr[1].split(',');
$.each(opts,function(j,o){
var opt = o.split(':');
val = conf.repCallback[opt[0]](val,opt[1]);
});
}
tplTmp = tplTmp.replace(m,val);
});
//出力
obj.append(tplTmp);
}
};
// 各表示エリアをキーに表示情報を生成する
for(var area in confDatas){
if($(confDatas[area].sel).length>0){
$(confDatas[area].sel).each(function(){
disp($(this), xmlDatas, confDatas[area].tpl, confDatas[area].limit, area);
});
}
}
};
/**
* メイン処理
*/
//XMLを取得
getXml().done(function(xmlDatas){
//表示実行
dispExec(xmlDatas);
//information
var infoObj = $('#tmp_kense');
var info1FbObj = $('#tmp_info1 .wrap_box_fb');
if(infoObj.length) {
info1FbObj.find('.box_photo:even').addClass('even');
info1FbObj.find('.box_photo:odd').addClass('odd');
info1FbObj.find('.box_photo:nth-child(1)').addClass('first');
info1FbObj.find('.box_photo:nth-child(2)').addClass('first');
info1FbObj.find('.box_photo:nth-child(3)').addClass('second');
info1FbObj.find('.box_photo:nth-child(4)').addClass('second');
}
}).fail(function(ret){
errorDisp(ret);
});
});
})(jQuery);