Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№130108-05-2016 14:23:25

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 358
UA: Firefox 46.0

Re: Обсуждение кнопок CB

turbot
А не могли бы вы мне подсказать :)


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Как бы хотелось однажды проснуться, а тебе 8 лет и вся эта херня просто приснилась…

Отсутствует

 

№130208-05-2016 17:40:58

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Не знаю.

Отсутствует

 

№130308-05-2016 17:41:57

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 358
UA: Firefox 46.0

Re: Обсуждение кнопок CB

:( ещё и на enter реагирует, где не надо.

Отредактировано KOT040188 (08-05-2016 19:28:18)


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Как бы хотелось однажды проснуться, а тебе 8 лет и вся эта херня просто приснилась…

Отсутствует

 

№130410-05-2016 15:17:18

selevo
Забанен
 
Группа: Members
Откуда: Ижевск
Зарегистрирован: 23-01-2008
Сообщений: 240
UA: Firefox 38.0
Веб-сайт

Re: Обсуждение кнопок CB

если  CB позволяющая  скопировать   ссылку на  изображение при  нажатом  ALT например ?

Отсутствует

 

№130510-05-2016 15:19:01

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 358
UA: Firefox 46.0

Re: Обсуждение кнопок CB

Сыылка прекрасно копируется и без alt. Но если вам надо принципиально с alt…


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Как бы хотелось однажды проснуться, а тебе 8 лет и вся эта херня просто приснилась…

Отсутствует

 

№130610-05-2016 15:28:55

selevo
Забанен
 
Группа: Members
Откуда: Ижевск
Зарегистрирован: 23-01-2008
Сообщений: 240
UA: Firefox 38.0
Веб-сайт

Re: Обсуждение кнопок CB

KOT040188 пишет:

Сыылка прекрасно копируется и без alt. Но если вам надо принципиально с alt…

ну   чтоб одним кликом сохранялась в буфер ЛКМ+ALT например  или  колесо+ALT
Сейчас-то  надо  выбрать из меню  этот пункт при  ПКМ на картинку
когда   по 100 раз за час     ссылки  дёргаешь запаривает :)

Отредактировано selevo (10-05-2016 15:29:50)

Отсутствует

 

№130710-05-2016 15:30:34

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 358
UA: Firefox 46.0

Re: Обсуждение кнопок CB

Ах вот оно что…:)


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Как бы хотелось однажды проснуться, а тебе 8 лет и вся эта херня просто приснилась…

Отсутствует

 

№130810-05-2016 20:41:53

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

selevo

Выделить код

Код:

addEventListener('dblclick', (e)=> {
  var img = e.originalTarget.tagName.toLowerCase() == "img";
  var win = e.originalTarget.ownerDocument.defaultView;
  if (img && e.button == 2 && win.top == content) {
    e.preventDefault();
    e.stopPropagation();
    document.getElementById("contentAreaContextMenu").hidePopup();
    var imgLink = e.originalTarget.src;
    if (imgLink && e.originalTarget.parentNode.tagName.toLowerCase() == "a"
       && e.originalTarget.parentNode.href.match(/\.(jpg|jpeg|png|gif|apng|webp)$/)) {
      imgLink = e.originalTarget.parentNode.href;
    }
    gClipboard.write(imgLink);
    custombuttons.alertSlide('Ссылка на изображение скопирована', imgLink);
  }
}, false, gBrowser);

Двойным ПКМ по картинкам. Если картинка - ссылка на картинку, то копируется ссылка на картинку. Только если ссылка прямая (можно изменить, удалив

Выделить код

Код:

       && e.originalTarget.parentNode.href.match(/\.(jpg|jpeg|png|gif|apng|webp)$/)

-тогда скопируется любая ссылка).

Отредактировано turbot (15-05-2016 21:34:36)

Отсутствует

 

№130911-05-2016 06:28:59

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 138
UA: Firefox 28.0

Re: Обсуждение кнопок CB

Не работает на 28,38 лисах.Запустилась только с 45 и 46

Отсутствует

 

№131011-05-2016 07:30:44

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

VORON
Так на них и оригинальное расширение работает...

Но вот, хозяин барин:

Выделить код

Код:

for (var type of ["mousedown", "dragstart", "TabClose"]) {
  addEventListener(type, (e)=> {
    if (e.target != gBrowser.selectedTab) return;
    var menuPopup = document.getElementById("backForwardMenu");
    if (e.type == "mousedown" && e.button == 0) {
      menuPopup.showPopup(e.target, -1, -1, "popup", "bottomleft", "topleft")
    } else {
      menuPopup.hidePopup();
    }
  }, true, gBrowser.tabContainer)
};

