weboholic.de

random rant-o-rama

Archive for the ‘javascript’ tag

Обичам Букмарклети

with one comment

Преди малко попаднах на поредния букмарклет, който прибавих в моята колекция. Искам да изкажа моята любов към букмарклетите, като постна тези, които ползвам.

  • dotProject Log Date: datepicker‘а на dotProject е отвратителен, а често ми се налага да сменям датата на логовете; моя разработка.
  • Go 2: от време на време лисицата се чупи и отказва да зарежда нови страници при вкарано на ръка URL в adressbar‘а; моя разработка.
  • hCard Wizard: позволява генерирането на hCard микроформата.
  • jQuerify: инжектира страхотната jQuery библиотека и предоставя всичките й предимства at your finger tips в конзолата на Firebug.
  • Long URL Please: превръща кратки URLs (TinyURL и други подобни) в дълги и четливи.
  • Share & Note in Reader: позволява споделянето на всяка страница в Reader’а.
  • Post 2 del.icio.us: добавя отметка към страницата в del.icio.us.
  • Twitter Single Reply: от известно време е obsolete, но си остава класически пример за силата на букмарклетите.
  • Show Nofollow: бърже анализира и подчертава линковете, които са с отметка nofollow; моя разработка.
  • Up: отива едно ниво на горе в йерархията на URL’то; не е мой, но не мога да го намеря в интернет.
  • Visual Event: елегантно показва елементите на страницата, за които има прикачен behaviour.
  • Webmail Select: уеб интерфейсът на Exchange е отвратителен от гледна точка на usability, като това е изключително дразнещо, когато трябва да се селектират много мейли в една папка, а този букмарклет ги селектира с един единствен клик, като знам също, че работи и със SquirrelMail; моя разработка.
  • WTFramework: анализира страницата и рапортува, коя библиотека ползва.

Какви други яки букмарклети може да ми предложите?

Written by Никола

December 26th, 2008 at 6:50 pm

about: Google Chrome

without comments

Много хора направиха пробно пътуване с гугълския браузър Хром, аз го поканих на среща – ползвам го като основен браузър вече няколко дена.

Ето моите положителни впечатления:

  • Отделните табове протичат в собствен процес – ако някоя страница е бъгава, то тя не блокира целия браузър;
  • Табовете са в пясъчник, повишавайки сигурността;
  • Стартира изключително бързо;
  • Уеб апликациите са изключително бързи благодарение на нова виртуална машина – V8, пак от Гугъл;
  • Има изчистен интерфейс, който лесно пристрастява – иначе отделни по функция елементи са групирани в един умен елемент;
  • Под капака работи WebKit, което гарантира силна поддръжка на уеб стандартите;
  • Кутийката за търсене в дадена страница и прилежащата й функция са реализирани много успешно;
  • И Хром и V8 са с отворен код и съответен лиценз.

И моите негативни впечатления:

  • Инспекторът се отваря в нов прозорец, а не е приложен към таба, който го е извикал; бутончето, което трябва да го прикачи обратно към таба не работи;
  • Инспекторът е инспириран от Firebug, разбира се, но все още не е това, което трябва да бъде;
  • Инспекторът на записва XmlHttpRequest (или аз съм глупав?);
  • Отваряйки линк в нов таб, то този таб се намества веднага след активния и измества останалите с една позиция надясно;
  • Продуктът е все е още бета и няма разработено API за допълнителни приставки, като най-много ми липсват следните: RTM за GMail, NoScript, AdBlock, HttpFox, Web Developer Toolbar и Foxmarks;
  • Плъгините, като Флаш, все още не са в пясъчника и са отделен процес за всички табове. Това от една страна намалява сигурността, от друга позволява на един плъгин да крашне всички табове;
  • Няма бърз и лесен начин за превключване между различните търсачки, чрез шорткът примерно;
  • Трябва първо страницата да бъде посетена и да бъде извършено търсене, тогава Хром запомня това търсене и търсачката е добавена;
  • За да се ползват многото различни търсачки, трябва да се запомнят URL’тата;
  • Не всички страници, на които има кутийка за търсене, биват разпознати;
  • Има проверка само на английския правопис;
  • Актуализира се автоматично без дори да информира потребителя

