Добавить пользовательские методы обработки HTML элементов

Обсуждение новых возможности программы, которые в будущем хотелось бы видеть в ней
Ответить
uopp900
Сообщения: 5
Зарегистрирован: 28 окт 2019, 20:30

Добавить пользовательские методы обработки HTML элементов

Сообщение uopp900 » 29 окт 2019, 16:22

В ниспадающем меню браузера XE есть много методов по обработке выбранного элемента - клик, заполнение формы, проверка существования элемента, итд.

Но этих стандартных методов не всегда хватает для работы. К примеру для заполнения списков выбора месяца, с вариативнымы именами опций (Jan, 1, 01, January, Янв, Январь) удобно использовать пользовательский метод.

Сделать такой метод в скрипте можно самому - функционал имеется. А как добавить такой метод в ниспадающее меню? Видимо, должна быть возможность редактирования пользователем некого скрипта (JS например), который бы имел доступ к DOM документа, знал бы о том какой элемент выбран, и генерировал бы строку для вставки на место курсора на панели кода.

Сколько будет стоить добавление такого функционала?

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 29 окт 2019, 16:35

Если мы такое в виде плагина с открытым исходным кодом напишем - норм ? (язык C#)

uopp900
Сообщения: 5
Зарегистрирован: 28 окт 2019, 20:30

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение uopp900 » 29 окт 2019, 16:48

Если вы потом тыкнете меня носом где править плагин - то норм

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 29 окт 2019, 16:52

Ок, все опишем, добавили в туду - сделаем в ближайшее время

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 30 окт 2019, 18:30

Добрый день сделали:

Вот пример добавление пункта и двух подпунктов
            // событие задания контекстного меню
            bool IPlugin.OnOpenContextMenu(ContextMenuStrip menu, ElemntInfo ei, EventHandler handler)
            {
                // добавим пункт меню                
                ToolStripMenuItem item = new ToolStripMenuItem("Plugin Sample Menu");
                menu.Items.Add(item);

                // добавим подпункт 1
                ToolStripItem subItem = new ToolStripMenuItem("test 1", null, handler);
                subItem.Tag = 28000; // paste to editor handler
                item.DropDownItems.Add(subItem);

                // добавим подпункт 2
                subItem = new ToolStripMenuItem("test 2", null, handler);
                subItem.Tag = 28000; // paste to editor handler
                item.DropDownItems.Add(subItem);

                // 
                return true;
            }
А также информации об элементе в ElemntInfo ei

   /// <summary>
    /// информаци яоб элементе
    /// </summary>
    public class ElemntInfo
    {
        // tagName
        public string Tag;
        // type
        public string Type;
        // name
        public string Name;
        // id
        public string Id;
        // class
        public string ClassName;
        // href
        public string Href;
        // src
        public string Src;
        // alt
        public string Alt;
        // value
        public string Value;

        // disabled
        public string Disabled;
        // selected
        public string Selected;
        // selected index
        public int SelectedIndex;

        // innerText
        public string InnerText;
        // innerHtml
        public string InnerHtml;
        // outerText
        public string OuterText;
        // outerHtml
        public string OuterHtml;

        // x
        public int X;
        // y
        public int Y;
        // width
        public int Width;
        // height
        public int Height;

        // all attributes
        public string Attributes;
        // all atribute values
        public string AttributesValues;
    }

Если этой информаци достаточно - то завтра опубликуем версию, плагин и исходный код плагина.

uopp900
Сообщения: 5
Зарегистрирован: 28 окт 2019, 20:30

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение uopp900 » 30 окт 2019, 20:00

Нужен еще доступ к DOM, и ссылка на сам элемент для сравнения. Тогда для поиска сложных элементов без name и id я смогу перебрать элементы по какому-нибудь из других параметров и определить порядковый номер именно моего элемента.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 30 окт 2019, 21:13

Номер могу добавить еще в ElementInfo.

А что имеется ввиду под доступ к DOM и ссылку на элемент ?

uopp900
Сообщения: 5
Зарегистрирован: 28 окт 2019, 20:30

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение uopp900 » 30 окт 2019, 22:14

Ну вот у меня есть свойства элемента, мне надо для него сделать пользовательскую строку кода чтобы вставить в скрипт. К примеру
my_click_by_xpath(xpath)
Тут возникает проблема - не зная структуры документа я не могу написать верный путь к моему элементу! К примеру, я решил кликнуть по innerText. Но на странице может быть еще десять элементов с таким же innerText, и мой элемент например пятый - код не сработает и кликнет по первому. Можно конечно написать монструозный путь который бы содержал все параметры но, во-первых код станет невозможно разобрать, а во вторых некоторые параметры (типа href) могут быть уникальными для каждой сессии, и код тоже не сработает.

Моя идея состоит в том чтобы дать пользователю возможность генерировать код самому исходя из структуры страницы и ссылки на свой элемент. Тогда пользователи могли бы настроить выбор элемента по каким то приоритетным параметрам. К примеру, если есть id то по id, иначе по name, иначе по классу и по номеру вхождения, иначе по innerText и номеру вхождения, итд. Возможно более опытные пользователи чем я имеют в арсенале какието универсалые принципы детекта элементов, но я их пока не нашел.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 30 окт 2019, 23:20

хорошо, завтра доделаем все и обновим

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 31 окт 2019, 01:53

опубликовано, исходный код в папке Plugin Sample

вот такая информация приходит в функцию в которой можно генерировать меню, все что надо есть :
    /// <summary>
    /// информация об элементе
    /// </summary>
    public class ElemntInfo
    {
        // tagName
        public string Tag;
        // type
        public string Type;

        // number
        public string Number;
        // name
        public string Name;
        // id
        public string Id;
        // class
        public string ClassName;
        // href
        public string Href;
        // src
        public string Src;
        // alt
        public string Alt;
        // value
        public string Value;

        // disabled
        public string Disabled;
        // selected
        public string Selected;
        // selected index
        public int SelectedIndex;

        // innerText
        public string InnerText;
        // innerHtml
        public string InnerHtml;
        // outerText
        public string OuterText;
        // outerHtml
        public string OuterHtml;

        // x
        public int X;
        // y
        public int Y;
        // width
        public int Width;
        // height
        public int Height;

        // all attributes
        public string Attributes;
        // all atribute values
        public string AttributesValues;

        // object name
        public string ObjectName;
        // form number
        public string XPath;

        // frame number
        public string FrameNumber;
        // number in form
        public string NumberInForm;
        // form number
        public string FormNumber;

        // DOM
        public string Body;
    }

uopp900
Сообщения: 5
Зарегистрирован: 28 окт 2019, 20:30

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение uopp900 » 31 окт 2019, 14:22

А сам то выбраный элемент добавьте. Или теперь его можно однозначно найти по number?

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Добавить пользовательские методы обработки HTML элементов

Сообщение bigfozzy » 31 окт 2019, 16:54

И по номеру и по XPath.

Все выложили в 41 версию - можно пользоваться. Если что надо еще - пишите.

Ответить