На 24+ точно работает

Отредактировано turbot (11-05-2016 07:31:16)

Отсутствует

 

№131111-05-2016 07:56:15

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 138
UA: Firefox 28.0

Re: Обсуждение кнопок CB

turbot пишет:

VORON
Так на них и оригинальное расширение работает...
Но вот, хозяин барин:
На 24+ точно работает

Ну так ради уменьшения количества расширений,не только функционала для:D
Спасибо.

Отсутствует

 

№131211-05-2016 11:35:34

selevo
Забанен
 
Группа: Members
Откуда: Ижевск
Зарегистрирован: 23-01-2008
Сообщений: 240
UA: Firefox 38.0
Веб-сайт

Re: Обсуждение кнопок CB

turbot
Благодарю, прекрасная работа!
Надеюсь другим тоже пригодится.

Отсутствует

 

№131311-05-2016 19:01:21

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Dumby
не подскажете про BBCode:

скрытый текст
Я пытаюсь сделать из кнопки плавающую панель, которая появляется при фокусе текстовых форм (ну, как пытаюсь... Просто добавил туда

Выделить код

Код:

addEventListener("click", (e)=> {
    if (document.activeElement != gBrowser.selectedBrowser) return;
    var text = e.target.tagName.toLowerCase() == "textarea";
    if (text && e.button == 0) {
        popup.showPopup(e.target, -1, -1, "panel", "topright", "bottomright");
        e.target.focus();
    }
    else popup.hidePopup();
}, false, window);

заменил menupopup на panel и поставил

Выделить код

Код:

popup.setAttribute('noautohide', 'true');

), но есть пара проблем:
Будучи panel, попапы кнопок лишаются прокрутки. Подскажите, как сделать остальные субменю снова menupopup? Я заблудился в вашем коде... :sick:

Собственно, вот. Главная проблема. Остальное - мелочи, но может тоже подскажете:
Плавающая панель очень неспешно (а вернее, только если шевельнуть мышью и снова на секунду-другую остановить) возвращается к границе формы после прокрутки страницы. Можно ли сделать, чтоб она чаще корректировала свое положение?
Если листенер на focus, то как закрывать ее? При клике на странице фокус на нее не переходит? Потому что панель не скрывается. (По этой причине с click и сделал.)

Отсутствует

 

№131412-05-2016 01:34:53

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

VORON
Я тут подумал, может так лучше будет:

Выделить код

Код:

addEventListener('mousedown', e=> {
  let tab = e.originalTarget;
  while (tab && tab.localName != 'tab') tab = tab.parentNode;
  var selTab = tab.hasAttribute('visuallyselected') || tab.hasAttribute('selected');
  if (!tab) return;
  var menuPopup = document.getElementById("backForwardMenu");
  var controlItem = e.originalTarget.localName == 'toolbarbutton' || e.originalTarget.localName == 'image';
  tab.onmouseup = (tab && selTab && e.button == 0 && !controlItem) ? e=> menuPopup.openPopup(tab, 'after_start') : delete e;
}, true, gBrowser.tabContainer);

- попап не будет появляться/скрываться когда не нужен (при закрытии вкладки/перетаскивании/отключении звука), но с минусом - закроется он только при клике по его пунктам или не по активной вкладке.

UPD: Переделал снова. Ничего существенного, но так вроде правильнее будет. Старый вариант - под спойлером.

скрытый текст

Выделить код

Код:

addEventListener('mousedown', (e)=> {
  let tab = e.originalTarget;
  while (tab && tab.localName != 'tab') {
    tab = tab.parentNode;
  }
  var selTab = tab.hasAttribute('visuallyselected') || tab.hasAttribute('selected');
  var menuPopup = document.getElementById("backForwardMenu");
  var controlItem = e.originalTarget.localName == 'toolbarbutton' || e.originalTarget.localName == 'image';
  tab.onmouseup =e=> null;
  if (tab && selTab && e.button == 0 && !controlItem) {
    tab.onmouseup =e=> {
      menuPopup.showPopup(tab, -1, -1, "popup", "bottomleft", "topleft");
    }
  }
}, true, gBrowser.tabContainer);

Отредактировано turbot (26-05-2016 19:13:21)

Отсутствует

 

№131515-05-2016 23:41:42

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 1076
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot пишет:

Я заблудился в вашем коде...

Код не мой.

скрытый текст
Это я просто когда-то пытался пережать чужой код,
потому что он был очень большой, и с использованием E4X.

Будучи panel, попапы кнопок лишаются прокрутки. Подскажите, как сделать остальные субменю снова menupopup?

