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 = `
  • {{ badge }}

  • {{ author.name }}
試し読み
`; 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('
'); }); //スムーズなページ内リンク $('a[href^="#"]').click(function() { var href= $(this).attr("href"); var target = $(href); var position = target.offset().top; $('body,html').stop().animate({scrollTop:position}, 250); return false; }); //選択済みのプルダウンにstyleをあてる $('select').on('change', function(){ $(this).addClass('is-active'); }); //フォーム項目のvaridation $('[rule]').on('change', function(){ var varidate = checkFormValue(this); if (!varidate) { $(this).parents('.contact-form-item').addClass('is-error'); } else { $(this).parents('.contact-form-item').removeClass('is-error'); } }); //Enterによるsubmit制御 $('.form-contact input').on('keydown', function(e) { if ($(this).attr('type') == 'search') { return true; } else { if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) { return false; } else { return true; } } }); //郵便番号から住所の自動入力 $('.js-zipaddress').on('keyup change', function(e){ if(!([8, 46].includes(e.keyCode))){ var that = this; var input_code = $(this).val().replace(/[^0-9]/g, ''); if(input_code.length > 2) input_code = input_code.slice(0, 3) + '-' + input_code.slice(3, 7); $.getJSON('https://api.zipaddress.net?callback=?', {'zipcode': input_code}, function(json){ $($(that).data('pref')).val(json.pref).trigger('change'); $($(that).data('address')).val(json.address); }); } }); // 確認モーダルを開く(+開く前に項目チェック) $(document).on('click', '.js-open-confirm-modal', function(){ var require_length = $('[require="true"]').length; var is_first_error = true; var count_error = 0; var agree = $('.form-contact #form-agree'); if (!checkFormValue(agree)) { agree.parents().addClass('is-error'); } else { agree.parents().removeClass('is-error'); } if ($(this).hasClass('disabled')) { return false; } else { var form = $(this).parents('form'); $('[rule]').each(function(index, element){ var varidate = checkFormValue(element); if (!varidate) { count_error++; $(element).parents('.contact-form-item').addClass('is-error'); if (is_first_error) { $('html,body').animate({scrollTop:$(element).offset().top - ($('.header').outerHeight() + $('.contact-form-heading').outerHeight() + 30) }); $(element).focus(); is_first_error = false; } } else { $(element).parents('.contact-form-item').removeClass('is-error'); } }); } //確認モーダルの構築 if($('#js-recaptcha').length >= 1){ if(!flg_recaptcha){ return false; } } if (count_error == 0) { var key, val; var skip_element_name = ['form-agree']; $('#confirm-modal.js-modal .modal-body-inner-confirm').html(''); $('.form-contact [name]').each(function(index, element){ if (skip_element_name.indexOf($(element).attr('id')) == -1 && $(element).attr('type') != 'hidden' && $(element).hasClass('form-warning-border')) { key = $(element).parents('.contact-form-item').find('.contact-form-heading-txt').text(); val = $(element).val(); if (val == '' || val === null) { val = '-'; } $('#confirm-modal.js-modal .modal-body-inner-confirm').append('
'+stripTags(key)+'
'+stripTags(val)+'
'); } }); modalShow('#confirm-modal'); } }); // 規約にチェックを入れないとsubmitできない $('.form-contact').on('change', function(){ var form = this; if ($('.form-contact #form-agree:checked').length > 0) { $(this).addClass('is-agree'); //$('.btn-form-confirm').removeClass('disabled'); } else { $(this).removeClass('is-agree'); //$('.btn-form-confirm').addClass('disabled'); } }); // お気に入り登録ボタン $(document).on('click', '.js-btn-add-boommark', function(){ //$(this).addClass('is-loading'); $('body').attr('data-id', $(this).attr('data-id')); if ($(this).hasClass('is-active')) { modalShow('#delete-bookmarks-modal'); } else { addBookmark($(this).attr('data-id')); } }); //履歴を削除するボタン $(document).on('click', '.js-btn-clear-history', function(){ modalShow('#clear-history-modal'); }); // IEにobjectfit適用(要ofi.js) var ua = window.navigator.userAgent.toLowerCase(); var isIE = (ua.indexOf('msie') >= 0 || ua.indexOf('trident') >= 0); if (isIE) { $('.js-ofi').each(function(index, element){ var fit = $(element).attr('data-fit') || 'cover'; $(element).css('font-family', "'object-fit: " + fit + ";'"); }); objectFitImages('.js-ofi'); //$('body').append(''); } // 上にスクロールする表示されるヘッダー var hd_size = $('.header').innerHeight(); //ヘッダーの高さを取得 var pos = 0; $(window).on('scroll', function () { if(!$('.js-menu-openner').hasClass('is-active')) { var current_pos = $(this).scrollTop(); //現在の位置を取得 if (current_pos < pos || current_pos <= 0 || current_pos <= (window.innerHeight * 0.3 )) { //上にスクロール もしくは 最上部 $('.header').css({ 'top': 0 }); //ヘッダーを表示 $('.js-menu-openner').css({'top': "10px"}); } else { $('.header').css({ 'top': '-' + ( hd_size + 100 )+ 'px' }); //ヘッダーを非表示(下にスクロール) $('.js-menu-openner').css({ 'top': '-' + ( hd_size + 100 + 20 )+ 'px' }); //ヘッダーを非表示(下にスクロール) } pos = current_pos; } }); //検索BOX入力中のキャンセルボタン「×」制御 if( $('.search-input').length > 0 ) { if($('.search-input').val() != '' ) { $('.header-search-container').addClass('not-blank'); } } $('.search-input').on('focus', function () { $(this).toggleClass('is-active'); }).on('blur', function () { $(this).toggleClass('is-active'); }).on('input', function () { var keyword = $(this).val(); if (keyword == '') { $(this).parents('.header-search-container').removeClass('not-blank'); } else { $(this).parents('.header-search-container').addClass('not-blank'); } }); //検索BOXキャンセルボタン「×」をタップしたときの挙動 $('.js-search-cancel').on('click', function () { $(this).parents('.header-search-container').find('.search-input').val('').focus(); $(this).parents('.header-search-container').removeClass('not-blank'); }); //ページTOPへスクロールするボタン $('.js-scroll-top').on('click', function () { $('html,body').animate({ scrollTop: 0 }, 500); }); //グローバルメニュー開け閉め $('.js-menu-openner').on('click', function(){ $(this).toggleClass('is-active'); if ($(this).hasClass('is-active')) { $('.sp-menu').addClass('is-active'); } else { $('.sp-menu').removeClass('is-active'); } }); //グローバルメニュー閉じる $('.js-menu-closer').on('click', function(){ $('.js-menu-openner').click(); }); //モーダル開く $('.js-open-modal').on('click', function(){ var target = $(this).attr('target'); modalShow(target); }); //モーダル閉じる $('.js-close-modal').on('click', function(){ closeModal(); }); //書店リンクを別ウィンドウで開く $(document).on('click', '.store-link-item', function(event){ $(this).off(); event.preventDefault(); var link = $(this).attr('data-href'); window.open(link); //計測タグを踏む var store_name = $(this).find('img').attr('alt'); var book_title = $('body').attr('data-book-title'); //gtag('event', 'click', {'event_category': 'Outbound Links','event_label': store_name,'value': '1','non_interaction': 'true'}); gtag('event', 'Outbound Links', {'event_category': store_name,'event_label': book_title,'value': '1','non_interaction': 'true'}); }); $(document).on('change', '#detail-switch', function(){ if ($(this).prop('checked')) { setTimeout(function(){ $('.detail-discription-txt').css({ "-webkit-line-clamp": "4", "max-height": "calc( 72px + 1em )" }); }, 10); setTimeout(function(){ $('.detail-discription-txt').css({ "-webkit-line-clamp": "5", "max-height": "calc( 72px + 2em )" }); }, 20); setTimeout(function(){ $('.detail-discription-txt').css({ "-webkit-line-clamp": "6", "max-height": "calc( 72px + 3em )" }); }, 30); setTimeout(function(){ $('.detail-discription-txt').css({ "-webkit-line-clamp": "7", "max-height": "calc( 72px + 4em )" }); }, 40); setTimeout(function(){ $('.detail-discription-txt').css({ "-webkit-line-clamp": "1000", "max-height": "10000px" }); }, 50); } else { $('.detail-discription-txt').css({ "-webkit-line-clamp": "3", "display": "-webkit-box", "max-height": "72px" }); } }); } } /** PC-touchscroll */ function initScrollable() { if ($('.js-scrollable').length > 0) { $('.js-scrollable').each(function(index, element){ var child_width = 0; $('.js-scrollable').children().each(function(index, element){ child_width = child_width + parseInt($(element).outerWidth()); }); $(element).draggable({ axis:"x", stop: function(){ var element_left = parseInt($(this).css('left')); var min_left = parseInt(window.innerWidth) - parseInt($(element).parent().parent().offset().left) - child_width - 200; if (element_left > 0) { $(this).animate({"left":"0px"}, 250); } else if (element_left < min_left) { $(this).animate({"left":"0px"}, 250); } } }); }); } } $(document).on('click', '.btn-submit-modal,.btn-search-submit', function(){ //$(this).addClass('pointer-events-none'); }); $(document).on('click', '.js-open-next-url-ss', function(event){ event.preventDefault(); var href = $(this).attr('href'); //iframeかどうか? if(window == window.parent) { setCustomHistory(); location.href = href; } else { parent.location.href = href; } return false; }); /* 閲覧履歴の全削除 */ function clearHistory() { var type = 'delete'; var url = book_api_url_root + '/api/user/histories'; $.ajax({ url: url, type: type, cache: false, dataType:'json', data:{ key: book_api_key, token: get_token() } }) .done(function(response) { if ( response.success ) { $('.js-btn-clear-history').fadeOut(300); $('#history .list .comic-item').fadeOut(300).queue(function() { $('.recycle').append($(this)); $('#history .list').attr('data-count', 0); }); } }) .fail(function(xhr) { alert('閲覧履歴の削除に失敗しました。\r\nしばらくしてからお試しください。'); return false; }) .always(function(xhr, msg) { closeModal(); }); } /* お気に入りの全削除 */ function deleteBookmark() { var book_id = $('body').attr('data-id'); var type = 'delete'; var url = book_api_url_root + '/api/user/book_bookmarks'; $.ajax({ url: url, type: type, cache: false, dataType:'json', data:{ key: book_api_key, token: get_token(), book_id: book_id } }) .done(function(response) { if( response.success ) { var listWrapper = $('#bookmark .list'); $('.js-btn-add-boommark[data-id="'+book_id+'"]').removeClass('is-active'); $('.js-bookmark-item[data-id="'+book_id+'"]').parents('.comic-item').fadeOut(300).queue(function() { this.remove(); $('.recycle').append($(this)); listWrapper.attr('data-count', listWrapper.children().length); }); } else { alert('お気に入り削除に失敗しました。\r\nしばらくしてからお試しください。'); } }) .fail(function(xhr) { alert('お気に入り削除に失敗しました。\r\nしばらくしてからお試しください。'); return false; }) .always(function(xhr, msg) { closeModal(); $('.js-btn-add-boommark[data-id="'+book_id+'"]').removeClass('is-loading'); }); } /* お気に入りへの追加 */ function addBookmark(book_id) { var type = 'post'; var url = book_api_url_root + '/api/user/book_bookmarks'; $.ajax({ url: url, type: 'post', cache: false, dataType:'json', data:{ key: book_api_key, token: get_token(), book_id: book_id } }) .done(function(response) { if( response.success ) { $('.js-btn-add-boommark[data-id="'+book_id+'"]').addClass('is-active'); } else { modalShow('#too-many-bookmarks-modal'); } }) .fail(function(xhr) { alert('bookmark登録に失敗しました。\r\nしばらくしてからお試しください。'); return false; }) .always(function(xhr, msg) { $('.js-btn-add-boommark[data-id="'+book_id+'"]').removeClass('is-loading'); }); } // フォーム1個それぞれのチェック function checkFormValue(target) { var rule = $(target).attr('rule'); var rule_reg = new RegExp(rule); var target_val = $(target).val(); if (target_val === null) { target_val = ''; } if (!target_val.match(rule_reg) || ($(target).attr('type') === 'checkbox' && !$(target).prop('checked'))) { if (!$(target).attr('require')) { $(target).attr('require', 'false'); } if ($(target).attr('require') == 'true') { return false; } else if(target_val == '') { return true; } else { return false; } } else { return true; } } function stripTags(text) { return text.replace(/(<([^>]+)>)/gi, '').replace(/\r?\n/g, '
').replace(/^
/g, ''); } function modalShow(target) { $('.js-modal-wrapper').eq(0).addClass('is-active'); $(target).addClass('is-active'); } function closeModal() { $('.js-modal').removeClass('is-active'); $('.js-modal-wrapper').removeClass('is-active'); } function initComicSlide() { if ($('.js-comic-slide-list').length > 0) { setTimeout(function(){ $('.js-comic-slide-list:not(.slick-slider)').slick({ autoplay: false, autoplaySpeed: 3000, accessibility: true, swipe: true, pauseOnHover: true, infinite: false, centerMode: false, slidesToShow: 4, slidesToScroll: 4, centerPadding: '40px', dots: true, prevArrow: '', nextArrow: '', responsive: [ { breakpoint: 1024, settings: "unslick" } ] }); }, 500); } } $(window).on('load', function(){ setTimeout(function(){ var widget = $('iframe[id^="twitter-widget"]'); if ( widget.length > 0 ) { var widgetContents = widget.contents(); widgetContents.find('head').append(''); } }, 1000); if (url_hash) { for( key in url_hash ) { if( url_hash.hasOwnProperty(key) ) { $('[name="' + key + '"]').val(url_hash[key]).trigger('change').addClass('is-active'); } } } }); $(window).on('load', function(){ setTimeout(function(){ var adjust = 15; var wrapper = $('.tab-link-list-wrapper'); if ($('.btn-sp-menu-openner').css('display') == 'none') { } else { if (wrapper.length > 0) { if (wrapper.find('.is-active').length > 0) { var scrLeft = wrapper.find('.is-active').offset().left - adjust; wrapper.scrollLeft(scrLeft); } } } },500); }); var lastWindowWidth = window.innerWidth * window.orientation; $(window).on('orientationchange resize', function () { if (lastWindowWidth != window.innerWidth) { /* if ($('.js-comic-slide-list').length > 0) { $('.js-comic-slide-list.slick-initialized').slick('unslick'); setTimeout(function(){ initComicSlide(); }, 300); lastWindowWidth = window.innerWidth * window.orientation; } */ } }); $(window).on('load orientationchange resize', function () { if ($('.tab-link-list-inner').length > 0) { $('.tab-link-list-inner').each(function(index, element){ if ($(element).get(0).scrollWidth > $(element).parent().width() ) { $(element).addClass('is-overflow'); } else { $(element).removeClass('is-overflow'); } $(element).get(0).scrollWidth; }); } }); function isObject( obj ) { return Object.prototype.toString.call( obj ) === "[object Object]" } var token_name = 'book_token'; function get_token() { var token_value; var token_value = $.cookie(token_name); if (token_value) { if (isObject(token_value)) { if (token_value.hasOwnProperty('book_token')) { token_value = token_value.book_token; } else { token_value = 'unknown'; } } return token_value; } else { //token_value = getRndStr(8) + '-' + getRndStr(4) + '-' + getRndStr(4) + '-' + getRndStr(4) + '-' + getRndStr(12); token_value = generateUuid(); $.cookie(token_name, token_value, { expires: 365 * 10, domain: document.domain, path: '/' }); return token_value; } } function generateUuid() { let chars = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split(""); for (let i = 0, len = chars.length; i < len; i++) { switch (chars[i]) { case "x": chars[i] = Math.floor(Math.random() * 16).toString(16); break; case "y": chars[i] = (Math.floor(Math.random() * 4) + 8).toString(16); break; } } return chars.join(""); } function getRndStr(len){ var base_str = "abcdefghijklmnopqrstuvwxyz0123456789"; var result = ""; for(var i=0;i 0) { return $('[data-hidden-query-'+name+']').attr('data-hidden-query-'+name); } if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return ''; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); } function getUrlChangeParam(replace_str, this_url) { var tmp_hash = ''; if(typeof this_url === 'undefined') this_url = location.href; if (this_url.indexOf('#') != -1) { tmp_hash = this_url.replace(/^.+#/, '#'); this_url = this_url.replace(/#.+$/, ''); } /* var tmp_array = replace_str.split('='); var url = new URL(this_url); if (tmp_array.length >= 2) { url.searchParams.set(tmp_array[0], tmp_array[1]); } return url.toString(); */ var tmp_array = replace_str.split('='); var param_key = tmp_array[0]; var param_val = tmp_array[1]; var pattern = '(\\?|\\&)' + param_key + '=[^\&]+'; if (this_url.indexOf('?') == -1) { return this_url + '?' + replace_str + tmp_hash; } else if(this_url.match(new RegExp(pattern))) { return this_url.replace(new RegExp(pattern), '$1' + replace_str) + tmp_hash; } else { return this_url + '&' + replace_str + tmp_hash; } } //最近チェックした作品へ登録 function pushLocalHistory(book) { var key = 'localhistory_' + get_token(); var history = localStorage.getItem(key); if (history === null) { history = '{"total":0,"books":[]}'; } history = JSON.parse(history); for (var i = history.books.length - 1; i >= 0; i--) { if (history.books[i].id == book.id) { history.books.splice(i, 1); } } history.books.push(book); if (history.books.length > 30) { history.books.shift(); } history.total = history.books.length; localStorage.setItem(key, JSON.stringify(history)); } //最近チェックした作品一覧取得 function getLocalHistory(id) { if(typeof id === 'undefined') id = ''; var key = 'localhistory_' + get_token(); var history = localStorage.getItem(key); if (history === null) { history = '{"total":0,"books":[]}'; } history = JSON.parse(history); for (var i = history.books.length - 1; i >= 0; i--) { var current = new Date(); var begin_at = new Date((history.books[i].begin_at).replace('-', '/')); var end_at = new Date((history.books[i].end_at).replace('-', '/')); if (history.books[i].id == id || ( current < begin_at || current > end_at )) { history.books.splice(i, 1); } } return history; } /* topics(関連情報)を整理する */ function initBookTopics(book) { if (book.topics_1.length > 0) { book.topics_1.forEach(function(topics, index) { if (topics.content === null) { } else { switch(topics.title) { case 'ISBN/雑誌コード': book.topics_1['isbn'] = topics.content; break; case '発売日': book.topics_1['sdate'] = (topics.content).replace(/-/g, '.'); break; case '定価': book.topics_1['price'] = Math.ceil( tax_rate * parseInt(topics.content)).toLocaleString(); break; default: } } }); } return book; } //書店リンクの部分構築 function initStorelinks(topics_4, topics_5) { topics_4 = linkEncodeForRenta (topics_4); topics_5 = linkEncodeForRenta (topics_5); topics_4 = linkEncodeForDMMAffiliate(topics_4); topics_5 = linkEncodeForDMMAffiliate(topics_5); if (topics_4.length == 0 && topics_5.length == 0) { $('.colophon-heading').css('opacity', '0'); if ($('.detail-body').length > 0) { $('.tab-wrap').hide(); } else { $('.tab-wrap').css('opacity', '0'); } } ////電子書籍書店 if (topics_4.length == 0) { $('#tab-ebook').attr('disabled', true); } //topics_4.sort(function(a, b){ // return a.id - b.id; //}); topics_4.forEach(function(elem, index){ if ($('#store-' + elem.title).length > 0) { elem.image_url = $('#store-' + elem.title).attr('data-src'); elem.name = $('#store-' + elem.title).attr('data-title'); } else { var logo_src = $('.header-logo-img').attr('src'); elem.image_url = logo_src.replace('mainlogo.svg', 'store-logo_' + elem.title+'.png'); elem.name = elem.title; } }); var ebookstore_list_template = new Vue({ el: "#store-link-list-ebook", data: { stores: topics_4 }, mounted: function(){ } }); ////紙書籍書店 if (topics_5.length == 0) { $('#tab-paper').attr('disabled', true); } //topics_5.sort(function(a, b){ // return a.id - b.id; //}); topics_5.forEach(function(elem, index){ if ($('#store-' + elem.title).length > 0) { elem.image_url = $('#store-' + elem.title).attr('data-src'); elem.name = $('#store-' + elem.title).attr('data-title'); } else { var logo_src = $('.header-logo-img').attr('src'); elem.image_url = logo_src.replace('mainlogo.svg', 'store-logo_' + elem.title+'.png'); elem.name = elem.title; } }); var paperstore_list_template = new Vue({ el: "#store-link-list-paper", data: { stores: topics_5 }, mounted: function(){ if (topics_4.length == 0 && topics_5.length > 0) { $('[for="tab-paper"]').click(); } } }); } function linkEncodeForRenta(topicks) { topicks.forEach(function(elem, index){ var link = elem.link; var link_param = getParam('word', link); if (link !== null) { if (link.match(/^(http|https):\/\/renta/) && link_param != '') { elem.link = getUrlChangeParam('word=' + EscapeEUCJP(link_param), link); } } }); return topicks; } function linkEncodeForDMMAffiliate(topicks) { return topicks; } function myShuffle(arr) { var n = arr.length; var temp, i; while (n) { i = Math.floor(Math.random() * n--); temp = arr[n]; arr[n] = arr[i]; arr[i] = temp; } return arr; } function getCategoryIdFromTitle(title) { for (var i = 0 ; i < top_category_array.length ; i++ ) { if (top_category_array[i].title == title) { return top_category_array[i].id; } } return false; } function convertR18Thum(url) { var base_src = $('.header-logo-img').attr('src'); base_src = base_src.substring(0, base_src.lastIndexOf('/')) + '/'; if (url) { url = url.replace(/^.+_r18\.jpg/, base_src + 'thum_r18.jpg'); } return url; } //一定量スクロールした $(window).on('load scroll', function () { //スクロール位置を取得 if ( $(this).scrollTop() < ($(window).height() * .25 ) ) { $('body').removeClass('is-scroll'); } else { $('body').addClass('is-scroll'); } }); function getCategoryNameFromId(id) { if (isNaN(id)) { return false; } var categoryName = top_category_array[id].name; if (categoryName) { return categoryName; } else { return false; } }