Magyar Opera

Weblapok címének átalakítása

Mondhatnám, hogy az Opera 10.50-es verziójával aktuálissá vált, de valójában 2008-ban, a Chrome megjelenésekor vált aktuálissá a weblapok címének kérdése. Vagyis a címsorba helyezett fülekkel eltűnt a Windows címsor, ahol addig az oldalak címe volt látható teljes szélességében.

A régi elrendezés még a faviconok nélküli időszakra vezethető vissza és igazából már a füles böngészés megjelenésekor kényelmetlenné vált azok számára, akik egyszerre sok lapot tartanak nyitva, ennek ellenére sok helyen még a mai napig ezt a struktúrát használják.

Az ExtendOperán egy ideje van egy tab-aliaser nevű userJS, amellyel 3 különböző módon alakíthatjuk át a weboldalak címét, avagy a TITLE részt. Az első konkrét domain, illetve aldomain esetén egy általunk meghatározott Aliast ad az oldalnak. Tehát például ennek a postnak a címét írhatjuk át vele anélkül, hogy a Magyar Opera blog főoldalát is átírnánk.

A második 2nd domain alapján alakítja át, vagyis a példában szereplő, idézőjelek között lévő "google.c" a google.com a google.ca és a google.co.akármi domainek esetén is átalakítja a TITLE mezőt az általunk "alias2"-ben megadott szövegre.

A harmadik pedig felesleges, van rá jobb megoldás, mégpedig a replace() függvény.

// ==UserScript==
// @name	Tab Aliaser
// @description	Tab Aliaser
// @include	*
// ==/UserScript==

(function(){
document.addEventListener('DOMContentLoaded',function() {
    document.title=document.title.replace("Weblapok címének", "");
}, false);
})();

Itt a példában szereplő, két idézőjel közötti, "Weblapok címének" részt csípjük le, pontosabban cseréljük le a semmire, így ha mindent jól csináltunk, csak az "átalakítása" marad ezen az oldalon.

