const inIframe = () => window.self !== window.top; if (mobile !== '1' && !inIframe()) { location.href = '/game'+gamen.intgid; } let promotion = {duplicate_check: false}; document.addEventListener('fullscreenchange', () => { if (document.fullscreenElement) { $('.wrap_lyto').addClass('full_screen'); $('.wrap_lyto_result').addClass('full_screen'); } else { $('.wrap_lyto').removeClass('full_screen'); $('.wrap_lyto_result').removeClass('full_screen'); } }); $(function() { // 클립보드 활성화 $('#gamecontainer').appendTo('#promotion_nick').hide(); new ClipboardJS('.clipboard'); window.logEvent(window.analytics, 'influencer_first_start'); if (typeof bgm_state === "undefined") { bgm_state = true; } if (typeof effect_state === "undefined") { effect_state = true; } promotion.ad_text = $('#promotion_before_ad .top_txt').html(); if (localStorage.getItem('play_ad') == null) { localStorage.setItem('play_ad', 0); } // 로그인 유저 닉네임 포함 if (typeof user_nick !== "undefined") { replace_nick = user_nick.replace(/^[0-9a-zA-Z가-힣ㄱ-ㅣ]+$/, ''); set_nick = ''; charBytes = 0; for (let i = 0; i < replace_nick.length; i += 1) { character = replace_nick.charAt(i); if (escape(character).length > 4) charBytes += 2; else charBytes += 1; if (charBytes > 12) { break; } set_nick += character; } $('#promotion_nick input').val(set_nick).focus() } }); // 클립보드에 카피 function copyToClipboard() { navigator.clipboard.writeText(prom_url).then(r => promotion.alert(share_msg)); } // 글자 바이트수 계산 function getBytes(str) { let character; let charBytes = 0; for (let i = 0; i < str.length; i += 1) { character = str.charAt(i); if (escape(character).length > 4) charBytes += 2; else charBytes += 1; } return charBytes; } // 닉네임 길이 계산 function checkNickLength(nick) { length = getBytes(nick); check = length <= 12; if (!check) { promotion.alert(nick_limit); return false; } let regex = /^[0-9a-zA-Z가-힣ㄱ-ㅣ]+$/; check = regex.test(nick); if (!check) { promotion.alert(nick_cond); return false; } return true; } // 닉네임 입력 완료 시 해당 창 닫고 게임 보여주기 function setNickPromotion() { promotion.nick = $('#promotion_nick input').val(); if (checkNickLength(promotion.nick)) { if (!promotion.nick.length) { promotion.alert(enter_nick); promotion.duplicate_check = false; } else if (!promotion.duplicate_check && typeof promotion.start_callback !== "undefined") { promotion.duplicate_check = true; $('#promotion_banner_ad_1').css('bottom', ''); $('#promotion_nick').fadeOut(); // 타이머로 순서 강제 정하기 setTimeout(() => { $('#gamecontainer').fadeIn(); promotion.start_callback(); window.logEvent(window.analytics, 'influencer_insert_nickname'); }, 100); } else { $('.popup_loading').show(); } } else { promotion.duplicate_check = false; } } // 게임 다시시작 시 초기화 promotion.replayGame = function() { if (window.google_ad_ready || Number(localStorage.getItem('play_ad')) >= 3) { $('#gamecontainer').hide(); $('#promotion_before_ad').hide(); $('#promotion_after_ad').hide(); $('.ranking_wrap').hide(); $('#promotion_nick').show(); promotion.duplicate_check = false; promotion.review_ad = false; } else { localStorage.setItem('play_ad', Number(localStorage.getItem('play_ad')) + 1); promotion.reload(); } } // 게임 페이지 다시 불러오기 promotion.reload = function() { location.replace(location.href); } // 게임에서 리소스 로딩 후 호출, callback 저장하고 게임 하이드 한 뒤, 닉네임 창 띄우기. promotion.gameStart = function(callback) { if (typeof callback !== "undefined") { $('#toolbarContainer').hide(); $('#gamecontainer').insertAfter('#promotion_nick'); $('.ad_area').show(); promotion.start_callback = callback; if ($('.popup_loading').is(':visible')) { $('.popup_loading').hide(); setNickPromotion(); } } } // 게임 종료 promotion.gameEnd = function(pid, score, callback, replay_callback) { $.ajax({ dataType: "json", type: 'post', data: { "p": 'end', "pid": pid, "nick": promotion.nick, "gid": gamen.gid, "score": score, }, url: '/rank', success: function(data) { if (data.result) { promotion.score = data.score; promotion.percent = data.percent; promotion.grade = data.grade; promotion.lang_1 = data.lang_1; promotion.lang_2 = data.lang_2; promotion.lang_3 = data.lang_3; promotion.grade_msg = data.grade_msg; promotion.score_txt = data.score_txt; promotion.share_msg = data.share_msg.replace(//mg,"\n"); window.logEvent(window.analytics, 'influencer_testcomplete'); $('#gamecontainer').hide(); $("#promotion_before_ad button").removeClass("fade_in"); $('.dot_loading').removeClass('_hide'); $('#promotion_before_ad').show(); $('#promotion_banner_ad_1').css('bottom', '-1000px'); $('#promotion_banner_ad_2').css('bottom', ''); $('#promotion_before_ad .top_txt').html(promotion.ad_text); $('#promotion_after_ad .nick').text(promotion.nick); // 3초 뒤 버튼 보여주기 setTimeout(function(){ $('#promotion_before_ad .top_txt').html(ad_result); $('.dot_loading').addClass('_hide'); $("#promotion_before_ad button").addClass("fade_in"); }, 3000); } callback(data); } }); } // 광고 다시보기 여부 체크 promotion.review_ad = false; // 광고 호출 promotion.afgAd = function(type, name, callback) { if (window.google_ad_ready) { window.logEvent(window.analytics, 'influencer_reward_request'); promotion.showAd(true, 'viewed'); // gamen.afgAd(type, name, callback); } else { callback(true, 'viewed'); } } // 광고 콜백 promotion.showAd = function(show, breakStatus) { if (breakStatus == "frequencyCapped" && !promotion.review_ad) { promotion.review_ad = true; setTimeout(() => { gamen.afgAd('reward', 'promotion_'+play_gid, promotion.showAd); }, 150); return; } else if (breakStatus == 'dismissed') { promotion.review_ad = false; promotion.alert(reward_no_view); return; } else if (breakStatus == 'viewed') { window.logEvent(window.analytics, 'influencer_reward_impression'); } else if (!promotion.review_ad) { promotion.review_ad = true; promotion.alert(reward_no_view); return; } promotion.review_ad = false; console.log(promotion); $('#promotion_banner_ad_2').css('bottom', '-1000px'); $('#promotion_before_ad').fadeOut(); $('#promotion_score').text(promotion.score_txt+'!'); $('#my_result .txt_2').html('' + promotion.lang_1 + ''); $('#my_result .txt_1').html('' + promotion.lang_2 + ''); $('#my_result .txt_3').html('' + promotion.lang_3 + ''); $('#my_result').css('background-image', 'url('+IMG_SERVER+'/renew_gamen/promotion/brainrunning_influencer_'+promotion.grade+'.png?CDN=1)'); $('#promotion_after_ad').fadeIn(); saveImage(); window.logEvent(window.analytics, 'influencer_result'); $('.ranking_wrap').show(); if (typeof fnLoadRanking !== "undefined") { $('body').css('overflow', ''); fnLoadRanking(1, true); } } // 이미지 저장 (base64) saveImage = function() { html2canvas(document.querySelector(".result_area"), { allowTaint: true, useCORS: true, }).then(canvas => { const date = new Date().getTime(); const dataUrl = canvas.toDataURL('image/png'); const fileName = 'image_share_' + date + '.png'; const file = base64ToFile(dataUrl, fileName); if (file !== "undefined") { promotion.scrap_image = file; if (typeof promotion.share_social !== "undefined") { $('.popup_loading').hide(); promotion.gameShare(promotion.share_social); delete promotion.share_social; } // const el = document.createElement('a'); // el.setAttribute('id', 'prom_save_image'); // el.href = dataUrl; // el.download = fileName; // // promotion.saveEl = el; } }); } // base64 -> 파일 저장 base64ToFile = function(dataUrl, fileName) { var arr = dataUrl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], fileName, {type: mime}); } // 결과화면 모든 결과 보여주기 promotion.showAllResult = function(show) { if (show) { $('.popup_all_result').show(); } else { $('.popup_all_result').hide(); } } // SNS 공유하기 시 이미지 저장 promotion.gameShare = function (social) { if (typeof promotion.scrap_image === "undefined") { promotion.share_social = social; $('.popup_loading').show(); return; } if (typeof promotion.upload_image === "undefined") { let formData = new FormData(); formData.append('image', promotion.scrap_image); formData.append('gid', play_gid); $.ajax({ dataType: "json", type: "post", processData: false, contentType: false, data: formData, url: "/promotion", success: function (data) { if (data.result) { promotion.upload_image = data.uploadURL; gameShare(social); } } }); } else { gameShare(social); } } // SNS 공유하기 타입별 proc gameShare = function(social) { if (typeof promotion.upload_image === "undefined") { $('.popup_loading').show(); return; } $('.popup_loading').hide(); switch (social) { case 'kakao': window.logEvent(window.analytics, 'influencer_kakao_share'); Kakao.Share.sendDefault({ objectType: 'feed', content: { title: share_title, description: promotion.share_msg, imageUrl: promotion.upload_image, imageWidth: 600, imageHeight: 480, link: { mobileWebUrl: prom_url, webUrl: prom_url, }, }, installTalk: true, buttons: [ { title: prom_btn, link: { mobileWebUrl: prom_url, webUrl: prom_url, }, } ] }); break; case 'twitter': result = window.open('https://twitter.com/intent/tweet?url='+encodeURIComponent(prom_url)+'&img='+encodeURIComponent(promotion.upload_image)+'&text='+encodeURIComponent(promotion.share_msg)+'&t='+encodeURIComponent(share_title), 'sharer', 'toolbar=0,status=0'); if (!result) { window.logEvent(window.analytics, 'influencer_x_share'); promotion.alert(popup_msg); } break; case 'facebook': result = window.open('https://www.facebook.com/dialog/feed?app_id='+facebook_app_id+'&display=popup&link='+encodeURIComponent(prom_url)+'&redirect_uri='+prom_url+'&source='+promotion.upload_image, 'sharer', 'toolbar=0,status=0'); if (!result) { promotion.alert(popup_msg); } break; case 'url': window.logEvent(window.analytics, 'influencer_link_copy'); copyToClipboard(); break; case 'instagram': (async () => { const response = await fetch(promotion.upload_image); const blob = await response.blob(); const filesArray = [ new File([blob], promotion.upload_image, { type: 'image/png', lastModified: new Date().getTime(), }), ]; const shareData = { title: share_title, text: promotion.share_msg+'\r\n'+prom_url, files: filesArray, }; if (navigator.canShare && navigator.canShare(shareData)) { await navigator.share(shareData); } })().then(r => window.logEvent(window.analytics, 'influencer_insta_share')); break; } } promotion.alert = function(text) { $('.popup_alert p').html(text); $('.popup_alert').show(); }