Визуальный html WYSIWYG редактор без сторонних библиотек на управляемых формах

31.08.20

Разработка - Инструментарий разработчика

Простой и удобный html редактор без сторонних библиотек.

Скачать файлы

Наименование Файл Версия Размер
HTML Editor
.epf 43,76Kb
23
.epf 1.0.0 43,76Kb 23 Скачать

В процессе создания диалогового интерфейса для менеджера сценарного теста (добавляем виртуального помощника) нам понадобилась возможность ввода текста поддерживающие возможности java script, типовые инструменты от 1С не подходят, а сторонние библиотеки очень громоздки (Ранее мы уже приводили пример со сторонними библиотеками Визуальный html редактор на управляемых формах). Нам не требовалось много от функционала и в результате поиска по интернету удалось найти очень удобные возможности сегодняшних браузеров.

Теперь на примере 5 шагов покажем как это сделать без каких-либо крутых навыков и серьезных временных затрат. А функционала и возможностей будет достаточно для 90% обычно решаемых задач.

1. Для того чтобы сделать текст редактируемым требуется вставить в html тег - contenteditable="true" (true - включает, а false - выключает). К примеру, следующий блок будет отлично редактируемым:

<div id="editor" contenteditable="true"><p>Привет мир!</p></div>

Можно вообще сделать редактируемым весь документ глобально - добавьте в тег body. 

2. Для того чтобы добавлять элементы, отменять действия или менять стили необходимо воспользоваться командой  execCommand(сommand, showDefaultUI, аrgument) (где command - это команда из списка, showDefaulUI - показ интерфейса встроенного, argument - дополнительный аргумент.

<script>
...
// сделать текст жирным <strong>
document.execCommand('bold', false, null);
...
// отменить действие 
document.execCommand('undo', false, null);
...
// скопировать
document.execCommand('copy', false, null);
...
// вставить
document.execCommand('paste', false, null);
...
</script>
 
 Таблица поддерживаемых команд  

 

3. Взаимодействие от 1С к html (этого функционала обычно достаточно). Выполняем несколькими вариациями

 а) сначала размещаем в html коде страницы редактора скрипт

<script type="text/javascript">
function send_command(sCmd, sValue)
{
   try 
   { 
     document.execCommand(sCmd, false, sValue); 
   }catch(Exp)
   {
   }
}
</script>

 б) в коде модуля формы размещаем код следующего содержания

&НаКлиенте
Процедура ВыполнитьКомандуОтменыДействия(Команда)
    // получаем ссылку на HtmlView
	htmlView = ПолучитьСсылкуНаHtmlView();
    // вызываем java script с передачей параметров
	htmlView.send_command("undo","");
КонецПроцедуры


&НаКлиенте
Функция ПолучитьСсылкуНаHtmlView()
	
	Перем htmlView;
	
	htmlView = неопределено;
	Если Элементы.ПолеHTML.Документ.parentWindow=Неопределено Тогда
		htmlView = Элементы.ПолеHTML.Документ.defaultView;
	Иначе
		htmlView = Элементы.ПолеHTML.Документ.parentWindow;
	КонецЕсли;
	Возврат htmlView;

КонецФункции

 4. Взаимодействие от html к 1С организуем через хитрый код, который я подсмотрел где-то на просторах текущего ресурса. Допустим, мы хотим получить информацию о блоке окружающем текущую позицию курсора.

а) Размещаем где-то в коде следующие скрипты:

<script>
   var interactionVariable = null;
</script>
<script>
function foo()
{
   //...
   interactionVariable = "данные";
   interactionButton.click();	
}
</script>

б) Скрытую кнопку на странице, которую будем кликать программно

<button id="interactionButton" style="display: none">Кнопка взаимодействия</button>

в) В коде формы добавляем обработчик события нажатия "ПриНажатии" для поля HTML и обрабатываем данные

&НаКлиенте
Процедура HTML_полеПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
	НажатыйЭлемент = ДанныеСобытия.Element;
	Если НажатыйЭлемент.id = "interactionButton" Тогда	
		htmlView = ПолучитьViewHTML("HtmlEditor");
		Сообщить(htmlView.interactionVariable);
        // обрабатываем данные ...
	Конецесли;
КонецПроцедуры

Функционал тестировался на версиях 8.3.14, 8.3.15 и 8.3.16, думаю, будет корректно работать на всех версиях с поддержкой нового движка WebKit. Возможно и с более старыми версиями - не проверял.

HTML WYSIWYG editor

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

5100 руб.

09.12.2022    30068    5    0    

407

Онлайн-интенсив "DevOps для 1С". с 4 сентября по 17 октября 2023 г.

Инструментарий разработчика DevOps и автоматизация разработки DevOps для 1С Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

20.06.2023    9656    0    Infostart    2    

120

SALE! %

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    93072    474    380    

530

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 руб.

14.01.2013    170019    1049    0    

789

Автоматизация труда программиста. Библиотека прикладных функций

Инструментарий разработчика Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Конфигурации 1cv8 Платные (руб)

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    12415    3    9    

9

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    96400    234    97    

283

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1439 руб.

21.02.2023    5192    1    33    

14

Программное формирование существующих печатных форм

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Получение списка печатных форм, формирование выбранной печатной формы и сохранение ее в файл.

1 стартмани

17.12.2021    14038    39    RocKeR_13    5    

