$.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; }