Двойным левым кликом добавить закладку в папку закладок( Firefox 24 + )
Автор: bunda1
Версия: от 06.06.2019.
Описание: Kод дает возможность добавить текущею страницу как закладку в нужную папку или в подпапку закладок двойным левым кликом, если папка находится на панели закладок.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Двойным левым кликом на папке закладок добавлять закладку в папку закладок, от 06.06.2019. ......................
addEventListener("dblclick", (e, targ = e.originalTarget)=> {     
   if ( e.button || !targ._placesNode || !PlacesUtils.nodeIsFolder(targ._placesNode) ) return;          
   
   var docTitle = gBrowser.selectedTab.label.substr(0, 50);
   var folderId = PlacesUtils.getConcreteItemId(targ._placesNode);
   var folderTitle = PlacesUtils.bookmarks.getItemTitle(folderId);
   var currentURI = Services.io.newURI(gBrowser.currentURI.spec, null, null);
   PlacesUtils.bookmarks.insertBookmark(folderId, currentURI, 0, docTitle);  

   // всплывающая подсказка ....
   var favicon = gBrowser.selectedTab.image || "chrome://global/skin/icons/Portrait.png";
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   .showAlertNotification(favicon, "Добавил в папку " + folderTitle + ":", docTitle);

   setTimeout(()=> { document.getElementById("bookmarksMenuPopup").hidePopup() }, 50); 
});

Двойным правым кликом удалить папку закладок( Firefox 24 + )
Автор: bunda1
Версия: от 06.06.2019.
Описание: Kод дает возможность удалить папку закладок двойным правым кликом, если папка находится на панели закладок.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Двойным правым кликом удалить папку закладок, от 06.06.2019. ......................
addEventListener("dblclick", (e, targ = e.originalTarget)=> {     
   if ( e.button != 2  || !targ._placesNode || !PlacesUtils.nodeIsFolder(targ._placesNode) ) return;
   
   var id = PlacesUtils.getConcreteItemId(targ._placesNode);
   setTimeout(()=> { document.getElementById("placesContext").hidePopup() }, 50); 
   try { PlacesUtils.bookmarks.removeItem(id) } catch(e) {}; 
});

bunda1
Чисто косметический момент: для последней строчки кода как раз бы пригодилось название папки, по которой кликнули (о чем и был первоначальный вопрос). Примерно так:

Выделить код

Код:

var folderTitle = PlacesUtils.bookmarks.getItemTitle(folderId);
var docName = gBrowser.contentTitle ? gBrowser.contentTitle : gBrowser.contentDocument.location.href;
custombuttons.alertSlide("Добавил в папку "+folderTitle+":", docName);

(да, кстати - gBrowser.contentTitle может быть пустым)

hydrolizer
Ok, так намного лучше.

bunda1, а можно пожалуйста добавить автоматическое закрытие вкладки после добавления ее в закладки?

Stakhovsky
Добавьте в конец

Выделить код

Код:

gBrowser.removeCurrentTab();

turbot, спасибо.

Изивините, а можно ли автоматически при добавлении закладки в папку, добавлять название папки в название самой закладки? Получатся папки в виде меток/тегов. Что бы потом можно было легко найти.

Stakhovsky
Замените 10-ую строку на

Выделить код

Код:

PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, '[' + folderTitle + ']' + docTitle );

У закладок в фф, кстати, теги есть:

скрытый текст
clipboard.png

Может, лучше туда название папки добавлять?

turbot
О, спасибо большое, просто прекрасно)

Может, лучше туда название папки добавлять?

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

Stakhovsky
Это уже не ко мне. Не представляю, как такое сделать. :)

turbot, ясно, ну ничего и так хорошо, а можно переместить название папки в конец названия закладки?

Stakhovsky пишет

Что бы потом можно было легко найти.

Для поиска закладок, есть великолепный стиль от Dumby №583

Stakhovsky

Выделить код

Код:

PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle + ' [' + folderTitle + ']'  );

turbot, странно, я так же пробовал переставить, не работало) теперь ок, спасибо.
voqabuhe, спасибо, буду пробовать.

19-04-2016 01:53:37
voqabuhe, выяснил как работает, это немного не то, у меня все закладки перенесены в папки на панель закладок и туда я сразу добавляю даблкликом, боковой панелью не пользуюсь, теперь вот сразу еще можно искать по названию папки в адресной строке.

