');
$moreBtnBox.addClass(settings.buttonClass);
$moreBtnAnchor.append($moreBtnAnchorInner);
$moreBtnInnerBox.append($moreBtnAnchor);
$moreBtnBox.append($moreBtnInnerBox);
$moreBtnAnchor.on('click', function() {
$element.changeDisplay();
return false;
});
if (settings.outputMode) {
if (settings.outputMode === 'after') {
$element.after($moreBtnBox);
} else if (settings.outputMode === 'before') {
$element.before($moreBtnBox);
} else if (settings.outputMode === 'append') {
$element.append($moreBtnBox);
} else if (settings.outputMode === 'prepend') {
$element.prepend($moreBtnBox);
}
}
};
// 高さを取得
var getHeight = function($objs) {
var result = 0;
if ($objs && $objs.length > 0) {
var $temp = $('
');
// コンマ数ピクセルの取得ができないため仮の要素で囲ったものを取得
$objs.eq(0).before($temp.append($objs.clone()));
$.each($objs, function() {
var marginTop = Number($(this).css('margin-top').replace('px', '')),
marginBottom = Number($(this).css('margin-bottom').replace('px', '')),
paddingTop = Number($(this).css('padding-top').replace('px', '')),
paddingBottom = Number($(this).css('padding-bottom').replace('px', '')),
borderTop = Number($(this).css('border-top-width').replace('px', '')),
borderBottom = Number($(this).css('border-bottom-width').replace('px', '')),
height = $(this).height();
result += height + marginTop + marginBottom + paddingTop + paddingBottom + borderTop + borderBottom;
});
$temp.remove();
}
return result;
};
// クラス名切り替え
var changeClassName = function(mode) {
if ($moreBtnBox && $moreBtnBox.length > 0 && mode) {
if (mode === 'show') {
$element.addClass(settings.openAreaClass);
$moreBtnBox.addClass(settings.openButtonClass);
} else if (mode === 'hide') {
$element.removeClass(settings.openAreaClass);
$moreBtnBox.removeClass(settings.openButtonClass);
}
}
};
// リロード
var reload = function() {
var status = $element.data('data-display-more-status');
if (status === 'show') {
$element.showDisplay(true);
} else if (status === 'hide') {
$element.hideDisplay(true);
}
};
// 表示・非表示切り替え(メソッド)
$element.changeDisplay = function(mode, callback) {
if (mode) {
if (mode === 'show') {
$element.showDisplay(false, callback);
} else if (mode === 'hide') {
$element.hideDisplay(false, callback);
}
} else {
if ($moreBtnBox && $moreBtnBox.length > 0) {
if ($moreBtnBox.hasClass(settings.openButtonClass)) {
$element.hideDisplay(false, callback);
} else {
$element.showDisplay(false, callback);
}
}
}
return this;
};
// 表示(メソッド)
$element.showDisplay = function(directMode, callback) {
var $items = $(this).find(settings.itemElement),
setHeight = getHeight($items);
if ($moreBtnBox && $moreBtnBox.length > 0) {
if (directMode && directMode === true || settings.animateMode && settings.animateMode === 'none') {
$element.height(setHeight);
$moreBtnBox.find('span').html(settings.closeText);
changeClassName('show');
$element.data('data-display-more-status', 'show');
if (callback && typeof callback === 'function') {
callback();
}
} else if (settings.animateMode && settings.animateMode === 'slide') {
$element.animate(
{
height : setHeight
},
{
easing : settings.animateEasing,
duration : settings.animateDuration,
complete : function() {
$moreBtnBox.find('span').html(settings.closeText);
changeClassName('show');
if (callback && typeof callback === 'function') {
callback();
}
}
}
);
$element.data('data-display-more-status', 'show');
}
}
return this;
};
// 非表示(メソッド)
$element.hideDisplay = function(directMode, callback) {
var $items = $(this).find(settings.itemElement).filter(':lt(' + settings.showNumber + ')'),
setHeight = getHeight($items);
if ($moreBtnBox && $moreBtnBox.length > 0) {
if (directMode && directMode === true || settings.animateMode && settings.animateMode === 'none') {
$element.height(setHeight);
$moreBtnBox.find('span').html(settings.openText);
changeClassName('hide');
$element.data('data-display-more-status', 'hide');
if (callback && typeof callback === 'function') {
callback();
}
} else if (settings.animateMode && settings.animateMode === 'slide') {
$element.animate(
{
height : setHeight
},
{
easing : settings.animateEasing,
duration : settings.animateDuration,
complete : function() {
$moreBtnBox.find('span').html(settings.openText);
changeClassName('hide');
if (callback && typeof callback === 'function') {
callback();
}
}
}
);
$element.data('data-display-more-status', 'hide');
}
}
return this;
};
init();
}
return this;
};
})(jQuery);