Untitled
unknown
plain_text
2 years ago
13 kB
14
Indexable
window.springBoard = window.springBoard || {};
window.springBoard.createCookie = function(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
} else var expires = "";
var cDomain = typeof window.springBoard.cookieDomain !== 'undefined' ? window.springBoard.cookieDomain : (document.location.host.indexOf("www.") == 0) ? document.location.host.substr(3, document.location.host.length) : document.location.host;
document.cookie = escape(name) + "=" + escape(value) + expires + ";domain=" + cDomain + ";path=/" + (document.location.protocol == "https:" ? "; secure" : "");
return null;
}
window.springBoard.readCookie = function(name) {
var nameEQ = escape(name) + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length, c.length));
}
return null;
}
window.springBoard.eraseCookie = function(name) {
window.springBoard.createCookie(name, "", -1);
return null;
}
window['cv-utils'] = {
// Variables
csrf: window.springBoard.readCookie('_csrf'),
debug: window.springBoard.readCookie('cfQA'),
readCookie: function(name) {
var nameEQ = escape(name) + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length, c.length));
}
return null;
},
// API Queries
generateProductQuery: function (id){
return JSON.stringify([{"query":"query AddToCartButton($id: ID!) {product(id: $id) {...product packageInListHotness orderRequestCheck {available orderApprovalRequestIds __typename} __typename}} fragment product on Product {id productId itemId slug name description rating {average count __typename} currentVersion {id name publishedDate __typename} lighteningRating {discount quantity used endTime promotionStartTime promotionId pageView __typename} reviewCount downloadSize assetCount publisher {id name url supportUrl supportEmail gaAccount gaPrefix __typename} mainImage {big facebook small icon icon75 __typename} originalPrice {itemId originalPrice finalPrice isFree discount {save percentage type saleType __typename} currency entitlementType __typename} images {type imageUrl thumbnailUrl __typename} state category {id name slug longName __typename} __typename}","variables":{"id":`${id}`},"operationName":"AddToCartButton"}])
},
generateProductQueryNew: function(id){
return JSON.stringify([{"query":"query Product($id: ID!) { product(id: $id) { ...product packageInListHotness reviews(rows: 2, sortBy: \"rating\") { ...reviews __typename } __typename } }fragment product on Product { id productId itemId slug name description elevatorPitch keyFeatures compatibilityInfo customLicense rating { average count __typename } currentVersion { id name publishedDate __typename } reviewCount downloadSize assetCount publisher { id name url supportUrl supportEmail gaAccount gaPrefix __typename } mainImage { big facebook small icon icon75 __typename } originalPrice { itemId originalPrice finalPrice isFree discount { save percentage type saleType __typename } currency entitlementType __typename } images { type imageUrl thumbnailUrl __typename } category { id name slug longName __typename } firstPublishedDate publishNotes supportedUnityVersions state overlay overlayText plusProSale licenseText vspProperties { ... on ExternalVSPProduct { externalLink __typename } __typename } __typename }fragment reviews on Reviews { count canRate: can_rate canReply: can_reply canComment: can_comment hasCommented: has_commented totalEntries: total_entries lastPage: last_page comments { id date editable rating user { id name profileUrl avatar __typename } isHelpful: is_helpful { count score __typename } subject version full is_complimentary vote replies { id editable date version full user { id name profileUrl avatar __typename } isHelpful: is_helpful { count score __typename } __typename } __typename } __typename } ","variables":{"id":`${id}`},"operationName":"Product"}])
},
generateCartQuery: function(){
return JSON.stringify([{"query":"query CartQuery { shoppingCart: currentCart(namespace: \"asset_store_shopping_cart\") { ...cart __typename } savedForLaterCart: currentCart(namespace: \"asset_store_saved_cart\") { id cartId namespace items { id __typename } __typename }}fragment cart on Cart { id cartId namespace items { id quantity priceName product { ...product __typename } entitlement { id type __typename } orderRequest __typename } __typename}fragment product on Product { id productId itemId slug name description elevatorPitch keyFeatures compatibilityInfo customLicense rating { average count __typename } currentVersion { id name publishedDate __typename } reviewCount downloadSize assetCount publisher { id name url supportUrl supportEmail gaAccount gaPrefix __typename } mainImage { big facebook small icon icon75 __typename } originalPrice { itemId originalPrice finalPrice isFree discount { save percentage type saleType __typename } currency entitlementType __typename } images { type imageUrl thumbnailUrl __typename } category { id name slug longName __typename } firstPublishedDate publishNotes supportedUnityVersions state overlay overlayText plusProSale licenseText vspProperties { ... on ExternalVSPProduct { externalLink __typename } __typename } __typename}","operationName":"CartQuery"}])
},
generateAddCartQuery: function(id){
return "{\"query\":\"mutation AddItem($packageId: ID!, $priceSetName: String, $quantity: Int) { addPackageToCart(packageId: $packageId, priceSetName: $priceSetName, quantity: $quantity) { id cartId items { id quantity priceName __typename } __typename }}\",\"variables\":{\"packageId\":\"" + id + "\",\"priceSetName\":\"\",\"quantity\":1},\"operationName\":\"AddItem\"}"
},
generateUserQuery: function (id){
return JSON.stringify([{"query":"query CurrentUser($id: ID!) { user(id: $id) { id name email myAssets keyImage { icon24 large __typename } feed { id unread __typename } v2Preferred admin downloader publisherId hasAcceptedLatestTerms wishes lists { total results { ...list packageIds __typename } __typename } __typename } listDetail(listId: \"favorite\") { packages(size: 1) { results { ...product __typename } __typename } __typename } } fragment list on List { id type listId slug name description ownerId ownerType status headerImage icon mainImages __typename } fragment product on Product { id productId itemId slug name description elevatorPitch keyFeatures compatibilityInfo customLicense rating { average count __typename } currentVersion { id name publishedDate __typename } reviewCount downloadSize assetCount publisher { id name url supportUrl supportEmail gaAccount gaPrefix __typename } mainImage { big facebook small icon icon75 __typename } originalPrice { itemId originalPrice finalPrice isFree discount { save percentage type saleType __typename } currency entitlementType __typename } images { type imageUrl thumbnailUrl __typename } category { id name slug longName __typename } firstPublishedDate publishNotes supportedUnityVersions state overlay overlayText plusProSale licenseText vspProperties { ... on ExternalVSPProduct { externalLink __typename } __typename } __typename } ","variables":{"id":""+id+""},"operationName":"CurrentUser"},{"query":"query ShoppingCartQuery { currentCart(namespace: \"asset_store_saved_cart\") { id cartId items { id product { id mainImage { icon __typename } __typename } __typename } __typename } } ","operationName":"ShoppingCartQuery"}])
},
// Functions
fetchData: async function (query, batch){
try{
const fetchUrl = `https://assetstore.unity.com/api/graphql${batch}`;
const res = await fetch(fetchUrl, {
"credentials": "include",
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "en-US,en;q=0.9",
"cache-control": "no-cache",
"content-type": "application/json;charset=UTF-8",
"pragma": "no-cache",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-csrf-token": this.readCookie('_csrf'),
"x-requested-with": "XMLHttpRequest"
},
"referrer": "https://assetstore.unity.com/",
"referrerPolicy": "origin",
"body": query,
"method": "POST",
"mode": "cors"
});
const data = await res.json();
return data;
} catch (err){
console.error(err);
}
},
getProductData: async function (id){
const query = this.generateProductQuery(id),
productData = await this.fetchData(query, '/batch');
return productData;
},
addProductToCart: async function(id, openMiniCart){
if(
window['cv-utils'].debug &&
!openMiniCart
) console.log('Add Cart function: Set second argument as true to open mini cart');
const mainScroller = document.querySelector('#main-layout-scroller');
const query = this.generateAddCartQuery(id);
await this.fetchData(query, '');
if(openMiniCart && mainScroller){
mainScroller.scrollTo(0,0);
let waitForMiniCart = setInterval(() => {
const miniCart = document.querySelector('.cartMini.right-nav-element');
if(miniCart){
clearInterval(waitForMiniCart);
miniCart.click()
}
}, 50);
}
},
getUserId: function(){
let maxCalls = 100;
let waitForData = setInterval(() => {
if(window.dataLayer[0].GenesisID) {
clearInterval(waitForData);
window['cv-utils'].userId = window.dataLayer[0].GenesisID
}
if(--maxCalls < 0){
clearInterval(waitForData);
}
}, 50);
}
}
window.addEventListener('mousedown', (e)=>{
const el = e.target;
if(
el.closest('[data-test=asset-grid]') &&
el.closest('a[href*="packages"]')
){
Kameleoon.API.Goals.processConversion(308995)
}
})
const testID = '201432';
var checkExp = setInterval(function () {
if (Kameleoon.API.Experiments.getById(testID) !== null) {
clearInterval(checkExp);
const testVariant = Kameleoon.API.Experiments.getById(testID).associatedVariation.name,
testName = Kameleoon.API.Experiments.getById(testID).name;
if (testVariant === 'Reference') {
sendGaEvent('Experiment', testName, `${testName} - Control`);
sendDataLayerEvent(testName, testVariant);
} else {
sendGaEvent('Experiment', testName, `${testName} - ${testVariant}`);
sendDataLayerEvent(testName, testVariant);
}
}
}, 50);
function sendDataLayerEvent(experiment, variation){
var stop,
timeout,
check = function () {
try {
var dataLayerLoaded = typeof window.dataLayer !== "undefined";
if (stop) return;
if (dataLayerLoaded) {
window.dataLayer.push(
{
event: 'kameleoon',
experiment: experiment,
variation: variation
}
)
clearTimeout(timeout);
return;
}
window.requestAnimationFrame(check);
} catch (err) {
console.log(err.message);
}
};
timeout = setTimeout(function () {
stop = true;
}, 5000);
window.requestAnimationFrame(check);
}
function sendGaEvent(cat, label, action) {
var stop,
timeout,
check = function () {
try {
var gaLoaded = typeof window.ga !== "undefined" && typeof window.ga.getAll !== "undefined";
if (stop) return;
if (gaLoaded) {
var gtmName = window.ga.getAll()[0] ? window.ga.getAll()[0].get("name") + "." : "";
window.ga(gtmName + "send", {
hitType: "event",
eventCategory: cat,
eventLabel: label,
eventAction: action,
});
clearTimeout(timeout);
return;
}
window.requestAnimationFrame(check);
} catch (err) {
console.log(err.message);
}
};
timeout = setTimeout(function () {
stop = true;
}, 5000);
window.requestAnimationFrame(check);
}
Editor is loading...