%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.139.234.48
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/components/bitrix/translate.edit/templates/.default/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/translate.edit/templates/.default/script.js
;(function ()
{
	'use strict';

	BX.namespace('BX.Translate');
	if (BX.Translate.Editor)
	{
		return;
	}

	var Editor = function ()
	{
		this.id = '';
		this.tabId = '';
		this.filePath = '';
		this.linkBack = '';
		this.editLink = '';
		this.messages = {};
		this.viewMode = '';
		this.viewModeMenu = [];
		this.extraMenu = [];
		this.deleteMenu = [];
		this.mode = '';

		/** @var {String} */
		this.controller = '';
		/** @var {String} */
		this.action = '';
		/** @var {Object} */
		this.params = {};
		/** @var {XMLHttpRequest} */
		this.xhr = null;
	};

	Editor.prototype.VIEW_MODE = {
		ShowAll: "ShowAll",
		Untranslated: "Untranslated",
		SourceEdit: "SourceEdit",
		SourceView: "SourceView"
	};

	Editor.prototype.STATES = {
		intermediate: "INTERMEDIATE",
		running: "RUNNING",
		error: "ERROR"
	};

	Editor.prototype.STYLES = {
		editor: "translate-edit",
		fade: "translate-edit-fade",
		editRow: "translate-edit-row",
		editRowPhrase: "phrase",
		editRowHighlight: "highlight",
		editArea: "translate-edit-area",
		editable: "editable",
		eraser: "eraser",
		eraserLabel: "eraser-label",
		errorLess: "error-less",
		errorMore: "error-more",
		menuItemChecked: "menu-popup-item-accept",
		delete: "delete"
	};

	/**
	 * @param {Object} param
	 * @param {String} [param.id]
	 * @param {String} [param.tabId]
	 * @param {String} [param.filePath]
	 * @param {String} [param.editLink]
	 * @param {String} [param.linkBack]
	 * @param {String} [param.controller]
	 * @param {Object} [param.param]
	 * @param {String} [param.viewMode]
	 * @param {String} [param.mode]
	 * @param {Object} [param.messages]
	 * @param {Array} [param.viewModeMenu]
	 * @param {Array} [param.extraMenu]
	 * @param {Array} [param.deleteMenu]
	 * @param {String} [param.highlightPhrase]
	 * @constructor
	 */
	Editor.prototype.init = function (param)
	{
		param = param || {};

		if (!BX.type.isNotEmptyString(param.tabId))
			throw "BX.Translate.Editor: 'tabId' parameter missing.";

		if (!BX.type.isNotEmptyString(param.filePath))
			throw "BX.Translate.Editor: 'filePath' parameter missing.";

		if (!BX.type.isNotEmptyString(param.editLink))
			throw "BX.Translate.Editor: 'editLink' parameter missing.";

		if (!BX.type.isNotEmptyString(param.linkBack))
			throw "BX.Translate.Editor: 'linkBack' parameter missing.";

		if (BX.type.isNotEmptyString(param.mode))
		{
			this.mode = param.mode;
		}

		this.filePath = param.filePath;
		this.editLink = param.editLink;
		this.linkBack = param.linkBack;
		this.tabId = param.tabId;
		this.id = param.id || 'bx-translate-editor-' + this.tabId;

		if (!BX.type.isNotEmptyString(param.controller))
		{
			throw "BX.Translate.Editor: Could not find ajax controller endpoint.";
		}
		this.controller = param.controller;

		this.param = param.param || {};

		if (!BX.type.isNotEmptyString(param.viewMode))
		{
			this.viewMode = param.viewMode;
		}
		else
		{
			this.viewMode = this.VIEW_MODE.ShowAll;
		}

		this.viewModeMenu = param.viewModeMenu;
		this.extraMenu = param.extraMenu;
		this.deleteMenu = param.deleteMenu;


		if (BX.type.isPlainObject(param.messages))
		{
			this.messages = param.messages;
		}

		if (BX.type.isPlainObject(param.messages))
		{
			this.messages = param.messages;
		}


		var nodeViewMode = BX('bx-translate-mode-menu-view-anchor');
		if(nodeViewMode)
		{
			BX.bind(nodeViewMode, 'click', BX.proxy(this.showViewModeMenu, this));
		}

		var nodeExtraMenu = BX('bx-translate-extra-menu-anchor');
		if(nodeExtraMenu)
		{
			BX.bind(nodeExtraMenu, 'click', BX.proxy(this.showExtraMenu, this));
		}

		if (this.getForm())
		{
			var nodes = this.getForm().querySelectorAll('.' + this.STYLES.editable);
			if (nodes)
			{
				nodes.forEach(BX.proxy(function (node) {
					BX.bind(node, 'focus', BX.delegate(this.showEditArea, this));
				}, this));
			}

			var nodeDeleteMenu = BX('bx-translate-delete-menu-anchor');
			if (nodeDeleteMenu)
			{
				BX.bind(nodeDeleteMenu, 'click', BX.proxy(this.showDeleteMenu, this));
			}

			nodes = this.getForm().querySelectorAll('.' + this.STYLES.eraserLabel);
			if (nodes)
			{
				nodes.forEach(BX.proxy(function (node) {
					BX.bind(node, 'keydown', function (ev) {
						/** @var {Element} node */
						var node = ev.currentTarget;
						var key = (ev.keyCode ? ev.keyCode : (ev.which ? ev.which : null));
						if (!!node && key === 32)
						{//space
							ev.stopPropagation();
							ev.preventDefault();

							if (document.createEvent)
							{
								var evt = document.createEvent('MouseEvents');
								evt.initEvent('click', true, false);
								node.dispatchEvent(evt);
							}
							else if (document.createEventObject)
							{
								node.fireEvent('onclick');
							}
							else if (typeof node.onclick == 'function')
							{
								node.onclick();
							}
							return false;
						}
						return true;
					});
				}, this));
			}

			nodes = this.getForm().querySelectorAll('.' + this.STYLES.eraser);
			if (nodes)
			{
				nodes.forEach(BX.proxy(function (node) {
					BX.bind(node, 'change', BX.proxy(function (ev) {
						/** @var {Element} node */
						var node = ev.currentTarget,
							code = BX.data(node, "code"),
							checked = node.checked;

						var nodes = this.getForm().querySelectorAll("." + this.STYLES.editRow + "." + this.STYLES.editRowPhrase + "[rel='" + code + "']");
						if (nodes)
						{
							nodes.forEach(BX.proxy(function (row) {
								if (checked)
								{
									BX.addClass(row, this.STYLES.delete);
								}
								else
								{
									BX.removeClass(row, this.STYLES.delete);
								}

							}, this));
						}

						return true;
					}, this));
				}, this));
			}
		}

		BX.Event.EventEmitter.subscribe(BX.UI.StepProcessing.ProcessEvent.BeforeRequest, BX.delegate(function(event){
			/** @type {BX.Main.Event.BaseEvent} event */
			var process = event.data.process ? event.data.process : {};
			var params = event.data.actionData ? event.data.actionData : {};

			/** @type {BX.UI.StepProcessing.Process} process */
			if (process instanceof BX.UI.StepProcessing.Process)
			{
				process.setParam('file', this.getCurrentPath());
				process.method = 'POST';
			}
			if (params instanceof FormData)
			{
				params.append('file', this.getCurrentPath());
				params.append('tabId', this.tabId);
				params.append('AJAX_CALL', 'Y');
				if(this.mode == 'admin')
				{
					params.append('admin_section', 'Y');
					params.append('lang', BX.message('LANGUAGE_ID'));
				}
			}
			else
			{
				params['file'] = this.getCurrentPath();
				params['tabId'] = this.tabId;
				params['AJAX_CALL'] = 'Y';
				if(this.mode == 'admin')
				{
					params['admin_section'] = 'Y';
					params['lang'] = BX.message('LANGUAGE_ID');
				}
			}
		}, this));

		var highlightPhrase = '';
		if (BX.type.isNotEmptyString(param.highlightPhrase))
		{
			highlightPhrase = param.highlightPhrase;
		}
		else if (BX.type.isNotEmptyString(window.location.hash))
		{
			highlightPhrase = window.location.hash.replace(/#/g, '');
		}

		if (highlightPhrase != '')
		{
			var phraseCode = highlightPhrase.replace(/[^a-z1-9_]+/ig, ''),
				anchor = this.getForm().querySelector("[name='" + highlightPhrase + "']");
			if (anchor)
			{
				anchor.scrollIntoView({ behavior: 'smooth' , block : 'start'});
			}
			nodes = this.getForm().querySelectorAll("." + this.STYLES.editRow + "." + this.STYLES.editRowPhrase + "[rel='" + phraseCode + "']");
			if (nodes)
			{
				nodes.forEach(BX.proxy(function (row) { BX.addClass(row, this.STYLES.editRowHighlight); }, this));
			}
		}

	};



	/**
	 * @param {String} mode
	 */
	Editor.prototype.toggleDelete = function (mode)
	{
		var classType, hasBeenChecked, stateToSet,
			//message, nodeDeleteMenu = BX('bx-translate-delete-menu-anchor'),
			inx, item, items = deleteMenuPopup.getMenuItems();

		hasBeenChecked = false;
		for (inx in items)
		{
			if(!items.hasOwnProperty(inx)) continue;
			item = items[inx];

			if (item.id == 'translate-delete-' + mode)
			{
				hasBeenChecked = BX.hasClass(item.layout.item, this.STYLES.menuItemChecked);
				if (hasBeenChecked)
				{
					BX.removeClass(item.layout.item, this.STYLES.menuItemChecked);
				}
				else
				{
					BX.addClass(item.layout.item, this.STYLES.menuItemChecked);
				}
			}
			else
			{
				BX.removeClass(item.layout.item, this.STYLES.menuItemChecked);
			}
		}

		classType = '';
		if (hasBeenChecked)
		{
			//message = this.getMessage('Delete');
			stateToSet = false;
		}
		else if (mode == 'all')
		{
			//message = this.getMessage('DeleteAll');
			stateToSet = true;
		}
		else if (mode == 'ethalon')
		{
			//message = this.getMessage('DeleteEthalon');
			classType = this.STYLES.errorMore;
			stateToSet = true;
		}

		/*if(nodeDeleteMenu)
		{
			nodeDeleteMenu.firstChild.innerHTML = message;
		}*/

		var nodes = this.getForm().querySelectorAll('input.' + this.STYLES.eraser);
		if(nodes)
		{
			nodes.forEach(BX.proxy(function(node)
			{
				if (classType != '')
				{
					if (BX.hasClass(node, classType))
					{
						node.checked = stateToSet;
					}
					else
					{
						node.checked = false;
					}
				}
				else
				{
					node.checked = stateToSet;
				}

				if (document.createEvent) {
					var evt = document.createEvent('HTMLEvents');
					evt.initEvent('change', true, false);
					node.dispatchEvent(evt);
				} else if (document.createEventObject) {
					node.fireEvent('onchange') ;
				} else if (typeof node.onchange == 'function') {
					node.onchange();
				}

			}, this));
		}

		if (deleteMenuPopup)
		{
			deleteMenuPopup.close();
		}
	};



	/**
	 * @param {Event} event
	 */
	Editor.prototype.showEditArea = function (event)
	{
		/** @var {Element} node */
		var node = event.currentTarget;
		if(node)
		{
			var
				fldName = BX.data(node, 'fld'),
				langId = BX.data(node, 'lng'),
				length = parseInt(BX.data(node, 'length')),
				lineCnt = parseInt(BX.data(node, 'lines')),
				phraseId = BX.data(node, 'code');

			lineCnt = (lineCnt ? lineCnt : 1);
			lineCnt ++;
			if (length > 100 && Math.round(length / 100) > lineCnt)
			{
				lineCnt = Math.round(length / 100) + 1;
			}
			if (lineCnt > 10)
			{
				lineCnt = 10;
			}

			var textArea = BX.create(
				"TEXTAREA",
				{
					attrs: {
						className: this.STYLES.editArea,
						cols: 60,
						rows: lineCnt,
						name: fldName,
						tabIndex: node.tabIndex,
						value: node.innerText
					},
					text: "",
					dataset: {
						fld: fldName,
						lng: langId,
						code: phraseId
					}
				}
			);
			var holder = BX.create(
				"DIV",
				{
					attrs: {
						className: "value edit"
					},
					children: [
						textArea
					]
				}
			);


			BX.insertAfter(holder, node);
			BX.hide(node);

			textArea.value = node.innerText;
			textArea.focus();

			node.removeAttribute('tabIndex');
		}
	};

	/**
	 */
	Editor.prototype.cancel = function ()
	{
		if (this.getForm())
		{
			var nodes = this.getForm().querySelectorAll('.' + this.STYLES.editArea);
			if (BX.type.isArray(nodes))
			{
				nodes.forEach(function (node) {
					BX.remove(node.parentNode);
				});
			}

			nodes = this.getForm().querySelectorAll('.' + this.STYLES.editable);
			if (BX.type.isArray(nodes))
			{
				nodes.forEach(function (node) {
					BX.show(node);
				});
			}
		}

		this.fade();

		window.location = this.linkBack;
	};

	/**
	 */
	Editor.prototype.save = function (redirectToList)
	{
		if(this.getState() === this.STATES.running)
		{
			return;
		}

		this.setState(this.STATES.running);
		this.setAction('save');

		var actionData = BX.clone(this.params);

		actionData['file'] = this.getCurrentPath();
		actionData['tabId'] = this.tabId;
		actionData['AJAX_CALL'] = 'Y';
		if(this.mode == 'admin')
		{
			actionData['admin_section'] = 'Y';
			actionData['lang'] = BX.message('LANGUAGE_ID');
		}

		actionData['KEYS'] = [];
		actionData['DROP'] = [];
		actionData['LANGS'] = [];

		var form = this.getForm();
		for(var i = 0, n = form.elements.length, phraseId, landId; i < n; i++)
		{
			/** @var {Element} el */
			var el = form.elements[i];
			if (el.disabled) continue;

			switch(el.type.toLowerCase())
			{
				case 'textarea':
					if (el.className.indexOf(this.STYLES.editArea) < 0)
					{
						break;
					}

					phraseId = BX.data(el, 'code');
					if(actionData['KEYS'].indexOf(phraseId) === -1)
					{
						actionData['KEYS'].push(phraseId);
					}

					landId = BX.data(el, 'lng');
					if(actionData['LANGS'].indexOf(landId) === -1)
					{
						actionData['LANGS'].push(landId);
					}

					actionData[el.name] = el.value;

					break;


				case 'checkbox':
					if (el.checked)
					{
						phraseId = BX.data(el, 'code');
						if(actionData['DROP'].indexOf(phraseId) === -1)
						{
							actionData['DROP'].push(phraseId);
						}
					}
					break;

				default:
			}
		}

		this.fade();

		BX.ajax.runAction
		(
			this.getController() + '.' + this.getAction(),
			{
				data: actionData,
				method: 'POST',
				onrequeststart: BX.delegate(this.onRequestStart, this)
			}
		)
		.then(
			BX.delegate(this.onRequestSuccess, this),
			BX.delegate(this.onRequestFailure, this)
		)
		.then(
			BX.delegate(function (result) {
				if (redirectToList === true)
				{
					window.location = this.linkBack;
				}
				else
				{
					window.location = this.editLink;
				}
			}, this)
		);
	};

	/**
	 */
	Editor.prototype.saveSource = function (redirectToList)
	{
		if(this.getState() === this.STATES.running)
		{
			return;
		}

		this.setState(this.STATES.running);
		this.setAction('savesource');

		var actionData = BX.clone(this.params);

		actionData['file'] = this.getCurrentPath();
		actionData['tabId'] = this.tabId;
		actionData['AJAX_CALL'] = 'Y';
		if(this.mode == 'admin')
		{
			actionData['admin_section'] = 'Y';
			actionData['lang'] = BX.message('LANGUAGE_ID');
		}

		actionData['LANGS'] = [];

		var form = this.getForm();
		for(var i = 0, n = form.elements.length, phraseId, landId; i < n; i++)
		{
			/** @var {Element} el */
			var el = form.elements[i];
			if (el.disabled) continue;

			switch(el.type.toLowerCase())
			{
				case 'textarea':
					if (el.className.indexOf(this.STYLES.editArea) < 0)
					{
						break;
					}

					landId = BX.data(el, 'lng');
					if(actionData['LANGS'].indexOf(landId) === -1)
					{
						actionData['LANGS'].push(landId);
					}

					actionData[el.name] = el.value;

					break;

				default:
			}
		}

		this.fade();

		BX.ajax.runAction
		(
			this.getController() + '.' + this.getAction(),
			{
				data: actionData,
				method: 'POST',
				onrequeststart: BX.delegate(this.onRequestStart, this)
			}
		)
		.then(
			BX.delegate(this.onRequestSuccess, this),
			BX.delegate(this.onRequestFailure, this)
		)
		.then(
			BX.delegate(function (result) {
				if (redirectToList === true)
				{
					window.location = this.linkBack;
				}
				else
				{
					window.location = this.editLink;
				}
			}, this)
		);
	};

	/**
	 * @param {XMLHttpRequest} xhr
	 */
	Editor.prototype.onRequestStart = function(xhr)
	{
		this.xhr = xhr;
	};


	/**
	 * @param {Object} result
	 * @private
	 */
	Editor.prototype.onRequestSuccess = function (result)
	{
		this.xhr = null;

		if (!result)
		{
			BX.UI.Notification.Center.notify({
				content: this.getMessage("RequestError")
			});
			this.setState(this.STATES.error);
			return;
		}

		if (BX.type.isArray(result["errors"]) && result["errors"].length > 0)
		{
			var lastError = result["errors"][result["errors"].length - 1];
			BX.UI.Notification.Center.notify({
				content: lastError.message
			});
			this.setState(this.STATES.error);
			return;
		}

		var data = result["data"];

		var summary = BX.type.isNotEmptyString(data["SUMMARY"]) ? data["SUMMARY"] : "";
		if (summary !== "")
		{
			BX.UI.Notification.Center.notify({
				content: summary
			});
		}
		else
		{
			BX.UI.Notification.Center.notify({
				content: this.getMessage("RequestCompleted")
			});
		}

		this.setState(this.STATES.intermediate);

		return result;
	};

	/**
	 * @param {Object} result
	 */
	Editor.prototype.onRequestFailure = function (result)
	{
		this.unFade();

		if (BX.type.isArray(result["errors"]) && result["errors"].length > 0)
		{
			var lastError = result["errors"][result["errors"].length - 1];
			BX.UI.Notification.Center.notify({
				content: lastError.message
			});
		}
		else
		{
			BX.UI.Notification.Center.notify({
				content: this.getMessage("RequestError")
			});
		}

		this.xhr = null;

		this.setState(this.STATES.error);

		// buttons
		var buttonNodes = BX("ui-button-panel").querySelectorAll(".ui-btn-wait");
		if(buttonNodes)
		{
			buttonNodes.forEach(function(node){
				BX.removeClass(node, "ui-btn-wait");
			});
		}
	};


	/**
	 * @param {String} state
	 */
	Editor.prototype.setState = function (state)
	{
		if (this.state === state)
		{
			return;
		}

		this.state = state;
	};

	Editor.prototype.getState = function () {
		return this.state;
	};
	Editor.prototype.getController = function () {
		return this.controller;
	};
	Editor.prototype.setController = function (controller) {
		this.controller = controller;
	};
	Editor.prototype.getAction = function () {
		return this.action;
	};
	Editor.prototype.setAction = function (action) {
		this.action = action;
	};
	Editor.prototype.getId = function () {
		return this.id;
	};
	Editor.prototype.setId = function (id) {
		this.id = id;
	};
	Editor.prototype.getParams = function () {
		return this.params;
	};
	Editor.prototype.getParam = function (key) {
		return this.params[key] ? this.params[key] : null;
	};
	Editor.prototype.setParam = function (key, value) {
		this.params[key] = value;
	};


	/**
	 * @return {Element}
	 */
	Editor.prototype.getForm = function ()
	{
		return BX(this.getId());
	};

	/**
	 * @return {Element}
	 */
	Editor.prototype.getContainer = function ()
	{
		return this.getForm().querySelector("." + this.STYLES.editor);
	};

	/**
	 * @return {String}
	 */
	Editor.prototype.getMessage = function (name)
	{
		return BX.type.isNotEmptyString(this.messages[name]) ? this.messages[name] : "";
	};

	/**
	 * @return {String}
	 */
	Editor.prototype.getCurrentPath = function ()
	{
		return this.filePath;
	};

	//endregion


	//region Fade
	var loader;

	Editor.prototype.fade = function()
	{
		if(!(loader instanceof BX.Loader))
		{
			loader = new BX.Loader({
				target: this.getForm()
			});
		}

		BX.addClass(this.getContainer(), this.STYLES.fade);
		loader.show();
		BX.onCustomEvent('Grid::disabled', [this]);
	};

	Editor.prototype.unFade = function()
	{
		BX.removeClass(this.getContainer(), this.STYLES.fade);
		loader.hide();
	};

	//endregion


	//region Menu

	/** @type {BX.PopupMenuWindow} modeViewPopup */
	var modeViewPopup;

	Editor.prototype.showViewModeMenu = function (event)
	{
		var node = event.currentTarget;
		if (!modeViewPopup)
		{
			modeViewPopup = new BX.PopupMenuWindow(
				'translate-view-mode-menu',
				node,
				this.viewModeMenu,
				{autoHide: true, autoClose: true, closeByEsc: true}
			);
		}

		modeViewPopup.bindElement = node;
		modeViewPopup.show();
	};


	/** @type {BX.PopupMenuWindow} extraMenuPopup */
	var extraMenuPopup;

	Editor.prototype.showExtraMenu = function (event)
	{
		var node = event.currentTarget;
		if (!extraMenuPopup)
		{
			extraMenuPopup = new BX.PopupMenuWindow(
				'translate-extra-menu',
				node,
				this.extraMenu,
				{autoHide: true, autoClose: true, closeByEsc: true}
			);
		}

		extraMenuPopup.bindElement = node;
		extraMenuPopup.show();
	};

	/** @type {BX.PopupMenuWindow} deleteMenuPopup */
	var deleteMenuPopup;

	Editor.prototype.showDeleteMenu = function (event)
	{
		var node = event.currentTarget;
		if (!deleteMenuPopup)
		{
			deleteMenuPopup = new BX.PopupMenuWindow(
				'translate-delete-menu',
				node,
				this.deleteMenu,
				{
					autoHide: true,
					autoClose: true,
					closeByEsc: true
				}
			);
		}

		deleteMenuPopup.bindElement = node;
		deleteMenuPopup.show();
	};

	//endregion


	BX.Translate.Editor = new Editor();

})(window);

Youez - 2016 - github.com/yon3zu
LinuXploit