Организация выделения в тестовых строках

Issue #322 new
Former user created an issue

Originally reported on Google Code with ID 322

текст, выделенный в элементах textarea отправляется на сервер и обрабатывается в файле
preg/authoring_tools/capture.php и выводиться с помощью alert'a
https://code.google.com/r/1invaderzim1-pregselectiontext/source/list

Reported by 1invaderzim1 on 2015-01-12 10:00:54

Comments (22)

  1. Former user Account Deleted
    на сервер будет отправляться строка
    var query = 'txt='+txt; 
    и обрабатываться в файле capture.php .
    
    на сервер будут приходить такие строки:
    "textarea_ИндексНачала_ИндексКонца"      - запрос от id_regex_text
    "description_ИндексНачала_ИндексКонца"   - запрос от description_handler
    "regextest_НомерСтроки_ИндексНачала_ИндексКонца" - запрос от id_test_regex 
    
    отправка будет срабатывать только если кнопка мыши будет нажата на одном из выше перечисленных
    элементов
    

    Reported by 1invaderzim1 on 2015-01-21 00:08:53

  2. Former user Account Deleted
    репозиторий теперь находится здесь
    https://code.google.com/r/1invaderzim1-textsending/source/list
    

    Reported by 1invaderzim1 on 2015-01-23 10:29:53

  3. Oleg Sychev repo owner
    Issue 313 has been merged into this issue.
    

    Reported by oasychev on 2015-01-23 13:50:39

  4. Oleg Sychev repo owner
    * Описание в комментарии наверху устарело.
    

    Reported by oasychev on 2015-01-23 13:51:03

  5. Oleg Sychev repo owner
    К рассмотрению представлен код, осуществляющий выделение в тестовой строке (в зеленой
    ее части) и отправку на сервер координат (индекса строки, индекса начала выделения
    и его длины). При этом индекс начала выделения считается от начала строки, но в выделение
    может входить только зеленая часть строки (это не бага, это фича (с)).
    
    Нужно
    а) провести обзор яваскрипт кода по стабильности и посмотреть его на разных браузерах.
    Кто возьмется - отзовитесь - Пахомов? Терехов?
    б) организовать получение testing_tool и обработку результата - Сычев
    в) реализовать в КА матчере возможность по matching results, индексу начала и длине
    отрезка совпавшей строки возвращать узел дерева регулярного выражения, с которым совпал
    указанный отрезок (округление вверх по дереву) - Стрельцов
    г) реализовать возможность отключения выделения в зависимости от настроек (на данный
    момент - при PHP Preg matchere выделение в тестах не должно работать) - Пидопригора
    
    Всех жду, особенно по пунктам а и г.
    

    Reported by oasychev on 2015-01-23 13:58:19 - Status changed: InProgress - Labels added: Type-Enhancement, Priority-High, Component-Preg - Labels removed: Type-Review, Priority-Medium

  6. Former user Account Deleted
    по пункту а несколько мыслей 
    
    нашел только 1 коммит https://code.google.com/r/1invaderzim1-textsending/source/detail?r=5aea80f0c927373060788138582408d949221673
    думаю о нем и речь
    
    1) 153 строка - if(selection = window.getSelection) - == наверно?
    2) строки 33-55 у нас подключен jQuery и он это лучше умеет делать, не стоит вручную
    писать http://api.jquery.com/jquery.ajax/
    

    Reported by TOPT.iiiii on 2015-01-25 19:36:36

  7. Former user Account Deleted
    if(selection = window.getSelection) - так и должно быть
    
    строки 33-55 у нас подключен jQuery и он это лучше умеет делать - изменил
    
    реализовать возможность отключения выделения в зависимости от настроек (на данный момент
    - при PHP Preg matchere выделение в тестах не должно работать)
    - изменил
    

    Reported by 1invaderzim1 on 2015-01-26 23:01:46

  8. Oleg Sychev repo owner

    Работаем в этой задаче. Немножко дискуссии об описании есть также в #326, если есть конкретно вопросы по структуре тегов в описании это там, можете подписаться. Общее обсуждение ведем здесь. Жду предложений по методу вообще и в условиях наших конкретных строк.

    Учитываем что нас интересуют координаты в видимых пользователю строках, а не в HTML с тегами. Если в описании есть id в тегах то там задача упрощается подбором такого наименьшего тега, который накрывал бы все выделение.

    В тестовых строках нас интересует выделенная часть из зеленого и желтого, красный это несовпавший текст...

  9. Andrey Usov

    План решения задачи:

    Добавить в каждую часть формы regex_constructor по кнопке для описания и проверки текста по регулярному выражению.

    По нажатию на кнопки будет происходить следующее:

    1) Получить выделение на странице в заданных границах(описания регулярного выражения или проверки текста). На выходе получим индекс начала и конца выделения.

    2) Если есть выделение в заданной границе:

    2.1) Получить в границах описания/проверки текста элементы регулярного выражения, описания которых выделены.

    2.2) Выделить в регулярном выражении части по полученным границам.

  10. Andrey Usov

    На данный момент в форке HighlightedTextShowing реализовано следующее:

    Для области "Описание":

    1) Функция получения выделения из заданной области - получает индексы начала и конца выделения.

    2) Функция получения индексов начального и конечного тега из регулярного выражения по индексам выделения.

    3) Для отображения выделением используется функция, которая выделяет часть регулярного выражения и ее описание.

    Для области "Проверка текста":

    1) Используется та же функция получения выделения.

    2) Для определения индексов начального и конечного тега из регулярного выражения по индексам выделения будет написана функция, т.к. в сравниваемом с регулярным выражением текст могут присутствовать несоответствия регулярному выражению.

    3) Для отображения выделением будет использоваться так же функция выделения части регулярного выражения и его описания.

  11. Oleg Sychev repo owner

    1) Для описания - вышлите мне пример текущего варианта описания в html, выделенного из него куска и результата вашей функции. Без примера про такое количество индексов сложно понять... Я вам покажу куда что надо передать если вы подойдете ко мне на экзамене или консультации и дождетесь пока будет свободное время (во вторник после 13-30, в среду - до 13-30).

    2) Для строк проверки - учитывается выделение в одной строке, в принципе интересует только та часть выделения которая в зеленой зоне - зоне совпадения - но индексы лучше от начала строки (хотя можно и в зеленой, пересчитать несложно). При попадании в выделение красного участка слева или справа он внутрь выделения не считается (но опять же, это и на стороне сервера пересчитать можно, в PHP если вам так проще).

  12. Andrey Usov

    Для описания найдено такое решение (на вход по прежнему подается выделение в строке, на выходе должны быть индексы первого и последнего элемента в regex, описание которых выделено):

    1. Рекурсивная ф-ия (т.к. вложенность узлов может быть любая), которая проходит по дочерним элементам и определяет, какие дочерние узлы выделены - возвращает список выделенных узлов.
    2. Удаление повторяющихся узлов из предыдущего списка (элементы в списке идут в порядке следования в регулярном выражении).
    3. По списку определяются индексы первого и последнего элемента в regex, описание которых выделено.
  13. Andrey Usov

    Начальный план тестирования работы ф-ии для выделении текста в описании:

    1. Отсутствие выделения. Результат - ничего не выделено
    2. Выделение текста за границами блока описания. Результат - ничего не выделено
    3. Выделение текста в границах блока описания и после него. Результат - ничего не выделено
    4. Выделение текста в границах блока описания и до него. Результат - ничего не выделено
    5. Выделение текста в границах блока описание, а также до и после него. Результат - ничего не выделено
    6. Выделение символов в строке, не относящихся к описанию частей регулярных выражения(слова-связки). Результат - ничего не выделено
    7. Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения. Результат - выделение этого элемента регулярного выражения.
    8. Выделение части от фрагмента текста, описывающего 1 элемент регулярного выражения. Результат - выделение этого элемента регулярного выражения.
    9. Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения и слова связки после элемента. Результат - выделение этого элемента регулярного выражения.
    10. Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения и слова связки до этого элемента. Результат - выделение этого элемента регулярного выражения.
    11. Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения и слов связки до и после этого элемента. Результат - выделение этого элемента регулярного выражения.
    12. Выделение полностью описаний двух элементов и слова-связки между ними. Результат - выделение этих элементов регулярного выражения.
    13. Выделение полностью описания действия, которое не используется без аргументов(или, кол-во раз и т.д.). Результат - выделение этого действия и связанных с ним аргументов в регулярном выражении.
    14. Выделение описания частей регулярного выражения, находяшихся на разных уровнях иерархии(разноуровневые или, скобки и т.д.). Результат - выделение в регулярном выражении части, которая из выделенных находится на самом высоком уровне(вложенные части попадут в ее выделение).
    15. Выделение всего текста описания регулярного выражения. Результат - выделено все регулярное выражение
  14. Andrey Usov

    Доделал рекурсивную ф-ию для определения выделенных частей описания регулярного выражения. Как по спанам, которые я получил из выделения, получить индексы в регулярном выражении, которым они соответствуют?

  15. Oleg Sychev repo owner

    Там вам надо получать не индексы, а id узлов синтаксического дерева. Они в спанах должны быть прописаны. Посмотрите на дерево - там id узлов прописаны в виде меток узлов и используются при посылке запроса на выделение из дерева (используется id верхнего узла). Проблемы возникают в ситуации, когда выделена часть N-арного узла конкатенации или альтернативы т.к. в вашем случае его еще нет и id тоже - и спана для него тоже.

    По тестам - сможете сделать их с помощью behat?

  16. Andrey Usov

    Тесты будут описаны без behat

    Доделано выделение части регулярного выражения в описании и по нажатию на кнопку его выделение.

  17. Andrey Usov

    Набор необходимых правок по имеющемуся решению:

    1. переименовать переменные в php
    2. комментарии в js перевести на английский
    3. добавить комментарий в php про then/or и перевод на другие языки
    4. переделать определение по цвету спана: добавить спец. флаг в имя класса и по нему определять это
    5. проверить php codechecker'om
    6. коммит-сообщения перевести на русский язык
    7. закомментировать ф-ию get_text_from_node при использовании для разных браузеров

    делать исправления внутри коммита и вразумительное описание абзацем

    Протестировать следующие случаи:

    (ab)c(?(1)de|fg)df\b.

    subpattern #1: [ ab ] then c then if the subpattern #1 has been successfully matched then check: [de] else check: [fg] then df then a word boundary then .

    1. Выделено "hen c then "

    2. Сделать в спанах несколько выделений сразу и проверить работоспособность.

  18. Andrey Usov

    Внесены все правки.

    Протестирован первый случай.

    Не протестирован случай множественных выделений.

  19. Oleg Sychev repo owner

    У вас там судя по bitbucket две несвязные ветки в репозитории, что происходит? Какая правильная, откуда вторая взялась?

  20. Andrey Usov

    Вторая ветка взялась при переделывании коммитов (перевел коммиты в драфт, удалил/слил лишние, изменил коммит-сообщения и сделал force push).

    Вторая ветка с русскими названиями коммитов верная.

  21. Oleg Sychev repo owner

    Бросать неоконченную ветку плохо. Можно перезалить репозиторий так, чтобы ветка осталась одна - вас ведь никто не вытягивал. Другие смогли оставить одну ветку.

  22. Log in to comment