bunda1, а вы не подскажите, возможно ли если я добавляю закладку в под-папку добавлять названия всех вышестоящих папок?

Stakhovsky пишет

bunda1, а вы не подскажите, возможно ли если я добавляю закладку в под-папку добавлять названия всех вышестоящих папок?

Куда добавлять названия всех вышестоящих папок?

bunda1, в название добавляемой вкладки.

Stakhovsky пишет

в название добавляемой вкладки.

В смысле закладки, как я понял. :)

voqabuhe, да блин) закладки, спасибо:), туплю:)

например я добаляю закладку сайта "Магазин дверей" в под-папку "Двери" папки "Дом", возможно ли что бы в названии добавлялись названия папок: "Магазин дверей [Двери][Дом]"

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

Stakhovsky
Дык, название новой папки все-равно ручками вписывается. Вот и просто добавляйте, когда создаете.

turbot
Я так и подумал сначала, но потом подумал может можно легко автоматизировать, так же добавить строку добавление названия к созданию папки, как вы помогли с добавлением названия к закладке?

Stakhovsky
Если только bunda1 поможет. Я не знаю как отследить открытие диалога.

Ясно, видимо нельзя такое реализовать, ну ничего, спасибо за помощь.;)

Подскажите пожалуйста, а возможно ли добавлять выделенный на странице текст к названию закладки?

Stakhovsky

Выделить код

Код:

var selTxt = document.commandDispatcher.focusedWindow.getSelection().toString();
   PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle  + ' /' +selTxt + '/ [' + folderTitle + ']');

Заменить 10-ую на это.

Что то не работает, добавляются только две //

Stakhovsky
Рестарт. И я подумал, лучше так

Выделить код

Код:

var getSel = document.commandDispatcher.focusedWindow.getSelection().toString();
   var selTxt = '';
   if (getSel) selTxt = ' :: ' + getSel + ' :: ';
   PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle + selTxt + '[' + folderTitle + ']');

28-04-2016 02:05:30
- если на странице ничего не выделено, то ничего не добавится.

turbot
Выделяю текст, кликаю два раза на папке закладок, закладка добавляется, название папки добавляется, выделенный текст нет.

Так же дожно быть?:

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

Выделить код

Код:

// Двойным левым кликом на папке закладок добавлять закладку в папку закладок, от 09.05.2014. ................................
addEventListener("dblclick", function(e) {      
   var target = e.originalTarget;
              
   if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return;          
        var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).substr(0, 50);
        var folderId = PlacesUtils.getConcreteItemId( target._placesNode );
        var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
        var currentURI = Services.io.newURI( content.location, null, null );
        var getSel = document.commandDispatcher.focusedWindow.getSelection().toString();
        var selTxt = '';
        if (getSel) selTxt = ' :: ' + getSel + ' :: ';
        PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle + selTxt + '[' + folderTitle + ']');

        // всплывающая подсказка ....
        var favicon = ( !!gBrowser.mCurrentTab.image ) ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/Portrait.png";
        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
        .showAlertNotification( favicon, "Добавил в папку " + folderTitle + ":", docTitle, false, "", null, ""); 
});

Угу. Так. Браузер перезапустили после правки? У меня все работает.

Перезапустил, ничего:(, может дело в версии, у меня 34? Поищу, может конфликт какой-то.

Выделенное в формах не сохраняет. А контент - должна:
thumb.png

Работает.
Дело в каком то стиле, разберусь.
Спасибо большое. Крутота)

28-04-2016 02:45:21
Не разберусь. Есть кнопка и стиль которые связаны, выполняют функцию показа панели закладок при клике в адресной строке.
Не могли бы вы пожалуйста посмотреть где конфликт?

Кнопка (там же где и все (в одной кнопке)), инициализация:

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

Выделить код

Код:

// появление панели закладкок при клике в адрес строке ...............

