<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NilColor &#187; javascript</title>
	<atom:link href="http://nilcolor.com/category/tech/javascript-tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://nilcolor.com</link>
	<description>Guess what? You&#039;re on my site!</description>
	<lastBuildDate>Thu, 06 Oct 2011 05:31:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Explain to me what JavaScript is&#8230;</title>
		<link>http://nilcolor.com/2011/09/14/explain-to-me-what-javascript-is/</link>
		<comments>http://nilcolor.com/2011/09/14/explain-to-me-what-javascript-is/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 11:08:01 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[lifestyle]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=703</guid>
		<description><![CDATA[Одно из самых литературных объяснений &#8211; &#8220;что такое JavaScript и причем тут Java&#8221;. Here is something else you should know about Javascript that seems like it was almost designed to be confusing as possible: There is a programming language called Javascript. There is a programming language called Java. There is an interpreter (&#8216;thing that makes [...]]]></description>
			<content:encoded><![CDATA[<p>Одно из самых литературных объяснений &#8211; <a href="http://ask.metafilter.com/195482/Lets-assume-that-I-am-the-stupidest-person-that-ever-lived-Explain-to-me-what-JavaScript-is-what-it-does-and-how-a-moron-would-go-about-learning-it#2813956">&#8220;что такое JavaScript и причем тут Java&#8221;</a>.</p>

<blockquote>
  <p>Here is something else you should know about Javascript that seems like it was almost designed to be confusing as possible:</p>
  
  <ul>
  <li>There is a programming language called Javascript.  </li>
  <li>There is a programming language called Java.  </li>
  <li>There is an interpreter (&#8216;thing that makes it go&#8217;) for the programming language Javascript built into most web browsers  </li>
  <li>There is an interpreter for the programming language Java that is sort of built in to most web browsers, or was.  </li>
  <li>THESE TWO PROGRAMMING LANGUAGES HAVE ALMOST NOTHING TO DO WITH EACH OTHER  </li>
  </ul>
</blockquote>

<p>Кратко и ёмко. Затрагивается даже история создания <a href="https://developer.mozilla.org/en/JavaScript">JavaScript</a>&#8230;</p>

<blockquote>
  <p>So Netscape said to a guy named Brendan, who worked at Netscape, &#8220;Please make us a programming language.<br />
  Also, you have to call it Javascript.<br />
  Also, if you can make some of it kind-of sort-of look a bit like Java, that would be even better.<br />
  Also, you have only 10 days to do this so get cracking!&#8221;</p>
</blockquote>

<p>В общем почитайте.</p>

<p>ɹoןoɔןıu</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/09/14/explain-to-me-what-javascript-is/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryUI custom widget</title>
		<link>http://nilcolor.com/2010/10/11/jqueryui-custom-widget/</link>
		<comments>http://nilcolor.com/2010/10/11/jqueryui-custom-widget/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 12:12:01 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryui]]></category>
		<category><![CDATA[jsbin]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=638</guid>
		<description><![CDATA[Куда ж еще записать, как не сюда? Итак, есть идея &#8211; сделать свой виджет для jQueryUI. Почему именно эта библиотека? А не важно. Просто мне она нравится. Итак, виджет. Вот &#8220;скелет&#8221; для виджета плюс несколько забавностей, на которые я набрел: (function($, window, document, undefined){ //handy log function window.log = function(){ log.history = log.history &#124;&#124; []; [...]]]></description>
			<content:encoded><![CDATA[<p>Куда ж еще записать, как не сюда?<br />
Итак, есть идея &#8211; сделать свой виджет для  jQueryUI. Почему именно эта библиотека? А не важно. Просто мне она нравится. Итак, виджет. Вот &#8220;скелет&#8221; для виджета плюс несколько забавностей, на которые я набрел:</p>

<pre><code>(function($, window, document, undefined){
  //handy log function
  window.log = function(){
    log.history = log.history || [];
    log.history.push(arguments);
    if(this.console)
      console.log( Array.prototype.slice.call(arguments) );
  };

  $.extend($.expr[':'], {
    lookup: function(a){return a.getAttribute('t2-ui-role') === 'lookup';}
  });

  var Lookup = {
    options: {
      version: '0',
      icon: 'search'
    },
    currentlyActiveLookup: null,
    _create: function(){
      var self = this,
          el = self.element;
      self.options.icons.primary = self.icon;
      //log('element IS'+(el.jquery?'':' NOT')+' jQuery object');

      $.ui.button.prototype._create.apply(self);

      self._setOption('icons', {
        primary:'ui-icon-'+self.options.icon,
        secondary:null
      });

      el.bind('click', function(e){
        e.preventDefault();
        e.stopPropagation();
        $(e.target).trigger('lookup.t2', {lookup:this});
        self._trigger('activated', null, {lookup:this});
        return false;
      });
    },
    _init: function(){ log('_init'); },
    boom: function(){ log('nice, you boom me!'); }
  };

  $.widget('t2.lookup', $.ui.button, Lookup);//NS doesn't mean something yet

  //====================== RUN CODE HERE ======================
  $('#id_ref_button').button({icons:{primary: "ui-icon-search"}});

  var l1 = $(':lookup').lookup({
    activated: function(e, data){ //tightly coupled
      log('activated callback fired');
      log('  '+data, data.lookup);
    }
  });
  // a-la Observer Pattern
  $('body').bind('lookup.t2', function(e, data){ //loosely coupled v.1
    log('lookup.t2 event catched');
    log('  '+data, data ? data.lookup : 'nope');
  });
  $('body').bind('lookupactivated', function(e, data){ //loosely coupled v.2
    log('lookupactivated event catched');              //why not activated.lookup?
    log('  '+data, data.lookup);
  });

  l1.lookup('boom');

})(jQuery, window, window.document)
</code></pre>

<p>Самое странное &#8211; это то, как виджет может общаться с внешним миром&#8230; Итак, есть конечно стандартный (для пользователей jQuery) способ <code>.trigger()</code>. Ловить такие события можно тоже стандартным способом &#8211; <code>.bind()</code>. Тут вроде все просто и все понятно. Далее, jQueryUI предлагает свой способ: <code>this._trigger(type, event, data)</code>. Где первый параметр это имя события, второй &#8211; это <a href="http://api.jquery.com/category/events/event-object/">jQuery.Even object</a>. Третий &#8211; это что-то, что вы еще хотите передать в это событие. Учтите, что третий параметр передается используя <code>.apply()</code>, так что если там будет массив &#8212; он развернется в список аргументов. Это влияет на то, как писать сигнатуру колбэка и обсервера событий<br />
А вот такие события уже можно ловить 2мя способами:</p>

<ol>
<li>callback &#8212; <code>.lookup({ activated: function(){} })</code></li>
<li>observer &#8212; <code>.bind('lookupactivated', function(){} )</code></li>
</ol>

<p>Мне больше нравится второй вариант. Во-первых, <a href="https://developer.mozilla.org/en/DOM/event">Event Bubbling</a> позволяет навесить обработчик на контейнер, где эти виджеты появляются и убрать код из инициализации этих виджетов при получении данных с помощью AJAX. Во-вторых это просто красиво.<br />
Единственный тут минус &#8211; это название этого события&#8230; Оно строится самим jQueryUI и представляет собой <code>widget_name + event_name</code>без точек и пробелов&#8230; Ну&#8230; зато плюсы хороши и приятны. Среди плюсов также то, что третий параметр для данного способа не развернется (в случае, если это массив) в аргументы.<br />
Кстати, в данном примере я &#8220;наследовался&#8221; от уже существующего виджета <code>$.ui.button</code>, но если без этого &#8211; просто не указывайте второй параметр при регистрации виджета <code>$.widget('t2.lookup', $.ui.button, Lookup);</code>. Кстати, namespace, указываемый при регистрации ничего не значит. По крайней мере пока ничего. Так что можно делать свой или использовать тот, что использует сама jQueryUI (<code>$.widget('ui.lookup', Lookup);</code>) &#8212; выбирайте сами.
Как это все работает и вообще попробовать самому можно <a href="http://jsbin.com/ipado4/edit">на мега полезном ресурсе JSBin</a>.</p>

<p><strong><em>P.S.</em></strong><br />
Надо бы кстати написать про мега удобный кусок кода&#8230; В след. раз.</p>

<pre><code>(function($, window, document, undefined){
  //code goes here
})(jQuery, window, window.document)
</code></pre>

<p>(:</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/10/11/jqueryui-custom-widget/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Userscript для Fluid(ium) + GMail</title>
		<link>http://nilcolor.com/2010/05/07/userscript-for-gmail_on_fluid/</link>
		<comments>http://nilcolor.com/2010/05/07/userscript-for-gmail_on_fluid/#comments</comments>
		<pubDate>Fri, 07 May 2010 15:06:23 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[fluid]]></category>
		<category><![CDATA[fluidium]]></category>
		<category><![CDATA[userscript]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=615</guid>
		<description><![CDATA[Обновился Fluid.app. Теперь он сделан на базе Fluidium. Пока это бета, но я ей пользуюсь. Минус один &#8211; бадж количества не прочитанных писем перестал показываться. Для этого нужен userscript. Вот тот, что я написал для себя: (function () { setInterval(update, 5000); function update() { var links = document.getElementById('canvas_frame') .contentDocument.getElementsByTagName('a'); var len = links.length; for (var [...]]]></description>
			<content:encoded><![CDATA[<p>Обновился <a href="http://github.com/itod/fluidium/downloads">Fluid.app</a>. Теперь он сделан на базе <a href="http://fluidium.org/">Fluidium</a>. Пока это бета, но я ей пользуюсь. Минус один &#8211; бадж количества не прочитанных писем перестал показываться. Для этого нужен userscript. Вот тот, что я написал для себя:</p>

<pre><code>(function () {
    setInterval(update, 5000);

    function update() {
        var links = document.getElementById('canvas_frame')
            .contentDocument.getElementsByTagName('a');
        var len = links.length;

        for (var i=0; i &lt; len; i++) {
            var str = links[i].getAttribute('href');
            if (/#inbox$/.test(str)) {
                var matches = links[i].textContent.match(/\(([0-9]+)\)/),
                    str = '';
                if (matches &amp;&amp; matches.length &gt; 1) {
                    str = matches[1];
                }
                window.fluid.dockBadge = str;
            }
        }
    }
})();
</code></pre>

<p>Пробуйте, если что не так &#8211; дайте знать ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/05/07/userscript-for-gmail_on_fluid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript import</title>
		<link>http://nilcolor.com/2009/10/20/javascript-import/</link>
		<comments>http://nilcolor.com/2009/10/20/javascript-import/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 21:28:58 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[xmlhttprequest]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=455</guid>
		<description><![CDATA[В JavaScript нет директивы import. Хотя она есть даже в css (@import). Но если надо, очень надо, то можно воспользоваться следующей &#8220;заменой&#8221; function import (url) { var xhr; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } if(xhr){ xhr.open("GET",url,false); xhr.send(null); eval(xhr.responseText); } else { return false; } } Пользоваться довольно [...]]]></description>
			<content:encoded><![CDATA[<p>В JavaScript нет директивы <code>import</code>. Хотя она есть даже в css (@import). Но если надо, очень надо, то можно воспользоваться следующей &#8220;заменой&#8221;</p>

<pre><code>function import (url) {
    var xhr;

    if(window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(xhr){
        xhr.open("GET",url,false);
        xhr.send(null);
        eval(xhr.responseText);
    } else {
        return false;
    }
}
</code></pre>

<p>Пользоваться довольно просто</p>

<pre><code>import('/path/to/js/file.js');
call_function_from_file_js();
</code></pre>

<p>То, что код функции <code>call_function_from_file_js</code> будет доступен, гарантировано синхронностью XMLHttpRequest (3-й параметр). У данного решения есть маленький минус &#8211; загруженный код проходит через <code>eval()</code>, его многие считают злом и т.д&#8230;. Еще могу возникнуть сложности, если в загружаемом коде есть объявления типа</p>

<pre><code>function foo() {
    //some code
}
</code></pre>

<p>Если нарветесь &#8212; попробуйте изменить определение функции на</p>

<pre><code>foo = function () {
    //some code
}
</code></pre>

<p>Должно помочь.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/10/20/javascript-import/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript&#8230; какой он?</title>
		<link>http://nilcolor.com/2009/03/29/javascript-what-is-it/</link>
		<comments>http://nilcolor.com/2009/03/29/javascript-what-is-it/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 21:39:14 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=368</guid>
		<description><![CDATA[Есть такая модная штука в наше время &#8212; AJAX/JSON/XML/WEB20 и иже с ними&#8230; Мне они тоже нравятся. И нравятся настолько, что я и сам этим балуюсь ;) Например сейчас в одном из проектов, небольшом, но очень гордом, я занят тем, что пробую сделать ему, проекту, модное UI, не в смысле дизайна &#8211; тут я пас, [...]]]></description>
			<content:encoded><![CDATA[<p>Есть такая модная штука в наше время &#8212; AJAX/JSON/XML/WEB20 и иже с ними&#8230; Мне они тоже нравятся. И нравятся настолько, что я и сам этим балуюсь ;) Например сейчас в одном из проектов, небольшом, но очень гордом, я занят тем, что пробую сделать ему, проекту, модное UI, не в смысле дизайна &#8211; тут я пас, а в смысле &#8220;все ajax-запросам&#8221;, json туда, json обратно&#8230;<br />
А самое веселое в этом знаете что? Это весело! Это оказалось реально интересно&#8230; Придумывать, как же рисовать все это на клиенте, где хранить шаблоны и как их заполнять&#8230; Битвы за скорость (вообще отдельная песнь)&#8230; Борьба с обработчиками событий, которые по вине их писавшего рвут even bubbling и это аукается где-то: то ссылки перестают кликаться, то в поле ввода ничего нельзя ввести ;)</p>

<p>Сейчас у меня стоит задача придумать, как же быть с шаблонами&#8230; Как только будет что-то &#8212; расскажу. Пока самая интересная идея это хранить их прям в коде ввиде блоков</p>

<pre><code>&lt;script type="text/html" charset="utf-8" id="tmpl-block-a"&gt;
    &lt;div&gt;
        ...
    &lt;/div&gt;
&lt;/script&gt;
</code></pre>

<p>Да да, тут нет ошибки ;) если вдруг вы кинулись писать это в коменте. Способ интересен, хорош и удобен. Но для мелких шаблонов. А если они большие?</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/03/29/javascript-what-is-it/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google Playground</title>
		<link>http://nilcolor.com/2009/02/12/google-playground/</link>
		<comments>http://nilcolor.com/2009/02/12/google-playground/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 09:23:06 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://nilcolor.com/2009/02/12/google-playground/</guid>
		<description><![CDATA[Хотите попробовать jQuery? Или может MooTools или Prototype? Может быть хотели попробовать сделать что-то с Google Maps? В общем есть много интересного и любопытного. И для этого есть такая штука на гуглокоде &#8211; AJAX APIs Playground. Что же там можно? Можно в очень компактном и понятном виде посмотреть на примеры использования выше перечисленного, можно самому [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://nilcolor.com/wp-content/uploads/2009/02/ajax-playground.png" title="AJAX Playground" class="alignleft" width="77" height="67" />
Хотите попробовать <a href="http://jquery.com/" title="jQuery: The Write Less, Do More, JavaScript Library">jQuery</a>? Или может <a href="http://mootools.net/" title="MooTools - a compact javascript framework">MooTools</a> или <a href="http://www.prototypejs.org/" title="Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications">Prototype</a>? Может быть хотели попробовать сделать что-то с <a href="http://google.com/maps" title="Google Maps">Google Maps</a>? В общем есть много интересного и любопытного. И для этого есть такая штука на гуглокоде &#8211; <a href="http://code.google.com/apis/ajax/playground/#jquery" title="AJAX APIs Playground">AJAX APIs Playground</a>. Что же там можно? Можно в очень компактном и понятном виде посмотреть на примеры использования выше перечисленного, можно самому попробовать, поэкспериментировать&#8230; И самое приятное &#8212; для этого ничего не надо кроме браузера и желания собственно пробовать!<br />
Дерзайте, это очень интересно. Даже полезно. И может навести на мысль что-то сделать&#8230; Как у меня ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/02/12/google-playground/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

