MarkItUp отваливается в одном из контекстов Решено

Дополнение: Tickets

Всем привет. Не замечал данного бага, либо он появился не пойму. В общем источник бага я вроде определил, а вот причину — нет.
После очистки кэша в одном контексте у меня работает MarkitUp, а в другом не работает. Перейдя в другой контекст и очистив кэш он начинает работать только в этом контексте, а в другом перестает.
Исследуя Firebug'ом я понял что MarkItUp не инициализируется (ошибка объекта undefined), т.к. не находит объект TicketsConfig.editor (в DOM его нет), т.е. не видит или не выполняется этот кусок в head:
<script type="text/javascript">TicketsConfig.editor={ticket: {onTab: {keepDefault:false, replaceWith:"	"}
		,markupSet: [
			{name:"Bold", className: "btn-bold", key:"B", openWith:"<b>", closeWith:"</b>" }
			,{name:"Italic", className: "btn-italic", key:"I", openWith:"<i>", closeWith:"</i>"  }
			,{name:"Underline", className: "btn-underline", key:"U", openWith:"<u>", closeWith:"</u>" }
			,{name:"Stroke through", className: "btn-stroke", key:"S", openWith:"<s>", closeWith:"</s>" }
			,{separator:"---------------" }
			,{name:"Bulleted List", className: "btn-bulleted", openWith:"	<li>", closeWith:"</li>", multiline:true, openBlockWith:"<ul>\n", closeBlockWith:"\n</ul>"}
			,{name:"Numeric List", className: "btn-numeric", openWith:"	<li>", closeWith:"</li>", multiline:true, openBlockWith:"<ol>\n", closeBlockWith:"\n</ol>"}
			,{separator:"---------------" }
			,{name:"Quote", className: "btn-quote", openWith:"<blockquote>", closeWith:"</blockquote>"}
			,{name:"Code", className: "btn-code", openWith:"<code>", closeWith:"</code>"}
			,{name:"Link", className: "btn-link", openWith:"<a href=\"[![Link:!:http://]!]\">", closeWith:"</a>" }
			,{name:"Picture", className: "btn-picture", replaceWith:"<img src=\"[![Source:!:http://]!]\" />" }
			,{separator:"---------------" }
			,{name:"Cut", className: "btn-cut", openWith:"<cut/>" }
		]},comment: {onTab: {keepDefault:false, replaceWith:"	"}
		,markupSet: [
			{name:"Bold", className: "btn-bold", key:"B", openWith:"<b>", closeWith:"</b>" }
			,{name:"Italic", className: "btn-italic", key:"I", openWith:"<i>", closeWith:"</i>"  }
			,{name:"Underline", className: "btn-underline", key:"U", openWith:"<u>", closeWith:"</u>" }
			,{name:"Stroke through", className: "btn-stroke", key:"S", openWith:"<s>", closeWith:"</s>" }
			,{separator:"---------------" }
			,{name:"Quote", className: "btn-quote", openWith:"<blockquote>", closeWith:"</blockquote>"}
			,{name:"Code", className: "btn-code", openWith:"<code>", closeWith:"</code>"}
			,{name:"Link", className: "btn-link", openWith:"<a href=\"[![Link:!:http://]!]\">", closeWith:"</a>" }
			,{name:"Picture", className: "btn-picture", replaceWith:"<img src=\"[![Source:!:http://]!]\" />" }
		]}};</script>
Странно, ведь открыв исходный код страницы этот кусок присутствует.
Прошу помочь, кто сталкивался.
25 августа 2016, 09:40    Виталий Барышников   G+  
1    521 +1

