403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/components/bitrix/voting.uf/templates/.default/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/components/bitrix/voting.uf/templates/.default/script.js
;(function(window) {
	var BX = window.BX;
	if (BX["Vote"])
		return;
	var actionUrl = (window.BXMobileApp ? BX.message("SITE_DIR") + "mobile/?mobile_action=vote" : "/bitrix/tools/vote/uf.php");

	BX.Vote = (function() {
		var d = function(node, params) {
			this.node = node;
			this.form = BX.findChild(this.node, {tagName : "FORM"}, true);
			this.id = params["id"];
			this.voteId = params["voteId"];
			this.params = params;
			var n, answer, i;
			// Error Node
			this.errorNode = BX.findChild(this.node, {attribute : {"data-bx-vote-role" : "error"}}, true);
			// Buttons
			for (var ii in this.buttons)
			{
				if (this.buttons.hasOwnProperty(ii))
				{
					n = BX.findChild(this.node, {attribute : {"data-bx-vote-button" : ii}}, true);
					if (n && BX.type.isFunction(this[ii]))
					{
						this[ii] = BX.delegate(this[ii], this);
						this.buttons[ii] = n;
						BX.bind(n, "click", this[ii]);
					}
				}
			}
			// Answers
			n = BX.findChildren(this.node, {tagName : "TR"}, true);
			while (n && (answer = n.pop()) && answer && answer.hasAttribute("data-bx-vote-answer"))
			{
				i = BX.findChild(answer, {"tagName" : "A", attribute : {"data-bx-vote-result" : "counter"}}, true);
				if (i)
				{
					if (window.BXMobileApp)
					{
						BX.bind(answer, "click", BX.proxy(this.checkMobileUsers, this));
					}
					else
					{

						BX.bind(i, "click", BX.proxy(this.checkUsers, this));
						BX.adjust(i, {attrs : {"data-bx-vote-answer" : answer.getAttribute("data-bx-vote-answer")}});
					}
				}
			}

			this.onPullEvent = BX.delegate(function(command, params)
			{
				if (command == 'voting' && !!params && params["VOTE_ID"] == this.voteId && BX(this.node))
				{
					this.adjustResults(params);
				}
			}, this);

			if (window.BXMobileApp)
			{
				app.onCustomEvent('onPullExtendWatch', {id: 'VOTE_' + this.voteId});
				BX.addCustomEvent('onPull-vote', this.onPullEvent);
			}
			else if (BX["PULL"])
			{
				BX.PULL.extendWatch('VOTE_' + this.voteId);
				BX.addCustomEvent("onPullEvent-vote", this.onPullEvent);
			}
		};
		d.prototype = {
			buttons: {
				showVoteForm: null,
				showResults: null,
				actVoting: null,
				stopOrResume: null,
				exportXls: null
			},
			params: {
			},
			url: actionUrl,
			showVoteForm: function(e) {
				if (this.node.getAttribute("data-bx-vote-lamp") == "green")
				{
					var f = BX.proxy(function(data) {
						if (data && data.data && data.data.event)
							this.adjustBallot(data.data.attach, data.data.event);
						this.node.setAttribute("data-bx-vote-form", "shown");
					}, this),
						ff = BX.proxy(function(error) {
						this.node.setAttribute("data-bx-vote-form", "shown");
					}, this);
					this.send({ action: "getBallot" }, e.target, f, ff);
				}
				BX.eventCancelBubble(e);
				return BX.PreventDefault(e);
			},
			showResults: function(e) {
				this.node.setAttribute("data-bx-vote-result", (this.node.getAttribute("data-bx-vote-result") == "shown" ? "hidden" : "shown"));
				BX.eventCancelBubble(e);
				return BX.PreventDefault(e);
			},
			stopOrResume: function (e) {
				this.send({ action: this.node.getAttribute("data-bx-vote-lamp") == "red" ? "resume": "stop" }, e.target, BX.proxy(function(data) {
					if (data["action"] == "stop")
					{
						this.node.setAttribute("data-bx-vote-result", "shown");
						this.node.setAttribute("data-bx-vote-form", "hidden");
						this.node.setAttribute("data-bx-vote-lamp", "red");
					}
					else
					{
						if (this.node.getAttribute("data-bx-vote-status") !== "voted")
							this.node.setAttribute("data-bx-vote-form", "shown");

						this.node.setAttribute("data-bx-vote-lamp", "green");
					}
					if (data["data"] && data["data"]["attach"])
						this.adjustResults(data["data"]["attach"]);
				}, this));
				BX.eventCancelBubble(e);
				return BX.PreventDefault(e);
			},
			exportXls: function (e) {
				BX.eventCancelBubble(e);
				top.location.href = BX.util.add_url_param(this.url, {action: "exportXls", attachId: this.id, sessid: BX.bitrix_sessid()});
				return BX.PreventDefault(e);
			},
			actVoting: function(e) {
				var data = BX.ajax.prepareForm(this.form).data;
				data["action"] = "vote";
				this.send(data, e.target, BX.proxy(function(data) {
					this.node.setAttribute("data-bx-vote-form", "hidden");
					this.node.setAttribute("data-bx-vote-result", "shown");
					this.adjustResults(data.data.attach);
				}, this), BX.proxy(function() {
					this.node.setAttribute("data-bx-vote-form", "shown");
				}, this));
				BX.eventCancelBubble(e);
				return BX.PreventDefault(e);
			},
			send: function(data, el, success, fail) {
				BX.addClass(el, "ui-btn-clock");
				data["sessid"] = BX.bitrix_sessid();
				data["attachId"] = this.id;
				BX.ajax({
					method: 'POST',
					url: BX.util.add_url_param(this.url, {action: data["action"], attachId: this.id}),
					data: data,
					dataType: 'json',
					onsuccess: BX.proxy(function(data) {
						BX.removeClass(el, 'ui-btn-clock');
						if (data.status == "success")
						{
							this.showError(null);
							if (BX.type.isFunction(success))
								success.apply(this, arguments);
						}
						else
						{
							if (data.status == "error" && data["errors"])
								this.showError(data["errors"]);
							if (BX.type.isFunction(fail))
								fail.apply(this, arguments);
						}
					}, this),
					onfailure: BX.proxy(function(){
						BX.removeClass(el, 'ui-btn-clock');
						if (BX.type.isFunction(fail))
							fail.apply(this, arguments);
					}, this)
				});
			},
			adjustBallot: function(attachment, event) {
				var q, a, e, i, j, es, qu, an, v,
					attach = attachment["QUESTIONS"],
					ballot = event["ballot"],
					extras = event["extras"];
				for (q in attach)
				{
					if (attach.hasOwnProperty(q))
					{
						qu = attach[q];
						e = [qu["FIELD_NAME"], qu["FIELD_NAME"] + "[]"];
						v = (ballot[q] || {});
						while(i = e.shift())
						{
							if (this.form.elements[i])
							{
								es = BX(this.form.elements[i]) ? [this.form.elements[i]] : this.form.elements[i];
								for (i = 0; i < es.length;i++)
								{
									if (v[es[i].value])
									{
										es[i].checked = "checked";
									}
									else
									{
										delete es[i].checked;
									}
								}
							}
						}

						for (a in attach[q]["ANSWERS"])
						{
							if (attach[q]["ANSWERS"].hasOwnProperty(a))
							{
								an = attach[q]["ANSWERS"][a];
								if (an["FIELD_TYPE"] >= 4)
								{
									if (this.form.elements[an["MESSAGE_FIELD_NAME"]])
										this.form.elements[an["MESSAGE_FIELD_NAME"]].value = (ballot[q] && ballot[q][a] && ballot[q][a]["MESSAGE"] ? ballot[q][a]["MESSAGE"] : "");
									else
										this.form.elements[an["FIELD_NAME"]].value = (ballot[q] && ballot[q][a] && ballot[q][a]["MESSAGE"] ? ballot[q][a]["MESSAGE"] : "");
								}
							}
						}
					}
				}
				for (i in extras)
				{
					if (extras.hasOwnProperty(i) &&
						(q = (BX(this.form.elements[String(attachment["FIELD_NAME"]).replace("#ENTITY_ID#", i)]))))
					{
						if (q.value == extras[i])
							q.checked = true;
						else
							delete q.checked;
					}
				}
			},
			adjustResults: function(attachment) {
				var questions = attachment["QUESTIONS"];
				BX.onCustomEvent(this.node, 'OnBeforeChangeData');
				var question, answer, i, q, per, n;
				for (q in questions)
				{
					if (questions.hasOwnProperty(q))
					{
						question = BX.findChild(this.node, {"attr": {"id": "question" + q}}, true);
						if (question)
						{
							for (i in questions[q]["ANSWERS"])
							{
								if (questions[q]["ANSWERS"].hasOwnProperty(i))
								{
									answer = BX.findChild(question, {"attr": {"data-bx-vote-answer": i}}, true);
									if (!!answer)
									{
										per = parseInt(questions[q]["ANSWERS"][i]["PERCENT"]);
										per = (isNaN(per) ? 0 : per);
										n = BX.findChild(answer, {attribute: {"data-bx-vote-result" : "counter"}}, true);
										BX.adjust(n, {"html" : questions[q]["ANSWERS"][i]["COUNTER"] + ""});
										delete n["VOTED_USER_OBJ"];
										BX.adjust(BX.findChild(answer, {"tagName" : "SPAN", attribute : {"data-bx-vote-result" : "percent"}}, true),
											{"html" : per + '%'});
										BX.adjust(BX.findChild(answer, {"tagName" : "DIV", attribute : {"data-bx-vote-result" : "bar"}}, true),
											{"style" : {"width" : per + '%'}});
									}
								}
							}
						}
					}
				}
				n = BX.findChild(this.node, {"tagName" : "DIV", attribute : {"data-bx-vote-result" : "counter"}}, true);
				BX.adjust(n, {"html" : attachment["COUNTER"] + ""});
				BX.onCustomEvent(this.controller, 'OnAfterChangeData');
			},
			checkUsers : function(event)
			{
				var node = event ? BX(event.currentTarget) : null;
				if (node.hasAttribute("data-bx-vote-answer"))
				{
					if (!node['VOTED_USER_OBJ'])
					{
						node.VOTED_USER_OBJ = new BVotedUser(
							node.getAttribute("data-bx-vote-answer"),
							node,
							{
								nameTemplate : this.params["nameTemplate"],
								urlTemplate : this.params["urlTemplate"],
								attachId : this.id
							}
						);
					}
					node.VOTED_USER_OBJ.click();
				}
			},
			checkMobileUsers : function(e) {
				if (this.node && this.node.getAttribute("data-bx-vote-form") !== "shown")
				{
					var node = BX.proxy_context,
						i = BX.findChild(node, {"tagName" : "A", attribute : {"data-bx-vote-result" : "counter"}}, true);

					if (i && parseInt(i.innerHTML) > 0)
					{
						BX.PreventDefault(e);
						app.openBXTable({
							url: BX.util.add_url_param(this.url, {action : "getMobileVoted", attachId : this.id, answerId : node.getAttribute("data-bx-vote-answer"), sessid : BX.bitrix_sessid()}),
							TABLE_SETTINGS : {
								markmode : false,
								cache: false
							}
						});
						return false;
					}
				}
				return true;
			},
			showError : function(errors) {
				var textError = "";
				if (BX.type.isArray(errors))
				{
					var t = [];
					for (var i = 0; i < errors.length; i++)
					{
						t.push(errors[i]["message"])
					}
					t = t.join("<br />");
					textError = (t === "" ? "Unknown error" : t);
					this.errorNode.innerHTML = textError;
					this.node.setAttribute("data-bx-vote-error", "shown");
				}
				else
				{
					this.errorNode.innerHTML = "";
					this.node.setAttribute("data-bx-vote-error", "hidden");
				}
			}
	};
		return d;
	})();

	var BVotedUser = (function()
	{
		var d = function(answerId, target, params)
		{
			this.id = ['vote', answerId, new Date().getTime()].join('-');
			this.answerId = answerId;
			this.node = target;
			this.status = 'ready';
			this.iNumPage = 0;

			this.urlTemplate = params["urlTemplate"];
			this.nameTemplate = params["nameTemplate"];
			this.attachId = params["attachId"];
			this.data = [];
			this.queue = [];
			this.popup = null;
			this.popupScrollCheck = this.popupScrollCheck.bind(this);
		};

		d.prototype = {
			url: actionUrl,
			click: function()
			{
				var votersCount = parseInt(this.node.innerHTML);
				if (votersCount > 0)
				{
					this.showPopup()
						.then(() => {
							if (this.data.length > 0)
							{
								this.buildVoters(this.data);
							}
						})
					;
				}
			},

			buildVoters: function(items)
			{
				var popupContainer = this.popup ? this.popup.getPopupContainer() : null;
				if (popupContainer === null)
				{
					return;
				}

				var container = popupContainer.querySelector('.bx-ilike-popup');
				popupContainer.querySelector('.bx-ilike-wrap-block').removeAttribute('style');
				var changed = false;
				items.forEach((voter) => {
					var voterId = BX.util.htmlspecialchars(voter['ID']);
					var voterName = BX.util.htmlspecialchars(voter['FULL_NAME']);
					var voterPhoto = BX.type.isNotEmptyString(voter['PHOTO_SRC']) ?
						encodeURI(BX.util.htmlspecialchars(voter['PHOTO_SRC'])) : null;
					var voterType = BX.type.isNotEmptyString(voter['TYPE']) ?
						BX.util.htmlspecialchars(voter['TYPE']) : null;

					var answerId = ["a", this.answerId,  "u", voterId].join('');
					if (container.querySelector('a#' + answerId) === null)
					{
						var html = [
							'<span class="bx-ilike-popup-avatar-new">',
								'<img src="', (voterPhoto ?? '/bitrix/images/main/blank.gif'),
									'" class="bx-ilike-popup-avatar-img', (voterPhoto ? '' : ' bx-ilike-popup-avatar-img-default'),
								'" />',
								'<span class="bx-ilike-popup-avatar-status-icon"></span>',
							'</span>',
							'<span class="bx-ilike-popup-name-new">', voterName, '</span>'
						].join('');

						container.appendChild(
							BX.create(voter['ID'] !== "HIDDEN" && this.urlTemplate ? "A" : "SPAN", {
								attrs: {id: answerId},
								props: {
									href: this.urlTemplate.replace(/#(USER_ID|ID)#/i, voterId),
									target: "_blank",
									className: "bx-ilike-popup-img" + (voterType ? " bx-ilike-popup-img-" + voterType : "")
								},
								html: html,
							})
						);
					}
					changed = true;
				});

				if (changed)
				{
					this.popup.adjustPosition({forceBindPosition: true});
					this.popupScrollCheck({currentTarget: container});
				}
			},

			makeError: function(errors)
			{
				var contentContainer = this.popup ? this.popup.getPopupContainer() : null;
				if (contentContainer === null)
				{
					return;
				}

				var text = (errors || [{message: BX.message("VOTE_ERROR_DEFAULT")}]).map((item) => {
					return item.message;
				}).join('');
				contentContainer.innerHTML = '<div class="bx-vote-popup-error-block">' + text + '</div>';
				this.popup.adjustPosition({forceBindPosition: true});
			},

			showPopup: function()
			{
				return new Promise((resolve) => {
					var popup = this.getPopup();
					popup.show();
					popup.setAngle({position:'bottom'});
					popup.adjustPosition({forceBindPosition: true});
					resolve(popup);
				})
			},

			getPopup: function()
			{
				if (this.popup)
				{
					return this.popup;
				}

				this.popup = new BX.PopupWindow('bx-vote-popup-cont-' + this.id, this.node, {
					lightShadow: true,
					offsetTop: -2,
					offsetLeft: 3,
					autoHide: true,
					closeByEsc: true,
					cacheable: false,
					bindOptions: {position: "top"},
					content: [
						'<span class="bx-ilike-wrap-block" style="display: none;">' +
							'<span class="bx-ilike-popup"><span class="bx-ilike-bottom_scroll"></span></span>' +
						'</span>',
						'<span class="bx-ilike-wait"></span>'
					].join(''),
					events: {
						onFirstShow: () => {
							this.send();
							BX.bind(
								this.popup.contentContainer.querySelector('.bx-ilike-popup'),
								'scroll' ,
								this.popupScrollCheck
							)
						},
						onClose: () => {
							this.popup = null;
						}
					}
				});
				return this.popup;
			},

			popupScrollCheck: function()
			{
				var container = this.popup ? this.popup.contentContainer : null;
				if (container === null)
				{
					return;
				}

				var res = container.querySelector('.bx-ilike-popup');
				if (
					(res.scrollTop > (res.scrollHeight - res.offsetHeight) / 1.5)
					||
					container.offsetHeight > res.offsetHeight
				)
				{
					this.send();
				}
			},

			send: function()
			{
				if (this.status !== 'ready')
				{
					if (this.status === 'busy')
					{
						this.queue.push(this.send.bind(this));
					}
					else if (this.status === 'done')
					{
						this.finalize();
					}
					return;
				}

				this.status = 'busy';

				BX.ajax({
					url: BX.util.add_url_param(this.url, {action: "getVoted", attachId: this.attachId, answerId: this.answerId}),
					method: 'POST',
					dataType: 'json',
					data: {
						iNumPage: (++this.iNumPage),
						nameTemplate: this.nameTemplate,
						sessid: BX.bitrix_sessid()
					},
					onsuccess: function(data)
					{
						if (data && data.status === "success")
						{
							data = data.data;

							this.buildVoters(data.items);
							this.data = this.data.concat(data.items);

							if (data["statusPage"] === "done" || data.items.length <= 0)
							{
								this.status = 'done';
								this.finalize();
							}
							else
							{
								this.status = 'ready';
								var f = this.queue.shift();
								if (f)
								{
									f.call(this);
								}
							}
						}
						else
						{
							this.status = 'error';
							this.makeError(data.errors);
							this.finalize();
						}
					}.bind(this),
					onfailure: function()
					{
						this.status = 'error';
						this.makeError();
						this.finalize();
					}.bind(this)
				});
			},

			finalize: function()
			{
				this.queue = [];
				var popupContainer = this.popup ? this.popup.getPopupContainer() : null;
				if (popupContainer === null)
				{
					return;
				}

				popupContainer.querySelector('.bx-ilike-wait').style.display = "none";

				BX.unbind(
					popupContainer.querySelector('.bx-ilike-popup'),
					'scroll' ,
					this.popupScrollCheck
				);
			}
		};
		return d;
	})();
})(window);

Youez - 2016 - github.com/yon3zu
LinuXploit