meraproject/content/merakomis/js/all.js
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

927 lines
26 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var A;
A = {
init: function() {
A.w = $(window);
A.P.init();
A.W.init();
A.FORM.init();
return A.w.scroll(A.scroll);
},
scroll: function() {
return A.P.scroll();
},
isMobile: function() {
return $(window).width() <= 520;
},
// Работа с формами в этом проекте
mail: /^([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*\.[A-Za-z]{2,6}$/,
FORM: {
globalPrepareValidate: function(i, r) {
$(".error_text", i.$wrap).remove();
return i.$wrap.removeClass('error good');
},
globalGood: function(i, r) {
return i.$wrap.addClass('good');
},
globalBad: function(i, r) {
i.$wrap.addClass('error');
return i.$wrap.append($('<div class="error_text">' + r.errors.join("<br/>") + '</div>'));
},
init: function() {
$.fn.FORM('setGlobalGood', A.FORM.globalGood);
$.fn.FORM('setGlobalBad', A.FORM.globalBad);
return $.fn.FORM('setPrepareValidate', A.FORM.globalPrepareValidate);
}
},
setCookie: function(k, v, date) {
var cook, domain;
domain = ' domain=' + window.location.host + ';';
cook = k + "=" + v + '; expires=' + new Date(date ? date : new Date().getTime() + 5184000000).toGMTString() + '; path=/;';
document.cookie = cook + domain;
console.log(cook + domain);
return cook;
},
getCookie: function(name) {
var pattern, regexp;
pattern = "(?:; )?" + name + "=([^;]*);?";
regexp = new RegExp(pattern);
if (regexp.test(document.cookie)) {
return decodeURIComponent(RegExp["$1"]);
}
return false;
},
reach: function(x) {
A.reachYandex(x);
return A.reachGoogle(x);
},
reachYandex: function(x) {
console.log('yandex', x);
return typeof yaCounter56139889 !== "undefined" && yaCounter56139889 !== null ? yaCounter56139889.reachGoal(x) : void 0;
},
reachGoogle: function(x, y, z) {
console.log('google', x, y, z);
return typeof gtag === "function" ? gtag('event', x, {
'event_category': 'conversion',
'event_action': x
}) : void 0;
}
};
$(document).ready(A.init);
// u - url
// d - data
// c - callback
// cd - callback data
var API, API_THEME, API_THEME2;
API = function(u, d = {}, c = null, cd = {}) {
var url;
d['nocache'] = (new Date()).getTime();
url = "/api/" + u + "/";
console.log(url, d);
return $.ajax({
url: url,
type: "POST",
dataType: d.dataType !== void 0 ? d.dataType : "html",
data: d,
success: function(data) {
if (c !== null) {
return typeof c === "function" ? c(data, cd) : void 0;
}
},
error: function() {
return typeof c === "function" ? c({
error: 1
}, cd) : void 0;
}
});
};
API_THEME = 'themes.merakomis/';
API_THEME2 = 'themes.merakomis';
A.F = {
recall: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
//s.dataType="JSON"
$res = $(".res", $f).hide(300);
console.log('recall', s);
f.validate({
success: function() {
console.log(s);
API(API_THEME + 'sendForm', s, function(data) {
return console.log(data);
});
//A.W.openThankYou()
return $f.replaceWith('<p class="send_success">Данные успешно отправлены</p>');
}
});
return false;
},
recallFile: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
//s.dataType="JSON"
$res = $(".res", $f).hide(300);
console.log('recall', s);
f.validate({
success: function() {
var url;
console.log(s);
//API API_THEME+'sendForm',s,(data)->console.log(data)
//A.W.openThankYou()
//$f.replaceWith('<p class="send_success">Данные успешно отправлены</p>')
$f.ajaxForm();
url = '/api/' + API_THEME + 'sendForm/';
return $f.ajaxSubmit({
url: url,
data: s,
type: "POST",
method: "POST",
success: function(data) {
console.log(data);
$f.replaceWith('<div class="send_success">Данные успешно отправлены</div>');
return A.W.openThankYou();
}
});
}
});
//callback?(data,cd)
return false;
}
};
/*
review:(f)->
f = ($f = $(f)).FORM()
s = f.json()
$res = $(".res",$f).hide(300)
s.mark = parseInt($(".catalog-rate",$f).attr('data-value'));
#console.log s
if(s.mark < 0)
A.notify($res,'Выберите оценку')
return false
f.validate
success:->
if s.phone==''
A.notify($res,'Введите номер телефона')
else if s.text==''
A.notify($res,'Введите текст отзыва')
else
API API_THEME+'addReviewForItem',s, #(data)->console.log(data)
A.W.openThankYouReview()
#$f.replaceWith('<p>Данные успешно отправлены</p>')
false
*/
var H;
H = {
menu: {},
selected: {},
top_selected: null,
inited: false,
dir: '', // up | down | left | right
title: null,
data: null,
scroll: [],
isLoading: false,
ready: function() {
if (!H.inited) {
$(window).on('popstate', H.switchByWindow);
H.inited = true;
H.body = $("#content");
H.title = $("title");
H.keywords = $("meta[name=keywords]");
H.description = $("meta[name=description]");
H.title = $("title");
//H.switch()
H.$html = $("html,body");
$(window).on('scroll', H.onScroll);
return H.checkPage();
}
},
onScroll: function() {
if (!H.isLoading) {
return H.scroll[window.location.href] = H.$html.scrollTop();
}
},
checkPage: function() {
var path;
path = H.parse();
console.log('checkPage', path, path[0] === '');
return $("body").toggleClass('main', path.length === 0);
},
reload: function() {
return H.switch();
},
formGo: function(form) {
var $f, action, path, s;
s = ($f = $(form)).serialize();
action = $f.attr('action');
if (action === void 0) {
action = window.location.pathname;
}
//console.log action
H.go(path = action + '?' + s);
return false;
},
go: function(x, data = null, title = '', reload = true) {
var y;
if (x.substr(0, 1) === '/') {
x = x.substr(1);
}
y = '/' + x;
H.data = data;
history.pushState(data, title, y);
if (reload) {
return H.switch();
}
},
setTitle: function(x) {
return H.title.text(x);
},
switchByWindow: function(x) {
return H.switch(x);
},
switch: function(event = null) {
var path, url;
//console.log 'switch',x
path = H.parse();
url = path.join("/");
if (url === "/" || url === "") {
url = "/?justContent=1";
} else {
url = `/${url}/?justContent=1`;
}
if (window.location.search.length > 0) {
url += '&' + window.location.search.substr(1);
}
//console.log url
H.isLoading = true;
return $.ajax({
url: url,
//url:"/#{url}/?mini=1"
dataType: "JSON",
success: function(data) {
var $data, $html, i, j, ref, ref1, s, scrollTo;
//console.log data
console.log('time_compile', data.time_compile, 'bd_time', data.time_bd);
if (typeof data.location === "string" && data.location !== "") {
return H.go(data.location);
} else {
console.log('TITLE', data.title);
H.title.text(data.title);
$data = $(data.content);
$html = $($data[0]);
H.setTitle(data.data.title);
H.keywords.attr('content', data.keywords);
H.description.attr('content', data.description);
scrollTo = 0;
if (H.scroll[window.location.href] !== void 0 && event !== null) {
scrollTo = H.scroll[window.location.href];
}
//$hide = $(".b_content:not(.hide)").addClass('hide')
//$(".b_content").remove()
//$.fn.TABLE('allDestroy')
H.body.html($html);
A.P.initMini($html);
if ($data.length > 1) {
for (i = j = 1, ref = $data.length - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) {
s = document.createElement('script');
if ((ref1 = $data[i].tagName) === 'SCRIPT' || ref1 === 'script') {
s.innerHTML = $($data[i]).html();
H.body[0].appendChild(s);
}
}
}
H.checkPage();
H.$html.scrollTop(scrollTo);
return H.isLoading = false;
}
},
error: function() {
return console.log('history error ');
}
});
},
SEARCH: {
set: function(s, reload = false) {
var x;
x = window.location.pathname + '?' + s;
return H.go(x, null, '', reload);
},
parse: function() {
var i, pos, res, v, x;
res = {};
if (window.location.search.length > 0) {
x = window.location.search.substr(1).split('&');
for (i in x) {
v = x[i];
pos = v.indexOf('=');
if (pos >= 0) {
res[v.substr(0, pos)] = v.substr(pos + 1);
} else {
res[v] = null;
}
}
}
return res;
},
setValue: function(key, value, reload = false) {
var s, x;
x = H.SEARCH.parse();
x[key] = value;
s = H.SEARCH.toString(x);
return H.SEARCH.set(s);
},
toString: function(a) {
var i, res, v;
res = [];
for (i in a) {
v = a[i];
res.push(i + '=' + (v != null ? v : ''));
}
return res.join('&');
},
get: function(x) {
var e;
try {
return decodeURI(H.SEARCH.parse()[x]);
} catch (error) {
e = error;
return H.SEARCH.parse()[x];
}
}
},
//H.SEARCH.parse()[x]
parse: function(x = null) {
var a, i, j, len, o;
a = x !== null ? x.split('/') : window.location.pathname.split("/");
o = [];
for (j = 0, len = a.length; j < len; j++) {
i = a[j];
if (i !== "") {
o.push(i);
}
}
return o;
}
};
$(window).ready(H.ready);
//-------------------------------------------------
// A.I = РАБОТА С ПОЛЯМИ ВВОДА
//-------------------------------------------------
A.I = {
waitInput: function(x) {
return $(x).each(function() {
var button, click, val;
button = $(this);
click = button.attr('onclick');
val = $.trim(button.val());
return button.attr('onclick', '').attr('data-val', val).val(val === "" ? '' : 'Отправляется...').addClass("wait").attr('data-onclick', click).attr('disabled', 'disabled');
});
},
unwaitInput: function(x) {
return $(x).each(function() {
var b;
b = $(this);
return b.val(b.attr('data-val')).removeClass("wait").attr('onclick', b.attr('data-onclick')).removeAttr('disabled');
});
},
waitButton: function(x) {
return $(x).each(function() {
var button, click, val;
button = $(this);
click = button.attr('onclick');
val = $.trim(button.html());
if (val !== "?") {
return button.attr('onclick', '').attr('data-val', val).html(val === "" || val === "&nbsp;" ? '' : 'Отправляется...').addClass("wait").attr('data-onclick', click).attr('disabled', 'disabled');
}
});
},
unwaitButton: function(x) {
return $(x).each(function() {
var b;
b = $(this);
return b.html(b.attr('data-val')).removeClass("wait").attr('onclick', b.attr('data-onclick')).removeAttr('disabled');
});
}
};
A.P = {
scrollTimeout: null,
$scrollNumber: null,
getScrollTop: function() {
return Math.max(A.P.body.scrollTop(), A.P.$body.scrollTop(), A.P.$html.scrollTop());
},
scrollToTop: function(x = 0) {
A.P.$body.scrollTop(x);
return A.P.$html.scrollTop(x);
},
scrollToTopAnimate: function() {
A.P.$body.animate({
scrollTop: 0
}, 500);
return A.P.$html.animate({
scrollTop: 0
}, 500);
},
scrollToAnimate: function(y) {
A.P.$body.animate({
scrollTop: y
}, 500);
return A.P.$html.animate({
scrollTop: y
}, 500);
},
init: function() {
//alert(window.innerWidth+'x'+window.innerHeight)
A.P.body = $("body");
A.P.$body = $("body");
A.P.$html = $("html");
A.P.html = $("html,body");
A.P.initMini();
$('#b_add-basket .btn').click(function() {
return $('#b_add-basket').removeClass('open');
});
A.P.$totop = $("#totop");
A.P.$footer = $("#b_footer");
A.P.$soc = $("#b_footer .soc");
return $(document).click(function(e) {});
},
removeSearch: function(id) {
event.stopPropagation();
event.preventDefault();
$(`.search[data-id=${id}]`).remove();
return API(API_THEME2 + '.search/remove', {id}, function(data) {
return console.log(data);
});
},
scroll: function() {
A.P.$totop.toggleClass('show', A.w.scrollTop() > 10);
return A.P.html.toggleClass('scroll', A.w.scrollTop() > 1);
},
aScroll: function() {
return A.P.$html.removeClass('scroll');
},
firstInit: function($html = A.P.body) {},
openMenu: function() {
var body;
$("body").addClass('open_menu');
body = document.body;
A.P.scrollPosition = window.pageYOffset;
body.style.overflow = 'hidden';
body.style.position = 'fixed';
body.style.top = '-' + A.P.scrollPosition + 'px';
return body.style.width = '100%';
},
closeMenu: function() {
var body;
$("body").removeClass('open_menu');
body = document.body;
body.style.removeProperty('overflow');
body.style.removeProperty('position');
body.style.removeProperty('top');
body.style.removeProperty('width');
return window.scrollTo(0, A.P.scrollPosition);
},
toMobMenu: function() {
$("#mob_menu .back").hide();
$("#mob_menu .blocks").hide();
$("#mob_menu .menu_footer2").hide();
$("#mob_menu .menu_footer").show();
return $("#mob_menu .menu").show();
},
openMobMenu: function() {
var $t, id;
$("#mob_menu .back").show();
$("#mob_menu .blocks").show();
$("#mob_menu .blocks").html('');
$("#mob_menu .menu_footer2").show();
$("#mob_menu .menu_footer").hide();
$("#mob_menu .menu").hide();
$t = $(this);
id = $t.attr('data-group');
return API(API_THEME2 + '/menu', {id}, function(data) {
$("#mob_menu .blocks").replaceWith(data);
return A.P.initMini($("#mob_menu .blocks"));
});
},
initMini: function($html = A.P.body) {
$("#mob_menu .subel").click(A.P.openMobMenu);
//if A.isMobile()
// if $("#mob_header_menu").length > 0
// $("#mob_header_menu").append( $(".sidebar-right"))
$('.news', $html).owlCarousel({
loop: true,
nav: true,
//autoWidth : true
margin: 0,
items: 1
});
$(".copy", $html).click(function(e) {
var $div, $t, range, success;
e.stopPropagation();
e.preventDefault();
$t = $(this);
$div = $('<div class="copy_text">' + $t.attr('data-copy') + '</div>');
$t.append($div);
window.getSelection().removeAllRanges();
range = document.createRange();
range.selectNode($div[0]);
window.getSelection().addRange(range);
success = document.execCommand('copy');
range.setEnd($t[0], 0);
$t.addClass('copied');
return setTimeout(function() {
$t.removeClass('copied');
return $div.remove();
}, 2000);
});
$(".i.phone").mask("+7 (999) 999-99-99");
return A.P.initPreventLink($html);
},
getPropsForCart: function() {
var res;
res = {};
$(".prop_price.selected").each(function() {
var $t;
$t = $(this);
return res[$t.attr("data-prop-id")] = $t.attr("data-id");
});
return res;
},
initPreventLink: function(x) {},
// $("a:not(.prevented):not(.slide)",$(x)).addClass('prevented').click A.P.preventALink
preventALink: function(e) {
var $c, $t, href;
href = ($t = $(this)).attr('href');
console.log(href, href.substr(0, 1) === "#", href === "" || href === "#");
if ($t.hasClass('propagation')) {
e.preventDefault();
return e.stopPropagation();
} else if (href === "" || href === "#") {
return e.preventDefault();
//e.stopPropagation()
} else if (href.substr(0, 1) === "#") {
console.log('sex');
//e.preventDefault();
e.stopPropagation();
$c = $(href);
if ($c.length > 0) {
return A.P.scrollToAnimate($c.offset().top - 60);
}
} else if (href !== void 0) {
if ($t.hasClass('_to_card')) {
e.preventDefault();
e.stopPropagation();
return $.fn.CARD('openNew', {
api: $t.attr('data-module'),
id: $t.attr('data-id')
});
} else if (href.substr(0, 1) === '/') {
e.preventDefault();
e.stopPropagation();
H.go($(this).attr('href'));
return A.P.closeMenu();
}
}
}
};
//-----------------------------------------------
// A.W - Работа со всплывающими окнами
//-----------------------------------------------
A.W = {
back: null,
w: null,
i: null,
init: function() {
console.log('ready', $("#wback"));
A.W.back = $("#wback");
if (A.W.back.length > 0) {
A.W.w = $("#window");
return A.W.i = $("#w_inner");
} else {
return delete A.W;
}
},
startLoad: function() {
return A.W.i.addClass("load").html("Загрузка данных");
},
finishLoad: function(data) {
var $data;
$data = $(data);
A.W.i.removeClass("load").html($data);
return A.P.initMini($data);
},
//$(".window_inner input[name=phone]").mask("+7 (999) 999-99-99");
setHtml: function(data) {
return A.W.finishLoad(data);
},
open: function(w) {
A.P.body.css('overflow', 'hidden');
A.W.back.addClass('open');
return A.W.w.css({
maxWidth: (w !== void 0 ? w + 'px' : 'auto')
});
},
close: function() {
var base;
A.W.back.removeClass('open');
A.P.body.css('overflow', 'auto');
A.W.i.html("");
return typeof (base = A.W).onClose === "function" ? base.onClose() : void 0;
},
openCase: function(id) {
A.W.open();
A.W.startLoad();
return API(API_THEME + 'case', {id}, A.W.setHtml);
},
openActivity: function(id) {
A.W.open();
A.W.startLoad();
return API(API_THEME + 'activity', {id}, A.W.setHtml);
},
openRecall: function(data = {
title: 'Обратный звонок',
form_type: 'recall'
}) {
A.W.open(400);
A.W.startLoad();
return API(API_THEME + 'formRecall', data, A.W.setHtml);
},
openAuth: function() {
A.W.open(600);
A.W.startLoad();
return API(API_THEME + 'formAuth', {}, A.W.setHtml);
},
openReg: function() {
A.W.open(600);
A.W.startLoad();
return API(API_THEME + 'formReg', {}, A.W.setHtml);
},
openRestore: function() {
A.W.open(600);
A.W.startLoad();
return API(API_THEME + 'formRestore', {}, A.W.setHtml);
},
openThankYou: function() {
A.W.open(600);
A.W.startLoad();
return API(API_THEME + 'formThankYou', {}, A.W.setHtml);
},
openAbuy: function(id) {
A.W.open(400);
A.W.startLoad();
return API(API_THEME + 'abuy', {
id: id
}, A.W.setHtml);
},
openOneClick: function(id) {
A.W.open(400);
A.W.startLoad();
return API(API_THEME + 'oneClick', {
id: id
}, A.W.setHtml);
},
openCartOneClick: function() {
A.W.open(400);
A.W.startLoad();
return API(API_THEME + 'cartOneClick', {}, A.W.setHtml);
},
openMap: function() {
A.W.open(1000);
A.W.startLoad();
return API(API_THEME + 'openMap', {}, A.W.setHtml);
}
};
(function($) {
var F;
$.fn.PROFILE = function(method) {
if (F[method]) {
return F[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === "object" || !method) {
return F.init.apply(this, arguments);
} else {
return $.error('Метод с именем ' + method + ' не существует для jQuery.PROFILE');
}
};
return F = {
exit: function() {
return API(API_THEME2 + '.emp/exit', {}, function(data) {
return window.location.href = "/";
});
},
admin: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
s.dataType = "JSON";
$res = $(".res", $f).hide(300);
console.log(s);
f.validate({
success: function() {
var $btn;
A.I.waitButton($btn = $("button", $f));
return API(API_THEME2 + '.emp/login', s, function(data) {
A.I.unwaitButton($btn);
console.log(data);
if (data.e === false) {
return window.location.reload();
} else {
return $res.html(data.e).show(300);
}
});
}
});
return false;
},
to_sign: function(f) {
$(".window").hide();
return $("#sign").show();
},
new_pass: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
s.dataType = "JSON";
$res = $(".res", $f).hide(300);
console.log(s);
f.validate({
success: function() {
var $btn;
A.I.waitButton($btn = $("button", $f));
return API(API_THEME2 + '.emp/new_pass', s, function(data) {
A.I.unwaitButton($btn);
console.log(data);
if (data.e === 0) {
$("#sign").hide();
return $("#new_pass").show();
} else if (data.e === 1) {
return alert(data.m);
}
});
}
});
return false;
},
remind: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
s.dataType = "JSON";
$res = $(".res", $f).hide(300);
console.log(s);
f.validate({
success: function() {
var $btn;
A.I.waitButton($btn = $("button", $f));
return API(API_THEME2 + '.emp/remind', s, function(data) {
A.I.unwaitButton($btn);
console.log(data);
if (data.e === 0) {
$("#sign").hide();
return $("#check_mail").show();
} else if (data.e === 1) {
$(".unknown_login").text(s.login);
$("#sign").hide();
return $("#unknown").show();
}
});
}
});
return false;
},
login: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
s.dataType = "JSON";
$res = $(".res", $f).hide(300);
f.validate({
success: function() {
var $btn;
A.I.waitButton($btn = $("button", $f));
return API(API_THEME2 + '.emp/login', s, function(data) {
A.I.unwaitButton($btn);
console.log(data);
if (data.e === false) {
return window.location.reload();
} else if (data.e === 1) {
$(".unknown_login").text(s.login);
$("#sign").hide();
return $("#unknown").show();
} else if (data.e === 2) {
return $res.text("Неверный пароль").show(300);
//alert("Неверный пароль")
} else if (data.e === 3) {
$("[data-name=code]").show();
$("[data-name=key]").val(data.key);
//alert("Введите код, отправленный в телеграм")
return $res.text("Введите код, отправленный в телеграм").show(300);
} else if (data.e === 4) {
//alert("Неверный код")
return $res.text("Неверный код").show(300);
}
});
}
});
return false;
},
reg: function(f) {
var $f, $res, s;
f = ($f = $(f)).FORM();
s = f.json();
s.dataType = "JSON";
$res = $(".res", $f).hide(300);
console.log(s);
f.validate({
success: function() {
var $btn;
A.I.waitButton($btn = $("button", $f));
return API(API_THEME2 + '.emp/reg', s, function(data) {
console.log(data);
A.I.unwaitButton($btn);
if (data.e === false || data.e === 0) {
return window.location.href = "/";
} else if (data.e === 2) {
$(".unknown_login").text(s.login);
$("#sign").hide();
return $("#repeat_reg").show();
} else if (data.e === 1) {
$(".unknown_login").text(s.login);
$("#sign").hide();
return $("#unknown").show();
}
});
}
});
return false;
}
};
})(jQuery);
var indexOf = [].indexOf;
(function($) {
var F;
$.fn.PROJECT = function(method) {
if (F[method]) {
return F[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === "object" || !method) {
return F.init.apply(this, arguments);
} else {
return $.error('Метод с именем ' + method + ' не существует для jQuery.PROJECT');
}
};
return F = {
init: function($html) {
return $(".project_filter", $html).each(function() {
var $p, $sections, setFilter;
$p = $(this);
$sections = $(".section", $p);
setFilter = function() {
var $t, id, selected;
$t = $(this);
id = $t.attr('data-id');
selected = $t.hasClass('selected');
$sections.removeClass('selected');
if (selected) {
id = 0;
} else {
$t.addClass('selected');
}
console.log(id, selected);
return $(".project").each(function() {
var e, sections;
$t = $(this);
try {
sections = JSON.parse($t.attr('data-sections'));
} catch (error) {
e = error;
sections = [];
}
if (!Array.isArray(sections)) {
sections = [];
}
return $t.toggleClass('show', indexOf.call(sections, id) >= 0 || id === 0);
});
};
return $sections.click(setFilter);
});
}
};
})(jQuery);