Почему нельзя полагаться на тег script
Зашёл тут разговор про то, почему jQuery делает eval всего кода внутри всех тегов script. Связано это с тем, что при повторном исполнении скриптов они могут содержать ссылки на старые DOM-элементы, и поэтому могут отрабатывать некорректно. Ну и сложно управлять последовательностью повторного исполнения скриптов. http://stackoverflow.com/questions/3348739/force-re-eval-inline-and-included-javascript
Вопросники для тестов по javascript
http://madebyknight.com/javascript-scope/ http://javascript.ru/test http://asenbozhilov.com/articles/quiz.html http://www.nczonline.net/blog/2010/02/16/my-javascript-quiz/ http://perfectionkills.com/javascript-quiz/ http://dmitry.baranovskiy.com/post/91403200 http://dmitrysoshnikov.com/ecmascript/the-quiz/ http://james.padolsey.com/javascript/another-javascript-quiz/ http://www.techrepublic.com/blog/software-engineer/javascript-interview-questions-and-answers/
Установка cron в CentOS
У меня CentOS от digitalocean. В файловой системе есть даже директория /etc/cron.daily и даже со скриптами. Добавил я туда свой скрипт — не срабатывает. Руками запускается правильно. Никак не мог понять, в чём дело. Оказалось, что служба crond просто не установлена в системе. Проверить это можно так:
1 |
ps fax | grep cron |
Если выводит только вызванный греп, то значит …
Директивы для обработки DOM-событий в AngularJS
Всё достаточно просто, много раз использовал, но надо бы и здесь выложить. Допустим, нам нужно вешать AngularJS-обработчики на DOM-события mouseenter и mouseleave. Для этого пишем генератор директив по массиву:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var directives = angular.module('CommonDirectives', []); angular.forEach(['Mouseenter', 'Mouseleave'], function (eName) { var aName = 'mm' + eName, eName = eName.toLowerCase(); directives. directive(aName, ['$parse', function($parse) { return { restrict: 'A', link: function link($scope, $element, attrs) { var fn = $parse(attrs[aName]); $element.bind(eName, function ($event) { $scope.$apply(function () { fn($scope, {$event: $event}); }); }); } }; }]); }); |
Ну и можно добавлять названий дректив по вкусу. Использование:
1 2 3 4 5 6 7 8 9 10 11 |
<li ng-repeat="gift in selectedGroup.gifts" ng-class="{'selected': gift.id == selectedGift.id, 'hovered': gift.id == hoveredGift.id}" ng-click="selectGift(gift)" mm-mouseenter="hoveredGift = gift)" mm-mouseleave="hoveredGift = undefined" > <div class="gift-container"> <b class="{{gift.key}}"></b> </div> </li> |
Результат — http://grab.by/tXHy. Таким же образом можно делать директивы для любых событий: focus, blur, keypress …
Как побороться с XSS на Node.js
Чтобы экранировать пользовательский ввод, достаточно использовать что-то вроде escape(input) — replace , & and » with HTML entities https://github.com/chriso/validator.js#sanitizers
Формирует css-стили прямо по psd
http://csshat.com/ — плагин для Photoshop
Стандарт ECMAScript-5.1
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Brunch — ещё одна система тасков на node.js
Аналог grunt, но вроде быстрее — http://brunch.io/compare.html. Надо бы попробовать.
Promise и AngularJS
http://youtu.be/XcRdO5QVlqE Слайды — http://christianlilley.wordpress.com/2014/01/17/slides-im-postal-for-promises-in-angular-delivered-at-ng-conf-2014/. Более развёрнутые слайды с другой его конференции — http://christianlilley.wordpress.com/2013/09/19/promises-promises-mastering-async-io-in-javascript-with-the-promise-pattern/.
Тонкости создания большого приложения на AngularJS
Разработчики из DoubleClick рассказывают об особенностях создания большого приложения на AngularJS http://youtu.be/62RvRQuMVyg Интересное: Авторизация — профиль пользователя лучше передавать с сервера и сделать внедряемую константу (хотя лично я храню всё в localStorage) Скрытие/отображение фич можно сделать по списку доступных фич текущего профиля. Наиболее эффективно распарсивать и вырезать куски шаблона на этапе загрузки через responseInterceptor — …