Новая версия Ace для MODX - 1.6.0

Сегодня поступил хороший вопрос о синтаксисе Fenom в лучшем редакторе для MODX — Ace. Он очень похож на Smarty, так что его оказалось нетрудно добавить.

Однако, я в очередной раз обратил внимание, как долго наш любимый редактор не обновлялся — уже больше года! Очевидно, danyaPostfactum некогда им заниматься, поэтому я решил попробовать обновить компонент самостоятельно.

Изменений много, но все они описываются одной строчкой:
  • Ace обновлён до последней версии 1.2.0
В том числе:
  • Небольшие изменения в оформлении
  • Улучшена поиск и замена
  • Добавились мультикурсоры и мультивыделение
  • Убран временный фикс ширины редактора, за ненадобностью
  • Я так полагаю, исправлено множество багов редактора
  • Добавлена поддержка синтаксиса Fenom

Насколько я вижу, всё работает вполне корректно, багов нет. Попробуйте обновиться из нашего репозитория и потестировать эту версию.

Если всё будет хорошо — выложим обновку и в официальный репозиторий.

Обновлено 08.08.2015


Новая версия 1.6.1-pl решает проблему с неработающим пробелом и поиском при включенной системной настройке compress_js.

Обновлено 09.08.2015


Версия 1.6.2-pl добавляет синтаксис markdown для файлов с расширением .md и документов с mime type «text/x-markdown».
Исправлены мои кривые изменения в версии 1.6.0 для более корректной обработки режимов подсветки синтаксиса.
Василий Наумкин
07 августа 2015, 14:22
modx.pro
6 401
+16

Комментарии: 45

