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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№2602-11-2012 19:12:10

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Есть ли сохранялка по Shift+click ?

Dumby
Отличная вещь, особенно если отключить "Показывать окно загрузок при загрузке файла" в настройках.

Отсутствует

 

№2703-11-2012 01:03:36

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

Re: Есть ли сохранялка по Shift+click ?

bunda1
Спасибо.

bunda1 пишет

особенно если отключить "Показывать окно загрузок при загрузке файла" в настройках.

Кстати, попробовал сделать отключение только для «Правый клик > Сохранить изображение как...»,
напрямую - не получается :( ( не успевает, наверное ),
ничего лучше не придумал, вот так, только «под мышь», - вроде работает...

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

Выделить код

Код:

const prefName = "browser.download.manager.showWhenStarting";
var menuItem = document.getElementById("context-saveimage");
var dm = Components.classes["@mozilla.org/download-manager;1"]
    .getService(Components.interfaces.nsIDownloadManager);
var cm = document.getElementById("contentAreaContextMenu");
var url = null;
var thePref = true;

var listener = {

    onDownloadStateChange: function(prevState, download) {

        if (download.source.spec != url) return;
        var state = download.state;
        if (state == dm.DOWNLOAD_FINISHED || state == dm.DOWNLOAD_CANCELED || state == dm.DOWNLOAD_FAILED) {

                dm.removeDownload(download.id);
                dm.removeListener(this);
                Application.prefs.setValue(prefName, thePref);
        }
    }
}
function cleaner() {

    url = gContextMenu.imageURL;
    dm.addListener(listener);
}

function onPopup(e) {

    if (e.target != cm) return;
    thePref = Application.prefs.getValue(prefName, true);
    Application.prefs.setValue(prefName, false);
    
    addEventListener("click", function reset(e) {
        removeEventListener("click", reset, false);
        if (e.target == menuItem) return;
        Application.prefs.setValue(prefName, thePref);
        }, false);
}
menuItem.addEventListener("command", cleaner, false);
cm.addEventListener("popupshowing", onPopup, false);

this.onDestroy = function() {
    menuItem.removeEventListener("command", cleaner, false);
    cm.removeEventListener("popupshowing", onPopup, false);
}

Отредактировано Dumby (03-11-2012 04:40:35)

Отсутствует

 

№2803-11-2012 09:09:52

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Есть ли сохранялка по Shift+click ?

А так тоже пробовал:

Выделить код

Код:

document.getElementById("context-saveimage").addEventListener("click", cleaner, false);

и

Выделить код

Код:

setTimeout(function() {  }, 500)

Отредактировано bunda1 (03-11-2012 09:19:43)

Отсутствует

 

№2903-11-2012 13:48:48

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

Re: Есть ли сохранялка по Shift+click ?

bunda1 пишет

"click"

Да! Это ты здо́рово подметил.
Стоило заменить «command» на «click» и заработало как надо,
даже, наверное, и лучше, что только по клику, если вдруг понадобиться,
чтобы картинка осталась в менеджере загрузок - сохраняешь клавишами.
А вот про «setTimeout» - не понял...

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

Выделить код

Код:

const prefName = "browser.download.manager.showWhenStarting";
var menuItem = document.getElementById("context-saveimage");
var dm = Components.classes["@mozilla.org/download-manager;1"]
    .getService(Components.interfaces.nsIDownloadManager);
var url = null;
var thePref = true;

var listener = {

    onDownloadStateChange: function(prevState, download) {

        if (download.source.spec != url) return;
        var state = download.state;
        if (state == dm.DOWNLOAD_FINISHED || state == dm.DOWNLOAD_CANCELED || state == dm.DOWNLOAD_FAILED) {

                dm.removeDownload(download.id);
                dm.removeListener(this);
                Application.prefs.setValue(prefName, thePref);
        }
    }
}
function cleaner() {

    thePref = Application.prefs.getValue(prefName, true);
    Application.prefs.setValue(prefName, false);
    url = gContextMenu.imageURL;
    dm.addListener(listener);
}
menuItem.addEventListener("click", cleaner, false);

this.onDestroy = function() {
    menuItem.removeEventListener("click", cleaner, false);
}

Отредактировано Dumby (03-11-2012 13:52:36)

Отсутствует

 

№3003-11-2012 19:02:27

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Есть ли сохранялка по Shift+click ?

Я имел виду что некоторые не запускаемые функции можно запустить если использовать метод setTimeout

Отсутствует

 

№3103-11-2012 20:50:58

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

Re: Есть ли сохранялка по Shift+click ?

bunda1

Да-да, setTimeout почти всегда помогает, но думаю это - на крайний случай,
когда альтернативу найти не получается. А в данном случае, вроде, не требуется...
В общем, ещё раз спасибо, и - ждём что Dеnis скажет :)