Это несложно. Если там, где ты «заменил menupopup на panel»
заменить обратно на menupopup и добавить в массив пятый элемент "panel",
а во вкладке Справка заменить самый первый ноль, соответственно, на четыре,
то на panel изменится только попап с кнопками.

Но menupopup какой-то жадный до клавиш, впрочем
можно попробовать оставить panel, а прокрутку как у menupopup
к panel добавить каким-нибудь биндингом.

Плавающая панель очень неспешно (а вернее, только если шевельнуть мышью и снова на секунду-другую остановить) возвращается к границе формы после прокрутки страницы. Можно ли сделать, чтоб она чаще корректировала свое положение?

Не знаю. Но, например, есть метод moveToAnchor.
Можно его на листенеры повесить, но это сложно,
поскольку скролл, зум, ресайз, и всё такоё.
А можно повесить на интервал, но, сам понимаешь, интервал есть интервал.

Если листенер на focus, то как закрывать ее?

Да, focus это стрёмно. Может осторожно попробуй дописать вместо своего

Выделить код

Код:

(listener => {
    addEventListener("focus", listener, true, gBrowser);
    addDestructor(() => listener.textarea && listener.destroy());
})({
    position: "before_end",
    updatePositionInterval: 100,

    handleEvent(e) {
        if (!this.isTarget(e.target)) return;

        var xblURL = "data:application/xml," + encodeURIComponent(`
            <bindings xmlns="http://www.mozilla.org/xbl" xmlns:xul="${xulns}">
                <binding id="${'CB' + _id.slice(20) + '-bbc-panels'}" role="xul:menupopup" extends="chrome://global/content/bindings/popup.xml#panel">
                    <content>
                        <xul:arrowscrollbox class="popup-internal-box" flex="1" orient="vertical" smoothscroll="false">
                            <children/>
                        </xul:arrowscrollbox>
                    </content>
                </binding>
            </bindings>
        `.trim().replace(/>\s+</g, "><"));
        for(var subPopup of this.subPopups) subPopup.nodeName == "panel"
            && subPopup.style.setProperty("-moz-binding", `url("${xblURL}")`, "important");

        this.handleEvent = e => this[e.type](e);
        this.init(e.target);
    },
    isTarget(node) {
        return node instanceof HTMLTextAreaElement && !node.readOnly
            && node.ownerDocument.defaultView.top == content;
    },
    focus(e) {
        !this.textarea && this.isTarget(e.target) && this.init(e.target);
    },
    init(textarea) {
        this.textarea = textarea;
        popup.setAttribute("noautohide", true);

        this.intervalId = setInterval(() => this.moveToAnchor(), this.updatePositionInterval);
        popup.firstChild.addEventListener("popuphiding", this, false);
        popup.addEventListener("mousedown", this, true);

        popup.openPopup(textarea, this.position);
        setTimeout(() => textarea.focus() || textarea.addEventListener("blur", this, false), 0);
    },
    destroy() {
        popup.removeAttribute("noautohide");

        clearInterval(this.intervalId);
        this.textarea.removeEventListener("blur", this, false);
        popup.firstChild.removeEventListener("popuphiding", this, false);
        popup.removeEventListener("mousedown", this, true);

        popup.hidePopup();
        for(var subPopup of this.subPopups) subPopup.state == "open" && subPopup.hidePopup();
        this.textarea = null;
    },
    moveToAnchor() {
        popup.moveToAnchor(this.textarea, this.position);
        for(var subPopup of this.subPopups) subPopup.anchorNode && subPopup.moveToAnchor(subPopup.anchorNode);
    },
    get subPopups() {
        delete this.subPopups;
        return this.subPopups = [...popup.querySelectorAll("popupset > :first-child")];
    },
    blur(e) {
        !popup.matches(":hover") ? this.destroy() : setTimeout(() =>
            this.textarea.ownerDocument.defaultView.top != content ||
            this.textarea.ownerDocument.visibilityState == "hidden"
                ? this.destroy() : this.textarea.focus()
        , 0);
    },
    popuphiding(e) {
        popup.matches(":hover") && e.preventDefault();
    },
    mousedown() {
        var subPopup = popup.querySelector(`#${popup.id} > hbox > button:hover + popupset > :first-child`);
        if (!subPopup || subPopup.state != "open") return;
        var parent = subPopup.parentNode;
        subPopup.remove();
        setTimeout(() => parent.appendChild(subPopup), 100);
    }
});

Отсутствует

 

№131616-05-2016 00:10:17

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Dumby пишет:

Может осторожно попробуй дописать вместо своего