Александр Н
07 августа 2015, 17:43
+1
Благодарю за очень полезный труд!
    Сергей Шлоков
    07 августа 2015, 19:03
    0
    Я беру точно, спасибо.
      Владимир
      08 августа 2015, 10:41
      0
      Шикарно! Спасибо!
      Пойду везде обновлять)
        Владимир
        08 августа 2015, 11:52
        0
        Улучшена поиск и замена
        — можно чуть подробнее об улучшениях? Не хватает в Ace, как мне кажется, отдельного окна для поиска и замены в коде.
          Василий Наумкин
          08 августа 2015, 12:23
          0
          Отдельное окошко было в самом начале, потом Данил решил, что правильнее использовать родной плагин Ace для этого дела. Я с ним полностью согласен.

          А улучшение, как минимум, в том, что есть кнопка all при поиске, которая выделяет все совпадения и позволяет их сразу заменить при помощи мультикурсора:

          Ну и замена через all, вроде, начала с первого раза работать (раньше, бывало, что пока не заменишь что-то один раз, all не срабатывал).
            Владимир
            08 августа 2015, 14:33
            0
            Мда..., вот в Хроме, в поиске по странице, нет у меня кнопки ALL:

            В файрфоксе, кнопка подсветить все, подсвечивает только то, что в данный момент есть в видимой области окна Ace, а все, что за ее пределами не видит в упор.
            Туплю?

              Василий Наумкин
              08 августа 2015, 14:34
              +1
              Ага, тупишь.

              Нажми Ctrl+F находясь в окошке редактора, а не в произвольном месте браузера.
                Владимир
                08 августа 2015, 14:36
                0
                Ну, так ,«Семен Семенычъ»))) Ну, Ё-моё.
                Я прожил без этого столько тяжких дней.
                Спасибо, Василий.
                  Владимир
                  08 августа 2015, 15:16
                  1
                  +2
                  Default Keyboard Shortcuts
                  может еще кому будут полезны все горячие клавиши Ace.
            Timur
            08 августа 2015, 11:54
            0
            Поставил вместо codeMirror. У меня не работает пробел. Курсор себя как-то странно ведет. Надо обнулять все табуляции от предыдущего редактора, только тогда курсор становится там, куда ты его хочешь поставить.
            Может это у меня одного так, не знаю.
              Василий Наумкин
              08 августа 2015, 12:19
              0
              Там в настройках есть смена режима табуляции — попробуй поменять.
                Timur
                08 августа 2015, 12:28
                0
                Менял. Также включал показ невидимых символов — не показывал ничего. Прикрепил картинку — видно где курсор находится, а печатает он там где «вв». Если перед вручную удалить все пробелы и табуляции, сделать самому, то все работает корректно (кроме пробела). Но делать это в каждом чанке и сниппете — идея так себе.
                  Василий Наумкин
                  08 августа 2015, 12:34
                  0
                  Ну, у меня такого нет. Возможно, это от Codemirror остаются какие-то невидимые символы и мешают работе Ace. А может, на странице еще остались какие-то скрипты от старого редактора, и они мешаются.

                  Можно попробовать скопировать всё в блокнот, а потом вернуть обратно и посмотреть, что получится. Еще можно сделать новый сайт на modhost.pro и погонять редактор там.
                Александр Н
                08 августа 2015, 13:55
                0
                Стоял только Ace, обновил — тоже не работает пробел. Табуляция работает
                  Василий Наумкин
                  08 августа 2015, 14:01
                  0
                  Всем у кого не работает пробел — отключите системную настройку compress_js и почистите кэш. Какая-то проблема с загрузкой extensions.

                  Сейчас готовлю исправление.
                Николай
                08 августа 2015, 12:40
                0
                У редактора присутствует баг, когда длина строки превышает в 2-3 раза ширину экрана, появляется скролл горизонтальный.

                Казалось бы, курсор мигает после закрытого апострофа, и любой введеный символ будет писаться после него. Т.е
                '0'{символ}, а по факту идет смещение, и символ будет сразу после нолика. Т.е '0{символ}',
                Может я что то не так делаю? Баг проявляется если проскролить в самый конец строки, в начале все норм. И чем длиннее строка — тем больше смещение указателя.
                  Воеводский Михаил
                  08 августа 2015, 13:15
                  0
                  Есть такой баг, заметил еще год назад. Посчитал тогда глюком JS из-за чрезмерной длины строки и забил.
                  Владимир
                  08 августа 2015, 22:56
                  0
                  Василий, есть грусть по вот такому поводу:
                  на двух сайтах я использую компонент ContentBlocks. В нем есть возможность конструировать контент статьи из различных блоков. Можно в т.ч. использовать врезки html. При установленном ACE 1.5.1-pl подсветка кода в ContentBlocks есть, а вот на другом сайте обновил Ace до 1.6.1-pl и увы, загрустил, пропала подсветка.
                  В чанках, снипетах — все норм, в ContentBlocks — нет.
                  Это наблюдается только в статьях. При редактировании шаблонов самого ContentBlocks подсветка кода есть.

                    Василий Наумкин
                    09 августа 2015, 05:39
                    0
                    У меня нет ContentBlocks, так что извини — проверить негде.
                      Владимир
                      09 августа 2015, 06:18
                      0
                      Да, понимаю. И поскольку ContentBlocks есть у меня, готов немедленно предоставить доступ к своим сайтам.
                        Василий Наумкин
                        09 августа 2015, 06:19
                        0
                        Шли сообщение с доступами через мой профиль — попробую разобраться.
                          Владимир
                          09 августа 2015, 06:30
                          0
                          Отправил на почту.
                            Владимир
                            09 августа 2015, 07:58
                            0
                            Урааааа! Вижу 1.6.2. и все работает)
                        Василий Наумкин
                        09 августа 2015, 08:11
                        +1
                        Проблема в том, что ContentBlocks использует свой вариант Ace для полей с кодом, но при этом проверяет наличие уже установленного Ace и пытается использовать его скрипты, если есть.

                        Соответственно, после обновления редактора, ContentBlocks работает с ним неправильно. Это можно исправить, закомментировав проверку в файле /core/components/contentblocks/elements/inputs/codeinput.class.php
                        //if (!$aceIsInstalled || !$aceIsUsed) {
                                    $js[] = $this->contentBlocks->config['assetsUrl'] . 'js/vendor/9cloud/ace/ace.js';
                                //}
                        Тогда CB будет всегда подгружать свой вариант Ace и нормально с ним работать.

                        Ну а я в версии 1.6.2-pl сделал загрузку файлов редактора через плагин только в том случае, если Ace действительно используется на странице, а не просто включен в настройках.

                        Написал об этом Марку Хамстре, может он сразу отключит свою проверку в codeinput.class.php.
                          Владимир
                          09 августа 2015, 08:20
                          0
                          Эх, теперь пропала подсветка кода в шаблонах ContentBlocks.
                          Пример scandinews.fi/manager/?a=93 поле lightbox Image (id 65), вкладка «свойства».

                            Василий Наумкин
                            09 августа 2015, 08:39
                            0
                            Вернул всё как было, а то, выходит, я всё утро занимаюсь бесплатной техподдержкой дорогущего ContentBlocks.

                            Проблему я тебе описал (CB, зачем-то, пытается использовать файлы стороннего компонента, вместо своих), дальше разбирайтесь с Марком.
                              Владимир
                              09 августа 2015, 08:42
                              0
                              Хорошо, Василий, спасибо. Обязательно отблагодарю за потраченное тобой время.
                                Василий Наумкин
                                09 августа 2015, 08:52
                                1
                                +1
                                Вот, придумал плагин с фиксом на событие OnDocFormPrerender, который не меняет код ни Ace, ни CB:
                                <?php
                                $modx->controller->addHtml("<script>
                                    var config = ace.require('ace/config');
                                    var acePath = MODx.config['assets_url'] + 'components/ace/ace';
                                    config.set('basePath', acePath);
                                </script>");
                                Теперь, насколько я вижу, всё работает.
                                  Владимир
                                  09 августа 2015, 08:59
                                  0
                                  Ура) Да. Все отлично. Спасибо, закину сегодня магарыч!))))
                                    Владимир
                                    09 августа 2015, 20:09
                                    0
                                    Доброго вечера!.. Paypal понес к тебе небольшое спасибо.
                        Василий Столейков
                        11 августа 2015, 13:22
                        0
                        Или мне показалось, или в редакторе исчезло автодополнение Emmet?
                        emmet.io/
                        docs.emmet.io/cheat-sheet/
                        У меня версия ace-1.6.2-pl и emmet не работает! Он очень нужен!
                        Александр
                        11 октября 2015, 13:30
                        0
                        Отключил какое возможно кеширование… все равно пробел не ставится? Как решить проблему еще можно?
                          Олег
                          28 февраля 2017, 17:00
                          0
                          Подскажите, как открыть окошко автодополнения свойств при вызове сниппета?
                          Увидел на скриншоте — слюнки потекли, а как открыть не разобрался :(
                            DOM
                            DOM
                            04 мая 2017, 16:49
                            0
                            Начать писать нужное слово а затем Ctrl+Space.
                            А вообще все hotKey можно посмотреть за командой Ctrl+Alt+H.
                              Баха Волков
                              19 мая 2017, 07:20
                              0
                              Можно вопрос: видел вроде beatify подключен, но не знаю как им воспользоватся, не подскажете?
                                DOM
                                DOM
                                19 мая 2017, 10:49
                                0
                                Не, не вкурсе, ровняю HTML в Brackets.
                          Кирилл Киселев
                          06 июля 2017, 08:29
                          0
                          Не получается вызвать сниппет из Ace. Написал даже пример сниппета:
                          \nsnippet getr\n	[!getResources? parents=`${1}`${2}]]\n
                          Пишу getr нажимаю таб и он просто отступает.
                            Константин Ильин
                            31 июля 2017, 15:18
                            0
                            Присоединяюсь к тому, что не работает.
                            только у меня в теги html преобразует
                            <getr></getr>
                            При это сниипет lorem работает нормально

                            Хотел вызовы феном загнать туда или $_modx->resourece. например
                              Кирилл Киселев
                              01 августа 2017, 00:16
                              +1
                              Я просто неправильно писал, надо без символов \n писать, а переводить на новую строку:
                              snippet modlog
                              	$${1}modx->log(1, '${0}');
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                            45