Hallo FuchsFan .
Danke für den Hinweis.
Gleiche Änderung braucht es im Nightly auch in about:support.
Mfg.
Endor
Hallo FuchsFan .
Danke für den Hinweis.
Gleiche Änderung braucht es im Nightly auch in about:support.
Mfg.
Endor
Ich habe die Änderung falsch gemacht.
Zu viel entfernt.
Aber nun passt alles.
Mfg.
Endor
Wenn ich in den Zeilen 27 und 45 die Funktion JSON.parse weglasse, funktioniert es.
Also:
let data = SessionStore.getClosedTabData(window);
und
data = SessionStore.getClosedWindowData();
Hier leider nicht.
Keine Ahnung wieso.
Ja es geht um das Linksklick Menü der Schaltfläche welches sich hier
trotz obiger Änderung nicht mehr öffnet.
Mfg.
Endor
Gerne, freut mich wenn jemand das brauchen kann.
all:
Dieses Script funktioniert hier ab Firefox 95 auch nicht mehr:
UndoCloseTabButtonN.uc.js
// ==UserScript==
// @name UndoCloseTabButtonN
// @description 閉じたタブを復元するツールバーボタン&タブバーの空き上の中クリックで最後に閉じたタブを復元
// @version 1.2.5
// @include main
// @charset UTF-8
// @note 2019/01/23 Fx66でタブバー中クリックが効かないのを修正
// @note 2019/07/04 Fx69
// @note 2019/09/03 Fx70
// @note 2019/12/09 Fx72
// ==/UserScript==
// アイコン初期位置はタブバーです
(function() {
"use strict";
const useTabbarMiddleClick = true; // タブバーの空き・タブ追加ボタン上の中クリックで最後に閉じたタブを復元するか?
const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
window.ucjsUndoCloseTabButtonService = {
prepareMenu(event) {
const doc = (event.view && event.view.document) || document;
const menu = event.originalTarget;
this.removeChilds(menu);
// 閉じたタブ
let data = JSON.parse(SessionStore.getClosedTabData(window));
const tabLength = data.length;
for (let i = 0; i < tabLength; i++) {
const item = data[i];
const m = this.createFaviconMenuitem(doc, item.title, item.image, i, this.undoTab);
const state = item.state;
let idx = state.index;
if (idx == 0)
idx = state.entries.length;
if (--idx >= 0 && state.entries[idx])
m.setAttribute("targetURI", state.entries[idx].url);
menu.appendChild(m);
}
// 閉じたウィンドウ
data = JSON.parse(SessionStore.getClosedWindowData());
const winLength = data.length;
if (winLength > 0) {
if (tabLength > 0)
menu.appendChild(this.$C(doc, "menuseparator"));
menu.appendChild(this.$C(doc, "menuitem", {
disabled: true,
label: "Geschlossene Fenster"
}));
for (let i = 0; i < winLength; i++) {
const item = data[i];
let title = item.title;
const tabsCount = item.tabs.length - 1;
if (tabsCount > 0)
title += " (他:" + tabsCount + ")";
const tab = item.tabs[item.selected - 1];
const m = this.createFaviconMenuitem(doc, title, tab.image, i, this.undoWindow);
menu.appendChild(m);
}
}
if (tabLength + winLength === 0) {
/* menu.appendChild(this.$C(doc, "menuitem", {
disabled: true,
label : "履歴がありません"
}));*/
event.preventDefault();
}
},
createFaviconMenuitem(doc, label, icon, value, command) {
const attr = {
class: "menuitem-iconic bookmark-item menuitem-with-favicon",
label: label,
value: value
};
if (icon) {
if (/^https?:/.test(icon))
icon = "moz-anno:favicon:" + icon;
attr.image = icon;
}
const m = this.$C(doc, "menuitem", attr);
m.addEventListener("command", command, false);
return m;
},
undoTab(event) {
undoCloseTab(event.originalTarget.getAttribute("value"));
},
undoWindow(event) {
undoCloseWindow(event.originalTarget.getAttribute("value"));
},
removeChilds(element) {
const range = document.createRange();
range.selectNodeContents(element);
range.deleteContents();
},
onClick(event) {
if (event.button === 1) {
switch (event.originalTarget.localName) {
case "box": // -Fx65
case "scrollbox": // Fx66-
case "toolbarbutton":
event.preventDefault();
event.stopPropagation();
undoCloseTab();
break;
}
}
},
$C(doc, tag, attrs) {
const e = tag instanceof Node? tag: doc.createElementNS(XULNS, tag);
if (attrs) {
Object.entries(attrs).forEach(([key, value]) => e.setAttribute(key, value));
}
return e;
},
};
function run() {
if (useTabbarMiddleClick) {
gBrowser.tabContainer.addEventListener("click", ucjsUndoCloseTabButtonService.onClick, true);
}
const buttonId = "ucjs-undo-close-tab-button";
if (document.getElementById(buttonId)) {
return;
}
try {
Cu.import("resource:///modules/CustomizableUI.jsm");
CustomizableUI.createWidget({
id : buttonId,
defaultArea : CustomizableUI.AREA_TABSTRIP,
type : "custom",
onBuild : doc => {
const btn = ucjsUndoCloseTabButtonService.$C(doc, "toolbarbutton", {
id : buttonId,
class : "toolbarbutton-1 chromeclass-toolbar-additional",
type : "menu",
anchor : "dropmarker",
label: "Geschlossene Tabs",
tooltiptext: "Geschlossene Tabs wieder herstellen",
image : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADRklEQVRYhcWV32tbZRjHc7ELL3bRP8ELL7zohTeCl70IijhEkJcWdmcdSFDBoWydlIZSsE7tLFLowLqs1YKpdCXM1bhhxM11SsuMZml2znkW94vRJOc9OusuZpKPF6fnNMlJNtvE7IXv3fu+38/7/HpDoTZXCvaI5nC79+xq5R16xOGsaPJdN7c0vZbGEg1dBxDNPtFsbpl3F0AcRkSDZVOdSHYR4EqBveKwIBpyRSoH5yE87gPcMYv0ebI0vXmHno6Z5x0et2wyouHHa7B/2jWvAWilm+JwzNL07tpcSoQtm5JoSKThxYlt8/A4fH4pqETaBfVBbMriMJKCPTsyt0q8LpqyaJj6Dp49Wm/+MKlP4MNvIFegIhpMm5+ulnjyocb5PI+JwwnRsF6geuSrnRk3qn8KljN+RDYNh6ce/PICT4hm3ct5/1R7AJ68rrmmuRxIB9AD9Hmy/2bw+h8kRcMPFveH2oxCeByeOwpzl3yIsUaAPhpWFbDvuQcsG0YTwUuHF4Ma/BSe/6B1XVzZoCKasmnzTAAgFosRjUbrNPflEkbxH0TD7MX6YmzVgtkNGGsCHB53H7IVhbkAQDQaRSkV0FtvH+aX3x1EQzILL09uA2RubXJ8Nu5r6dwKZrGCaHj/TBDghY8gVwTR/PWfAZRSvDJ4gO/XDETD6k031KJh1SwE9h56N4pZrJArbsPWKpl1z+4IQClF/8AA8a9TW2GutgRQSjG/9C2iwRvbjQNsVwCeJqZm/DC3Ajg+G0e0W5gdB1BKMTQ8ym837rYESF78FdFw4LMgQHytAwBKKV6LvMHy+cuBNM3Mn0I0/Hy9eUuetzoE4BlOTsdYNQusmgU/NdmNKpGTzWeBaBAHsyMAtfn2Xh1faz3CZy74AMc6BjA5HUM0vHf6weN4aAHWC5SvFklLiae7CrB/Gs7lwLKpmDavNv0L2k1Bs5bz8p5Iu6G/8SfLtcYjWzrxfwEML0LmjluYt+9CucIXnm+o8QfsBMBLH7vhHktsj1yzVGFxOUW1wS8EEIlEdmXaqgsatZK9xZsH36nbH4lEOgtQOwcupPOcXclwcuE0Q8Oj9A8MBPbXARiGQSaT6aoMw/ABUo9SoUe9/gWm1ZHCwkU2TQAAAABJRU5ErkJggg==",
onclick : "ucjsUndoCloseTabButtonService.onClick(event);",
oncontextmenu : "event.preventDefault();",
});
const menu = ucjsUndoCloseTabButtonService.$C(doc, "menupopup", {
tooltip : "bhTooltip",
popupsinherittooltip: "true",
oncontextmenu : "event.preventDefault();",
onpopupshowing : "ucjsUndoCloseTabButtonService.prepareMenu(event);",
});
btn.appendChild(menu);
return btn;
},
});
} catch (e) {}
}
if (gBrowserInit.delayedStartupFinished) {
run();
} else {
const OBS_TOPIC = "browser-delayed-startup-finished";
const delayedStartupFinished = (subject, topic) => {
if (topic === OBS_TOPIC && subject === window) {
Services.obs.removeObserver(delayedStartupFinished, topic);
run();
}
};
Services.obs.addObserver(delayedStartupFinished, OBS_TOPIC);
}
})();
Alles anzeigen
Es fügt in die Navbar eine Schaltfläche ein, über die sich die Liste mit den zuletzt geschlossenen Tabs in einem Popup Fenster öffnen lässt. Schaltfläche ist da aber es tut sich nichts bei klick. Keine Ahnung was da angepasst werden muss.
Mfg.
Endor
Gerne.
Mfg.
Endor
Sehe ich auch so.
Mfg.
Endor
Auch in Firefox 95 beta funktioniert es so wieder.
Mfg.
Endor
Vielen Dank, so funktioniert es wieder.
Prima.
Mfg.
Endor
Wie oben geschrieben, funktioniert es schon ab Firefox 95 beta nicht mehr.
Der Kontextmenüeintrag wird nicht angezeigt.
Danke für Deine Mühe.
Mfg.
Endor
Rechtsklick auf Seiteninhalt, oder Hauptkontextmenü ist gemeint.
das ist die Version für Firefox 94.0.1.
// WebDeveloper-Menu.uc.js
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
setTimeout(function() {
if (document.getElementById('menuWebDeveloperPopup').childElementCount <= 5) {
// s. DevToolsStartup.prototype.initDevTools
// https://dxr.mozilla.org/mozilla-central/source/devtools/shim/devtools-startup.js
let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
require("devtools/client/framework/devtools-browser");
};
var dblMenu = document.getElementById('webDeveloperMenu').cloneNode(true);
document.getElementById('contentAreaContextMenu').insertBefore(dblMenu, document.getElementById('context-viewsource'));
dblMenu.id = 'context-' + dblMenu.id;
var elements = dblMenu.getElementsByTagName('*');
for (let elem of elements) {
let origId = elem.id;
if (origId) {
elem.id = 'context-' + origId;
if (elem.tagName == 'menuitem') {
elem.setAttribute('oncommand', 'document.getElementById("' + origId + '").click();');
let obs = document.createXULElement('observes');
obs.setAttribute('element', origId);
obs.setAttribute('attribute', 'checked');
elem.appendChild(obs);
};
};
};
}, 100);
}());
Alles anzeigen
Mfg.
Endor
Prima, freut mich.
Hier dann der CSS Code dazu:
/* AGENT_SHEET */
@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document url("about:about") {
html {background: #FFFFFF !important;}
ul.columns {
column-count: 3 !important;
column-gap: 20px !important;
margin: 0 !important;
}
body{
background-color: #fffff0 !important;
max-width: 1320px !important;
min-height: 600px !important;
height: auto !important;
margin-top: 70px !important;
margin-bottom: 30px !important;
margin-left: 80px !important;
padding-top: 45px !important;
padding-left: 25px !important;
padding-right: 25px !important;
padding-bottom: 65px !important;
border-left-color: lightblue!important;
border-top-color: lightblue!important;
border-right-color: dodgerblue!important;
border-bottom-color: dodgerblue!important;
border-radius: 20px !important;
border-width: 4px !important;
border-style: outset !important;}
.container > h1:nth-child(1){
margin-left: 150px !important;
color: blue !important;
font-size: 24px !important;
font-weight: bold !important;}
ul{list-style: none !important;}
#abouts{
min-width: 1120px !important;
background-color: #ffffff !important;
margin-left: -200px !important;
margin-top: 25px !important;
padding-top: 25px !important;
padding-left: 25px !important;
padding-right: 25px !important;
padding-bottom: 25px !important;
border-left-color: lightblue!important;
border-top-color: lightblue!important;
border-right-color: dodgerblue!important;
border-bottom-color: dodgerblue!important;
border-radius: 20px !important;
border-width: 4px !important;
border-style: outset !important;}
p {margin-left: 160px !important; font-size:15px!important;}
h1::before {
content: "Endors Firefox: ";
font-weight:bold !important;
color:red !important;
margin-left: 80px !important;}
a{
text-decoration:none!important;
color:black!important;}
/* Breite der Schaltflächen */
#abouts > li:nth-child(n+1){
min-width: 170px !important;
max-width: 170px !important;
}
/* Die ersten 14 */
#abouts > li:nth-child(-n+14){
appearance:none!important;
background: #efefef url("..//icons/Bild3.png")no-repeat !important;
color:transparent!important;
font-size:14px!important;
text-decoration:none!important;
margin-top:3px!important;
margin-bottom: 5px !important;
margin-right:20px!important;
margin-left: 55px !important;
padding-right: 45px !important;
padding-left:40px!important;
padding-top: 1px!important;
padding-bottom: 2px!important;
border-left-color: lightblue!important;
border-top-color: lightblue!important;
border-right-color: dodgerblue!important;
border-bottom-color: dodgerblue!important;
border-style: outset !important;
border-width:2px !important;
background-position:14px 2px!important;
border-radius:14px!important;}
/* Die ersten 14 hover */
#abouts > li:nth-child(-n+14):hover{
appearance:none!important;
background: #B2EDFA url("..//icons/Bild3.png")no-repeat !important;
color:transparent!important;
font-size:14px!important;
text-decoration:none!important;
border-left-color: #bbddff !important;
border-top-color: #bbddff !important;
border-right-color: #11508d !important;
border-bottom-color: #11508d !important;
border-style: outset !important;
border-width:2px !important;
background-position:14px 2px!important;
border-radius:14px!important;}
/* Die mittleren 14 */
#abouts > li:nth-child(n+15){
appearance:none!important;
background: #efffbf url("..//icons/Bild3.png")no-repeat !important;
color:transparent!important;
font-size:14px!important;
text-decoration:none!important;
margin-top:3px!important;
margin-bottom: 5px !important;
margin-right:5px!important;
margin-left: 70px !important;
padding-right: 25px !important;
padding-left:40px!important;
padding-top: 1px!important;
padding-bottom: 2px!important;
border-left-color: #79d279 !important;
border-top-color: #79d279 !important;
border-right-color: #009900 !important;
border-bottom-color: #009900 !important;
border-style: outset !important;
border-width:2px !important;
background-position:14px 2px!important;
border-radius:14px!important;}
/* Die mittleren 14 hover */
#abouts > li:nth-child(n+15):hover{
appearance:none!important;
background: #B2EDFA url("..//icons/Bild3.png")no-repeat !important;
color:transparent!important;
font-size:14px!important;
text-decoration:none!important;
border-left-color: #bbddff !important;
border-top-color: #bbddff !important;
border-right-color: #11508d !important;
border-bottom-color: #11508d !important;
border-style: outset !important;
border-width:2px !important;
background-position:14px 2px!important;
border-radius:14px!important;}
/* Die letzten 14 */
#abouts > li:nth-child(n+30){
appearance:none!important;
background: cornsilk url("..//icons/Bild3.png")no-repeat !important;
color:transparent!important;
font-size:14px!important;
margin-top:3px!important;
margin-bottom: 5px !important;
margin-right:45px!important;
padding-left:40px!important;
padding-top: 1px!important;
padding-bottom: 2px!important;
border-left-color: #ffb2b2 !important;
border-top-color: #ffb2b2 !important;
border-right-color: #8d0000 !important;
border-bottom-color: #8d0000 !important;
border-style: outset !important;
border-width:2px !important;
background-position:14px 2px!important;
border-radius:14px!important;}
/* Die letzten 14 hover */
#abouts > li:nth-child(n+30):hover{
appearance:none!important;
background: #B2EDFA url("..//icons/Bild3.png")no-repeat !important;
color:transparent!important;
font-size:14px!important;
border-left-color: #bbddff !important;
border-top-color: #bbddff !important;
border-right-color: #11508d !important;
border-bottom-color: #11508d !important;
border-style: outset !important;
border-width:2px !important;
background-position:14px 2px!important;
border-radius:14px!important;}
}
Alles anzeigen
Edit: Ich habe bei den Mittleren Schaltfläche noch die Randfarben geändert.
Hatte ich vergessen.
Mfg.
Endor
Bei 3 Spalten fände ich 3 verschiedene Farben schöner
Finde ich auch.
Danke für den CSS Code Schnipsel.
Mfg.
Endor
Hallo zusammen.
Da das mehrere Scripte betrifft, habe ich mal begonnen
ein paar anzupassen und hoch zu laden:
Bei diesem Script hier habe ich auch die Änderung gemacht aber es
funktioniert trotzdem nicht. Es clont das gleichnamige Menü von Extras
ins Rechtsklick Kontextmenü. Im aktuellen Firefox 94.0.1 funktioniert es
in Beta und Nightly nicht mehr. Ist das bei Euch auch so?
Script:
// WebDeveloper-Menu.uc.js
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
setTimeout(function() {
if (document.getElementById('menuWebDeveloperPopup').childElementCount <= 5) {
// s. DevToolsStartup.prototype.initDevTools
// https://dxr.mozilla.org/mozilla-central/source/devtools/shim/devtools-startup.js
let { require } = Cu.import("resource://devtools/shared/loader/Loader.jsm", {});
require("devtools/client/framework/devtools-browser");
};
var dblMenu = document.getElementById('webDeveloperMenu').cloneNode(true);
document.getElementById('contentAreaContextMenu').insertBefore(dblMenu, document.getElementById('context-viewsource'));
dblMenu.id = 'context-' + dblMenu.id;
var elements = dblMenu.getElementsByTagName('*');
for (let elem of elements) {
let origId = elem.id;
if (origId) {
elem.id = 'context-' + origId;
if (elem.tagName == 'menuitem') {
elem.setAttribute('oncommand', 'document.getElementById("' + origId + '").click();');
let obs = document.createXULElement('observes');
obs.setAttribute('element', origId);
obs.setAttribute('attribute', 'checked');
elem.appendChild(obs);
};
};
};
}, 100);
}());
Alles anzeigen
Mfg.
Endor
Das kann ich jetzt so gar nicht sagen, da ich hier immer alles Benutzerdefiniert speichere.
Und die Dateien bleibt dann auch nach dem Leeren der Liste erhalten.
Mfg.
Endor
Also hier funktioniert die Schaltfläche zum löschen.
Das ist die hier verwendete Version, die akuellste verfügbare:
// ==UserScript==
// @name ucjsDownloadsStatusModoki.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Downloads Status Modoki
// @include main
// @compatibility Firefox 73+
// @author Alice0775
// @note ucjsDownloadsStatusModoki.uc.js.css Code muss über die userChrome.css Datei geladen werden
// @version 2019/12/11 fix for 73 Bug 1601094 - Rename remaining .xul files to .xhtml in browser
// @version 2019/10/20 12:30 workaround Bug 1497200: Apply Meta CSP to about:downloads, Bug 1513325 - Remove textbox binding
// @version 2019/09/08 19:30 fix scrollbox
// @version 2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
// @version 2018/10/27 12:00 fix for 64+
// @version 2018/06/12 21:00 fix for private window mode
// @version 2018/06/07 12:00 fix file name for history
// @version 2018/02/10 12:00 try catch error when DO_NOT_DELETE_HISTORY = true
// @version 2017/12/10 12:00 fix error when DO_NOT_DELETE_HISTORY = true
// @version 2017/12/10 12:00 remove workaround Bug 1279329. Disable btn while clear list is doing, close button styling for 57.
// @version 2016/06/10 12:00 modify style independent of font-family
// @version 2016/06/10 07:00 modify style of close button, fix typo
// @version 2016/06/10 00:00 Workaround Bug 1279329. adjust some padding
// @version 2015/05/08 00:00 remove padding due to Bug 1160734
// @version 2014/03/31 00:00 fix for browser.download.manager.showWhenStarting
// @version 2013/12/22 13:00 chromehidden
// @version 2013/12/19 17:10 rename REMEMBERHISTOTY to DO_NOT_DELETE_HISTORY
// @version 2013/12/16 23:28 fixed initialize numDls
// @version 2013/12/16 23:24 open only download added
// @version 2013/12/16 23:10 open only download started
// @version 2013/12/16 21:20 modify css Windows7 Aero
// @version 2013/12/16 21:00 modify css
// @version 2013/12/16 19:30 add autocheck false
// @version 2013/12/16 18:31 fix pref name
// @version 2013/12/16 18:30
// @note
// ==/UserScript==
var ucjsDownloadsStatusModoki = {
_summary: null,
_list: null,
get downloadsStatusModokiBar() {
delete downloadsStatusModokiBar;
return this.downloadsStatusModokiBar = document.getElementById("downloadsStatusModokiBar");
},
get toggleMenuitem() {
delete toggleMenuitem;
return this.toggleMenuitem = document.getElementById("toggle_downloadsStatusModokiBar");
},
init: function() {
if (document.documentElement.getAttribute("chromehidden") !="" )
return;
XPCOMUtils.defineLazyModuleGetter(window, "Downloads",
"resource://gre/modules/Downloads.jsm");
var style = `
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
#ucjsDownloadsStatusModoki {
width: 100%;
max-height: 100px;
height: 39px;
}
`.replace(/\s+/g, " ");
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);
};
var toolbar = document.createXULElement("vbox");
toolbar.setAttribute("id", "downloadsStatusModokiBar");
toolbar.setAttribute("collapsed", true);
var bottombox = document.getElementById("browser-bottombox");
bottombox.appendChild(toolbar);
var browser = toolbar.appendChild(document.createXULElement("browser"));
browser.setAttribute("disablehistory", true);
browser.setAttribute("remote", false);
browser.setAttribute("id", "ucjsDownloadsStatusModoki");
browser.addEventListener("load", function(event){ucjsDownloadsStatusModoki.onload(event)}, true);
browser.setAttribute("src", "chrome://browser/content/downloads/contentAreaDownloadsView.xhtml?StatusModoki");
var menuitem = document.createXULElement("menuitem");
menuitem.setAttribute("id", "toggle_downloadsStatusModokiBar");
menuitem.setAttribute("type", "checkbox");
menuitem.setAttribute("autocheck", false);
menuitem.setAttribute("label", "Download Leiste");
menuitem.setAttribute("checked", false);
menuitem.setAttribute("accesskey", "D");
menuitem.setAttribute("oncommand", "ucjsDownloadsStatusModoki.toggleDownloadsStatusModokiBar()");
var ref = document.getElementById("menu_customizeToolbars");
ref.parentNode.insertBefore(menuitem, ref.previousSibling);
// Ensure that the DownloadSummary object will be created asynchronously.
if (!this._summary) {
Downloads.getSummary(Downloads.ALL).then(summary => {
this._summary = summary;
return this._summary.addView(this);
}).then(null, Cu.reportError);
}
if (!this._list) {
Downloads.getList(Downloads.ALL).then(list => {
this._list = list;
return this._list.addView(this);
}).then(null, Cu.reportError);
}
window.addEventListener("unload", this, false);
},
uninit: function() {
window.removeEventListener("unload", this, false);
if (this._summary) {
this._summary.removeView(this);
}
if (this._list) {
this._list.removeView(this);
}
},
handleEvent: function(event) {
switch (event.type) {
case "unload":
this.uninit();
break;
}
},
toggleDownloadsStatusModokiBar: function() {
var collapsed = this.downloadsStatusModokiBar.collapsed;
this.downloadsStatusModokiBar.collapsed = !collapsed;
this.toggleMenuitem.setAttribute("checked", collapsed);
},
openDownloadsStatusModoki: function() {
this.downloadsStatusModokiBar.collapsed = false;
this.toggleMenuitem.setAttribute("checked", true);
},
hideDownloadsStatusModoki: function() {
this.downloadsStatusModokiBar.collapsed = true;
this.toggleMenuitem.setAttribute("checked", false);
},
onDownloadAdded: function (aDownload) {
Cu.import("resource://gre/modules/Services.jsm");
var showWhenStarting = true;
try {
showWhenStarting = Services.prefs.getBoolPref("userChrome.downloadsStatusModoki.showWhenStarting");
} catch(e) {}
this.numDls = 0;
if (showWhenStarting) {
if (this._list) {
this._list.getAll().then(downloads => {
for (let download of downloads) {
if (!download.stopped)
this.numDls++;
}
if (this.numDls > 0)
this.openDownloadsStatusModoki(false);
}).then(null, Cu.reportError);
}
}
},
onSummaryChanged: function () {
Cu.import("resource://gre/modules/Services.jsm");
if (!this._summary)
return;
if (this._summary.allHaveStopped || this._summary.progressTotalBytes == 0) {
var closeWhenDone = false;
try {
closeWhenDone = Services.prefs.getBoolPref("userChrome.downloadsStatusModoki.closeWhenDone");
} catch(e) {}
if (closeWhenDone) {
this.hideDownloadsStatusModoki();
}
}
},
// chrome://browser/content/downloads/contentAreaDownloadsView.xhtml
onload: function(event) {
var doc = event.originalTarget;
var win = doc.defaultView;
doc.documentElement.setAttribute("ucjsDownloadsStatusModoki", "true");
var button = doc.createXULElement("button");
button.setAttribute("label", "Löschen");
button.setAttribute("id", "ucjs_clearListButton");
button.setAttribute("accesskey", "L");
var ref = doc.getElementById("downloadCommands");
var vbox = doc.createXULElement("vbox");
var box = vbox.appendChild(doc.createXULElement("hbox"));
box.appendChild(button);
box.appendChild(doc.createXULElement("spacer")).setAttribute("flex", 1);
var textbox = doc.createElementNS("http://www.w3.org/1999/xhtml", "input");
textbox.setAttribute("id", "downloadFilter");
textbox.setAttribute("clickSelectsAll", true);
textbox.setAttribute("type", "search");
textbox.setAttribute("placeholder", "Suchen...");
box.appendChild(textbox);
var closebtn = doc.createXULElement("toolbarbutton");
closebtn.setAttribute("id", "ucjsDownloadsStatusModoki-closebutton");
closebtn.setAttribute("class", "close-icon");
closebtn.setAttribute("tooltiptext", "Download-Leiste schließen");
box.appendChild(closebtn);
ref.parentNode.insertBefore(vbox, ref);
doc.getElementById("ucjs_clearListButton").addEventListener("command", function(event) {
win.ucjsDownloadsStatusModoki_clearDownloads();
});
doc.getElementById("downloadFilter")
.addEventListener("input", function(event) {
win.ucjsDownloadsStatusModoki_doSearch(event.target.value);
});
doc.getElementById("ucjsDownloadsStatusModoki-closebutton")
.addEventListener("command", function(event) {
win.ucjsDownloadsStatusModoki_doClose();
});
/*
// xxx Bug 1279329 "Copy Download Link" of context menu in Library is grayed out
var listBox = doc.getElementById("downloadsRichListBox");
var placesView = listBox._placesView;
if (placesView) {
var place = placesView.place;
placesView.place= null;
placesView.place = place;
}
*/
win.ucjsDownloadsStatusModoki_clearDownloads = function ucjs_clearDownloads() {
var DO_NOT_DELETE_HISTORY = true; /* custmizable true or false */
var richListBox = doc.getElementById("downloadsRichListBox");
Cu.import("resource://gre/modules/Services.jsm");
var places = [];
function addPlace(aURI, aTitle, aVisitDate) {
places.push({
uri: aURI,
title: aTitle,
visits: [{
visitDate: (aVisitDate || Date.now()) * 1000,
transitionType: Ci.nsINavHistoryService.TRANSITION_LINK
}]
});
}
function moveDownloads2History() {
if (DO_NOT_DELETE_HISTORY &&
!PrivateBrowsingUtils.isWindowPrivate(window)) {
try {
for (let element of richListBox.childNodes) {
let download = element._shell.download;
let aURI = makeURI(download.source.url);
// let aTitle = document.getAnonymousElementByAttribute(element, "class", "downloadTarget").value
let aTitle = download.target.path;
aTitle = aTitle.match( /[^\\]+$/i )[0];
aTitle = aTitle.match( /[^/]+$/i )[0];
let aVisitDate = download.endTime || download.startTime;
addPlace(aURI, aTitle, aVisitDate)
}
} catch(ex) {}
}
// Clear List
richListBox._placesView.doCommand('downloadsCmd_clearDownloads');
if (DO_NOT_DELETE_HISTORY &&
!PrivateBrowsingUtils.isWindowPrivate(window)) {
try {
if (places.length > 0) {
var asyncHistory = Components.classes["@mozilla.org/browser/history;1"]
.getService(Components.interfaces.mozIAsyncHistory);
asyncHistory.updatePlaces(places);
}
} catch(ex) {}
}
}
var btn = doc.getElementById("ucjs_clearListButton");
btn.setAttribute("disabled", true);
moveDownloads2History();
btn.removeAttribute("disabled");
// close toolbar
var closeWhenDone = false;
try {
closeWhenDone = Services.prefs.getBoolPref("userChrome.downloadsStatusModoki.closeWhenDone");
} catch(e) {}
if (closeWhenDone) {
top.ucjsDownloadsStatusModoki.hideDownloadsStatusModoki();
}
};
win.ucjsDownloadsStatusModoki_doSearch = function ucjs_doSearch(filterString) {
var richListBox = doc.getElementById("downloadsRichListBox");
richListBox._placesView.searchTerm = filterString;
};
win.ucjsDownloadsStatusModoki_doClose = function ucjs_doClose() {
top.ucjsDownloadsStatusModoki.hideDownloadsStatusModoki();
};
}
}
ucjsDownloadsStatusModoki.init();
Alles anzeigen
Mfg.
Endor
Leider sagt die Browserkonsole nichts zu diesem Script.
Bei klick auf die Schaltfläche tut sich einfach nichts.
Interessant wird es, wenn ich über Extras - Browser-Werkzeuge die
Browser-Werkzeuge öffnen diese dann schließe funktioniert das Script
wieder bis zum Neustart von Nightly. Keine Ahnung woran das liegt.
Mfg.
Endor