Hallo Speravir
Habe ich getestet und übernommen.
Auch dafür nochmals vielen Dank für den Hinweis.
Mfg.
Endor
Hallo Speravir
Habe ich getestet und übernommen.
Auch dafür nochmals vielen Dank für den Hinweis.
Mfg.
Endor
Bei der Gelegenheit: Man kann übrigens das Skript immer noch unangetastet lassen und alles per CSS übersteuern
Das sieht bei mir so aus:
.urlbar-input-box[dav_LinkifiesLocationBar]{
font-family: sans-serif;/* individuell anpassen */
font-size: 1em;/* individuell anpassen */
margin-top: -4px;/* Wert schriftabhängig */
}
.claseLocationBar {
margin-top: 0;
}
.claseLocationBar span.pathname {
margin: 0;
padding-left: 0;
}
.claseLocationBar .pathname::before {
display: none;
}
.claseLocationBar .label_pathname {/* Schrägstrich-Trennung */
display: inline;
}
.claseLocationBar span.hash {/*alles nach "#" */
margin-left: 0;
}
.claseLocationBar span.search {/* alles nach "?" */
margin-left: 0;
}
Alles anzeigen
Wenn man die Schrifteinstellungen nicht ändern will, kann man font-family: …; und font-size: …; weglassen, ich habe oben einfach die Standardwerte vorgegeben. margin-top: …; muss sehr wahrscheinlich individuell angepasst werden.
Eigentlich möchte ich NUR dass die Domain fett farbig hervor gehoben wird, alle anderen Funktionen wie das unterstreichen eines Abschittes oder anklicken eines Abschnittes usw. möchte ich gar nicht haben.
Kann man das Script auf diesen Minimal Teil reduzieren? Wie wäre dann der Code?
Bitte mal testen, scheint bei mir zu funktionieren, zur Einstellung siehe linkifyAddressParts (bereits auf false gesetzt):
// ==UserScript==
// @name dav_LinkifiesLocationBar
// @version 1.1.1
// @description dav_LinkifiesLocationBar
// @shutdown dav_LinkifiesLocationBar.globalShutdown();
// ==/UserScript==
/*
Idea based on
https://addons.mozilla.org/en-US/firefox/addon/locationbar%C2%B2/
https://github.com/simonlindholm/locationbar2
"linkifyAddressParts" enhancement by Speravir
*/
setTimeout(function() {
if (location.href != 'chrome://browser/content/browser.xhtml') return;
let
linkifyAddressParts = false,
selectUrlbarText = true,
pathnameArrow = true,
fontMonospace = true,
colorizeExtensionFile = false;
function getWindow(){
return window;
}
function getMostRecentWindow(){
var win = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
return win;
}
var localWindow = getWindow();
localWindow.dav_LinkifiesLocationBar = {};
var styleBase = `
.claseLocationBar{
display: block;
position: absolute;
height: 24px;
width: 100%;
line-height: 24px;
white-space:nowrap;
overflow:hidden;
}
.claseLocationBar span{
position: relative;
margin: 0 1px;
display: inline-block;
}
.claseLocationBar .label_pathname {
margin-inline: unset !important;
}
locationBarTag{
display: inline;
}
/*************************************
*************** COLORS ***************
*************************************/
.claseLocationBar span.protocol{
font-weight: normal;
color: #777777;
margin-right: -1px;
}
.claseLocationBar .subdomain {
font-weight: bold;
color: #C68007;
}
.claseLocationBar span.hostname{
font-weight: bold;
color: red;
}
.claseLocationBar span.port{
color: #5F58A3;
}
.claseLocationBar span.pathname{
color: black;
}
.claseLocationBar span.hash{
color: #1054C9;
margin-left: -1px;
}
.claseLocationBar span.search{
color: #03AA03;
margin-left: -1px;
}
.claseLocationBar .extension{
color: rgb(96,86,143);
}
`;
var style_linkifyAddressParts = !linkifyAddressParts?"":`
.claseLocationBar span:hover{
text-decoration: underline;
cursor: pointer;
}
`;
var style_fontMonospace = !fontMonospace?"":`
.urlbar-input-box[dav_LinkifiesLocationBar]{
font-family: monospace ;
margin-top: 4px;
}
.claseLocationBar{
margin-top: -4px;
line-height: 28px;
}
.claseLocationBar .pathname:after{
top: 10px;
}
.claseLocationBar span.port{
margin-left: -1px;
}
.claseLocationBar .subdomain {
margin-right: -1px;
}
.claseLocationBar span.hostname{
margin-right: 1px;
}
`;
var style_pathnameArrow = !pathnameArrow?"":`
.claseLocationBar span.pathname{
padding-left:9px;
margin: 0 2px;
}
.claseLocationBar .pathname:before{
content:' ';
display: block;
position: absolute;
border-style: solid;
border-width: 4px 4px 4px 7px;
border-color: transparent transparent transparent #6fa880;
border-color: transparent transparent transparent #5ba8bf;
top: 10px;
left: 0px;
}
.claseLocationBar .label_pathname{
display: none;
}
`;
var stylexul = `
.urlbar-input-box[dav_LinkifiesLocationBar] #urlbar-input:focus ~ .claseLocationBar{
display: none !important;
}
.urlbar-input-box[dav_LinkifiesLocationBar] #urlbar-input:focus{
opacity: 1;
}
.urlbar-input-box[dav_LinkifiesLocationBar] #urlbar-input{
opacity: 0;
}
`;
/*
AGENT_SHEET: 0
USER_SHEET: 1
AUTHOR_SHEET: 2
*/
var CSS_Loader = {
sss: Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService),
load: function(cssCode) {
this.unload(cssCode);
var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(cssCode), null, null);
this.sss.loadAndRegisterSheet(uri, this.sss.AGENT_SHEET);
},
unload: function(cssCode) {
var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(cssCode), null, null);
if (this.sss.sheetRegistered(uri,this.sss.AGENT_SHEET))
{
this.sss.unregisterSheet(uri,this.sss.AGENT_SHEET);
}
}
}
if(linkifyAddressParts) {
const CLIKS = {
left: 0,
middle: 1,
right: 2
}
}
function extend() {
var copy, target = {};
for (var i = 0, l = arguments.length; i < l; i++) {
var options = arguments[i];
for (var name in options) {
copy = options[name];
if (copy !== undefined) {
target[name] = copy;
}
}
}
return target;
}
var styleString = (style) => {
return Object.keys(style).reduce((prev, curr) => {
return `${prev += curr.split(/(?=[A-Z])/).join('-').toLowerCase()}:${style[curr]};`
}, '');
};
function createElement(elto) {
elto = extend({
attrArray: {},
evtListener: [],
estilos: {}
}, elto);
var node = getWindow().document.createXULElement(elto.type);
Object.keys(elto.attrArray).forEach(key => {
if(key == "innerHTML"){
node.innerHTML = encodeHTML(elto.attrArray[key]);
}
else {
node.setAttribute(key, elto.attrArray[key]);
}
});
if(linkifyAddressParts) {
elto.evtListener.forEach(evt => {
node.addEventListener(evt.type, evt.funcion, false);
});
}
let estilo = styleString(elto.estilos);
if (estilo) {
node.setAttribute("style", estilo);
}
return node;
}
function encodeHTML(text) {
return decodeURI(text)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function appendPart(text, clase) {
if (!text) return;
if(clase == "pathname")
{
let sp = createElement({
type: "label",
attrArray: {
class: "label_pathname",
innerHTML:"/"
}
});
divLocationBar.appendChild(sp);
}
let sp = createElement({
type: "span",
attrArray: {
class: clase,
innerHTML:text
},
evtListener: !linkifyAddressParts?[]:[{
type: "click",
funcion: clickPart
}]
});
divLocationBar.appendChild(sp);
sp.setAttribute("href", divLocationBar.textContent);
return sp;
}
if(linkifyAddressParts) {
function clickPart(evt) {
if (evt.button == CLIKS.right) return;
let target = evt.target;
if (target.className != "protocol") {
let href = target.getAttribute("href");
var where = evt.button == CLIKS.middle || evt.ctrlKey ? "tab" : "current";
evt.view.openLinkIn(href, where, {
allowThirdPartyFixup: true,
targetBrowser: gBrowser.selectedBrowser,
indicateErrorPageLoad: true,
allowPinnedTabHostChange: true,
disallowInheritPrincipal: true,
allowPopups: false,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
});
evt.stopPropagation();
}
}
}
function borraPrevio() {
var divPrevio = localWindow.document.querySelector(".claseLocationBar");
if (divPrevio) {
divPrevio.parentNode.removeChild(divPrevio)
}
}
var debounce = (fn, ms = 0) => {
let timeoutId;
return function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => fn.apply(this, args), ms);
};
};
var pintaLocation = debounce(pintaLocation_, 50);
function pintaLocation_() {
divLocationBar.innerHTML = '';
var urlBarInput = getWindow().document.querySelector("#urlbar-input").value;
var urlGBrowser = gBrowser.currentURI.displaySpec;
if(urlGBrowser.startsWith("about")){
divLocationBar.innerHTML = encodeHTML(urlBarInput);
return;
}
var url = urlGBrowser.indexOf(urlBarInput) != -1 ? urlGBrowser : urlBarInput;
try {
var { protocol, hostname, port, pathname, hash, search } = new URL(url);
} catch (e) {
divLocationBar.innerHTML = encodeHTML(urlBarInput);
return;
}
var partido = hostname.split(".");
var subdomain;
if(partido.length > 2 && !partido.every( v => v == v-0 ))//chequeamos que no sean todos numeros, porque entonces es una IP
{
subdomain = partido.splice(0, partido.length-2).join(".");
hostname= partido.join(".");
}
appendPart(protocol + "//", "protocol");
if (subdomain) {
appendPart(subdomain+".", "subdomain");
}
appendPart(hostname, "hostname");
if (port) {
appendPart(":" + port, "port");
}
var arrayPathname = pathname.split("/");
var arrayPathnameLength = arrayPathname.length;
arrayPathname.forEach((elto, index) => {
if (elto) {
let sp = appendPart(elto, "pathname");
if(colorizeExtensionFile && index == arrayPathnameLength-1)
{
let arrayDot = elto.split(".");
if(arrayDot.length > 1)
{
let extension = arrayDot.pop();
sp.innerHTML = "";
sp.appendChild(createElement({
type: "locationBarTag",
attrArray: {
href:sp.getAttribute("href"),
innerHTML: arrayDot.join(".")
}
}));
sp.appendChild(createElement({
type: "locationBarTag",
attrArray: {
class: "extension",
href:sp.getAttribute("href"),
innerHTML: "."+extension
}
}));
}
}
}
});
appendPart(search, "search");
appendPart(hash, "hash");
}
/******************* INIT ***************************/
var urlbarInput = getWindow().document.querySelector("#urlbar-input");
var timeMouseMove = -1;
function hideDivLocatonBar(){
urlbarInput.focus();
}
var divLocationBar = createElement({
type: "div",
attrArray: {
class: "claseLocationBar"
},
evtListener: !linkifyAddressParts?[]:[{
type: "click",
funcion: function(evt) {
hideDivLocatonBar()
if(selectUrlbarText){
urlbarInput.select();
}
}
},{
type: "mouseenter",
funcion: function(evt) {
//esto es el ratón entrando por encima
if(evt.screenY == divLocationBar.screenY)
{
timeMouseMove = setTimeout(hideDivLocatonBar, 500);
}
}
},{
type: "mouseleave",
funcion: function(evt) {
clearTimeout(timeMouseMove);
}
}]
});
borraPrevio();
urlbarInput.parentNode.appendChild(divLocationBar);
urlbarInput.parentNode.setAttribute("dav_LinkifiesLocationBar", true);
if(linkifyAddressParts) urlbarInput.addEventListener("blur", pintaLocation);
pintaLocation();
var last_displaySpec = "";
var intevalID = setInterval(function(){
//console.log("setInterval", intevalID, localWindow == window, localWindow == getMostRecentWindow());
let actual_displaySpec = gBrowser.currentURI.displaySpec;
if(last_displaySpec != actual_displaySpec){
last_displaySpec = actual_displaySpec;
pintaLocation();
}
}, 50);
CSS_Loader.load(styleBase);
CSS_Loader.load(style_linkifyAddressParts);
CSS_Loader.load(style_pathnameArrow);
CSS_Loader.load(style_fontMonospace);
CSS_Loader.load(stylexul);
/******************* END INIT ***************************/
dav_LinkifiesLocationBar.shutdown = function(win){
borraPrevio();
clearTimeout(intevalID);
urlbarInput.parentNode.removeAttribute("dav_LinkifiesLocationBar");
CSS_Loader.unload(styleBase);
CSS_Loader.unload(style_linkifyAddressParts);
CSS_Loader.unload(style_pathnameArrow);
CSS_Loader.unload(style_fontMonospace);
CSS_Loader.unload(stylexul);
if(linkifyAddressParts) urlbarInput.removeEventListener("blur", pintaLocation);
}
dav_LinkifiesLocationBar.globalShutdown = function(){
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var ws = wm.getEnumerator(null);
while(ws.hasMoreElements()) {
var w = ws.getNext();
w.dav_LinkifiesLocationBar.shutdown(w);
}
}
}, 10);
Alles anzeigen
Ob meine Änderungen wirklich alle sauber sind, kann aber wohl wirklich nur ein Javascript-Auskenner wie aborix oder Sören Hentzschel sagen. Wenn es auch bei Euch funktioniert, werde ich den Code dem Originalautor zukommen lassen.
Nachtrag: Die URL zu markieren geht nur noch mit Rechtsklick auf die Adressleiste oder Nutzung der F6-Taste.
Bitte mal testen
Jetzt lässt sich die Adresse in der Urlbar nicht kopieren bzw. bearbeiten oder verändern.
Ein Klick auf den Url hat keine Wirkung.
Jetzt lässt sich die Adresse in der Urlbar nicht kopieren bzw. bearbeiten oder verändern.
Ein Klick auf den Url hat keine Wirkung.
Das war mir ebenfalls noch eingefallen, dass ich das nicht getestet hatte. Mit Rechtsklick geht es aber weiterhin. Mac-User müssten mal erzählen, ob es bei ihnen noch möglich ist.
Edit: Mit der F6-Taste ist die Markierung ebenfalls noch möglich.