Наттъкнах се и на неприятна недосмислица във връзка с табовете и отделните процеси. До колкото успях да проуча, решението, дали един таб да стартира нов процес, зависи от домейна. Ако съм примерно на адрес http://example.com и отворя http://example.com/contact в нов таб, то тогава не се стартира нов процес. Поведението е същото, дори и при събдомейни. Това е един добър евристичен метод, но не мисля, че е оптимален. Гугъл Мейл, Гугъл Календар, Гугъл Документи и Гугъл Рийдър са все различни апликации. Общото между тях, освен че са на Гугъл де :), е, че са на един топ домейн и съответно протичат в един процес, ако потребителят ги е отворил чрез кликване на линкове към тях в една сесия. Това означава, че ако работя над даден документ и крашне ГМейл примерно, то тогава и документът отива на кино. А един от силните аргументи на отделните процеси е именно, че крашването на един таб не води да крашване на други и съответно да загуба на информация.
Наблюдавам и друг проблем с евристиката при стартиране на нов процес, но само при линкове в Гугъл Рийдър. Рийдър винаги отваря линковете в нов таб, респективно прозорец. С други думи има три начина за отваряне на линк: клик, среден клик, десен клик и избиране на опцията. “Клик” и “среден клик” отварят новия таб в същия процес, а “десен клик” стартита нов. Трябва и трите клика да стартират нов процес. Пуснах им бележка на Гугъл. Но истинският проблем може и да е в Рийдър, а не в Хром. В тази връзка забелязвам, че започнах и в другите браузъри да отварям линковете не със среден клик, ами с десен :).

Очаквам наистина интересна битка между отделните вендори. Но се опасявам, че Хром ще отмъкне повече потребители от Файърфокс, от колкото от ИЕ. Дано се лъжа обаче. Аз, for the time being, ще карам паралелно с два браузъра: Хром за всички гугълски апликации и Файърфокс за всичко останало.

Written by Никола

September 11th, 2008 at 9:05 pm

Re: Dustin’s Brain Teaser

without comments

I’m a bit late, but rather later then never :). I just didn’t had even 10 Minutes spare time in the last few days.

Here is my response to Dustin’s brain teaser. I’m offering a solution without regular expressions. Though after reading the problem I first thought “Nice, I’ll use regular expressions.”. But then I realized that now I’m facing two problems :). I’m really not that good at regexps.
But I promise I’ll keep the teaser in mind and one day I’ll solve it with regular expressions.

  1. var teaserNoRegExp = function() {
  2.   var input = ['a', 'b', 'c', 'c', 'd','e', 'e','e', 'e',
  3. 'e', 'f', 'e', 'f', 'e','f', 'a', 'a', 'a', 'f', 'f', 'f'];
  4.   var output = '';
  5.  
  6.   // assume Array.prototype.forEach
  7.  
  8.   var spanOpened = false;
  9.   input.forEach(function(el, index, input){
  10.     if (input[index-1] == el && input[index-2] == el && !spanOpened) {
  11.       output = output + '<span>';
  12.       spanOpened = true;
  13.     }
  14.     output = output + ' ' + el;
  15.     if (input[index+1] != el && spanOpened) {
  16.       output = output + '</span>';
  17.       spanOpened = false;
  18.     }
  19.   });
  20.   document.getElementById('result').value = output;
  21. };

P.S. It actually took me a minute or two to write it down.

Written by Никола

July 10th, 2008 at 9:35 pm

Posted in Бележки

Tagged with , ,

nofollow Bookmarklet

with one comment

Here is a smallish bookmarklet that highlights all links that are marked with the nofollow attribute. Just drag and drop it to your bookmarks bar.

show nofollow

In its current version the bookmarklet is very very simple: it just highlights nofollow-links and reports back the total number. However it only works on frameless documents.

Here’s the code in a readable <code>-block:

  1. javascript:(function(){
  2.   for (var i = 0, a = document.getElementsByTagName('a'), b = a.length, c = b; i < b; i++) {
  3.     a[i].rel.match(/nofollow/i) ? a[i].style.backgroundColor = '#ff0066' : c–;
  4.   }
  5.   alert(c);
  6. })();

That’s the shortest I could get. Have fun :).

P.S. You can test-drive it right away on this page: the about-link in the footer is a nofollow-link.

P.P.S. It’s the browser that turns a double minus into a single long dash.

Written by Никола

June 14th, 2008 at 12:39 pm

Unobtrusive Smilies :)

without comments

I don’t know whether you may find use for this, it might be a complete overhaul, but anyway.

Smilies are small inline images that represent a mood like being sad :( or help enrich the context with some emotion like winking after a joke ;). Everybody uses them but no one actually puts down those img-tags: we rely on our smart CMS’s to the job. Smilies are accessible since screen readers use either the title or the alternative text attributes of the img-tag. The problem is that such inline images aren’t semantically correct: they should be part of the text as text and not as images.

