Pull to refresh
123
0
Чаккаев Анатолий @1602

User

Send message

Онлайн генератор документации для Node.JS проектов

Reading time 3 min
Views 5.7K
Документация — одна из самых важных составляющих любого проекта, особенно если этот проект с открытым кодом, который будут читать другие люди. Чтобы сделать мир opensource чуточку лучше, я попытался собрать свои знания в области организации модулей nodejs проектов и сделать такой инструмент как Makedoc!. Ремарка для адептов ruby: это почти то же, что и rdoc.info для руби.

Этот инструмент анализирует код проекта, выделяет потенциально документируемые куски кода (не важно, с документацией или без), и генерирует статический набор страничек, описывающих проект.

В кратце шаблон использования такой: идем на jsdoc.info/[githubusername]/[projectname] и видим готовую документацию по проекту. Либо идем на jsdoc.info/[githubusername] и получаем список проектов для которых можно сгенерировать документацию.

За деталями реализации прошу под кат.
Читать дальше →
Total votes 20: ↑19 and ↓1 +18
Comments 34

QUnit. Тестирование javascript кода

Reading time 5 min
Views 64K
Наткнулся вчера на этот инструмент и не смог пройти мимо, провел ночь за написанием тестов, а теперь хочу поделиться находкой. QUnit — это библиотека от разработчиков jQuery, позволяющая писать unit-тесты для кода на javascript. Удобна в использовании, ничего лишнего, осваивается за 20 минут, выгода от применения — колоссальная.

Самым нетерпеливым сразу ссылки:
Официальная документация на сайте jquery: docs.jquery.com/QUnit
Реальные примеры тестов (для модулей jquery): view.jquery.com/trunk/jquery/test/unit
Руководство для начинающих (англ): www.swift-lizard.com/2009/11/24/test-driven-development-with-jquery-qunit
Система распределенного тестирования (гениально и просто): testswarm.com

Под катом информация о преимуществах юнит-тестирования применительно к js и разбор возможностей библиотеки на примерах.
Читать дальше →
Total votes 71: ↑68 and ↓3 +65
Comments 23

RTM Context Autocomplete Menu

Reading time 5 min
Views 1.9K
Однажды я зашел на rememberthemilk.com и понял, что хочу такое же контекстное autocomplete меню в свой проект. В результате получился небольшой jquery плагин, который хочу презентовать в этом посте. Работает в ie6+, opera, safari, firefox, chrome (тестировал в последних версиях). В кратце расскажу в чем суть «контекстного» меню в RTM-стиле.

Это меню присоединяется к input-элементу, но, в отличие от обычных autocomplete меню, оно «всплывает» не для ввода всего значения элемента, а для какой-то логической части поля ввода. При этом меню позиционируется непосредственно под автодополняемым текстом. Вот как это выглядит:

image

Лицензия проекта — MIT / beerware.
Скачать библиотеку с примерами можно тут: js-context-autocomplete.googlecode.com/files/js-autocomplete-v5.tar
Последнюю ревизию забираем тут: svn checkout js-context-autocomplete.googlecode.com/svn/trunk js-context-autocomplete-read-only
Кому интересно поучаствовать в проекте — пишите в личку.
Временное online-demo (upd)

Под катом интересные моменты реализации, описание функциональности, примеры, список известных багов и фич для реализации.
Читать дальше →
Total votes 64: ↑63 and ↓1 +62
Comments 33

Повышение качества javascript кода. JSLint

Reading time 6 min
Views 31K

Случилось так, что в последнее время мне пришлось читать и рефакторить очень много ужасного javascript-кода. Работа с таким кодом стоит очень многих нервов при сопровождении, да и писать/отлаживать такой код не приятно. Мысли о том, что заставляет людей писать плохой код и как с этим можно бороться заставили меня писать эту статью. Не претендую на сколь-нибудь полное раскрытие темы борьбы за качество кода, хочу рассмотреть лишь некоторые аспекты, доставляющие наибольшее количество проблем. В качестве основного инструмента оптимизации качества кода предлагаю использовать JSLint, который несмотря на все плюсы, не является панацеей и может служить лишь отправной точкой для дальнейшего улучшения кода.

Всех у кого хоть раз болела голова при написании/чтении javascript кода прошу под кат.
Читать дальше →
Total votes 94: ↑90 and ↓4 +86
Comments 107

Группирование топиков

Reading time 1 min
Views 570
Навеяно серией топиков про memcached, и многими другими «серийными» топиками.

Авторы топиков иногда хотят объединить несколько топиков в группу, причем, когда пишется n-ый топик, (n+1)-го ещё нет. Причём, автор обычно добавляет ссылки на предыдущие топики, в каждый очередной. В принципе, это оправдано, если я увидел пост на главной и хочу отследить серию публикаций сначала. Но что делать, если я нашел первый пост, а автор поленился указать ссылки на последующие публикации в каждой из предыдущих, что мне тогда делать? Да, я вижу блок «похожие публикации» в правой части страницы. Но в этом блоке есть «лишние» публикации, которые к данной группе не относятся, и, возможно, нет каких-то относящихся (если вдруг Хабр не счел публикации похожими, или их слишком много).

