/** * * かんたんお気に入り * 必要なjs jquery * **/ var girlsFavorite = { data_name : "favorite", //localStorage データ名 max_len : 100, //保存数 各エリア全店共通で使う予定 (ドメイン統合後) btn_name : ".favorite_btn", //登録ボタン data_elem : "data-favorite", //data属性名 clear_btn : '.favorite_clear_btn', //全て削除ボタン delete_btn : '.favorite_delete_btn', //全て削除ボタン //------------------ //init (btn処理) //------------------ init : function(){ 'usr strict'; //localStorage.clear(); //localstrage使えるか var ls_check = this.lsCheck(); if(!ls_check){ $(btn_name).hide(); return false; } this.setFavoriteStatus(); }, //------------------ //お気に入り状態セット //------------------ setFavoriteStatus : function(){ 'usr strict'; var that = this; const storage_data = this.getFavorite(); $(this.btn_name).each(function(){ var elem_data = $(this).attr(that.data_elem); var in_number = jQuery.inArray(elem_data,storage_data); //クリックメソッドに渡す引数 var click_param = { key : in_number, storage : storage_data, id : elem_data, that : that }; $(this).off('click'); //登録されてる場合 if(in_number !== -1){ $(this).addClass("is-favorite"); that.changeFavotiteText(elem_data,"かんたんお気に入りに登録中です"); $(this).on("click",click_param,that.removeClick); //未登録の場合 }else{ $(this).removeClass("is-favorite"); that.changeFavotiteText(elem_data,"かんたんお気に入り"); $(this).on("click",click_param,that.registerClick); } }); }, //------------------ //登録 //------------------ registerClick : function(event){ 'usr strict'; var that = event.data.that; if(!event.data.storage){ event.data.storage = []; } event.data.storage.unshift(event.data.id); //const slice_data = event.data.storage.slice(0,that.max_len); const slice_data = event.data.storage; if(girlsFavorite.setLocalStorage(slice_data)){ that.setFavoriteStatus(); }else{ //error that.RegistrationError(); } }, //------------------ //解除 //------------------ removeClick : function(event){ 'usr strict'; var that = event.data.that; delete event.data.storage[event.data.key]; if(girlsFavorite.setLocalStorage(event.data.storage)){ that.setFavoriteStatus(); }else{ //error that.RegistrationError(); } }, //------------------ //テキスト切り替え //------------------ changeFavotiteText : function(elem,text){ 'usr strict'; const elem_name = ".favorite-text-" + elem; $(elem_name).css("opacity",0); $(elem_name).animate({ "opacity":1, },600); $(elem_name).text(text); }, //----------------- //setItem //----------------- setLocalStorage : function(data){ 'usr strict'; try{ localStorage.setItem(this.data_name,JSON.stringify(data)); return true; }catch(e){ console.error(e); return false; } }, //----------------- //get データを取得 //----------------- getFavorite : function(){ var data = localStorage.getItem(this.data_name); if(data){ return JSON.parse(data); } //return JSON.parse(localStorage.getItem(this.data_name)); }, //----------------- //登録エラー //----------------- RegistrationError : function(data){ alert("エラーが発生して登録できませんでした。"); }, //------------------ //退店者削除 //------------------ deleteMoveData : function(data){ 'usr strict'; var strage_data = this.getRecent(this.data_name); for(var key in strage_data){ if(data.indexOf(strage_data[key]) === -1){ delete strage_data[key]; } } this.setLocalStorage(strage_data); }, //------------------ //localstrage使えるか //------------------ lsCheck : function(){ 'usr strict'; try{ if(typeof localStorage == 'undefined'){ return false; }else if(window.localStorage){ //detect IE10 and private mode } }catch(e){ return false; } return true; }, //------------------ //favoritePageInit (お気に入りページ init) //------------------ favoritePageInit : function(){ 'usr strict'; var that = this; var ls_check = this.lsCheck(); if(!ls_check){ return false; } var data = this.getFavorite(); this.sendAsyncData(data); //全て削除ボタン $(this.clear_btn).on("click",function(){ localStorage.removeItem(that.data_name); that.favoritePageInit(); }); //各削除ボタン $(".favorite_loader").on('click',this.delete_btn,function(){ var data = $(this).attr("data-favorite"); that.deleteFavorite(data); }); }, //------------------ //各削除 //------------------ deleteFavorite : function(data){ var strage_data = this.getFavorite(); strage_data = strage_data.filter(function(v){ return v != data; }); this.setLocalStorage(strage_data); this.favoritePageInit(); }, //------------------ //お気に入りページ ajaxデータ送信 //------------------ sendAsyncData : function(data){ var get_data = this.GetQueryString(); var send_data = { mode : "async", girl : data, }; $.extend(send_data, get_data); $.ajax({ type : 'POST', url : 'index.php', data : send_data, }).error(function(error){ $(".favorite_loader").html("データがありません"); }).done(function(result){ if(result){ $("#loading").hide(); $(".favorite_loader").html(result); } }); }, /*---------------------------------- GET取得 -----------------------------------*/ GetQueryString : function(){ var result = {}; if( 1 < window.location.search.length ){ var query = window.location.search.substring(1); var parameters = query.split('&'); for( var i = 0; i < parameters.length; i++ ){ var element = parameters[ i ].split('='); var paramName = decodeURIComponent(element[0]); var paramValue = decodeURIComponent(element[1]); result[ paramName ] = paramValue; } } return result; } }