var tax_rate = 1.0;//消費税率 /*var cookie_name = 'is_adult_' + get_token();*/ /*var cookie_expires = 365 * 10;*/ var currentTime = new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000)); var cookie_name = 'flg_adult_' + get_token(); var cookie_expires = -1; var url_hash = []; var new_books_month_range = 6; //URLハッシュをパラメータ的に受け取る var hash = decodeURIComponent(location.hash).replace(/^#/g, '');; if (hash != '') { try { url_hash = JSON.parse(hash); } catch(error) { url_hash = ''; } } function initLazyload() { $('.lazyload').lazyload(); } $(document).ready(function(){ var mql = window.matchMedia('(min-width: 768px)'); if(mql.matches) { var isHover = window.matchMedia("(any-hover:hover)").matches; if(isHover){ // PC } else{ // タブレット(タッチデバイス) $('html,body').addClass('is-tablet'); } } else { // スマホ } }); $(window).on('load', function(){ var pathname = location.pathname; if (pathname.indexOf('/search') != -1 || pathname.indexOf('/book/') != -1) { } else { $('body').addClass('on-loaded'); } setTimeout(function(){ $('body').addClass('on-loaded'); }, 1000); }); function get_hash_json() { var url_hash_eg; var tmp_hash = decodeURIComponent(location.hash).replace(/^#/g, ''); if (tmp_hash != '') { try { url_hash_eg = JSON.parse(tmp_hash); } catch(error) { url_hash_eg = false; } return url_hash_eg; } else { return false; } } function set_hash_json(element) { location.hash = encodeURIComponent(JSON.stringify(element)); } $(document).ready(function(){ if ($('.tab-link-list-container').length > 0) { $('.header').addClass('multi-header'); } if (typeof this_category_id !== 'undefined') { //$('[data-layout]').attr('data-layout', this_category_id); $('.js-category-link').each(function(index, element){ var href = $(element).attr('href'); if (href.indexOf('?') != -1) { $(element).attr('href', href + '&category_id=' + this_category_id); } else { $(element).attr('href', href + '?category_id=' + this_category_id); } }); } }); $(window).on('load', function(){ var hash_json = get_hash_json(); if (hash_json) { for( key in hash_json ) { if( hash_json.hasOwnProperty(key) ) { if ( $('[value="' + key + '"]').length > 0 ) { var hidden_element = $('[value="' + key + '"]').eq(0); //$(hidden_element).val(hash_json[key]); var hidden_element_name = $(hidden_element).attr('name'); var target_index = hidden_element_name.replace(/[^0-9]/g, ''); $('[name="val_' + target_index + '"]').val(hash_json[key]).trigger('change').addClass('is-active'); } } } } }); function getCategoryKey(name) { top_category_array.forEach(function(v, index) { if (name == v) { return index; } }); return false; } function initTopBannerSlide(val) { $(val).on('init', function(event, slick){ $(val).attr('data-slideCount', slick.slideCount); }); $(val).slick({ autoplay: true, autoplaySpeed: 3000, accessibility: true, swipe: true, pauseOnHover: true, infinite: true, /*slidesToShow: 1,*/ centerMode: true, centerPadding: 'calc( ( 100% - ' + parseInt($('.slidebanner-img').eq(0).css('width')) + 'px ) / 2 )', arrows: false, dots: true, customPaging: function (slick, index) { return ''; } }); } var template_book_item = `
`; var template_book_pagination = ''; /** Vue-page construct */ $(document).ready(function(){ $('[v-bind\\:src="book.image_url"]').each(function(index, element){ $(element).attr('v-bind:src', 'convertR18Thum(book.image_url)'); }); // in preview-window var unslick; unslick = 'unslick'; if(window == window.parent) { } else { unslick = ''; if ($('#preview-iframe', parent.document).css('width') == '640px') { $('meta[name="viewport"]').attr('content', 'device-width,initial-scale=1.0,minimum-scale=1.0'); $('#preview-iframe', parent.document).css('width', '375px'); unslick = 'unslick'; } else if ($('#preview-iframe', parent.document).css('width') == '968px') { $('meta[name="viewport"]').attr('content', 'width=1280'); $('#preview-iframe', parent.document).css('width', '1028px'); } else { $('meta[name="viewport"]').attr('content', 'width=1280'); $('#preview-iframe', parent.document).css('width', '1028px'); } } $('.ins-book-item').prop('outerHTML', template_book_item); $('.comic-item-thum-bgimg').attr('src', $('meta[name="bgimg"]').attr('src')); $('.ins-book-pagination').prop('outerHTML', template_book_pagination); $('[data-sort_type="content_public_begin_at_desc"]').attr('data-sort_type', 'content_public_begin_at_desc'); /* よく検索されるキーワード */ if ($('.frequently-keyword-list,.sub-menu-keyword-list').length > 0) { var keywords = []; $.ajax({ url: book_api_url_root + '/api/banners', type: 'get', cache: false, dataType:'json', data:{ key: book_api_key, token: get_token(), layout_num: 99 } }) .done(function(response) { var tmp_array = (response.banners[0].title).split(','); tmp_array.forEach(function(elem, index) { keywords.push({ title: elem, title_encode: encodeURIComponent(elem) }); }); }) .fail(function(xhr) { }) .always(function(xhr, msg) { var frequentlykeyword = new Vue({ el: '#header-keywords', data: { keywords: keywords } }); var frequentlykeyword_sp = new Vue({ el: '#header-keywords-sp', data: { keywords: keywords }, mounted: function(){ initScrollable(); } }); }); } /* TOPスライドバナー */ var banner_wrapper_array = ['#top-slidebanner','#top-bottombanner']; banner_wrapper_array.forEach(function(val, index) { var banner_wrapper = $(val); if (banner_wrapper.length > 0) { $.ajax({ url: book_api_url_root + '/api/banners', type: 'get', cache: false, dataType:'json', data:{ key: book_api_key, token: get_token(), layout_num: banner_wrapper.data('layout'), num: 100 } }) .done(function(response) { //ページ指定がある場合、指定外のページでは表示しない if($('body').attr('category')) { for (var i = response.banners.length - 1; i >= 0; i--) { if (response.banners[i].label_csv === null || response.banners[i].label_csv == '') { } else { var tmp_label_array = (response.banners[i].label_csv).split(','); if (tmp_label_array.indexOf(($('body').attr('category')).replace(/^\//, 'top')) == -1) { response.banners.splice(i, 1); } } } } var top_slide_banner = new Vue({ el: val, data: { banners: response.banners }, mounted: function(){ initLazyload(); if ($(val).hasClass('js-slidebanner')) { setTimeout(function(){ initTopBannerSlide(val); }, (window == window.parent ? 1 : 500)); } } }); }) .fail(function(xhr) { }) .always(function(xhr, msg) { }); } }); /* TOP各一覧 */ var list_wrapper_array = [ { "target": '#top-magazine', "api": '/api/books', "data": { "search_type":"search", "num": "8", "search_option":"category", "category_id": "9", "status":"0", "column_option": column_option_default, "sort_type": "public_begin_at_desc", "idlist": ( $('.crefar-book-id-list[data-id="top-magazine"]').length > 0 ? $('.crefar-book-id-list[data-id="top-magazine"]').attr('data-text').split(',') : [] ) } }, { "target": '#top-ranking', "api": '/api/rankings', "data": { "type":"weekly", "category_id": "1,2,3,4,5,7", "num": "8", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, //ランキングページ用 {// --総合 "target": '#ranking-ranking', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": "1,2,3,4,5,7", "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, {// --少女マンガ "target": '#ranking-girls', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": 1, "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, {// --女性マンガ "target": '#ranking-womens', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": 2, "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, {// --ペット "target": '#ranking-pet', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": 3, "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, {// --TL "target": '#ranking-tl', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": 4, "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, {// --BL "target": '#ranking-bl', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": 5, "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, {// --青年 "target": '#ranking-young', "api": '/api/rankings', "data": { "type": (getParam('type') != '' ? getParam('type') : "weekly"), "category_id": 7, "num": "12", "status":"0", "column_option": column_option_default+',publisher', "idlist": [] } }, //アムコミページ用 {// --いけない愛恋 "target": '#amucomi-ikenai', "api": '/api/books', "data": { "search_type": "search", "search_option": "label", "search_value": "いけない愛恋", "num": "12", "status":"0", "column_option": column_option_default, "sort_type": "content_public_begin_at_desc", "idlist": [] } }, {// --Comic miw "target": '#amucomi-comicmiw', "api": '/api/books', "data": { "search_type": "search", "search_option": "label", "search_value": "Comic miw", "num": "12", "status":"0", "column_option": column_option_default, "sort_type": "content_public_begin_at_desc", "idlist": [] } }, {// --B-Levo "target": '#amucomi-blevo', "api": '/api/books', "data": { "search_type": "search", "search_option":"label", "search_value": "B-Levo", "num": "12", "status":"0", "column_option": column_option_default, "sort_type": "content_public_begin_at_desc", "idlist": [] } }, {// --MONSTER "target": '#amucomi-monster', "api": '/api/books', "data": { "search_type": "search", "search_option": "label", "search_value": "MONSTER", "num": "12", "status":"0", "column_option": column_option_default, "sort_type": "content_public_begin_at_desc", "idlist": [] } } ]; page_content.forEach(function(element){ list_wrapper_array.push(element); }); var body_category_id = null var class_body = $('body').attr('class'); var match_str = class_body.match(/category-[0-9]+/); if (match_str) { body_category_id = (match_str[0]).replace('category-', ''); } list_wrapper_array.forEach(function(val, index) { var book_list = $(val.target); if (body_category_id) { //val.data.category_id = body_category_id; } var query = val.data; query.key = book_api_key; query.token = get_token(); if (book_list.length > 0) { if (val.target.match(/^#new-books-[1-5]$/)) { return true; } var idlist = val.data.idlist; var idlistlength = idlist.length; if ( idlistlength > 0 ) { var tmp_books = []; var tmp_cnt = 0; idlist.forEach(function(val2, index2){ tmp_cnt++; $.ajax({ url: book_api_url_root + '/api/books/' + val2, type: 'get', cache: false, dataType:'json', data:query }).done(function(response){ if (response.book) { tmp_books[index2] = response.book; } else { idlistlength--; } }).fail(function(xhr) { idlistlength--; }).always(function(){ if (tmp_cnt >= idlistlength) {//順番を確保するために最後にvueへ渡す var book_list = []; var tmp_cnt2 = 0; tmp_books.forEach(function(val3, index3){ tmp_cnt2++; book_list.push(val3); if(tmp_cnt2 >= idlistlength) { var top_book_list = new Vue({ el: val.target, data: { books: book_list }, mounted: function(){ initLazyload(); setTimeout(function(){ if ($(val.target).hasClass('js-comic-slide-list')) { $(val.target).slick({ autoplay: false, autoplaySpeed: 3000, accessibility: true, swipe: true, pauseOnHover: true, infinite: false, centerMode: false, slidesToShow: 4, slidesToScroll: 4, centerPadding: '40px', dots: false, prevArrow: '', nextArrow: '', responsive: [ { breakpoint: 1024, settings: unslick } ] }); } },0); } }); } }); } }); }); } else { var page = 1; var tmp_response = {}; function getBooklistData(query, val, query) { var async_option_val = true; if (val.target == '#new-books-data') { async_option_val = false; query.num = 100; } $.ajax({ url: book_api_url_root + val.api, type: 'get', cache: false, dataType:'json', data:query, async:async_option_val, }) .done(function(response) { if ( val.target == '#top-ebook') { // TOPに表示しないレーベル var ng_label = ['XXXX', 'YYYY']; response.books = response.books.filter(function(v){ return (ng_label.indexOf(v.label) == -1 ? true : false ); }); //アダルトフラグ作品は除外する response.books = response.books.filter(function(v){ return (v.adult != 1 ? true : false ); }); if (Object.keys(tmp_response).length == 0) { tmp_response = response; } tmp_response.books = (tmp_response.books).concat(tmp_response.books, response.books); if (tmp_response.books.length < 8 && page <= 3) { page++; var tmp_query = query; tmp_query.page = page; getBooklistData(query, val, tmp_query); return false; } response.books = tmp_response.books; response.books = response.books.splice(0, 8); response.books.forEach(function(bk, idx) { var show_book_product; if (bk.last_content === null) { show_book_product = bk.first_content; } else { show_book_product = bk.last_content; } if (bk.begin_at.substr(0, 10) == show_book_product.begin_at.substr(0, 10) && ((currentTime - new Date(bk.begin_at.substr(0, 10))) / 86400000 ) <= 30) { //同日なら[新作品]表示 var badges = bk.badge.split(','); if (badges.indexOf('分冊') != -1) { show_book_product.title = '新作品' + show_book_product.title; } } response.books[idx].image_url = show_book_product.image_url; response.books[idx].title = show_book_product.title; }); } // 月ごとにデータを分けてvue定義 if (val.target == '#new-books-data') { // 新着表示用 var new_books_monthly_data; var new_books_monthly_title = []; if (response.books.length > 0) { var date_string = response.books.reduce((latest, book) => new Date(book.finish_at) > new Date(latest.finish_at) ? book : latest ).finish_at; var first_date_string = response.books.reduce((oldest, book) => new Date(book.finish_at) < new Date(oldest.finish_at) ? book : oldest ).finish_at; var iso_date_string = date_string.replace(" ", "T"); var iso_first_date_string = first_date_string.replace(" ", "T"); var current_date = new Date(iso_date_string); var first_date = new Date(iso_first_date_string); var date_month_diff = (current_date.getFullYear() - first_date.getFullYear()) * 12 + (current_date.getMonth() - first_date.getMonth()); new_books_monthly_data = Array(date_month_diff).fill().map(() => []); function get_month_range(date, offset) { var start_of_month = new Date(date.getFullYear(), date.getMonth() - offset, 1); var end_of_month = new Date(start_of_month.getFullYear(), start_of_month.getMonth() + 1, 0); return { start: start_of_month, end: end_of_month }; } function format_year_month(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; // 月は0始まりなので+1 return year + '年' + month + '月'; // 1桁のまま返す } var month_ranges = []; for (var i = 0; i < date_month_diff; i++) { month_ranges.push(get_month_range(current_date, i)); new_books_monthly_title.push(format_year_month(month_ranges[i].start)); } $.each(response.books, function(index, item) { var item_date = new Date(item.finish_at); for (var i = 0; i < month_ranges.length; i++) { if (item_date >= month_ranges[i].start && item_date <= month_ranges[i].end) { new_books_monthly_data[i].push(item); if (!month_ranges[i].count) { month_ranges[i].count = 0; } month_ranges[i].count++; break; } } }); month_ranges = month_ranges.filter(function(range) { return range.count && range.count > 0; }); for (var i = 0; i < month_ranges.length; i++) { var replace_target = '#new-books-' + (i+1); var replace_target_list = '#new_books_list_' + (i+1); var replace_target_title = '#new_books_title_' + (i+1); if (new_books_monthly_data[i].length != 0) { $(replace_target_title).text(new_books_monthly_title[i] + "新刊"); var top_book_list = new Vue({ el: replace_target, data: { books: new_books_monthly_data[i] }, mounted: function(){ initLazyload(); setTimeout(function(){ if ($(val.target).hasClass('js-comic-slide-list')) { $(val.target).slick({ autoplay: false, autoplaySpeed: 3000, accessibility: true, swipe: true, pauseOnHover: true, infinite: false, centerMode: false, slidesToShow: 4, slidesToScroll: 4, centerPadding: '40px', dots: false, prevArrow: '', nextArrow: '', responsive: [ { breakpoint: 1024, settings: unslick } ] }); } }, 1); } }); } else { $(replace_target_list).css('display', 'none'); } } } else { for (var i = 0; i < new_books_month_range; i++) { var replace_target_list = '#new_books_list_' + (i+1); //$(replace_target_list).css('display', 'none'); } } return true; } if (response.books.length == 0) { $(val.target).closest('.main-list-wrapper').hide(); } else { var top_book_list = new Vue({ el: val.target, data: { books: response.books }, mounted: function(){ initLazyload(); setTimeout(function(){ if ($(val.target).hasClass('js-comic-slide-list')) { $(val.target).slick({ autoplay: false, autoplaySpeed: 3000, accessibility: true, swipe: true, pauseOnHover: true, infinite: false, centerMode: false, slidesToShow: 4, slidesToScroll: 4, centerPadding: '40px', dots: false, prevArrow: '', nextArrow: '', responsive: [ { breakpoint: 1024, settings: unslick } ] }); } }, 1); } }); } }) .fail(function(xhr) { }) .always(function(xhr, msg) { }); } getBooklistData(query, val, query); } } else { } }); /* 作品詳細ページ */ var book_detail = $('#book-detail'); if (book_detail.length > 0) { var book_id,query,title_kana; var pathname_array = location.pathname.split('/'); if (pathname_array.length >= 3) { book_id = pathname_array[2]; query = { "column_option": "_default,id,title,title_kana,description,description2,category_id,publisher,publisher_kana,magazine,label,adult,badge,image_url,image2_url,finish_at,begin_at,end_at,tags,authors,first_content,first_content.code,first_content.viewer_url,first_content.viewer_sample_url,last_content,bookmarked,topics_1,topics_2,topics_3,topics_4,topics_5,topics_6", "status": 0 } query.key = book_api_key; query.token = get_token(); $.ajax({ url: book_api_url_root + '/api/books/' + book_id, type: 'get', cache: false, dataType:'json', data:query }) .done(function(response) { var category_data = top_category_array[response.book.category_id]; category_name = category_data.title; $('body').attr('data-book-title', response.book.title); //$('body').attr('category', category_data.path); //meta-tag //$('title').text('作品詳細|' + response.book.title + '|二見書房'); //$('meta[name="description"],meta[property="og:description"],meta[name="twitter:description"]').attr('content', response.book.description); //$('meta[property="og:title"],meta[name="twitter:title"]').attr('content', '作品詳細|' + response.book.title + '|二見書房'); //$('meta[property="og:image"],meta[name="twitter:image"]').attr('content', response.book.image_url); //カテゴリTAB $('.tab-link-item[data-category_id="' + response.book.category_id + '"]').addClass('is-active'); switch(response.book.category_id) { case 3: $('.sns-banner-book.nekotomo').css('display', 'flex'); break; case 4: $('.sns-banner-book.tl').css('display', 'flex'); break; case 5: $('.sns-banner-book.bl').css('display', 'flex'); break; default: $('.sns-banner-book.futami').css('display', 'flex'); } //ぱんくず var bread_clone = $('.breadcrumb-item.is-active').clone(); $(bread_clone).removeClass('is-active'); $(bread_clone).find('.breadcrumb-link').text(category_name).attr('href', '/' + category_data.path); $('.breadcrumb-item.is-active').before(bread_clone); $('.breadcrumb-item.is-active a').text(response.book.title); //データ取得成功・表示項目構築 response.this_url = location.href; response.this_url_encode = encodeURIComponent(location.href); if (response.book.topics_1) { response.book = initBookTopics(response.book); } // 発売日フォーマット修正 response.book.finish_at = response.book.finish_at.split(" ")[0]; response.book.finish_at = response.book.finish_at.replace(/-/g, "."); //タグから非表示項目を除去 response.book.tags2 = response.book.tags.filter(function(tag){ return (tag.id < 9000); }); var page = getParam('page'); if (page == '') { page = 1; } var sort_type = getParam('sort_type'); if (sort_type == '') { sort_type = 'priority_asc'; } var is_r18 = false; //成人作品サムネイル? if (response.book.image_url) { if (response.book.image_url != convertR18Thum(response.book.image_url)) { is_r18 = true; if(response.book.first_content) { if (response.book.first_content.viewer_url) { response.book.first_content.viewer_url = null; } if (response.book.first_content.viewer_sample_url) { response.book.first_content.viewer_sample_url = null; } } } var base_src = $('.header-logo-img').attr('src'); base_src = base_src.substring(0, base_src.lastIndexOf('/')) + '/'; response.book.image_url = convertR18Thum(response.book.image_url); $('meta[property="og:image"],meta[name="twitter:image"]').attr('content', response.book.image_url); if ($('script[type="application/ld+json"]').length > 0) { var ld_json = $('script[type="application/ld+json"]').html(); ld_json = ld_json.replace(/http.+_r18\.jpg/g, base_src + 'thum_r18.jpg'); $('script[type="application/ld+json"]').html(ld_json) } } if(response.book.first_content) { response.book.first_content.viewer_url = (response.book.first_content.viewer_url ? response.book.first_content.viewer_url : response.book.first_content.viewer_sample_url); if (!response.book.first_content.viewer_url) { $('.btn-read-sample-detail-wrapper').remove(); } } $('body').addClass('category-' + response.book.category_id).addClass('theme-' + response.book.category_id).addClass('on-loaded'); // BL(9)、TL(10)、成人向(12)け以外は、全体検索 var ex_cate = [9,10,12]; if (ex_cate.indexOf(response.book.category_id) != -1) { $('.header-search-container').append('') } var book_detail_template = new Vue({ el: "#book-detail", data: { book: response.book, currentDate: new Date().toISOString().substr(0, 10), }, mounted: function(){ this.compareDates(); initLazyload(); if ($('.detail-discription-txt').get(0).scrollHeight - 1 <= $('.detail-discription-txt').get(0).offsetHeight) { $('#detail-switch').attr('disabled', true); } }, methods: { compareDates: function() { const current = new Date(this.currentDate); const publication = new Date(this.book.topics_1['sdate']); if (current >= publication) { $('#buy_paper_btn').text('紙書籍で買う'); $('#buy_digital_btn').text('電子書籍で買う'); } else { $('#buy_paper_btn').text('紙書籍を予約する'); $('#buy_digital_btn').text('電子書籍を予約する'); } } } }); var book_detail_information_template = new Vue({ el: "#book-detail-information", data: { book: response.book }, mounted: function(){ } }); //書店リンク initStorelinks(response.book.topics_4, response.book.topics_5); if (ex_cate.indexOf(response.book.category_id) != -1) { $('.add_category').each(function(){ var current_href = $(this).attr('href'); var new_href = current_href + '&category_id=' + response.book.category_id; $(this).attr('href', new_href); }); } var exclusion_id = [response.book.id];//排除作品ID(重複を避ける) //関連書籍の構築 $('body').append(''); $('body').append(''); $('.js-kanren-osusume-initializer').on('change', function(){ var chk_sum = parseInt($('.js-kanren-osusume-initializer[name="kanren-ctl"]').val()) + parseInt($('.js-kanren-osusume-initializer[name="osusume-ctl"]').val()); if (chk_sum >= 2) { initComicSlide(); } }); response.book.kanren = []; response.book.topics_3.forEach(function(elem, index){ if (elem.image_url == '') { query = { "column_option": column_option_default, "status": 0 } query.key = book_api_key; query.token = get_token(); $.ajax({ url: book_api_url_root + '/api/books/' + elem.content, type: 'get', cache: false, dataType:'json', data:query }) .done(function(response2) { var json = ''; json = json + '"id": ' + elem.content + ','; json = json + '"image_url": "' + response2.book.image_url + '",'; json = json + '"title": "' + response2.book.title + '",'; json = json + '"authors": [],'; json = json + '"badge": "",'; json = json + '"first_content": null'; json = '{' + json + '}'; if (exclusion_id.indexOf(elem.content) == -1) { response.book.kanren.push(JSON.parse(json)); exclusion_id.push(parseInt(elem.content)); } }); } else { var json = ''; json = json + '"id": ' + elem.content + ','; json = json + '"image_url": "' + elem.image_url + '",'; json = json + '"title": "' + elem.title + '",'; json = json + '"authors": [],'; json = json + '"badge": "",'; json = json + '"first_content": null'; json = '{' + json + '}'; if (exclusion_id.indexOf(elem.content) == -1) { response.book.kanren.push(JSON.parse(json)); exclusion_id.push(parseInt(elem.content)); } } }); //足りない場合、同かな+同じラベル(label)の作品を探してくる if (response.book.kanren.length < 4) { var query = JSON.parse('{}'); query.key = book_api_key; query.token = get_token(); query.search_type = 'search'; query.search_option = 'title'; query.status = 0; query.search_value = response.book.title_kana; query.sort_type = 'content_public_begin_at_desc'; query.num = 4+200; query.column_option = column_option_default; $.ajax({ url: book_api_url_root + '/api/books', type: 'get', cache: false, dataType:'json', data:query }) .done(function(response_kana) { response_kana.books.some(function(elem2, index2){ if (exclusion_id.indexOf(elem2.id) == -1 && elem2.label == response.book.label) { if (response.book.kanren.length >= 4) { return true; } var flg_ebook = false; if (response.book.category_id != 9) { elem2.tags.forEach(function(elem3, index2){ if (elem3.tag == '電子書籍') { flg_ebook = true } }); } else { flg_ebook = true; } if (flg_ebook) { exclusion_id.push(elem2.id); response.book.kanren.push(elem2); } } }); if (response.book.kanren.length < 4) { response.book.authors.some(function(elem, index){ //足りない場合、同著者作品を探してくる if (response.book.kanren.length > 3) { return true; } var query = JSON.parse('{}'); query.key = book_api_key; query.token = get_token(); query.search_type = 'author'; query.search_option = 'author'; query.search_value = elem.id; query.sort_type = 'content_public_begin_at_desc'; query.status = 0; query.num = 4+20; query.column_option = column_option_default; if (response.book.category_id == 9) { query.category_id = 9; } $.ajax({ url: book_api_url_root + '/api/books', type: 'get', cache: false, dataType:'json', data:query }) .done(function(response2) { response2.books.some(function(elem2, index2){ if (exclusion_id.indexOf(elem2.id) == -1) { if (response.book.kanren.length >= 4) { return true; } var flg_ebook = false; if (response.book.category_id != 9) { elem2.tags.forEach(function(elem3, index3){ if (elem3.tag == '電子書籍') { flg_ebook = true } }); } else { flg_ebook = true; } if (flg_ebook) { exclusion_id.push(elem2.id); response.book.kanren.push(elem2); } } }); }).fail(function(xhr) { }) .always(function(xhr, msg) { }); }); $('.js-kanren-osusume-initializer[name="kanren-ctl"]').val('1').trigger('change'); } else { $('.js-kanren-osusume-initializer[name="kanren-ctl"]').val('1').trigger('change'); } }).fail(function(xhr) { }) .always(function(xhr, msg) { }); } else { $('.js-kanren-osusume-initializer[name="kanren-ctl"]').val('1').trigger('change'); } response.book.kanren.forEach(function(element, idx){ response.book.kanren[idx].image_url = convertR18Thum(element.image_url); }); var kanren_book_list_template = new Vue({ el: "#kanren-book-list-wrapper", data: { books: response.book.kanren }, mounted: function(){ initLazyload(); setTimeout(function(){ constructOsusume(); },50); } }); function constructOsusume() { //同カテゴリおすすめ作品の構築 var query = JSON.parse('{}'); query.key = book_api_key; query.token = get_token(); query.search_type = 'search'; query.search_value = title; query.category_id = response.book.category_id; query.search_value = ''; query.sort_type = 'public_begin_at_desc'; query.num = 24 + 1; query.column_option = column_option_default; $.ajax({ url: book_api_url_root + '/api/books', type: 'get', cache: false, dataType:'json', data:query }) .done(function(response2) { response.book.osusume = []; response2.books = myShuffle(response2.books); response2.books.some(function(elem2, index2){ if (exclusion_id.indexOf(elem2.id) == -1) { response.book.osusume.push(elem2); exclusion_id.push(elem2.id); } if (response.book.osusume.length >= 8) { return true; } }); response.book.osusume.forEach(function(element, idx){ response.book.osusume[idx].image_url = convertR18Thum(element.image_url); }); var osusume_book_list_template = new Vue({ el: "#osusume-book-list-wrapper", data: { books: response.book.osusume }, mounted: function(){ initLazyload(); $('.js-kanren-osusume-initializer[name="osusume-ctl"]').val('1').trigger('change'); $('#osusume-book-list-wrapper .heading-title').text('おすすめ' + category_name + '作品'); } }); }).fail(function(xhr) { }) .always(function(xhr, msg) { }); } //最近チェックした作品へ登録 pushLocalHistory(response.book); var local_history = getLocalHistory(response.book.id); local_history.books = (local_history.books).slice(-3).reverse(); //最近チェックした作品の構築 var local_history_template = new Vue({ el: "#local-history", data: { books: local_history.books }, mounted: function(){ initLazyload(); } }); }) .fail(function(xhr) { location.href = '/notfound'; }) .always(function(xhr, msg) { }); } else { //url error } } //奥付ページ var colophon = $('.colophon-container'); if (colophon.length > 0) { //tablet処理 var is_tablet = false; var parent_class = $('body', parent.document).attr('class'); if ( typeof parent_class === 'undefined') { } else { if (parent_class.indexOf('tablet') != -1) { is_tablet = true; } } if (is_tablet) { $('body').addClass('is-tablet'); $('#endOfBook #eobIframe', parent.document).css('height', '100vh'); } var book_id,book_content_id,query; book_content_id = getParam('book_content_id'); if (book_content_id != '') { query = { "column_option": "_default" }; query.key = book_api_key; query.token = get_token(); $.ajax({ url: book_api_url_root + '/api/book_contents/' + book_content_id, type: 'get', cache: false, dataType:'json', data:query }).done(function(res) { book_id = res.book_content.book_id; query = { "column_option": "_default,id,title,title_kana,description,description2,category_id,publisher,publisher_kana,magazine,label,adult,badge,image_url,image2_url,finish_at,begin_at,end_at,tags,authors,first_content,first_content.viewer_url,last_content,bookmarked,topics_1,topics_2,topics_3,topics_4,topics_5" }; query.key = book_api_key; query.token = get_token(); $.ajax({ url: book_api_url_root + '/api/books/' + book_id, type: 'get', cache: false, dataType:'json', data:query }) .done(function(response) { var colophon_template = new Vue({ el: "#colophon-detail", data: { book: response.book }, mounted: function(){ initLazyload(); $('title').text(response.book.title + '|二見書房'); } }); $('body').attr('data-book-title', response.book.title); initStorelinks(response.book.topics_4, response.book.topics_5); }) .fail(function(xhr) {}) .always(function(xhr, msg) { }); }).fail(function(xhr) { }).always(function(xhr, msg) { }); } } /* 作品検索およびカテゴリTOP */ var q = getParam('q'); var title = getParam('title'); var category_name = ''; var media_ebook = getParam('media-ebook'); var media_paper = getParam('media-paper'); $('[name="title"]').val(title); if (location.pathname == '/search' || $('#category-result-outer').length > 0) { var category_id = getCategoryKeyFromPath($('body').attr('category')); if (!category_id) { category_id = ''; } else { category_name = getCategoryLongTitleFromPath($('body').attr('category')); $('.heading-title').text(category_name); $('.breadcrumb-wrapper').remove(); if ($('.btn-filter').length >= 2) { $('.btn-filter').eq(0).attr('href', '/search?genre='+encodeURIComponent(getCategoryNameFromPath($('body').attr('category')))+'&keyword=紙'); $('.btn-filter').eq(1).attr('href', '/search?genre='+encodeURIComponent(getCategoryNameFromPath($('body').attr('category')))+'&keyword=デジタル'); } } var page = getParam('page'); if (page == '') {page = 1;} page = Number(page); var sort_type = getParam('sort_type'); if (sort_type == '') {sort_type = 'finish_at_desc';} $('.heading-sort-link').removeClass('is-active').each(function(index, element){ $(element).attr('href', getUrlChangeParam('page=1', getUrlChangeParam('sort_type='+$(element).attr('data-sort_type')))); }); $('.heading-sort-link[data-sort_type="' + sort_type + '"]').addClass('is-active'); var media = []; if (media_ebook != '') { media.push('デジタル'); $('[name="media-ebook"]').prop('checked',true); } if (media_paper != '') { media.push('紙'); $('[name="media-paper"]').prop('checked',true); } media = media.join(','); var genre = getParam('genre'); if (genre != '') { $('[name="genre"]').val(genre).trigger('change'); $('[name="genre"]').addClass('is-active'); } var situation = getParam('situation'); if(situation != '') { $('[name="situation"]').val(situation).trigger('change'); $('[name="situation"]').addClass('is-active'); } var category = getParam('category'); var category_id = getParam('category_id'); var category_ids = getParam('category_ids'); if (category_id && category_id.match(/^[0-9,]+$/) && category_id.indexOf(',') !== -1) { category_ids = category_id; category_id = null; } var keyword = getParam('keyword'); var title = getParam('title'); var author = getParam('author'); var publisher = getParam('publisher'); var label = getParam('label'); var tag_id = getParam('tag_id'); if(label != '') { $('[name="label"]').val(label).trigger('change'); $('[name="label"]').addClass('is-active'); } else if (label == '') $('[name="keyword"]').val(keyword); $('[name="title"]').val(title); $('[name="author"]').val(author); $('.breadcrumb-item.is-active a').attr('href', location ); if (q + category_id + category_ids + media + genre + situation + keyword + title + author + publisher + label + tag_id != '') { /* 検索条件あり */ if (q == 'resetcookie') { $.cookie(cookie_name, '1', { path: "/", expires: -1, secure: true }); } var query = JSON.parse('{}'); query.key = book_api_key; query.token = get_token(); query.search_type = 'search'; query.search_option = 'title'; query.search_value = []; query.search_value.push(title); if (q != '') {query.search_type ='search';query.search_value.push(q);query.search_option = 'title,author,content,badge,label,publisher,category';$('[name="q"]').val(q);} if (tag_id != '') {query.search_type ='tag';query.search_value.push(tag_id);query.search_option = '';} if (category_id != '') {query.category_id = category_id}; if (category_ids != '') {query.category_ids = category_ids}; if ((media.split(',')).length >= 2) { query.search_type ='tag_name'; media_ebook = ''; media_paper = ''; } else if (media != '') { query.search_type ='tag_name'; query.search_value.push(media); query.search_option = ''; } if (category != '') {query.search_type ='tag_name';query.search_value.push(category);query.search_option = '';} if (genre != '' && (label != '' || situation != '' || keyword != '' || media_ebook != '' || media_paper != '')) { query.search_type ='category_id_tag_name'; query.search_value = []; if (genre != '') {query.search_value.push('ci_'+getCategoryIdFromTitle(genre.replace('女性マンガ', '女性')));} if (situation != '') {query.search_value.push('tn_'+situation);} if (keyword != '') {query.search_value.push('tn_'+keyword);} if (media_ebook != '') {query.search_value.push('tn_'+media_ebook);} if (media_paper != '') {query.search_value.push('tn_'+media_paper);} query.search_option = ''; } else { if (genre != '') {query.search_type ='tag_name';query.search_value.push(genre);query.search_option = '';} if (situation != '') {query.search_type ='tag_name';query.search_value.push(situation);query.search_option = '';} if (keyword != '') {query.search_type ='tag_name';query.search_value.push(keyword);query.search_option = '';} } if (author != '') {query.search_value.push(author);query.search_option = 'author';} if (publisher != '') {query.search_value.push(publisher);query.search_option = 'publisher';} if (label != '') {query.search_value.push(label);query.search_option = 'label';} query.search_value = query.search_value.filter(Boolean); query.search_value = query.search_value.join(','); if (label != '' && genre != '' && situation == '' && keyword == '' && media_ebook == '' && media_paper == '') { //query.category_id = getCategoryIdFromTitle(genre.replace('女性マンガ', '女性')); query.search_type ='search'; query.search_value = ''; } query.sort_type = sort_type; query.column_option = column_option_default; query.page = page; query.num = 24; query.status = 0; if (category == '' && category_id == '' && category_ids == '') { query.category_ids = '1,2,3,4,5,6,7,8,9,10,11,100,101'; } if (category_id != '') { $('body').addClass('theme-'+ category_id); } $('body').addClass('on-loaded'); $.ajax({ url: book_api_url_root + '/api/books', type: 'get', cache: false, dataType:'json', data:query }) .done(function(response) { var result_txt = []; if (tag_id != '') { response.books[0].tags.some(function(elem, index){ if (elem.id == tag_id) { result_txt.push(elem.name); return true; } }); } result_txt.push(category); if (category_id) { if (!isNaN(category_id)) { result_txt.push(getCategoryNameFromId(category_id)); } $('form.header-search-container').append('') } result_txt.push(q); result_txt.push(media.replace(',', '」「')); result_txt.push(genre); result_txt.push(situation); result_txt.push(keyword); result_txt.push(title); result_txt.push(author); result_txt.push(publisher); result_txt.push(label); result_txt = result_txt.filter(Boolean); result_txt = '「' + result_txt.join('」「') + '」'; $('.result-heading,.js-heading-search-result .text').text(result_txt + 'の検索結果一覧'); var titletext = getParam('titletext'); if (titletext) { $('.result-heading,.js-heading-search-result .text').text(titletext); } $('.breadcrumb-item.is-active a').text(result_txt + 'の検索結果一覧'); $('.heading-title-result-count').text(Number(response.total).toLocaleString()); if (response.books.length == 0) { /* 0件 */ //meta-tag if ($('body').attr('category')) { if ($('body').attr('category') == 'search') { $('title').text('検索結果|二見書房'); $('meta[property="og:title"],meta[name="twitter:title"]').attr('content', '検索結果|二見書房'); $('head').append(''); } else { //$('title').text('カテゴリ - ' + category_name +'|二見書房'); $('meta[property="og:title"],meta[name="twitter:title"]').attr('content', $('title').text()); $('meta[name="description"],meta[property="og:description"],meta[name="twitter:description"]').attr('content', $('meta[name="description"]').attr('content')); } } else { //$('title').text('検索結果|二見書房'); //$('meta[property="og:title"],meta[name="twitter:title"]').attr('content', '検索結果|二見書房'); $('meta[name="description"],meta[property="og:description"],meta[name="twitter:description"]').attr('content', $('meta[name="description"]').attr('content')); } $('#pagenation,#search-result').remove(); $('#search-detail .result-heading').remove(); $('.filter-wrapper').remove(); $('.heading-right').remove(); } else { //meta-tag if ($('body').attr('category')) { if ($('body').attr('category') == 'search') { $('title').text('検索結果' + result_txt + '|二見書房'); $('meta[property="og:title"],meta[name="twitter:title"]').attr('content', '検索結果「' + query.search_value + '」|二見書房'); $('meta[name="description"],meta[property="og:description"],meta[name="twitter:description"]').attr('content', '「' + query.search_value + '」の検索結果です。'); } else { //$('title').text('カテゴリ - ' + category_name +'|二見書房'); $('meta[property="og:title"],meta[name="twitter:title"]').attr('content', $('title').text()); $('meta[name="description"],meta[property="og:description"],meta[name="twitter:description"]').attr('content', $('meta[name="description"]').attr('content')); } } else { } $('#no-result,#search-detail').remove(); } response.books.forEach(function(bk, idx) { var show_book_product; if (bk.last_content === null) { show_book_product = bk.first_content; } else { show_book_product = bk.last_content; } if (show_book_product) { if (bk.begin_at.substr(0, 10) == show_book_product.begin_at.substr(0, 10) && ((currentTime - new Date(bk.begin_at.substr(0, 10))) / 86400000 ) <= 30) { //同日なら[新作品]表示 var badges = bk.badge.split(','); if (badges.indexOf('分冊') != -1) { show_book_product.title = '新作品' + show_book_product.title; response.books[idx].title = '新作品' + response.books[idx].title; } } } }); var result_list = new Vue({ el: "#search-result-list", data: { books: response.books }, mounted: function(){ initLazyload(); } }); var pages = []; var prev_btn = getUrlChangeParam('page=' + ( page - 1)); var next_btn = getUrlChangeParam('page=' + ( page + 1)); if (( page - 1 ) < 1 || response.page_total < 2) { prev_btn = ''; } if (( page + 1 ) > response.page_total || response.page_total < 2 ) { next_btn = ''; } if (response.page_total >= 2) { for (var i = 1; i <= response.page_total; i++ ) { var json = '{"label": "' + i + '", "class": "' + (page == i ? 'is-active' : '') + '", "url":"' + getUrlChangeParam('page=' + i) + '"}'; pages.push(JSON.parse(json)); } } var side = 1; var tmp_cnt = 0; if (response.page_total > 7) { pages.forEach(function(elem, index){ var counter = index + 1; if (counter != 1 && counter != response.page_total && counter != page && Math.abs(page - counter) > side ) { //if((counter >= page && response.page_total - counter >= 4 && response.page_total - counter <= 2) || (counter < page && response.page_total - counter <= 4 && response.page_total - counter > 2)) { if(Math.abs(counter - page) <= side) { } else if(counter == 2 || counter == response.page_total - 1) { elem.class = elem.class + ' is-omit'; tmp_cnt++; } else { elem.class = elem.class + ' is-hide'; tmp_cnt++; } } }); if (response.page_total - tmp_cnt < 5) { for (var i = page - ( side + 1); i <= page + (side + 1); i++) { if (i >= 1 && i <= response.page_total ) { pages[i-1].class = (pages[i-1].class).replace(' is-hide', ''); } } } } var pagination_template = new Vue({ el: "#pagenation", data: { pages:pages, prev: prev_btn, next: next_btn } }); }) .fail(function(xhr) { $('#search-result').remove(); }) .always(function(xhr, msg) { $('.first-hidden').removeClass('first-hidden'); }); } else { $('#search-result-outer,#no-result').remove(); $('.breadcrumb-item.is-active a').text('詳細検索'); } } //お知らせページ送り構築 if ($('#pagenator').length > 0) { var page = $('#pagenator').data('page-current'); var page_total = $('#pagenator').data('page-total'); var pages = []; var prev_btn = getUrlChangeParam('page=' + ( page - 1)); var next_btn = getUrlChangeParam('page=' + ( page + 1)); if (( page - 1 ) < 1 || page_total < 2) { prev_btn = ''; } if (( page + 1 ) > page_total || page_total < 2 ) { next_btn = ''; } if (page_total >= 2) { for (var i = 1; i <= page_total; i++ ) { var json = '{"label": "' + i + '", "class": "' + (page == i ? 'is-active' : '') + '", "url":"' + getUrlChangeParam('page=' + i) + '"}'; pages.push(JSON.parse(json)); } } var side = 1; var tmp_cnt = 0; if (page_total > 7) { pages.forEach(function(elem, index){ var counter = index + 1; if (counter != 1 && counter != page_total && counter != page && Math.abs(page - counter) > side ) { if(Math.abs(counter - page) <= side) { } else if(counter == 2 || counter == page_total - 1) { elem.class = elem.class + ' is-omit'; tmp_cnt++; } else { elem.class = elem.class + ' is-hide'; tmp_cnt++; } } }); if (page_total - tmp_cnt < 5) { for (var i = page - ( side + 1); i <= page + (side + 1); i++) { if (i >= 1 && i <= page_total ) { pages[i-1].class = (pages[i-1].class).replace(' is-hide', ''); } } } } var paginator_template = new Vue({ el: "#pagenator", data: { pages:pages, prev: prev_btn, next: next_btn } }); } //マイページ(閲覧履歴) if (location.pathname == '/mypage') { // 履歴 var query = JSON.parse('{}'); query.key = book_api_key; query.token = get_token(); query.search_type = 'history'; query.num = '20'; query.column_option = column_option_default; $.ajax({ url: book_api_url_root + '/api/books', type: 'get', cache: false, dataType:'json', data:query }) .done(function(response) { //response.books = response.books.reverse(); response.books.forEach(function(element, idx){ response.books[idx].image_url = convertR18Thum(element.image_url); }); var result_list = new Vue({ el: "#history", data: { books: response.books }, mounted: function(){ initLazyload(); } }); }) .fail(function(xhr) { }) .always(function(xhr, msg) { }); // お気に入り var query = JSON.parse('{}'); query.key = book_api_key; query.token = get_token(); query.search_type = 'bookmark'; query.sort_type = 'bookmark_desc'; query.column_option = column_option_default; query.num = '20'; $.ajax({ url: book_api_url_root + '/api/books', type: 'get', cache: false, dataType:'json', data:query }) .done(function(response) { response.books.forEach(function(element, idx){ response.books[idx].image_url = convertR18Thum(element.image_url); }); var result_list = new Vue({ el: "#bookmark", data: { books: response.books }, mounted: function(){ initLazyload(); } }); }) .fail(function(xhr) { }) .always(function(xhr, msg) { }); } }); methods: { window: onload = function () { //成人チェック $(document).on('click', '.js-btn-adult', function(event){ if ($.cookie(cookie_name)) { return true; } else { event.preventDefault(); $('.js-set-cookie-then-read-book').attr('href', $(this).attr('href')); modalShow('#age-verification-modal'); return false; } }); //COOKIEセットしてリンクする $(document).on('click', '.js-set-cookie-then-read-book', function(){ setCustomHistory(); $.cookie(cookie_name, '1', { path: "/", expires: cookie_expires, secure: true }); var url = $(this).attr('href'); location.hef = url; }); // お知らせページのtableをscrolableにする $('.info-detail-body table').each(function(index, element){ $(element).wrap('