Было бы очень хорошо добавить группирование топиков, например, через какие-то особые тэги (&топики про мемкэшд). Это, кстати, решило бы проблему старых топиков, которая недавно также поднималась.
Total votes 54: ↑47 and ↓7 +40
Comments 16

Аватарка и хабракат

Reading time 1 min
Views 818
1.
Очень хочется поставить аватарку, но сделать это невозможно. Пробовал под виндой оперой, фаерфоксом, эксплорером, под линуксом фф и оперой последних версий. При просмотре фаербагом видно, что запрос ключа авторизации остается без ответа (точнее, ответ приходит пустой), еще раньше, при загрузке страницы имеется ошибка обращения к Location.toString().

2.
При написании топика про контекстное меню на javascript было замечено, что хабракат с текстом отображается как хабракат без текста. Вот код ката:
<habracut text="И вот что получилось (под катом: функционал, примеры)">

Спасибо за внимание.

PS: «сообщать об ошибке» пробовал, но пока безрезультатно. Думаю, может кто столкнулся с проблемой и нашел альтернативное решение?
Total votes 18: ↑10 and ↓8 +2
Comments 20

Контекстное меню на javascript: небольшое, но мощное

Reading time 5 min
Views 14K
Вы наверняка не раз видели javascript-реализации контекстных меню на базе популярных библиотек, таких как jQuery и prototype. А значит обязательно сталкивались с основными их недостатками: неудобностью API, большим количеством кода, требовательностью к ресурсам, любовью к генерации огромного количества html кода. В один прекрасный момент эти проблемы пересилили мою лень и я решил бороться с ними, поставив следующие задачи:
  • Минимум html кода, генерируемого для меню (зачем нам засорять ДОМ)
  • Лаконичность js кода для создания меню (API вызова без копипасты)
  • Оптимум гибкости при работе (многоуровневые, динамически модифицируемые меню)
  • Как можно меньше кода в реализации библиотеки (6302 байта в несжатом виде)
  • Минимальное количество jQuery-вызовов (чтобы можно было легко от них отказаться тем, кто jQuery не использует)
  • Inline-события где это возможно вместо биндов (меньше ресурсов сожрет)

Контекстное меню

UPD: разместил проект в google code, пользуйтесь, развивайте:
svn checkout js-cmenu.googlecode.com/svn/trunk js-cmenu-read-only

Читать дальше →
Total votes 82: ↑78 and ↓4 +74
Comments 47

Подсветка синтаксиса несколькими строками javascript

Reading time 4 min
Views 21K
Да, я знаю, что такое синтаксический анализ. И знаю много разных библиотек для подсветки чего угодно. Только это всё не то, когда надо подсветить простенький примерчик, не содержащий всяких кодоизвращений. И уж совсем негоже тянуть для этого много-много байт _правильно_ разбирающих _любой_ код.

Для случаев без кодоизврата (а их большинство) можно использовать такой код:
code = code
// ключевые слова (список неполон, написал, что в голову пришло)
.replace(/(var|function|typeof|new|return|if|for|in|while|break|do|continue|switch|case)([^a-z0-9\$_])/gi,
'<span class="kwrd">$1</span>$2')
// всякие скобочки
.replace(/(\{|\}|\]|\[|\|)/gi,'<span class="kwrd">$1</span>')
// однострочные комментарии
.replace(/(\/\/[^\n\r]*(\n|\r\n))/g,'<span class="comm">$1</span>')
// строки
.replace(/('.*?')/g,'<span class="str">$1</span>')
// функции (когда после идентификатора идет скобка)
.replace(/([a-z\_\$][a-z0-9_]*)\(/gi,'<span class="func">$1</span>(')
// не люблю восьмизначные табы, пусть лучше будет 4 пробела
.replace(/\t/g,'    ');


под катом CSS, плагин jQuery, пример и некоторые пояснения-рассуждения
Total votes 70: ↑63 and ↓7 +56
Comments 30

Исследуем Google Reader API

Reading time 6 min
Views 2.2K
Возникла необходимость сделать интерфейс к гуглоридеру, отличный от стандартного. Использование стандартного ajax reader api не удовлетворило из-за коммерческих ограничений. API, описанное во множестве импортных блогов отказывалось нормально работать, поэтому на вооружение было взято расширение firebug всеми любимого браузера. В результате получилась небольшая подборка полезных для работы с ридером URLов, которыми хочу поделиться с общественностью.

disclaimer: эта подборка не претендует на полноту, а лишь подытоживает некоторый результат, который позволил решить поставленную задачу, а именно: получить список подписок, непрочитанные элементы по подписке, отметить элементы как прочитанные, отметить подписки как прочитанные. Вся остальная информация с легкостью может быть получена с использованием официального руководства.

Для реализации взаимодействия клиентского ajax-интерфейса с google.com/reader/ будем использовать посредника на php+curl.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 10

Information

Rating
Does not participate
Location
Казань, Татарстан, Россия
Date of birth
Registered
Activity