Hallo
Ich habe das letzte Script ausprobiert funktioniert nicht es erscheint nicht mal eine Statusleiste.
Mit freundlichem Gruß
Fritz
Hallo
Ich habe das letzte Script ausprobiert funktioniert nicht es erscheint nicht mal eine Statusleiste.
Mit freundlichem Gruß
Fritz
Hallo,
Ich habe in der Statusleiste mehrere Add-ons und um an die Einstellungen zu kommen brauche ich den Rechtsklick, der aber nicht funktioniert.
Denn Code, den ich benutze, sieht so aus
/* Statusleiste für Firefox */
// https://www.camp-firefox.de/forum/viewtopic.php?p=1052187&sid=d4e33b574226439c26dfb45629b71369#p1052187
// entwickelt von aborix
(function() {
if (location.href !== 'chrome://browser/content/browser.xhtml')
return;
var css =`
#new-toolbar {
height: 28px;
direction: rtl;
-moz-window-dragging: drag;
/* border-top: 1px solid black !important;
background-color: rgba(0,0,0,0) !important;
color: black !important; */
}
#statuspanel {
bottom: -3px !important;
left: -30px !important;
height: 20px !important;
max-width: 20% !important;
transition: none !important;
}
#statuspanel-label{
margin-top: -1px !important;
margin-bottom: 5px !important;
background:#F0EDF8!important;
border: none !important;
font: 15px Arial Rounded MT Bold !important;
font-weight: normal !important;
color: black-gray !important;
}
`;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
var tb = document.createXULElement('toolbar');
tb.id = 'new-toolbar';
tb.setAttribute('customizable', true);
tb.setAttribute('mode', 'icons');
var vbox = document.createXULElement('vbox');
document.getElementById('navigator-toolbox').parentNode.parentNode.insertBefore(
vbox, document.getElementById('browser-bottombox'));
vbox.style.backgroundColor = '#454545';
vbox.appendChild(tb);
CustomizableUI.registerArea('new-toolbar', {legacy: true});
CustomizableUI.registerToolbarNode(tb);
})();
setTimeout(function() {
if (window.__SSi == 'window0')
return;
let tabbar = document.getElementById('TabsToolbar');
let tab = gBrowser.selectedTab;
tabbar.style.display = '-moz-box';
duplicateTabIn(tab, 'tab');
gBrowser.moveTabTo(gBrowser.selectedTab, tab._tPos);
gBrowser.removeTab(tab);
tabbar.style.display = '';
}, 1500);
Alles anzeigen
Kann man den Rechtsklick da noch einfügen oder funktioniert das so nicht?
Besten Dank schon mal für die Hilfe
Spitze Funktioniert
Danke
Nein noch immer keine Beschriftung
Hallo,
Nach dem neusten Update, ist bei der Mehrzeiligen Tab leiste, im aktiven Tab keine Beschriftung mehr zu erkennen, nur bei inaktiven Tabs.
Kann mir da jemand Helfen.
Danke im Voraus.
// ==UserScript==
// @name zzzz-MultiRowTab_LiteforFx48.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Experimentelle CSS Version für Mehrzeilige Tableiste
// @include main
// @compatibility Firefox 71
// @author Alice0775
// @version 2016/08/05 00:00 Firefox 48
// @version 2016/05/01 00:01 hide favicon if busy
// @version 2016/03/09 00:01 Bug 1222490 - Actually remove panorama for Fx45+
// @version 2016/02/09 00:01 workaround css for lwt
// @version 2016/02/09 00:00
// ==/UserScript==
"use strict";
MultiRowTabLiteforFx();
function MultiRowTabLiteforFx() {
var css =` @-moz-document url-prefix("chrome://browser/content/browser.xhtml") {
/* Anpassung der Symbolleisten */
[tabsintitlebar="true"][sizemode="maximized"] #navigator-toolbox { padding-top: 8px !important; }
#titlebar,#tabbrowser-tabs { -moz-appearance: none !important; }
/* Verhindern, dass die Titelleistenschaltflächen auf der Tableiste im Hochformat angezeigt werden */
[tabsintitlebar="true"] #TabsToolbar > .titlebar-buttonbox-container,
#main-window[inFullscreen="true"] #window-controls { display: block; }
/* Mehrzeilige Tableiste */
tabs > arrowscrollbox { display: block; }
scrollbox[part][orient="horizontal"] {
display: flex;
flex-wrap: wrap;
max-height: calc(var(--tab-min-height) * 2); /* Anzahl der Tabzeilen(Standard = 5 Zeilen) */
overflow-x: hidden;
overflow-y: auto; }
tabs tab[fadein]:not([pinned]) { flex-grow: 1; }
tabs tab,.tab-background {
height: var(--tab-min-height);
overflow: hidden;
z-index: 1 !important; }
tab > .tab-stack { width: 100%; }
/* Bei Überschreitung der angegebenen Zeilenanzahl, mit der Maus,
über die dann eingeblendetet Scrolleiste zur gewünschten Zeile wechseln */
scrollbox[part][orient="horizontal"] > scrollbar { -moz-window-dragging: no-drag; }
/* Drag-Bereich auf der linken und rechten Seite der
Tab-Leiste ausblenden - verstecken
Links und rechts → hbox.titlebar-spacer
links → hbox.titlebar-spacer[type="pre-tabs"]
rechts → hbox.titlebar-spacer[type="post-tabs"] */
hbox.titlebar-spacer
,
/* Ausblenden - Verstecken */
#alltabs-button,tabs tab:not([fadein]),
[class="scrollbutton-up"],
[class="scrollbutton-up"] + spacer,
scrollbox[part][orient="horizontal"] + spacer,
[class="scrollbutton-down"] { display: none; }
} `;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
var css =`
tabs tab {
border-left: solid 1px hsla(0,0%,50%,.5) !important;
border-right: solid 1px hsla(0,0%,50%,.5) !important;
}
tabs tab:after,tabs tab:before { display: none !important; }
`;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
gBrowser.tabContainer.clearDropIndicator = function() {
var tabs = this.allTabs;
for (let i = 0, len = tabs.length; i < len; i++) {
tabs[i].style.removeProperty("border-left-color");
tabs[i].style.removeProperty("border-right-color");
}
}
gBrowser.tabContainer.addEventListener("dragleave", function(event) { this.clearDropIndicator(event); }, true);
gBrowser.tabContainer.on_dragover = function(event) {
this.clearDropIndicator();
var effects = this._getDropEffectForTabDrag(event);
var ind = this._tabDropIndicator;
if (effects == "" || effects == "none") {
ind.hidden = true;
return;
}
event.preventDefault();
event.stopPropagation();
var arrowScrollbox = this.arrowScrollbox;
// autoscroll the tab strip if we drag over the scroll
// buttons, even if we aren't dragging a tab, but then
// return to avoid drawing the drop indicator
var pixelsToScroll = 0;
if (this.getAttribute("overflow") == "true") {
switch (event.originalTarget) {
case arrowScrollbox._scrollButtonUp:
pixelsToScroll = arrowScrollbox.scrollIncrement * -1;
break;
case arrowScrollbox._scrollButtonDown:
pixelsToScroll = arrowScrollbox.scrollIncrement;
break;
}
if (pixelsToScroll) {
arrowScrollbox.scrollByPixels(
(RTL_UI ? -1 : 1) * pixelsToScroll,
true
);
}
}
/*
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
if (
(effects == "move" || effects == "copy") &&
this == draggedTab.container
) {
ind.hidden = true;
if (!this._isGroupTabsAnimationOver()) {
// Wait for grouping tabs animation to finish
return;
}
this._finishGroupSelectedTabs(draggedTab);
if (effects == "move") {
this._animateTabMove(event);
return;
}
}
this._finishAnimateTabMove();
*/
if (effects == "link") {
let tab = this._getDragTargetTab(event, true);
if (tab) {
if (!this._dragTime) {
this._dragTime = Date.now();
}
if (Date.now() >= this._dragTime + this._dragOverDelay) {
this.selectedItem = tab;
}
ind.hidden = true;
return;
}
}
var rect = arrowScrollbox.getBoundingClientRect();
var newMargin;
if (pixelsToScroll) {
// if we are scrolling, put the drop indicator at the edge
// so that it doesn't jump while scrolling
let scrollRect = arrowScrollbox.scrollClientRect;
let minMargin = scrollRect.left - rect.left;
let maxMargin = Math.min(
minMargin + scrollRect.width,
scrollRect.right
);
if (RTL_UI) {
[minMargin, maxMargin] = [
this.clientWidth - maxMargin,
this.clientWidth - minMargin,
];
}
newMargin = pixelsToScroll > 0 ? maxMargin : minMargin;
} else {
let newIndex = this._getDropIndex(event, effects == "link");
let children = this.allTabs;
if (newIndex == children.length) {
let tabRect = children[newIndex - 1].getBoundingClientRect();
if (RTL_UI) {
newMargin = rect.right - tabRect.left;
} else {
newMargin = tabRect.right - rect.left;
}
children[newIndex - 1].style.setProperty("border-right-color","red","important");
} else {
let tabRect = children[newIndex].getBoundingClientRect();
if (RTL_UI) {
newMargin = rect.right - tabRect.right;
} else {
newMargin = tabRect.left - rect.left;
}
children[newIndex].style.setProperty("border-left-color","red","important");
}
}
ind.hidden = false;
newMargin += ind.clientWidth / 2;
if (RTL_UI) {
newMargin *= -1;
}
ind.style.transform = "translate(" + Math.round(newMargin) + "px)";
ind.style.marginInlineStart = -ind.clientWidth + "px";
}
gBrowser.tabContainer.on_drop = function(event) {
this.clearDropIndicator();
var dt = event.dataTransfer;
var dropEffect = dt.dropEffect;
var draggedTab;
let movingTabs;
if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
// tab copy or move
draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
// not our drop then
if (!draggedTab) {
return;
}
movingTabs = draggedTab._dragData.movingTabs;
draggedTab.container._finishGroupSelectedTabs(draggedTab);
}
this._tabDropIndicator.hidden = true;
event.stopPropagation();
if (draggedTab && dropEffect == "copy") {
// copy the dropped tab (wherever it's from)
let newIndex = this._getDropIndex(event, false);
let draggedTabCopy;
for (let tab of movingTabs) {
let newTab = gBrowser.duplicateTab(tab);
gBrowser.moveTabTo(newTab, newIndex++);
if (tab == draggedTab) {
draggedTabCopy = newTab;
}
}
if (draggedTab.container != this || event.shiftKey) {
this.selectedItem = draggedTabCopy;
}
} else if (draggedTab && draggedTab.container == this) {
let oldTranslateX = Math.round(draggedTab._dragData.translateX);
let tabWidth = Math.round(draggedTab._dragData.tabWidth);
let translateOffset = oldTranslateX % tabWidth;
let newTranslateX = oldTranslateX - translateOffset;
if (oldTranslateX > 0 && translateOffset > tabWidth / 2) {
newTranslateX += tabWidth;
} else if (oldTranslateX < 0 && -translateOffset > tabWidth / 2) {
newTranslateX -= tabWidth;
}
let dropIndex = this._getDropIndex(event, false);
// "animDropIndex" in draggedTab._dragData &&
// draggedTab._dragData.animDropIndex;
let incrementDropIndex = true;
if (dropIndex && dropIndex > movingTabs[0]._tPos) {
dropIndex--;
incrementDropIndex = false;
}
let animate = gBrowser.animationsEnabled;
if (oldTranslateX && oldTranslateX != newTranslateX && animate) {
for (let tab of movingTabs) {
tab.setAttribute("tabdrop-samewindow", "true");
tab.style.transform = "translateX(" + newTranslateX + "px)";
let onTransitionEnd = transitionendEvent => {
if (
transitionendEvent.propertyName != "transform" ||
transitionendEvent.originalTarget != tab
) {
return;
}
tab.removeEventListener("transitionend", onTransitionEnd);
tab.removeAttribute("tabdrop-samewindow");
this._finishAnimateTabMove();
if (dropIndex !== false) {
gBrowser.moveTabTo(tab, dropIndex);
if (incrementDropIndex) {
dropIndex++;
}
}
gBrowser.syncThrobberAnimations(tab);
};
tab.addEventListener("transitionend", onTransitionEnd);
}
} else {
this._finishAnimateTabMove();
if (dropIndex !== false) {
for (let tab of movingTabs) {
gBrowser.moveTabTo(tab, dropIndex);
if (incrementDropIndex) {
dropIndex++;
}
}
}
}
} else if (draggedTab) {
let newIndex = this._getDropIndex(event, false);
let newTabs = [];
for (let tab of movingTabs) {
let newTab = gBrowser.adoptTab(tab, newIndex++, tab == draggedTab);
newTabs.push(newTab);
}
// Restore tab selection
gBrowser.addRangeToMultiSelectedTabs(
newTabs[0],
newTabs[newTabs.length - 1]
);
} else {
// Pass true to disallow dropping javascript: or data: urls
let links;
try {
links = browserDragAndDrop.dropLinks(event, true);
} catch (ex) {}
if (!links || links.length === 0) {
return;
}
let inBackground = Services.prefs.getBoolPref(
"browser.tabs.loadInBackground"
);
if (event.shiftKey) {
inBackground = !inBackground;
}
let targetTab = this._getDragTargetTab(event, true);
let userContextId = this.selectedItem.getAttribute("usercontextid");
let replace = !!targetTab;
let newIndex = this._getDropIndex(event, true);
let urls = links.map(link => link.url);
let csp = browserDragAndDrop.getCSP(event);
let triggeringPrincipal = browserDragAndDrop.getTriggeringPrincipal(
event
);
(async () => {
if (
urls.length >=
Services.prefs.getIntPref("browser.tabs.maxOpenBeforeWarn")
) {
// Sync dialog cannot be used inside drop event handler.
let answer = await OpenInTabsUtils.promiseConfirmOpenInTabs(
urls.length,
window
);
if (!answer) {
return;
}
}
gBrowser.loadTabs(urls, {
inBackground,
replace,
allowThirdPartyFixup: true,
targetTab,
newIndex,
userContextId,
triggeringPrincipal,
csp,
});
})();
}
if (draggedTab) {
delete draggedTab._dragData;
}
}
gBrowser.tabContainer._getDropIndex = function(event, isLink) {
var tabs = this.allTabs;
var tab = this._getDragTargetTab(event, isLink);
if (!RTL_UI) {
for (let i = tab ? tab._tPos : 0; i < tabs.length; i++) {
if (
event.screenY <
tabs[i].screenY + tabs[i].getBoundingClientRect().height
) {
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i;
}
if (
event.screenX >
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2 &&
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width
) {
return i + 1;
}
}
}
} else {
for (let i = tab ? tab._tPos : 0; i < tabs.length; i++) {
if (
event.screenY <
tabs[i].screenY + tabs[i].getBoundingClientRect().height
) {
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width &&
event.screenX >
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i;
}
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i + 1;
}
}
}
}
return tabs.length;
}
}
Alles anzeigen
Hat funktioniert.
Danke.
Das Fenster bleibt leer.
Hallo
Die Statusleiste macht Probleme bei Add-ons die ein extra Fenster öffnen für Einstellungen wie z.B. bei Sync Tab Group Einstellung Gruppe Importieren, öffnet sich ein Fenster, das aber leer ist. Wenn ich die Statusleiste entferne, ist der Inhalt in diesem Fenster wieder sichtbar.
Die Angehefteten Tabs sollen immer sichtbar bleiben auch beim Scrollen der Tabs.
// ==UserScript==
// [user='11751']Name[/user] zzzz-MultiRowTab_LiteforFx48.uc.js
// [user='11751']Name[/user]space http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Experimentelle CSS Version für Mehrzeilige Tableiste
// @include main
// @compatibility Firefox 69
// @author Alice0775
// @version 2016/08/05 00:00 Firefox 48
// @version 2016/05/01 00:01 hide favicon if busy
// @version 2016/03/09 00:01 Bug 1222490 - Actually remove panorama for Fx45+
// @version 2016/02/09 00:01 workaround css for lwt
// @version 2016/02/09 00:00
// ==/UserScript==
"user strict";
MultiRowTabLiteforFx();
function MultiRowTabLiteforFx() {
var css =` @-moz-document url-prefix("chrome://browser/content/browser.xhtml") {
/* Mehrzeilige Tableiste */
tabs>arrowscrollbox{display:block;}
tabs arrowscrollbox>scrollbox {
display:flex;display:-webkit-box;flex-wrap:wrap;
max-height: calc(var(--tab-min-height) * 2); /* Anzahl der Tabzeilen */
overflow-x:hidden;overflow-y:auto; }
[tabsintitlebar="true"] tabs scrollbar{-moz-window-dragging:no-drag;}
/* Bei Überschreitung der angegebenen Zeilenanzahl, mit der Maus,
über die dann eingeblendetet Scrolleiste zu Zeile wechseln */
tabs tab[fadein]:not([pinned]){flex-grow:1;}
tabs tab,.tab-background {
height: var(--tab-min-height);
overflow: hidden;
z-index: 1 !important; }
tab>.tab-stack{width:100%;}
[sizemode="fullscreen"] #TabsToolbar>#window-controls,
.titlebar-buttonbox-container>.titlebar-buttonbox{display:block;}
/* Drag-Bereich auf der linken und rechten Seite der
Tab-Leiste auslenden - verstecken
Links und rechts → hbox.titlebar-spacer
links → hbox.titlebar-spacer[type="pre-tabs"]
rechts → hbox.titlebar-spacer[type="post-tabs"] */
hbox.titlebar-spacer
/* Ausblenden - Verstecken */
,#alltabs-button,tabs [class^="scrollbutton"],tabs spacer,[autohide="true"][inactive="true"] .titlebar-buttonbox { display: none; }
} `;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
var style = ' \
tabs tab:not(stack) { \
border-left: solid 1px hsla(0,0%,50%,.5) !important; \
border-right: solid 1px hsla(0,0%,50%,.5) !important; \
} \
tabs tab:after,tabs tab:before{display:none!important;} \
';
var sspi = document.createProcessingInstruction('xml-stylesheet',
'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"');
document.insertBefore(sspi, document.documentElement);
gBrowser.tabContainer._animateTabMove = function(event){}
gBrowser.tabContainer._finishAnimateTabMove = function(){}
gBrowser.tabContainer.lastVisibleTab = function() {
var tabs = this.allTabs;
for (let i = tabs.length - 1; i >= 0; i--){
if (!tabs[i].hasAttribute("hidden"))
return i;
}
return -1;
}
gBrowser.tabContainer.clearDropIndicator = function() {
var tabs = this.allTabs;
for (let i = 0, len = tabs.length; i < len; i++){
let tab_s= tabs[i].style;
tab_s.removeProperty("border-left-color");
tab_s.removeProperty("border-right-color");
}
}
gBrowser.tabContainer.addEventListener("dragleave",gBrowser.tabContainer.clearDropIndicator, false);
gBrowser.tabContainer._onDragOver = function(event) {
event.preventDefault();
event.stopPropagation();
this.clearDropIndicator();
var newIndex = this._getDropIndex(event);
if (newIndex == null)
return;
let children = this.allTabs;
if (newIndex < children.length) {
children[newIndex].style.setProperty("border-left-color","red","important");
} else {
newIndex = gBrowser.tabContainer.lastVisibleTab();
if (newIndex >= 0)
children[newIndex].style.setProperty("border-right-color","red","important");
}
}
gBrowser.tabContainer.addEventListener("dragover", gBrowser.tabContainer._onDragOver, false);
gBrowser.tabContainer.onDrop = function(event) {
this.clearDropIndicator();
var dt = event.dataTransfer;
var draggedTab;
if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (!draggedTab) {
return;
}
}
this._tabDropIndicator.hidden = true
event.stopPropagation();
if (draggedTab && draggedTab.container == this) {
let newIndex = this._getDropIndex(event, false);
if (newIndex > draggedTab._tPos)
newIndex--;
gBrowser.moveTabTo(draggedTab, newIndex);
}
}
gBrowser.tabContainer.addEventListener("drop",gBrowser.tabContainer.onDrop, false);
gBrowser.tabContainer._getDragTargetTab = function(event, isLink) {
let tab = event.target;
while (tab && tab.localName != "tab") {
tab = tab.parentNode;
}
if (tab && isLink) {
let { width } = tab.getBoundingClientRect();
if (
event.screenX < tab.screenX + width * 0.25
event.screenX > tab.screenX + width * 0.75
) {
return null;
}
}
return tab;
}
gBrowser.tabContainer._getDropIndex = function(event, isLink) {
var tabs = this.allTabs;
var tab = this._getDragTargetTab(event, isLink);
if (!RTL_UI) {
for (let i = tab ? tab._tPos : 0; i < tabs.length; i++) {
if (
event.screenY <
tabs[i].screenY + tabs[i].getBoundingClientRect().height
) {
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i;
}
if (
event.screenX >
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2 &&
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width
) {
return i + 1;
}
}
}
} else {
for (let i = tab ? tab._tPos : 0; i < tabs.length; i++) {
if (
event.screenY <
tabs[i].screenY + tabs[i].getBoundingClientRect().height
) {
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width &&
event.screenX >
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i;
}
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i + 1;
}
}
}
}
return tabs.length;
}
}
Alles anzeigen
Hallo
Es geht um das Script MultiRowTabLiteforFx.uc.js, kann man das Script so ändern das sich die Angehefteten Tabs nicht mit Bewegen.
Hallo
Es geht um das Script MultiRowTabLiteforFx.uc.js, kann man das Script so ändern das sich die Angehefteten Tabs nicht mit Bewegen.
Wo kann man beim MultiRowTab_Lite.uc.js Script die Zeilen Anzahl ändern?
Danke für die Hilfe, aber beide Wege sind für mich nicht brauchbar.
Ich brauche einen Weg, wo ich die Adressen eintragen kann und die Seite dann nur in diesem Tab arbeitet.
Ich habe die Add-on Seite ordentlich durchforstet, aber bis jetzt nichts gefunden, wahrscheinlich gibt es für meine Anforderung kein Add-on.