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();
}