46
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Kaval88 169 31.08.20 11:32 Сейчас в теме
Круто! Пригодится.
ivanov660; +1 Ответить
2. rusmil 261 31.08.20 21:30 Сейчас в теме
4. Взаимодействие от html к 1С организуем через хитрый код, который я подсмотрел где-то на просторах текущего ресурса. Допустим, мы хотим получить информацию о блоке окружающем текущую позицию курсора.
Что-то не совсем понятно, описано про 4 пункт... непонятно в какой момент выполниться функция foo и как об этом узнает 1С. Можете пояснить?
3. ivanov660 3953 31.08.20 23:44 Сейчас в теме
(2) Добавил недостающий последний пункт, теперь должно быть понятно. (т.е. нажимается кнопка, которая вызывает событие при нажатии и мы в этот момент проверяем данные нашей переменной)
4. rwn_driver 8 07.09.20 14:46 Сейчас в теме
Добрый день.
Это не ошибка: "htmlView = ПолучитьViewHTML("HtmlEditor");"?
М.б. имелась ввиду функция "ПолучитьСсылкуНаHtmlView()", причем без параметров?
5. ivanov660 3953 07.09.20 16:23 Сейчас в теме
(4) Это ссылка на defaultView
&НаКлиенте
Функция ПолучитьHTMLView()
	
	htmlView = неопределено;
	Если Элементы.HTML_поле.Документ.parentWindow=Неопределено Тогда
		htmlView = Элементы.HTML_поле.Документ.defaultView;
	Иначе
		htmlView = Элементы.HTML_поле.Документ.parentWindow;
	КонецЕсли;
	Возврат htmlView;

КонецФункции
Показать


или более универсально, если несколько полей html

&НаКлиенте
Функция ПолучитьHTMLView(ИмяПоля)
	
	htmlView = неопределено;
	Если Элементы[ИмяПоля].Документ.parentWindow=Неопределено Тогда
		htmlView = Элементы[ИмяПоля].Документ.defaultView;
	Иначе
		htmlView = Элементы[ИмяПоля].Документ.parentWindow;
	КонецЕсли;
	Возврат htmlView;

КонецФункции
Показать
6. Pawlick 10 19.09.20 19:00 Сейчас в теме
Если функционал не поддерживает таблицы, то это мало чем отличается от Форматированного документа.
А на webkit прекрасно запускаются GoogleDoc, что в совокупности с GoogleRestApi дает практически неограниченные вощможности...
7. ivanov660 3953 20.09.20 12:35 Сейчас в теме
(6)Вы видимо не особо внимательно читали статью(
Функционал довольно существенно отличается от форматированного документа, попробуйте провести действительное сравнение, а не эфемерное.
Данный пример имеет свое демонстрационное назначение и минимальный набор по функционалу, также не требует подключения к интернету, а работа с таблицей добавляется в "две строчки кода".
Вы можете даже сравнить данную обработку с Microsoft Office 365 и вынести вердикт о недостаточной функциональности.
11. maxim_1c 323 01.12.20 14:16 Сейчас в теме
(7)
а работа с таблицей добавляется в "две строчки кода".

Добрый день, не могли бы уточнить как добавить создание и редактирование таблиц html?
12. ivanov660 3953 01.12.20 17:34 Сейчас в теме
(11)
1. Используем команду: insertHTML с текстом вставки таблицы в формате html.
  tableHTML="<table border='1' style='border-color:black;'><tr><td> edit cell ... </td><td> edit cell ... </td></tr></table>";
  FormatDoc("insertHTML",tableHTML);

2. Редактирование должно включаться командой - enableInlineTableEditing
8. Pawlick 10 20.09.20 20:26 Сейчас в теме
Просто не совсем понятно о чем статья... Если про текстовый редактор на html, то указанные Вами возможности - это безусловно интересно, но их маловато для того, что бы назвать это текстовым редактором.
Если про виртуально помощьника - то в статье об этом ни слова...
Т.е я хочу сказать, что если Вам нужен текстовый редактор, то зачем Вам html+js?
А если жонглирование буквами с помощью js то зачем Вам текстовый редактор? )
9. ivanov660 3953 21.09.20 09:31 Сейчас в теме
(8) Статья про еще одну возможность редактирования HTML, и решили поделиться демо примером. Коллеги спрашивали про такую возможность, вот с ними и делюсь.
Делать полноценный редактор у меня таких задач нет. Кому понадобиться, то тот сможет легко развить данный пример.
Мы же ее используем для своих задач. Одна из них - будем использовать как интерфейс для взаимодействия с виртуальным помощником, т.к. все возможности, которые дает 1С неудобны для подобных целей.
10. Pawlick 10 21.09.20 13:22 Сейчас в теме
В любом случае в статье описан полезный , и интересный пример.
ivanov660; +1 Ответить
13. rom-x 152 09.01.23 17:21 Сейчас в теме
Элементы.ПолеHTMLДокумента.Документ.execCommand('paste', false, null); - У меня paste не отрабатывает в веб клиенте, в тонком все работает.

Я так понимаю у Вас также не отрабатывает в вебе?
14. ivanov660 3953 10.01.23 17:07 Сейчас в теме
(13)Для того чтобы эта команда работала в браузере Chrome требуется установить разрешение clipboardRead.
Как пишут в документации это можно сделать в файле манифеста manifest.json, добавив:

{
"permissions": ["clipboardRead", "clipboardWrite"]
}
Оставьте свое сообщение