Отсутствует

 

№3213-03-2013 17:15:05

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 18.0

Re: Есть ли сохранялка по Shift+click ?

bunda1 пишет

Сохранить ссылку или изображение - Shift+ПКМ(Firefox 3.6 +)
Автор: bunda1
Описание:Код даёт возможность сохранить ссылку или изображение с диалогом сохранения если нажать Shift+правый клик(ПКМ) на ссылку или изображение:
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
Выделить код
Код:

Выделить код

Код:

document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function(event) {
      if (!event.shiftKey) return;
      if (gContextMenu.onLink && !gContextMenu.onImage){ gContextMenu.saveLink()};
      //...
      if (gContextMenu.onLink && gContextMenu.onImage){ gContextMenu.saveMedia();};
}, false);

Почему-то этот код вызывает окно "Сохранить как..." два раза подряд - первое закрываешь, и тут же  открывается  второе.
А можно при использовании комбинации Shift+ПКМ не показывать контекстное меню, а сразу открывать диалоговое окно "Сохранить как...",  или это отразится на отображении контекстного меню по ПКМ ?

Отредактировано PEAKTOP (13-03-2013 17:17:07)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№3313-03-2013 21:18:23

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Есть ли сохранялка по Shift+click ?

PEAKTOP пишет

Почему-то этот код вызывает окно "Сохранить как..." два раза подряд - первое закрываешь, и тут же  открывается  второе.
А можно при использовании комбинации Shift+ПКМ не показывать контекстное меню, а сразу открывать диалоговое окно "Сохранить как...",  или это отразится на отображении контекстного меню по ПКМ ?

Вот попробуй:

Выделить код

Код:

// Сохранить ссылку или изображение с диалогом сохранения если нажать Shift + правый клик(ПКМ) на ссылку или изображение ...............
function saveLinkOrImage(e) {
   if ( e.shiftKey && e.button == 2 && /img|a/.test(e.target.localName.toLowerCase()) ) {
        e.preventDefault();
        saveURL( e.target.src || e.target.href );
        }
};
gBrowser.addEventListener("click", saveLinkOrImage, false);
this.onDestroy = function() {
     gBrowser.removeEventListener("click", saveLinkOrImage, false);
};

Отсутствует

 

№3413-03-2013 23:31:46

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 19.0

Re: Есть ли сохранялка по Shift+click ?

