• Модуль: fileman
  • Путь к файлу: ~/bitrix/modules/fileman/classes/general/light_editor.php
  • Класс: CLightHTMLEditor
  • Вызов: CLightHTMLEditor::Init
function Init(&$arParams)
{
	global $USER, $APPLICATION;
	$basePath = '/bitrix/js/fileman/light_editor/';
	$this->Id = (isset($arParams['id']) && $arParams['id'] <> '') ? $arParams['id'] : 'bxlhe'.mb_substr(uniqid(mt_rand(), true), 0, 4);
	$this->Id = preg_replace("/[^a-zA-Z0-9_:.]/is", "", $this->Id);

	$this->cssPath = $basePath."light_editor.css";
	$APPLICATION->SetAdditionalCSS($this->cssPath);

	$this->arJSPath = array(
		$basePath.'le_dialogs.js',
		$basePath.'le_controls.js',
		$basePath.'le_toolbarbuttons.js',
		$basePath.'le_core.js'
	);

	$this->bBBCode = ($arParams['BBCode'] ?? null) === true;
	$this->bRecreate = ($arParams['bRecreate'] ?? null) === true;
	$arJS = Array();
	$arCSS = Array();

	foreach(GetModuleEvents("fileman", "OnBeforeLightEditorScriptsGet", true) as $arEvent)
	{
		$tmp = ExecuteModuleEventEx($arEvent, array($this->Id, $arParams));
		if (!is_array($tmp))
			continue;

		if (is_array($tmp['JS']))
		{
			for($i = 0, $c = count($tmp['JS']); $i < $c; $i++)
			{
				if(file_exists($_SERVER['DOCUMENT_ROOT'].$tmp['JS'][$i]))
					$this->arJSPath[] = $tmp['JS'][$i];
			}
		}
	}

	foreach($this->arJSPath as $path)
	{
		$APPLICATION->AddHeadScript($path);
	}

	//Messages
	$langPath = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/fileman/lang/'.LANGUAGE_ID.'/classes/general/light_editor_js.php';
	if(!file_exists($langPath))
		$langPath = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/fileman/lang/en/classes/general/light_editor_js.php';
	$this->mess = __IncludeLang($langPath, true, true);
	$this->messOld = array();

	if (!empty($this->mess))
	{
		$this->messOld = array('Image' => $this->mess['Image'], 'Video' => $this->mess['Video'],'ImageSizing' => $this->mess['ImageSizing']);

		$jsMsg = "";

		$APPLICATION->AddLangJS($jsMsg);
	}

	$this->bAutorized = is_object($USER) && $USER->IsAuthorized();
	$this->bUseFileDialogs = $arParams['bUseFileDialogs'] !== false && $this->bAutorized;
	$this->bUseMedialib = ($arParams['bUseMedialib'] ?? null) !== false && COption::GetOptionString('fileman', "use_medialib", "Y") == "Y" && CMedialib::CanDoOperation('medialib_view_collection', 0);

	$this->bResizable = ($arParams['bResizable'] ?? null) === true;
	$this->bManualResize = $this->bResizable && ($arParams['bManualResize'] ?? null) !== false;
	$this->bAutoResize = ($arParams['bAutoResize'] ?? null) !== false;
	$this->bInitByJS = ($arParams['bInitByJS'] ?? null) === true;
	$this->bSaveOnBlur = ($arParams['bSaveOnBlur'] ?? null) !== false;
	$this->content = ($arParams['content'] ?? null);
	$arParams['inputName'] ??= null;
	$this->inputName = isset($arParams['inputName']) ? $arParams['inputName'] : 'lha_content';
	$arParams['inputId'] ??= null;
	$this->inputId = isset($arParams['inputId']) ? $arParams['inputId'] : 'lha_content_id';
	$this->videoSettings = is_array($arParams['videoSettings'] ?? null) ? $arParams['videoSettings'] : array(
			'maxWidth' => 640,
			'maxHeight' => 480,
			'WMode' => 'transparent',
			'windowless' => true,
			'bufferLength' => 20,
			'skin' => '/bitrix/components/bitrix/player/mediaplayer/skins/bitrix.swf',
			'logo' => ''
		);

	if (!is_array($arParams['arFonts'] ?? null) || count($arParams['arFonts']) <= 0)
		$arParams['arFonts'] = array('Arial', 'Verdana', 'Times New Roman', 'Courier', 'Tahoma', 'Georgia', 'Optima', 'Impact', 'Geneva', 'Helvetica');

	if (!is_array($arParams['arFontSizes'] ?? null) || count($arParams['arFontSizes']) <= 0)
		$arParams['arFontSizes'] = array('1' => 'xx-small', '2' => 'x-small', '3' => 'small', '4' => 'medium', '5' => 'large', '6' => 'x-large', '7' => 'xx-large');

	// Tables
	//$this->arJSPath[] = $this->GetActualPath($basePath.'le_table.js');
	$this->jsObjName = (isset($arParams['jsObjName']) && $arParams['jsObjName'] <> '') ? $arParams['jsObjName'] : 'LightHTMLEditor'.$this->Id;
	$this->jsObjName = preg_replace("/[^a-zA-Z0-9_:.]/is", "", $this->jsObjName);

	if ($this->bResizable)
	{
		// Get height user settings
		$userOpt = CUserOptions::GetOption(
			'fileman',
			'LHESize_'.$this->Id,
			array('height' => $arParams['height'])
		);
		$arParams['height'] = intval($userOpt['height']) > 0 ? $userOpt['height'] : $arParams['height'];
	}

	$this->JSConfig = array(
		'id' => $this->Id,
		'content' => $this->content,
		'bBBCode' => $this->bBBCode,
		'bUseFileDialogs' => $this->bUseFileDialogs,
		'bUseMedialib' => $this->bUseMedialib,
		'arSmiles' => ($arParams['arSmiles'] ?? null),
		'arFonts' => ($arParams['arFonts'] ?? null),
		'arFontSizes' => ($arParams['arFontSizes'] ?? null),
		'inputName' => $this->inputName,
		'inputId' => $this->inputId,
		'videoSettings' => $this->videoSettings,
		'bSaveOnBlur' => $this->bSaveOnBlur,
		'bResizable' => $this->bResizable,
		'autoResizeSaveSize' => ($arParams['autoResizeSaveSize'] ?? null) !== false,
		'bManualResize' => $this->bManualResize,
		'bAutoResize' => $this->bAutoResize,
		'bReplaceTabToNbsp' => true,
		'bSetDefaultCodeView' => isset($arParams['bSetDefaultCodeView']) && $arParams['bSetDefaultCodeView'],
		'bBBParseImageSize' => isset($arParams['bBBParseImageSize']) && $arParams['bBBParseImageSize'],
		'smileCountInToolbar' => intval(($arParams['smileCountInToolbar'] ?? null)),
		'bQuoteFromSelection' => isset($arParams['bQuoteFromSelection']) && $arParams['bQuoteFromSelection'],
		'bConvertContentFromBBCodes' => isset($arParams['bConvertContentFromBBCodes']) && $arParams['bConvertContentFromBBCodes'],
		'oneGif' => '/bitrix/images/1.gif',
		'imagePath' => '/bitrix/images/fileman/light_htmledit/'
	);

	// Set editor from visual mode to textarea for mobile devices
	if (!isset($this->JSConfig['bSetDefaultCodeView']) && CLightHTMLEditor::IsMobileDevice())
		$this->JSConfig['bSetDefaultCodeView'] = true;

	if (isset($arParams['width']) && intval($arParams['width']) > 0)
		$this->JSConfig['width'] = $arParams['width'];
	if (isset($arParams['height']) && intval($arParams['height']) > 0)
		$this->JSConfig['height'] = $arParams['height'];
	if (isset($arParams['toolbarConfig']))
		$this->JSConfig['toolbarConfig'] = $arParams['toolbarConfig'];
	if (isset($arParams['documentCSS']))
		$this->JSConfig['documentCSS'] = $arParams['documentCSS'];
	if (isset($arParams['fontFamily']))
		$this->JSConfig['fontFamily'] = $arParams['fontFamily'];
	if (isset($arParams['fontSize']))
		$this->JSConfig['fontSize'] = $arParams['fontSize'];
	if (isset($arParams['lineHeight']))
		$this->JSConfig['lineHeight'] = $arParams['lineHeight'];
	if (isset($arParams['bHandleOnPaste']))
		$this->JSConfig['bHandleOnPaste'] = $arParams['bHandleOnPaste'];
	if (isset($arParams['autoResizeOffset']))
		$this->JSConfig['autoResizeOffset'] = $arParams['autoResizeOffset'];
	if (isset($arParams['autoResizeMaxHeight']))
		$this->JSConfig['autoResizeMaxHeight'] = $arParams['autoResizeMaxHeight'];
	if (isset($arParams['controlButtonsHeight']))
		$this->JSConfig['controlButtonsHeight'] = $arParams['controlButtonsHeight'];

	if ($this->bBBCode)
	{
		$this->JSConfig['bParceBBImageSize'] = true;
	}

	if (isset($arParams['ctrlEnterHandler']))
		$this->JSConfig['ctrlEnterHandler'] = $arParams['ctrlEnterHandler'];
}