https://www.camp-firefox.de/forum/viewtopi…024536#p1024536, Links
Edit 2002Andreas...User und Beiträge gelöscht.
https://www.camp-firefox.de/forum/viewtopi…024536#p1024536, Links
Edit 2002Andreas...User und Beiträge gelöscht.
Gehe mit dem Mauszeiger auf diesen Eintrag und drücke die Entf-Taste.
Deine Initiative ist manchen zu wünschen.
:klasse:
Es geht tatsächlich einfacher:
Zwei Buttons, einer für "Standard" und einer für "Reihenfolge der Eingabe, neueste zuerst".
Die andere Erweiterung braucht man dann nicht.
Hallo und Willkommen im Forum!
Button, Menü, Kontextmenü, Menüeintrag, Tastenkürzel,... lässt sich alles machen, mit unterschiedlichem Aufwand.
Das einfachste ist ein Button. Installiere dazu die Erweiterung Custom Buttons.
Eine ausführliche Anleitung steht auch hier: https://www.camp-firefox.de/forum/viewtopi…=914840#p914840
Ins Feld "Kodieren" trage ein:
var features = "chrome,titlebar,toolbar,centerscreen";
try {
var instantApply = Services.prefs.getBoolPref("browser.preferences.instantApply");
features += instantApply ? ",dialog=no" : ",modal";
} catch (e) {
features += ",modal";
};
openDialog("chrome://searchbarautocomplete/content/pref.xul", "", features);
Mehr ist nicht zu tun. ![]()
Ich habe in Tree Style Tab etwas geändert.
Teste die angehängte Version, vorher die Endung .zip in .xpi ändern.
Kommen beim Öffnen des Panels oder beim Klick auf den Button JS-Meldungen in der Browserkonsole?
zu 1.:
Bei mir fehlt der Button "Lesezeichen entfernen", wenn eines angelegt wird. Ist es bereits vorhanden, ist der Button da. Das ist also anders, als von dir beschrieben, aber auch nicht richtig, denn der Button muss immer da sein.
Teste das folgende geänderte Skript. Bei mir ist damit der Button immer vorhanden.
var openbookResizer = {
drag :false,
height: null,
width : null,
eventOffset: null,
timer: null,
PREHIDEROW : "userChrome.openbook.hideRow", //description, location, loadInSidebar, keyword
PREFTREEHEIGHT: "userChrome.openbook.treeHeight",
PREFTREEWIDTH : "userChrome.openbook.treeWidth",
PREFOPENTREE: "userChrome.openbook.openTree",
PREFOPENTAG : "userChrome.openbook.openTag",
get tree(){
return gEditItemOverlay._element('folderTree');
},
get getHideRow(){
try {
return gPrefService.getCharPref(this.PREHIDEROW).replace(/\s/g,'').slice(',');
} catch(e) {
return [];
}
},
get getPrefTreeHeight(){
try {
return gPrefService.getIntPref(this.PREFTREEHEIGHT);
} catch(e) {
return 150;
}
},
get getPrefTreeWidth(){
try {
return gPrefService.getIntPref(this.PREFTREEWIDTH);
} catch(e) {
return 250;
}
},
get editBookmarkPanel(){
return document.getElementById('editBookmarkPanel');
},
get treeExpander(){
return gEditItemOverlay._element('foldersExpander');
},
get tagExpander(){
return gEditItemOverlay._element('tagsSelectorExpander');
},
get getPrefOpenTree(){
try {
return gPrefService.getBoolPref(this.PREFOPENTREE);
} catch(e) {
return false;
}
},
get getPrefOpenTag(){
try {
return gPrefService.getBoolPref(this.PREFOPENTAG);
} catch(e) {
return false;
}
},
get isFx35(){
return parseInt(Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo)
.version.substr(0,3) * 10, 10) / 10 > 3.0;
},
get isFx37(){
parseInt(Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo)
.version.substr(0,3) * 10, 10) / 10 > 3.6;
},
init: function(){
if (!window.StarUI)
return;
//window.removeEventListener('load', this, false);
window.addEventListener('unload', this, false);
var style = " \
.openbookResizerGripper { \
list-style-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAApklEQVQokY3QK4uCURCA4QeDLCoIXoIYNFiUFVZBq2JQEEx+UcTmpi1b121eosX/a5lg8jvTzsy8M+8cGGKNusQY44QMlRTgAzOcsUqBitH0FVCWpzeNpmZsytUb4oY9qil6BfRxDaiZp1eO5OBl01u9JX7QxiRFr4XfmNbFZ+gdojbCBbt4a6CDP/wH1McDR9SwwB1b+I4bejG1ER8xxwaluHOJ8RM+9xjk9q2RpwAAAABJRU5ErkJggg=='); \
cursor: sw-resize; \
}";
var sspi = document.createProcessingInstruction(
'xml-stylesheet',
'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"'
);
document.insertBefore(sspi, document.documentElement);
sspi.getAttribute = function(name) {
return document.documentElement.getAttribute(name);
};
this.folderTreeRow = this.isFx35 ? "folderTreeRow" : "folderTree";
this.tagsSelectorRow = this.isFx35 ? "tagsSelectorRow" : "tagsSelector";
// default all show
StarUI._doShowEditBookmarkPanel = Task.async(function* (aNode, aAnchorElement, aPosition) {
if (this.panel.state != "closed")
return;
this._blockCommands();
this._element("editBookmarkPanelTitle").value = this._isNewBookmark ?
gNavigatorBundle.getString("editBookmarkPanel.pageBookmarkedTitle") :
gNavigatorBundle.getString("editBookmarkPanel.editBookmarkTitle");
this._element("editBookmarkPanelDescription").textContent = "";
this._element("editBookmarkPanelBottomButtons").hidden = false;
this._element("editBookmarkPanelContent").hidden = false;
let bookmarks = PlacesUtils.getBookmarksForURI(gBrowser.currentURI);
let forms = gNavigatorBundle.getString("editBookmark.removeBookmarks.label");
let label = PluralForm.get(bookmarks.length, forms).replace("#1", bookmarks.length);
this._element("editBookmarkPanelRemoveButton").label = label;
this._element("editBookmarkPanelStarIcon").removeAttribute("unstarred");
this._itemId = aNode.itemId;
this.beginBatch();
if (aAnchorElement) {
let parent = aAnchorElement.parentNode;
while (parent) {
if (parent.localName == "toolbarbutton")
break;
parent = parent.parentNode;
}
if (parent) {
this._anchorToolbarButton = parent;
parent.setAttribute("open", "true");
}
}
this.panel.openPopup(aAnchorElement, aPosition);
gEditItemOverlay.initPanel({ node: aNode
, hiddenRows: openbookResizer.getHideRow
, focusedElement: "preferred" });
});
// selected tree visible
var func = gEditItemOverlay.toggleFolderTreeVisibility.toString();
func = func.replace(
'var currentFolder = this._getFolderIdFromMenuList();',
''
);
func = func.replace(
/expander.className = "expander-up";*/,
'var currentFolder = this._getFolderIdFromMenuList(); \
var onselect = this._folderTree.getAttribute("onselect"); \
this._folderTree.removeAttribute("onselect"); \
$&;'
);
func = func.replace(
'this._folderTree.focus();',
'$&; \
setTimeout(function(tree){ \
var start = new Object(); \
var end = new Object(); \
var numRanges = tree.view.selection.getRangeCount(); \
if (numRanges > 0) { \
tree.view.selection.getRangeAt(0,start,end); \
var v = start.value; \
tree.treeBoxObject.ensureRowIsVisible(v); \
} \
tree.setAttribute("onselect", onselect); \
}, 0, this._folderTree);'
);
eval("gEditItemOverlay.toggleFolderTreeVisibility = " + func);
// selected tree visible
func = gEditItemOverlay.onFolderMenuListCommand.toString();
func = func.replace(
'this._folderTree.selectItems([container]);',
'{var onselect = this._folderTree.getAttribute("onselect"); \
this._folderTree.removeAttribute("onselect"); \
$&; \
setTimeout(function(tree){ \
var start = new Object(); \
var end = new Object(); \
var numRanges = tree.view.selection.getRangeCount(); \
if (numRanges > 0) { \
tree.view.selection.getRangeAt(0,start,end); \
var v = start.value; \
tree.treeBoxObject.ensureRowIsVisible(v); \
} \
tree.setAttribute("onselect", onselect); \
}, 0, this._folderTree);}'
);
eval("gEditItemOverlay.onFolderMenuListCommand = " + func);
this.editBookmarkPanel.addEventListener('popupshowing', this, false);
this.editBookmarkPanel.addEventListener('popupshown', this, false);
this.editBookmarkPanel.addEventListener('popuphiding', this, false);
},
uninit: function(){
window.removeEventListener('unload', this, false);
this.editBookmarkPanel.removeEventListener('popupshowing', this, false);
this.editBookmarkPanel.removeEventListener('popupshown', this, false);
this.editBookmarkPanel.removeEventListener('popuphiding', this, false);
},
handleEvent: function(event){
switch(event.type){
case 'unload':
this.uninit();
break;
case 'popupshowing':
this.popupshowing(event);
break;
case 'popupshown':
this.popupshown(event);
break;
case 'popuphiding':
this.popuphiding(event);
}
},
popuphiding: function(event){
if (this.editBookmarkPanel != event.originalTarget)
return;
var state = !gEditItemOverlay._element(this.folderTreeRow).collapsed;
gPrefService.setBoolPref(this.PREFOPENTREE, state);
var state = !gEditItemOverlay._element(this.tagsSelectorRow).collapsed;
gPrefService.setBoolPref(this.PREFOPENTAG, state);
gEditItemOverlay._element(this.folderTreeRow).collapsed = true;
gEditItemOverlay._element(this.tagsSelectorRow).collapsed = true;
/*
// xxx Bug 556342 - Invalid Treeview in bookmark menu via star pane
var tree = document.getElementById("editBMPanel_folderTree");
if (!this.isFx37)
var result = tree.getResult();
if (result) {
result.root.containerOpen = false;
}
tree.view = null;
// xxx
}
*/
},
popupshowing: function(event){
if (this.editBookmarkPanel != event.originalTarget)
return;
this.tree.height = this.getPrefTreeHeight;
//this.tree.width = this.getPrefTreeWidth;
//this.editBookmarkPanel.width = this.getPrefTreeWidth;
if (!document.getElementById("openbookResizerbottomBox")) {
var panel = document.getElementById("editBookmarkPanel");
var innerarrow = document.getAnonymousElementByAttribute(panel, "class", "panel-inner-arrowcontent");
if (innerarrow)
innerarrow.setAttribute('flex', 1);
var box = document.createElement("hbox");
box.setAttribute('id', 'openbookResizerbottomBox');
box.setAttribute('align',"start");
var resizer = document.createElement("image");
resizer.setAttribute("class", "openbookResizerGripper");
resizer.setAttribute('onmousedown', 'openbookResizer.mousedown(event)');
box.appendChild(resizer);
panel.appendChild(box);
panel.setAttribute('onmousemove', 'openbookResizer.mousemove(event)');
panel.setAttribute('onmouseup', 'openbookResizer.mouseup(event)');
if ("TreeStyleTabBookmarksServiceEditable" in window) {
with (window)
eval('gEditItemOverlay._showHideRows = '+window.gEditItemOverlay._showHideRows.toSource().replace(
'TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;',
''
).replace(
"TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element('keywordRow').collapsed && this._element('folderRow').collapsed;",
''
));
TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = true;
}
}
if ("TreeStyleTabBookmarksServiceEditable" in window)
TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = true;
},
popupshown: function(event){
if (this.editBookmarkPanel != event.originalTarget)
return;
setTimeout(function(self){
if ("TreeStyleTabBookmarksServiceEditable" in window)
TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = true;
if (self.getPrefOpenTree &&
gEditItemOverlay._element(self.folderTreeRow).collapsed ) {
gEditItemOverlay.toggleFolderTreeVisibility();
}
if (self.getPrefOpenTag &&
gEditItemOverlay._element(self.tagsSelectorRow).collapsed ) {
gEditItemOverlay.toggleTagsSelector();
}
try {
gEditItemOverlay._element(gPrefService
.getCharPref("browser.bookmarks.editDialog.firstEditField")).focus();
} catch(e) {}
}, 100, this);
},
mousedown: function(event){
this.drag = true;
this.height = parseInt(this.tree.boxObject.height);
this.width = parseInt(this.editBookmarkPanel.boxObject.width);
this.eventOffset = event;
},
mousemove: function(event) {
if (this.timer)
clearTimeout(this.timer);
this.timer = setTimeout(function(event, self){
if (self.drag) {
// make sure height [150,screen-300] and width is [300,screen-50]
var newValue;
newValue = self.height + event.pageY - self.eventOffset.pageY;
if (newValue <= screen.height - 300 && newValue >= 150) {
self.tree.height = newValue;
}
newValue = self.width - event.pageX + self.eventOffset.pageX;
if (newValue <= screen.width - 50 && newValue >= 300) {
//self.tree.width = newValue;
self.editBookmarkPanel.width = newValue;
}
}
}, 10, event, this);
},
mouseup: function(event) {
if (this.drag) {
gPrefService.setIntPref(this.PREFTREEHEIGHT, this.tree.height);
gPrefService.setIntPref(this.PREFTREEWIDTH, this.editBookmarkPanel.boxObject.width);
}
this.drag = false;
}
}
//window.addEventListener("load", openbookResizer, false);
openbookResizer.init();
Alles anzeigen
zu 2.:
Seit Fx 47 wird beim Anlegen eines Lesezeichens das Panel geöffnet und dann automatisch geschlossen, wenn man darin 3,5 Sekunden nichts oder nichts mehr tut.
Siehe dazu auch https://www.camp-firefox.de/forum/viewtopic.php?f=1&t=118195
Mit folgendem Skript kann man die Zeitdauer verändern, sie wird in Zeile 4 in Sekunden eingetragen:
Neuer Code, in der vierten Zeile bei
const delaySec =
wird die Zeit in Sekunden eingetragen:
(function() {
if (!window.StarUI)
return;
const delaySec = 10;
eval('StarUI.handleEvent = ' + StarUI.handleEvent.toString()
.replace(/delay = \d+/, 'delay = ' + (delaySec * 1000).toString()));
})();
In der Browserkonsole wirkt der Code nur bis zum Neustart.
Damit er dauerhaft wirkt, benötigt man eine Erweiterung, üblicherweise userChromeJS.
Informationen dazu stehen hier: https://github.com/ardiman/userCh…aster/README.md
Ob man in der Browserkonsole auf "Als globale Variable speichern" klickt, macht meiner Erfahrung nach keinen Unterschied.
Alles Gute! ![]()
Ich habe in #11 das Skript geändert, es müsste nun funktionieren.
Der relevante Code der Erweiterung lässt sich auch in ein Greasemonkey-Skript packen.
Das hat auch den Vorteil, dass man die Seiten, wo es wirkt, festlegen kann.
// ==UserScript==
// @name Don't Make Me Watch
// @run-at document-start
// @include *
// @grant none
// ==/UserScript==
var f = function() {
var a = Node.prototype.addEventListener;
Node.prototype.addEventListener = function(e) {
if (e == "visibilitychange")
{ }
else
a.apply(this,arguments)
};
};
var c = '(' + f.toString() + ')()';
function doNode(node) {
node.setAttribute('onreset', c);
node.dispatchEvent(new CustomEvent('reset'));
node.removeAttribute('onreset');
};
var node = document.documentElement;
if (node) {
doNode(node);
} else {
var observer = new MutationObserver(function(mutations) {
for (let mutation of mutations) {
for (let node of mutation.addedNodes) {
if (node == document.documentElement) {
doNode(node);
observer.disconnect();
return;
};
};
};
});
observer.observe(document, {childList: true});
};
Alles anzeigen
Auch etwas verspätet:
Alles Gute! ![]()
Bei einer lokalen Startseite ist bei mir der Focus nicht in der Adressleiste.
Wie auch immer, versuche folgendes:
Füge in den Quellcode deiner Startseite diesen Teil ein:
Zitat von PM
die Suche nach einer definierten Zeit leeren, nachdem die Suchanfrage abgeschickt wurde
Ist mit einem Skript machbar; hier ist es eine Minute:
(function() {
if (!window.BrowserSearch)
return;
var searchbar = BrowserSearch.searchBar;
if (!searchbar)
return;
var str = searchbar.doSearch.toString().replace(/}$/,
'setTimeout(function() { searchbar.value = ""; }, 60000); }'
);
eval('searchbar.doSearch = ' + str);
})();
Alles anzeigen
Zitat
die Suchmaschine nach einiger definierten Zeit wieder auf Default setzen
Was meinst du damit? Die Standardsuchmaschine bleibt ohnehin die gleiche, solange sie nicht unter Einstellungen → Suche geändert wird.
Alles Gute! ![]()