... Die Translations-Erweiterung schreibt ihr HTML wie gezeigt in die Webseite, anders könnte es auch nicht passieren.
AH, autsch. Ich habe mir das so in etwa schon gedacht, aber eben nur vage!
Vielen, vielen Dank!
... Die Translations-Erweiterung schreibt ihr HTML wie gezeigt in die Webseite, anders könnte es auch nicht passieren.
AH, autsch. Ich habe mir das so in etwa schon gedacht, aber eben nur vage!
Vielen, vielen Dank!
Ich bin mir nicht wirklich sicher, ob ich das richtig verstehe, aber Danke für Deine Erklärung. ![]()
Mit moz-extension://...UUID... schränke ich den Geltungsbereich ein.
Da aber das "Fensterchen" mit der Überbesetzung auf allen Seiten wirksam ist, braucht es diese "Begrenzung" gar nicht,
im Gegenteil, sie macht das dann "kaputt".
Und auch wenn dieser Erklärungsversuch meinerseits falsch ist, die Hauptsache ist, der Code (CSS) ohne wunderbar funktioniert.
Das Panel wird so dargestellt, wie von mir beabsichtigt.
.DeJaVu In der Tat ist mir nicht klar, warum es KEIN moz-extension:// geben darf!
Und warum ist "das was ganz anderes"? Gibst Du mir "Nachhilfe", bitte?
Endor Lässt mir doch keine Ruhe!
Wenn ich mir so Deinen Code anschaue, fällt mir auf, dass da die ID moz-extension://d6b78b1e-5e2a-405a-8fd5-f265411284dd/
wohl dem uBlock zugewiesen wurde.
Denn bei mir hat der uBlock die ID moz-extension://8d0d7974-6e33-42f5-921f-231c8f10558b.
Wenn ich das richtig verstehe, hast Du die Einstellungsseiten und das Panel angepasst.
Das hilft mir aber nicht wirklich, denn ich will ja nicht uBlock anpassen, sondern das "Popup" mit der Übersetzung
der Erweiterung "Simple Translate von sienori".
Diese hat bei mir die ID, die bei Dir der uBlock hat.
Dennoch danke.
Ich belasse es jetzt erst einmal dabei.
Aber danke für die Antworten.
Danke, blöd nur, dass nur mit der ID
@-moz-document url-prefix('moz-extension://d6b78b1e-5e2a-405a-8fd5-f265411284dd')
das ganze dann nicht mehr funktioniert.
Ohne geht es, dann ist das CSS aber nicht mehr eingegrenzt, und das könnte ungeahnte Auswirkungen haben.
Bei uBlock schaut es so aus.
@-moz-document url-prefix('moz-extension://8d0d7974-6e33-42f5-921f-231c8f10558b/popup-fenix.html')
@-moz-document url-prefix('moz-extension://d6b78b1e-5e2a-405a-8fd5-f265411284dd/popup.html') {
#simple-translate .simple-translate-panel {
background-color: var(--uc-color-black-light) !important;
border: 3px solid var(--uc-color-orange-normal) !important;
border-radius: 8px !important;
}
}
Geht NICHT!
NUR =>
#simple-translate .simple-translate-panel {
background-color: var(--uc-color-black-light) !important;
border: 3px solid var(--uc-color-orange-normal) !important;
border-radius: 8px !important;
}
in die userContent.css funktioniert. ![]()
Jetzt bräuchte ich doch mal Hilfe!
Ich nutze die Erweiterung "Simple Translate von sienori"
Damit kann man einzelne Wörter oder Sätze makieren und übersetzen.
Das kleine, oder bei Absätzen, größer Popup würde ich gerne den Hintergrund anpassen
und dem ganzen einen Rahmen verpassen!
So weit, so gut. Auch kenne ich bereits den Selektor.
Nur weiß ich nicht, wie ich das ganze einbinden soll!
Dass das CSS in die userContent.css gehört ist mir klar,
nur mir fehlt ?? (@-moz-document url-prefix('moz-extension://.....) das!
Hier mal mein CSS
#simple-translate .simple-translate-panel {
background-color: var(--uc-color-black-light) !important;
border: 3px solid var(--uc-color-orange-normal) !important;
border-radius: 8px !important;
}
Der Selektor könnte aber auch #simple-translate .simple-translate-panel.isShow sein.
Zum rückstandsfreien Deinstallieren aber das Tool "Norton Remove and Reinstall" nutzen!
Laden Sie das Tool "Norton Remove and Reinstall“ für Windows herunter und führen Sie es aus
Hallo zusammen,
... und wenn die Box auch noch angepasst werden kann, ...
@-moz-document url(chrome://browser/content/browser.xhtml) {
.select-translations-panel-text-area {
font-size: 30px !important;
}
.translations-panel-view {
width: 50em !important;
}
}
Das Verschieben ginge, aber nur, wenn man das per Javascript umsetzt!
Aber ich denke, die paar Wochen kann man bestimmt auch noch auf die 127 Final warten.
Bis dahin viel Spaß mit dem CSS!
weil mir das Symbol zu groß erscheint
Du musst nur das Symbol ansprechen, nicht den kompl. Eintrag:
Richtig, habe ich auch herausgefunden, dennoch Danke!
Nur meine Lösung:
Nicht #${contextMenuId}[data-enabled="true"] { sondern #${contextMenuId}[data-enabled="true"] image {
Und schon funktioniert es. ![]()
Aber Deine Lösung hat auch was!
Endor Danke. Habe etwas gebastelt. Es ist zwar so wie ich es mir vorgestellt habe,
aber das Skript ist ganz, ganz anders.
Egal war, ist ja eh nur ein Training für meinen Kopf.
Beschreibung.
Im Skript, das Endor mir zur Verfügung gegeben hat, wird ein Button erstellt,
mithilfe dessen man den config Eintrag media.mediasource.enabled umschalten kann.
Ich wollte diese Funktion in das Kontextmenü bringen!
Was scheinbar auch funktioniert hat.
Wer mag, kann es ja mal testen, und natürlich darf es auch von jedem der mag genutzt werden.
Symbole wie immer nach Belieben anpassen!
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml')
return;
const contextMenuId = 'context-toggle-mediasource';
const labelEnabled = 'media.mediasource ist aktiviert';
const labelDisabled = 'media.mediasource ist deaktiviert';
const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)); // Pfad zum Profil
const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
const iconEnabled = 'bookmark-hollow.svg'; // Symbol für aktiviert
const iconDisabled = 'bookmark.svg'; // Symbol für deaktiviert
function updateMenuItem(menuitem) {
const isEnabled = Services.prefs.getBoolPref('media.mediasource.enabled');
menuitem.setAttribute('label', isEnabled ? labelEnabled : labelDisabled);
menuitem.setAttribute('tooltiptext', isEnabled ? labelEnabled : labelDisabled);
menuitem.setAttribute('data-enabled', isEnabled);
}
const oncommand = function () {
const isEnabled = !Services.prefs.getBoolPref('media.mediasource.enabled');
Services.prefs.setBoolPref('media.mediasource.enabled', isEnabled);
event.target.ownerGlobal.BrowserCommands.reload(); // Seite neu laden
updateAllMenuItems();
};
function updateAllMenuItems() {
const windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
const doc = windows.getNext().document;
const menuitem = doc.getElementById(contextMenuId);
if (menuitem) {
updateMenuItem(menuitem);
}
}
}
const menuitem = document.createXULElement('menuitem');
menuitem.id = contextMenuId;
menuitem.setAttribute('oncommand', '(' + oncommand.toString() + ')()');
menuitem.classList.add('menuitem-iconic');
updateMenuItem(menuitem);
const refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem.nextSibling);
// Update the menu item when the preference changes
Services.prefs.addObserver('media.mediasource.enabled', updateAllMenuItems);
// Clean up observer on unload
window.addEventListener('unload', function() {
Services.prefs.removeObserver('media.mediasource.enabled', updateAllMenuItems);
});
// Initial update of all menu items
updateAllMenuItems();
// CSS für die Symbole hinzufügen
let sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#${contextMenuId}[data-enabled="true"] {
list-style-image: url(${curProfDir}${iconPath}${iconEnabled}) !important;
transform: scale(1.0) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#${contextMenuId}[data-enabled="false"] {
list-style-image: url(${curProfDir}${iconPath}${iconDisabled}) !important;
transform: scale(1.0) !important;
-moz-context-properties: fill;
fill: lightgreen !important;
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
})();
Alles anzeigen
Nur mit dem Skalieren des Symbols stehe ich auf Kriegsfuß!
Denn ändere ich diese, z.B. weil mir das Symbol zu groß erscheint,
Zerhaut es mir das Label und der Text wird verzerrt.
Auch stimmt dann nicht mehr die "Schaltfläche" von den Proportionen her.
Wenn jemand da eine Idee hätte, raus mit. ![]()
Moin.
Mit der Änderung else if (starred == "null") zu else if (starred == null) funzt es.
Label: Also bei mir passt das schon, das Menü ist/war dafür breit genug. Aber, kann man ja nach Belieben anpassen.
Ich werde das Skript mit ganz vielen Anmerkungen in meinem Archiv ablegen,
denn grundsätzlich finde ich die Funktion spannend.
Danke für die Denksportaufgabe.
Ein Gedanke!
2002Andreas erwähnt hier #16 ein Skript, mit welchem er den Eintrag media.mediasource.enabled = false
hin und her schalten kann. Ich vermute, er nutzt dafür einen Button.
Eventuell kann man mit diesem JavaScript ....
Ach egal.
Ah!
// BookmarkThisPage_Test04.uc.js
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml')
return;
// ## START UserCustomisation ##
const buttonIcon1 = 'bookmark-hollow.svg'; // Name.Dateiendung des anzuzeigenden Symbols | Name.file extension of the symbol to be displayed
const buttonIcon2 = 'bookmark.svg'; // Name.Dateiendung des anzuzeigenden Symbols | Name.file extension of the symbol to be displayed
const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet | Path to folder containing the icon
const label1 = 'Diese Seite als Lesezeichen speichern'; // [starred=null]
const label2 = 'Das Lesezeichen dieser Seite bearbeiten'; // [starred="true"]
const tooltiptext = 'Site als Lesezeichen speichern/bearbeiten';
// ## END UserCustomisation ##
const oncommand = 'gContextMenu.bookmarkThisPage();';
const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
const menuitem1 = document.createXULElement('menuitem');
menuitem1.id = 'contextBookmarkpage';
menuitem1.setAttribute('tooltiptext', tooltiptext);
menuitem1.setAttribute('oncommand', oncommand);
menuitem1.classList.add('menuitem-iconic');
const refItem1 = document.getElementById('context-inspect');
refItem1.parentNode.insertBefore(menuitem1, refItem1.nextSibling);
// Status aktualisieren
const orig = document.getElementById('context-bookmarkpage');
// Funktion zum Aktualisieren des Labels und Icons
function updateMenuItem() {
const starred = orig.getAttribute('starred');
if (starred == '') {
menuitem1.setAttribute('label', 'funzt');
} else if (starred == "null") {
menuitem1.setAttribute('label', label1);
} else if (starred == "true") {
menuitem1.setAttribute('label', label2);
} else {
menuitem1.setAttribute('label', label1);
}
// starred-attribut vom Original 'context-bookmarkpage' clonen
menuitem1.setAttribute('starred', starred);
}
// MutationObserver einrichten
const observer = new MutationObserver(updateMenuItem);
observer.observe(orig, { attributes: true, attributeFilter: ['starred'] });
// Initiales Update
updateMenuItem();
let sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#contextBookmarkpage[starred="true"] image {
list-style-image: url(${curProfDir}${iconPath}${buttonIcon2}) !important;
transform: scale(0.9) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#contextBookmarkpage[starred="true"]:hover image {
list-style-image: url(${curProfDir}${iconPath}${buttonIcon2}) !important;
fill: lightgreen !important;
}
#contextBookmarkpage[starred=null] image/*,
#contextBookmarkpage image*/{
list-style-image: url(${curProfDir}${iconPath}${buttonIcon1}) !important;
transform: scale(0.9) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#contextBookmarkpage[starred=null]:hover image/*,
#contextBookmarkpage:hover image*/{
list-style-image: url(${curProfDir}${iconPath}${buttonIcon1}) !important;
fill: lightgreen !important;
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
})();
Alles anzeigen
Jetzt bin ich mal gespannt, was Du daraus basteln willst.
Denn genau genommen, sehe ich keine Verwendung genau für dieses Skript mit dieser Funktion.
Aber lehrreich war es.
Jetzt?
// BookmarkThisPage_Test03.uc.js
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml')
return;
// ## START UserCustomisation ##
const buttonIcon1 = 'bookmark-hollow.svg'; // Name.Dateiendung des anzuzeigenden Symbols | Name.file extension of the symbol to be displayed
const buttonIcon2 = 'bookmark.svg'; // Name.Dateiendung des anzuzeigenden Symbols | Name.file extension of the symbol to be displayed
const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet | Path to folder containing the icon
const label1 = 'Als Lesezeichen speichern'; // [starred=null]
const label2 = 'Lesezeichen bearbeiten'; // [starred="true"]
const tooltiptext = 'Site als Lesezeichen speichern/bearbeiten';
// ## END UserCustomisation ##
const oncommand = 'gContextMenu.bookmarkThisPage();';
const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
const menuitem1 = document.createXULElement('menuitem');
menuitem1.id = 'contextBookmarkpage';
menuitem1.setAttribute('tooltiptext', tooltiptext);
menuitem1.setAttribute('oncommand', oncommand);
menuitem1.classList.add('menuitem-iconic');
const refItem1 = document.getElementById('context-inspect');
refItem1.parentNode.insertBefore(menuitem1, refItem1.nextSibling);
// Status aktualisieren
const orig = document.getElementById('context-bookmarkpage');
// Funktion zum Aktualisieren des Labels und Icons
function updateMenuItem() {
const starred = orig.getAttribute('starred');
console.log(`starred attribute: ${starred}`); // Debugging-Ausgabe
if (starred === "true") {
menuitem1.setAttribute('label', 'funzt');
} else {
menuitem1.setAttribute('label', 'funzt nicht');
}
// starred-attribut vom Original 'context-bookmarkpage' clonen
menuitem1.setAttribute('starred', starred);
}
// MutationObserver einrichten
const observer = new MutationObserver(updateMenuItem);
observer.observe(orig, { attributes: true, attributeFilter: ['starred'] });
// Initiales Update
updateMenuItem();
let sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#contextBookmarkpage[starred="true"] image {
list-style-image: url(${curProfDir}${iconPath}${buttonIcon2}) !important;
transform: scale(0.9) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#contextBookmarkpage[starred="true"]:hover image {
list-style-image: url(${curProfDir}${iconPath}${buttonIcon2}) !important;
fill: lightgreen !important;
}
#contextBookmarkpage[starred=null] image/*,
#contextBookmarkpage image*/{
list-style-image: url(${curProfDir}${iconPath}${buttonIcon1}) !important;
transform: scale(0.9) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#contextBookmarkpage[starred=null]:hover image/*,
#contextBookmarkpage:hover image*/{
list-style-image: url(${curProfDir}${iconPath}${buttonIcon1}) !important;
fill: lightgreen !important;
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
})();
Alles anzeigen
Mira_Belle Kann es sein dass du mich veräppelst?
Nein! Es scheint wirklich heute nicht mein Tag zu sein!
Auch mit Deiner Erklärung, Danke dafür, und Deiner Geduld, fürchte ich,
weiß ich immer noch nicht so genau, was genau gemacht werden soll.
Aber lass es jetzt gut sein, ich peil das wahrscheinlich eh nicht,
Dennoch vielen Dank, hoffe für Dich, Du bekommst das so hin, wie Du Dir das wünschst.
Nachtrag!
Nun ja, ich glaube, wir haben da in gewissen Stellen aneinander vorbeigeschrieben!
Aber auch, dass ich irgendwie nicht verstanden habe, was genau Du meinst.
Du hast Dich für mich aber auch so technisch gelesen!
Schau Dir mal das Skript an, wenn ich das nun doch entlich geschnackelt habe,
könnte das so sein, wie Du beabsichtigst.
// BookmarkThisPage_Test.uc.js
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml')
return;
// ## START UserCustomisation ##
const buttonIcon1 = 'bookmark-hollow.svg'; // Name.Dateiendung des anzuzeigenden Symbols | Name.file extension of the symbol to be displayed
const buttonIcon2 = 'bookmark.svg'; // Name.Dateiendung des anzuzeigenden Symbols | Name.file extension of the symbol to be displayed
const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet | Path to folder containing the icon
const label1 = 'Als Lesezeichen speichern'; // [starred=null]
const label2 = 'Lesezeichen bearbeiten'; // [starred="true"]
const tooltiptext = 'Site als Lesezeichen speichern/bearbeiten';
// ## END UserCustomisation ##
const oncommand = 'gContextMenu.bookmarkThisPage();';
const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
const menuitem1 = document.createXULElement('menuitem');
menuitem1.id = 'contextBookmarkpage';
menuitem1.setAttribute('tooltiptext', tooltiptext);
menuitem1.setAttribute('oncommand', oncommand);
menuitem1.classList.add('menuitem-iconic');
const refItem1 = document.getElementById('context-inspect');
refItem1.parentNode.insertBefore(menuitem1, refItem1.nextSibling);
// Status aktualisieren
const orig = document.getElementById('context-bookmarkpage');
// Funktion zum Aktualisieren des Labels und Icons
function updateMenuItem() {
const starred = orig.getAttribute('starred');
if (starred == '') {
menuitem1.setAttribute('label', 'funzt');
} else if (starred == "null") {
menuitem1.setAttribute('label', label1);
} else if (starred == "true") {
menuitem1.setAttribute('label', label2);
} else {
menuitem1.setAttribute('label', 'funzt nicht');
}
// starred-attribut vom Original 'context-bookmarkpage' clonen
menuitem1.setAttribute('starred', starred);
}
// MutationObserver einrichten
const observer = new MutationObserver(updateMenuItem);
observer.observe(orig, { attributes: true, attributeFilter: ['starred'] });
// Initiales Update
updateMenuItem();
let sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#contextBookmarkpage[starred="true"] image {
list-style-image: url(${curProfDir}${iconPath}${buttonIcon2}) !important;
transform: scale(0.9) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#contextBookmarkpage[starred="true"]:hover image {
list-style-image: url(${curProfDir}${iconPath}${buttonIcon2}) !important;
fill: lightgreen !important;
}
#contextBookmarkpage[starred=null] image/*,
#contextBookmarkpage image*/{
list-style-image: url(${curProfDir}${iconPath}${buttonIcon1}) !important;
transform: scale(0.9) !important;
-moz-context-properties: fill;
fill: orange !important;
}
#contextBookmarkpage[starred=null]:hover image/*,
#contextBookmarkpage:hover image*/{
list-style-image: url(${curProfDir}${iconPath}${buttonIcon1}) !important;
fill: lightgreen !important;
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
})();
Alles anzeigen
Das ist hier aber nicht die 'Aufgabenstellung'.
Ich stehe z.Z. wirklich total auf dem Schlauch!
Was wäre denn die Aufgabenstellung?
Ich bin irgendwie total begriffsstutzig.
Hatte gerade einen Geistesblitz, hoffe ich.
Dir geht es nicht um die Funktion, die das Skript implementiert,
sondern WIE es das macht. Richtig?
Sorry, dann verstehe ich nicht. Auch wenn es nur ein Test sein soll, so verstehe ich einfach nicht,
was Du bezwecken willst. Vielleicht lasse ich es auch noch einmal sacken und lese Deine Beiträge
nochmal und ein anderes Mal.
Erkläre es mir bitte doch noch einmal mit dem Reloadbutton, oder besser mit einer Funktion,
die so im Menü nicht vorkommt! Z.B. "Reload userChrome.css" oder "Downloadfenster öffnen" oder
"Anwendungsmenü öffnen" (Hamburgermenü).
Ob ich das jetzt verstanden habe?
Also, im Kontextmenü gibt es schon das Sternchen, mit allen gewünschten Eigenschaften.
Aber Du möchtest das Klonen, damit es einen neuen Eintrag im Menü gibt.
Diese soll immer da sein, damit auch andere Ding, also nicht nur Seiten (Pages) als Lesezeichen abgelegt werden können,
sondern auch Bildern usw.
Richtig?
Mitleser Ich verstehe nur Bahnhof. Sorry.
Was soll das Skript bezwecken, wo für soll es sein?