Я изменил и улучшил кнопку Autocopy+3(Firefox 3.6-13)
Кому интересно читайте описание.
вот расширение, которое подгоняло все размеры сайтов, ImageFit думаю оно должно стать первой ласточкой в благородном деле перевода расширений на рельсы CB
Ах, если бы все было так прост.
Отсутствует
https://developer.mozilla.org/en/E4X
Warning: E4X is deprecated. It will be disabled by default for content in Firefox 16, disabled by default for chrome in Firefox 17, and removed in Firefox 18. Use DOMParser/DOMSerializer or a non-native JXON algorithm instead.
Много кнопок помрет...
Ах да, еще
var xul = '\ <menu label="Test">\ <menupopup>\ <menuitem label="Test" />\ </menupopup>\ </menu>'; var menu = new DOMParser().parseFromString(xul, "application/vnd.mozilla.xul+xml").documentElement; alert(menu);
Ошибка: NS_ERROR_NOT_IMPLEMENTED: Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsIDOMParser.parseFromString]
А если сменить "application/vnd.mozilla.xul+xml" на "application/xml", проявится старая проблема.
Что самое интересное, Add XUL mode to DOMParser теперь RESOLVED WONTFIX.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
что с этим делать ?
Надеяться, что еще чего-нибудь не отломают.
Обещают убрать поддержку конструкций вида
var menu = <menu xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> ... </menu>;
и
Так что перестанут работать все кнопки, использующие cbu.makeXML() / custombuttonsUtils.makeXML() и аналоги вида
function parseFromXML(xml) { var pp = XML.prettyPrinting; XML.prettyPrinting = false; var elt new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement; XML.prettyPrinting = pp; return elt; }
Добавлено 01-07-2012 02:23:36
А остается вот такое извращение:
var xul = '\ <menu xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" label="Test">\ <menupopup>\ <menuitem label="Test" />\ </menupopup>\ </menu>'; xul = xul.trim().replace(/>\s+</g, "><"); var menu = new DOMParser().parseFromString(xul, "application/xml").documentElement; alert(menu);
И вместо <menuitem label={someVar} /> надо будет заниматься веселой конкатенацией.
Ну, или орудовать через document.createElement() и appendChild().
Или вот есть JXON, который предлагают использовать взамен. Только вот встроенную реализацию забыли сделать, так что больше копипасты!
Отредактировано Infocatcher (01-07-2012 02:23:36)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
А такой код тоже может умереть.
(function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); тут CSS код ...... ]]>.toString());
Отсутствует
закомментируй строчку с алертом
а куда указано скопируй и вставь код кнопки что ты привёл выше.
var appcontent = document.getElementById("appcontent"); appcontent.removeEventListener("DOMContentLoaded", Myfunc, true); appcontent.addEventListener("DOMContentLoaded", Myfunc, true); function Myfunc(){ var clffull=content.document.location.href; var chkpoint='/'; var arrayOfStrings = clffull.split(chkpoint); var clf=arrayOfStrings[2]; var site_a="www.yandex.ru/"; var site_b="www.mail.ru/"; var site_c="www.rambler.ru/"; if (clf==site_a|clf==site_b|clf==site_c) //сюда добавляем адреса на каких должно срабатывать { //alert("сработало!"); //-----сюда нужный код // ==UserScript== // @name Custom Buttons // @namespace http://www.greasespot.net/ // @include http://custombuttons.mozdev.org/drupal/content/* // @exclude http://custombuttons.mozdev.org/drupal/content/main-page // @exclude http://custombuttons.mozdev.org/drupal/content/custom-buttons-documentation // ==/UserScript== if(content.document.getElementById("sidebar-left")) { content.document.getElementById("sidebar-left").style.display = "none"; } var d = content.document; var s = d.createElement("style"); s.type = "text/css"; s.innerHTML = "#sidebar-left + td { padding-left: 0 }"; var h = d.getElementsByTagName("head")[0]; h.appendChild(s); var p = content.document.getElementsByTagName("pre"); for (var i = 0; i < p.length; i++) { p[i].style.overflow = "auto"; if (p[i].textContent.indexOf("data:image") == -1) { p[i].style.whiteSpace = "pre-wrap"; p[i].style.wordWrap = "break-word"; } } /* double click to select all */ //var d = document; //var p = d.getElementsByTagName("pre"); for (var i = 0; i < p.length; i++) { p[i].addEventListener("dblclick", function () { var s = getSelection(); var r = d.createRange(); r.selectNodeContents(this); s.removeAllRanges(); s.addRange(r); }, false); } /* fit to width */ function t(f) { var a = d.createNodeIterator(d, 1, f, false); while (a.nextNode()) {} } //var d = document; t(function (e) { var x = e.offsetLeft; var l = e.offsetParent; while (l != null) { x += l.offsetLeft; l = l.offsetParent; } var w = d.documentElement.clientWidth - x; var s = e.style; if (s.marginLeft) w -= s.marginLeft; if (s.marginRight) w -= s.marginRight; if (s.paddingLeft) w -= s.paddingLeft; if (s.paddingRight) w -= s.paddingRight; if (s.borderWidth) w -= s.borderWidth; w -= d.defaultView.innerWidth - d.documentElement.offsetWidth; if (e.tagName == "IMG") { var h = e.clientHeight * w / e.clientWidth; s.maxHeight = h; } s.maxWidth = w + "px"; }); //---------------------- } }
Добавлено 01-07-2012 04:15:26
в благородном деле перевода расширений на рельсы CB
LongLogin , Ура кнопкотворцам!
Много кнопок помрет...
Infocatcher
Отредактировано Крошка Ру (01-07-2012 04:18:58)
Отсутствует
а можно сделать кнопку делающую следующее?
лкм - нажать\отжать с запоминанием состояния
в отжатом состоянии не делает ничего
в нажатом при добавлении новой СВ кнопки через урл (по протоколу custombuttons: ) после добавления
вытаскивает её на тулбар справа или слева от себя (для удобства думаю стоит предусмотреть оба варианта выбор которых осуществлять правкой в коде,например закомментировать раскоментировать кусок)
Можно же создать пустую кнопку кликом СКМ по пункту «Клонировать», а потом обновить из буфера обмена.
В инициализацию:
var cbs = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"] .getService(Components.interfaces.cbICustomButtonsService); var windowId = cbs.getWindowId(document.documentURI); var notificationPrefix = cbs.getNotificationPrefix(windowId); var observer = { button: this, observe: function(button, topic, data) { if(topic != notificationPrefix + "installButton") return; var toolbar = this.button.parentNode; toolbar.insertBefore(button, this.button.nextSibling); custombuttons.persistCurrentSets(toolbar.id, this.button.id, button.id || button.getAttribute("id")); } }; var os = Components.classes["@mozilla.org/observer-service;1"] .getService (Components.interfaces.nsIObserverService); os.addObserver(observer, notificationPrefix + "installButton", false); this.onDestroy = function() { os.removeObserver(observer, notificationPrefix + "installButton"); };
Для добавления справа нужно раскомментировать «.nextSibling».
Добавляется всегда справа. Иначе надо реализовывать аналог custombuttons.persistCurrentSets().
Добавлено 01-07-2012 04:44:58
Только это без выключалки и надо еще имитировать настройку панелей инструментов.
Добавлено 01-07-2012 05:07:46
А вот с простой выключалкой:
var cbs = Components.classes["@xsms.nm.ru/custombuttons/cbservice;1"] .getService(Components.interfaces.cbICustomButtonsService); var windowId = cbs.getWindowId(document.documentURI); var notificationPrefix = cbs.getNotificationPrefix(windowId); this.onclick = function(e) { if(e.button == 0) { this.checked = !this.checked; document.persist(this.id, "checked"); } }; var observer = { button: this, observe: function(button, topic, data) { if(topic != notificationPrefix + "installButton") return; if(!this.button.checked) return; var toolbar = this.button.parentNode; toolbar.insertBefore(button, this.button.nextSibling); custombuttons.persistCurrentSets(toolbar.id, this.button.id, button.id || button.getAttribute("id")); } }; var os = Components.classes["@mozilla.org/observer-service;1"] .getService (Components.interfaces.nsIObserverService); os.addObserver(observer, notificationPrefix + "installButton", false); this.onDestroy = function() { os.removeObserver(observer, notificationPrefix + "installButton"); };
(изначально выключено)
Отредактировано Infocatcher (01-07-2012 05:07:46)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Много кнопок помрет...
Держать разметку в отдельных файликах в ресурсах, брать её через XMLHTTPRequest, и присоединять её ноды к нодам документа Fx - не поможет?
Понятно, что это не лучшим образом скажется на быстродействии - особенно в случае кнопок, для которых такое будет применяться в инициализации. Но хоть что-то.
Отредактировано hydrolizer (01-07-2012 06:35:43)
Отсутствует
hydrolizer
Там в разметке все неудобство в отличиях парсера XUL и XML.
Для XUL надо или как-то извращаться, например, с открытием data URI в скрытом фрейме/браузере, или срезать пробелы регуляркой.
А если
, то теряется основное преимущество в удобстве редактирования.
Тогда уж проще и правда JXON.
В принципе, можно подождать, пока реально выпилят – вдруг там еще не все умом тронулись, и предложат что-нибудь дельное на замену.
Типа вот такого: http://wiki.ecmascript.org/doku.php?id=harmony:quasis
Отредактировано Infocatcher (01-07-2012 21:31:12)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Можно ли заменить Google Reader Watcher кнопкой CB? Требуется только кнопка с индикатором, при нажатии ЛКМ открывает google reader, СКМ проверяет ленты. Примерная схема проверки: где-то в фоне открывается вкладка, проверяется сколько непрочитанных записей, отображается на индикаторе. Т.е. не требуется логиниться средсвами кнопки как это сделано в Google Reader Watcher. Если возможно, то при наведении подсказка с названиями лент и если есть, то количеством непрочитанных записей. Возможно?
Просто надоело держать расширение в основном для открытия google reader'a
Отсутствует
okkamas_knife
Так а толку? Кто-то осилит развитие и поддержку «правильного» форка?
А иначе уже через полгода будет полно известных уязвимостей.
Отредактировано Infocatcher (01-07-2012 23:52:04)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife
Ну так 1) версия 3.6.28 где-то 4 месяца назад вышла и 2) меньше 2% пользователей, так что нет никакой особой практической выгоды от возможных уязвимостей.
А развитие нужно. С памятью вон по-прежнему не особо. Во всяком случае у расширений.
Плюс без развития можно получить второй IE6, тормозящий внедрение полезных стандартов.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Там в разметке все неудобство в отличиях парсера XUL и XML.
А в чем эти отличия, не поделитесь?
Я в prefrences cleaner'е модель дерева непривязанных непривязанных настроек строю на основе предварительно собранного XML - он является основой данных дерева. Когда-то зачем-то - не помню, зачем - я для корня это дерева задал xul'ный default namespace, и с тех пор так и осталось. При xslt, доставании данных через xpath, сохранении тестовых ситуаций/их восстановлении каких-то отличий от xml не заметил.
Отсутствует
bunda1
кнопка Изменить масштаб при нажатии средней кнопкой мыши
переключает на единый масштаб для всех страниц (красный цвет), переключает, но не работает на всех страницах, сбрасывается.
Остальное работает.
Это исправить можно?
Фаерфокс 13.0.1
У тебя на картинке Memory Monitor справа от Zoom+2? А то у меня Memory Monitor ставится слева от Изменить масштаб.
Отчего зависит расположение этих кнопок?
Отредактировано skynet281978 (02-07-2012 07:22:54)
Отсутствует
Для XUL надо или как-то извращаться, например, с открытием data URI в скрытом фрейме/браузере, или срезать пробелы регуляркой.
Я понял, в чем дело - XUL-парсер оставляет пустые текстовые узлы между нодами. От этого же очень просто избавиться. Можно вот так:
var sn = xml.evaluate("//text()", xml, null, Ci.nsIDOMXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for(var i=0;i<sn.snapshotLength;i++) sn.snapshotItem(i).parentNode.removeChild(sn.snapshotItem(i));
(в XUL-разметке же текстовые ноды вообще не используются?)
но еще лучше - применить вот это:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8"/> <xsl:strip-space elements="*"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Отредактировано hydrolizer (02-07-2012 07:46:23)
Отсутствует
А что мешает из закладок зайти на Google Reader?
Потому что закладка не отображает количество непрочитанных записей.
okkamas_knife
Из вашего кода работает только открытие ридера, для проверки я не знаю какой адрес вписать, там все на скритах же. Если возможно сделать индикатор, то значение для него можно искать следующим образом: в фоне загружается вкладка ридера, ищется фраза "Все элементы (число)" и обрезается чтобы осталось одно число, возможно такое? И еще, желательно чтобы если ридер уже открыт где-то (у меня в другой группе панорамы), то при нажатии открывалась не новая вкладка, а происходило переключение на уже открытую.
Отсутствует
Я понял, в чем дело - XUL-парсер оставляет пустые текстовые узлы между нодами.
Наоборот, просто встроенный DOMParser не умеет XUL, так что приходится парсить как XML, потому и проявляются текстовые узлы.
А с XUL-парсером все хорошо, но к нему нет нормального программного доступа. Ну, за исключением открытия data URI с закодированной XUL-разметкой.
(в XUL-разметке же текстовые ноды вообще не используются?)
Не факт, вроде бы, внутри <description> как раз они.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
просто встроенный DOMParser не умеет XUL, так что приходится парсить как XML
Странно это. Чем еще xul отличается от xml, кроме своего неймспейса? Тот же дотнетовский парсер парсит xul-разметку без текстовых узлов на выходе. Не зашит ли в DOMParser какой-нибудь кейс на сохранение текстовых узлов при парсинге XUL?
Не факт, вроде бы, внутри <description> как раз они.
Да, точно, они. Тогда второй вариант с XSLT. Он удалит именно пустые ноды между тэгами, а ноды с текстом оставит.
Отсутствует
Attributes Inspector 0.6.0pre (2012-07-02) (осторожно, это тестовая версия!)
* Увеличен номер версии: слишком много изменений
* Изменен механизм блокировки всплывающих подсказок, расширена настройка "_popupLocker". По умолчанию открытие DOM Inspector'а с зажатым Shift включает блокировку всех всплывающих меню и подсказок в окне.
* Улучшена подсветка текущего узла в Firefox 16.0a1.
Изменения в предыдущих тестовых версиях: 0.5.2pre9 (2011-08-30), 0.5.2pre2 (2011-07-18)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Подскажите пожалуйста, возможно ли вытянуть из Яндекс.Бара и оформить самостоятельной СВ кнопку погоды?
Отсутствует