';
if(!settingArr.install_link){
if(spJQuery(document).find(".install_page").length == '0'){
spJQuery(document).find('body').addClass("pwa_install_div");
spJQuery(document).find('body').append(installMsg);
}
timeTimeOutSet = setTimeout(function () {
spJQuery(document).find('body').removeClass("pwa_install_div");
spJQuery(document).find(".install_page").hide();
}, 30000);
}
}
function displayTimeInstallMsg(){
var displayAfter = 1;
if(PWAJson.install_message.display_after){
displayAfter = PWAJson.install_message.display_after;
}
var displayMsg = parseInt(displayAfter) * parseInt(1000);
setTimeout(function () {
showAddToHomeScreen();
}, displayMsg);
}
/*PWA app install/dismissed status save in db*/
var SPajaxProgress = null;
function saveAppinstall(status){
/*google analytics start*/
if(status == "installed") {
if(deviceCheck == 'IOS'){
googleAnaltics(gaFbActionArr.iOS_install,gaLableArr.iOS_install);
fbAnaltics(gaFbActionArr.iOS_install,fbTrack.iOS_install);
} else if(deviceCheck == 'android'){
googleAnaltics(gaFbActionArr.android_install,gaLableArr.android_install);
fbAnaltics(gaFbActionArr.android_install,fbTrack.android_install);
}
} else if(status == "dismissed"){
if(deviceCheck == 'IOS'){
googleAnaltics(gaFbActionArr.iOS_dismissed,gaLableArr.iOS_dismissed);
fbAnaltics(gaFbActionArr.iOS_dismissed,fbTrack.iOS_dismissed);
} else if(deviceCheck == 'android'){
googleAnaltics(gaFbActionArr.android_dismissed,gaLableArr.android_dismissed);
fbAnaltics(gaFbActionArr.android_dismissed,fbTrack.android_dismissed);
}
}
/*google analytics end*/
if (SPajaxProgress) {
SPajaxProgress.abort();
}
SPajaxProgress = spJQuery.post(ProxyAjaxUrl, {
action:'saveInstallPWA',
shop: PWA_shop,
install_status : status,
device_id:PWA_setUserDevice(),
browser:PWA_getBrowser(),
timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,
device_type:getMobileOperatingSystem(),
customer_id:PWA_getCustId(),
path_url:window.location.href,
}, function(data, status){
});
}
/*ios install check*/
function getUseriOSInstall(){
var iOSUserInstall = localStorage.getItem("iOS_installed");
if (iOSUserInstall) {
return iOSUserInstall;
} else {
return false;
}
}
/*get device type */
function PWA_getDevice() {
const navigatorAgent = navigator.userAgent;
if (navigatorAgent.match(/mobile/i)) {
return 'mobile';
} else if (navigatorAgent.match(/iPad|Android|Touch/i)) {
return 'tablet';
}
return 'desktop';
}
/*cokkie set device id*/
function PWA_setUserDevice() {
var curUserDevice = localStorage.getItem("sp_pwa_user_device_id");
if (curUserDevice == undefined || curUserDevice == null) {
localStorage.setItem("sp_pwa_user_device_id", PWA_device_id);
return PWA_device_id;
} else {
return curUserDevice;
}
}
/*get browser type*/
function PWA_getBrowser(){
const navigatorAgent = navigator.userAgent;
if ((navigatorAgent.indexOf('OPR') !== -1) || (navigatorAgent.indexOf('Opera') !== -1)){
return 'Opera'
} else if (navigatorAgent.indexOf('Chrome') !== -1){
return 'Chrome';
} else if (navigatorAgent.indexOf('Safari') !== -1){
return 'Safari';
} else if (navigatorAgent.indexOf('Firefox') !== -1){
return 'Firefox';
} else if ((navigatorAgent.indexOf('MSIE') !== -1) || (navigatorAgent.indexOf('Trident') !== -1)){
return 'Microsoft Internet Explorer';
} else {
return 'Unidentified browser';
}
}
function PWA_getCustId() {
if (window.meta && window.meta.page && window.meta.page.customerId) {
return window.meta.page.customerId;
} else {
return null;
}
}
/*generate device id*/
function PWA_uuidv4() {
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)
}
/*customized install message cookie check and set*/
function setCookieInstallClose(){
var flag = 0;
var cookieValue = PWA_getCookie('installMsgCookie');
if(cookieValue == ''){
var expires = 24;
if("trigger" in PWAJson.install_message){
var triggerValue = PWAJson.install_message.trigger;
if(triggerValue == "never"){
expires = 8760;
} else {
expires = triggerValue;
}
}
var date = new Date();
PWA_setCookie('installMsgCookie', date.toUTCString(), expires);
flag = 1;
}
return spJQuery.trim(flag);
}
function androidInstallPopupShow(){
if(deferredPrompt !== undefined) {
deferredPrompt.prompt();
deferredPrompt.userChoice.then(function(result) {
if(result.outcome === 'dismissed'){
if(isDismissedInstallMsg === false){
var result = 'dismissed';
saveAppinstall(result);
isDismissedInstallMsg = true;
}
setCookieInstallClose();
}
deferredPrompt = null;
});
}
}
function defaultiOSinstallStepsShow(){
var previewHtml = iOSdefaultPreviewHTML(false);
installMsg = `
${previewHtml}
`;
spJQuery(document).find('body').addClass("pwa_install_div");
spJQuery(document).find('body').append(installMsg);
timeTimeOutSet = setTimeout(function () {
spJQuery(document).find('body').removeClass("pwa_install_div");
spJQuery(document).find(".install_page").hide();
}, 30000);
}
function iOSdefaultPreviewHTML($isHide = true){
var spiosStepImage = "ios_default_screen.png";
var hideStyle = ($isHide === true) ? "style='display:none'" : "";
var iosStepArr={title : "Follow these instructions to get PWA for your iOS device",
btn_text : "Got it!",
steps : { first :{ title : "1. Press the share button"},
second :{ title : "2. Select 'Add to Home Screen'",
sub : {find_page : "Find on Page", add_home: "Add to Home Screen" } },
third :{ title : "3. Press the 'Add' button",
sub : {add_home : "Add to Home Screen", cancel: "Cancel", add: "Add" } },
},
};
var iosBtnText = iosStepArr.btn_text;
var iosStepsHeading = iosStepArr.title;
var iosSPstep = iosStepArr.steps;
if("iOS_steps" in PWAJson){
iosStepsHeading = PWAJson.iOS_steps.title;
iosBtnText = PWAJson.iOS_steps.btn_text;
if("steps" in PWAJson.iOS_steps){
iosSPstep = PWAJson.iOS_steps.steps;
}
}
var imageNameSp = PWA_SPSITE_URL+"/admin/assets/image/"+spiosStepImage;
var html = `
${iosStepsHeading}
${iosSPstep.first.title}
${iosSPstep.second.title}
${iosSPstep.second.sub.find_page}
${iosSPstep.second.sub.add_home}
${iosSPstep.third.title}
${iosSPstep.third.sub.cancel}
${iosSPstep.third.sub.add_home}
${iosSPstep.third.sub.add}
`;
return html;
}
function PWA_setCookie(cname, cvalue, exhours) {
var d = new Date();
d.setTime(d.getTime() + (exhours * 3600 *1000));
var expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function PWA_getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i ";
PWA_push_html += "" ;
spJQuery("body").append(PWA_push_html);
}
}
function PWA_triggerSubscriptionChange() {
var f = false;
if (Notification.permission === 'granted'){
PWA_SPPA_swRegistration.pushManager.getSubscription().then(subscription => {
if (subscription) {
f = true;
}
}).then(() => {
if (!f) {
const applicationServerKey = PWA_urlB64ToUint8Array(PWA_applicationServerPublicKey);
return PWA_SPPA_swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: applicationServerKey
});
}
}).then(subscription => {
PWA_updateSubscriptionOnServer(subscription);
});
}
}
function PWA_subscribeUser() {
if (Notification.permission === 'default' || PWA_recall == true) {
const PWA_applicationServerKey = PWA_urlB64ToUint8Array(PWA_applicationServerPublicKey);
PWA_SPPA_swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: PWA_applicationServerKey
})
.then(function(subscription) {
PWA_updateSubscriptionOnServer(subscription);
PWA_sp_isSubscribed = true;
spJQuery(document).find(".sp_push").hide();
})
.catch(function(err) {
});
}
}
function PWA_updateOnServer() {
if (Notification.permission === 'denied') {
PWA_updateSubscriptionOnServer(null);
return;
}
}
function PWA_askForSubscribePush(){
if (Notification.permission !== 'granted') {
Notification.requestPermission().then(function(data) {
if (data === 'granted') {
PWA_recall = true;
PWA_subscribeUser();
}
});
} else {
PWA_triggerSubscriptionChange();
}
}
function PWA_chkUTM() {
var curURL = window.location.href;
var urlParam = new URL(curURL);
var c = urlParam.searchParams.get("utm_medium");
var cid = "";
if (c) {
if (c.indexOf("sp_pwa_campaign") !== -1) {
cid = c.split("-")[1];
PWA_setCookie("sp_pwa_camp_id",cid,24);
}
}
}
/*subsrscription data save*/
function PWA_updateSubscriptionOnServer(subscription) {
if (subscription != null) {
const subdata = JSON.stringify(subscription);
const subarr = JSON.parse(subdata);
spJQuery.post(ProxyAjaxUrl, {
action:'savePushSub',
shop: PWA_shop,
endpoint: subarr.endpoint,
p256dh: subarr.keys.p256dh,
auth: subarr.keys.auth,
PWA_device_id:PWA_setUserDevice(),
browser:PWA_getBrowser(),
timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,
device_type:PWA_getDevice(),
status:'1'
}, function(data, status){
});
}
}
function PWA_urlB64ToUint8Array(base64String) {
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
const rawData = window.atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
/*push notification functions end*/
function createTWAurl(){
var hostName = window.location.host;
var newHostName = hostName.replace('-', '_');;
var twaID = newHostName.split('.').reverse().join('.');
var twaURL = "android-app://"+twaID+".twa/";
return twaURL;
}
/*android play store app check*/
function getAndroidPlayStoreApp(){
var isAndroidApp = false;
var andridAppUrl = createTWAurl();
if(document.referrer.includes(andridAppUrl)){
isAndroidApp = true;
}
return isAndroidApp;
}
/*check app enable , then start pwa */
function PWA_appSetting(){
settingArr = PWAJsonData(PWA_shop_name,"settings.json");
if(settingArr.app_enable){
PWA_chkUTM();
let isAndroidPlayApp = getAndroidPlayStoreApp();
if(isAndroidPlayApp == true){
spJQuery.ajax({
type: "POST",
url: ProxyAjaxUrl+"?shop="+PWA_shop,
data: { action: 'androidAppCheck',
urlName : window.location.href,
docName : document.referrer,
shop: PWA_shop,
device_id:PWA_setUserDevice(),
browser:PWA_getBrowser(),
timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,
device_type:getMobileOperatingSystem(),
customer_id:PWA_getCustId()
},
dataType: "json",
success: function (data){}
});
}
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/a/d/'+PWA_shop_name+'/sw.js')
.then(function(registration) {
/*push notification*/
var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf('android') > -1;
if(sp_isOpenPWA && settingArr.push_notification){
PWA_SPPA_swRegistration = registration;
PWA_initializeUI();
}
}, function(err) {
});
}
PWAJson = PWAJsonData(PWA_shop_name,"pwa.json");
spJQuery.ajax({
type: "POST",
url: ProxyAjaxUrl+"?shop="+PWA_shop,
cache: false,
async: false,
dataType: "json",
data:{action: "get_addtoHomeScreen", shop:PWA_shop},
success: function (data){
if(data.isInstall){
isAppInstall = data.isInstall;
spJQuery.getJSON("/a/d/"+PWA_shop_name+"/manifest.json", function(result) {
var logo_image = result.icons;
var replaceShopName = PWA_shop_name.replace(/-/g, '_');
var PWASetupTags = "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";
PWASetupTags += "";;
PWASetupTags +="";
spJQuery("head").prepend(PWASetupTags);
if(!sp_isOpenPWA){
spJQuery("head").prepend("");
}
});
var getCookieCheck = PWA_getCookie("installMsgCookie");
if(deviceCheck == 'IOS' && PWA_sp_isSafari && (!sp_isOpenPWA) && !isCheckiOSInstall && getCookieCheck == '' && isAppInstall){
if("install_option" in PWAJson){
if(settingArr.install_message){
if(PWAJson.install_option.option == "custom"){
displayTimeInstallMsg();
} else if(PWAJson.install_option.option == "default"){
defaultiOSinstallStepsShow();
}
}
} else{
if(settingArr.install_message){
displayTimeInstallMsg();
}
}
}
}
}
});
var sl = document.createElement("link");
sl.rel = "stylesheet";
sl.type = "text/css";
sl.href = PWA_SPSITE_URL+"/pwafiles/PWA_css.php?shop="+ PWA_shop_name ;
document.head.appendChild(sl);
/*google analytics start*/
var homePageSP = isMainPage();
if(sp_isOpenPWA && homePageSP === true && PWA_sp_isSafari){
googleAnaltics(gaFbActionArr.pwa_open,gaLableArr.pwa_open);
fbAnaltics(gaFbActionArr.pwa_open,fbTrack.pwa_open);
}
/*google analytics end*/
if(homePageSP === true && !isCheckiOSInstall && sp_isOpenPWA && PWA_sp_isSafari){
var result = 'installed';
saveAppinstall(result);
localStorage.setItem("iOS_installed", "true");
}
}
}
function isMainPage(){
var isValidFirstPage = false;
var pathName = window.location.pathname;
if(pathName == '' || pathName == '/'){
isValidFirstPage = true;
}
return isValidFirstPage;
}
function PWA_initPWAplugin(){
PWA_appSetting();
spJQuery(document).on("click",".IOSAppInstall",function(){
clearTimeout(timeTimeOutSet);
setTimeout(function () {
spJQuery(document).find('body').removeClass("pwa_install_div");
spJQuery(document).find(".install_page").hide();
}, 20000);
spJQuery(document).find(".install_page").addClass("IOSSecondStep");
spJQuery(".pwa-modal-content").hide();
spJQuery(".ios-second-step").show();
});
spJQuery(document).on("click",".IOSInstallSaveBtn",function(){
spJQuery(document).find('body').removeClass("pwa_install_div");
spJQuery(document).find(".install_page").hide();
localStorage.setItem("iOS_installed", "true");
});
spJQuery(document).on("click",".benefits-modal-wrapper .pwa-modal-close",function(){
spJQuery(document).find('body').removeClass("pwa_install_div");
spJQuery(document).find(".install_page").hide();
if(isDismissedInstallMsg === false){
var result = 'dismissed';
saveAppinstall(result);
isDismissedInstallMsg = true;
}
setCookieInstallClose();
});
spJQuery(document).on("click",".AndroidInstall",function(){
spJQuery(document).find('body').removeClass("pwa_install_div");
spJQuery(document).find(".install_page").hide();
androidInstallPopupShow();
});
spJQuery(document).on("click",".sp_install_msg",function(){
if(settingArr.install_message){
switch (PWAJson.install_option.afterClickLink) {
case "default":
if(deviceCheck == "android") { androidInstallPopupShow(); }
if(PWA_sp_isSafari) { defaultiOSinstallStepsShow(); }
break;
case "custom":
if(PWA_getDevice() != "desktop" || PWA_sp_isSafari){
if(spJQuery(document).find(".install_page").length == '0'){
showAddToHomeScreen();
} else {
spJQuery(document).find('body').addClass("pwa_install_div");
spJQuery(document).find(".install_page").show();
}
}
if(PWA_getDevice() == "desktop") {androidInstallPopupShow();}
break;
}
}
});
/*google analytics start*/
/*ADD TO CART GOOGLE ANALYTICS & FACEBOOK PIXEL START*/
let sp_isCartAjax = true;
var curURL = window.location.href;
spJQuery(document).ajaxComplete(function(e,xhr,i) {
var ajaxURL = i.url;
if (ajaxURL.indexOf("/cart/add.js") > -1 ) {
if(xhr.responseJSON.key != undefined && sp_isOpenPWA && sp_isCartAjax){
googleAnaltics(gaFbActionArr.add_cart,gaLableArr.add_cart);
fbAnaltics(gaFbActionArr.add_cart,fbTrack.add_cart);
}
}
});
if(spJQuery(document.body).find("form[action*='/cart/add']").length > 0 ){
spJQuery("form[action*='/cart/add']").submit(function (e) {
if(sp_isOpenPWA && sp_isCartAjax){
googleAnaltics(gaFbActionArr.add_cart,gaLableArr.add_cart);
fbAnaltics(gaFbActionArr.add_cart,fbTrack.add_cart);
}
sp_isCartAjax = false;
});
}
/*ADD TO CART GOOGLE ANALYTICS & FACEBOOK PIXEL END*/
if(spJQuery(document.body).find("input[name*='checkout']").length > 0 ){
spJQuery("input[name*='checkout']").click(function () {
if(sp_isOpenPWA){
googleAnaltics(gaFbActionArr.checkout,gaLableArr.checkout);
fbAnaltics(gaFbActionArr.checkout,fbTrack.checkout);
}
});
}
/*google analytics end*/
/*Click event for subscribe push*/
spJQuery(document).on("click",".sp_push",function(){
var isSubscribedCheck = spJQuery(document).find(".sp_push").data("status");
if (!isSubscribedCheck) {
PWA_askForSubscribePush();
}
});
}
/*PWA start*/
function PWA_initSPPAJQuery(){
/* App Script Start */
PWA_SPPA_include = true;
spPwaDocumentReady(function(){
if(typeof spJQuery == 'undefined' || typeof spJQuery == 'undefined'){
/* Load jquery */
spPwaLoadAppFile(jQueryUrl, 'script', function(){
/* Init default app */
PWA_initPWAplugin();
});
}else{
/* Init default app */
PWA_initPWAplugin();
}
});
}
function spPwaLoadAppFile(url, type, callback){
var spLoadElement;
if(type == 'style'){
spLoadElement = document.createElement('link');
spLoadElement.rel = "stylesheet";
spLoadElement.type = "text/css";
}else{
spLoadElement = document.createElement('script');
spLoadElement.type = 'text/javascript';
}
if(spLoadElement.readyState){
spLoadElement.onreadystatechange = function(){
if(spLoadElement.readyState === 'loaded' || spLoadElement.readyState === 'complete'){
spLoadElement.onreadystatechange = null;
callback();
}
};
}else{
spLoadElement.onload = function(){
callback();
};
}
if(type == 'style'){
spLoadElement.href = url;
}else{
spLoadElement.src = url;
}
document.getElementsByTagName('head')[0].appendChild(spLoadElement);
}
function spPwaDocumentReady(callback){
/* see if DOM is already available */
if (document.readyState === "complete" || document.readyState === "interactive"){
/* call on next available tick */
setTimeout(callback, 1);
}else{
document.addEventListener("DOMContentLoaded", callback);
}
}
if(PWA_SPPA_include == undefined) {
var PWA_SPPA_include = false;
if (PWA_SPPA_include == false) {
PWA_initSPPAJQuery();
}
}
}