var PToolbar = document.getElementById("PersonalToolbar");
var UrlBar = document.getElementById("urlbar");
var NewTabButton = document.getElementById("new-tab-button");
var TabsNewTab = document.getAnonymousElementByAttribute(document.getElementById("tabbrowser-tabs"), "class", "tabs-newtab-button");
if (PToolbar.collapsed) {
    setToolbarVisibility(PToolbar, PToolbar.collapsed);
}
var ToolbarsVisibility = {
    ShowToolbar: function(event) {
        if (PToolbar.collapsed) {
            setToolbarVisibility(PToolbar, PToolbar.collapsed);
        }
        PToolbar.setAttribute("toolbarshow", true);
        gBrowser.addEventListener("mouseover", ToolbarsVisibility.ToolbarCollapse, false);
    },
    ToolbarCollapse: function (event) {
        gBrowser.removeEventListener("mouseover", ToolbarsVisibility.ToolbarCollapse, false);
        PToolbar.removeAttribute("toolbarshow");
    }
};
addEventListener("mousedown", e=> {e.button ==0 && ToolbarsVisibility.ShowToolbar();}, false, UrlBar);
addEventListener("mousedown", e=> {e.button ==0 && ToolbarsVisibility.ShowToolbar();}, false, NewTabButton);
addEventListener("mousedown", e=> {e.button ==0 && ToolbarsVisibility.ShowToolbar();}, false, TabsNewTab);


Стиль:
скрытый текст

Выделить код

Код:

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

#main-window:not([customizing]) #PersonalToolbar {
    position: fixed !important;
    width: 100% !important;
    visibility: collapse !important;
    
    
    
    
}

#main-window:not([customizing]) #PersonalToolbar:-moz-lwtheme {
    border-color: rgba(0,0,0,.3) !important;
    -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar") !important;
}

#main-window:not([customizing]) #PersonalToolbar:-moz-lwtheme-brighttext {
    background-color: black !important;
    color: white !important;
}

#main-window:not([customizing]) #PersonalToolbar[toolbarshow], #main-window:not([customizing]) #PersonalToolbar:hover {
    visibility: visible !important;
}

Замените

Выделить код

Код:

var getSel = document.commandDispatcher.focusedWindow.content.document.getSelection().toString();

Спасибо большое.

turbot, можно вас попросить еще пожалуйста сделать добавление перед названием вкладки название домена?

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

Выделить код

Код:

// Двойным левым кликом на папке закладок добавлять закладку в папку закладок + название родительской папки + выделенный на странице текст, от 09.05.2014. ................................
addEventListener("dblclick", function(e) {      
   var target = e.originalTarget;
              
   if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return;          
        var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).substr(0, 50);
        var folderId = PlacesUtils.getConcreteItemId( target._placesNode );
        var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
        var currentURI = Services.io.newURI( content.location, null, null );
        var getSel = document.commandDispatcher.focusedWindow.getSelection().toString();
        var selTxt = '';
        if (getSel) selTxt = ' :: ' + getSel + ' :: ';
        PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle + selTxt + '[' + folderTitle + ']');

        // всплывающая подсказка ....
        var favicon = ( !!gBrowser.mCurrentTab.image ) ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/Portrait.png";
        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
        .showAlertNotification( favicon, "Добавил в папку " + folderTitle + ":", docTitle, false, "", null, ""); 
});

Stakhovsky

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

Выделить код

Код:

addEventListener("dblclick", function(e) {
   var target = e.originalTarget;

   if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return;
   var hostName = window.gBrowser.selectedBrowser.contentWindow.location.hostname;
   var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).substr(0, 50);
   var folderId = PlacesUtils.getConcreteItemId( target._placesNode );
   var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
   var parentFolderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
   var currentURI = Services.io.newURI( content.location, null, null );
   var getSel = document.commandDispatcher.focusedWindow.content.document.getSelection().toString();
   var selTxt = '';
   if (getSel) selTxt = ' :: ' + getSel + ' :: ';
   PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, '[' + hostName + ']' + docTitle + selTxt + '[' + folderTitle + ']');

   // всплывающая подсказка ....
   var favicon = ( !!gBrowser.mCurrentTab.image ) ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/Portrait.png";
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
      .showAlertNotification( favicon, "Добавил в папку " + folderTitle + ":", docTitle, false, "", null, "");
});

17-05-2016 18:45:33
А вы не пробовали использовать ScrapBook X? Он больше подходит для сохранения текста/контента/страниц в виде закладок. :)

turbot

А вы не пробовали использовать ScrapBook X?

