1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. EffPeh

Beiträge von EffPeh

  • Ausblenden der Tableiste, wenn Tabs in der Sidebar angezeigt werden

    • EffPeh
    • 10. Mai 2018 um 18:22

    Mit Extensions wie etwa Tree Style Tab oder Tab Center Redux kann man sich die Tabs als Liste in der Sidebar anzeigen lassen. Das mag nicht jeder, aber ich persönlich finde es übersichtlicher, vor allem, wenn viele Tabs geöffnet sind. Dummerweise bleibt die Tableiste trotzdem sichtbar.
    Auf reddit habe ich jetzt ein nettes Script entdeckt, das die Tableiste ausblendet, sobald in der Sidebar die Tabs gelistet werden. Das [userChrome.js] Originalscript geht von der Tree Style Tab-Extension aus. Ich selbst nutze aber Tab Center Redux. Ich habe deshalb das Script leicht abgeändert, so dass man die IDs von anderen entsprechenden Erweiterungen eintragen kann. Die IDs kann man wie gewohnt mit Hilfe der Browser-Werkzeuge ermitteln.
    Ich selbst kenne jetzt nur die bereits genannten Extensions. Kennt ihr noch andere (und evtl. sogar die ID)? Dann könnte man das Script ergänzen. :wink:

    Code
    (function() {
    	// Extension-IDs
    	var sidebarTabExtID = new Array(
    		// Tree Style Tab
    		"treestyletab_piro_sakura_ne_jp-sidebar-action",
    		// Tab Center Redux
    		"_0ad88674-2b41-4cfb-99e3-e206c74a0076_-sidebar-action"
    	);
    
    
    	var tabbar = document.getElementById("TabsToolbar");
    	function showHideTabbar() {
    		var sidebarBox = document.getElementById("sidebar-box");
    		var sidebarTST = sidebarBox.getAttribute("sidebarcommand");
    		if (!sidebarBox.hidden && sidebarTabExtID.indexOf( sidebarTST ) != -1 ) {
    			tabbar.style.visibility = "collapse";
    		}
    		else tabbar.style.visibility = "visible";
    	}
    	var observer = new MutationObserver(showHideTabbar);
    	observer.observe(document.getElementById("sidebar-box"), { attributes: true, attributeFilter: ["sidebarcommand", "hidden"] });
    })();
    Alles anzeigen
  • Firemin Speicherverbrauch reduzierung

    • EffPeh
    • 9. Mai 2018 um 15:51
    Zitat von schlingo


    [...]

    Der Satz spiegelt aber nicht nur die Meinung des Entwicklers wider, sondern impliziert eben im Zusammenhang mit dem Rest des Absatzes auch, das Firemin nichts anderes macht als Windows selbst, eben nur öfter.
    Und was redest du von Fakten? Ganz offensichtlich kennst du das Programm gar nicht und ausser "Schrott" und "Kwatsch" kamen von dir jetzt keine Argumente, die tatsächlich gegen die Software sprechen. Wie ich schon geschrieben habe, ist das Tool konfigurierbar. Ich kann es mehrmals in einer Sekunde laufen lassen oder aber auch nur alle zwei Stunden. Oder gar nicht. Es ist ja jetzt nicht so, das ich Firemin ständig im Hintergrund laufen lasse, sondern nur im Bedarfsfall. Eben genau dann, wenn ich den Speicher für andere Programme nutzen möchte, die ich in dem Moment priorisiere. Dass ich dann mit (für mich nicht spürbaren) Performance-Einbußen und leicht erhöhter CPU-Tätigkeit rechnen und leben muss, ist eben der Preis dafür. Aber das hält sich bei vernünftiger Konfiguration in Grenzen.
    Die Frage nach dem Vorteil für das System ist völlig irrelevant. Was juckt es mein System, wie oft die GC aufgerufen wird? Ganz sicher muss man in den seltensten Fällen das GC mehrmals in der Sekunde durchlaufen lassen, aber selbst wenn: Ausser durch einen leicht erhöhten CPU-Bedarf (, der bei mir gewöhnlich unter 1% im Moment des Aufrufs liegt, ) macht sich das Tool doch gar nicht bemerkbar. Solange das Tool einwandfrei arbeitet, ist alles bestens. Und das macht es, zuverlässig und ohne das es bei mir jemals zu Problemen mit Hard- und Software geführt hätte. Die Jungs entwickeln das Teil ja jetzt auch nicht erst seit gestern.

  • Firemin Speicherverbrauch reduzierung

    • EffPeh
    • 8. Mai 2018 um 19:56
    Zitat von Sören Hentzschel


    Firefox kann nur RAM nutzen, der auch vorhanden ist. Dir entsteht kein Vorteil an anderer Stelle, wenn Firefox vorhandenen RAM nicht nutzt - außer du hast nur so wenig RAM, dass es zu einem Engpass kommt. Aber dann hast du eh ein viel größeres Problem.


    Ja, natürlich habe ich zuweilen RAM-Engpass. Es ist nicht so selten, dass ich hier mit mehreren RAM-hungrigen Programmen gleichzeitig arbeite und leider lässt sich das Problem hardwareseitig nicht - oder nur mit nicht effizientem Kostenaufwand - lösen. Warum sonst sollte ich denn das Tool einsetzen? Alternativ müsste ich den Browser schliessen. Und das will ich irgendwie auch nicht. :P

    Zitat von Sören Hentzschel


    Dass du keinen Einbruch der Performance bemerkst, bedeutet nicht, dass es sich nicht auf die Performance auswirkt. Du wirst es vor allem dann merken, wenn das System unter Last steht. Natürlich bricht die Performance eines nicht ausgelasteten System dadurch nicht extrem ein. Aber es steht außer Frage, dass Garbage Collection Arbeit für das System ist und ebenfalls Ressourcen beansprucht.

    Worauf ich hinaus möchte: Niedrigere Werte für den RAM-Verbrauch im Task Manager sind schön und gut. Aber kein Vorteil per se.


    Schon klar. Dieses Tool ist für mich ein Kompromiss - das bisschen Performance-Einbuße im FF verkrafte ich eher als wenn mir der RAM an anderer Stelle fehlt.

    Und bevor das Thema überhaupt erst auf den Tisch kommt: Nee, ich kaufe mir keinen neuen Rechner. Der hier läuft (wie alle meine Rechner), bis er den Geist aufgibt. Wir produzieren genug unnötigen Elektro-Schrott in diesem Land... :wink:

  • Firemin Speicherverbrauch reduzierung

    • EffPeh
    • 8. Mai 2018 um 18:08
    Zitat von Sören Hentzschel


    Kunststück, wenn man mehrmals pro Sekunde Speicher freigibt. Nur sollte einem klar sein, dass das schlecht für die Performance ist. Es hat Gründe, wieso Speicher-Bereinigungen üblicherweise in den sogenannten Idle-Phasen und nicht permanent stattfinden. Nochmal: RAM ist dafür da, um genutzt zu werden. Es gibt keinen sinnvollen Grund, in die vorhandenen und funktionierenden Mechanismen einzugreifen.


    Sorry, Sören, aber ich sehe da keine Performance-Einbrüche bei mir. :)
    Und natürlich soll der RAM genutzt werden - aber eben an anderer Stelle... :P

  • Firemin Speicherverbrauch reduzierung

    • EffPeh
    • 8. Mai 2018 um 18:05
    Zitat von schlingo


    Falls Du kein Englisch verstehst: "Windows scannt selbst regelmäßig laufende Prozesse und weist sie an, ihren ungenutzten Speicher freizugeben. Sie könnten argumentieren, dass dies Firemin unnötig macht, und Sie hätten damit völlig Recht. [...] Firemin führt den Clean Memory API-Aufruf einige Male pro Sekunde aus.


    Wenn du schon zitierst, dann doch auch bitte den ganzen Absatz und nicht nur das, was dir dabei gerade passt. :P

    Zitat


    Windows will also periodically scan running processes and tell them to release their unused memory. You could argue that this makes Firemin unnecessary, and you would be spot on. However, It is my opinion that Windows does not clean out memory as often as I would like it to. Firemin runs the clean memory API call a few times per second.


    Denn die Aussage dieses Absatzes ist eigentlich - so wie ich es verstehe - , dass Firemin im Prinzip das gleiche macht wie Windows, aber eben häufiger. Man mag jetzt behaupten, das belaste das Pagefile unnötig, aber ich persönlich sehe da kein Problem, denn das wird eh dauernd in Anspruch genommen. So what? :)

  • Firemin Speicherverbrauch reduzierung

    • EffPeh
    • 8. Mai 2018 um 17:36

    Ich nutze das kleine Tool bereits seit einer ganzen Weile. Vor allem vor Quantum hat es mir gute Dienste geleistet, weil FF da extrem unterwegs war bei mir. Mittlerweile ist es nicht mehr so drastisch, aber das Firemin läuft stabil und macht genau das, was es soll.
    Das Tool erhält regelmässig und relativ oft Updates, lässt sich - je nach eigenen Bedürfnissen - konfigurieren und hat bei mir noch nie Probleme bereitet. Also kann ich es empfehlen.

    Zitat

    The method Firemin uses to decrease Firefox memory usage is not proven and the debate over if it works or not will go on until the end of time, but the logic remains; if it works for you, use it and if it does not, don’t use it. It is really that simple.


    Natürlich kann man sich über den Sinn des Tools streiten. Ich habe mal irgendwo gelesen, dass Firemin nichts an der eigentlichen Speicherverwaltung von Firefox ändert, aber es trotzdem den Speicherverbrauch deutlich reduziert, indem es den Speicher, den der Firefox für die Darstellung nutzt, in das Pagefile auslagert. Ist das nun gut oder schlecht? Keine Ahnung, aber mein 3D-Programm freut sich über den freigegebenen Speicher... :P

  • Probleme mit Statusleiste

    • EffPeh
    • 7. Mai 2018 um 19:54

    Ich muss mich korrigieren, ich bin ja schon bei Version 61. :)
    In meiner Version 59 ist es aber auch so.
    Script und CSS sehen bei mir so aus:

    Code
    var el = document.getElementById('browser-bottombox');
    var tb = document.createElement('toolbar');
    tb.id = 'fp-statusbar';
    tb.setAttribute('customizable', true);
    tb.setAttribute('mode', 'icons');
    el.appendChild( tb );
    
    
    CustomizableUI.registerArea( 'fp-statusbar' , { legacy: true } );
    CSS
    #browser-bottombox , #fp-statusbar {
    	background: farbwert !important;
    	padding: 0px 5px !important;	
    }
    
    
    #browser-bottombox {
    	box-shadow: 0px -10px 10px 0px farbwert !important;
    }
    
    
    #fp-statusbar > toolbarbutton {
    	float: right;
    }
    Alles anzeigen

    Edit: Wobei beim CSS das box-shadow nur für mein Layout interessant ist.

  • Enterprise Policy Generator

    • EffPeh
    • 7. Mai 2018 um 13:06
    Zitat von Sören Hentzschel


    Genau. Gleiche Technologie, aber von den Webseiten-Einstellungen unberührt. Über die Firefox-Einstellungen kommt man unter keinen Umständen in eine Situation, in welcher Erweiterungs-Daten gelöscht werden. ;)

    Ich habe im Quellcode von Swift Selection Search übrigens schon gefunden, was ich für den Download brauche. Danke nochmal, hat mir Zeit gespart. ;)


    Ja, genau das war meine Befürchtung. Denn ich habe selbst schon meine storage-Daten gekillt und mich hinterher darüber geärgert. :P
    Gerne, keine Ursache. :)

  • Enterprise Policy Generator

    • EffPeh
    • 7. Mai 2018 um 12:56

    Verstanden. Denke ich. ;)
    Der Local Storage der Erweiterungen hat also nichts mit dem von Webseiten zu tun.

  • Enterprise Policy Generator

    • EffPeh
    • 7. Mai 2018 um 12:52

    Ah, okay. Aber der kann doch meines Wissens nach vom User deaktiviert bzw. gelöscht werden, oder?

  • Probleme mit Statusleiste

    • EffPeh
    • 7. Mai 2018 um 12:49

    Schaut bei mir so aus...
    [attachment=0]statusbar-1.PNG[/attachment]
    Welche FF-Version? Bei mir ist es die 60.
    Eventuell ein anderes Script?

    Bilder

    • statusbar-1.PNG
      • 76,28 kB
      • 721 × 121
  • Enterprise Policy Generator

    • EffPeh
    • 7. Mai 2018 um 12:42
    Zitat von Sören Hentzschel


    Was sicher nicht möglich ist, ist die automatische Speicherung an der notwendigen Stelle. Wenn du eine Erweiterung kennst, welche dich eine Datei herunterladen lässt (z.B. eine Erweiterung mit Exportmöglichkeit der Einstellungen), lass es mich wissen. Dann kann ich wertvolle Recherche-Zeit sparen.


    Richtig, das habe ich schon öfter gelesen und ich sehe es auch daran, dass sämtliche Erweiterungen ihre Daten nur im Download-Verzeichnis ablegen.
    Spontan fallen mir jetzt diese beiden Extensions ein, die sowohl Ex- als auch Import anbieten:
    Swift Selection Search
    und
    Group Speed Dial
    Oder aber auch der Tab Session Manager. Der macht regelmässig (optional?) selbstständig Backups im JSON-Format.

    Zitat von Sören Hentzschel


    Was ich bezüglich Konfigurationen speichern und laden meine, geht in eine andere Richtung. Da ist die Idee, dass der Anwender die Konfiguration im Speicher der Erweiterung ablegen und später einfach wieder aus dem Speicher laden kann, auch unterschiedliche Konfigurationen. Da geht es darum, dass man nicht immer alles neu anklicken muss, wenn man nur was ändern will. Für dieses Feature wird überhaupt nicht mit Dateien gearbeitet. Das könnte natürlich später auch noch um eine Import- und Export-Funktion erweitert werden, aber der erste Schritt ist die Speicherung innerhalb der Erweiterung. Wenn das erledigt ist und die policies.json-Ausgabe als Datei gespeichert werden kann, müssten die beiden Ansätze ja fast nur noch kombiniert werden.


    Das habe ich tatsächlich falsch verstanden. Ich bin wirklich von einem Ex- bzw. Import ausgegangen. Ist mit "Speicher der Erweiterung" dieses storage.js gemeint?

  • Enterprise Policy Generator

    • EffPeh
    • 7. Mai 2018 um 12:04

    Ich habe mir gestern abend auch noch beide Versionen angeschaut und finde es okay so bisher. Bis auf die Sache mit der "URL"-Bezeichnung war mir auch nichts negativ aufgefallen.
    Was ich persönlich immer noch nicht verstehe: wieso ist es möglich, eine Extension-Konfiguration zu ex- und importieren (i. d. R. als JSON), aber nicht das generierte policies-JSON?... :-??

  • Suchbegriff löschen

    • EffPeh
    • 6. Mai 2018 um 14:01

    Mit Hilfe eines Scripts... :wink:
    Das hier ist von mir leicht modifiziert. Das Script kopiert den Suchbegriff ins Clipboard, so das man ihn bei Bedarf nochmals verwenden kann ohne ihn erneut eintippen zu müssen.

    Code
    (function( searchbar ) {
    	searchbar.doSearch_org = searchbar.doSearch;
    	searchbar.doSearch = function( aData , aWhere , aEngine ) {
    		this.doSearch_org( aData , aWhere , aEngine );
    		this.value = "";
    		this.updateDisplay();
    		const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
    		gClipboardHelper.copyString( aData );
    	}
    }( document.getElementById("searchbar") ) );
  • Hilfe beim Video Downloadhelper

    • EffPeh
    • 5. Mai 2018 um 18:49

    Oder auch online... ;)
    https://mediathekviewweb.de/#query=Rammste…Square%20Garden

  • Developer Edition 61.0b2 (64-Bit) und Scripte

    • EffPeh
    • 5. Mai 2018 um 14:44

    Ja, beide Scripts sollten eine aufklappbare Liste anzeigen.
    Zumindest für das copyURLTitle-Script habe ich den Fehler gefunden.
    Statt

    Code
    aNode.setAttribute( 'type' , 'menu-button' );


    habe ich jetzt

    Code
    aNode.setAttribute( 'type' , 'menu' );


    eingetragen. Das funktioniert jetzt also wieder so wie es soll.
    Bei dem Script für die kürzlich geschlossenen Tabs wird da nun auch etwas angezeigt, aber keine Inhalte.
    Da muss ich schauen, wo der Fehler liegt.
    Ich finde es halt merkwürdig, das es bei dir, Endor, ohne diese Änderung funktioniert.

  • Developer Edition 61.0b2 (64-Bit) und Scripte

    • EffPeh
    • 5. Mai 2018 um 14:11

    Danke, Endor. :)
    Das ist echt schräg... :?
    Das PopUp-Menü ist auch im Quellcode zu finden, es wird also erzeugt. Aber es wird bei mir einfach nicht angezeigt.
    Ich hatte inzwischen auch mal testweise alle anderen Scripts entfernt, um Konflikte auszuschliessen.
    Aber nichts. Es will nicht. :roll:
    Gleichzeitig funktioniert aber kurioserweise das Menü z.B. des Wetter-Scripts einwandfrei, welches ich mal eingebunden habe, weil die Menü-Erstellung ja im Prinzip gleich ist. Ich werde das jetzt nochmal genauer vergleichen. Auch wenn es überflüssig ist, denn anscheinend laufen die beiden Scripte ja bei dir.

  • Developer Edition 61.0b2 (64-Bit) und Scripte

    • EffPeh
    • 5. Mai 2018 um 13:05

    Hm. Das verwirrt mich jetzt wirklich... :-??
    Ob Win 10 oder 7 sollte eigentlich egal sein.
    Werden bei dir auch die jeweiligen Popup-Menüs angezeigt, Endor?

  • Developer Edition 61.0b2 (64-Bit) und Scripte

    • EffPeh
    • 5. Mai 2018 um 12:03

    Nein, Sören, ich habe es gerade nochmal überprüft. ;)
    Keine Fehler oder Warnungen, was die beiden Scripte betrifft.

  • Developer Edition 61.0b2 (64-Bit) und Scripte

    • EffPeh
    • 5. Mai 2018 um 11:41

    Dankeschön für das Feedback, Leute. :)

    Ich habe keine Ahnung, was da gestern nach dem Update schief gelaufen ist bei mir, aber nachdem ich heute morgen alle Scripte aus chrome entfernt und nacheinander wieder eingebunden habe, funktionierte das meiste auch wieder. Ich kann mir nicht vorstellen, dass es an openUILink() gelegen hat, denn zum einen habe ich nur zwei Buttons, bei denen es Verwendung fand und zum anderen liefen heute morgen die Scripte trotz der veralteten Methode. Inzwischen habe ich das aber natürlich ausgetauscht.
    Ich habe aber hier noch zwei Scripte, die so nicht mehr funktionieren. Die Buttons selbst werden erstellt, aber das dazu gehörende Popup-Menü nicht. Ich denke, da hat es wahrscheinlich eine kleine Änderung gegeben. Eventuell hat jemand von euch dazu eine Idee... ;)

    Code
    (function() {
    /** Button Start **/
    try {
    	CustomizableUI.createWidget({
    		id: "uc-undo-close-button",
    		defaultArea: CustomizableUI.AREA_NAVBAR,
    		removable: true,
    		label: "Tabs herstellen",
    		tooltiptext: "Zuletzt geschlossene Tabs wieder herstellen",
    		onCreated: function(aNode) {
    			aNode.style.listStyleImage = 'url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="context-fill" d="M15 11h-1V5a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v6H1a1 1 0 0 0 0 2h14a1 1 0 1 0 0-2z"></path></svg>\')';
    
    			aNode.setAttribute( 'type' , 'menu-button' );
    			aNode.setAttribute( 'command' , 'History:UndoCloseTab' );
    
    			var menupopup = document.createElement('menupopup');
    			menupopup.id = 'CTB-MP';
    			menupopup.setAttribute( 'oncommand' , 'event.stopPropagation();' );
    			menupopup.setAttribute( 'onpopupshowing' , 'parentNode.populateUndoSubmenu();' );
    			menupopup.setAttribute( 'tooltip' , 'bhTooltip' );
    			menupopup.setAttribute( 'popupsinherittooltip' , 'true' );
    			menupopup.setAttribute( 'context' , '' );
    
    			aNode.append( menupopup );
    
    			menupopup.addEventListener('popupshowing', function(event) {
    				event.stopPropagation();
    				if (event.target != this) { return; }
    
    
    				var sessionStore = Cc['@mozilla.org/browser/sessionstore;1'].getService(Ci.nsISessionStore);
    				//var sessionItems = eval('(' + sessionStore.getClosedTabData(window) + ')');
    				var sessionItems = JSON.parse( sessionStore.getClosedTabData(window) );
    
    				for (var i = 0; i < sessionItems.length; i++) {
    					var item = menupopup.appendChild( document.createElement('menuitem') );
    					item.setAttribute( 'label' , sessionItems[i].title );
    					item.setAttribute( 'image' , sessionItems[i].image );
    					item.setAttribute( 'value' , i );
    					item.setAttribute( 'oncommand' , 'undoCloseTab(' + i + ');' );
    					item.setAttribute('class', 'menuitem-iconic bookmark-item');
    				}
    			});
    
    			menupopup.addEventListener('popuphiding', function(event) {
    				if (event.target != this) { return; }
    				while (menupopup.firstChild) {
    					menupopup.removeChild(menupopup.firstChild);
    				}
    			});
    			return aNode;
    		}
    	});
    } catch (e) {
    	Components.utils.reportError(e);
    };
    /** Button Ende **/
    })();
    Alles anzeigen
    Code
    function copyURLTitle(type) {
    	var uri = window.gBrowser.currentURI.spec;
    	var title = window.gBrowser.contentTitle;
    
    
    	const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
    
    
    	switch(type) {
    		case 'txt':
    			var str = title + ' — ' + uri;
    			break;
    		case 'html':
    			var str = '<a href="' + uri + '">' + title + '</a>';
    			break;
    		case 'bbcode':
    			var str = '[url=' + uri + ']' + title + '[/url]';
    			break;
    		case 'markdown':
    			var str = '[' + title + '](' + uri + ')';
    			break;
    		case 'wiki':
    			var str = '[' + uri + ' ' + title + ']';
    			break;
    		case 'ascii':
    			var str = uri + '[' + title + ']';
    			break;
    		case 'txtURL':
    			var str = uri;
    			break;
    		case 'txtTitle':
    			var str = title;
    			break;
    	}
    
    
    	gClipboardHelper.copyString( str );
    };
    
    
    (function() {
    /** Button Start **/
    try {
    	CustomizableUI.createWidget({
    		id: "fp-url-to-txt",
    		defaultArea: CustomizableUI.AREA_NAVBAR,
    		removable: true,
    		label: "URL to Text",
    		tooltiptext: "URL to Text",
    		onCreated: function(aNode) {
    
    
    			aNode.style.listStyleImage = 'url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect fill="context-fill" x="7" y="3.286" width="2" height="9.429" rx="1" ry="1" transform="rotate(-45 8 8)"></rect><path fill="context-fill" d="M2.354 4.522L4.485 2.39a.5.5 0 0 1 .711 0l3.19 3.19.014-.015a2 2 0 0 0 0-2.821L6.272.616a2 2 0 0 0-2.821 0L.616 3.451a2 2 0 0 0 0 2.821L2.744 8.4a1.993 1.993 0 0 0 2.8.02l-3.19-3.186a.5.5 0 0 1 0-.712zm13.062 5.237L13.287 7.63a2 2 0 0 0-2.821 0l-.015.015 3.189 3.189a.5.5 0 0 1 0 .711l-2.132 2.132a.5.5 0 0 1-.711 0L7.61 10.49a1.993 1.993 0 0 0 .02 2.8l2.128 2.128a2 2 0 0 0 2.821 0l2.835-2.835a2 2 0 0 0 .002-2.824z"></path></svg>\')';
    
    
    			aNode.setAttribute( 'type' , 'menu-button' );
    			aNode.setAttribute( 'oncommand' , 'copyURLTitle(\'bbcode\')' );
    
    
    			var menupopup = document.createElement('menupopup');
    			menupopup.id = 'fp-utt-mpu';
    			menupopup.setAttribute( 'oncommand' , 'event.stopPropagation();' );
    			menupopup.setAttribute( 'tooltip' , 'bhTooltip' );
    			menupopup.setAttribute( 'popupsinherittooltip' , 'true' );
    			menupopup.setAttribute( 'context' , '' );
    
    
    			aNode.append( menupopup );
    
    
    			var items = [
    				[ 'menuitem' , 'Seitentitel und -adresse kopieren (Text)' , 'txt' ],
    				[ 'menuitem' , 'Seitentitel und -adresse kopieren (HTML)' , 'html' ],
    				[ 'menuseparator' , '' , '' ],
    				[ 'menuitem' , 'Seitentitel und -adresse kopieren (BBCode)' , 'bbcode' ],
    				[ 'menuitem' , 'Seitentitel und -adresse kopieren (Markdown)' , 'markdown' ],
    				[ 'menuitem' , 'Seitentitel und -adresse kopieren (Wiki-Code)' , 'wiki' ],
    				[ 'menuitem' , 'Seitentitel und -adresse kopieren (AsciiDoc)' , 'ascii' ],
    				[ 'menuseparator' , '' , '' ],
    				[ 'menuitem' , 'Seitenadresse kopieren (Text)' , 'txtURL' ],
    				[ 'menuitem' , 'Seitentitel kopieren (Text)' , 'txtTitle' ]
    			];
    
    
    			for (var i = 0; i < items.length; i++) {
    				var item = document.createElement( items[i][0] );
    				item.setAttribute( 'label' , items[i][1] );
    				item.setAttribute( 'oncommand' , 'copyURLTitle(\'' + items[i][2] + '\')' );
    				menupopup.append( item );
    			}
    			return aNode;
    		}
    	});
    } catch (e) {
    	Components.utils.reportError(e);
    };
    /** Button Ende **/
    })();
    Alles anzeigen

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon