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

Всем привет. Не замечал данного бага, либо он появился не пойму. В общем источник бага я вроде определил, а вот причину — нет.После очистки кэша в одном контексте у меня работает 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:"" }
		]},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, 06:40
modx.pro
1
2 688
+1

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

Сергей Шлоков
25 августа 2016, 09:49
0
Та же проблема, но в одном единственном контексте. Тоже не могу понять почему. Настройки TicketsConfig.editor пишутся в head, скрипт инициализации в конце body и он не видит TicketsConfig.editor.
    Виталий Барышников
    25 августа 2016, 10:06
    0
    Да тут не только у нас ошибка, видел тоже темы, но без ответов… Не могу понять причём тут кэш. Получается при первом запуске после очистки код срабатывает и потом работает нормально всё время. НО потом я авторизуюсь на сайте и всё, на той же странице он уже не работает. Снова чищу — начинает работать, разлогиниваюсь — не работает, браузер игнорит объект. Позже попробую загнать объект в JS-файл, где инициализация идёт, вдруг что-то изменится.
      Сергей Шлоков
      25 августа 2016, 10:11
      0
      Подтверждаю, у меня тоже данная проблема возникает при login/logout.
        Виталий Барышников
        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, в начало.
        Ждемс более интересного решения и объяснения причины бага…
    Alexander V
    25 августа 2016, 20:57
    0
    Такая же история. Пришлось кеш подкрутить. Ручное добавление JS не спасает.
      Виталий Барышников
      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() {
      ...
        Сергей Шлоков
        27 августа 2016, 13:31
        0
        И прощай настройки редактора Tickets.
        Попробую предложить еще минимальнее. В лексиконе Tickets поменять значение ключа tickets_message_close_all c «закрыть все» на «close all».
          Виталий Барышников
          27 августа 2016, 13:38
          0
          Ну да, прощай… Попробуем, спасибо. А можешь прокомментировать это решение, почему?
            Сергей Шлоков
            27 августа 2016, 13:40
            0
            Выстрел наугад. ;) Попробуй. Мне самому интересно :)
              Сергей Шлоков
              29 августа 2016, 09:01
              +1
              Добрался до компа, сам проверил. Теория с кодировкой ошибочна. Но нашёл причину. Проблема в кэшировании. Если отключить кэширование у ресурса, то все работает.
              Вот этот код всё ломает.
              Причем проявляется не у всех. На этом сайте этой проблемы нет.
                Виталий Барышников
                29 августа 2016, 09:15
                0
                А я ещё не успел добраться. Спасибо. Стоит ли ждать исправление в следующей версии или на своих костылях ходить?)
                  Сергей Шлоков
                  29 августа 2016, 09:27
                  0
                  Тут есть какая-то неуловимая тонкость в настройке, которая от нас ускользает. Было бы неплохо, если бы Василий подключился и помог разобраться — здесь же скрипты Tickets загружаются заново, а не из кэша ресурса.
        Сергей Шлоков
        05 ноября 2016, 17:34
        1
        +2
        Вот оказывается в чем проблема была. Переделал на некэшированный минифай. Все Ок.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        15