Комментарии (15)

  1. Сергей Шлоков 25 августа 2016, 09:49 # 0
    Та же проблема, но в одном единственном контексте. Тоже не могу понять почему. Настройки TicketsConfig.editor пишутся в head, скрипт инициализации в конце body и он не видит TicketsConfig.editor.
    1. Виталий Барышников 25 августа 2016, 10:06 # 0
      Да тут не только у нас ошибка, видел тоже темы, но без ответов… Не могу понять причём тут кэш. Получается при первом запуске после очистки код срабатывает и потом работает нормально всё время. НО потом я авторизуюсь на сайте и всё, на той же странице он уже не работает. Снова чищу — начинает работать, разлогиниваюсь — не работает, браузер игнорит объект. Позже попробую загнать объект в JS-файл, где инициализация идёт, вдруг что-то изменится.
      1. Сергей Шлоков 25 августа 2016, 10:11 # 0
        Подтверждаю, у меня тоже данная проблема возникает при login/logout.
        1. Виталий Барышников 25 августа 2016, 15:07 # 0
          В общем-то сработал мой костыль. Вырезал из модели этот кусок с подключением скриптов:
          $this->modx->regClientStartupScript('<script type="text/javascript">TicketsConfig.editor={ticket: ' . $this->modx->getOption('tickets.editor_config.ticket') . ',comment: ' . $this->modx->getOption('tickets.editor_config.comment') . '};</script>', true);
          
          И руками вбил эти настройки во фрондендовский JS Tickets, в начало.
          Ждемс более интересного решения и объяснения причины бага…
    2. Alexander V 25 августа 2016, 20:57 # 0
      Такая же история. Пришлось кеш подкрутить. Ручное добавление JS не спасает.
      1. Виталий Барышников 27 августа 2016, 11:26 # 0
        Могу ещё порекомендовать, с минимальными изменениями. Скопируйте JS-файл тикетсов, укажите к нему путь в системных настройках тикетов (так обновление не повлияет на этот файл).
        В этот файл в самое начало добавьте проверку объекта и при отстутствии его объявление (настройки MarkItUp смените по желанию, тут они по умолчанию):
        if (typeof TicketsConfig.editor == 'undefined') {
        	TicketsConfig.editor = {
        		ticket: {
        			onTab: {keepDefault: false, replaceWith: "	"}
        			, markupSet: [
        				{name: "Bold", className: "btn-bold", key: "B", openWith: "<b>", closeWith: "</b>"}
        				, {name: "Italic", className: "btn-italic", key: "I", openWith: "<i>", closeWith: "</i>"}
        				, {name: "Underline", className: "btn-underline", key: "U", openWith: "<u>", closeWith: "</u>"}
        				, {name: "Stroke through", className: "btn-stroke", key: "S", openWith: "<s>", closeWith: "</s>"}
        				, {separator: "---------------"}
        				, {
        					name: "Bulleted List",
        					className: "btn-bulleted",
        					openWith: "	<li>",
        					closeWith: "</li>",
        					multiline: true,
        					openBlockWith: "<ul>\n",
        					closeBlockWith: "\n</ul>"
        				}
        				, {
        					name: "Numeric List",
        					className: "btn-numeric",
        					openWith: "	<li>",
        					closeWith: "</li>",
        					multiline: true,
        					openBlockWith: "<ol>\n",
        					closeBlockWith: "\n</ol>"
        				}
        				, {separator: "---------------"}
        				, {name: "Quote", className: "btn-quote", openWith: "<blockquote>", closeWith: "</blockquote>"}
        				, {name: "Code", className: "btn-code", openWith: "<code>", closeWith: "</code>"}
        				, {
        					name: "Link",
        					className: "btn-link",
        					openWith: "<a href=\"[![Link:!:http://]!]\">",
        					closeWith: "</a>"
        				}
        				, {name: "Picture", className: "btn-picture", replaceWith: "<img src=\"[![Source:!:http://]!]\" />"}
        				, {separator: "---------------"}
        				, {name: "Cut", className: "btn-cut", openWith: "<cut/>"}
        			]
        		}, comment: {
        			onTab: {keepDefault: false, replaceWith: "	"}
        			, markupSet: [
        				{name: "Bold", className: "btn-bold", key: "B", openWith: "<b>", closeWith: "</b>"}
        				, {name: "Italic", className: "btn-italic", key: "I", openWith: "<i>", closeWith: "</i>"}
        				, {name: "Underline", className: "btn-underline", key: "U", openWith: "<u>", closeWith: "</u>"}
        				, {name: "Stroke through", className: "btn-stroke", key: "S", openWith: "<s>", closeWith: "</s>"}
        				, {separator: "---------------"}
        				, {name: "Quote", className: "btn-quote", openWith: "<blockquote>", closeWith: "</blockquote>"}
        				, {name: "Code", className: "btn-code", openWith: "<code>", closeWith: "</code>"}
        				, {
        					name: "Link",
        					className: "btn-link",
        					openWith: "<a href=\"[![Link:!:http://]!]\">",
        					closeWith: "</a>"
        				}
        				, {name: "Picture", className: "btn-picture", replaceWith: "<img src=\"[![Source:!:http://]!]\" />"}
        			]
        		}
        	};
        }
        //дальше ничего не изменено
        var Tickets = {
        	initialize: function() {
        ...
        
        1. Сергей Шлоков 27 августа 2016, 13:31 # 0
          И прощай настройки редактора Tickets.
          Попробую предложить еще минимальнее. В лексиконе Tickets поменять значение ключа tickets_message_close_all c «закрыть все» на «close all».
          1. Виталий Барышников 27 августа 2016, 13:38 # 0
            Ну да, прощай… Попробуем, спасибо. А можешь прокомментировать это решение, почему?
            1. Сергей Шлоков 27 августа 2016, 13:40 # 0
              Выстрел наугад. ;) Попробуй. Мне самому интересно :)
              1. Сергей Шлоков 29 августа 2016, 09:01 # +1
                Добрался до компа, сам проверил. Теория с кодировкой ошибочна. Но нашёл причину. Проблема в кэшировании. Если отключить кэширование у ресурса, то все работает.
                Вот этот код всё ломает.
                Причем проявляется не у всех. На этом сайте этой проблемы нет.
                1. Виталий Барышников 29 августа 2016, 09:15 # 0
                  А я ещё не успел добраться. Спасибо. Стоит ли ждать исправление в следующей версии или на своих костылях ходить?)
                  1. Сергей Шлоков 29 августа 2016, 09:27 # 0
                    Тут есть какая-то неуловимая тонкость в настройке, которая от нас ускользает. Было бы неплохо, если бы Василий подключился и помог разобраться — здесь же скрипты Tickets загружаются заново, а не из кэша ресурса.
        2. Сергей Шлоков 05 ноября 2016, 17:34 # +2
          Вот оказывается в чем проблема была. Переделал на некэшированный минифай. Все Ок.
          1. Виталий Барышников 06 ноября 2016, 11:36 # 0
            Ок, спасибо.
            1. Сергей Шлоков 04 октября 2017, 14:44 # +1
              Разобрал проблему. Если интересно, вот статья.
          Вы должны авторизоваться, чтобы оставлять комментарии.