bunda1, спасибо. Контекстное меню пропало, а окно "Сохранить как" всё равно открывается два раза. :(


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№3513-03-2013 23:43:27

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Есть ли сохранялка по Shift+click ?

PEAKTOP
Наверно этот код у тебя где то уже есть, других объяснений у меня нет.

Отредактировано bunda1 (13-03-2013 23:48:41)

Отсутствует

 

№3615-03-2013 11:58:49

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 19.0

Re: Есть ли сохранялка по Shift+click ?

bunda1, да какой-то шайтан с этой кнопкой - кода в других местах нет (специально пересмотрел код других кнопок). Последовательность действий - удаляю код, и окно "сохранить как" появляется единожды.  Перезапускаю браузер - функция перестаёт работать (т.е.) кода этой кнопки в других местах нет. Вставляю код - окно появляется два раза. Я сам в шоке.


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№3716-03-2013 11:24:44

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Есть ли сохранялка по Shift+click ?

PEAKTOP
Я тут вспомнил что похожий глюк у меня был на Nigtly, некоторые коды тоже без причины срабатывали два раза. Помогла перестановка Nightly с полным удалением профиля. Похоже что тут само Сustom Buttons глючит.
Может попробуй это:

Выделить код

Код:

// Сохранить ссылку или изображение с диалогом сохранения двойним ПКМ(правый клик) на ссылку или изображение ...............
function saveLinkOrImage(e) {
   if ( e.button == 2 && /img|a/.test(e.target.localName.toLowerCase()) ) {
        e.preventDefault();
        saveURL( e.target.src || e.target.href );
        }
};
gBrowser.addEventListener("dblclick", saveLinkOrImage, false);
this.onDestroy = function() {
     gBrowser.removeEventListener("dblclick", saveLinkOrImage, false);
};

Отсутствует

 

№3821-04-2014 01:07:58

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: Есть ли сохранялка по Shift+click ?

У меня есть более общий вопрос.
Дело в том, что когда много дополнений, главное контекстное меню становится просто огромным.
У меня есть дополнение UI Eraser, которое позволяет узнать ID каждого менюитема и при необходимости скрыть его.
Но я бы хотел, чтобы по ПКМ открывалось не всё контекстное меню, а только выбранные мной по ID менюитемы (или наоборот, не указанные как скрытые - это не принципиально) и был дополнительный менюитем "показать всё").
Кроме того, по Shift+ПКМ - открывалось бы выбранное мной (по ID) подмножество менюитемов, по Ctrl+ПКМ - другое подмножество, по Alt+ПКМ - третье подмножество.
Сами ID, естественно, я буду сам в код кнопки вносить - мне бы только "скелет" или шаблон кнопки.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№3923-04-2014 21:43:41

etoins srldu
Участник
 
Группа: Members
Зарегистрирован: 23-04-2014
Сообщений: 13
UA: Firefox 28.0

Re: Есть ли сохранялка по Shift+click ?

difabor пишет

У меня есть более общий вопрос....
Дело в том, что когда много дополнений, главное контекстное меню становится просто огромным.

Вот пример:

Выделить код

Код:

// отслеживать открытие контекстного меню на странице ....
addEventListener("popupshowing", function(e) { 
   
   LOG('e.ctrlKey' + " " + e.ctrlKey);
   LOG('e.altKey'  + " " +  e.altKey);
   LOG('e.shiftKey'  + " " +  e.shiftKey);
   
   //menuitem.hidden = !gContextMenu.onImage; // скрывать пункт если не контекстное меню изображений         

}, true, document.getElementById("contentAreaContextMenu") );

Лучше сделать в контекстном меню несколько подменю и туда перенести лишние пункты.

Отсутствует

 

№4024-04-2014 05:44:41

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: Есть ли сохранялка по Shift+click ?

etoins srldu пишет
difabor пишет

У меня есть более общий вопрос....
Дело в том, что когда много дополнений, главное контекстное меню становится просто огромным.

Вот пример:

Выделить код

Код:

// отслеживать открытие контекстного меню на странице ....
addEventListener("popupshowing", function(e) { 
   
   LOG('e.ctrlKey' + " " + e.ctrlKey);
   LOG('e.altKey'  + " " +  e.altKey);
   LOG('e.shiftKey'  + " " +  e.shiftKey);
   
   //menuitem.hidden = !gContextMenu.onImage; // скрывать пункт если не контекстное меню изображений         

}, true, document.getElementById("contentAreaContextMenu") );

Лучше сделать в контекстном меню несколько подменю и туда перенести лишние пункты.

