\ No newline at end of file
diff --git a/app/templates/partials/angular/recomendations/angular-general-recomendations.hbs b/app/templates/partials/angular/recomendations/angular-general-recomendations.hbs
new file mode 100644
index 0000000..bfab703
--- /dev/null
+++ b/app/templates/partials/angular/recomendations/angular-general-recomendations.hbs
@@ -0,0 +1,9 @@
+
Общие рекомендации
+
+
Для модификаторов используем одно слово
+
Каждый элемент делать в виде отдельного модуля
+
Данные для любых сущностей оформляются в виде модели
+
По умолчанию привязываем директивы к элементам или к аттрибутам. Как исключение - к классам
+
Наши css классы пишем в начале, а сторонние после
+
Если классы без стилей, то пишем с префиксом js
+
\ No newline at end of file
diff --git a/app/templates/partials/angular/rules/angular-files-naming.hbs b/app/templates/partials/angular/rules/angular-files-naming.hbs
new file mode 100644
index 0000000..71778d5
--- /dev/null
+++ b/app/templates/partials/angular/rules/angular-files-naming.hbs
@@ -0,0 +1,7 @@
+
Наименование файлов, папок и сущностей Angular
+
Папку, класс и html-тэг компонента называем по БЭМу.
+
Названия модулей пишем как fba.componentName
+
Название файлов через camelCase
+
Основной единицей компонента (точкой входа в компонент) является директива, ее название совпадает с названием компонента.
+
Внутри js файлов сущностей (контроллеров, сервисов, фильтров, моделей, фабрик) через camelCase название компонента + название сущности, за исключением Модели.
+(т.к. модель является сервисом, но в качестве названия сущности используем Model)
diff --git a/app/templates/partials/angular/rules/angular-files-structure.hbs b/app/templates/partials/angular/rules/angular-files-structure.hbs
new file mode 100644
index 0000000..89fb9fe
--- /dev/null
+++ b/app/templates/partials/angular/rules/angular-files-structure.hbs
@@ -0,0 +1,2 @@
+
Cтруктура файлов
+
В новом создаваемом компоненте должны присутствовать jade, stylus, js, spec.js, html для разработки компонента изолированно от других и быстрого его просмотра.
diff --git a/app/templates/partials/angular/rules/angular-helpers.hbs b/app/templates/partials/angular/rules/angular-helpers.hbs
new file mode 100644
index 0000000..5800dca
--- /dev/null
+++ b/app/templates/partials/angular/rules/angular-helpers.hbs
@@ -0,0 +1,4 @@
+
Встроенные хэлперы Angular
+
По возможности используйте встроенные ангулярные хэлперы.
+
Для работы с массивами и объектами и манипуляциями элементами внутри них используйте библиотеку lodash
- В большинстве случаев необходимость использования !important в CSS возникает из-за неправильного обращения к элементам страницы через каскад. Однако, в редких случаях, без использования !important не обойтись.
-
Селекторы должны быть написаны так, чтобы их можно было переиспользовать в дальнейшем. Цепочки селекторов или селекторы с излишней вложенностью не должны создаваться без необходимости — это увеличивает специфичность правил и уменьшает возможность их переиспользования.
-
Длинные цепочки вложенных селекторов также усложняют код и его поддержку. Хорошим подходом считается использовать вложенность до 2 или 3 уровня. Псевдоэлементы или псевдоклассы не увеличивают уровень вложенности.
-
-
Идентификаторы id для стилизации не используются. Вместо идентификаторов для задания стилей используются селекторы по классам или тегам.
Cокращенные объявления не используются в тех случаях, когда это может косвенно переопределить другие значения. Наиболее часто злоупотребляют сокращением следующих свойств:
-
-
- padding
-
-
- margin
-
-
- border-radius
-
-
- border
-
-
- font
-
-
- background
-
-
-
- Сокращённые свойства, где элементы значений однотипные (например,
- margin: 10px 15px; или
- padding: 1px 2px 3px;) сложнее воспринимать, чем отдельные свойства (margin-top: 10px; padding-top: 1px;).
-
-
- Свойства с разнотипными элементами значений (например,
- border: 1px solid #000000;) в сокращённом виде считываются легче – их можно сокращать, если нет опасности переопределить другие значения.
-
Имена классов пишутся строчными буквами, используется дефис (но не знаки нижнего подчёркивания или camelCase). Дефисы служат разделителями во взаимосвязанных классах (например, .button и .button-danger).
-
Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс: избегайте сокращений (единственное исключение — .btn для кнопок), но не делайте их слишком длинными (более трёх слов).
-
Для написания классов используются английские слова и термины. Транслитом названия классов и атрибутов не пишутся.
- Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family.
-
-
- В случае использования нестандартных шрифтов альтернативный веб-безопасный шрифт и тип семейства указываются, чтобы в случае отсутствия нестандартного шрифта в системе, изменения внешнего вида страницы были минимальны. Альтернативный шрифт должен быть такого же типа, что и нестандартный.
-
-
- Порядок шрифтов следующий:
-
-
-
нестандартный шрифт;
-
веб-безопасный;
-
тип шрифта.
-
-
- Список веб-безопасных шрифтов можно посмотреть здесь — cssfontstack.com.
-
- Объявления логически связанных свойств группируются в следующем порядке:
-
-
-
Позиционирование
-
Блочная модель
-
Типографика
-
Оформление
-
Анимация
-
Разное
-
-
- Позиционирование следует первым потому, что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков.
-
-
- Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь.
-
-
- Сгруппированные объявления в правиле отделяются друг от друга пустой строкой.
-
-
- Порядок объявления подробных правил, таких как font-size, font-family, line-height, должен соответствовать порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой должна идти сокращённая версия.
-
После значения свойства обязательно ставится точка с запятой.
-
Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
-
Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
-
Названия тегов и свойств в правилах пишутся строчными буквами.
-
Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
-
Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
-
После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
-
После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
-
До и после комбинатора между селекторами (например, p > a) ставится один пробел.
-
Каждое объявление в правиле пишется на новой строке.
-
Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки:
-
.selector {
- color: #f5f5f5;
-}
-
-
Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
-
Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
-
Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
- Значение vertical-align должно быть явно указано для блоков с display: inline-block.
-
-
- Значение по умолчанию, baseline, может приводить к странному отображению блочно-строчных элементов. Например, когда в ряд стоят несколько элементов с разным количеством строк.
-
-
- Если вы хотите, чтобы элементы выравнивались по умолчанию, то явно укажите для vertical-align значение baseline. Это позволит другим понять, что вы знаете об особенностях отображения элементов с таким выравниванием и задали его намеренно.
-
diff --git a/app/templates/partials/footer.hbs b/app/templates/partials/footer.hbs
index b11f00c..ec57b0e 100644
--- a/app/templates/partials/footer.hbs
+++ b/app/templates/partials/footer.hbs
@@ -1,26 +1,7 @@
diff --git a/app/templates/partials/git/examples/git-branch-naming-example.hbs b/app/templates/partials/git/examples/git-branch-naming-example.hbs
new file mode 100644
index 0000000..31245b6
--- /dev/null
+++ b/app/templates/partials/git/examples/git-branch-naming-example.hbs
@@ -0,0 +1,10 @@
+/* Плохо */
+shitty-shit
+shitty/shit
+shitty_shit
+
+/* Хорошо */
+fix/presets/666
+feature/breakdowns/777
+feature/breakdowns/775
+style/sidebar/222
\ No newline at end of file
diff --git a/app/templates/partials/git/examples/git-commit-writing-example.hbs b/app/templates/partials/git/examples/git-commit-writing-example.hbs
new file mode 100644
index 0000000..1a1a75a
--- /dev/null
+++ b/app/templates/partials/git/examples/git-commit-writing-example.hbs
@@ -0,0 +1,12 @@
+/* Плохо */
+1. Done
+
+2. Some fixes
+
+/* Хорошо */
+1. Rewrite step module. Make customizable fbaForm module. Needs to fully integrate it to application.
+
+2. Change targeting label, update campaign status in grid after change.
+
+
+
diff --git a/app/templates/partials/git/git-rules.hbs b/app/templates/partials/git/git-rules.hbs
new file mode 100644
index 0000000..f545b0f
--- /dev/null
+++ b/app/templates/partials/git/git-rules.hbs
@@ -0,0 +1,25 @@
+
+
Описание коммита должно отражать суть выполненных изменений,
+ не должно быть слишком коротким, но и не чересчур длинным.
+ Желательно, чтобы другой разработчик, прочитав описание коммита,
+ мог быстро понять чтобы было сделано.
+
- В разметке должно быть использовано минимальное возможное количество элементов. Не должно быть лишних оберток и блоков, которые используются для оформления и могут быть заменены на псевдоэлементы.
-
- Если сайт поддерживает оба протокола http: и https:, то при запросе файлов в HTML через полный URL часть с протоколом из адреса можно исключить. Это сделает URL относительным и избавит от проблем с доступом, а также немного сократит запись.
-
-
- Если сайт подерживает только один из протоколов, в URL лучше явно указывать соответствующий.
-
- Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам.
-
-
- Остальные атрибуты могут быть расставлены в любом порядке, но тоже единообразно для одинаковых элементов.
-
- Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе.
-
- В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах.
-
- Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>.
-
- Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях или в процентах. В случае пикселей размерность не нужна.
-
-
- По возможности изображениям указываются действительные размеры, так как это улучшает производительность отрисовки страницы: браузер не будет перерисовывать страницу в процессе загрузки и отображения изображения.
-
- Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила.
-
- Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию.
-
- Документ должен проходить проверку на валидность. Для проверки используется современный валидатор.
-
diff --git a/app/templates/partials/jade/examples/jade-classes-ids-example.hbs b/app/templates/partials/jade/examples/jade-classes-ids-example.hbs
new file mode 100644
index 0000000..595f850
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-classes-ids-example.hbs
@@ -0,0 +1,9 @@
+/* Плохо */
+.carousel
+nav.nav.nav_pos_left
+#carousel
+
+/* Хорошо */
+div(class='carousel' id="carousel")
+nav(class='nav nav_pos_left')
+div(id="carousel")
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-comments-example.hbs b/app/templates/partials/jade/examples/jade-comments-example.hbs
new file mode 100644
index 0000000..134115f
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-comments-example.hbs
@@ -0,0 +1,12 @@
+// Этот комментарий попадёт в HTML.
+
+//- Этот комментарий не попадёт в HTML.
+
+<!--[if IE]>
+meta(name='imagetoolbar' content='no')
+meta(name='msthemecompatible' content='no')
+<![endif]-->
+
+<!--noindex-->
+Это содержимое не будет индексироваться поисковиком.
+<!--/noindex-->
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-inline-elements-example.hbs b/app/templates/partials/jade/examples/jade-inline-elements-example.hbs
new file mode 100644
index 0000000..e0d58ef
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-inline-elements-example.hbs
@@ -0,0 +1,14 @@
+/* Хорошо */
+ul.nav
+ li.nav__item
+ a.nav__link(href='http://github.com/') Главная
+ li.nav__item
+ a.nav__link(href='http://github.com/projects') Проекты
+ li.nav__item
+ a.nav__link(href='http://github.com/contacts') Контакты
+
+/* Лучше */
+ul.nav
+ li.nav__item: a.nav__link(href='http://github.com/') Главная
+ li.nav__item: a.nav__link(href='http://github.com/projects') Проекты
+ li.nav__item: a.nav__link(href='http://github.com/contacts') Контакты
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-linewrapping-example.hbs b/app/templates/partials/jade/examples/jade-linewrapping-example.hbs
new file mode 100644
index 0000000..a573ad0
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-linewrapping-example.hbs
@@ -0,0 +1,24 @@
+/* Плохо */
+.project
+ .project__name Lorem
+ .project__desc
+ | Lorem ipsum dolor sit amet, consectetur adipisicing elit.
+ | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas.
+.project
+ .project__name Ipsum.
+ .project__desc
+ | Lorem ipsum dolor sit amet, consectetur adipisicing elit.
+ | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas.
+
+/* Хорошо */
+.project
+ .project__name Lorem
+ .project__desc
+ | Lorem ipsum dolor sit amet, consectetur adipisicing elit.
+ | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas.
+
+.project
+ .project__name Ipsum.
+ .project__desc
+ | Lorem ipsum dolor sit amet, consectetur adipisicing elit.
+ | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas.
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-long-lines-example.hbs b/app/templates/partials/jade/examples/jade-long-lines-example.hbs
new file mode 100644
index 0000000..994d7c7
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-long-lines-example.hbs
@@ -0,0 +1,12 @@
+/* Плохо */
+input.input-text(type='text' name='project' value='csssr' data-required='Это поле обязательно для заполнения!' data-hint='Допустимы только символы латинского алфавита `[a-z-A-Z]` и числа `[0-9]`.' required)
+
+/* Хорошо */
+input.input-text(
+ type='text'
+ name='project'
+ value='csssr'
+ data-required='Это поле обязательно для заполнения!'
+ data-hint='Допустимы только символы латинского алфавита `[a-z-A-Z]` и числа `[0-9]`.'
+ required
+)
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-quotes-example.hbs b/app/templates/partials/jade/examples/jade-quotes-example.hbs
new file mode 100644
index 0000000..ed695d3
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-quotes-example.hbs
@@ -0,0 +1,5 @@
+/* Плохо */
+input.input-text(type='text' name='project' value='csssr' required)
+
+/* Хорошо */
+input.input-text(type="text" name="project" value="csssr" required)
diff --git a/app/templates/partials/jade/examples/jade-several-attributes-example.hbs b/app/templates/partials/jade/examples/jade-several-attributes-example.hbs
new file mode 100644
index 0000000..7f9492a
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-several-attributes-example.hbs
@@ -0,0 +1,5 @@
+/* Плохо */
+input.input-text(type='text', name='project', value='csssr', required)
+
+/* Хорошо */
+input.input-text(type='text' name='project' value='csssr' required)
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-single-attributes-example.hbs b/app/templates/partials/jade/examples/jade-single-attributes-example.hbs
new file mode 100644
index 0000000..7f4b803
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-single-attributes-example.hbs
@@ -0,0 +1,5 @@
+/* Плохо */
+input.input-checkbox(type='checkbox' checked name='browser[]' value='chrome')
+
+/* Хорошо */
+input.input-checkbox(type='checkbox' name='browser[]' value='chrome' checked)
\ No newline at end of file
diff --git a/app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs b/app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs
new file mode 100644
index 0000000..6938ea8
--- /dev/null
+++ b/app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs
@@ -0,0 +1,5 @@
+/* Плохо */
+input.input-checkbox(type='checkbox' name='browser[]' value='chrome' checked='checked')
+
+/* Хорошо */
+input.input-checkbox(type='checkbox' name='browser[]' value='chrome' checked)
\ No newline at end of file
diff --git a/app/templates/partials/jade/jade-recomendations.hbs b/app/templates/partials/jade/jade-recomendations.hbs
new file mode 100644
index 0000000..f39dfc3
--- /dev/null
+++ b/app/templates/partials/jade/jade-recomendations.hbs
@@ -0,0 +1,13 @@
+
+
+
\ No newline at end of file
diff --git a/app/templates/partials/jade/recomendations/jade-include-partials.hbs b/app/templates/partials/jade/recomendations/jade-include-partials.hbs
new file mode 100644
index 0000000..6b4cf2b
--- /dev/null
+++ b/app/templates/partials/jade/recomendations/jade-include-partials.hbs
@@ -0,0 +1,8 @@
+
Подключение шаблонов
+
+
include header - используется для подключения частиц страницы, например, для шапок и подвалов.
+
extends partials/default - используется для внедрения контент в расширяемый шаблон.
+
block content - используется для добавления строк кода в определённое место
+
+
+
Во всех случаях через пробел указывается путь от текущего расположения до шаблона без расширения .jade.
\ No newline at end of file
diff --git a/app/templates/partials/jade/recomendations/jade-useful-links.hbs b/app/templates/partials/jade/recomendations/jade-useful-links.hbs
new file mode 100644
index 0000000..7b93248
--- /dev/null
+++ b/app/templates/partials/jade/recomendations/jade-useful-links.hbs
@@ -0,0 +1,6 @@
+
html2jade.org - конвертация HTML в Jade и Jade в HTML
+
diff --git a/app/templates/partials/jade/rules/jade-classes-ids.hbs b/app/templates/partials/jade/rules/jade-classes-ids.hbs
new file mode 100644
index 0000000..17ad9ed
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-classes-ids.hbs
@@ -0,0 +1,2 @@
+
Классы и идентификаторы
+
Классы и идентификаторы пишутся в аттрибутах, а не в начале. Это позволяет улучшить читаемость и сохранить однообразие кода.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-comments.hbs b/app/templates/partials/jade/rules/jade-comments.hbs
new file mode 100644
index 0000000..7b1cb4c
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-comments.hbs
@@ -0,0 +1,3 @@
+
Комментарии
+
Комментарии в Jade, которые не должны попасть в HTML записываются через //-
+
Простые или условные комментарии можно записывать прямо в HTML-формате.
diff --git a/app/templates/partials/jade/rules/jade-inline-elements.hbs b/app/templates/partials/jade/rules/jade-inline-elements.hbs
new file mode 100644
index 0000000..825a2d1
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-inline-elements.hbs
@@ -0,0 +1,3 @@
+
Строчные элементы
+
Строчные элементы можно записывать на одной строке через двоеточие :.
+
злоупотреблять с длинными классами.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-linewrapping.hbs b/app/templates/partials/jade/rules/jade-linewrapping.hbs
new file mode 100644
index 0000000..9686494
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-linewrapping.hbs
@@ -0,0 +1,2 @@
+
Перенос строки для однотипных блоков
+
Добавляйте перенос строки для однотипных блоков с множественным вложением элементов.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-long-lines.hbs b/app/templates/partials/jade/rules/jade-long-lines.hbs
new file mode 100644
index 0000000..d556992
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-long-lines.hbs
@@ -0,0 +1,2 @@
+
Длинные строки
+
Переносите атрибуты новую строку, если их много и/или значения длинные.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-quotes.hbs b/app/templates/partials/jade/rules/jade-quotes.hbs
new file mode 100644
index 0000000..6895cf4
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-quotes.hbs
@@ -0,0 +1,2 @@
+
Кавычки
+
Используйте двойные кавычки для текстовых значений.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-several-attributes.hbs b/app/templates/partials/jade/rules/jade-several-attributes.hbs
new file mode 100644
index 0000000..9e1bbca
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-several-attributes.hbs
@@ -0,0 +1,2 @@
+
Несколько аттрибутов
+
Для нескольких атрибутов запятая не нужна.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-single-attributes.hbs b/app/templates/partials/jade/rules/jade-single-attributes.hbs
new file mode 100644
index 0000000..8770533
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-single-attributes.hbs
@@ -0,0 +1,2 @@
+
Одиночные аттрибуты
+
Распологайте одиночные атрибуты в последнюю очередь.
\ No newline at end of file
diff --git a/app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs b/app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs
new file mode 100644
index 0000000..580f926
--- /dev/null
+++ b/app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs
@@ -0,0 +1,2 @@
+
Необязательные аттрибуты
+
Не давайте необязательные значения атрибутам.
\ No newline at end of file
diff --git a/app/templates/partials/jquery/examples/jquery-cache-example.hbs b/app/templates/partials/jquery/examples/jquery-cache-example.hbs
new file mode 100644
index 0000000..3bf0db9
--- /dev/null
+++ b/app/templates/partials/jquery/examples/jquery-cache-example.hbs
@@ -0,0 +1,22 @@
+/* Плохо */
+function setSidebar() {
+ $('#sidebar').hide();
+
+ // ...код...
+
+ $('#sidebar').css({
+ backgroundColor: 'pink'
+ });
+}
+
+/* Хорошо */
+function setSidebar() {
+ var $sidebar = $('#sidebar');
+ $sidebar.hide();
+
+ // ...код...
+
+ $sidebar.css({
+ backgroundColor: 'pink'
+ });
+}
\ No newline at end of file
diff --git a/app/templates/partials/jquery/examples/jquery-events-example.hbs b/app/templates/partials/jquery/examples/jquery-events-example.hbs
new file mode 100644
index 0000000..cb97f61
--- /dev/null
+++ b/app/templates/partials/jquery/examples/jquery-events-example.hbs
@@ -0,0 +1,21 @@
+/* Плохо */
+$input
+ .click(function () { /* ... */ })
+ .focus(function () { /* ... */ })
+ .blur(function () { /* ... */ });
+
+/* Хорошо */
+$input
+ .on('click', function () { /* ... */ })
+ .on('focus', function () { /* ... */ })
+ .on('blur', function () { /* ... */ });
+
+/* Лучше */
+// Несколько событий разделяются пробелами
+$field.on('click focus', function () { /* ... */ });
+
+$input.on({
+ // Несколько событий разделяются пробелами
+ 'click focus': function () { /* ... */ },
+ blur: function () { /* ... */ }
+});
\ No newline at end of file
diff --git a/app/templates/partials/jquery/examples/jquery-search-elements-example.hbs b/app/templates/partials/jquery/examples/jquery-search-elements-example.hbs
new file mode 100644
index 0000000..3c5a3f5
--- /dev/null
+++ b/app/templates/partials/jquery/examples/jquery-search-elements-example.hbs
@@ -0,0 +1,39 @@
+/* Плохо */
+$('ul', '#sidebar').hide();
+
+/* Плохо */
+$('#sidebar').find('ul').hide();
+
+/* Хорошо */
+$('#sidebar ul').hide();
+
+/* Хорошо */
+$('#sidebar > ul').hide();
+
+/* Хорошо */
+$sidebar.find('ul').hide();
+
+
+
+/* Плохо */
+$('.menu button');
+
+/* Плохо */
+$('.menu button#menuToggler');
+
+/* Плохо */
+$('button#menuToggler');
+
+/* Хорошо */
+$('#menuToggler');
+
+
+
+/* Плохо */
+$('.navbar-menu__item');
+
+/* Плохо */
+$('.js-navbar-menu__item');
+
+/* Хорошо */
+$('.js-nav-link');
diff --git a/app/templates/partials/jquery/examples/jquery-variables-example.hbs b/app/templates/partials/jquery/examples/jquery-variables-example.hbs
new file mode 100644
index 0000000..c2efee6
--- /dev/null
+++ b/app/templates/partials/jquery/examples/jquery-variables-example.hbs
@@ -0,0 +1,5 @@
+/* Плохо */
+var sidebar = $('#sidebar');
+
+/* Хорошо */
+var $sidebar = $('#sidebar');
\ No newline at end of file
diff --git a/app/templates/partials/jquery/jquery-rules.hbs b/app/templates/partials/jquery/jquery-rules.hbs
new file mode 100644
index 0000000..17564ec
--- /dev/null
+++ b/app/templates/partials/jquery/jquery-rules.hbs
@@ -0,0 +1,51 @@
+
+
+
\ No newline at end of file
diff --git a/app/templates/partials/jquery/rules/jquery-cache.hbs b/app/templates/partials/jquery/rules/jquery-cache.hbs
new file mode 100644
index 0000000..bae56d5
--- /dev/null
+++ b/app/templates/partials/jquery/rules/jquery-cache.hbs
@@ -0,0 +1,2 @@
+
Кэширование запросов
+
Кэшируйте jQuery-запросы. Каждый новый jQuery-запрос делает повторный поиск по DOM-дереву, и приложение начинает работать медленнее..
diff --git a/app/templates/partials/jquery/rules/jquery-events.hbs b/app/templates/partials/jquery/rules/jquery-events.hbs
new file mode 100644
index 0000000..c75f8d8
--- /dev/null
+++ b/app/templates/partials/jquery/rules/jquery-events.hbs
@@ -0,0 +1,2 @@
+
jQuery события
+
Для задания обработчика элементу используйте метод .on()
diff --git a/app/templates/partials/jquery/rules/jquery-search-elements.hbs b/app/templates/partials/jquery/rules/jquery-search-elements.hbs
new file mode 100644
index 0000000..78fcff1
--- /dev/null
+++ b/app/templates/partials/jquery/rules/jquery-search-elements.hbs
@@ -0,0 +1,5 @@
+
Поиск элементов
+
Для DOM-запросов используйте классический каскадный CSS-синтаксис $('.sidebar ul') или родитель потомок $('.sidebar > ul')
+
Используйте find для поиска внутри DOM-объекта.
+
Для поиска одного элемента используйте только идентификатор #id
+
Для поиска нескольких элементов однотипных по функционалу используйте класс с префиксом .js-* (для разделения названия класса использовать только дефис -), а не класс для стилизации элемента, название класса должно быть небольшим, но и понятным.
\ No newline at end of file
diff --git a/app/templates/partials/jquery/rules/jquery-variables.hbs b/app/templates/partials/jquery/rules/jquery-variables.hbs
new file mode 100644
index 0000000..8294469
--- /dev/null
+++ b/app/templates/partials/jquery/rules/jquery-variables.hbs
@@ -0,0 +1,2 @@
+
Наименование переменных
+
Для jQuery-переменных используйте префикс $.
diff --git a/app/templates/partials/js/examples/js-access-functions-example.hbs b/app/templates/partials/js/examples/js-access-functions-example.hbs
new file mode 100644
index 0000000..0d5513e
--- /dev/null
+++ b/app/templates/partials/js/examples/js-access-functions-example.hbs
@@ -0,0 +1,37 @@
+/* Плохо */
+dragon.age();
+
+/* Хорошо */
+dragon.getAge();
+
+/* Плохо */
+dragon.age(25);
+
+/* Хорошо */
+dragon.setAge(25);
+
+
+/* Плохо */
+if (!dragon.age()) {
+ return false;
+}
+
+/* Хорошо */
+if (!dragon.hasAge()) {
+ return false;
+}
+
+
+function Jedi(options) {
+ options || (options = {});
+ var lightsaber = options.lightsaber || 'blue';
+ this.set('lightsaber', lightsaber);
+}
+
+Jedi.prototype.set = function(key, val) {
+ this[key] = val;
+};
+
+Jedi.prototype.get = function(key) {
+ return this[key];
+};
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-code-blocks-example.hbs b/app/templates/partials/js/examples/js-code-blocks-example.hbs
new file mode 100644
index 0000000..bda4f89
--- /dev/null
+++ b/app/templates/partials/js/examples/js-code-blocks-example.hbs
@@ -0,0 +1,22 @@
+
+/* Плохо */
+if (test)
+ return false;
+
+/* Хорошо */
+if (test) return false;
+
+/* Хорошо */
+if (test) {
+ return false;
+}
+
+/* Плохо */
+function() { return false; }
+
+/* Хорошо */
+function() {
+ return false;
+}
+
+
diff --git a/app/templates/partials/js/examples/js-comments-example.hbs b/app/templates/partials/js/examples/js-comments-example.hbs
new file mode 100644
index 0000000..6beee76
--- /dev/null
+++ b/app/templates/partials/js/examples/js-comments-example.hbs
@@ -0,0 +1,70 @@
+/* Плохо */
+// make() возвращает новый элемент
+// основываясь на получаемом имени тэга
+//
+// @param tag
+// @return element
+function make(tag) {
+
+ // ...создаем element...
+
+ return element;
+}
+
+/* Хорошо */
+/**
+ * make() возвращает новый элемент
+ * основываясь на получаемом имени тэга
+ *
+ * @param tag
+ * @return element
+ */
+function make(tag) {
+
+ // ...создаем element...
+
+ return element;
+}
+
+/* Плохо */
+var active = true; // устанавливаем активным элементом
+
+/* Хорошо */
+// устанавливаем активным элементом
+var active = true;
+
+/* Плохо */
+function getType() {
+ console.log('проверяем тип...');
+ // задаем тип по умолчанию 'no type'
+ var type = this._type || 'no type';
+
+ return type;
+}
+
+/* Хорошо */
+function getType() {
+ console.log('проверяем тип...');
+
+ // задаем тип по умолчанию 'no type'
+ var type = this._type || 'no type';
+
+ return type;
+}
+
+
+function Calculator() {
+
+ // TODO FIXME: тут не нужно использовать глобальную переменную
+ total = 0;
+
+ return this;
+}
+
+function Calculator() {
+
+ // TODO: должна быть возможность изменять значение через параметр функции
+ this.total = 0;
+
+ return this;
+}
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-conditionals-example.hbs b/app/templates/partials/js/examples/js-conditionals-example.hbs
new file mode 100644
index 0000000..88e9fa3
--- /dev/null
+++ b/app/templates/partials/js/examples/js-conditionals-example.hbs
@@ -0,0 +1,27 @@
+if ([0]) {
+ // true
+ // Массив(Array) является объектом, объекты преобразуются в true
+}
+
+
+/* Плохо */
+if (name !== '') {
+ // ...код...
+}
+
+/* Хорошо */
+if (name) {
+ // ...код...
+}
+
+/* Плохо */
+if (collection.length > 0) {
+ // ...код...
+}
+
+/* Хорошо */
+if (collection.length) {
+ // ...код...
+}
+
+
diff --git a/app/templates/partials/js/examples/js-constructors-example.hbs b/app/templates/partials/js/examples/js-constructors-example.hbs
new file mode 100644
index 0000000..4c27486
--- /dev/null
+++ b/app/templates/partials/js/examples/js-constructors-example.hbs
@@ -0,0 +1,55 @@
+function Jedi() {
+ console.log('new jedi');
+}
+
+/* Плохо */
+Jedi.prototype = {
+ fight: function fight() {
+ console.log('fighting');
+ },
+
+ block: function block() {
+ console.log('blocking');
+ }
+};
+
+/* Хорошо */
+Jedi.prototype.fight = function fight() {
+ console.log('fighting');
+};
+
+Jedi.prototype.block = function block() {
+ console.log('blocking');
+};
+
+
+
+/* Плохо */
+Jedi.prototype.jump = function() {
+ this.jumping = true;
+ return true;
+};
+
+Jedi.prototype.setHeight = function(height) {
+ this.height = height;
+};
+
+var luke = new Jedi();
+luke.jump(); // => true
+luke.setHeight(20) // => undefined
+
+/* Хорошо */
+Jedi.prototype.jump = function() {
+ this.jumping = true;
+ return this;
+};
+
+Jedi.prototype.setHeight = function(height) {
+ this.height = height;
+ return this;
+};
+
+var luke = new Jedi();
+
+luke.jump()
+ .setHeight(20);
diff --git a/app/templates/partials/js/examples/js-copy-array-example.hbs b/app/templates/partials/js/examples/js-copy-array-example.hbs
new file mode 100644
index 0000000..c5692a9
--- /dev/null
+++ b/app/templates/partials/js/examples/js-copy-array-example.hbs
@@ -0,0 +1,11 @@
+var len = items.length,
+ itemsCopy = [],
+ i;
+
+/* Плохо */
+for (i = 0; i < len; i++) {
+ itemsCopy[i] = items[i];
+}
+
+/* Хорошо */
+itemsCopy = items.slice();
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-copy-array-like-example.hbs b/app/templates/partials/js/examples/js-copy-array-like-example.hbs
new file mode 100644
index 0000000..95b5583
--- /dev/null
+++ b/app/templates/partials/js/examples/js-copy-array-like-example.hbs
@@ -0,0 +1,4 @@
+function trigger() {
+ var args = Array.prototype.slice.call(arguments);
+ ...
+}
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-events-example.hbs b/app/templates/partials/js/examples/js-events-example.hbs
new file mode 100644
index 0000000..a9c0b43
--- /dev/null
+++ b/app/templates/partials/js/examples/js-events-example.hbs
@@ -0,0 +1,19 @@
+/* Плохо */
+$(this).trigger('listingUpdated', listing.id);
+
+...
+
+$(this).on('listingUpdated', function(e, listingId) {
+ //делаем что-нибудь с listing, например:
+ listing.name = listings[listingId]
+});
+
+
+/* Хорошо */
+$(this).trigger('listingUpdated', { listingId : listing.id });
+
+...
+
+$(this).on('listingUpdated', function(e, data) {
+ // делаем что-нибудь с data.listingId
+});
diff --git a/app/templates/partials/js/examples/js-functions-example.hbs b/app/templates/partials/js/examples/js-functions-example.hbs
new file mode 100644
index 0000000..ae947d2
--- /dev/null
+++ b/app/templates/partials/js/examples/js-functions-example.hbs
@@ -0,0 +1,42 @@
+/* Объявление анонимной функции */
+var anonymous = function () {
+ return true;
+};
+
+/* Объявление именованной функции */
+var named = function named() {
+ return true;
+};
+
+/* Объявление функции, которая сразу же выполняется (замыкание) */
+(function () {
+ console.log('Если вы читаете это, вы открыли консоль.');
+})();
+
+
+
+/* Плохо */
+if (currentUser) {
+ function test() {
+ console.log('Плохой мальчик.');
+ }
+}
+
+/* Хорошо */
+var test;
+if (currentUser) {
+ test = function test() {
+ console.log('Молодец.');
+ };
+}
+
+
+/* Плохо */
+function nope(name, options, arguments) {
+ // ...код...
+}
+
+/* Хорошо */
+function yup(name, options, args) {
+ // ...код...
+}
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-key-words-example.hbs b/app/templates/partials/js/examples/js-key-words-example.hbs
new file mode 100644
index 0000000..95f651b
--- /dev/null
+++ b/app/templates/partials/js/examples/js-key-words-example.hbs
@@ -0,0 +1,14 @@
+/* Плохо */
+var superman = {
+ class: 'alien'
+};
+
+/* Плохо */
+var superman = {
+ klass: 'alien'
+};
+
+/* Хорошо */
+var superman = {
+ type: 'alien'
+};
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-naming-conventions-example.hbs b/app/templates/partials/js/examples/js-naming-conventions-example.hbs
new file mode 100644
index 0000000..f5073b9
--- /dev/null
+++ b/app/templates/partials/js/examples/js-naming-conventions-example.hbs
@@ -0,0 +1,88 @@
+/* Плохо */
+function q() {
+ // ...код...
+}
+
+/* Хорошо */
+function query() {
+ // ...код...
+}
+
+
+/* Плохо */
+var OBJEcttsssss = {};
+var this_is_my_object = {};
+function c() {};
+var u = new user({
+ name: 'Bob Parr'
+});
+
+/* Хорошо */
+var thisIsMyObject = {};
+function thisIsMyFunction() {};
+var user = new User({
+ name: 'Bob Parr'
+});
+
+/* Плохо */
+function user(options) {
+ this.name = options.name;
+}
+
+var bad = new user({
+ name: 'Плохиш'
+});
+
+/* Хорошо */
+function User(options) {
+ this.name = options.name;
+}
+
+var good = new User({
+ name: 'Кибальчиш'
+});
+
+/* Плохо */
+this.__firstName__ = 'Panda';
+this.firstName_ = 'Panda';
+
+/* Хорошо */
+this._firstName = 'Panda';
+
+
+
+function Rocket() {}
+
+// ...
+
+Rocket.prototype.startMessage = 'Houston, I\'m flying into space!';
+
+/* Плохо */
+Rocket.prototype.start = function () {
+ var _this = this;
+
+ _this.lightsCameraAction(function () {
+ console.log(_this.startMessage);
+ });
+};
+
+/* Хорошо */
+Rocket.prototype.start = function () {
+ var rocket = this;
+
+ rocket.lightsCameraAction(function () {
+ console.log(rocket.startMessage);
+ });
+};
+
+
+
+/* Плохо */
+var log = function(msg) {
+ console.log(msg);
+};
+
+/* Хорошо */
+var log = function log(msg) {
+ console.log(msg);
+};
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-properties-example.hbs b/app/templates/partials/js/examples/js-properties-example.hbs
new file mode 100644
index 0000000..6f721bf
--- /dev/null
+++ b/app/templates/partials/js/examples/js-properties-example.hbs
@@ -0,0 +1,25 @@
+var luke = {
+ jedi: true,
+ age: 28
+};
+
+/* Плохо */
+var isJedi = luke['jedi'];
+
+/* Хорошо */
+var isJedi = luke.jedi;
+
+/* Если название свойства содержит дефис, то необходимо использовать нотацию с [] */
+var isJedi = luke['jedi-master'];
+
+
+var luke = {
+ jedi: true,
+ age: 28
+};
+
+function getProp(prop) {
+ return luke[prop];
+}
+
+var isJedi = getProp('jedi');
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-reserved-words-example.hbs b/app/templates/partials/js/examples/js-reserved-words-example.hbs
new file mode 100644
index 0000000..4cbc118
--- /dev/null
+++ b/app/templates/partials/js/examples/js-reserved-words-example.hbs
@@ -0,0 +1,11 @@
+/* Плохо */
+var superman = {
+ default: { clark: 'kent' },
+ private: true
+};
+
+/* Хорошо */
+var superman = {
+ defaults: { clark: 'kent' },
+ hidden: true
+};
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-spaces-example.hbs b/app/templates/partials/js/examples/js-spaces-example.hbs
new file mode 100644
index 0000000..b8f31e4
--- /dev/null
+++ b/app/templates/partials/js/examples/js-spaces-example.hbs
@@ -0,0 +1,52 @@
+/* Плохо */
+function test(){
+ console.log('test');
+}
+
+/* Хорошо */
+function test() {
+ console.log('test');
+}
+
+/* Плохо */
+dog.set('attr',{
+ age: '1 year',
+ breed: 'Bernese Mountain Dog'
+});
+
+/* Хорошо */
+dog.set('attr', {
+ age: '1 year',
+ breed: 'Bernese Mountain Dog'
+});
+
+
+/* Плохо */
+$('#items').find('.selected').highlight().end().find('.open').updateCount();
+
+/* Хорошо */
+$('#items')
+ .find('.selected')
+ .highlight()
+ .end()
+ .find('.open')
+ .updateCount();
+
+/* Плохо */
+var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
+ .attr('width', (radius + margin) * 2).append('svg:g')
+ .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
+ .call(tron.led);
+
+/* Хорошо */
+var leds = stage.selectAll('.led')
+ .data(data)
+ .enter().append('svg:svg')
+ .class('led', true)
+ .attr('width', (radius + margin) * 2)
+ .append('svg:g')
+ .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
+ .call(tron.led);
+
+
+
diff --git a/app/templates/partials/js/examples/js-strings-example.hbs b/app/templates/partials/js/examples/js-strings-example.hbs
new file mode 100644
index 0000000..7458254
--- /dev/null
+++ b/app/templates/partials/js/examples/js-strings-example.hbs
@@ -0,0 +1,27 @@
+/* Плохо */
+var name = "Боб Дилан";
+
+/* Хорошо */
+var name = 'Боб Дилан';
+
+/* Плохо */
+var fullName = "Боб " + this.lastName;
+
+/* Хорошо */
+var fullName = 'Дилан ' + this.lastName;
+
+
+/* Плохо */
+var errorMessage = 'Эта сверхдлинная ошибка возникла из-за белой обезъяны. Не говори про обезъяну! Не слушай об обезьяне! Не думай об обезъяне!';
+
+/* Плохо */
+var errorMessage = 'Эта сверхдлинная ошибка возникла из-за белой обезъяны. \
+Не говори про обезъяну! Не слушай об обезьяне! \
+Не думай об обезъяне!';
+
+/* Хорошо */
+var errorMessage = (
+ 'Эта сверхдлинная ошибка возникла из-за белой обезъяны. ' +
+ 'Не говори про обезъяну! Не слушай об обезьяне! ' +
+ 'Не думай об обезъяне!'
+);
\ No newline at end of file
diff --git a/app/templates/partials/js/examples/js-syntax-example.hbs b/app/templates/partials/js/examples/js-syntax-example.hbs
new file mode 100644
index 0000000..8a8edcd
--- /dev/null
+++ b/app/templates/partials/js/examples/js-syntax-example.hbs
@@ -0,0 +1,2 @@
+
+
diff --git a/app/templates/partials/js/examples/js-variables-example.hbs b/app/templates/partials/js/examples/js-variables-example.hbs
new file mode 100644
index 0000000..3e299a6
--- /dev/null
+++ b/app/templates/partials/js/examples/js-variables-example.hbs
@@ -0,0 +1,83 @@
+/* Плохо */
+var items = getItems();
+var goSportsTeam = true;
+var dragonball = 'z';
+
+/* Хорошо */
+var items = getItems(),
+ goSportsTeam = true,
+ dragonball = 'z';
+
+
+/* Плохо */
+var i, len, dragonball,
+ items = getItems(),
+ goSportsTeam = true;
+
+/* Плохо */
+var i, items = getItems(),
+ dragonball,
+ goSportsTeam = true,
+ len;
+
+/* Хорошо */
+var items = getItems(),
+ goSportsTeam = true,
+ dragonball,
+ length,
+ i;
+
+
+/* Плохо */
+function () {
+ test();
+ console.log('Делаю что-нибудь..');
+
+ //..или не делаю...
+
+ var name = getName();
+
+ if (name === 'test') {
+ return false;
+ }
+
+ return name;
+}
+
+/* Хорошо */
+function() {
+ var name = getName();
+
+ test();
+ console.log('Делаю что-то полезное..');
+
+ //..продолжаю приносить пользу людям..
+
+ if (name === 'test') {
+ return false;
+ }
+
+ return name;
+}
+
+/* Плохо */
+function() {
+ var name = getName();
+
+ if (!arguments.length) {
+ return false;
+ }
+
+ return true;
+}
+
+/* Хорошо */
+function() {
+ if (!arguments.length) {
+ return false;
+ }
+
+ var name = getName();
+
+ return true;
+}
\ No newline at end of file
diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs
new file mode 100644
index 0000000..b65b6ac
--- /dev/null
+++ b/app/templates/partials/js/js-rules.hbs
@@ -0,0 +1,229 @@
+
+
html2jade.org - конвертация HTML в Jade и Jade в HTML
+
diff --git a/app/templates/partials/js/rules/js-access-functions.hbs b/app/templates/partials/js/rules/js-access-functions.hbs
new file mode 100644
index 0000000..b8ef85d
--- /dev/null
+++ b/app/templates/partials/js/rules/js-access-functions.hbs
@@ -0,0 +1,5 @@
+
Геттеры и сеттеры
+
Функции универсального доступа к свойствам не требуются.
+
Если вам необходимо создать функцию для доступа к переменной, используйте раздельные функции getVal() и setVal('hello')
+
Если свойство является логическим(boolean), используйте isVal() или hasVal()
+
Вы можете создавать функции get() и set(), но будьте логичны и последовательны – то есть не добавляйте свойства, которые не могут быть изменены через эти функции.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-code-blocks.hbs b/app/templates/partials/js/rules/js-code-blocks.hbs
new file mode 100644
index 0000000..a735be6
--- /dev/null
+++ b/app/templates/partials/js/rules/js-code-blocks.hbs
@@ -0,0 +1,2 @@
+
Блоки кода
+
Используйте фигурные скобки для всех многострочных блоков.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-comments.hbs b/app/templates/partials/js/rules/js-comments.hbs
new file mode 100644
index 0000000..61338c0
--- /dev/null
+++ b/app/templates/partials/js/rules/js-comments.hbs
@@ -0,0 +1,6 @@
+
Комментарии
+
Используйте /** ... */ для многострочных комментариев. Включите описание, опишите типы и значения для всех параметров и возвращаемых значений в формате jsdoc.
+
Используйте // для комментариев в одну строку. Размещайте комментарии на новой строке над темой комментария. Добавляйте пустую строку над комментарием.
+
Префикс TODO помогает другим разработчикам быстро понять, что вы указываете на проблему, к которой нужно вернуться в дальнейшем, или если вы предлагете решение проблемы, которое должно быть реализовано.
Эти комментарии отличаются от обычных комментариев, так как не описывают текущее поведение, а призывают к действию, например TODO -- нужно реализовать интерфейс. Такие комментарии также автоматически обнаруживаются многими IDE и редакторами кода, что позволяет быстро перемещаться между ними.
+
Используйте // TODO FIXME: для аннотирования проблем
+
Используйте // TODO: для указания решений проблем
diff --git a/app/templates/partials/js/rules/js-conditionals.hbs b/app/templates/partials/js/rules/js-conditionals.hbs
new file mode 100644
index 0000000..3e57dc2
--- /dev/null
+++ b/app/templates/partials/js/rules/js-conditionals.hbs
@@ -0,0 +1,12 @@
+
Условные выражения и равенства
+
Используйте === и !== вместо == и !=.
+
Условные выражения вычисляются посредством приведения к логическому типу Boolean через метод ToBoolean и всегда следуют следующим правилам:
+
+
Object всегда соответствует true
+
Undefined всегда соответствует false
+
Null всегда соответствует false
+
Boolean остается неизменным
+
Number соответствует false, если является +0, -0, или NaN, в противном случае соответствует true
+
String означает false, если является пустой строкой '', в противном случае true. Условно говоря, для строки происходит сравнение не ее самой, а ее длины – в соответствии с типом number.
+
+
Используйте короткий синтаксис.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-constructors.hbs b/app/templates/partials/js/rules/js-constructors.hbs
new file mode 100644
index 0000000..ab04be7
--- /dev/null
+++ b/app/templates/partials/js/rules/js-constructors.hbs
@@ -0,0 +1,4 @@
+
Конструкторы
+
Присваивайте метод прототипу вместо замены прототипа на другой объект. Замена прототипа на другой объект делает наследование невозможным.
+
Методы могут возвращать this для создания цепочек вызовов. Но стоит оставаться последовательным и обеспечить одинаковое поведение для всех методов, кроме геттеров.
+
Вы можете заменить стандартный метод toString(), но убедитесь, что он работает и не вызывает побочных эффектов.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-copy-array-like.hbs b/app/templates/partials/js/rules/js-copy-array-like.hbs
new file mode 100644
index 0000000..298f1ba
--- /dev/null
+++ b/app/templates/partials/js/rules/js-copy-array-like.hbs
@@ -0,0 +1,2 @@
+
Копирование похожий по свойствам на массив объект
+
Чтобы скопировать похожий по свойствам на массив объект (например, NodeList или Arguments), используйте Array::slice.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-copy-array.hbs b/app/templates/partials/js/rules/js-copy-array.hbs
new file mode 100644
index 0000000..df5ca3b
--- /dev/null
+++ b/app/templates/partials/js/rules/js-copy-array.hbs
@@ -0,0 +1,2 @@
+
Копирование массива
+
Если вам необходимо скопировать массив, используйте Array::slice.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-events.hbs b/app/templates/partials/js/rules/js-events.hbs
new file mode 100644
index 0000000..d7fb4fd
--- /dev/null
+++ b/app/templates/partials/js/rules/js-events.hbs
@@ -0,0 +1,2 @@
+
События
+
Подключая набор данных к событиям (как DOM-событиям, так и js-событиям, например, в Backbone), передавайте объект вместо простой переменной. Это позволяет в процессе всплытия событий добавлять к данному объекту дополнительную информацию.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-functions.hbs b/app/templates/partials/js/rules/js-functions.hbs
new file mode 100644
index 0000000..1d37184
--- /dev/null
+++ b/app/templates/partials/js/rules/js-functions.hbs
@@ -0,0 +1,4 @@
+
Функции
+
Никогда не объявляйте функцию внутри блока кода — например в if, while, else и так далее. Единственное исключение — блок функции. Вместо этого присваивайте функцию уже объявленной через var переменной. Условное объявление функций работает, но в различных браузерах работает по-разному.
+
Примечание. ECMA-262 устанавливает понятие блока как списка операторов. Объявление функции (не путайте с присвоением функции переменной) не является оператором.
+
Никогда не используйте аргумент функции arguments, он будет более приоритетным над объектом arguments, который доступен без объявления для каждой функции.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-key-words.hbs b/app/templates/partials/js/rules/js-key-words.hbs
new file mode 100644
index 0000000..1b0b1c9
--- /dev/null
+++ b/app/templates/partials/js/rules/js-key-words.hbs
@@ -0,0 +1,2 @@
+
Ключевые слова
+
Не используйте ключевые слова (в том числе измененные). Вместо них используйте синонимы.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-naming-conventions.hbs b/app/templates/partials/js/rules/js-naming-conventions.hbs
new file mode 100644
index 0000000..251f172
--- /dev/null
+++ b/app/templates/partials/js/rules/js-naming-conventions.hbs
@@ -0,0 +1,7 @@
+
Соглашение об именовании
+
Избегайте однобуквенных имен функций. Имена должны давать представление о том, что делает эта функция.
+
Используйте camelCase для именования объектов, функций и переменных.
+
Используйте PascalCase для именования конструкторов классов.
+
Используйте подчеркивание _ в качестве префикса для именования внутренних методов и переменных объекта.
+
Создавая ссылку на this, используйте название от самого класса в camelCase, вместо self/that/_this/me и т.п
+
Задавайте имена для функций. Это повышает читаемость сообщений об ошибках кода.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-properties.hbs b/app/templates/partials/js/rules/js-properties.hbs
new file mode 100644
index 0000000..db449f7
--- /dev/null
+++ b/app/templates/partials/js/rules/js-properties.hbs
@@ -0,0 +1,4 @@
+
Свойства
+
Используйте точечную нотацию для доступа к свойствам и методам.
+
Используйте нотацию с [], когда вы получаете свойство, имя для которого хранится в переменной, а также если название
+свойства содержит дефис.
diff --git a/app/templates/partials/js/rules/js-reserved-words.hbs b/app/templates/partials/js/rules/js-reserved-words.hbs
new file mode 100644
index 0000000..26ae171
--- /dev/null
+++ b/app/templates/partials/js/rules/js-reserved-words.hbs
@@ -0,0 +1,2 @@
+
Зарезервированные слова
+
Не используйте зарезервированные слова в качестве ключей объектов. Они не будут работать в IE8.
\ No newline at end of file
diff --git a/app/templates/partials/js/rules/js-spaces.hbs b/app/templates/partials/js/rules/js-spaces.hbs
new file mode 100644
index 0000000..2c78ed2
--- /dev/null
+++ b/app/templates/partials/js/rules/js-spaces.hbs
@@ -0,0 +1,3 @@
+
Пробелы
+
Устанавливайте один пробел перед открывающей скобкой.
+
Используйте отступы, когда делаете цепочки вызовов.
diff --git a/app/templates/partials/js/rules/js-strings.hbs b/app/templates/partials/js/rules/js-strings.hbs
new file mode 100644
index 0000000..57cf5fb
--- /dev/null
+++ b/app/templates/partials/js/rules/js-strings.hbs
@@ -0,0 +1,3 @@
+
Строки
+
Используйте одинарные кавычки '' для строк.
+
Строки длиннее 80 символов нужно разделять, выполняя перенос через конкатенацию строк.
diff --git a/app/templates/partials/js/rules/js-syntax.hbs b/app/templates/partials/js/rules/js-syntax.hbs
new file mode 100644
index 0000000..51394b4
--- /dev/null
+++ b/app/templates/partials/js/rules/js-syntax.hbs
@@ -0,0 +1,3 @@
+
Синтаксис
+
Данную картинку можно распечатать для удобства и повесить где - нибудь на виду, чтобы можно было быстро
+сверяться со стилем кода, к тому же запоминание будет идти гораздо быстрее.
diff --git a/app/templates/partials/js/rules/js-variables.hbs b/app/templates/partials/js/rules/js-variables.hbs
new file mode 100644
index 0000000..8d6d1c9
--- /dev/null
+++ b/app/templates/partials/js/rules/js-variables.hbs
@@ -0,0 +1,7 @@
+
Переменные
+
Используйте одно var объявление переменных для всех переменных, и объявляйте каждую переменную на новой строке.
+
Объявляйте переменные, которым не присваивается значение, в конце. Это удобно, когда вам необходимо задать значение одной из этих переменных на базе уже присвоенных значений.
+
Присваивайте переменные в начале области видимости. Это помогает избегать проблем с объявлением переменных и областями видимости.
+
Все переменные которые явлюятся общими для всего тела функции выносите наверх, переменные относящиеся к
+отдельным функциональными частям или конструкциям (например переменные для циклов ) объявляйте рядом с этими
+функциональным частями или конструкциями.
Используйте примеси (mixins) для частоповторяющихся участков кода и переменные для повторяющихся значений, но только в пределах одного компонента.
+
Используйте циклы для однотипных строк с различием в значениях, только если использование циклов
+ целесообразно.
\ No newline at end of file
diff --git a/app/templates/partials/stylus/recomendations/stylus-problems.hbs b/app/templates/partials/stylus/recomendations/stylus-problems.hbs
new file mode 100644
index 0000000..8e6b649
--- /dev/null
+++ b/app/templates/partials/stylus/recomendations/stylus-problems.hbs
@@ -0,0 +1,3 @@
+
Возможные проблемы и пути их решения
+
Когда комментируются свойства, нужно комментировать ещё и селектор, иначе он будет брать свойства вместе со следующим селектором или,
+ если следующего селектора нет, компилятор выдаст ошибку.
\ No newline at end of file
diff --git a/app/templates/partials/stylus/recomendations/stylus-useful-links.hbs b/app/templates/partials/stylus/recomendations/stylus-useful-links.hbs
new file mode 100644
index 0000000..aae6ca2
--- /dev/null
+++ b/app/templates/partials/stylus/recomendations/stylus-useful-links.hbs
@@ -0,0 +1,3 @@
+
diff --git a/app/templates/partials/stylus/recomendations/stylus-variables.hbs b/app/templates/partials/stylus/recomendations/stylus-variables.hbs
new file mode 100644
index 0000000..0cf57ba
--- /dev/null
+++ b/app/templates/partials/stylus/recomendations/stylus-variables.hbs
@@ -0,0 +1,8 @@
+
Переменные
+
При частой записи одинаковых значений следует использовать переменные:
+
+
+
Название шрифтов
+
Фирменные цвета
+
Ресурсы в data-uri
+
diff --git a/app/templates/partials/stylus/rules/stylus-composite-block-name.hbs b/app/templates/partials/stylus/rules/stylus-composite-block-name.hbs
new file mode 100644
index 0000000..328f52a
--- /dev/null
+++ b/app/templates/partials/stylus/rules/stylus-composite-block-name.hbs
@@ -0,0 +1,2 @@
+
Наименование составных блоков
+
Не используйте &- для описания имен составных блоков. Это затрудняет их поиск.
\ No newline at end of file
diff --git a/app/templates/partials/stylus/rules/stylus-indentation.hbs b/app/templates/partials/stylus/rules/stylus-indentation.hbs
new file mode 100644
index 0000000..e7a9a7f
--- /dev/null
+++ b/app/templates/partials/stylus/rules/stylus-indentation.hbs
@@ -0,0 +1,7 @@
+
Отступы
+
Используйте пробелы для отступов, не используйте табы и пробелы одновременно - стили не скомпилируются.
+
В этом примере ∙∙ - два пробела, а ―― - один отступ с табуляцией.
+
Используйте 2 пробела для отступов. В своем редакторе настройте табуляцию в виде пробелов, чтобы при нажатии
+на кнопку tab отступы делались в виде пробелов.
Примеси содержат в себе только блок свойств, селекторов внутри быть не должно.
\ No newline at end of file
diff --git a/app/templates/partials/stylus/rules/stylus-one-block.hbs b/app/templates/partials/stylus/rules/stylus-one-block.hbs
new file mode 100644
index 0000000..43e24ce
--- /dev/null
+++ b/app/templates/partials/stylus/rules/stylus-one-block.hbs
@@ -0,0 +1,4 @@
+
Один файл - один блок
+
Один файл — один компонент. Все стили для компонента должны быть описаны в этом файле. Стили других компонентов не должны встречаться в других файлах.
+ Компонентами являются как блоки, так и элементы блоков и модификаторов (БЭМ терминология).
+
\ No newline at end of file
diff --git a/app/templates/partials/stylus/rules/stylus-space-classes.hbs b/app/templates/partials/stylus/rules/stylus-space-classes.hbs
new file mode 100644
index 0000000..4a226e4
--- /dev/null
+++ b/app/templates/partials/stylus/rules/stylus-space-classes.hbs
@@ -0,0 +1,3 @@
+
Отступы между классами
+
Между классами с группой свойств добавляте перенос строки для лучшей читабельности.
+
\ No newline at end of file
diff --git a/app/templates/partials/stylus/rules/stylus-syntax.hbs b/app/templates/partials/stylus/rules/stylus-syntax.hbs
new file mode 100644
index 0000000..5d0c41c
--- /dev/null
+++ b/app/templates/partials/stylus/rules/stylus-syntax.hbs
@@ -0,0 +1,3 @@
+
Синтаксис
+
Используйте вложенность с &,
+ так будет видна зависимость и иерархическое дерево классов.
diff --git a/app/templates/partials/stylus/rules/stylus-total.hbs b/app/templates/partials/stylus/rules/stylus-total.hbs
new file mode 100644
index 0000000..153094e
--- /dev/null
+++ b/app/templates/partials/stylus/rules/stylus-total.hbs
@@ -0,0 +1,2 @@
+
Итого
+
Исходя из всех предыдущих получаем следующую иерархию и последовательность
\ No newline at end of file
diff --git a/app/templates/partials/stylus/stylus-recomendations.hbs b/app/templates/partials/stylus/stylus-recomendations.hbs
new file mode 100644
index 0000000..5522e40
--- /dev/null
+++ b/app/templates/partials/stylus/stylus-recomendations.hbs
@@ -0,0 +1,33 @@
+
+