You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.8 KiB
144 lines
4.8 KiB
(function () {
|
|
"use strict";
|
|
|
|
var API_URL_ROOT = "/expo-b/get-banners/";
|
|
|
|
var getUrl = function (top_load) {
|
|
var search = [];
|
|
|
|
var parts = /^\/([^\/]+)(?:\/|$)/i.exec(location.pathname);
|
|
if (parts) {
|
|
search.push("catalog=" + encodeURIComponent(parts[1]));
|
|
} else {
|
|
search.push("catalog=");
|
|
}
|
|
|
|
if (!top_load) {
|
|
var elements = $("[id^=\"expo_b_\"]").not("[id=\"expo_b_under_search\"]");
|
|
for (var j = 0; j < elements.length; j++) {
|
|
search.push("places=" + encodeURIComponent($(elements[j]).attr("id")));
|
|
}
|
|
} else {
|
|
search.push("places=" + encodeURIComponent('expo_b_under_search'));
|
|
}
|
|
|
|
var data = window.sendData;
|
|
if (data instanceof Object) {
|
|
for (var key in data) {
|
|
if (data.hasOwnProperty(key)) {
|
|
var value = data[key];
|
|
|
|
if (value instanceof Array) {
|
|
for (var i = 0, l = value.length; i < l; i++) {
|
|
search.push(encodeURIComponent(key) + "=" + encodeURIComponent(value[i]));
|
|
}
|
|
} else {
|
|
search.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return API_URL_ROOT + "?" + search.join("&");
|
|
};
|
|
|
|
var runCallback = function (callback, arg) {
|
|
try {
|
|
callback(JSON.parse(arg));
|
|
} catch (error) {
|
|
// do nothing
|
|
}
|
|
// console.info('callback Done');
|
|
};
|
|
|
|
var getBanners = function (url, callback, top_load) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("GET", url, true);
|
|
|
|
xhr.onreadystatechange = function (event) {
|
|
if (event.target.readyState === 4) {
|
|
if (event.target.status === 200) {
|
|
if (document.readyState === "loading" && top_load && !window.marker_DOMbannersjsElementInserted) {
|
|
document.addEventListener("DOMbannersjsElementInserted", function() {
|
|
runCallback(callback, event.target.responseText);
|
|
});
|
|
} else {
|
|
runCallback(callback, event.target.responseText);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
xhr.send();
|
|
};
|
|
|
|
var addBanner = function (banner) {
|
|
var parent = document.getElementById(banner.id);
|
|
|
|
if (parent) {
|
|
if (banner.is_popup) {
|
|
|
|
window.is_popup_banner = true;
|
|
// маркируем для попапа подписки о том что есть попап банер
|
|
// /templates/client/popups/announce_subscription.html
|
|
|
|
if (banner.is_img) {
|
|
parent.innerHTML =
|
|
"<header class=\"clearfix\"><div class=\"pw-title\"></div></header><div class=\"pw-body clearfix\">" +
|
|
"<a href=\""+ banner.url + "\"><img src=\"" + banner.img + "\" alt=\"" + banner.alt + "\" /></a></div>";
|
|
} else if (banner.is_html) {
|
|
parent.innerHTML = banner.text;
|
|
}
|
|
|
|
$("#expo-form-popup").on("submit", function(e) {
|
|
e.preventDefault();
|
|
window.location = $("#expo-form-popup").attr("action");
|
|
});
|
|
|
|
setTimeout(function(){
|
|
$.fancybox.open([{"href": "#" + banner.id}], {});
|
|
}, 5000);
|
|
} else {
|
|
if (banner.is_img) {
|
|
var a = document.createElement("a");
|
|
a.href = banner.url;
|
|
|
|
var img = document.createElement("img");
|
|
img.src = banner.img;
|
|
img.alt = banner.alt;
|
|
|
|
a.appendChild(img);
|
|
parent.innerHTML = a.outerHTML;
|
|
} else if (banner.is_html) {
|
|
parent.innerHTML = banner.text;
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
var insertBanners = function (data) {
|
|
if (data instanceof Array) {
|
|
for (var i = 0, l = data.length; i < l; i++) {
|
|
addBanner(data[i]);
|
|
}
|
|
}
|
|
};
|
|
|
|
var main = function (top_load) {
|
|
// top_load - load expo_b_under_search banner or all other
|
|
var top_load = top_load || false;
|
|
getBanners(getUrl(top_load), insertBanners, top_load);
|
|
|
|
if (!top_load) {
|
|
document.dispatchEvent(window.bannersjsRequestDone);
|
|
}
|
|
};
|
|
|
|
// load expo_b_under_search top banner
|
|
main(true);
|
|
// old
|
|
// window.addEventListener("load", main);
|
|
// load all other banners
|
|
document.addEventListener("DOMContentLoaded", function(){main(false);});
|
|
})();
|
|
|