Ух, спасибо. Я б такое ни в жизнь не сотворил. Вроде, все отлично работает, еще раз спасибо. :beer:

Отсутствует

 

№131716-05-2016 17:20:49

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Dumby
Можно вас еще помучать: во фреймах почему-то вылазит. Например, в редакторе стайлиша (во вкладке).


Сам поправил. :)

Отредактировано turbot (16-05-2016 18:13:39)

Отсутствует

 

№131816-05-2016 20:38:41

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 138
UA: Firefox 46.0

Re: Обсуждение кнопок CB

turbot
Что поправить надо?- мне тоже такая кнопка по душе пришлась.

Отсутствует

 

№131916-05-2016 21:11:55

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

VORON
Уж не знаю, насколько это правильный выход, но я просто убрал top у ownerDocument.defaultView.top. :D

Отсутствует

 

№132024-05-2016 16:43:31

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 186
UA: Firefox 45.0

Re: Обсуждение кнопок CB

Infocatcher

Давным-давно пользуюсь кнопкой Back_to_Close, и всё никак не спрошу...

А можно сделать так, чтобы она не изменяла дефолтный вид BACK-стрелки, т.е. когда "Go Back" возврата больше нет, стрелка тускнеет. (?)

Отсутствует

 

№132124-05-2016 19:49:59

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4306
UA: Firefox 46.0

Re: Обсуждение кнопок CB

thrower пишет:

А можно сделать так, чтобы она не изменяла дефолтный вид BACK-стрелки, т.е. когда "Go Back" возврата больше нет, стрелка тускнеет. (?)

По идее (лень тестовый профиль запускать :D), там достаточно стили убрать вот эти:
https://github.com/Infocatcher/Custom_B … #L144-L163
И вот тут еще убрать:
https://github.com/Infocatcher/Custom_B … #L184-L187

Отредактировано Infocatcher (24-05-2016 19:50:52)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№132224-05-2016 21:31:51

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 186
UA: Firefox 45.0

Re: Обсуждение кнопок CB

Infocatcher

Спасибо. :)
Помогло, но Back становится перманентно черным, а не серым (тусклым).
Я, в меру своего понимания, могу предположить, что так и будет, потому что функция закрытия при нажатии Back активна, соответственно, и стрелка "активного" цвета.
Если так, то возможно ли тогда (если не сложно) убрать весь блок, отвечающий конкретно за закрытие таба при нажатии Back.
(оставшихся хоткея и/или боковых кнопок мыши хватит с лихвой).

Отсутствует

 

№132325-05-2016 21:22:29

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 186
UA: Firefox 45.0

Re: Обсуждение кнопок CB

thrower пишет:

Помогло, но Back становится перманентно черным, а не серым (тусклым).Я, в меру своего понимания, могу предположить, что так и будет, потому что функция закрытия при нажатии Back активна, соответственно, и стрелка "активного" цвета.Если так, то возможно ли тогда (если не сложно) убрать весь блок, отвечающий конкретно за закрытие таба при нажатии Back.(оставшихся хоткея и/или боковых кнопок мыши хватит с лихвой).

В общем, пока придумал такой воркераунд, без удаления стиля из кнопки. :)

Взял из chrome://browser/skin/Toolbar.png иконку, перегнал ее в base64, и с добавлением opacity: 0.4 получил желаемый результат.

За подсказку про opacity спасибо okkamas_knife.

Отсутствует

 

№132425-05-2016 21:44:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4306
UA: Firefox 46.0

Re: Обсуждение кнопок CB

thrower
Хм, ну тогда и правда проще там в стилях поправить, потому как серая отключенная кнопка не будет нажиматься.
Вот так можно сделать:

Выделить код

Код:

var cssStr = '\
    @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");\n\
    @-moz-document url("' + window.location.href + '") {\n\
        #back-button[_cb_backToClose] > .toolbarbutton-icon {\n\
            opacity: 0.4 !important;\n\
        }\n\
    }';

(заменить там аналогичный var cssStr = ...)
А иконку и не трогать вовсе, пусть оригинальная висит.

thrower пишет:

Если так, то возможно ли тогда (если не сложно) убрать весь блок, отвечающий конкретно за закрытие таба при нажатии Back.

Да там все равно идет вмешательство в функции браузера насчет переходов назад и обновления состояния кнопок и пунктов меню, что-то отдельное сделать сложнее, чем все разом.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№132525-05-2016 22:18:43

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 186
UA: Firefox 45.0

Re: Обсуждение кнопок CB

Infocatcher

Спасибо!
Да, так лучше (без наложения иконки в base64).

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]