Когда пробовал на то время там нельзя было сохранять станицу как один файл. Создавались в папке сохранения подпапки  на каждуй сохраняемую странци, это не понравилось, а перевод в формат мафф нельзя было делать пакетно, а только по одному сайту. Это собственно и не понравилось. Очень понравился в Скрап Буке полнотекстовый контекстный поиск, когда можно искать внутри всех сохраненных страниц, если бы можно было такое делать с мафф форматом перешел бы сраху, а так пока остановился на сохранении сайтов в мафф с помощью этого аддона save-file-to.

Код:

Ооо, супер, спасибо большое.

Единственное если возможно пожалуйста, еще добавить вид текста, что бы лучше визуально отличать а то теперь много разного текста получается, если можно отображать домен жирным текстом, а добавляемый выделенный текст сделать подчеркнутым?

Stakhovsky пишет

можно отображать домен жирным текстом, а добавляемый выделенный текст сделать подчеркнутым?

Нет, нельзя. Никак.

turbot
Ясно, ок.:)

turbot пишет
Stakhovsky пишет

можно отображать домен жирным текстом, а добавляемый выделенный текст сделать подчеркнутым?

Нет, нельзя. Никак.

Можно имхо (в принципе) домен acceltext'ом отображать в правой части менюитема

Stakhovsky

difabor пишет

Можно имхо (в принципе) домен acceltext'ом отображать в правой части менюитема

Вот, чертовы массивы и регулярки, как смог:

Выделить код

Код:

addEventListener('popupshowing', (e)=> {
  Array.slice(document.querySelectorAll('menupopup[placespopup="true"]')).forEach((popup)=> {
    if (e.target !== popup) return;
    Array.slice(popup.querySelectorAll('menuitem.bookmark-item')).forEach((mItem)=> {
      var label = mItem.label;
      var host = label.match(/^(\[([\w.-]+)\])/);
      if (!host || mItem.hasAttribute('acceltext')) return;
      mItem.setAttribute('acceltext', label.split(/^(\[([\w.-]+)\])/)[1]);
    })
  })
}, false, window);

+ стиль:

Выделить код

Код:

menuitem.bookmark-item .menu-iconic-accel {
  font-weight: bold !important;
}

turbot
Ну вы даете, спасибо большое)
Сейчас получилось с обеих сторон, и перед названием закладки домен и в конце справа жирный.
Если нельзя жирный поставить в левую часть в начало, тогда можете пожауйста удалить тот который в начале?

Stakhovsky пишет

удалить тот который в начале

Выделить код

Код:

addEventListener('popupshowing', (e)=> {
   Array.slice(document.querySelectorAll('menupopup[placespopup="true"]')).forEach((popup)=> {
      if (e.target !== popup) return;
      Array.slice(popup.querySelectorAll('menuitem.bookmark-item')).forEach((mItem)=> {
         var label = mItem.label;
         if (!label.match(/^(\[([\w.-]+)\])/) || mItem.hasAttribute('acceltext')) return;
         var host = label.split(/^(\[([\w.-]+)\])/)[1];
         mItem.setAttribute('acceltext', host);
         mItem.label = label.split(host)[1];
      })
   })
}, false, window);

turbot
Спасибо, то что нужно.:beer:

Stakhovsky
Безделье, пиво и вечер пятницы творят чудеса. :D

Заменить оба предыдущих кода!

Выделить код

Код:

addEventListener("dblclick", function(e) {
   var target = e.originalTarget;

   if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return;
   var hostName = '[hst]' + window.gBrowser.selectedBrowser.contentWindow.location.hostname + '[hst]';
   var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).substr(0, 50);
   var folderId = PlacesUtils.getConcreteItemId( target._placesNode );
   var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
   var parentFolderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
   var currentURI = Services.io.newURI( content.location, null, null );
   var getSel = document.commandDispatcher.focusedWindow.content.document.getSelection().toString();
   var selTxt = '';
   if (getSel) selTxt = '[txt] :: ' + getSel + ' :: [txt]';
   PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, hostName + docTitle + selTxt + '[' + folderTitle + ']');

   // всплывающая подсказка ....
   var favicon = ( !!gBrowser.mCurrentTab.image ) ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/Portrait.png";
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
      .showAlertNotification( favicon, "Добавил в папку " + folderTitle + ":", docTitle, false, "", null, "");
});