I’ve put down a small (~2KB minified) mixture which filters all smilies and replaces them with images in an unobtrusive way.

Download uns v. 0.2

What is the basic?

Default behavior is to query the document for span-tags that have the class smiley. Each one option is customizable.

What’s the compatibility?

It’s known to work with Firefox 2, Firefox 3, IE5.5, IE6, IE7, Safari 3 and Opera 9 under Windows, Safari 3 under Mac OS X and Konqueror 3.5 under Kubuntu.

How to trigger it?

Use it just as any other unobtrusive JavaScript out there:

  1. window.onload = function() {
  2.   uns.parse();
  3. };

Or gain performance by providing a node where smilies are to be found, like the main content div-block:

  1. window.onload = function() {
  2.   uns.parse({node: document.getElementById('content')});
  3. };

You can also provide an onfinish callback:

  1. window.onload = function() {
  2.   uns.parse({
  3.     node: document.getElementById('content'),
  4.     onfinish: function() {
  5.       alert('finished');
  6.     }
  7.   });
  8. };

Or you can add additional smilies:

  1. window.onload = function() {
  2.   uns.smilies({
  3.     ':cska:': 'images/cska.gif'
  4.   });
  5.   uns.parse();
  6. };

You can also AJAX load new content into some poor div and run the parser afterwards:

  1. xhr.onreadystatechange = function() {
  2.   if (xhr.readyState == 4) {
  3.     var comments = document.getElementById('comments');
  4.     comments.innerHtml = xhr.responseText;
  5.     uns.parse({node: comments});
  6.   }
  7. };

Where can it be seen?

I’ve put down a small demo.

Log

20.02.2008: 0.1 Initial release.
22.02.2008: 0.2 Added support for native getElementsByClassName and tested with Firefox 3, added support for IE5.5 and IE6.

Written by Никола

February 20th, 2008 at 11:01 am

Posted in Development

Tagged with , ,

about: Деактивиран JavaScript

without comments

about-disabled-javascript

Просто се чудя … как точно протичат нещата? Седис си в офиса и посещаваш някаква страница, която изисква JavaScript. И отиваш при админа и казваш: баце, харча времето и парите на компанията гледайки глупости по мрежата, ама нещо не работи … може ли да погледнеш малко?

Written by Никола

January 6th, 2008 at 10:26 am

Posted in Препънки

Tagged with ,

Страницата на Луфтханза е Лоша, Продължение

without comments

Преди известно време се оплаках от достъпността на страницата на Луфтханза. Въпросът не е изчерпан.

Преди две седмици пътувах с полет на Луфтханза от FRA до SOF. Наслаждавайки се на перфектния полет, имах възможност да прегледам списанието на Луфтханза. Учудването ми бе голямо, като открих, че същата страница е спечила наградата “CeBIT Usability Award for customer friendliness“.

Чудно ми е, как е възможно една страница да спечели награда за ползваемост, след като не можеш да логнеш заради някаква глупава флаш реклама? Изобщо, как може една страница, която изисква JavaScript и не деградира елегантно, да бъде наречена “usable” … in the first place. Или журито тества само на стандартна Windows инсталация със стандартните настройки на IE?

lufthansapart21

lufthansapart22

lufthansapart23

Poor judgement, казвам, poor implementation.

Written by Никола

December 26th, 2007 at 9:45 am

Цитат: JavaScript

without comments

If you are writing applications in Java, you do not have to be prepared for having Java turned off. But because of the browser’s long and tragic history of security screwups, JavaScript does get turned off. It is ultimately the only security control given to users that works. So not only does the programmer have to be prepared for failure, the program is expected to fail gracefully.

Дъглас Крокфорд

Written by Никола

November 12th, 2007 at 9:22 am

Posted in Цитати

Tagged with

Страницата на Луфтханза е Лоша

with 2 comments

lufthansa

В: Как да се логна в lufthansa.com?
A: Разкарва се флаш обекта с някой DOM редактор, примерно Firebug, или се блокира Adblock Plus.

Update 26.12: Изживяно с Firefox 2 на Kubuntu 7.04.

Written by Никола

October 17th, 2007 at 12:12 am

Firebug Рокира

with 2 comments

firebugrocks

Не че не знаех, но винаги е хубаво някой да се грижи за теб. Още повече, ако е великият Firebug.

Written by Никола

September 25th, 2007 at 12:00 am

Clicky Web Analytics