Перем _РедакторHTML; // Кэш
Функция РедакторHTML() Экспорт
Если Истина
И _РедакторHTML = Неопределено
И ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента")
Тогда
_РедакторHTML = ЭлементФормы.Документ.defaultView;
Если _РедакторHTML <> Неопределено И Не ЗначениеЗаполнено(_РедакторHTML.version1C) Тогда
_РедакторHTML = Неопределено;
КонецЕсли;
КонецЕсли;
Возврат _РедакторHTML;
КонецФункции
Процедура УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока = Неопределено, КонечнаяКолонка = Неопределено) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
Если КонечнаяСтрока = Неопределено Тогда
РедакторHTML.setSelectionByLength(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция);
Иначе
РедакторHTML.setSelection(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока, КонечнаяКолонка);
КонецЕсли;
Иначе
Если КонечнаяСтрока = Неопределено Тогда
ЭлементФормы.УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция);
Иначе
ЭлементФормы.УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока, КонечнаяКолонка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
ВыделениеТекста = РедакторHTML.getSelection();
НачальнаяСтрока = ВыделениеТекста.startLineNumber;
НачальнаяКолонка = ВыделениеТекста.startColumn;
КонечнаяСтрока = ВыделениеТекста.endLineNumber;
КонечнаяКолонка = ВыделениеТекста.endColumn;
Иначе
ЭлементФормы.ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
КонецЕсли;
КонецПроцедуры
Функция ПолучитьТекст() Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Текст = РедакторHTML.getText();
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда
Текст = ЭлементФормы.Значение;
Иначе
Текст = ЭлементФормы.ПолучитьТекст();
КонецЕсли;
Возврат Текст;
КонецФункции
Функция УстановитьТекст(Текст, Активировать = Ложь) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
РедакторHTML.updateText(Текст);
Если Активировать Тогда
РедакторHTML.editor.focus();
КонецЕсли;
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда
ЭлементФормы.Значение = Текст;
Иначе
ЭлементФормы.УстановитьТекст(Текст);
КонецЕсли;
Возврат Истина;
КонецФункции
Функция ПолучитьСтроку(НомерСтроки) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Текст = РедакторHTML.getLineContent(НомерСтроки);
Иначе
Текст = ЭлементФормы.ПолучитьСтроку(НомерСтроки);
КонецЕсли;
Возврат Текст;
КонецФункции
Функция КоличествоСтрок() Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Текст = РедакторHTML.getLineCount();
Иначе
Текст = ЭлементФормы.КоличествоСтрок();
КонецЕсли;
Возврат Текст;
КонецФункции
Функция ВыделенныйТекст(НовыйТекст = Неопределено) Экспорт
Перем НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка;
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если НовыйТекст = Неопределено Тогда
Результат = РедакторHTML.selectedText();
Иначе
РедакторHTML.selectedText(НовыйТекст);
// https://github.com/salexdv/bsl_console/issues/64#issue-873784658
ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
УстановитьГраницыВыделения(КонечнаяСтрока, КонечнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
КонецЕсли;
Иначе
Если НовыйТекст = Неопределено Тогда
Результат = ЭлементФормы.ВыделенныйТекст;
Иначе
ЭлементФормы.ВыделенныйТекст = НовыйТекст;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ТолькоПросмотр(НовыйРежим = Неопределено) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если НовыйРежим = Неопределено Тогда
Результат = РедакторHTML.ReadOnly;
Иначе
РедакторHTML.setReadOnly(НовыйРежим);
КонецЕсли;
Иначе
Если НовыйРежим = Неопределено Тогда
Результат = ЭлементФормы.ТолькоПросмотр;
Иначе
ЭлементФормы.ТолькоПросмотр = НовыйРежим;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ЗаменитьСтроку(НомерСтроки, Текст) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
РедакторHTML.setLineContent(НомерСтроки, Текст);
Иначе
ЭлементФормы.ЗаменитьСтроку(НомерСтроки, Текст);
КонецЕсли;
КонецПроцедуры
Процедура ВставитьСтроку(НомерСтроки, Текст) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
РедакторHTML.insertLine(НомерСтроки, Текст); // Не реализован
Иначе
ЭлементФормы.ВставитьСтроку(НомерСтроки, Текст);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьСтроку(Текст) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
ДлинаТекста = СтрДлина(ПолучитьТекст());
РедакторHTML.setText(Символы.ПС + Текст, ДлинаТекста);
Иначе
ЭлементФормы.ДобавитьСтроку(Текст);
КонецЕсли;
КонецПроцедуры
Процедура Очистить() Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
РедакторHTML.eraseText();
Иначе
ЭлементФормы.Очистить();
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьОшибку(НомерСтроки, НомерКолонки = 1) Экспорт
Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда
РедакторHTML = РедакторHTML();
Если РедакторHTML = Неопределено Тогда
Возврат;
КонецЕсли;
РедакторHTML.markError(НомерСтроки, НомерКолонки);
Иначе
ЭлементФормы.УстановитьГраницыВыделения(НомерСтроки, 1, НомерСтроки, 150);
КонецЕсли;
КонецПроцедуры