Копировать информацию о вкладках( Firefox 3.6 + )
Автор: Dumby
Удобный код .Спасибо.
у меня (Aurora 28.0a2) не работает этот пункт,
["адрес и название как BBCode", copySingle.replace("(", '(\'[url="\' + ') + url + ' + \'"]\' + ' + tab + 'label + "[/url]");'],
а так работает (без кавычек) url="....+ \'"]
["адрес и название как BBCode", copySingle.replace("(", '(\'[url=\' + ') + url + ' + \']\' + ' + tab + 'label + "[/url]");'],
Отсутствует
Копировать информацию о вкладках( Firefox 3.6 + )
Автор: Dumby
Версия: от 02.05.2013.
Описание: Kод дает возможность копировать разную информацию о открытых табах. Kод добавляет подменю Копировать информацию о табах в контекстное меню вкладки как последний пункт.Подменю содержит пункты:Копировать адрес
Копировать название
Копировать адрес иконки
Копировать короткое название
Копировать адрес и название
Копировать адрес и название как BBCode
Копировать адрес и название как HTML
Копировать адреса всех табов
Копировать название всех табов
Копировать адреса и название всех табов
Копировать адреса и название всех табов как BBCode
Копировать адреса и название всех табов как HTMLЛишние пункты в подменю можно просто удалить из кода:На пример если не нужен пункт Копировать адрес удалите:
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
Очень полезная кнопка, но не хватает одной важной составляющей - выделенного текста: "Копировать адрес, название и выделенный текст как BBCode".
Возможно, тогда само подменю должно вызываться из Главного контекстного меню, хотя меня бы больше устроило именно из таб меню.
Кроме того - возможно ли сделать так же как копировать - но paste, то есть вставить - на то место, где курсор в поле ввода?
P.S. Дополнительного подпункта меню "Копировать адрес, название и выделенный текст как BBCode" - не надо, просто вместо "Копировать адрес и название как BBCode" должен быть "Копировать адрес, название и выделенный текст как BBCode", но если текст не выделен, то это работает как сейчас в "Копировать адрес и название как BBCode"
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Очень полезная кнопка, но не хватает одной важной составляющей - выделенного текста: "Копировать адрес, название и выделенный текст как BBCode".
Нужный пункт Адрес и редактированное название как BBCode
При клике ЛКМ копирует информацию всех вкладок
При клике ПКМ копирует информацию вкладок только из текущей группы вкладок
// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 09.04.2014. ................................ (function() { const tabContextMenu = document.getElementById("tabContextMenu"); var separator = tabContextMenu.appendChild( document.createElement("menuseparator") ); var menu = tabContextMenu.appendChild( document.createElement("menu") ); menu.setAttribute("label", "Копировать адрес и название как BBCode или ...."); addDestructor(function() { tabContextMenu.removeChild( menu ) tabContextMenu.removeChild( separator ) }); var array = [ { label: "Адрес", arg: 'url'}, { label: "Название", arg: 'label'}, { label: "Адрес иконки", arg: 'image'}, { label: "Название коротко", arg: 'shortTitle'}, { label: "Адрес и название", arg: 'tabInfo'}, { label: "Адрес и название как HTML", arg: 'tabInfoHtml'}, { label: "Адрес и редактированное название как BBCode", arg: 'tabChangedInfoBbcode'}, { separator: '' }, { label: "Адреса всех табов", arg: 'allTabsURL'}, { label: "Название всех табов", arg: 'allTabsLabels'}, { label: "Адреса и название всех табов", arg: 'allTabsInfo'}, { label: "Адреса и название всех табов как HTML", arg: 'allTabsInfoHtml'}, { label: "Адреса и название всех табов как BBCode", arg: 'allTabsInfoBbcode'}, ]; var menuPopup = menu.appendChild( document.createElement("menupopup") ); array.forEach(function( m ) { if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.arg = m.arg; menuPopup.appendChild( mItem ); }); addEventListener("click", function(e) { var tab = document.popupNode; tabContextMenu.hidePopup(); var tabs = e.button ? gBrowser.visibleTabs : gBrowser.tabs; var arg = (e.target.nodeName == "menu") ? "tabInfoBbcode" : e.target.arg; switch(arg) { case "url": var info = tab.linkedBrowser.currentURI.spec; break; case "label": var info = tab.label; break; case "image": var info = tab.image; break; case "shortTitle": var info = tab.label.slice(0,50) + (tab.label.length > 50 ? ' ......' : ""); break; case "tabInfo": var info = buildTabInfo(tab,arg); break; case "tabInfoHtml": var info = buildTabInfo(tab,arg); break; case "tabInfoBbcode": var info = buildTabInfo(tab,arg); break; case "tabChangedInfoBbcode": var text = tab.label; tab.label = custombuttons.promptBox("Измените название вкладки:",null, tab.label)[1]; var info = buildTabInfo(tab,arg); tab.label = text; break; case "allTabsURL": var info = Array.map(tabs, function(node) { return node.linkedBrowser.currentURI.spec }).join("\n"); break; case "allTabsLabels": var info = Array.map(tabs, function(node) { return node.label }).join("\n"); break; case "allTabsInfo": var info = Array.map(tabs, function(node) { return buildTabInfo(node,arg) }).join("\n"); break; case "allTabsInfoHtml": var info = Array.map(tabs, function(node) { return buildTabInfo(node,arg) }).join("\n"); break; case "allTabsInfoBbcode": var info = Array.map(tabs, function(node) { return buildTabInfo(node,arg) }).join("\n"); break; } gClipboard.write( info ); }, false, menu ); function buildTabInfo( tab, arg ) { var url = tab.linkedBrowser.currentURI.spec; switch( arg.slice(-4) ) { case "code": var info = '[url="' + url + '"]' + tab.label + '[/url]'; break; case "Html": var info = '<a href="' + url + '">' + tab.label + '</a>'; break; default: var info = tab.label + "\n" + url; } return info; }; })();
Кроме того - возможно ли сделать так же как копировать - но paste, то есть вставить - на то место, где курсор в поле ввода?
Лень делать и не нужно это.
Отредактировано etoins srldu (23-04-2014 22:58:52)
Отсутствует
Спасибо большое! Но насчёт ЛКМ/ПКМ - не понял - у меня работает одинаково, что ЛКМ, что ПКМ
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Спасибо большое! Но насчёт ЛКМ/ПКМ - не понял - у меня работает одинаково, что ЛКМ, что ПКМ
Значит ты не открываешь группы вкладок и речь идёт о пунктах которые которые информацию о всех вкладках.
Отсутствует
Копировать информацию о вкладках+( Firefox 64 + )
Авторы: bunda1, Dumby
Версия: от 08.11.2022.
Описание: Kод даёт возможность копировать разную информацию о открытых вкладках. Kод добавляет подменю Копировать адрес и название как BBCode или: в контекстное меню вкладки как последний пункт, клик на котором копирует адрес и название вкладки как BBCode, подменю содержит пункты:
Адрес,
Название,
Адрес иконки,
Адрес коротко - копирует короткий адрес от сервиса сокращения ссылок - is.gd
Название коротко - копирует название вкладки до 50 символов,
Адрес и название,
Адрес и название как HTML,
Адрес и редактированное название как BBCode, - даёт возможность редактировать название вкладки перед копированием,
...................................................................................
Адреса всех вкладок,
Название всех вкладок,
Адреса и название всех вкладок,
Адреса и название всех вкладок как HTML,
Адреса и название всех вкладок как BBCode.
Левый клик на пунктах подменю копирует информацию о всех вкладках, средний или правый клик только о вкладках текущей группы.
// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 07.11.2022. .............. (()=> { var tabContextMenu = document.getElementById("tabContextMenu"); var separator = tabContextMenu.appendChild(document.createElementNS(xulns, "menuseparator")); var menu = tabContextMenu.appendChild(document.createElementNS(xulns, "menu")); menu.setAttribute("label", "Копировать адрес и название как BBCode или:"); addDestructor(()=> { tabContextMenu.removeChild(menu); tabContextMenu.removeChild(separator); }); var data = { url: "Адрес", label: "Название", image: "Адрес иконки", shortUrl: "Адрес коротко", shortLabel: "Название коротко", tabInfo: "Адрес и название", tabInfoHtml: "Адрес и название как HTML", tabChangedInfoBbcode: "Адрес и редактированное название как BBCode", separator1: 0, allTabsURL: "Адреса всех вкладок", allTabsLabels: "Название всех вкладок", allTabsInfo: "Адреса и название всех вкладок", allTabsInfoHtml: "Адреса и название всех вкладок как HTML", allTabsInfoBbcode: "Адреса и название всех вкладок как BBCode" } var menuPopup = menu.appendChild(document.createElementNS(xulns, "menupopup")); for (var key in data) { if (key.startsWith("separator")) { menuPopup.appendChild(document.createElementNS(xulns, "menuseparator")); continue; }; var menuitem = menuPopup.appendChild(document.createElementNS(xulns, "menuitem")); menuitem.setAttribute("label", data[key]); menuitem.arg = key; }; addEventListener("click", e=> { var info, tab = TabContextMenu.contextTab, lab = tab.label; var tabs = e.button == 0 ? [...gBrowser.tabs] : gBrowser.visibleTabs; var arg = (e.target == menu) ? "tabInfoBbcode" : e.target.arg; switch(arg) { case "url": info = tab.linkedBrowser.currentURI.spec; break; case "label": info = lab; break; case "image": info = tab.image.replace("#-moz-resolution=16,16",""); break; case "shortUrl": copyShortUrl(tab); break; case "shortLabel": info = lab.slice(0,50) + (lab.length > 50 ? ' ......' : ""); break; case "tabInfo": info = getInfo(tab, arg); break; case "tabInfoHtml": info = getInfo(tab, arg); break; case "tabInfoBbcode": info = getInfo(tab, arg); break; case "tabChangedInfoBbcode": info = getInfo({__proto__: tab, label: custombuttons.promptBox("Измените название вкладки:", null, lab)[1]}, arg); break; case "allTabsURL": info = tabs.map(node=> node.linkedBrowser.currentURI.spec).join("\n"); break; case "allTabsLabels": info = tabs.map(node=> node.label).join("\n"); break; case "allTabsInfo": info = tabs.map(node=> getInfo(node, arg)).join("\n"); break; case "allTabsInfoHtml": info = tabs.map(node=> getInfo(node, arg)).join("\n"); break; case "allTabsInfoBbcode": info = tabs.map(node=> getInfo(node, arg)).join("\n"); break; } gClipboard.write(info); tabContextMenu.hidePopup(); }, false, menu); function copyShortUrl(tab) { fetch('https://is.gd/create.php?format=simple&url=' + encodeURIComponent(tab.linkedBrowser.currentURI.spec)) .then(response => response.text()) .then(shortUrl => gClipboard.write(shortUrl)) .catch(error => alert(error)); }; function getInfo(tab, arg) { var info, url = tab.linkedBrowser.currentURI.spec; switch(arg.slice(-4)) { case "code": info = '[url="' + url + '"]' + tab.label + '[/url]'; break; case "Html": info = '<a href="' + url + '">' + tab.label + '</a>'; break; case "Info": info = tab.label + "\n" + url; } return info; }; })();
Отредактировано bunda1 (17-07-2015 23:31:50)
Отсутствует
Тоже хотелось бы избавиться от TU ибо почти ничего их того множества опций не нужно или могу обойтись, очень редко юзаецца. Но есть необходимые, мож уже есть кнопки для этого:
- ЛКМ по текущей открытой вкладке - переход на последнюю посещенную(т.е. предыдущую где был, поведение из Оперы)
- при закрытии вкладки - переход тоже на последнюю посещенную.
подскажите или пните в нужном направлении.
Отсутствует
- при закрытии вкладки - переход тоже на последнюю посещенную.
const tc = gBrowser.tabContainer; let tabs = []; function onTabSelect(e) { for (let i = 0; i < tabs.length; i++) { if (e.target.linkedPanel != tabs[i]) continue; tabs.splice(i, 1); break; } tabs.push(e.target.linkedPanel); } function onTabClose(e) { let allTabs = Array.slice(tc.childNodes); let allTabsLP = allTabs.map(function(tab) { return tab.linkedPanel; }); if (e.target == gBrowser.selectedTab && tabs.length >= 1) { let tab; let lp = tabs[tabs.length - (tabs.length == 1 ? 1 : 2)]; for (let i = 0; i < allTabsLP.length; i++) { if (lp != allTabsLP[i]) continue; tab = allTabs[i]; break; } if (tab) gBrowser.selectedTab = tab; } if (tabs.length != 0) { tabs = tabs.filter(function(tab) { return allTabsLP.indexOf(tab) != -1 ? true : false; }); tabs.splice(tabs.length - (tabs.length == 1 ? 1 : 2), 1); } } addEventListener("TabSelect", onTabSelect, false, tc); addEventListener("TabClose", onTabClose, false, tc);
Отсутствует
я чета запутался да запатятовал. Благодарю bunda1 , но одно без другого ... хехех. В общем нашел плуг мааахонький, именно для этого. Наз. FLST - FocusLastSelectedTab делает именно то что нужно. И "click-по-текущей-вкл-ке" и "закрытие-вкл-ки" - переход на посл. посещенную.
TU таки удалил, хехех..., ибо и не нужно ни для чего более.
Благодарю bunda1 за желание помощи *THANKS*
Отсутствует
bunda1, Dumby
Долгое время использую вашу кнопку перезагрузки вкладки, при активации, спасибо большое. Но вот хотелось бы немного её модифицировать, чтобы ПКМ по левым 29 пикселям, т.е. по фавиконке, делали тоже самое, но без Scroll to Top, а ПКМ по остальной площади вкладки оставить со Scroll to Top, возможно ли это?
Dumby
Присоединяюсь к bunda1, полезная вещь, а можно ли ее вкл/выкл повесить на ПКМ, а контекстное меню убрать?Пришла в голову идея, чтобы не было холостой перезагрузки и не раздражал throbber, возможно ли сделать кнопку, перезагружающую таб только при активации. Т.е. находясь в этой теме, я нажимаю одинарный ПКМ по соседней вкладке https://forum.mozilla-russia.org/search … n=show_24h и всегда при ее активации, она со свежими непрочитанными темами. Отключается тоже по ПКМ. Плюс к релоаду, будет удобен автоматический Scroll to Top.
function reloader(e) {
var tab = e.target;
var br = tab.linkedBrowser;gBrowser.reloadTab(tab);
br.addEventListener("DOMContentLoaded", function onLoad(e) {
br.removeEventListener("DOMContentLoaded", onLoad, false);
e.target.defaultView.scroll(0, 0);
}, false);
}
function addListener(e) {
if (e.button != 2 || e.target.nodeName != "tab") return;
e.preventDefault();
var tab = e.target;
if (!tab.reloader) {
addEventListener("TabSelect", reloader, false, e.target);
tab.reloader = true;
return;
}
removeEventListener("TabSelect", reloader, false, e.target);
delete tab.reloader;
}
addEventListener("click", addListener, false, gBrowser.mTabContainer);
Отсутствует
Dexu
Да, это возможно. Вариант
(trg => { var left = 29; var attr = "reload-onselect-mode"; var url = "data:application/x-javascript," + encodeURIComponent("content.scrollTo(0, 0);"); function scroll(tab) tab.linkedBrowser.messageManager.loadFrameScript(url, true); addEventListener("TabSelect", e => { if (!e.target.hasAttribute(attr)) return; var tab = e.target; gBrowser.reloadTab(tab); tab.getAttribute(attr) == 1 && scroll(tab); }, false, trg); addEventListener("click", e => { if (e.button != 2 || e.target.nodeName != "tab") return; e.preventDefault(); var tab = e.target; if (tab.hasAttribute(attr)) tab.removeAttribute(attr); else { var mode = Number(e.clientX - tab.boxObject.x > left); tab.setAttribute(attr, mode); if (!tab.hasAttribute("pending") || !mode) return; var state = JSON.parse(SessionStore.getTabState(tab)); if (state.scroll) { delete state.scroll; SessionStore.setTabState(tab, JSON.stringify(state)); } } }, false, trg); })(gBrowser.tabContainer);
Отсутствует
Подскажите, пожалуйста. При выборе "Адрес" на неактивной вкладке копируется URL открытой, а при выборе "Название" или "Адрес иконки" всё нормально – информация с таба на который наведён курсор. Необходимо что-бы и URL копировался того таба который под курсором.
Отредактировано vitalii201 (16-07-2015 23:30:55)
Отсутствует
Подскажите, пожалуйста. При выборе "Адрес" на неактивной вкладке копируется URL открытой, а при выборе "Название" или "Адрес иконки" всё нормально – информация с таба на который наведён курсор. Необходимо что-бы и URL копировался того таба который под курсором.
Вот исправил: Копировать информацию о вкладках
Отсутствует
Dexu
Dumby
Спасибо огромнейшее, ещё в добавок моментальный Top, просто незаменимая кнопка.
Можно пожалуйста по подробнее как сделать Scroll to Top?
P.S.
Создаю новую кнопку в Сustom Buttons-ложу этот код в код-сохроняю кнопку-вытаскиваю на панель-нажимя на не -не чего не происходит.(что делаю не так?)
var attr = "reload-onselect-mode";
var url = "data:application/x-javascript," + encodeURIComponent("content.scrollTo(0, 0);");
function scroll(tab) tab.linkedBrowser.messageManager.loadFrameScript(url, true);
addEventListener("TabSelect", e => {
if (!e.target.hasAttribute(attr)) return;
var tab = e.target;
gBrowser.reloadTab(tab);
tab.getAttribute(attr) == 1 && scroll(tab);
}, false, trg);
addEventListener("click", e => {
if (e.button != 2 || e.target.nodeName != "tab") return;
e.preventDefault();
var tab = e.target;
if (tab.hasAttribute(attr)) tab.removeAttribute(attr);
else {
var mode = Number(e.clientX - tab.boxObject.x > left);
tab.setAttribute(attr, mode);
if (!tab.hasAttribute("pending") || !mode) return;
var state = JSON.parse(SessionStore.getTabState(tab));
if (state.scroll) {
delete state.scroll;
SessionStore.setTabState(tab, JSON.stringify(state));
}
}
}, false, trg);
})(gBrowser.tabContainer);
Отредактировано KOMMEHTATOP (15-10-2015 18:34:16)
Distance Subordinatio!
Отсутствует
Можно пожалуйста по подробнее как сделать Scroll to Top?
Создаю новую кнопку в Сustom Buttons-ложу этот код в код-сохроняю кнопку-вытаскиваю на панель-нажимя на не -не чего не происходит.(что делаю не так?)
Код при переключении на вкладку делает Scroll to Top и обнавляет вкладку, код также должен обнавлять вкладку по ПКМ на вкладке но на FF41 это не работает.
Отсутствует
Привет.
Прошу проверить: у меня на 43 версии не работает код отсюда https://forum.mozilla-russia.org/viewto … 06#p575006
Открывать всё в новых вкладках
Отсутствует
Открывать любую новую вкладку справа от текущей( Firefox 17 + )
Автор: bunda1
Описание: Kод открывает любую новую вкладку справа от текущей.
Версия: от 08.04.2014.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.Выделить кодКод:
// Открывать любую новую вкладку справа от текущей, от 08.04.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок lab == newTabLab ? setTimeout(function() gBrowser.moveTabTo( e.target, tabpos + 1 ), 50) // если восстановление вкладки : gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer );
кажется это кнопка работает не полностью на 45 мозиле. не все вкладки открываются справа от текущей.
скажем внешние из скайпа например или из расширения forum.ru-board bookmarks checker идут в конец списка вкладко
кажется это код работает
// Открывать любую новую вкладку справа от текущей, от 25.11.2015. ................................ addEventListener("TabOpen", (e)=> { var newTab = e.target, tabpos = gBrowser.selectedTab._tPos, err = new Error().stack; // если восстановление сессии или открыть всё во вкладках из папки закладок if ( /ssi_restore|openContainer/.test(err) ) return; // if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии // if ( tabpos == 0 && lab == '' ) return; // если восстановление сессии с Bookmarks Tab // if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок // if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ /undoCloseTab/.test(err) ? setTimeout(()=> gBrowser.moveTabTo(newTab, tabpos + 1), 50) // если восстановление вкладки : gBrowser.moveTabTo(newTab, tabpos + 1); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer );
Отредактировано mahtanoronra (01-03-2017 16:37:34)
Отсутствует
Копировать адрес … в 69 "ломает" меню табов. Можно исправить?
Отсутствует