$.getScript("https://www.books.com.tw/jss/web/show_dialog.js");
var moreHeight = 0;
var openHeight = 0;
var itemId;
var rNo;
var searchUrl = "https://www.books.com.tw/booksComment/ajaxCommemtFilter";
var returnUrl = "https://www.books.com.tw/booksComment/commentReturn";
var starUrl = "https://www.books.com.tw/booksComment/ajaxCommentStart";
var detailUrl = "https://www.books.com.tw/booksComment/detailComment";
var trackerUrl = "https://www.books.com.tw/booksComment/ajaxCommentTracker";
var trackerBtnUrl = "https://www.books.com.tw/booksComment/ajaxCommentTrackerBtn";
var deleteUrl = "https://www.books.com.tw/booksComment/ajaxCommentDel";
var locationUrl = filterXSS($(location).attr("href"));
var cartUrl = "https://cart.books.com.tw/member/login?url=" + locationUrl;
var cflag = "getCommemt";
var webflag = "";
var shareType;
var shareCode;
var shareTitle;
var shareUrl;
var thisfunc;
function setVariables(h, oh, item) {
moreHeight = h;
openHeight = oh;
itemId = item;
}
function errorLogView() {
showDialog({"type": "alert", "message": "載入中,請稍後再試"});
}
function getOpenButton() {
$("#searchComments .description>span").each(function () {
$(this).parent("div").next(".more").hide();
var h = $(this).height();
if (h > openHeight) {
$(this).parent().next(".more").show();
}
});
}
function ajaxComment(url, data, box = false) {
if (box !== false) {
var commentbox = $(box);
}
$.ajax({
url: url,
type: 'POST',
data: data,
dataType: 'json',
success: function (res) {
var res = DOMPurifySanitize(res);
if (Array.isArray(res) || typeof res === 'object') {
if (res['status'] === true) {
if (box !== false) {
commentbox.parent(res["htmlDivId"]).html(res["htmlData"]);
} else if (res["htmlData"]) {
$(res["htmlDivId"]).html(res["htmlData"]);
getOpenButton();
} else {
if (res['url']) {
showDialog({"type": "success", "message": res['message'], "redirectUrl": res['url']});
} else {
showDialog({"type": "success", "message": res['message']});
}
}
} else {
if (res['cartUrl'] === true) {
showDialog({"type": "alert", "message": res['message'], "redirectUrl": cartUrl});
} else {
showDialog({"type": "alert", "message": res['message'], "redirectUrl": res['url']});
}
}
if (res['blankUrl'] === true) {
$('.blankUrl').attr('target', '_blank');
}
if (thisfunc === 'starPoint') {
if (res['status'] === true) {
setStarPointView(res['grade']);
}
}
}
},
error: function () {
errorLogView();
},
failure: function () {
errorLogView();
}
});
}
function querySearach(num, status = false) {
thisfunc = 'querySearach';
var daterange = filterXSS($("input[type=radio][name='daterange']:checked").val());
var stars = $("input[type=checkbox][name='starlevel[]']:checked").map(function () {
return filterXSS($(this).val());
}).get();
if (stars.length === 0 || !daterange) {
return false;
}
var postdata = '';
if (webflag === 'memberComment') {
var category = $("input[type=checkbox][name='category[]']:checked").map(function () {
return filterXSS($(this).val());
}).get();
if (category.length === 0 || !daterange) {
return false;
}
var cmo = filterXSS($("input[type=radio][name='cmo']:checked").val());
postdata = {type: webflag, stars: stars, daterange: daterange, category: category, num: num, rno: rNo, cmo : cmo};
} else {
postdata = {type: webflag, stars: stars, daterange: daterange, num: num, item: itemId};
}
if (status === true) {
$("html, body").animate({scrollTop: $("#searchCommentsBox").offset().top - 120}, 0);
}
ajaxComment(searchUrl, postdata);
}
function commentReason(btn) {
thisfunc = 'commentReason';
$("body").on("click", ".comment-reason", function () {
var btn = this;
var no = filterXSS($(btn).data('no'));
var rid = filterXSS($(btn).data('rid'));
var reason = filterXSS($(btn).text());
var message = '是否確認回報此評論有「' + reason + '」的內容?';
var id = "popConfirmModal";
var postdata = {no: no, reason_id: rid, item: itemId};
var primaryCallback = function () {
ajaxComment(returnUrl, postdata);
$("#" + id).hide();
};
showConfirm({"id": id, "message": message, "overlayhide": true, "primaryCallback": primaryCallback});
});
return false;
}
function commentTracker() {
thisfunc = 'commentTracker';
$("body").on("click", ".trackerbtn", function () {
var rno = filterXSS($(this).data('rno'));
if (!rno) {
return false;
}
var postdata = {rno: rno, status: 'N', type: webflag};
ajaxComment(trackerUrl, postdata, this);
return false;
});
return false;
}
function commentTrackerBtn(rno) {
$.get(trackerBtnUrl + '/' + rno, function (res) {
var res = DOMPurifySanitize(res);
$(".trackerbtnDiv").html(res);
});
}
function cmmentDelete() {
thisfunc = 'cmmentDelete';
$("body").on("click", ".comment-del", function () {
var no = filterXSS($(this).data('no'));
if (!no) {
return false;
}
var postdata = {rno: rNo, no: no};
ajaxComment(deleteUrl, postdata);
return false;
});
return false;
}
function commentRef(btn) {
var no = filterXSS($(btn).data('no'));
var setref = filterXSS($(btn).attr('data-setref'));
if (setref !== 'Y' && setref !== 'N') {
setref = 'Y';
}
var type = "";
var count = filterXSS($(btn).find('.refcount').text());
var ncount = (setref === 'Y') ? parseInt(count) + 1 : parseInt(count) - 1;
var nextStatus = (setref === 'Y') ? 'N' : 'Y';
var commentref = $(btn);
$.ajax({
url: "//www.books.com.tw/web_show/saveCommentRef",
type: 'POST',
data: {no: no, status: setref, type: type},
dataType: 'json',
success: function (res) {
res = DOMPurifySanitize(res);
if (res === true) {
commentref.find('.refcount').text(ncount);
commentref.blur().attr('data-setref', nextStatus).toggleClass("gold");
//commentref.attr('disabled', true).removeClass('comment-ref').addClass('gold');
//showDialog({"type": "success", "message": "評價已成功送出"});
} else if (res === 'login_error') {
showDialog({"type": "alert", "message": "請先登入會員", "redirectUrl": cartUrl});
} else if (res !== false && res !== '') {
showDialog({"type": "alert", "message": "您已評鑑過"});
}
},
error: function () {
errorLogView();
},
failure: function () {
errorLogView();
}
});
}
function starPoint() {
thisfunc = 'starPoint';
var id = "popStarPointModal";
var message = "是否送出以下評分?";
var ograde = 0;
var igrade = $(".user-score").data("grade");
if (cflag === "getCommemt") {
if (igrade > 0) {
message = "是否重新評分這本書?";
} else {
igrade = filterXSS($("input[type=radio][name='star_rating']:checked").val());
$(".star_rating").prop("checked", false);
}
} else {
igrade = filterXSS($("input[type=radio][name='star_rating']:checked").val());
$(".star_rating").prop("checked", false);
}
ograde = igrade * 2;
$("#popstar" + ograde).prop("checked", true);
var primaryCallback = function () {
let grade = filterXSS($("#" + id + " input[type=radio][name=rating]:checked").val());
let postdata = {cflag: cflag, item: itemId, grade: grade};
let rdata = ajaxComment(starUrl, postdata);
$("#" + id).hide();
};
var cancelCallback = function () {
$(".u-overlay").hide();
$("#" + id).hide();
$("#" + id + " .description > p > b").html('');
$(".star_rating").prop("checked", false);
$("#star" + ograde).prop("checked", true);
};
showConfirm({"id": id, "message": message, "overlayhide": true, "primaryCallback": primaryCallback, "cancelCallback": cancelCallback});
}
function setStarPointView(grade) {
let htmltitle = '
修改評分
' + grade + '
';
let ngrade = grade * 2;
$(".star_rating").prop("checked", false);
$(".startag").remove();
if (cflag === "getCommemt") {
$("#boxStarPoint").prepend(htmltitle);
$("#star" + ngrade).prop("checked", true);
$(".publish-area").attr("data-type", "modify");
}
}
function filterCommemts() {
$("body").on("change", "input[type=checkbox][name='category[]']", function () {
var category = filterXSS($(this).val());
if (category !== "all") {
$("#category-0").prop("checked", false);
} else {
$("input[type=checkbox][name='category[]']").not(this).prop("checked", false);
}
var categorys = $("input[type=checkbox][name='category[]']:checked").map(function () {
return filterXSS($(this).val());
}).get();
if (categorys.length === 0) {
$("#category-0").prop("checked", true);
}
querySearach(1);
});
$("body").on("change", "input[type=radio][name='daterange']", function () {
querySearach(1);
});
$("body").on("change", "input[type=radio][name='cmo']", function () {
querySearach(1);
});
$("body").on("change", "input[type=checkbox][name='starlevel[]']", function () {
var lv = filterXSS($(this).val());
if (lv !== "all") {
$("#level-0").prop("checked", false);
} else {
$("input[type=checkbox][name='starlevel[]']").not(this).prop("checked", false);
}
var stars = $("input[type=checkbox][name='starlevel[]']:checked").map(function () {
return filterXSS($(this).val());
}).get();
if (stars.length === 0) {
$("#level-0").prop("checked", true);
}
querySearach(1);
});
$("body").on("click", ".paginationNum", function () {
if ($(this).hasClass("disabled") === true) {
return false;
}
var num = filterXSS($(this).data("num"));
querySearach(num, true);
});
$("body").on("change", "#paginationSelect", function () {
var num = filterXSS($(this).val());
querySearach(num, true);
});
$("body").on("change", ".paginationSelect", function () {
var num = filterXSS($(this).val());
querySearach(num, true);
});
$("body").on("click", ".clear-btn", function () {
$(".check-btn").prop("checked", false);
$("#category-0").prop("checked", true);
$("#level-0").prop("checked", true);
$("#date-0").prop("checked", true);
$("#cmo-1").prop("checked", true);
querySearach(1);
});
}
function showExtendOption() {
$('body').on('click', '.btn-has-options', function () {
if ($(this).next().find(".extend-options")[0].style.display === "none") {
$(this).next().find(".extend-options")[0].style.display = "block";
} else {
$(this).next().find('.extend-options')[0].style.display = "none";
}
});
document.addEventListener('click', function () {
$('.extend-options').hide();
}, true);
}
function showMoreAct(btn) {
let button = $(btn);
button.toggleClass("opened");
button.find("i").toggleClass("icon-up-open-1");
button.prev(".description").toggleClass("limit");
let text = (button.hasClass('opened') === true) ? "收合" : "展開";
button.find("span").text(text);
}
function setRefstatus() {
var url = "https://www.books.com.tw/booksComment/ajaxCommentRef";
var nos = new Array();
$(".comment-ref").each(function () {
var no = filterXSS($(this).data('no'));
nos.push(no);
});
if (nos.length > 0) {
$.ajax({
url: url,
type: "POST",
data: {nos: nos, item: itemId},
dataType: 'json',
success: function (res) {
res = DOMPurifySanitize(res);
if (res['status'] === true) {
var arr = res['data'];
Object.entries(arr).forEach(([key, value]) => {
key = DOMPurifySanitize(key);
value = DOMPurifySanitize(value);
let commentref = $("#ref-" + key);
commentref.find('.refcount').text(value["count"]);
commentref.attr("data-setref", value["setref"]);
(value["hadRef"] === true) ? commentref.addClass('gold') : commentref.removeClass('gold');
});
}
}
});
}
}
/*------------------------------------------------------------------------------*/
function boxGetComments() {
webflag = 'getCommemt';
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
$('.appsharebtn').removeClass('btn-has-options');
}
//querySearach(1);
// 精選書評More顯示
$("#featureComments .description>span").each(function () {
$(this).parent().next('.more-box').hide();
var h = $(this).height();
if (h > moreHeight) {
$(this).parent().next('.more-box').show();
}
});
// 篩選書評More顯示
getOpenButton();
// 選單顯示
showExtendOption();
// 篩選書評
filterCommemts();
// 追蹤
commentTracker();
// 回報
commentReason();
// 篩選書評More Act
$("body").on("click", "#searchComments .item-body .more", function () {
showMoreAct(this);
});
// 有幫助
$('body').on('click', '.comment-ref', function () {
commentRef(this);
});
// 立即評分
$("body").on("click", "#boxStarPoint", function () {
starPoint();
});
// 分享
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
$("body").on("click", ".appsharebtn", function () {
shareUrl = locationUrl;
shareTitle = document.title;
shareAppUrl();
});
$("body").on("click", ".toappshare", function () {
shareCode = filterXSS($(this).data("code"));
shareTitle = filterXSS($(this).data("title"));
shareUrl = detailUrl + '/' + shareCode;
shareAppUrl();
});
}
$("body").on("click", ".shareDetail", function () {
shareTo(this);
return false;
});
}
function boxDetailComment(item) {
webflag = 'detailComment';
itemId = item;
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
$('.appsharebtn').removeClass('btn-has-options');
}
// 選單顯示
showExtendOption();
// 追蹤
commentTracker();
// 回報
commentReason();
// 有幫助
$('body').on('click', '.comment-ref', function () {
commentRef(this);
});
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
$("body").on("click", ".appsharebtn", function () {
shareUrl = locationUrl;
shareTitle = document.title;
shareAppUrl();
});
}
$("body").on("click", ".shareDetail", function () {
shareTo(this);
return false;
});
}
function boxProducts(oh, item, deviceSource) {
openHeight = oh;
itemId = item;
cflag = "products";
setRefstatus();
// 篩選書評More顯示
getOpenButton();
// 篩選書評More Act
$("#searchComments .item-body .more").on("click", function () {
showMoreAct(this);
});
// 有幫助
$(".comment-ref").on("click", function () {
commentRef(this);
});
// 立即評分
$("#boxStarPoint").on("click", function () {
starPoint();
});
}
function boxMemberComments(oh, rno) {
openHeight = oh;
rNo = rno;
webflag = 'memberComment';
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
$('.appsharebtn').removeClass('btn-has-options');
}
//querySearach(1);
// 篩選書評More顯示
getOpenButton();
// 選單顯示
showExtendOption();
// 追蹤按鈕
commentTrackerBtn(rno);
// 篩選書評
filterCommemts();
// 追蹤
commentTracker();
// 回報
commentReason();
// 刪除
cmmentDelete();
// 篩選書評More Act
$("body").on("click", "#searchComments .item-body .more", function () {
showMoreAct(this);
});
// 有幫助
$('body').on('click', '.comment-ref', function () {
commentRef(this);
});
// 分享
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
$("body").on("click", ".appsharebtn", function () {
shareUrl = locationUrl;
shareTitle = document.title;
shareAppUrl();
});
$("body").on("click", ".toappshare", function () {
shareCode = filterXSS($(this).data("code"));
shareTitle = filterXSS($(this).data("title"));
shareUrl = detailUrl + '/' + shareCode;
shareAppUrl();
});
}
$("body").on("click", ".shareDetail", function () {
shareTo(this);
return false;
});
}
function setShareData(obj) {
shareType = filterXSS($(obj).data("type"));
shareCode = filterXSS($(obj).closest('div').prev().data("code"));
if (shareCode === 'web') {
shareTitle = document.title;
shareUrl = locationUrl;
} else {
shareTitle = filterXSS($(obj).closest('div').prev().data("title"));
shareUrl = detailUrl + '/' + shareCode;
}
}
async function shareAppUrl() {
var _url = shareUrl;
var _title = shareTitle;
var shareData = {
title: _title,
text: _title,
url: _url
};
var app_data = {
"event_type": "native_share",
"content": {
"title": _title,
"text": _title,
"url": _url
}
};
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1 || navigator.userAgent.indexOf("android_app_shop_", 0) !== -1) {
if (navigator.userAgent.indexOf("ios_app_shop_", 0) !== -1) {
if (typeof window !== 'undefined' && typeof window.webkit !== 'undefined' && typeof window.webkit.messageHandlers !== 'undefined' && typeof window.webkit.messageHandlers.ToApp !== 'undefined' && typeof window.webkit.messageHandlers.ToApp.postMessage !== 'undefined') {
window.webkit.messageHandlers.ToApp.postMessage(JSON.stringify(app_data));
}
} else if (navigator.userAgent.indexOf("android_app_shop_", 0) !== -1) {
if (typeof baseJavaScriptInject !== 'undefined' && typeof baseJavaScriptInject.postMessage !== 'undefined') {
baseJavaScriptInject.postMessage(JSON.stringify(app_data));
}
}
try {
await navigator.share(shareData);
} catch (err) {
console.log('Error: ' + err);
}
} else {
$('.appsharebtn').addClass('btn-has-options');
$('.toappshare').addClass('btn-has-options');
}
return;
}
function shareTo(obj) {
setShareData(obj);
var _type = shareType;
var _title = shareTitle;
var _url = shareUrl;
switch (_type) {
case "facebook":
window.open("https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(_url) + '&t=' + encodeURIComponent(_title));
break;
case "line":
window.open('https://social-plugins.line.me/lineit/share?url='.concat(encodeURIComponent(_url)).concat('&text=').concat(encodeURIComponent(_title)));
break;
case "copy":
var copy_url = _url;
if (navigator.userAgent.match(/ipad|iphone/i)) {
var ta = document.createElement('textArea');
ta.readonly = false;
ta.contenteditable = true;
ta.value = copy_url;
document.body.appendChild(ta);
ta.focus();
var range = document.createRange();
range.selectNodeContents(ta);
range.collapse(false);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
ta.setSelectionRange(0, 999999);
document.execCommand('copy');
document.body.removeChild(ta);
} else {
var input = document.createElement('input');
input.setAttribute('readonly', 'readonly');
input.setAttribute('value', copy_url);
document.body.appendChild(input);
//input.setSelectionRange(0, 9999);
input.select();
document.execCommand('copy');
document.body.removeChild(input);
}
break;
}
return false;
}