addEventListener('popupshowing', e=> {
   var popup = e.originalTarget;
   if (!(popup.localName == 'menupopup' && popup.hasAttribute('placespopup'))) return;
   Array.slice(popup.querySelectorAll('menuitem.bookmark-item')).forEach(mItem=> {
      var label = mItem.label;
      if (!label.startsWith('[hst]')) return;
      var host = label.split(/\[hst\](.*)\[hst\]/)[1];
      mItem.setAttribute('acceltext', host);
      if (label.indexOf('[txt]') !== -1) {
         label = encodeURIComponent(label);
         mItem.label = decodeURIComponent(label.replace(/%5Bhst%5D.*%5Bhst%5D|%5Btxt%5D.*%5Btxt%5D/g, ''));
      }
      else
         mItem.label = label.split(/\[hst\].*\[hst\]/)[1];
   })
}, false, window);

addEventListener('popupshowing', e=> {
   var bhTltp = e.originalTarget;
   var tipTitle = document.getElementById('bhtTitleText');
   var tipTxt = tipTitle.textContent;

   if (tipTxt.startsWith('[hst]')) {
      var hLabel = document.createElement('label');
      hLabel.id = 'bhtHst';
      hLabel.textContent = tipTxt.split(/\[hst\](.*)\[hst\]/)[1];
      bhTltp.appendChild(hLabel);

      if (tipTxt.indexOf('[txt]') !== -1) {
         tipTxt = encodeURIComponent(tipTxt);
         var tLabel = document.createElement('label');
         tLabel.id = 'bhtTxt';
         tLabel.textContent = decodeURIComponent(tipTxt.split(/%5Btxt%5D(.*)%5Btxt%5D/)[1]);
         bhTltp.appendChild(tLabel);
         tipTitle.textContent = decodeURIComponent(tipTxt.replace(/%5Bhst%5D.*%5Bhst%5D|%5Btxt%5D.*%5Btxt%5D/g, ''));
      }
      else
         tipTitle.textContent = tipTxt.split(/\[hst\].*\[hst\]/)[1];

      bhTltp.addEventListener('popuphiding', function func() {
         if (hLabel) bhTltp.removeChild(hLabel);
         if (tLabel) bhTltp.removeChild(tLabel);
         bhTltp.removeEventListener('popuphiding', func);
      })
   }
}, false, document.getElementById('bhTooltip'));


Обратите внимание, что старые закладки придется отредактировать, заменив [] и ::, для имени домена и скопированного текста. Т.е., должно стать так

Выделить код

Код:

[hst]forum.mozilla-russia.org[hst][CB]Двойным левым кликом добавить закладку в папку[txt]должно стать так[txt][Mozilla]

Тогда будет так:
clipboard.png

Стиль отклеиился при отправке

Выделить код

Код:

menuitem.bookmark-item .menu-iconic-accel,
#bhTooltip #bhtHst {
  font-weight: bold !important;
}
#bhTooltip #bhtTxt {
  font-style: italic!important;
}

turbot :lol: Класс) Спасибо, а я думал попросить убрать квадратные скобки, но не решился, теперь вообще огонь)

21-05-2016 01:40:06
А выделенный текст можно что бы так же отображался и в названии вкладки, а не только при наведении?

21-05-2016 01:56:07
OFF
А перенос названия закладки что бы в две строки было нельзя никак сделать?
Тут вот Vitaliy V. как пробовал, но не совсем получилось, перенос пропадает если откл/вкл панель.
Там получается при включении панели срабатывает какой то код который перекрывает код стиля который делает перенос?

Stakhovsky пишет

А выделенный текст можно что бы так же отображался и в названии вкладки, а не только при наведении?

Выделить код

Код:

mItem.label = label.replace(/\[hst\].*\[hst\]|\[txt\].*\[txt\]/g, '');

Замените на

Выделить код

Код:

mItem.label = label.replace(/\[hst\].*\[hst\]/g, '');

А перенос названия закладки что бы в две строки было нельзя никак сделать?

Не, не осилю. Если только снова пиво и вдохновение не посетят. :)

:lol: ясно, ок, спасибо)

21-05-2016 02:23:08
А спрятать [txt] можно?:)

Stakhovsky
Ой, перебор уже, видимо.

Выделить код

Код:

