MarkItUp отваливается в одном из контекстов
Всем привет. Не замечал данного бага, либо он появился не пойму. В общем источник бага я вроде определил, а вот причину — нет.После очистки кэша в одном контексте у меня работает MarkitUp, а в другом не работает. Перейдя в другой контекст и очистив кэш он начинает работать только в этом контексте, а в другом перестает.
Исследуя Firebug'ом я понял что MarkItUp не инициализируется (ошибка объекта undefined), т.к. не находит объект TicketsConfig.editor (в DOM его нет), т.е. не видит или не выполняется этот кусок в head:
Прошу помочь, кто сталкивался.
Исследуя 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>
Странно, ведь открыв исходный код страницы этот кусок присутствует.Прошу помочь, кто сталкивался.
Комментарии: 15
Та же проблема, но в одном единственном контексте. Тоже не могу понять почему. Настройки TicketsConfig.editor пишутся в head, скрипт инициализации в конце body и он не видит TicketsConfig.editor.
Да тут не только у нас ошибка, видел тоже темы, но без ответов… Не могу понять причём тут кэш. Получается при первом запуске после очистки код срабатывает и потом работает нормально всё время. НО потом я авторизуюсь на сайте и всё, на той же странице он уже не работает. Снова чищу — начинает работать, разлогиниваюсь — не работает, браузер игнорит объект. Позже попробую загнать объект в JS-файл, где инициализация идёт, вдруг что-то изменится.
Подтверждаю, у меня тоже данная проблема возникает при login/logout.
В общем-то сработал мой костыль. Вырезал из модели этот кусок с подключением скриптов:
Ждемс более интересного решения и объяснения причины бага…
$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, в начало.Ждемс более интересного решения и объяснения причины бага…
Такая же история. Пришлось кеш подкрутить. Ручное добавление JS не спасает.
Могу ещё порекомендовать, с минимальными изменениями. Скопируйте JS-файл тикетсов, укажите к нему путь в системных настройках тикетов (так обновление не повлияет на этот файл).
В этот файл в самое начало добавьте проверку объекта и при отстутствии его объявление (настройки MarkItUp смените по желанию, тут они по умолчанию):
В этот файл в самое начало добавьте проверку объекта и при отстутствии его объявление (настройки 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() {
...
И прощай настройки редактора Tickets.
Попробую предложить еще минимальнее. В лексиконе Tickets поменять значение ключа tickets_message_close_all c «закрыть все» на «close all».
Попробую предложить еще минимальнее. В лексиконе Tickets поменять значение ключа tickets_message_close_all c «закрыть все» на «close all».
Ну да, прощай… Попробуем, спасибо. А можешь прокомментировать это решение, почему?
Выстрел наугад. ;) Попробуй. Мне самому интересно :)
Добрался до компа, сам проверил. Теория с кодировкой ошибочна. Но нашёл причину. Проблема в кэшировании. Если отключить кэширование у ресурса, то все работает.
Вот этот код всё ломает.
Причем проявляется не у всех. На этом сайте этой проблемы нет.
Вот этот код всё ломает.
Причем проявляется не у всех. На этом сайте этой проблемы нет.
А я ещё не успел добраться. Спасибо. Стоит ли ждать исправление в следующей версии или на своих костылях ходить?)
Тут есть какая-то неуловимая тонкость в настройке, которая от нас ускользает. Было бы неплохо, если бы Василий подключился и помог разобраться — здесь же скрипты Tickets загружаются заново, а не из кэша ресурса.
Вот оказывается в чем проблема была. Переделал на некэшированный минифай. Все Ок.
Ок, спасибо.
Разобрал проблему. Если интересно, вот статья.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.