Спасибо, но:
1. Я всё-таки не понял как пользоваться тем, что Вы предложили и где и как "собирать" менюитемы в подменю.
2. Сделать несколько подменю - безусловно лучше - просто я думал, что если мне покажут как собирать в одно подменю, я смогу уже сам "наворотить" несколько :)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№4125-04-2014 21:17:43

etoins srldu
Участник
 
Группа: Members
Зарегистрирован: 23-04-2014
Сообщений: 13
UA: Firefox 28.0

Re: Есть ли сохранялка по Shift+click ?

difabor пишет

2. Сделать несколько подменю - безусловно лучше - просто я думал, что если мне покажут как собирать в одно подменю, я смогу уже сам "наворотить" несколько :)

Вот пример, передвигает стандартными пункты в подменю:

Выделить код

Код:

(function () {
  var contextMenu = document.getElementById("contentAreaContextMenu");  
  
  var menu = document.createElement("menu");      
  menu.setAttribute("id", "context-submenu1");
  menu.setAttribute("label", "подменю");    
  contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); 
  addDestructor(function() { contextMenu.removeChild( menu ) });

  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  menuPopup.appendChild( document.getElementById("context-selectall") ); 
  menuPopup.appendChild( document.getElementById("context-copy") );         
})();

Пригодится:
Метод insertBefore() XML Элемента | okITgo.ru
Метод appendChild() – добавление дочернего узла к XML элементу | okITgo.ru

Отсутствует

 

№4226-04-2014 10:17:47

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: Есть ли сохранялка по Shift+click ?

etoins srldu пишет
difabor пишет

2. Сделать несколько подменю - безусловно лучше - просто я думал, что если мне покажут как собирать в одно подменю, я смогу уже сам "наворотить" несколько :)

Вот пример, передвигает стандартными пункты в подменю:

Выделить код

Код:

(function () {
  var contextMenu = document.getElementById("contentAreaContextMenu");  
  
  var menu = document.createElement("menu");      
  menu.setAttribute("id", "context-submenu1");
  menu.setAttribute("label", "подменю");    
  contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); 
  addDestructor(function() { contextMenu.removeChild( menu ) });

  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  menuPopup.appendChild( document.getElementById("context-selectall") ); 
  menuPopup.appendChild( document.getElementById("context-copy") );         
})();

Большущее спасибо!
Этот код действительно позволяет собирать менюитемы в подменю.
Но я оказался слишком самонадеянным - как сделать самому второе подменю - не знаю :blush:
Не могли бы Вы показать как добавить второе подменю?


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№4326-04-2014 13:00:59

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: Есть ли сохранялка по Shift+click ?

Спасибо, okkamas_knife, но видать, мне это ещё не по зубам...
Как сделать второе подменю я так и не знаю... :(


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№4426-04-2014 16:07:46

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: Есть ли сохранялка по Shift+click ?

Сделал! Вот код:

Выделить код

Код:

var lst1 = ["openbox-context","context-selectall","context-copy","dwhelper-ctxmenu"];
var lst2 = ["context-back","context-forward"];
function sbmen (nam, lst) {
  var contextMenu = document.getElementById("contentAreaContextMenu");  
  var menu = document.createElement("menu");      
  menu.setAttribute("id", "context-submenu1");
  menu.setAttribute("label", nam);    
  contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); 
  addDestructor(function() { contextMenu.removeChild( menu ) });
  var menuPopup = menu.appendChild( document.createElement("menupopup") ); 
  for (var i = 0; i<lst.length; i++){if (document.getElementById(lst[i]) != null)  menuPopup.appendChild( document.getElementById(lst[i]) );  }               
}
sbmen("sbmenu1",lst1);
sbmen("sbmenu2",lst2);

В lst1, lst2 перечисляем те итемы основного контекстного меню, которые хотим упрятать в подменю, "sbmenu1", "sbmenu2" - имена подменюшек!

Отредактировано difabor (18-05-2014 04:01:23)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

Board footer

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