mItem.label = label.replace(/\[hst\].*\[hst\]|\[txt\]/g, '');

и это замените тогда, чтоб визуально отбивать текст

Выделить код

Код:

if (getSel) selTxt = '[txt] :: ' + getSel + ' :: [txt]';

turbot
:) Теперь просто песня)) Спасибо.

Stakhovsky
Исправил проблему с форматированным текстом:

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

Выделить код

Код:

addEventListener("dblclick", function(e) {
   var target = e.originalTarget;

   if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return;
   var hostName = '[hst]' + window.gBrowser.selectedBrowser.contentWindow.location.hostname + '[hst]';
   var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).substr(0, 50);
   var folderId = PlacesUtils.getConcreteItemId( target._placesNode );
   var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
   var parentFolderTitle = PlacesUtils.bookmarks.getItemTitle( folderId );
   var currentURI = Services.io.newURI( content.location, null, null );
   var getSel = document.commandDispatcher.focusedWindow.content.document.getSelection().toString();
   var selTxt = '';
   if (getSel) selTxt = '[txt] :: ' + getSel + ' :: [txt]';
   PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, hostName + docTitle + selTxt + '[' + folderTitle + ']');

   // всплывающая подсказка ....
   var favicon = ( !!gBrowser.mCurrentTab.image ) ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/Portrait.png";
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
      .showAlertNotification( favicon, "Добавил в папку " + folderTitle + ":", docTitle, false, "", null, "");
});

addEventListener('popupshowing', e=> {
   var popup = e.originalTarget;
   if (!(popup.localName == 'menupopup' && popup.hasAttribute('placespopup'))) return;
   Array.slice(popup.querySelectorAll('menuitem.bookmark-item')).forEach(mItem=> {
      var label = mItem.label;
      if (!label.startsWith('[hst]')) return;
      var host = label.split(/\[hst\](.*)\[hst\]/)[1];
      mItem.setAttribute('acceltext', host);
      if (label.indexOf('[txt]') !== -1) {
         label = encodeURIComponent(label);
         mItem.label = decodeURIComponent(label.replace(/%5Bhst%5D.*%5Bhst%5D|%5Btxt%5D/g, ''));
      }
      else
         mItem.label = label.split(/\[hst\].*\[hst\]/)[1];
   })
}, false, window);

addEventListener('popupshowing', e=> {
   var bhTltp = e.originalTarget;
   var tipTitle = document.getElementById('bhtTitleText');
   var tipTxt = tipTitle.textContent;

   if (tipTxt.startsWith('[hst]')) {
      var hLabel = document.createElement('label');
      hLabel.id = 'bhtHst';
      hLabel.textContent = tipTxt.split(/\[hst\](.*)\[hst\]/)[1];
      bhTltp.appendChild(hLabel);

      if (tipTxt.indexOf('[txt]') !== -1) {
         tipTxt = encodeURIComponent(tipTxt);
         var tLabel = document.createElement('label');
         tLabel.id = 'bhtTxt';
         tLabel.textContent = decodeURIComponent(tipTxt.split(/%5Btxt%5D(.*)%5Btxt%5D/)[1]);
         bhTltp.appendChild(tLabel);
         tipTitle.textContent = decodeURIComponent(tipTxt.replace(/%5Bhst%5D.*%5Bhst%5D|%5Btxt%5D.*%5Btxt%5D/g, ''));
      }
      else
         tipTitle.textContent = tipTxt.split(/\[hst\].*\[hst\]/)[1];

      bhTltp.addEventListener('popuphiding', function func() {
         if (hLabel) bhTltp.removeChild(hLabel);
         if (tLabel) bhTltp.removeChild(tLabel);
         bhTltp.removeEventListener('popuphiding', func);
      })
   }
}, false, document.getElementById('bhTooltip'));


:dumb:

UPD: "Прооптимизировал", насколько смог. :rolleyes:

Может сюда заглянет Dumby или bunda1 и наставят, как тут можно было бы удалить листенер на popuphiding, для анонимной функции.
arguments.callee deprecated и вообще, а с чертовым handleEvent никак не разберусь, чтоб this впихнуть.

turbot ага, спасибо.

У меня к этой кнопке в конце добавлен код gBrowser.removeCurrentTab();
Чтобы после добавления вкладки она закрывалась.

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

