Постове 6 - 10 от 17 в категория Browser

Jun 15

Доста често напоследък ми се налага да правя динамични страници изцяло задвижвани от javascript, като при тях постоянно се добавят и махат dom елементи. Което значи непрекъснато да се добавят и махат event хандлъри, което е меко казано досадно и води до много грешки. Но с вградените в CD3.Behaviors event delegation функции (за тях специално ще има поне един цял пост) тази работа е много лесна, просто делегирам всички действия към елементи които няма да се променят.

До тук всичко звучи много добре, но както винаги IE се появява на сцената с бъг, който е, че submit действието няма bubbling (т.е. не се делегира към родителските елементи на формата). Което е в пълен разрез със спецификация, но какво да се прави свикнали сме.

Този проблем го знам от много време и винаги го заобикалях по един или друг начин. Но наскоро на колега му трябваше бързо решение, което да може да ползва на 2 – 3 места затова за няколко минути написах това за Prototype.js:

Element.addMethods({
    delegateSubmit: function(element, callback){
        return $(element)
            .observe('click', function(e){
                if (e.findElement('form') && e.findElement('input[type=submit],input[type=image]'))
                    callback.call(this, e);
            })
            .observe('keyup', function(e){
                if (e.keyCode  == Event.KEY_RETURN && e.findElement('input') && e.findElement('form'))
                    callback.call(this, e);
            })
        }
});

Като цяло това, което прави тази функция е, че наблюдава за натискане на submit или image бутони или за натискане на enter върху някои input. Лошото в случая е, че страдат и нормалните браузъри като Firefox или Safari.

Затова направих нова версия, която засича дали submit се делегира (за начина, по който разбирам пише по-подробно в тази статия – Detecting event support without browser sniffing)

Element.addMethods({
    delegateSubmit: (function(){
        var el = document.createElement('div'), isSupported = 'onsubmit' in el;

        if (!isSupported){
            el.setAttribute('onsubmit', 'return;');
            isSupported = typeof el.onsubmit == 'function';
        }

        return isSupported ? function(element, callback){
            return Event.observe(element, 'submit', callback);
        } : function(element, callback){
            return $(element)
                .observe('click', function(e){
                    if (e.findElement('form') && e.findElement('input[type=submit],input[type=image]'))
                        callback.call(this, e);
                })
                .observe('keyup', function(e){
                    if (e.keyCode  == Event.KEY_RETURN && e.findElement('input') && e.findElement('form'))
                        callback.call(this, e);
                    })
        };
    })()
});

Това е доста по-добро решение което оправя проблема със submit само, когато има такъв проблем.

Тук бих могъл примерно да използвам Function.wrap върху Event.observe, но нещо не съм фен такива monkey patching неща. А и по-скоро това и хака за делегиране на focus/blur под IE ще са част от моята Event.delegate, която ако имам късмет ще е част от Prototype.js.

Ако някой има по-елегантно решение, няма да му се разсърдя ако го сподели.

Dec 05

Преди 1-2 няколко седмици бях написал едно постче с интересни неща през седмицата. Днес пак имам малко свободно време реших да направа подобен пост, даже се чудя дали да не стане традиция.

Вторник, 2ри Декември 2008: Вълка от Уолстрийт (откъс)

Доста интересна изглежда тази книжка. И ако не спечеля “Майсторите на маркетинга разказват” от NovaVizia това ще е следващата книга която ще прочета. В нея става дума за Джордан Белфърт, основателят на скандалноизвестната инвестиционна компания „Стратън Оукмънт”, наричан Вълка на Уолстрийт. Човека на 26 вече е милионер, изкаващ хиляди долари на вечер, на 36 вече обитател на луксозна килия.

Сряда, 3ти Декември 2008: Python 3.0 излезе

Няколко пъти пробвах да мина в python лагера, но тогава са появиха Ruby  и Rails и така си останах. Но това не ми пречи да поглеждам какво става python света. Версия 3.0, или Python 3000 както я виждам написана на няколко места вече, има доста радикални промени и миграцията от предишната версия към тази ще е “доста интресна”. Пълния списък с промените може да по да видите тук – What’s New In Python 3.0. Поне по отзивите, който виждам из нет-а на Python-аджии изглежда че повечето промени са за добро.

Също така забелязах това в githubcertik / python3.0, което ако съм разбрал правилно working версията на Python и това значи, че ще се работи през github.

Четвъртак, 4ти Декември 2008:

What the Ad? – Big Promises

The Daily WTF, е един от любимите ми блогове, там иматакива попадения и истории. Че всеки път като си помисля че нещата не може да са направени по-зле само един поглед там :) Статията, която ми се строри най-забавна тази седмица е са малко рекламни банера с много силни думи :)

Square is the new round.

Google явно са решили да сменят фасана на продуктите си, първо беше gmail, а сега и моя любим GoogleReader вече има нов скин. Малко ми е страннен още и някой неща като чели не са си мястото. Може това да ми помогне да си намаля броя посещения на ден към google reader-a ми :)

Songbird 1.0 – не просто следващият медия плеър

Това изглежда доста обещаващо и след като се върна от 8ми септември мисля да го пробвам.

Петък, 5ти Декември 2008: Ajaxian – MooTools and Sizzle и Sizzle Engine in Dojo

Следя Sizzle от доста време и като цяло изглежда доста добро нещо. Но и съм и съгласен с Valerio Proietti, че Sizzle би добър за jquery (няма да кажа кой ги прави и двете) и за dojo, но за prototype и mootools нещата са малко по-различни. Освен нещата който е споменал Valerio Proietti, аз имам опасението че sizzle не може да се възползва от полезните добавки от на prototype и други. Въпреки това Sizzle e интересно да се наблюдава.

