%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 18.118.166.94
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/js/landing/ui/panel/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/js/landing/ui/panel//url_list.js
;(function() {
	"use strict";

	BX.namespace("BX.Landing.UI.Panel");

	var addClass = BX.Landing.Utils.addClass;
	var removeClass = BX.Landing.Utils.removeClass;
	var append = BX.Landing.Utils.append;
	var onCustomEvent = BX.Landing.Utils.onCustomEvent;
	var setTextContent = BX.Landing.Utils.setTextContent;
	var create = BX.Landing.Utils.create;
	var style = BX.Landing.Utils.style;
	var isNumber = BX.Landing.Utils.isNumber;
	var isString = BX.Landing.Utils.isString;
	var isPlainObject = BX.Landing.Utils.isPlainObject;
	var isArray = BX.Landing.Utils.isArray;
	var addQueryParams = BX.Landing.Utils.addQueryParams;

	var TYPE_PAGE = "landing";
	var TYPE_BLOCK = "block";
	var TYPE_SYSTEM = "system";
	var TYPE_CRM_FORM = "crmFormPopup";
	var TYPE_CRM_PHONE = "crmPhone";

	var SidebarButton = BX.Landing.UI.Button.SidebarButton;

	/**
	 * Implements interface for works with links list
	 *
	 * @extends {BX.Landing.UI.Panel.Content}
	 *
	 * @param {string} id
	 * @param {object} [data]
	 * @constructor
	 */
	BX.Landing.UI.Panel.URLList = function(id, data)
	{
		BX.Landing.UI.Panel.Content.apply(this, arguments);

		addClass(this.layout, "landing-ui-panel-url-list");
		addClass(this.overlay, "landing-ui-panel-url-list-overlay");
		addClass(this.overlay, "landing-ui-hide");

		this.overlay.hidden = true;
		this.overlay.dataset.isShown = "false";

		// Bind on block events
		onCustomEvent("BX.Landing.Block:init", this.refresh.bind(this));
 		onCustomEvent("BX.Landing.Block:remove", this.refresh.bind(this));

		// Append panel
		append(this.layout, document.body);

		// Make loader
		this.loader = new BX.Loader({target: this.content});

		this.promiseResolve = (function() {});
		this.layout.hidden = true;
		this.isNeedLoad = true;
		this.cache = new BX.Cache.MemoryCache();
	};


	/**
	 * Gets instance
	 * @returns {BX.Landing.UI.Panel.URLList}
	 */
	BX.Landing.UI.Panel.URLList.getInstance = function()
	{
		if (!BX.Landing.UI.Panel.URLList.instance)
		{
			BX.Landing.UI.Panel.URLList.instance = new BX.Landing.UI.Panel.URLList("url_list");
		}

		return BX.Landing.UI.Panel.URLList.instance;
	};


	/**
	 * Stores instance
	 * @static
	 * @type {BX.Landing.UI.Panel.URLList}
	 */
	BX.Landing.UI.Panel.URLList.instance = null;


	BX.Landing.UI.Panel.URLList.prototype = {
		constructor: BX.Landing.UI.Panel.URLList,
		__proto__: BX.Landing.UI.Panel.Content.prototype,


		/**
		 * Refresh cached values
		 */
		refresh: function()
		{
			this.isNeedLoad = true;
		},


		/**
		 * Shows loader
		 */
		showLoader: function()
		{
			this.loader.show(this.content);
		},


		/**
		 * Shows panel
		 * @param {String} view - landings|blocks
		 * @param {object} options
		 * @return {Promise}
		 */
		show: function(view, options)
		{
			this.showOptions = options;
			BX.Landing.UI.Panel.Content.prototype.show.call(this);

			this.clear();
			this.showLoader();

			if (view === TYPE_PAGE)
			{
				removeClass(this.layout, "landing-ui-panel-url-list-blocks");
				setTextContent(this.title, options.panelTitle || BX.Landing.Loc.getMessage("LANDING_LINKS_LANDINGS_TITLE"));
				this.showSites(options);
			}
			else if (view === TYPE_BLOCK)
			{
				setTextContent(this.title, options.panelTitle || BX.Landing.Loc.getMessage("LANDING_LINKS_BLOCKS_TITLE"));
				this.showBlocks(options);
			}
			else if (view === TYPE_CRM_FORM)
			{
				setTextContent(this.title, options.panelTitle || BX.Landing.Loc.getMessage("LANDING_LINKS_CRM_FORMS_TITLE"));
				this.showForms(options);
			}
			else if (view === TYPE_CRM_PHONE)
			{
				setTextContent(this.title, options.panelTitle || BX.Landing.Loc.getMessage("LANDING_LINKS_CRM_PHONES_TITLE"));
				this.showPhones(options);
			}

			return new Promise(function(resolve) {
				this.promiseResolve = resolve;
			}.bind(this));
		},

		/**
		 * Shows sites list
		 * @param {object} options
		 */
		showSites: function(options)
		{
			var currentSiteId = options.siteId;

			void style(this.layout, {
				width: null
			});

			if (!BX.Type.isPlainObject(options.filter))
			{
				options.filter = {};
			}

			var env = BX.Landing.Env.getInstance();
			if (BX.Type.isNil(options.filter.ID) && env.getType() === 'GROUP')
			{
				options.filter.ID =	env.getSiteId();
			}

			if (options.filter.ID === -1)
			{
				delete options.filter.ID;
			}

			options.filter.SPECIAL = 'N';

			void BX.Landing.Backend.getInstance()
				.getSites(options).then(function(sites) {
					this.appendSidebarButton(
						new SidebarButton("current_site", {
							text: BX.Landing.Loc.getMessage("LANDING_LINKS_PANEL_CURRENT_SITE")
						})
					);

					sites.forEach(function(site) {
						// noinspection EqualityComparisonWithCoercionJS
						if (parseInt(site.ID) == currentSiteId)
						{
							this.currentSiteButton = new SidebarButton(site.ID, {
								text: site.TITLE,
								onClick: !options.currentSiteOnly ? this.onSiteClick.bind(this, site.ID, options.enableAreas) : null,
								child: true,
								active: true
							});

							this.appendSidebarButton(this.currentSiteButton);
						}
					}, this);

					BX.Landing.Backend.getInstance()
						.getLandings({siteId: currentSiteId}, options.filterLanding)
						.then(function(landings) {
							var fakeEvent = {currentTarget: this.currentSiteButton.layout};
							var siteClick = this.onSiteClick.bind(this, currentSiteId, options.enableAreas, fakeEvent);
							if (!options.disableAddPage)
							{
								this.appendCard(
									new BX.Landing.UI.Card.AddPageCard({
										siteId: currentSiteId,
										onSave: this.addPageSave.bind(this, siteClick, currentSiteId)
									})
								);
							}
							landings.forEach(function(landing) {
								if (!landing.IS_AREA || (landing.IS_AREA && options.enableAreas))
								{
									this.appendCard(
										new BX.Landing.UI.Card.LandingPreviewCard({
											title: landing.TITLE,
											description: landing.DESCRIPTION,
											preview: landing.PREVIEW,
											onClick: this.onLandingClick.bind(this, landing.ID, landing.TITLE)
										})
									);
								}
							}, this);

							this.loader.hide();
						}.bind(this));

					if (!options.currentSiteOnly)
					{
						this.appendSidebarButton(
							new SidebarButton("my_sites", {
								text: BX.Landing.Loc.getMessage("LANDING_LINKS_PANEL_MY_SITES")
							})
						);

						sites.forEach(function(site) {
							this.appendSidebarButton(
								new SidebarButton(site.ID, {
									text: site.TITLE,
									onClick: this.onSiteClick.bind(this, site.ID, options.enableAreas),
									child: true
								})
							);
						}, this);
					}
				}.bind(this));
		},

		/**
		 * @private
		 * @return {BX.Landing.UI.Button.SidebarButton}
		 */
		createCurrentSiteButton: function()
		{
			return new SidebarButton("current_site", {
				text: BX.Landing.Loc.getMessage("LANDING_LINKS_PANEL_CURRENT_SITE")
			});
		},


		/**
		 * Shows blocks list
		 * @param {object} options
		 */
		showBlocks: function(options)
		{
			var currentLandingId = options.landingId;
			var currentSiteId = options.siteId;

			void style(this.layout, {
				width: "880px"
			});

			if (!BX.Type.isPlainObject(options.filter))
			{
				options.filter = {
					SPECIAL: 'N',
				};
			}
			else
			{
				options.filter.SPECIAL = 'N';
			}

			BX.Landing.Backend.getInstance()
				.getSites(options)
				.then(function(sites) {
					this.appendSidebarButton(
						this.createCurrentSiteButton()
					);

					var sitesIds = sites.map(function(site) {
						return site.ID;
					}, this);

					return BX.Landing.Backend.getInstance()
						.getLandings({siteId: sitesIds})
						.then(function(landings) {
							return sites.reduce(function(result, site, index) {
								var currentLandings = landings.filter(function(landing) {
									return site.ID === landing.SITE_ID;
								});

								result[site.ID] = {site: site, landings: currentLandings};
								return result;
							}, {});
						})
				}.bind(this))
				.then(function(result) {
					result[currentSiteId].landings.forEach(function(landing) {
						var active = parseInt(landing.ID) === parseInt(currentLandingId);

						if (!options.currentPageOnly || active)
						{
							var button = this.createLandingSidebarButton(landing, active);
							this.appendSidebarButton(button);

							if (active)
							{
								button.layout.click();
							}
						}

					}, this);

					if (!options.currentPageOnly)
					{
						Object.keys(result).forEach(function(siteId) {
							if (parseInt(siteId) !== parseInt(currentSiteId))
							{
								var site = result[siteId].site;
								this.appendSidebarButton(
									this.createSiteSidebarButton(site)
								);

								result[siteId].landings.forEach(function(landing) {
									this.appendSidebarButton(
										this.createLandingSidebarButton(landing)
									);
								}, this)
							}
						}, this);
					}
				}.bind(this));
		},

		showForms: function()
		{
			void style(this.layout, {
				width: "500px"
			});

			BX.Landing.Backend
				.getInstance()
				.action('Form::getList')
				.then(function(result) {
					result.forEach(function(form) {
						var cardParams = {
							title: form.NAME,
							className: 'landing-ui-card-form-preview',
							onClick: this.onFormChange.bind(this, form)
						};
						if(form.IS_CALLBACK_FORM === 'Y')
						{
							cardParams.className += ' landing-ui-card-form-preview--callback';
							// cardParams.title = BX.message();
							// cardParams.attrs = {
							// 	title: 'callback form'
							// };
						}
						this.appendCard(new BX.Landing.UI.Card.BaseCard(cardParams));
					}.bind(this));

					this.loader.hide();
				}.bind(this));
		},

		onFormChange: function(form)
		{
			this.hide();
			this.promiseResolve({
				id: form.ID,
				type: 'crmFormPopup',
				name: form.NAME
			});
		},

		showPhones: function()
		{
			void style(this.layout, {
				width: "500px"
			});

			BX.Landing.Env
				.getInstance()
				.getOptions()
				.references
				.forEach(function(item) {
				this.appendCard(
					new BX.Landing.UI.Card.BaseCard({
						title: item.text,
						className: 'landing-ui-card-form-preview',
						onClick: this.onPhoneChange.bind(this, item)
					})
				);
			}.bind(this));

			this.loader.hide();
		},

		onPhoneChange: function(phone)
		{
			this.hide();
			this.promiseResolve({
				id: phone.value,
				type: 'crmPhone',
				name: phone.text
			});
		},

		createLandingSidebarButton: function(landing, active)
		{
			return (
				new SidebarButton(landing.ID, {
					text: landing.TITLE,
					onClick: this.onLandingChange.bind(this, landing),
					child: true,
					active: active
				})
			);
		},

		createSiteSidebarButton: function(site)
		{
			return (
				new SidebarButton(site.ID, {
					text: site.TITLE,
					child: false,
					active: false
				})
			);
		},


		onLandingChange: function(landing, event)
		{
			this.currentSelectedLanding = landing;
			this.sidebarButtons.forEach(function(button) {
				if (button.layout === event.currentTarget)
				{
					button.activate();
					return;
				}

				button.deactivate();
			});

			this.showPreviewLoader()
				.then(this.createIframeIfNeed())
				.then(this.loadPreviewSrc(this.buildLandingPreviewUrl(landing)))
				.then(this.hidePreviewLoader())

		},

		buildLandingPreviewUrl: function(landing)
		{
			var editorUrl = BX.Landing.Main.getInstance().options.params.sef_url.landing_view;
			editorUrl = editorUrl.replace("#site_show#", landing.SITE_ID);
			editorUrl = editorUrl.replace("#landing_edit#", landing.ID);

			return addQueryParams(editorUrl, {
				landing_mode: "edit"
			});
		},

		loadPreviewSrc: function(src)
		{
			return function()
			{
				return new Promise(function(resolve) {
					if (this.previewFrame.src !== src)
					{
						this.previewFrame.src = src;
						this.previewFrame.onload = function() {
							var contentDocument = this.previewFrame.contentDocument;
							BX.Landing.Utils.removePanels(contentDocument);
							[].slice.call(contentDocument.querySelectorAll(".block-wrapper"))
								.forEach(function(wrapper) {
									wrapper.classList.add("landing-ui-block-selectable-overlay");
									wrapper.addEventListener("click", function(event) {
										event.preventDefault();
										var mainNode = wrapper.closest('[data-landing]');
										var landingId = BX.Dom.attr(mainNode, 'data-landing');
										this.onBlockClick(parseInt(wrapper.id.replace("block", "")), event, landingId);
									}.bind(this));
								}, this);
							resolve(this.previewFrame);
						}.bind(this);
						return;
					}

					resolve(this.previewFrame);
				}.bind(this));
			}.bind(this)
		},

		showPreviewLoader: function()
		{
			if (!this.loader)
			{
				this.loader = new BX.Loader();
			}

			if (this.previewFrameWrapper)
			{
				void style(this.previewFrameWrapper, {
					opacity: 0
				});
			}

			return new Promise(function(resolve) {
				void this.loader.show(this.content);
				resolve();
			}.bind(this));
		},


		hidePreviewLoader: function()
		{
			return function()
			{
				void style(this.previewFrameWrapper, {
					opacity: null
				});

				return this.loader.hide();
			}.bind(this);
		},


		createIframeIfNeed: function()
		{
			return function()
			{
				new Promise(function(resolve) {
					if (!this.previewFrame)
					{
						this.previewFrame = create("iframe", {});
						this.previewFrameWrapper = create("div", {
							attrs: {style: "width: 100%; height: 100%; overflow: hidden;"}
						});
						this.previewFrameWrapper.appendChild(this.previewFrame);
						this.content.innerHTML = "";
						this.content.appendChild(this.previewFrameWrapper);
						this.showPreviewLoader();

						requestAnimationFrame(function() {
							var containerWidth = this.content.clientWidth - 40;

							void style(this.previewFrame, {
								"width": "1000px",
								"height": "calc((100vh - 113px) * (100 / "+((containerWidth/1000)*100)+"))",
								"transform": "scale("+(containerWidth/1000)+") translateZ(0)",
								"transform-origin": "top left",
								"border": "none"
							});
						}.bind(this));
					}

					resolve(this.previewFrame);
				}.bind(this));
			}.bind(this)
		},


		/**
		 * Handle block click event
		 * @param {Number|String} id
		 * @param event
		 * @param {number} landingId
		 */
		onBlockClick: function(id, event, landingId)
		{
			if (event.isTrusted)
			{
				void BX.Landing.Backend.getInstance()
					.getBlocks({landingId: landingId})
					.then(function(blocks) {
						var currentBlock = blocks.find(function(block) {
							return block.id === id;
						});

						if (currentBlock)
						{
							this.onChange({
								type: TYPE_BLOCK,
								id: currentBlock.id,
								name: currentBlock.name,
								alias: currentBlock.alias
							});
						}
					}.bind(this));
			}
		},


		/**
		 * Handle landing click event
		 * @param {Number|String} id
		 * @param {String} name
		 */
		onLandingClick: function(id, name)
		{
			this.onChange({type: TYPE_PAGE, id: id, name: name});
		},


		/**
		 * Handle system click event
		 * @param {Number|String} id
		 * @param {String} name
		 */
		onSystemClick: function(id, name)
		{
			this.onChange({type: TYPE_SYSTEM, id: "_" + id, name: name});
		},


		/**
		 * Handle site click event
		 * @param {?boolean} enableAreas
		 * @param {object} event
		 * @param {Number|String} siteId
		 */
		onSiteClick: function(siteId, enableAreas, event)
		{
			this.sidebarButtons.forEach(function(button) {
				if (
					button.layout === event.currentTarget
					|| (
						!!event.target
						&& button.layout === event.target.closest('.landing-ui-button')
					)
				)
				{
					this.currentSiteButton = button;
					button.activate();
				}
				else
				{
					button.deactivate();
				}
			}, this);

			this.content.innerHTML = "";
			this.showLoader();

			BX.Landing.Backend.getInstance()
				.getLandings({siteId: siteId})
				.then(function(landings) {
					var siteClick = this.onSiteClick.bind(this, siteId, enableAreas, event);
					this.appendCard(
						new BX.Landing.UI.Card.AddPageCard({
							siteId: siteId,
							onSave: this.addPageSave.bind(this, siteClick, siteId)
						})
					);
					landings.forEach(function(landing) {
						if (!landing.IS_AREA || (landing.IS_AREA && enableAreas))
						{
							this.appendCard(this.createLandingPreview(landing));
						}
					}, this);
					this.loader.hide();
				}.bind(this));
		},

		addPageSave: function(reloadFn, siteId)
		{
			this.cache = new BX.Cache.MemoryCache();
			var backend = BX.Landing.Backend.getInstance();
			backend.cache.delete('landings+['+siteId+']');
			backend.cache.delete('landings+["'+siteId+'"]');
			backend.cache.delete('landing+'+siteId);
			reloadFn();
		},

		/**
		 * Creates landing preview
		 * @param {{
		 * 		ID: Number|String,
		 * 		TITLE: String,
		 * 		DESCRIPTION: String,
		 * 		PREVIEW: String
		 *  }} options
		 * @return {BX.Landing.UI.Card.LandingPreviewCard}
		 */
		createLandingPreview: function(options)
		{
			return new BX.Landing.UI.Card.LandingPreviewCard({
				title: options.TITLE,
				description: options.DESCRIPTION,
				preview: options.PREVIEW,
				onClick: this.onLandingClick.bind(this, options.ID, options.TITLE)
			});
		},


		/**
		 * Creates block preview
		 * @param {{id: Number|String, name: String}} options
		 * @return {BX.Landing.UI.Card.BlockHTMLPreview}
		 */
		createBlockPreview: function(options)
		{
			return new BX.Landing.UI.Card.BlockHTMLPreview({
				content: options.id,
				onClick: this.onBlockClick.bind(this, options.id, options.name, options.alias)
			});
		},

		/**
		 * Gets landing by id
		 * @param {Number|String} landingId
		 * @param {object} options
		 */
		getLanding: function(landingId, options)
		{
			var key = JSON.stringify(["getLanding" + landingId, options]);

			return this.cache.remember(key, function() {
				return BX.Landing.Backend.getInstance()
					.action("Landing::getList", {params: {
							filter: {ID: landingId},
							get_preview: true
						}})
					.then(function(response) {
						return response;
					}.bind(this))
			}.bind(this));
		},

		getBlock: function(id)
		{
			var cacheKey = "getBlocks" + id;

			return this.cache.remember(cacheKey, function() {
				return BX.Landing.Backend.getInstance()
					.action("Block::getById", {
						block: id,
						params: {
							edit_mode: true
						}
					})
					.then(function(response) {
						return response;
					}.bind(this));
			}.bind(this));
		},

		onChange: function(value)
		{
			this.promiseResolve(value);
			this.hide();
		},

		hide: function()
		{
			this.previewFrame = null;
			return BX.Landing.UI.Panel.Content.prototype.hide.call(this);
		}
	}
})();

Youez - 2016 - github.com/yon3zu
LinuXploit