#Область ОписаниеПеременных
&НаКлиенте
Перем ФормаЗакрывается;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОписаниеИнтеграции = Неопределено;
Если Параметры.Идентификатор <> Неопределено Тогда
ОписаниеИнтеграции = СистемаВзаимодействия.ПолучитьИнтеграцию(Параметры.Идентификатор);
Если ОписаниеИнтеграции <> Неопределено Тогда
Наименование = ОписаниеИнтеграции.Представление;
НавигационнаяСсылкаТочкиПодключения = ОписаниеИнтеграции.НавигационнаяСсылкаТочкиПодключения;
Участники.Очистить();
Для каждого ПользовательИБ Из Обсуждения.ПользователиИнформационнойБазы(ОписаниеИнтеграции.Участники) Цикл
Участники.Добавить().Пользователь = ПользовательИБ.Значение;
КонецЦикла;
ИнтеграцияИспользуется = ОписаниеИнтеграции.Использование;
Если ИнтеграцияИспользуется Тогда
Элементы.Закрыть.Заголовок = НСтр("ru='Записать и закрыть'");
Элементы.Отключить.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОбсужденияЛокализация.ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Элементы.Инструкция.Заголовок,
ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат);
ЗаполнитьПараметрыИнтеграцииВебЧата(ОписаниеИнтеграции);
ОбновитьПредварительныйПросмотр();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Для Каждого Параметр Из ПараметрыОтображения Цикл
ОбновитьПараметрыОриентацииПросмотра(Параметр);
ОбновитьПредставлениеПараметраПоЗначению(Параметр);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ФормаЗакрывается = Истина И Не ЗавершениеРаботы Тогда
Закрыть(Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПредварительныйПросмотрДокументСформирован(Элемент)
ОбновитьПараметрыПредварительногоПросмотра();
ОбъектСтраницы = Элементы.ПредварительныйПросмотр.Документ.defaultView;
ОбъектСтраницы.initString("today", НСтр("ru = 'Сегодня'"));
ОбъектСтраницы.initString("administrator", НСтр("ru = 'Администратор'"));
ОбъектСтраницы.initString("text1", НСтр("ru = 'Добрый день. Могу чем-то помочь?'"));
ОбъектСтраницы.initString("text2", НСтр("ru = 'Добрый день. Меня интересует подключение вашего стороннего сервиса на мой сайт.'"));
ОбъектСтраницы.initString("time", НСтр("ru = '14:53'"));
ОбъектСтраницы.initString("textareaTooltip", НСтр("ru = 'Введите сообщение...'"));
ОбъектСтраницы.initString("attachFileTooltip", НСтр("ru = 'Прикрепить файл'"));
ОбъектСтраницы.initString("videoCallTooltip", НСтр("ru = 'Видеозвонок'"));
ОбъектСтраницы.initString("closeTooltip", НСтр("ru = 'Закрыть'"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники
&НаКлиенте
Процедура ВнешниеПараметрыПриИзменении(Элемент)
ОбновитьПараметрыПредварительногоПросмотра();
Если ФормаЗакрывается = Истина Тогда
Элементы.Закрыть.Заголовок = НСтр("ru='Записать и закрыть'");
ИнтеграцияИспользуется = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВнешниеПараметрыПриАктивацииСтроки(Элемент)
ОбновитьПредставлениеТекущихДанных();
КонецПроцедуры
&НаКлиенте
Процедура УчастникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
Для каждого ПодобранныйПользователь Из ВыбранноеЗначение Цикл
Если Участники.НайтиСтроки(Новый Структура("Пользователь", ПодобранныйПользователь)).Количество() = 0 Тогда
Участники.Добавить().Пользователь = ПодобранныйПользователь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ВнешниеПараметрыПредставлениеЗначенияПриИзменении(Элемент)
ТекущиеДанные = Элементы.ВнешниеПараметры.ТекущиеДанные;
Если ТекущиеДанные.Тип = "Цвет" Тогда
ТекущиеДанные.ПредставлениеЗначения = ТекущиеДанные.ПредставлениеЗначения.ПолучитьАбсолютный();
КонецЕсли;
ОбновитьЗначениеПараметраПоПредставлению(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВнешниеПараметрыПредставлениеЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
ТекущиеДанные = Элементы.ВнешниеПараметры.ТекущиеДанные;
Если ТекущиеДанные.Имя = "signKey" Тогда
СтандартнаяОбработка = Ложь;
ТекущиеДанные.ПредставлениеЗначения = СгенерироватьСлучайныйКлюч();
ОбновитьЗначениеПараметраПоПредставлению(ТекущиеДанные);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
КонецПроцедуры
&НаКлиенте
Процедура АктивироватьБота(Команда)
Если ФормаЗакрывается = Истина Тогда
Закрыть(Истина);
Возврат;
КонецЕсли;
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
Попытка
АктивироватьСервер();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке,
НСтр("ru='Не удалось активировать чат-бот по причине:'"), Истина);
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
КонецПопытки;
Если ИнтеграцияИспользуется Тогда
Закрыть(Истина);
Возврат;
КонецЕсли;
Элементы.Закрыть.Заголовок = НСтр("ru='Закрыть'");
ФормаЗакрывается = Истина;
КонецПроцедуры
&НаКлиенте
Процедура Отключить(Команда)
Попытка
ОтключитьСервер();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке,
НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина);
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
КонецПопытки;
Закрыть(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьФайлВебСтраницы(Команда)
ТекстСообщения = НСтр("ru = 'Для сохранения файла необходимо установить расширение для веб-клиента 1С:Предприятие.'");
ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьФайлВебСтраницыПродолжение", ЭтотОбъект);
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения, ТекстСообщения);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Асинх Процедура СохранитьФайлВебСтраницыПродолжение(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт
Если Не РасширениеРаботыСФайламиПодключено Тогда
Возврат;
КонецЕсли;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Сохранение файла'");
ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Файлы HTML (*.html)|*.html|Все файлы (*.*)|*.*'");
ВыбранныеФайлы = Ждать ДиалогВыбораФайла.ВыбратьАсинх();
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(СодержимоеФайлаВебСтраницы());
Попытка
РезультатЗаписи = Ждать ТекстовыйДокумент.ЗаписатьАсинх(ВыбранныеФайлы[0]);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке,
НСтр("ru='Не удалось сохранить файл по причине:'"), Истина);
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
КонецПопытки;
Если РезультатЗаписи = Истина Тогда
Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Файл сохранен в %1'"),
ВыбранныеФайлы[0]);
ДополнительныеПараметры = Новый Структура("ИмяФайла", ВыбранныеФайлы[0]);
ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьФайлВебСтраницыОткрытьКаталогФайла",
ЭтотОбъект, ДополнительныеПараметры);
ПоказатьОповещениеПользователя(НСтр("ru='Сохранение файла'"), ОписаниеОповещения, Пояснение,
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьФайлВебСтраницыОткрытьКаталогФайла(ДополнительныеПараметры) Экспорт
ФайловаяСистемаКлиент.ОткрытьПроводник(ДополнительныеПараметры.ИмяФайла);
КонецПроцедуры
&НаКлиенте
Функция СодержимоеФайлаВебСтраницы()
СодержимоеФайла = "<!doctype html>
|<html lang=""ru"">
|<head>
| <meta charset=""utf-8"" />
| <title></title>
|</head>
|<body>
| <script src=""%1"" async></script>
|</body>
|</html>";
ПредставлениеТочкиПодключения = НСтр("ru='Подставить точку подключения'");
ПодстрокаЗамены = ?(ПустаяСтрока(НавигационнаяСсылкаТочкиПодключения),
ПредставлениеТочкиПодключения, НавигационнаяСсылкаТочкиПодключения);
Возврат СтрШаблон(СодержимоеФайла, ПодстрокаЗамены);
КонецФункции
&НаСервере
Процедура АктивироватьСервер()
ПараметрыИнтеграции = ОбсужденияСлужебный.ПараметрыИнтеграции();
ПараметрыИнтеграции.Идентификатор = Параметры.Идентификатор;
ПараметрыИнтеграции.Ключ = Наименование;
ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат;
ПараметрыИнтеграции.Участники = Участники.Выгрузить(, "Пользователь").ВыгрузитьКолонку("Пользователь");
Для Каждого ВнешнийПараметр Из ПараметрыОтображения Цикл
ПараметрыИнтеграции.Вставить(ВнешнийПараметр.Имя, ВнешнийПараметр.Значение);
КонецЦикла;
Попытка
ОписаниеИнтеграции = ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции);
Интеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(ОписаниеИнтеграции.Идентификатор)
Исключение
ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
Если Интеграция <> Неопределено Тогда
НавигационнаяСсылкаТочкиПодключения = Интеграция.НавигационнаяСсылкаТочкиПодключения;
Параметры.Идентификатор = Интеграция.Идентификатор;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтключитьСервер()
ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры
#Область ПараметрыВебЧата
&НаСервере
Процедура ЗаполнитьПараметрыИнтеграцииВебЧата(ОписаниеИнтеграции = Неопределено)
Если Не Обсуждения.ОбсужденияДоступны() Тогда
Возврат;
КонецЕсли;
ТипВнешнейСистемы = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат;
Попытка
ОписаниеВнешнейСистемы = СистемаВзаимодействия.ПолучитьОписаниеВнешнейСистемы(ТипВнешнейСистемы);
Исключение
ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
ПараметрыОтображения.Очистить();
Для Каждого ПараметрВнешнейСистемы Из ОписаниеВнешнейСистемы.ОписанияПараметров Цикл
ПараметрВебЧата = ПараметрыОтображения.Добавить();
ПараметрВебЧата.Имя = ПараметрВнешнейСистемы.Имя;
КонецЦикла;
Если ОписаниеИнтеграции <> Неопределено Тогда
Для Каждого Параметр Из ОписаниеИнтеграции.ПараметрыВнешнейСистемы Цикл
Отбор = Новый Структура("Имя", Параметр.Ключ);
НайденныеСтроки = ПараметрыОтображения.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = 0 Тогда
ВнешнийПараметр = ПараметрыОтображения.Добавить();
ВнешнийПараметр.Имя = Параметр.Ключ;
Иначе
ВнешнийПараметр = НайденныеСтроки[0];
КонецЕсли;
ВнешнийПараметр.Значение = Параметр.Значение;
КонецЦикла;
КонецЕсли;
Для Каждого ПараметрВебЧата Из ПараметрыОтображения Цикл
ЗаполнитьДанныеПараметра(ПараметрВебЧата);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПараметрыОриентацииПросмотра(ПараметрВебЧата)
Если ПараметрВебЧата.Имя = "orientation" Или ПараметрВебЧата.Имя = "orientationPadding" Тогда
ОбновитьОтступыОриентации();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьОтступыОриентации()
Отбор = Новый Структура("Имя", "orientation");
НайденныеСтроки = ПараметрыОтображения.НайтиСтроки(Отбор);
Если Не НайденныеСтроки.Количество() Тогда
Возврат;
КонецЕсли;
ПараметрОриентации = НайденныеСтроки[0];
Отбор = Новый Структура("Имя", "orientationPadding");
НайденныеСтроки = ПараметрыОтображения.НайтиСтроки(Отбор);
Если Не НайденныеСтроки.Количество() Тогда
Возврат;
КонецЕсли;
ПараметрОтступа = НайденныеСтроки[0];
Если ПараметрОриентации.Значение = "bottom" Тогда
ПараметрОтступа.СписокЗначений.Очистить();
ПараметрОтступа.СписокЗначений.Вставить("_0", НСтр("ru = 'Слева'"));
ПараметрОтступа.СписокЗначений.Вставить("_50", НСтр("ru = 'По центру'"));
ПараметрОтступа.СписокЗначений.Вставить("_100", НСтр("ru = 'Справа'"));
ИначеЕсли ПараметрОриентации.Значение = "left" Или ПараметрОриентации.Значение = "right" Тогда
ПараметрОтступа.СписокЗначений.Очистить();
ПараметрОтступа.СписокЗначений.Вставить("_100", НСтр("ru = 'Сверху'"));
ПараметрОтступа.СписокЗначений.Вставить("_50", НСтр("ru = 'По центру'"));
ПараметрОтступа.СписокЗначений.Вставить("_0", НСтр("ru = 'Снизу'"));
КонецЕсли;
ОбновитьПредставлениеПараметраПоЗначению(ПараметрОтступа);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПараметрыПредварительногоПросмотра()
ОкноПросмотраВебСтраницы = Элементы.ПредварительныйПросмотр.Документ.defaultView;
Для Каждого ПараметрОтображения Из ПараметрыОтображения Цикл
ОкноПросмотраВебСтраницы.updatePreview(ПараметрОтображения.Имя, ПараметрОтображения.Значение);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПредставлениеТекущихДанных()
ТекущиеДанные = Элементы.ВнешниеПараметры.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ЗначениеПараметра = Элементы.ВнешниеПараметрыПредставлениеЗначения;
ЗначениеПараметра.ОграничениеТипа = Новый ОписаниеТипов(ТекущиеДанные.Тип);
Если ТекущиеДанные.КнопкаВыбора <> Неопределено Тогда
ЗначениеПараметра.КнопкаВыбора = Истина;
ЗначениеПараметра.КартинкаКнопкиВыбора = ТекущиеДанные.КнопкаВыбора;
Иначе
ЗначениеПараметра.КнопкаВыбора = Ложь;
КонецЕсли;
ЗначениеПараметра.СписокВыбора.Очистить();
Если ТекущиеДанные.СписокЗначений <> Неопределено Тогда
ЗначениеПараметра.РежимВыбораИзСписка = Истина;
Для Каждого Значение Из ТекущиеДанные.СписокЗначений Цикл
ЗначениеПараметра.СписокВыбора.Добавить(Значение.Значение);
КонецЦикла;
Иначе
ЗначениеПараметра.РежимВыбораИзСписка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПреобразоватьHexВDec(Число)
Словарь = "0123456789ABCDEF";
Результат = 0;
ЭлементовВЧисле = СтрДлина(Число);
Для Позиция = 1 По ЭлементовВЧисле Цикл
Результат = Результат + ((СтрНайти(Словарь, Сред(Число, Позиция, 1)) - 1) * Pow(16, ЭлементовВЧисле - Позиция));
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПреобразоватьDecВHex(Число)
Словарь = "0123456789ABCDEF";
Часть1 = Int(Число / 16);
Часть2 = Число - (Часть1 * 16);
Возврат Сред(Словарь, Часть1 + 1, 1) + Сред(Словарь, Часть2 + 1, 1);
КонецФункции
&НаСервере
Процедура ЗаполнитьДанныеПараметра(ПараметрВебЧата)
Если ПараметрВебЧата.Имя = "allowVideoconferences" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Видеозвонки'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.СтандартноеЗначение = "allowed";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("allowed", НСтр("ru = 'Доступны'"));
ПараметрВебЧата.СписокЗначений.Вставить("allowedToWebChatOnly", НСтр("ru = 'Доступны только в чат'"));
ПараметрВебЧата.СписокЗначений.Вставить("disallowed", НСтр("ru = 'Недоступны'"));
ИначеЕсли ПараметрВебЧата.Имя = "defaultApplicationUserCameraState" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Состояние камеры пользователя приложения по умолчанию'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.СтандартноеЗначение = "on";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("on", НСтр("ru = 'Включена'"));
ПараметрВебЧата.СписокЗначений.Вставить("off", НСтр("ru = 'Выключена'"));
ИначеЕсли ПараметрВебЧата.Имя = "signKey" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Ключ подписи'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.КнопкаВыбора = БиблиотекаКартинок.Перечитать;
ИначеЕсли ПараметрВебЧата.Имя = "orientation" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Местоположение чата'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.СтандартноеЗначение = "bottom";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("left", НСтр("ru = 'Слева'"));
ПараметрВебЧата.СписокЗначений.Вставить("bottom", НСтр("ru = 'Снизу'"));
ПараметрВебЧата.СписокЗначений.Вставить("right", НСтр("ru = 'Справа'"));
ИначеЕсли ПараметрВебЧата.Имя = "orientationPadding" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Выравнивание чата'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.СтандартноеЗначение = "100";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ИначеЕсли ПараметрВебЧата.Имя = "mobileButtonOrientation" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Ориентация кнопки чата в мобильной версии'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.СтандартноеЗначение = "rightBottom";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("leftBottom", НСтр("ru = 'Слева снизу'"));
ПараметрВебЧата.СписокЗначений.Вставить("rightBottom", НСтр("ru = 'Справа снизу'"));
ИначеЕсли ПараметрВебЧата.Имя = "colorTheme" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Цветовая тема'");
ПараметрВебЧата.Тип = "Строка";
ПараметрВебЧата.СтандартноеЗначение = "auto";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("auto", НСтр("ru = 'Авто'"));
ПараметрВебЧата.СписокЗначений.Вставить("light", НСтр("ru = 'Светлая'"));
ПараметрВебЧата.СписокЗначений.Вставить("dark", НСтр("ru = 'Темная'"));
ИначеЕсли ПараметрВебЧата.Имя = "titleText" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Текст заголовка чата'");
ПараметрВебЧата.Тип = "Строка";
ИначеЕсли ПараметрВебЧата.Имя = "titleBackColor" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Цвет фона заголовка чата'");
ПараметрВебЧата.Тип = "Цвет";
ПараметрВебЧата.СтандартноеЗначение = "#FBED9E";
ПараметрВебЧата.КнопкаВыбора = БиблиотекаКартинок.ПолеВводаВыбрать;
ИначеЕсли ПараметрВебЧата.Имя = "titleTextColor" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Цвет текста заголовка чата'");
ПараметрВебЧата.Тип = "Цвет";
ПараметрВебЧата.СтандартноеЗначение = "#333333";
ПараметрВебЧата.КнопкаВыбора = БиблиотекаКартинок.ПолеВводаВыбрать;
ИначеЕсли ПараметрВебЧата.Имя = "displayUserPictures" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Показывать аватары'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
ИначеЕсли ПараметрВебЧата.Имя = "languageCode" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Код языка чата'");
ПараметрВебЧата.Тип = "Строка";
СписокЛокализации = ДоступныеЛокализации();
Если СписокЛокализации.НайтиПоЗначению(ТекущийКодЛокализации()) <> Неопределено Тогда
ПараметрВебЧата.СтандартноеЗначение = ТекущийКодЛокализации();
ИначеЕсли СписокЛокализации.НайтиПоЗначению(ТекущийЯзыкСистемы()) <> Неопределено Тогда
ПараметрВебЧата.СтандартноеЗначение = ТекущийЯзыкСистемы();
Иначе
ПараметрВебЧата.СтандартноеЗначение = "en";
КонецЕсли;
ПараметрВебЧата.СписокЗначений = Новый Структура;
Для Каждого ЭлементЛокализации Из СписокЛокализации Цикл
ПараметрВебЧата.СписокЗначений.Вставить(ЭлементЛокализации.Значение, ЭлементЛокализации.Представление);
КонецЦикла;
ИначеЕсли ПараметрВебЧата.Имя = "displayUnreadMessagesMark" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Отображать отметку непрочитанных сообщений'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
ИначеЕсли ПараметрВебЧата.Имя = "displayCollapsedState" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Отображать свернутое состояние чата'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
ИначеЕсли ПараметрВебЧата.Имя = "openChatOnNewMessage" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Открывать чат при получении нового сообщения'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
Иначе
ПараметрВебЧата.Представление = ПараметрВебЧата.Имя;
ПараметрВебЧата.Тип = "Строка";
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДоступныеЛокализации()
СписокЛокализации = Новый СписокЗначений;
Для каждого КодЛокализации Из ПолучитьДопустимыеКодыЛокализации() Цикл
СписокЛокализации.Добавить(КодЛокализации, ПредставлениеКодаЛокализации(КодЛокализации));
КонецЦикла;
СписокЛокализации.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
Возврат СписокЛокализации;
КонецФункции
&НаСервере
Процедура ОбновитьПредварительныйПросмотр()
ПредварительныйПросмотр = Обработки.ПодключениеОбсуждений.ПолучитьМакет("МакетОтображенияВебЧата").ПолучитьТекст()
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПредставлениеПараметраПоЗначению(ПараметрВебЧата)
Если ПараметрВебЧата.Значение = "" И ПараметрВебЧата.СтандартноеЗначение <> "" Тогда
ПараметрВебЧата.Значение = ПараметрВебЧата.СтандартноеЗначение;
КонецЕсли;
Представление = Неопределено;
Если ПараметрВебЧата.Значение <> "" Тогда
Если ПараметрВебЧата.СписокЗначений <> Неопределено Тогда
КодПервогоСимвола = КодСимвола(ПараметрВебЧата.Значение, 1);
КлючЗначения = ?(48 <= КодПервогоСимвола И КодПервогоСимвола <= 57, "_" + ПараметрВебЧата.Значение, ПараметрВебЧата.Значение);
Представление = Неопределено;
ПараметрВебЧата.СписокЗначений.Свойство(КлючЗначения, Представление);
Если Представление <> Неопределено Тогда
ПараметрВебЧата.ПредставлениеЗначения = Представление;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Представление = Неопределено Тогда
Если ПараметрВебЧата.Тип = "Строка" Тогда
ПараметрВебЧата.ПредставлениеЗначения = ПараметрВебЧата.Значение;
ИначеЕсли ПараметрВебЧата.Тип = "Булево" Тогда
ПараметрВебЧата.ПредставлениеЗначения = Булево(ПараметрВебЧата.Значение);
ИначеЕсли ПараметрВебЧата.Тип = "Число" Тогда
ПараметрВебЧата.ПредставлениеЗначения = Число(ПараметрВебЧата.Значение);
ИначеЕсли ПараметрВебЧата.Тип = "Цвет" Тогда
ПараметрВебЧата.ПредставлениеЗначения = ЦветИзТекста(ПараметрВебЧата.Значение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗначениеПараметраПоПредставлению(ПараметрВебЧата)
Если ПараметрВебЧата.СписокЗначений <> Неопределено Тогда
Для Каждого ЭлементСписка Из ПараметрВебЧата.СписокЗначений Цикл
Если ЭлементСписка.Значение = ПараметрВебЧата.ПредставлениеЗначения Тогда
ПараметрВебЧата.Значение = ?(Сред(ЭлементСписка.Ключ, 1, 1) = "_", Сред(ЭлементСписка.Ключ, 2), ЭлементСписка.Ключ);
КонецЕсли;
КонецЦикла;
Иначе
Если ПараметрВебЧата.Тип = "Строка" Тогда
ПараметрВебЧата.Значение = ПараметрВебЧата.ПредставлениеЗначения;
ИначеЕсли ПараметрВебЧата.Тип = "Булево" Или ПараметрВебЧата.Тип = "Число" Тогда
ПараметрВебЧата.Значение = Строка(ПараметрВебЧата.ПредставлениеЗначения);
ИначеЕсли ПараметрВебЧата.Тип = "Цвет" Тогда
ЦветРГБ = ПараметрВебЧата.ПредставлениеЗначения.ПолучитьАбсолютный();
ПараметрВебЧата.Значение = "#" + ПреобразоватьDecВHex(ЦветРГБ.Красный)
+ ПреобразоватьDecВHex(ЦветРГБ.Зеленый) + ПреобразоватьDecВHex(ЦветРГБ.Синий);
КонецЕсли;
КонецЕсли;
ОбновитьПараметрыОриентацииПросмотра(ПараметрВебЧата);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЦветИзТекста(Текст)
Красный = 0;
Зеленый = 0;
Синий = 0;
Если Сред(Текст, 1, 1) = "#" Тогда
Красный = ПреобразоватьHexВDec(ВРег(Сред(Текст, 2, 2)));
Зеленый = ПреобразоватьHexВDec(ВРег(Сред(Текст, 4, 2)));
Синий = ПреобразоватьHexВDec(ВРег(Сред(Текст, 6, 2)));
КонецЕсли;
Возврат Новый Цвет(Красный, Зеленый, Синий);
КонецФункции
&НаСервереБезКонтекста
Функция СгенерироватьСлучайныйКлюч()
НовыйКлюч = "";
ГСЧ = Новый ГенераторСлучайныхЧисел();
Для Сч = 1 По 32 Цикл
СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 255);
НовыйКлюч = НовыйКлюч + ПреобразоватьDecВHex(СлучайноеЧисло);
КонецЦикла;
Возврат НовыйКлюч;
КонецФункции
#КонецОбласти
#КонецОбласти