A két aposztróf közé írjuk be a lecsípendő részt. Ha a lecsípendő rész idézőjelet (") tartalmaz, akkor nem kell mást tennünk, ha viszont aposztrófot ('), akkor a zárójelek közötti két aposztrófot cseréljük le idézőjelekre, különben nem fog működni.

Az @include-ban a csillag helyére azokat a címeket írjuk, amiken akarjuk, hogy működjön a script, a többihez nem kell nyúlni.

A replace részt annyiszor ismételjük, ahány TITLE változtatásra szükségünk van. Tehát végső soron a kód ez:

// ==UserScript==
// @name		Tab Aliaser Mod
// @description	You can change the websites title with this script
// @author		bpm & Penge
// @thx-to		Mesmoryser & Dzsini
// @download	http://magyaropera.info/Javascript/tab-aliaser-unicode.js
// @include		*
// @include		http://my.opera.com/desktopteam/*
// ==/UserScript==

(function(){
document.addEventListener('DOMContentLoaded',function() {
//    if (location.href=='http://site.com/page')document.title='alias1';
//    if (location.href.indexOf('google.c') !=-1) document.title='alias2';
      document.title=document.title.replace("Weblapok címének", "");
      document.title=document.title.replace("Opera Desktop Team - ", "");
      document.title=document.title.replace("Details for torrent ", "");
      document.title=document.title.replace("Téma megtekintése - ", "");
      document.title=document.title.replace("A következő téma hozzászólásai: ", "");
}, false);
})();

Ha az első két változatot, ami a teljes domainre érvényes is szeretnéd használni, akkor töröld ki a kód elejéről a két per jelet (//). Ha valamelyiket nem akarod használni az 5 relace-es sorból, akkor törölheted az egész sort, vagy megoldhatod, hogy a sor elejére írsz két per jelet, ezzel deaktiválod az adott kódrészletet.

Tab aliaser letöltése

Az általam módosított script pedig itt van: Tab aliaser letöltése

A bejegyzés trackback címe:

https://magyaropera.blog.hu/api/trackback/id/tr652052487

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nekomajin · http://nekomajin.wordpress.com 2010.09.02. 19:59:05

Hatszor olvastam végig a posztot, de még mindig nem értem, hogy ez mire jó. Szokásom 1024 pixelen 10-20+ fület nyitva tartani, de még mindig megtaláltam max három próbálkozásból azt, amelyiket akartam. Bizonyos fülszám felett meg úgyis mindegy, mert csak a favicon látszik, vagy még az se. Ráadásul manuális szerkesztéssel még macerás is.

Mesmoryser 2010.09.02. 20:04:36

Sokkal egyszerűbb slice() számolgatás helyett replace()-t használni. A replace() első paramétere a keresendő minta, a második, hogy mire kell cserélni (jelen esetben törölni akarjuk, akkor üres string). Pl: document.title.replace(" blog", "")

penge™ · http://www.thevenusproject.com/ 2010.09.02. 20:42:14

@Nekomajin: Oldalra pakolva a füleket 40-50 fül látszik 20-25 karakteres címekkel. Jobb, ha nem a "XY Oldal", a "Téma megtekintése:" és társai foglalják el.

Akiknek felül vannak a fülek azoknak szintén jó, ha nem dinamikus fülszélességet használnak, illetve ha egynél több, de 30-nál nem több fület tartanak nyitva, hogy nem ezek a baromságok foglalják el. A favicon akkor nem ér semmit, ha egy fórum 10 topicja meg van nyitva és egyiknek sem látod a címét a hülye fórummotor miatt.

@Mesmoryser: Annyira egyszerűbb, hogy ha nem használsz RegExp-et, akkor eltünteti az egész title-t, illetve lecseréli teljesen az általad megadottra. Tehát dinamikus címeknél (például ahol a "A következő téma megtekintése:" állandó, de a topic címe változó, ott nem alkalmas.

Most kipróbáltam ezzel: if(document.title.indexOf("Weblapok címének")!=-1)document.title=document.title.replace("Weblapok címének","")

Az "átalakítása" nem maradt ott, mivel kéne a második két idézőjel közé egy RegExp paraméter, ami megmondja, hogy a többit ne tüntesse el.

AA slice-al viszont csak egyszerűen megszámolod a karaktereket, tehát olyan valaki is meg tudja csinálni, aki nem ért a JavaScripthez.

Mesmoryser 2010.09.02. 21:23:05

@penge™: Nem igazán értem, hogy az "átalakítása" miért nem maradt ott. Ha beírom az általad megadott kódot, akkor ez marad a title: "átalakítása - Magyar Opera". Mihez kéne itt RegExp? És a post utolsó mondatát sem értem, hogy 22-vel miért ne vágna le semmit. "javascript:if(document.title.indexOf('Opera Desktop Team - ') !=-1)document.title = document.title.slice(22);" nálam az "Opera Desktop Team - Dialogs and text input" postból "ialogs and text input"-ot csinál.

penge™ · http://www.thevenusproject.com/ 2010.09.02. 22:17:52

@Mesmoryser: javascript: formában működik. UserJS formában nem működik: kephost.hu/image-2156_4C80065A.jpg

Mesmoryser 2010.09.02. 22:33:17

Leírtam UserJS-be a képen láthatót, eredménye ezen a poszton: "átalakítása - Magyar Opera". Tehát továbbra sem értem.

Dzsini 2010.09.02. 22:33:40

@penge™: replace-nél minek egyáltalán ellenőrzés? fusson le, aztán ha nem talált, akkor cserél 0 darabot. Hasonló szövegeknél univerzálisan működhet.

penge™ · http://www.thevenusproject.com/ 2010.09.02. 22:51:42

@Mesmoryser: Most próbáltam ki portable 10.61-ben új profillal és nem működik, szóval passz.

penge™ · http://www.thevenusproject.com/ 2010.09.02. 22:54:40

@Dzsini: Hol van ellenőrzés? Egy névtelen függvény van, ami anonimizálja a scriptet és egy eseménykezelő (DOMContentLoaded), hogy mikor töltődjön be a script.

MosoMasa 2010.09.02. 23:08:56

@penge™: És ezt minden rövidítendő oldalnál meg kellen csinálnom? Mármint, hogy kiszámolgatom és beírkálom?

Fefy · http://blog.fefy.info/ 2010.09.02. 23:18:26

@penge™: a replace-nek pedig működnie kell(ene), mivel pár helyen én is használom, ahol a szakbarbár webmester nem figyel a karakterkódolásra és ennek következtében az ékezetes karakterek elrontódnak (nem egységes iso/utf kódolás használat esetén). Egyébként kb 10.10 óta használom, és eddig egy buildben volt problémám vele, de az is az én hibám volt.

off: nézted azóta a progit? (még mindig a régi linket kell használni)

Fefy · http://blog.fefy.info/ 2010.09.02. 23:21:16

@MosoMasa: ha nem akarod számolgatni, akkor be lehet rakni egy változóba a cserélendő szöveget, és a javascript-et is meg lehet kérni, hogy számolja meg neked a hosszát :P

penge™ · http://www.thevenusproject.com/ 2010.09.02. 23:56:47

@MosoMasa: A slice-os megoldással igen (habár a karakterszámlálóval kombinálva ez nem annyira bonyolult), a replace-szel nem. Én olyan gyakran nem veszek fel benne új oldalakat, hogy ez probléma legyen.

@Fefy: Igen néztem és már kint is van: magyaropera.blog.hu/2010/08/24/userjs_telepitese

A forrást még közzétehetnéd valahol, akkor írnék egy postot a My Operára is, hátha felkapják EspenAO-ék és kirakják a Choose Operára, ahol több embert is elér.

Amúgy rájöttem mi volt a hiba. ANSI kódolású volt és nem szerette az ékezetet (és az a buta Notepad csak ő és ű betűnél szól, amiből előzékenyen o és u betűket csinál).

Na mindegy, mától Notepad++-t használok. Már ideje volt.

Fefy · http://blog.fefy.info/ 2010.09.03. 01:11:04

@penge™: oks, a forrást közzéteszem a hétvégén valahol, aztán felőlem akár az opera főoldalára is mehet :D

Nekomajin · http://nekomajin.wordpress.com 2010.09.03. 03:13:08

@penge™: Hm, az oldalra pakolt fülekre nem gondoltam. Viszont akkor advenced fülhasználónak tekintem magam ezentúl, mert nekem nagyon megy a megfelelő fül kiválasztása "vakon". :D

Dzsini 2010.09.03. 06:48:03

@penge™: "hol van ellenőrzés?"
ajánlom figyelmedbe a függvény elején szereplő "if" szócskát: javascript:_if_(document.title.indexOf('Opera Desktop Team - ') !=-1)document.title = document.title.slice(22);"

HA benne van ez a rész, AKKOR történjen meg a vágás. ez két utasítás, amit egymás után kell végrehajtani. Replace-t használva nincs szükség az IF részre, hanem simán rá lehet ereszteni a címre, ha nincs benne nem fog ártani neki.

(regexp-el még elegánsabb lenne, mert a kis-nagybetűket egyszerre le lehetne kezelni, viszont az átlag felhasználó nem tudná könnyen szerkeszteni. Ellenben lehetne egy tömböt csinálni, amibe be lehet írni a nem szükséges karakterláncokat, és a scriptben egy ciklussal csak azokon kell végigrohanni)

Mesmoryser 2010.09.03. 13:19:44

@penge™: A "nem működik" helyett valami bővebbet is írhatnál.
És ahogy Dzsini mondja, tök fölösleges az ellenőrzés, hát még slice()-al bajlódni. A slice akkor lenne jó, ha nem tudnánk, hogy mit akarunk levágni. Például ha a "Weblapok címének átalakítása - Magyar Opera" címből csak a Magyar Operát akarnánk meghagyni (és nem akarunk RegExpet használni), akkor slice-al is meg lehet csinálni, de gondolom nem ez a cél, hanem pont a post címét akarjuk meghagyni, tehát a statikusat törölni. Arra meg legegyszerűbb a replace().

Én ezt az egész túlbonyolított, értelmetlen postot törölném és újraírnám 5 sorban, érthetően.

penge™ · http://www.thevenusproject.com/ 2010.09.03. 16:26:46

@Dzsini: @Mesmoryser: 1: Error Console üres volt (vagyis ezen a blogon eleve beömlik vagy 20 hiba, de egyik sem a userJS-re utalt)

2: A kód ott volt, a UserJS pedig vagy működik vagy nem. A működik azt jelenti, hogy azt csinálja, amit a kód alapján kell neki, a nem működik pedig (részletezés nélkül) azt jelenti, hogy konkrétan nem csinál semmit.

A félig működik viszont valóban részletezésre szorul.

A postot javítottam.

Dzsini 2010.09.03. 16:53:00

sokkal elegánsabb így, könnyebb bővíteni is, köszönet érte!

kérdés: miért nem veszi észre az UJS Manager unite app, ha egy .js-t nyitok meg? régen becsúszott felül a 'szeretnéd telepíteni?' kérdés, most meg kuka. próbáltam törölni-újratelepíteni az appot, törölni az appdatából is és úgy újratelepíteni...

penge™ · http://www.thevenusproject.com/ 2010.09.03. 17:03:52

@Dzsini: Nem tudom. Pedig kéne neki. Amúgy azért nem a Unite App felel, hanem a kis userjsmanager_installer.js, amit a UJS Manager pakol az alapértelmezett userJS mappádba. Tehát az a kis beúszó még Unite nélkül is működik, csak ha nem fut akkor nem tud telepíteni.

Dzsini 2010.09.03. 17:11:45

egy ujs_manager_installer.js -em van, és engedélyezett is... a leírás alapján 0.9-es verzió

ahogy beleolvastam még működnie is kellene, ha *.js*-ot talál.

a többi scriptem gond nélkül működik, csak ez nem... nem értem :(

penge™ · http://www.thevenusproject.com/ 2010.09.03. 17:29:38

@Dzsini: Kezdetnek szedd ki a többi scriptet és nézd meg úgy, hogy működik-e. Ha nem, akkor valami más probléma van.

Mesmoryser 2010.09.03. 17:30:34

@penge™: Így már jó lett a post :) Pár észrevétel:

desktopteames @include sor fölösleges

"Weblapok címének" csere ugyancsak ne maradjon benne egy végleges kódban

Mutassuk meg a replace()-ben rejlő lehetőséget, például egy ilyen sorral:
document.title=document.title.replace(" - Wikipedia, the free encyclopedia", "Wikipedia-en");
(ebből látszik, hogy nem csak törölni lehet replace-el, és praktikus is, mert azonnal látszik, hogy az angol wiki van a tabon)

penge™ · http://www.thevenusproject.com/ 2010.09.03. 17:45:18

@Mesmoryser: Javítva. A másik include véletlenül maradt benne, mert én a biztonság kedvéért csak ott engedélyeztem, ahol kellett.

Dzsini 2010.09.03. 18:07:23

@penge™: jó ötlet volt - az oAutoPagerize borítja meg, anélkül működik, de amint azt bekapcsolom már nem indul be...

annyira viszont nem értek a Javascripthez, hogy megtaláljam miért nem működnek együtt, az autopagerize túl bonyolult :( valaki?

Dzsini 2010.09.03. 18:10:13

@Dzsini: azt hiszem megvan, kapott a pagerize egy @exclude *.js -t, és akkor "átengedi" az utat az installernek... (és remélem nem romlik el tőle máshol)

penge™ · http://www.thevenusproject.com/ 2010.09.03. 18:31:24

@Dzsini: Ugye az oAutopagerize fájlod az 1.5.2-es verzió (legújabb)?

Mert én is használom és nálam nem kavar be. A SITEINFO pedig kb óránként frissül.

Dzsini 2010.09.03. 18:59:20

@penge™: igen, 1.5.2-es, a siteinfo nem is kavar be neki (kipróbáltam csak azt bekapcsolva)

Nekomajin · http://nekomajin.wordpress.com 2010.09.05. 14:15:01

Ha már userJS-es poszt, akkor ide írom. Nem tud valaki olyan scriptet linkelni/írni, ami a "share gomb" retkeknél az onMouseOver eseményt lecserélni onClickre?