Выделить код

Код:

// Двойным левым кликом на папке закладок добавлять закладку в папку закладок, от 15.08.2016. ......................
addEventListener("dblclick", (e, targ = e.originalTarget)=> {     
   if ( e.button || !targ._placesNode || !PlacesUtils.nodeIsFolder(targ._placesNode) ) return;          
   
   var docTitle = (content.document.title || gBrowser.mCurrentTab.label).substr(0, 50);
   var folderId = PlacesUtils.getConcreteItemId(targ._placesNode);
   var folderTitle = PlacesUtils.bookmarks.getItemTitle(folderId);
   var currentURI = Services.io.newURI(content.location, null, null);
   PlacesUtils.bookmarks.insertBookmark(folderId, currentURI, 0, docTitle);  

   // всплывающая подсказка ....
   var favicon = gBrowser.mCurrentTab.image || "chrome://global/skin/icons/Portrait.png";
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   .showAlertNotification(favicon, "Добавил в папку " + folderTitle + ":", docTitle);

   document.getElementById("contentAreaContextMenu").hidePopup(); 
   gBrowser.removeCurrentTab();
});


А можно пожалуйста поставить таймер перед срабатыванием этого кода на пол секунды или секунду?
Потому что другое дополнение не успевает делать скриншот страницы для эскиза закладки.

Выделить код

Код:

setTimeout(()=> { gBrowser.removeCurrentTab() }, 500);

bunda1
Спасибо.

bunda1
Можно вас попросить еще изменить добавление двойным левым кликом на одинарным правым?

Что значит одинарным правым?

bunda1
Просто правым кликом по папке закладок, не двойным.

Stkvsky пишет

bunda1
Просто правым кликом по папке закладок, не двойным.

Ну а контекстно меню папки закладок?

bunda1
Ну я им очень редко пользуюсь, если очень надо будет то вызову где нибудь в другом месте
в боковой панели ctrl+b или библиотеке shift+ctrl+b
или оно вообще нигде не будет работать?
Если да тогда можно ли сделать его вызов долгим левым кликом?

Stkvsky пишет

bunda1
Можно вас попросить еще изменить добавление двойным левым кликом на одинарным правым?

Выделить код

Код:

// Правым кликом на папке закладок добавлять закладку в папку закладок, от 06.06.2019. ......................
addEventListener("click", (e, targ = e.originalTarget)=> {     
   if ( e.button != 2  || !targ._placesNode || !PlacesUtils.nodeIsFolder(targ._placesNode) ) return;          
   
   var docTitle = gBrowser.selectedTab.label.substr(0, 50);
   var folderId = PlacesUtils.getConcreteItemId(targ._placesNode);
   var folderTitle = PlacesUtils.bookmarks.getItemTitle(folderId);
   var currentURI = Services.io.newURI(gBrowser.currentURI.spec, null, null);
   PlacesUtils.bookmarks.insertBookmark(folderId, currentURI, 0, docTitle);  

   // всплывающая подсказка ....
   var favicon = gBrowser.selectedTab.image || "chrome://global/skin/icons/Portrait.png";
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   .showAlertNotification(favicon, "Добавил в папку " + folderTitle + ":", docTitle);

   setTimeout(()=> { document.getElementById("placesContext").hidePopup() }, 50); 
});

06-06-2019 08:53:57

Stkvsky пишет

bunda1
Ну я им очень редко пользуюсь, если очень надо будет то вызову где нибудь в другом месте
в боковой панели ctrl+b или библиотеке shift+ctrl+b
или оно вообще нигде не будет работать?

Нет, в боковой панели точно работать будет.

bunda1
Отлично, спасибо.

В боковой панели кстати работает

bunda1
Если можно, почините пожалуйста данную кнопку для 68 версии.

Stkvsky
Интересно, у меня эта кнопка работает в 68-70, а в боковой панели не работает.

Garalf
Вот блин, оказывается оригинальная версия и у меня работает, спасибо, вопрос снят.

Можно сделать так что бы добавленная закладка была последней в папке, а не первой?

В:

Выделить код

Код:

PlacesUtils.bookmarks.insertBookmark(folderId, currentURI, 0, docTitle);

замени 0 на -1

bunda1, спасибо.

Эту кнопку можно реанимировать?