Ebenfalls nachträglich Alles Gute!
Beiträge von aborix
-
-
Alles Gute!
-
Nimm folgenden Code anstatt der beiden aus dem ersten Beitrag:
Code
Alles anzeigen(function() { let tb = document.createElement('toolbar'); tb.id = 'user-statusbar'; tb.setAttribute('customizable', 'true'); tb.setAttribute('mode', 'icons'); tb.setAttribute('context', 'toolbar-context-menu'); let vb = document.createElement('vbox'); vb.id = 'user-statusbar-vbox'; let browserBottombox = document.getElementById('browser-bottombox'); browserBottombox.parentNode.insertBefore(vb, browserBottombox); vb.appendChild(tb); CustomizableUI.registerArea('user-statusbar', {legacy: true}); let tabbar = document.getElementById('TabsToolbar'); vb.parentNode.insertBefore(tabbar, vb); })();
-
Hallo,
ich glaube, das kann man nicht einstellen.
Aber es geht mit diesem Skript: -
Alles Gute!
-
Alles Gute!
-
-
Allerdings ist in neuen Tabs der Fokus meistens in der Findbar, das will man ja nicht unbedingt.
Im folgenden Skript nicht:Code
Alles anzeigen(function() { if (location != 'chrome://browser/content/browser.xul') return; async function showFindbar() { await gBrowser.getFindBar(); gFindBar.open(); }; showFindbar(); gBrowser.tabContainer.addEventListener('TabSelect', function() { if (!gFindBarInitialized) { showFindbar(); }; }); })();
Die Animation beim erstmaligen Erscheinen der Findbar bekommt man über die userChrome.css weg:
Man kann die Findbar wie üblich manuell schliessen und dann wieder manuell öffnen.
-
-
Eine Frage, ich habe im Script zweimal die Bezeichnung ucsepalator gesehen,
Zeile 177 und Zeile 383 denke mal das sollte eigentlich ucseparator heißen oder was meinst Du?
Habe ich jedenfalls bei beiden geändert.Ja, soll wahrscheinlich "ucseparator" heissen. Ist aber in diesem Fall egal, der Name muss nur in allen Vorkommnissen, und hier sind es nur die beiden, der gleiche sein.
Zitat
Nur zum besseren Verständnis welches ist eigentlich die aktuelle und richtige Schreibweise zbs:so
Codelet file = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);
oder so
Codelet file = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);
also (Ci.nsIFileProtocolHandler) oder (Components.interfaces.nsIFileProtocolHandler)
oder ist das egal?'Components.interfaces', 'Components.classes' usw. sind immer richtig. 'Ci', 'Cc' usw. sind Abkürzungen dafür, die, je nach Kontext, funktionieren oder nicht. Wenn nicht, kann man sie als Abkürzungen definieren und dann verwenden.
So auch im Skript in Zeile 40:obwohl es hier auch ohne Definition geht.
-
insertafter gibt es bei XUL-Overlays. Bei JavaScript gibt es das nicht, da kombiniert man insertBefore und nextSibling.
-
[...] geht hier das Menü nicht mehr automatisch auf. Muss jetzt erst auf die Maus hämmernIch nehme mal an, du verwendest AutoPopup.uc.js. Dann schreibst du bei den WhiteIDs (ab Zeile 27) den Button dazu und es geht wieder:
-
Mit insertBefore kann man den Button überall hinsetzen, egal ob er verschiebbar ist oder nicht. Z.B. für direkt rechts vom Hilfe-Menü:
einzufügen vor die Zeile
-
Frage, wir hatten in unserer Version auch die Möglichkeit, mit
Mittelklick auf Schaltfläche CSS Stile oder Änderungen zu importieren.
Auch war es möglich einen anderen Dateimanager zu definieren.Testet bitte das Skript mit folgender Änderung. Die Zeilennummern beziehen sich auf das unveränderte Skript. Die Schaltfläche ist verschiebbar, mit Mittelklick wird importiert und am Beginn des geänderten Teils kann man einen anderen Dateimanager festlegen.
Die Zeilen 49 - 320:
Codewindow.UCL = { USE_UC: "UC" in window, AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET, . . . openFolder: function() { this.FOLDER.launch(); },
werden ersetzt durch
Code
Alles anzeigenwindow.UCL = { // vFileManager: 'C:\\Programme\\totalcmd\\TOTALCMD.EXE', vFileManager: '', USE_UC: "UC" in window, AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET, USER_SHEET : Ci.nsIStyleSheetService.USER_SHEET, readCSS : {}, get disabled_list() { let obj = []; try { obj = this.prefs.getCharPref("disabled_list").split("|"); } catch(e) {} delete this.disabled_list; return this.disabled_list = obj; }, get prefs() { delete this.prefs; return this.prefs = Services.prefs.getBranch("UserCSSLoader.") }, get styleSheetServices(){ delete this.styleSheetServices; return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); }, get FOLDER() { let aFolder; try { // UserCSSLoader.FOLDER verwenden let folderPath = this.prefs.getCharPref("FOLDER"); aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile) aFolder.initWithPath(folderPath); } catch (e) { aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile); aFolder.appendRelativePath("CSS"); } if (!aFolder.exists() || !aFolder.isDirectory()) { aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664); } delete this.FOLDER; return this.FOLDER = aFolder; }, getFocusedWindow: function() { let win = document.commandDispatcher.focusedWindow; if (!win || win == window) win = content; return win; }, init: function() { const cssmenu = $C("menu", { id: "usercssloader-menu", label: "CSS", accesskey: "C", onclick: "if (event.button == 1) UCL.rebuild()" }); const menupopup = $C("menupopup", { id: "usercssloader-menupopup" }); cssmenu.appendChild(menupopup); let menu = $C("menu", { label: "Style Loader Menü", accesskey: "M" }); menupopup.appendChild(menu); let mp = $C("menupopup", { id: "usercssloader-submenupopup" }); menu.appendChild(mp); mp.appendChild($C("menuitem", { label: "Styles importieren", accesskey: "R", acceltext: "Alt + R", oncommand: "UCL.rebuild();" })); mp.appendChild($C("menuseparator")); mp.appendChild($C("menuitem", { label: "CSS Datei erstellen", accesskey: "D", oncommand: "UCL.create();" })); mp.appendChild($C("menuitem", { label: "CSS Ordner öffnen", accesskey: "O", oncommand: "UCL.openFolder();" })); mp.appendChild($C("menuitem", { label: "userChrome.css bearbeiten", hidden: false, oncommand: "UCL.editUserCSS(\'userChrome.css\');" })); mp.appendChild($C("menuitem", { label: "userContent.css bearbeiten", hidden: false, oncommand: "UCL.editUserCSS(\'userContent.css\');" })); mp.appendChild($C("menuseparator")); mp.appendChild($C("menuitem", { label: "Style Test (Chrome)", id: "usercssloader-test-chrome", hidden: true, accesskey: "C", oncommand: "UCL.styleTest(window);" })); mp.appendChild($C("menuitem", { label: "Style Test (Web)", id: "usercssloader-test-content", hidden: true, accesskey: "W", oncommand: "UCL.styleTest();" })); mp.appendChild($C("menuitem", { label: "Styles dieser Seite auf userstyles.org finden", accesskey: "S", oncommand: "UCL.searchStyle();" })); menu = $C("menu", { label: ".uc.css", accesskey: "U", hidden: !UCL.USE_UC }); menupopup.appendChild(menu); mp = $C("menupopup", { id: "usercssloader-ucmenupopup" }); menu.appendChild(mp); mp.appendChild($C("menuitem", { label: "Importieren(.uc.js)", oncommand: "UCL.UCrebuild();" })); mp.appendChild($C("menuseparator", { id: "usercssloader-ucsepalator" })); CustomizableUI.createWidget({ id: 'usercssloader-menu-item', type: 'custom', defaultArea: CustomizableUI.AREA_MENUBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem'); toolbaritem.id = 'usercssloader-menu-item'; toolbaritem.className = 'chromeclass-toolbar-additional'; return toolbaritem; } }); $('usercssloader-menu-item').appendChild(cssmenu); $("mainKeyset").appendChild($C("key", { id: "usercssloader-rebuild-key", oncommand: "UCL.rebuild();", key: "R", modifiers: "alt", })); this.rebuild(); this.initialized = true; if (UCL.USE_UC) { setTimeout(function() { UCL.UCcreateMenuitem(); }, 1000); } window.addEventListener("unload", this, false); }, uninit: function() { const dis = []; for (let x of Object.keys(this.readCSS)) { if (!this.readCSS[x].enabled) dis.push(x); } this.prefs.setCharPref("disabled_list", dis.join("|")); window.removeEventListener("unload", this, false); }, destroy: function() { var i = document.getElementById("usercssloader-menu"); if (i) i.parentNode.removeChild(i); var i = document.getElementById("usercssloader-rebuild-key"); if (i) i.parentNode.removeChild(i); this.uninit(); }, handleEvent: function(event) { switch(event.type){ case "unload": this.uninit(); break; } }, rebuild: function() { let ext = /\.css$/i; let not = /\.uc\.css/i; let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator); while (files.hasMoreElements()) { let file = files.getNext().QueryInterface(Ci.nsIFile); if (!ext.test(file.leafName) || not.test(file.leafName)) continue; let CSS = this.loadCSS(file); CSS.flag = true; } for (let leafName of Object.keys(this.readCSS)) { const CSS = this.readCSS[leafName]; if (!CSS.flag) { CSS.enabled = false; delete this.readCSS[leafName]; } delete CSS.flag; this.rebuildMenu(leafName); } if (this.initialized) { if (typeof(StatusPanel) !== "undefined") StatusPanel._label = "Style importiert"; else XULBrowserWindow.statusTextField.label = "Styles importieren"; } }, loadCSS: function(aFile) { var CSS = this.readCSS[aFile.leafName]; if (!CSS) { CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile); if (this.disabled_list.indexOf(CSS.leafName) === -1) { CSS.enabled = true; } } else if (CSS.enabled) { CSS.enabled = true; } return CSS; }, rebuildMenu: function(aLeafName) { var CSS = this.readCSS[aLeafName]; var menuitem = document.getElementById("usercssloader-" + aLeafName); if (!CSS) { if (menuitem) menuitem.parentNode.removeChild(menuitem); return; } if (!menuitem) { menuitem = document.createElement("menuitem"); menuitem.setAttribute("label", aLeafName); menuitem.setAttribute("id", "usercssloader-" + aLeafName); menuitem.setAttribute("class", "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : "USER_SHEET")); menuitem.setAttribute("type", "checkbox"); menuitem.setAttribute("autocheck", "false"); menuitem.setAttribute("oncommand", "UCL.toggle('"+ aLeafName +"');"); menuitem.setAttribute("onclick", "UCL.itemClick(event);"); document.getElementById("usercssloader-menupopup").appendChild(menuitem); } menuitem.setAttribute("checked", CSS.enabled); }, toggle: function(aLeafName) { var CSS = this.readCSS[aLeafName]; if (!CSS) return; CSS.enabled = !CSS.enabled; this.rebuildMenu(aLeafName); }, itemClick: function(event) { if (event.button == 0) return; event.preventDefault(); event.stopPropagation(); let label = event.currentTarget.getAttribute("label"); if (event.button == 1) { this.toggle(label); } else if (event.button == 2) { closeMenus(event.target); this.edit(this.getFileFromLeafName(label)); } }, getFileFromLeafName: function(aLeafName) { let f = this.FOLDER.clone(); f.QueryInterface(Ci.nsIFile); // use appendRelativePath f.appendRelativePath(aLeafName); return f; }, styleTest: function(aWindow) { aWindow || (aWindow = this.getFocusedWindow()); new CSSTester(aWindow, function(tester){ if (tester.saved) UCL.rebuild(); }); }, searchStyle: function() { let word; try { word = gBrowser.currentURI.host; } catch { word = gBrowser.currentURI.spec; } openLinkIn("https://userstyles.org/styles/search/" + word, "tab", {}); }, openFolder:function(){ if (this.vFileManager.length != 0) { var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); var args=[this.FOLDER.path]; file.initWithPath(this.vFileManager); process.init(file); // Verzeichnis mit anderem Dateimanager öffnen process.run(false, args, args.length); } else { // Verzeichnis mit Dateimanager des Systems öffnen this.FOLDER.launch(); } },
-
Mit folgender Änderung wird die Schaltfläche, egal ob mit Bezeichnung "CSS" oder mit Grafik, frei verschiebbar:
Im Skript ersetzen wir Zeile 175:
durch
Code
Alles anzeigenCustomizableUI.createWidget({ id: 'usercssloader-menu-item', type: 'custom', defaultArea: CustomizableUI.AREA_MENUBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem'); toolbaritem.id = 'usercssloader-menu-item'; toolbaritem.className = 'chromeclass-toolbar-additional'; return toolbaritem; } }); $('usercssloader-menu-item').appendChild(cssmenu);
Und im CSS-Code aus #1677 ersetzen wir Zeile 4:
durch
Kann sein, dass man für Ränder usw. zusätzlich noch etwas CSS braucht.
-
Alles Gute!
-
Es funktioniert bei mir bereits in Fx 60 nicht.
Glücklicherweise ist nur wenig zu ändern:
CSS
Alles anzeigen/* LoadingBar.uc.js */ (function(){ //Location Bar Enhancer5.1;Loading Bar0.3.0 var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 12px), -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(175,175,175,.7) 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; transition: background-size 350ms ease 0s !important; } #urlbar:not([style="background-size: 0% 100%;"]) { animation: progress-bar-stripes 2s linear infinite; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) { return document.getElementById(id) }; var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() { Services.ww.unregisterNotification(windowWatcher) }); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) { unloader() }); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })();
-
Ja, hier haben wir Glück:
Code
Alles anzeigen(function() { if (location != 'chrome://browser/content/browser.xul') return; try { CustomizableUI.createWidget({ id: 'screenshot-button', defaultArea: CustomizableUI.AREA_NAVBAR, label: 'Screenshot', tooltiptext: 'Screenshot', onCommand: onCommand, onCreated: function(button) { button.style.listStyleImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC)'; } }); } catch(e) { }; function onCommand(event) { let frameScript = function() { const string = 'moz-extension://'; let n = 0; addEventListener('DOMContentLoaded', function onLoad(event) { setTimeout(function() { let document = event.target; if (!document.URL.startsWith(string)) return; n++; if (n == 2) { document.querySelector('button.full-page').click(); } else if (n == 3) { removeEventListener('DOMContentLoaded', onLoad); document.querySelector('button.highlight-button-download').click(); }; }, 100); }); }; let frameScriptURI = 'data:, (' + frameScript.toString() + ')()'; let window = event.target.ownerGlobal; window.gBrowser.selectedBrowser.messageManager.loadFrameScript(frameScriptURI, true); let button = window.document.getElementById('pageAction-panel-screenshots'); if (button) { button.click(); } else { window.document.getElementById('pageActionButton').click(); window.setTimeout(function() { window.document.getElementById('pageAction-panel-screenshots').click(); }, 0); }; }; })();
-
-