Други интересни неща, които мернах през седмицата:

Adobe Labs: Text Layout Framework – Много впечатляващо нещо, доста ме впечатли демото.
PHP 5.3 Released Guidelines -  За нещастие нещо  като много замряла работа напоследък. PHP5.3 Alpha3/Beta 1 вече трябваше да е готова :( Но дано като е готова namespaces-a са разделени с :: или нещо по-добро от сегашното отвратително /

Sep 19

Сутринта видях това в builderau.com:

Firefox 3.1 Alpha 2 developer features

Тук става дума за новите неща в Firefox 3.1, която се очаква съвсем скоро да излезе. Основните функции които се споменават тук са:

  • Web worker threads – най-важното от всички, според мен. Това че по-тежките javascript действия, ще бъдат отделени в нова нишка, е страхотно. И май в скоро време Firefox, може да последва примера на Google Chrome.
  • HTML5 Video tag -  добре е че все повече браузъри почват да го поддържат и дано до 1-2 години да може да спокойно да се ползва в production сайтове.
  • CSS2.1 селектори ::before ::after – Страхотно е че ги има тези двете вече, защото във internal нещата, които ползвам работят само под Firefox така че тези ще са полезни
  • CSS3 атрибути -moz-border-image, Word-wrap, Text-shadow, box-shadow and column rule

Като цяло си мисля само, че web work threads и TraceMonkey, за който  John Resign доста говори напоследък, са нещата които могат да бъдат използвани от developer-ите още сега. А пък поддръжката на CSS2.1/CSS3/HTML5 е важна в дългосрочен план, защото колкото повече браузъри вградят тези технологии, толкова по бързо ще може наистина да ги използваме.

Sep 03

Вчера Google Chrome беше обявен официално. Днес вече може да се свали и бетата:

http://www.google.com/chrome

Доста добре изглежда и се държи. Има 2-3 неща, които чупи в проекта, който правя сега, но това е нормално, а и още е бета. Даже и Developer tools си има, които, по мое мнение са доста по-добри от DragonFly за Opera (ей, тези дни много съм й го насъбрал на Opera). Естествено пак ми липсват “малките” неща, но няма как такъв е живота.

Също така вече V8 (Javascript виртуалната машина на Chrome) започна да се сравнява със старите пушки в бизнеса като SpiderMonkey, Futhark, JavaScriptCore и други javascript виртуални машини.

John Resign наскоро писа по въпроса тук: http://ejohn.org/blog/javascript-performance-rundown/.

Това, което ми е по-интересно е една стара статия от CNNMoney.com, от първи Февуари 2006:

Imagining the Google Future

Доста налудничава на моменти, да не говоря колко хора ми се смяха като им разказвах за нея (ама те и за това че Испания, ще стане Европейски шампион ми се смяха, ама после :) ). Та в тази статия има четири сценария:

  • Scenario 1 (Circa 2025): Google Is The Media
  • Scenario 2 (Circa 2015): Google is the Internet
  • Scenario 3 (Circa 2020): Google is Dead
  • Scenario 4 (Circa 2105): Google is God

Поне като гледам вчера почваме да се движим по втора версия – Google is the Internet ето един малък цитат от там:

The upshot was that it became far faster and easier to use Google’s copy of the Web than the slowpoke Web itself. That’s why Gbrowser, launched in 2008 (though the domain name was registered in 2004), took off: It had priority access to Google’s version of the Web, unlike Microsoft’s long-defunct Internet Explorer. Gbrowser also had scads of useful new features, like a commission-free micropayment system that superseded PayPal and (in conjunction with the virtual stores on Google Base) eventually drove once-powerful auction site eBay to the edge of bankruptcy…

Доста интересно, нали?

update: Днес видях това: Google Chrome privacy worse than you think, е малко много плашещо :( .

Sep 02

Основната новина днес, освен трансфера на Димитър Бербатов в , ненавиждания от мен Манчестър Юнайтед, е че Google обявиха официално че разработват свой браузър – Google Chrome. Първата новина (за Бербатов) е добра, въпреки че не харесвам Юнайтед му пожелавам успехи. Но Google Chrome не ме радва толкова, даже никак не ме радва.

(картинката я видях в http://www.gnucitizen.org/blog/google-chrome/)

Какво ще има в  Google Chrome, стандартното невероятен нов интерфейс, по-прост по-интуитивен, което не е нещо ново. По интересните неща са:

  • Нова JavaScript виртуална машина
  • GoogleGears вложен в самия браузър
  • Табчета ще са над адрес бара (странно нали!)
  • Всеки таб ще бъде различен процес и няма да влияе на другите табове (както е сега във всички браузъри), т.е. Chrome ще е multi-threaded.
  • Memory Manager за всеки отделен tab
  • Нещо подобно на Mozilla Prism
Горе долу това ми се виждат интересните неща. Може би най-интересното е multi-threaded и Memory Manager -a. Има и доста интересен комикс по темата, който може да видите тук.
Ето и малко снимки:
А сега защо гледам негативно на нещата ? Ами защо ни е още един браузър, не ми стигат ядовете със IE6, IE7 и напоследък с Opera. Дано Google да го направят максимално “стандартен”, и да но поне в това отношения да прилича на FireFox и Safari. Друг е въпроса че вече очаквам и OS да направят, то те имат  Google Android, но за PC си мисля.