Уважаемые форумчане !
Не знаю что и делать, надеюсь на вашу помощь. История такая: я, если кто не знает, занимаюсь разработкой оригинальной ветки расширения Custom Buttons. До версии 0.0.2.7 проблем особых не было. Но в 0.0.2.7 я решил реализовать несколько дополнительных нововведений, в числе которых поддержка API CB2 и расширенное контекстное меню. В той версии был баг с неработоспособностью "горячих" клавиш, я это заметил и выпустил 0.0.2.8. Но, кроме прочего там ещё были проблемы с контекстным меню, которые я не сразу заметил - мне просто не попадались кнопки, которые подменяют атрибут "context".
Сейчас я выложил 0.0.2.9 на AMO - ожидает рецензирования. Эта версия учитывает, что некоторые кнопки могут подменять атрибут context. Но, возникла такая проблема: заявился ко мне на форум на mozdev товарищ кнопкописатель, потестировал новую версию со своими кнопками и опять обнаружил "проблему" с контекстным меню. Тут-то я понял, почему жаловались пользователи на 0.0.2.7/0.0.2.8, и понимаю, они будут жаловаться и на 0.0.2.9.
Но. Дело всё в том, что его кнопки "бажные". Вкратце: они копируют контекстное меню расширения один-в-один, не заменяя даже идентификаторов, после чего контекстное меню ломается. В 0.0.2.6 и младших версиях этой проблемы не было видно, потому что расширения этих версий не работают с контекстным меню.
Что мне теперь делать ? Делать даунгрейд из-за того что есть какие-то старые, криво написанные, не учитывающие возможное влияние на чужой код кнопки ? Но, возможно, этими кнопками пользуется много людей.
Прошу помощи в этом вопросе.
Заодним, может быть, кто-нибудь поможет мне в поддержке сайта на mozdev - я английский знаю на уровне басика, плохо разбираюсь в сайтостроительстве и администрировании.
Благодарю за внимание, надеюсь на помощь.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
В 0.0.2.6 и младших версиях этой проблемы не было видно, потому что расширения этих версий не работают с контекстным меню.
Т.е. document.getElementById("custombuttons-contextpopup") возвращает не тот popup – я правильно понял?
Бредовая идея: сделать что-нибудь с .cloneNode(true);
Начиная от грубого
Object.prototype._cloneNode = Object.prototype.cloneNode; // Object ли? Object.prototype.cloneNode = function(param) { if(this.id == "custombuttons-contextpopup") { ... } else { this._cloneNode(param); } }
и заканчивая
#custombuttons-contextpopup { -moz-binding: url( что-то там ); }
и
кодом, похожим на предыдущий.
А вообще лучше надо написать FAQ для кнопкоделателей на тему.
P.S. Кстати, а что будет, если до загрузки кнопок сохранить в какую-нибудь переменную document.getElementById("custombuttons-contextpopup") и работать потом уже с ней?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Т.е. document.getElementById("custombuttons-contextpopup") возвращает не тот popup – я правильно понял?
id'ы тут не причём, xml-всё таки. Это я не разобрался.
Однако, код этих кнопок основан на двух предположениях: 1) контекстное меню расширения всегда находится в актуальном состоянии и 2) контекстное меню расширения не содержит тега <menu>. Эти кнопки строят своё меню, в конце которого помещают <menu> с <menupopup>, на последний "вешают" обработчик onpopupshowing, который удаляет содержимое <menupopup>, а затем наполняет его клонами элементов меню расширения. Некоторые из пунктов меню расширения отображаются только при необходимости (например, если кнопка не имеет справки, то пункт меню "Справка" не отображается). Кроме того, кнопки CB2 помещают свои элементы в общее меню и обработчик расширения отображает нужные в зависимости от того, на какой кнопке контекстное меню "всплывает". Код кнопок эти моменты не учитывает. Это во-первых. Во-вторых, начиная с версии 0.0.2.7 в контекстном меню расширения есть вложенное подменю. Кнопки копируют и его тоже, и, ничего не зная о нём, обрабатывают событие popupshowing также и от него - то есть, меню кнопки уже давно открыто, а обработчик начинает удалять своё содержимое. После этого в приложении перестают работать вообще все popup'ы и не открываются новые окна.
Shutnik
ну по-моему выход логичный: пуст переписывают свои глючные кнопки или работают со старыми версиями расширения.
Был бы я волшебник, сказал "пусть будет так:...". А они считают, что их код не глючный - он ведь когда-то работал и баги не проявлялись. Они - гениусы, а я задумал угробить хороший проект.
TLemur
Я хочу разместить предупреждение на AMO: "Будьте внимательны! Некоторые старые кнопки содержат ошибки, которые не проявлялись в ранних версиях расширения. Если какие-либо из ваших кнопок не работают с новой версией, создайте баг (http://custombuttons.mozdev.org/bugs.html) или обратитесь на форум (http://custombuttons.mozdev.org/drupal/forum), чтобы исправить эти ошибки. Пожалуйста, не забудьте указать код неработающей кнопки или место, где её можно найти."
Боюсь, правда, там только писатели отмечаются.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Attention! Some old buttons contain bugs that only appear in the new version of extension [тут бы указать >=0.0.2.7]. If some of your buttons don't work with the new version, submit the bug-report on http://custombuttons.mozdev.org/bugs.html or post about it on http://custombuttons.mozdev.org/drupal/forum to make them work. Don't forget to specify the code of non-working button or the place, where it can be found.
PS Исправил Warning на Attention.
Отредактировано memini (26-03-2008 08:40:20)
I'm on my way home | I left three days ago | But no one seems to know I'm gone
Home is where the hatred is | Home is filled with pain and it
Might not be such a bad idea if I never | Never went home again.
Отсутствует
Был бы я волшебник, сказал "пусть будет так:...". А они считают, что их код не глючный - он ведь когда-то работал и баги не проявлялись. Они - гениусы, а я задумал угробить хороший проект.
ну тогда можно сделать режим совместимости со старыми кнопками
Отсутствует
memini
Спасибо.
Shutnik
Поддержка кнопок с кривой реализацией, я думаю, потребует добавления кода соответствующей кривизны. Тогда расширение превратится в что-то подобное CB2. Согласен, пусть разработчики переделывают свои кнопки, но как их заставить ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Согласен, пусть разработчики переделывают свои кнопки, но как их заставить ?
А расширение не может определить наличие глючной кнопки и выдать соответствующее предупреждение пользователю?
Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.
Отсутствует
А расширение не может определить наличие глючной кнопки и выдать соответствующее предупреждение пользователю?
Простая проверка будет ненадёжной, сложная потребует ресурсов (хотя бы: таскаем правильную реализацию в пакете, если обнаружили - заменяем, но, это неправильно). И, боюсь, пользователям может не понравиться. Хотя, вопрос натолкнул на мысль использовать контроль версий целевого приложения/расширения - надо будет обдумать.
К следующей версии попробую реализовать содержание контекстного меню всегда в актуальном состоянии.
Спасибо за поддержку.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует