From c091bc6dac7345cf20ffb4750cad3fa45e471aea Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 21 Dec 2015 02:32:33 +0300 Subject: [PATCH 001/103] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20MD?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- syntax.md | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 syntax.md diff --git a/syntax.md b/syntax.md new file mode 100644 index 0000000..ab1bdd7 --- /dev/null +++ b/syntax.md @@ -0,0 +1,218 @@ +# Стиль кода JS + +## Форматирование +### Строка не должна быть длиннее 80 символов +Строки более 80 символов длиной, снижают скорость чтения заставляя читатаеля +перемещать глаза на большое расстояние. + +Не стоит забывать и о том, что код, написанный в Академии часто показывается +в разного рода презентациях, что увеличивает требования к читаемости кода + +### Выравнивание знаков равенства запрещено +Трудоемкий и очень хрупкий процесс. Если хотя бы одна из переменных + +### Перенос строк +#### Блоки кода отделяются двумя пробелами +Код внутри блока отбивается двумя пробелами относительно начала блока. +Правило работает даже внутри кода с другим отступом. +```diff ++ function factorial(number) { ++ if (number === 1 || number === 0) { ++ return 1; ++ } ++ ++ return number * factorial(number - 1); ++ } +``` + +```diff ++ document.querySelectorAll('button'). ++ addEventListener('click', function(evt) { ++ // Используются два пробела, потому что отступ делается ++ // внутри тела функции, хоть она и является неперенесенным ++ // аргументом при вызове addEventListener. ++ evt.preventDefault(); ++ ga._trackEvent('click', evt.target.innerText); ++ }, true); +``` + +#### Аргументы функций и вызовы через цепчку отделяются четырьмя пробелами +При переносе длинных вызовов функции и обращении к свойствам через точку +по длинной цепочке, при переносе используются четыре пробела. Меньшее количество +пробелов сделает отступ неотличимым при быстром чтении кода от отступа +у вложенного блока. + +```diff ++ +``` + +#### Альтернативный способ переносить аргументы — выравнивать их с открывающей скобкой +В определенных случаях аргументы функции можно выравнивать вместе +с открывающей скобкой вызова функции. Это можно делать в случае, +если названия аргументов достаточно длинные. + +Такой же перенос можно использовать в проверке условий (`if`, `while`). + +```diff ++ while (footer.getBoundingClientRect().top - window.innerHeight > 0 && ++ currentPageNumber < itemsToShow) { ++ displayNextPage(); ++ } +``` + +_В обоих случаях при переносе аргументов функции, закрывающая скобка +при вызове остается на последней строке._ + +#### Объявление объектов и массивов +При многострочном объявлении массивов и объектов, используется два пробела +и закрывающая скобка ставится на отдельную строку. +```diff ++ var AvailableDirection = [ ++ Direction.TOP, ++ Direction.LEFT, ++ Direction.RIGHT ++ ]; +``` + +#### В многострочных операциях, операторы ставятся в конце строки, а не в начале +При переносе длинных вызовов (чейны, объявление массивов и объектов, функции +с большим количеством аргументов, тернарные операторы) операторы остаются +на предыдущей строке. + +Правила с переносом оператора хорошо работают в языках, где необязательно +удалять забытые запятые в конце спиков. Но даже в этом случае быстрое удаление +и сортировка строк не будут работать, потому у списков будет отличаться первая +строка, а у чейнов — последняя и после сортировки и удаления нужно перепроверить +получившийся список на валидность. + +```diff ++ document.body. ++ querySelectorAll('div'). ++ quertSelectorAll('span'); + +- document.body +- .querySelectorAll('div') +- .quertSelectorAll('span'); +``` + +```diff ++ var Direction = { ++ TOP: 0x01, ++ BOTTOM: 0x02, ++ LEFT: 0x04, ++ RIGHT: 0x08 ++ }; + +- var Direction = { +- TOP: 0x01 +- ,BOTTOM: 0x02 +- ,LEFT: 0x04 +- ,RIGHT: 0x08 +- }; +``` + +```diff ++ var AvailableDirection = [ ++ Direction.TOP, ++ Direction.LEFT, ++ Direction.RIGHT ++ ]; + +- var AvailableDirection = [ +- Direction.TOP +- ,Direction.LEFT +- ,Direction.RIGHT +- ]; +``` + +Если примеры с объявлением массивов и объектов или с цепочкой вызовов +объясняются логически, то перенос разделителей в тернарном операторе +не имеет никакого смысла + +```diff +- var element = 'content' in document.createElement('template') +- ? template.content.children[0].cloneNode(true) +- : template.children[0].cloneNode(true); + ++ var element = 'content' in document.createElement('template') ? ++ template.content.children[0].cloneNode(true) : ++ template.chilren[0].cloneNode(true); +``` + +## Правила языка +В каждом файле нужно использовать директиву `'use strict'` для включения +интерпретатора в строгий режим исполнения JavaScript. + +### Каждая переменная объявляется через свой var +Один var для нескольких переменных является одним шагом исполнения, поэтому +проходится как интерпретатором, так и отладчиком как единственная инструкция, +даже если объявленных переменных несколько. В этом случае проблемной становится +отладка программы, если в одной из объявленных переменных допущена ошибка + +```diff +- var container = document.querySelector('.container'), +- buttons = container.querySelectorAll('button'), +- panels = container.querySelectorAll('.panel'); + ++ var container = document.querySelector('.container'); ++ var buttons = container.querySelectorAll('button'); ++ var panels = container.querySelectorAll('.panel'); +``` + +### Функции объявляются как переменные +Функции должны объявляться как переменные. Особенности «подвешивания» функций +позволяют их использовать до того как они были объявлены. Зачастую функция +объявляется в локальной области видимости и в этом случае ее объявление +не должно затрагивать всю область видимости. + +Положительный побочный эффект такого стиля заключается в том, +что при использовании его в обучающем процессе идея коллбэков объясняется +сильно проще + +```diff +- function onAnimationEnd(callback) { +- if (isExecuting) { +- function callbackToQueue() { +- callback(); +- queue.splice(queue.indexOf(callbackToQueue), 1); +- } +- +- queue.push(callbackToQueue); +- } else { +- callback(); +- } +- } + ++ var onAnimationEnd = function(callback) { ++ if (isExecuting) { ++ var callbackToQueue = function() { // Совсем хорошо, если let ++ callback(); ++ queue.splice(queue.indexOf(callbackToQueue), 1); ++ } ++ ++ queue.push(callbackToQueue); ++ } else { ++ callback(); ++ } ++ } +``` + +### Замыкания +```diff +- function onItemClick(item, i) { +- item.onClick = function() { +- var clickedItem = i; +- }; +- } + ++ function onItemClick(item, i) { ++ item.click = getClickHandler(i); ++ } ++ ++ function getClickHandler(i) { ++ var clickedItem = i; ++ } +``` From bbd25892dfb0c4485e40a5712d508a0846a83410 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Wed, 22 Feb 2017 19:30:26 +0300 Subject: [PATCH 002/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=83=20=D0=B4=D0=BB=D1=8F=20JS=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B3=D0=B0=D0=B9=D0=B4=D0=B0.=20=D0=93=D1=80=D1=83=D0=BF?= =?UTF-8?q?=D0=BF=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B0=20=D0=B8=D0=B7=20ESLint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../partials/js/js-recomendations.hbs | 0 app/templates/partials/js/js-rules.hbs | 207 ++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 app/templates/partials/js/js-recomendations.hbs create mode 100644 app/templates/partials/js/js-rules.hbs diff --git a/app/templates/partials/js/js-recomendations.hbs b/app/templates/partials/js/js-recomendations.hbs new file mode 100644 index 0000000..e69de29 diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs new file mode 100644 index 0000000..398e5b6 --- /dev/null +++ b/app/templates/partials/js/js-rules.hbs @@ -0,0 +1,207 @@ +# Синтаксис и лексика +## Отступы, пробелы и переносы +'indent': ['error', 2, { + SwitchCase: 1, + // continuation indent + VariableDeclarator: 2, + MemberExpression: 2, + FunctionDeclaration: {parameters: 2}, + FunctionExpression: {parameters: 2}, + CallExpression: {arguments: 2} +}], +'no-irregular-whitespace': 'error', // eslint:recommended +'no-unexpected-multiline': 'error', // eslint:recommended +'no-multi-spaces': 'error', +'brace-style': 'error', +'block-spacing': ['error', 'always'], +'array-bracket-spacing': ['error', 'never'], +'comma-spacing': 'error', +'comma-style': 'error', +'eol-last': 'error', +'no-trailing-spaces': 'error', +'object-curly-spacing': 'error', +'no-mixed-spaces-and-tabs': 'error', // eslint:recommended +'no-multiple-empty-lines': ['error', {max: 2}], +'linebreak-style': 'off', // check this in git +'computed-property-spacing': 'error', +'func-call-spacing': 'error', +'key-spacing': 'error', +'keyword-spacing': 'error', +'padded-blocks': ['off', 'never'], +'semi-spacing': 'error', +'space-before-blocks': 'error', +'space-before-function-paren': ['error', {named: 'never', anonymous: 'always'}], +'spaced-comment': ['error', 'always'], +'generator-star-spacing': ['error', 'after'], +'rest-spread-spacing': 'error', +'yield-star-spacing': ['error', 'after'] + +## Строки +'no-multi-str': 'error', // запрет на использование переносов в ES5-строках +'no-octal-escape': 'error', +'quote-props': ['error', 'consistent'], +'quotes': ['error', 'single', {allowTemplateLiterals: true}], + +## Числа +'no-floating-decimal': 'error', // запрет на опускание нуля +'no-octal': 'error', //default + +## Литералы +'no-array-constructor': 'error', +'no-new-object': 'error', + +### Объекты +'no-dupe-keys': 'error', +'no-dupe-args': 'error', +'no-duplicate-case': 'error', + +### Массивы + +## Операторы +'space-infix-ops': 'error', +'space-unary-ops': ['error', {words: true, nonwords: false}], + +# Именование +'no-label-var': 'error', +'camelcase': 'error', +'no-shadow': 'error', +'no-shadow-restricted-names': 'error', +'no-undef': 'error', //default // нельзя использовать необъявленные переменные +'no-undef-init': 'error', // нельзя создавать переменные без значения +'no-undefined': 'error', // нельзя использовать значение undefined +'new-cap': 'error', + +# Конструкции языка + +## Условные операторы +## Циклы +## Функции +## Переменные +## Классы +'constructor-super': 'error', // eslint:recommended + + +# Предотвращение ошибок +'semi': 'error', +'unicode-bom': 'warn', +'curly': ['error', "all"], +'no-empty': 'error', +'strict': ['error', 'global'], + +## Условные операторы +'yoda': ['error', "never"], +'eqeqeq': 'error', // использование строгого сравнения +'no-cond-assign': 'error', // eslint:recommended // запрет на присвоение в блоке условия +'no-unsafe-negation': 'error', // небезопасное отрицание (использование ! в in или instanceof без скобок) +'use-isnan': 'error', +'no-fallthrough': 'error', // запрет на проваливание в switch +'no-nested-ternary': 'error', + +## Функции +'consistent-return': 'error', // функция не возвращает undefined, особенно если есть другой return +'no-return-assign': 'error', +'arrow-parens': ['error', 'always'], + +## Классы +'no-this-before-super': 'error', // eslint:recommended + + +## Объявление переменных и функций +'no-var': 'error', +'no-redeclare': 'error', //default +'one-var': ['error', { + var: 'never', + let: 'never', + const: 'never' +}], + +### Объявление функций +'no-func-assign': 'error', +'no-inner-declarations': ["error", "functions"], // запрет на объявление значений внутри блоков +'no-new-func': 'error', // запрет на создание функций через конструктор Function +'prefer-rest-params': 'error', +'prefer-spread': 'error', + +### Создание значений +'no-obj-calls': 'error', // запрет на создание значений с помощью конструкторов без new (Math(), JSON(), Reflect()). +'no-sparse-arrays': 'error', // запрет на массивы с пропусками +'comma-dangle': ['error', 'only-multiline'], +'no-new-wrappers': 'error', // запрет на вызов конструкторов для примитивов +'new-parens': 'error', +'no-new-symbol': 'error', // eslint:recommended + +## Хорошие практики +'no-with': 'error', +'no-alert': 'error', +'no-eval': 'error', +'no-implied-eval': 'error', // запрет на код в строчках (например timeout) +'no-script-url': 'error', // запрет на использование протокола javascript: +'no-new': 'error', // запрет на использование конструкторов для сайдэффектов + +### Манкипатчинг +'no-extend-native': 'error', // запрет на манкипатчинг +'no-global-assign': 'error', + +### Контекст +'no-extra-bind': 'error', // запрет на использование bind там где не нужно (например IIFE) +'no-invalid-this': 'error', // запрет на использование this вне объектов и классов + +### Переменные +'no-delete-var': 'error', //eslint:recommended + +## Приведение типов +'no-extra-boolean-cast': 'error', +'valid-typeof': 'error', // проверка на правильный тип в typeof +'radix': 'error', + +### Зафиксированный if (if..true) +'no-constant-condition': 'error', + +# Модульность и области видимости +## Глобальная область видимости +## Системы сборки + +# Чистый код +## Лишние символы (пробелы, точки с запятой и прочее) +'no-extra-semi': 'error', + +## Отладчик и консоль +'no-console': 'error', +'no-debugger': 'error', + +## Неиспользуемый код +'no-unreachable': 'error', +'no-unused-vars': ['error', {args: 'none'}], // eslint:recommended +'no-unused-expressions': 'error', + +## Обработка ошибок и исключения +'no-throw-literal': 'error', // eslint:recommended // запрет на выброс исключениями не объектов Error а литералов + +### try..catch с пустым try +'no-ex-assign': 'error' + +# Документирование +'valid-jsdoc': ['error', { + requireParamDescription: false, + requireReturnDescription: false, + requireReturn: false, + prefer: {returns: 'return'} +}], + +# Прочее +'guard-for-in': 'error', // Итерирование по объектам через hasOwnProp +'no-caller': 'error', // запрет на использование caller/callee в функциях +'no-iterator': 'error', // запрет на использование __iterator__ +'no-proto': 'error', // запрет на использование __proto__ +'no-labels': 'error', +'no-lone-blocks': 'error', +'no-sequences': 'error', + +## Регулярные выражения +'no-control-regex': 'error', +'no-empty-character-class': 'error', +'no-invalid-regexp': 'error', // нельзя создавать объект RegExp из неправильной строки +'no-regex-spaces': 'error', // запрет на использование нескольких пробелов в регулярках. Вместо этого предлагается использовать {3} + +# node.js +'no-process-exit': 'error', From e1ee94acbf4949d33675f29816ed4718e1c0d183 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Thu, 2 Mar 2017 17:03:19 +0300 Subject: [PATCH 003/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 78 ++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 10 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 398e5b6..8ca4e39 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -1,5 +1,7 @@ # Синтаксис и лексика ## Отступы, пробелы и переносы +Для правильного форматирования используйте файл .editorconfig в вашем редакторе. + 'indent': ['error', 2, { SwitchCase: 1, // continuation indent @@ -9,32 +11,97 @@ FunctionExpression: {parameters: 2}, CallExpression: {arguments: 2} }], +- Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела. + 'no-irregular-whitespace': 'error', // eslint:recommended +- Запрещено одновременное использование табов и пробелов для отступов. + 'no-unexpected-multiline': 'error', // eslint:recommended +- Выражения должны заканчиваться точками с запятой. + 'no-multi-spaces': 'error', +- Внутри строки не используется более одного пробела. + 'brace-style': 'error', +- Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует +```javascript +// Плохо: +if (condition) +{ + // code +} + +// Хорошо +if (condition) { + // code +} +``` + 'block-spacing': ['error', 'always'], +- В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом + 'array-bracket-spacing': ['error', 'never'], +- В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива + 'comma-spacing': 'error', +- После запятой всегда должен ставиться пробел, если запятая не в конце строки + 'comma-style': 'error', +- Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции. + 'eol-last': 'error', +- Файл должен заканчиваться пустой строкой + 'no-trailing-spaces': 'error', +- Строка не должна заканчиваться пробелами + 'object-curly-spacing': 'error', +- В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон + 'no-mixed-spaces-and-tabs': 'error', // eslint:recommended +- В коде не используются совместно табы и пробелы + 'no-multiple-empty-lines': ['error', {max: 2}], +- Блоки кода отделяются друг от друга не более чем двумя пустыми строками + 'linebreak-style': 'off', // check this in git +- В качестве символа строки используется стандартный символ, который используется в системе + 'computed-property-spacing': 'error', +- При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы + 'func-call-spacing': 'error', +- Оператор вызова функции () не отделяется круглыми скобками от названия функции + 'key-spacing': 'error', +- В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено + 'keyword-spacing': 'error', +- Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д. + 'padded-blocks': ['off', 'never'], +- В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода) + 'semi-spacing': 'error', +- После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся. + 'space-before-blocks': 'error', +- Перед скобками начинающими новый блок кода должен ставиться пробел. + 'space-before-function-paren': ['error', {named: 'never', anonymous: 'always'}], +- при объявлении анонимных функций, скобки с параметрами ставятся непосредственно после ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет. + 'spaced-comment': ['error', 'always'], +- В комментариях текст отбивается пробелом от начала комментария. + 'generator-star-spacing': ['error', 'after'], +- При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов + 'rest-spread-spacing': 'error', +- В spread-операторе точки не отделяются от названия коллекции + 'yield-star-spacing': ['error', 'after'] +- Звездочка после ключевого слова yield не отбивается пробелом. После звездочки проблел ставится всегда. ## Строки 'no-multi-str': 'error', // запрет на использование переносов в ES5-строках @@ -71,16 +138,6 @@ 'no-undefined': 'error', // нельзя использовать значение undefined 'new-cap': 'error', -# Конструкции языка - -## Условные операторы -## Циклы -## Функции -## Переменные -## Классы -'constructor-super': 'error', // eslint:recommended - - # Предотвращение ошибок 'semi': 'error', 'unicode-bom': 'warn', @@ -104,6 +161,7 @@ ## Классы 'no-this-before-super': 'error', // eslint:recommended +'constructor-super': 'error', // eslint:recommended ## Объявление переменных и функций From 94bc2f140081b695a0c487f46572c8a8db7eefb9 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 16:46:24 +0300 Subject: [PATCH 004/103] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D1=88=D0=B8=D1=80?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 8ca4e39..7bad4b2 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -105,28 +105,57 @@ if (condition) { ## Строки 'no-multi-str': 'error', // запрет на использование переносов в ES5-строках +- В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы. + 'no-octal-escape': 'error', +- В строках запрещено указывать код спецсимволов в восьмеричной системе счисления + +```javascript +// Плохо +var foo = "Copyright \251"; + +// Хорошо +var foo = "Copyright \u00A9"; // unicode +``` + 'quote-props': ['error', 'consistent'], +- При создании объектов через литералы свойства должны объявляться в одинаковом стиле: или без кавычек или с ними. + 'quotes': ['error', 'single', {allowTemplateLiterals: true}], +- В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам. ## Числа 'no-floating-decimal': 'error', // запрет на опускание нуля +- В числах запрещено опускать ноль в дробной и целой части. + 'no-octal': 'error', //default +- Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления. ## Литералы 'no-array-constructor': 'error', +- Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины. + 'no-new-object': 'error', +- Объекты должны создаваться через литерал объекта, а не через конструктор. ### Объекты 'no-dupe-keys': 'error', +- При создании объектов запрещено дублирование ключей. + 'no-dupe-args': 'error', +- При описании функций запрещено дублировать названия параметров. + 'no-duplicate-case': 'error', +- В операторе `switch` запрещено дублировать условия (case) ### Массивы ## Операторы 'space-infix-ops': 'error', +- В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами. + 'space-unary-ops': ['error', {words: true, nonwords: false}], +- Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof. # Именование 'no-label-var': 'error', From beb375c7470ba4fc4ad7075a7b78db64e255e989 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 18:09:53 +0300 Subject: [PATCH 005/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 7bad4b2..1397e6e 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -159,13 +159,29 @@ var foo = "Copyright \u00A9"; // unicode # Именование 'no-label-var': 'error', +- Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов + 'camelcase': 'error', +- Все переменные должны быть названы в верблюжьем регистре. Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре. + 'no-shadow': 'error', +- Запрещено использовать имена переменных, которые используются во внешних областях видимости. + 'no-shadow-restricted-names': 'error', +- Запрещено называть переменные и свойства ключевыми словами JSж + 'no-undef': 'error', //default // нельзя использовать необъявленные переменные +- Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта `window/global`. + 'no-undef-init': 'error', // нельзя создавать переменные без значения +- Запрещено объявлять переменные без значения. + 'no-undefined': 'error', // нельзя использовать значение undefined +- Запрещено напрямую обращаться к значению undefined. + 'new-cap': 'error', +- С заглавной буквы называются только функции-конструкторы. + # Предотвращение ошибок 'semi': 'error', From cfd3e9b01ced1f2c19087a260b70ee0f36df5de9 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 19:39:57 +0300 Subject: [PATCH 006/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0=D1=8E=D1=89=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=B1=D0=B5=D0=B6=D0=B0=D1=82=D1=8C=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D0=BF=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 1397e6e..f8c1578 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -185,10 +185,19 @@ var foo = "Copyright \u00A9"; // unicode # Предотвращение ошибок 'semi': 'error', +- Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI. + 'unicode-bom': 'warn', +- Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит. + 'curly': ['error', "all"], +- Обязательно используются блоки кода даже если в выражении содержится одна строчка + 'no-empty': 'error', +- В коде нет пустых блоков кода + 'strict': ['error', 'global'], +- Код работает в строгом режиме: в начале всех файлов явно прописана директива `use strict`. ## Условные операторы 'yoda': ['error', "never"], From 1ee8d98fdece89969eb44d26a2257f8fff458895 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:01:30 +0300 Subject: [PATCH 007/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0=D1=8E=D1=89=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=B1=D0=B5=D0=B6=D0=B0=D1=82=D1=8C=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=20=D1=83=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=D0=BD=D1=8B=D1=85=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index f8c1578..de150cd 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -200,13 +200,32 @@ var foo = "Copyright \u00A9"; // unicode - Код работает в строгом режиме: в начале всех файлов явно прописана директива `use strict`. ## Условные операторы -'yoda': ['error', "never"], +'yoda': ['error', "never"] +- Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения не наоброт. + +```javascript +if (1 === myValue) {} // Плохо +if (myValue === 1) {} // Хорошо +``` + 'eqeqeq': 'error', // использование строгого сравнения -'no-cond-assign': 'error', // eslint:recommended // запрет на присвоение в блоке условия -'no-unsafe-negation': 'error', // небезопасное отрицание (использование ! в in или instanceof без скобок) +- При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения + +'no-cond-assign': 'error', // eslint:recommended // запрет на присвоение в блоке +- В условных операторах не используется оператор присвоения + +'no-unsafe-negation': 'error', // +- В условтях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок. + 'use-isnan': 'error', +- Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать `isNaN`. + 'no-fallthrough': 'error', // запрет на проваливание в switch +- Запрещено использовать case без break или return в блоках switch. + 'no-nested-ternary': 'error', +- Не используются вложенные тернарные операторы. + ## Функции 'consistent-return': 'error', // функция не возвращает undefined, особенно если есть другой return From 9ce441e6daee3cf91379f1189bd20a420ba070d5 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:03:21 +0300 Subject: [PATCH 008/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index de150cd..90d456f 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -228,9 +228,14 @@ if (myValue === 1) {} // Хорошо ## Функции -'consistent-return': 'error', // функция не возвращает undefined, особенно если есть другой return +'consistent-return': 'error', +- Функция не возвращает undefined, особенно если есть другой return + 'no-return-assign': 'error', +- В return не используется оператор присваивания. + 'arrow-parens': ['error', 'always'], +- В стрелочных функциях всегда используются скобки для параметров, даже если параметр один ## Классы 'no-this-before-super': 'error', // eslint:recommended From a5b9e2c2ce8df3de04bc5056517e5181255d5a9f Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:04:27 +0300 Subject: [PATCH 009/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 90d456f..2532529 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -238,8 +238,11 @@ if (myValue === 1) {} // Хорошо - В стрелочных функциях всегда используются скобки для параметров, даже если параметр один ## Классы -'no-this-before-super': 'error', // eslint:recommended 'constructor-super': 'error', // eslint:recommended +- В конструкторе классов-наследников обязательно вызывается super() + +'no-this-before-super': 'error', // eslint:recommended +- В конструкторе нет обращения к this до того, как будет вызван super() ## Объявление переменных и функций From a85a8f9e61b9b0058a263c5ae30c3fb2c3bfc501 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:06:47 +0300 Subject: [PATCH 010/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 2532529..8267da1 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -247,12 +247,18 @@ if (myValue === 1) {} // Хорошо ## Объявление переменных и функций 'no-var': 'error', +- При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода. + 'no-redeclare': 'error', //default +- Запрещено переопределять с помощью ключевого слова ранее созданные переменные + 'one-var': ['error', { var: 'never', let: 'never', const: 'never' }], +- Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный `var`, `let` или `const`. + ### Объявление функций 'no-func-assign': 'error', From 9a5b3f1d733e462c671db43d42dd5831f1cce083 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:22:47 +0300 Subject: [PATCH 011/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 8267da1..aed8de2 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -262,10 +262,23 @@ if (myValue === 1) {} // Хорошо ### Объявление функций 'no-func-assign': 'error', -'no-inner-declarations': ["error", "functions"], // запрет на объявление значений внутри блоков -'no-new-func': 'error', // запрет на создание функций через конструктор Function +- Функции объявляются как функциональные выражения, а не определения функций. +```javascript +var myFunc = function() {}; // Хорошо +function myFunc() {}; // Плохо +``` + +'no-inner-declarations': ["error", "functions"], +- Запрещено объявление значений внутри блоков + +'no-new-func': 'error', +- Новые функции не создаются с помощью конструктора `Function` + 'prefer-rest-params': 'error', +- Вместо коллекции `arguments`, используется rest-оператор + 'prefer-spread': 'error', +- Вместо вызова функции через `apply` используется spread-оператор ### Создание значений 'no-obj-calls': 'error', // запрет на создание значений с помощью конструкторов без new (Math(), JSON(), Reflect()). From 93e4dc7fbebbf7ab54f2b547bb51a4080c43e3f7 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:46:11 +0300 Subject: [PATCH 012/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=20=D0=B8=D0=B7=D0=B1=D0=B5=D0=B6=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index aed8de2..edd4784 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -281,12 +281,23 @@ function myFunc() {}; // Плохо - Вместо вызова функции через `apply` используется spread-оператор ### Создание значений -'no-obj-calls': 'error', // запрет на создание значений с помощью конструкторов без new (Math(), JSON(), Reflect()). +'no-obj-calls': 'error', +- Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости `Math(), JSON(), Reflect()`. + 'no-sparse-arrays': 'error', // запрет на массивы с пропусками -'comma-dangle': ['error', 'only-multiline'], -'no-new-wrappers': 'error', // запрет на вызов конструкторов для примитивов +- При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых) + +'comma-dangle': ['error', 'only-multiline'] +- При создании непустых объектов и массивов не используются «висячие» запятые + +'no-new-wrappers': 'error', +- Не используются конструкторы примитивов, которые используются для автобоксинга `String`, `Number`, `Boolean` + 'new-parens': 'error', -'no-new-symbol': 'error', // eslint:recommended +- Конструкторы вызываются со скобками, даже если у них нет параметров. + +'no-new-symbol': 'error', +- Символы (`Symbol`) создаются вызовом функции `Symbol` без ключевого слова `new`. ## Хорошие практики 'no-with': 'error', From e22a612974ac9f51626abbf4bbae3414e6128c89 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:51:57 +0300 Subject: [PATCH 013/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?,=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4=D1=83?= =?UTF-8?q?=D1=8E=D1=89=D0=B8=D0=B5=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=80=D0=B0=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D1=85=D0=BE=D1=80=D0=BE=D1=88=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index edd4784..d26ef18 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -301,11 +301,22 @@ function myFunc() {}; // Плохо ## Хорошие практики 'no-with': 'error', +- Не используется конструкция `with`. + 'no-alert': 'error', +- Не используются `alert`. + 'no-eval': 'error', -'no-implied-eval': 'error', // запрет на код в строчках (например timeout) -'no-script-url': 'error', // запрет на использование протокола javascript: +- Не используется выполнение кода через `eval`. + +'no-implied-eval': 'error', +- Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например `setTimeout`. + +'no-script-url': 'error', +- Не используется протокол javascript. + 'no-new': 'error', // запрет на использование конструкторов для сайдэффектов +- Конструкторы не используются без ключевого слова `new`. ### Манкипатчинг 'no-extend-native': 'error', // запрет на манкипатчинг From db7c0d8a64186c8e6e5cbad8e4dbca90b10d32e2 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:56:19 +0300 Subject: [PATCH 014/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?,=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=89=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D0=B0=D0=BD=D0=BA=D0=B8=D0=BF=D0=B0=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index d26ef18..94fd9a8 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -319,8 +319,11 @@ function myFunc() {}; // Плохо - Конструкторы не используются без ключевого слова `new`. ### Манкипатчинг -'no-extend-native': 'error', // запрет на манкипатчинг +'no-extend-native': 'error', +- Встроенные в язык объекты и прототипы не расширяются в рантайме + 'no-global-assign': 'error', +- Не переопределяются глобальные значения (undefined, null, Object, window и прочие) ### Контекст 'no-extra-bind': 'error', // запрет на использование bind там где не нужно (например IIFE) From 2aa4bd70c3399c14c28b891eb767a25a9bb5d4b2 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:58:05 +0300 Subject: [PATCH 015/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?,=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=89=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D0=B0=D0=BD=D0=B8=D0=BF=D1=83=D0=BB=D1=8F?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D1=81=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D1=81=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 94fd9a8..e8ab2a5 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -326,8 +326,11 @@ function myFunc() {}; // Плохо - Не переопределяются глобальные значения (undefined, null, Object, window и прочие) ### Контекст -'no-extra-bind': 'error', // запрет на использование bind там где не нужно (например IIFE) -'no-invalid-this': 'error', // запрет на использование this вне объектов и классов +'no-extra-bind': 'error', +- bind не используется вне методов классов + +'no-invalid-this': 'error', +- в функциях, которые не являются методами никакого объекта или класса не используется `this` ### Переменные 'no-delete-var': 'error', //eslint:recommended From 7a3905370f7242dd50f400b6078c531106ea22ee Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 6 Mar 2017 20:58:57 +0300 Subject: [PATCH 016/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE?= =?UTF-8?q?,=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=89=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B5=D0=B5=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20delete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 1 + 1 file changed, 1 insertion(+) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index e8ab2a5..1823fea 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -334,6 +334,7 @@ function myFunc() {}; // Плохо ### Переменные 'no-delete-var': 'error', //eslint:recommended +- Переменные, объявленные через `var` не удаляются оператором `delete` ## Приведение типов 'no-extra-boolean-cast': 'error', From 871d3a88874dd6a11f0c5c2c27948aa12f6001be Mon Sep 17 00:00:00 2001 From: Vitaly Zyuzin Date: Tue, 21 Mar 2017 18:02:59 +0300 Subject: [PATCH 017/103] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B8?= =?UTF-8?q?=20(#12)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обновляет конфиги --- .postcss-sorting.json | 769 ++++++++++++++++++++++-------------------- .stylelintrc | 96 ++---- 2 files changed, 431 insertions(+), 434 deletions(-) diff --git a/.postcss-sorting.json b/.postcss-sorting.json index 31ce4fa..fd354a5 100644 --- a/.postcss-sorting.json +++ b/.postcss-sorting.json @@ -1,363 +1,414 @@ { - "empty-lines-between-children-rules": 1, - "empty-lines-between-media-rules": 1, - "sort-order": [ - [ - "@mixin" + "clean-empty-lines": true, + "at-rule-nested-empty-line-before": [true, { + "except": ["first-nested"] + }], + "declaration-empty-line-before": [true, { + "except": ["after-declaration", "first-nested"], + "ignore": ["after-comment", "after-declaration"] + }], + "rule-nested-empty-line-before": [true, { + "except": ["first-nested"], + "ignore": ["after-comment"] + }], + "order": [ + "custom-properties", + { + "type": "at-rule", + "name": "mixin" + }, + "declarations", + "at-rules", + "rules" ], - [ - "content", - "position", - "top", - "right", - "bottom", - "left", - "z-index" + "properties-order": [{ + "emptyLineBefore": true, + "properties": [ + "content", + "position", + "top", + "right", + "bottom", + "left", + "z-index" + ] + }, + { + "emptyLineBefore": true, + "properties": [ + "display", + "-webkit-flex", + "-ms-flex", + "flex", + "-webkit-flex-grow", + "flex-grow", + "-webkit-flex-shrink", + "flex-shrink", + "-webkit-flex-basis", + "flex-basis", + "-webkit-flex-flow", + "flex-flow", + "-webkit-flex-direction", + "-ms-flex-direction", + "flex-direction", + "-webkit-flex-wrap", + "flex-wrap", + "-webkit-justify-content", + "justify-content", + "-webkit-align-content", + "align-content", + "-webkit-align-items", + "align-items", + "-webkit-order", + "-ms-flex-order", + "order", + "-webkit-align-self", + "align-self", + "float", + "clear", + "-webkit-box-sizing", + "-moz-box-sizing", + "box-sizing", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "margin", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "padding", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left", + "overflow", + "-ms-overflow-x", + "overflow-x", + "-ms-overflow-y", + "overflow-y", + "-webkit-overflow-scrolling", + "-ms-overflow-style" + ] + }, + { + "emptyLineBefore": true, + "properties": [ + "list-style", + "list-style-position", + "list-style-type", + "list-style-image", + "border-collapse", + "border-spacing", + "table-layout", + "empty-cells", + "caption-side", + "font", + "font-weight", + "font-size", + "line-height", + "font-family", + "vertical-align", + "text-align", + "direction", + "color", + "text-transform", + "text-decoration", + "font-style", + "font-variant", + "font-size-adjust", + "font-stretch", + "font-effect", + "font-emphasize", + "font-emphasize-position", + "font-emphasize-style", + "-webkit-font-smoothing", + "-moz-osx-font-smoothing", + "font-smooth", + "-webkit-text-align-last", + "-moz-text-align-last", + "-ms-text-align-last", + "text-align-last", + "letter-spacing", + "word-spacing", + "white-space", + "text-emphasis", + "text-emphasis-color", + "text-emphasis-style", + "text-emphasis-position", + "text-indent", + "-ms-text-justify", + "text-justify", + "-ms-writing-mode", + "text-outline", + "text-wrap", + "-ms-text-overflow", + "text-overflow", + "text-overflow-ellipsis", + "text-overflow-mode", + "text-orientation", + "-ms-word-wrap", + "word-wrap", + "-ms-word-break", + "word-break", + "-moz-tab-size", + "-o-tab-size", + "overflow-wrap", + "tab-size", + "-webkit-hyphens", + "-moz-hyphens", + "hyphens", + "unicode-bidi", + "columns", + "column-count", + "column-fill", + "column-gap", + "column-rule", + "column-rule-color", + "column-rule-style", + "column-rule-width", + "column-span", + "column-width", + "text-shadow", + "page-break-after", + "page-break-before", + "page-break-inside", + "src" + ] + }, + { + "emptyLineBefore": true, + "properties": [ + "background", + "background-color", + "background-image", + "background-repeat", + "background-position", + "-ms-background-position-x", + "background-position-x", + "-ms-background-position-y", + "background-position-y", + "-webkit-background-size", + "-moz-background-size", + "-o-background-size", + "background-size", + "-webkit-background-clip", + "-moz-background-clip", + "background-clip", + "background-origin", + "background-attachment", + "box-decoration-break", + "background-blend-mode", + "border", + "border-width", + "border-style", + "border-color", + "border-top", + "border-top-width", + "border-top-style", + "border-top-color", + "border-right", + "border-right-width", + "border-right-style", + "border-right-color", + "border-bottom", + "border-bottom-width", + "border-bottom-style", + "border-bottom-color", + "border-left", + "border-left-width", + "border-left-style", + "border-left-color", + "-webkit-border-radius", + "-moz-border-radius", + "border-radius", + "-webkit-border-top-left-radius", + "-moz-border-radius-topleft", + "border-top-left-radius", + "-webkit-border-top-right-radius", + "-moz-border-radius-topright", + "border-top-right-radius", + "-webkit-border-bottom-right-radius", + "-moz-border-radius-bottomright", + "border-bottom-right-radius", + "-webkit-border-bottom-left-radius", + "-moz-border-radius-bottomleft", + "border-bottom-left-radius", + "-webkit-border-image", + "-moz-border-image", + "-o-border-image", + "border-image", + "-webkit-border-image-source", + "-moz-border-image-source", + "-o-border-image-source", + "border-image-source", + "-webkit-border-image-slice", + "-moz-border-image-slice", + "-o-border-image-slice", + "border-image-slice", + "-webkit-border-image-width", + "-moz-border-image-width", + "-o-border-image-width", + "border-image-width", + "-webkit-border-image-outset", + "-moz-border-image-outset", + "-o-border-image-outset", + "border-image-outset", + "-webkit-border-image-repeat", + "-moz-border-image-repeat", + "-o-border-image-repeat", + "border-image-repeat", + "outline", + "outline-width", + "outline-style", + "outline-color", + "outline-offset", + "-webkit-box-shadow", + "-moz-box-shadow", + "box-shadow", + "-webkit-transform", + "-moz-transform", + "-ms-transform", + "-o-transform", + "transform", + "-webkit-transform-origin", + "-moz-transform-origin", + "-ms-transform-origin", + "-o-transform-origin", + "transform-origin", + "-webkit-backface-visibility", + "-moz-backface-visibility", + "backface-visibility", + "-webkit-perspective", + "-moz-perspective", + "perspective", + "-webkit-perspective-origin", + "-moz-perspective-origin", + "perspective-origin", + "-webkit-transform-style", + "-moz-transform-style", + "transform-style", + "visibility", + "cursor", + "opacity", + "-webkit-filter", + "filter", + "backdrop-filter" + ] + }, + { + "emptyLineBefore": true, + "properties": [ + "-webkit-transition", + "-moz-transition", + "-ms-transition", + "-o-transition", + "transition", + "-webkit-transition-delay", + "-moz-transition-delay", + "-ms-transition-delay", + "-o-transition-delay", + "transition-delay", + "-webkit-transition-timing-function", + "-moz-transition-timing-function", + "-ms-transition-timing-function", + "-o-transition-timing-function", + "transition-timing-function", + "-webkit-transition-duration", + "-moz-transition-duration", + "-ms-transition-duration", + "-o-transition-duration", + "transition-duration", + "-webkit-transition-property", + "-moz-transition-property", + "-ms-transition-property", + "-o-transition-property", + "transition-property", + "-webkit-animation", + "-moz-animation", + "-ms-animation", + "-o-animation", + "animation", + "-webkit-animation-name", + "-moz-animation-name", + "-ms-animation-name", + "-o-animation-name", + "animation-name", + "-webkit-animation-duration", + "-moz-animation-duration", + "-ms-animation-duration", + "-o-animation-duration", + "animation-duration", + "-webkit-animation-play-state", + "-moz-animation-play-state", + "-ms-animation-play-state", + "-o-animation-play-state", + "animation-play-state", + "-webkit-animation-timing-function", + "-moz-animation-timing-function", + "-ms-animation-timing-function", + "-o-animation-timing-function", + "animation-timing-function", + "-webkit-animation-delay", + "-moz-animation-delay", + "-ms-animation-delay", + "-o-animation-delay", + "animation-delay", + "-webkit-animation-iteration-count", + "-moz-animation-iteration-count", + "-ms-animation-iteration-count", + "-o-animation-iteration-count", + "animation-iteration-count", + "-webkit-animation-direction", + "-moz-animation-direction", + "-ms-animation-direction", + "-o-animation-direction", + "animation-direction", + "-webkit-animation-fill-mode", + "-moz-animation-fill-mode", + "-ms-animation-fill-mode", + "-o-animation-fill-mode", + "animation-fill-mode" + ] + }, + { + "emptyLineBefore": true, + "properties": [ + "appearance", + "clip", + "clip-path", + "counter-reset", + "counter-increment", + "resize", + "-webkit-user-select", + "-moz-user-select", + "-ms-user-select", + "user-select", + "-webkit-tap-highlight-color", + "nav-index", + "nav-up", + "nav-right", + "nav-down", + "nav-left", + "pointer-events", + "quotes", + "touch-action", + "will-change", + "zoom" + ] + }, + { + "emptyLineBefore": true, + "properties": [ + "fill", + "fill-rule", + "clip-rule", + "stroke" + ] + } ], - [ - "display", - "-webkit-flex", - "-ms-flex", - "flex", - "-webkit-flex-grow", - "flex-grow", - "-webkit-flex-shrink", - "flex-shrink", - "-webkit-flex-basis", - "flex-basis", - "-webkit-flex-flow", - "flex-flow", - "-webkit-flex-direction", - "-ms-flex-direction", - "flex-direction", - "-webkit-flex-wrap", - "flex-wrap", - "-webkit-justify-content", - "justify-content", - "-webkit-align-content", - "align-content", - "-webkit-align-items", - "align-items", - "-webkit-order", - "-ms-flex-order", - "order", - "-webkit-align-self", - "align-self", - "float", - "clear", - "-webkit-box-sizing", - "-moz-box-sizing", - "box-sizing", - "width", - "min-width", - "max-width", - "height", - "min-height", - "max-height", - "margin", - "margin-top", - "margin-right", - "margin-bottom", - "margin-left", - "padding", - "padding-top", - "padding-right", - "padding-bottom", - "padding-left", - "overflow", - "-ms-overflow-x", - "overflow-x", - "-ms-overflow-y", - "overflow-y", - "-webkit-overflow-scrolling" - ], - [ - "list-style", - "list-style-position", - "list-style-type", - "list-style-image", - "border-collapse", - "border-spacing", - "table-layout", - "empty-cells", - "caption-side", - "font", - "font-weight", - "font-size", - "line-height", - "font-family", - "vertical-align", - "text-align", - "direction", - "color", - "text-transform", - "text-decoration", - "font-style", - "font-variant", - "font-size-adjust", - "font-stretch", - "font-effect", - "font-emphasize", - "font-emphasize-position", - "font-emphasize-style", - "font-smooth", - "-webkit-text-align-last", - "-moz-text-align-last", - "-ms-text-align-last", - "text-align-last", - "letter-spacing", - "word-spacing", - "white-space", - "text-emphasis", - "text-emphasis-color", - "text-emphasis-style", - "text-emphasis-position", - "text-indent", - "-ms-text-justify", - "text-justify", - "-ms-writing-mode", - "text-outline", - "text-wrap", - "-ms-text-overflow", - "text-overflow", - "text-overflow-ellipsis", - "text-overflow-mode", - "text-orientation", - "-ms-word-wrap", - "word-wrap", - "-ms-word-break", - "word-break", - "-moz-tab-size", - "-o-tab-size", - "tab-size", - "-webkit-hyphens", - "-moz-hyphens", - "hyphens", - "unicode-bidi", - "columns", - "column-count", - "column-fill", - "column-gap", - "column-rule", - "column-rule-color", - "column-rule-style", - "column-rule-width", - "column-span", - "column-width", - "text-shadow", - "page-break-after", - "page-break-before", - "page-break-inside" - ], - [ - "background", - "background-color", - "background-image", - "background-repeat", - "background-position", - "-ms-background-position-x", - "background-position-x", - "-ms-background-position-y", - "background-position-y", - "-webkit-background-size", - "-moz-background-size", - "-o-background-size", - "background-size", - "-webkit-background-clip", - "-moz-background-clip", - "background-clip", - "background-origin", - "background-attachment", - "box-decoration-break", - "background-blend-mode", - "border", - "border-width", - "border-style", - "border-color", - "border-top", - "border-top-width", - "border-top-style", - "border-top-color", - "border-right", - "border-right-width", - "border-right-style", - "border-right-color", - "border-bottom", - "border-bottom-width", - "border-bottom-style", - "border-bottom-color", - "border-left", - "border-left-width", - "border-left-style", - "border-left-color", - "-webkit-border-radius", - "-moz-border-radius", - "border-radius", - "-webkit-border-top-left-radius", - "-moz-border-radius-topleft", - "border-top-left-radius", - "-webkit-border-top-right-radius", - "-moz-border-radius-topright", - "border-top-right-radius", - "-webkit-border-bottom-right-radius", - "-moz-border-radius-bottomright", - "border-bottom-right-radius", - "-webkit-border-bottom-left-radius", - "-moz-border-radius-bottomleft", - "border-bottom-left-radius", - "-webkit-border-image", - "-moz-border-image", - "-o-border-image", - "border-image", - "-webkit-border-image-source", - "-moz-border-image-source", - "-o-border-image-source", - "border-image-source", - "-webkit-border-image-slice", - "-moz-border-image-slice", - "-o-border-image-slice", - "border-image-slice", - "-webkit-border-image-width", - "-moz-border-image-width", - "-o-border-image-width", - "border-image-width", - "-webkit-border-image-outset", - "-moz-border-image-outset", - "-o-border-image-outset", - "border-image-outset", - "-webkit-border-image-repeat", - "-moz-border-image-repeat", - "-o-border-image-repeat", - "border-image-repeat", - "outline", - "outline-width", - "outline-style", - "outline-color", - "outline-offset", - "-webkit-box-shadow", - "-moz-box-shadow", - "box-shadow", - "-webkit-transform", - "-moz-transform", - "-ms-transform", - "-o-transform", - "transform", - "-webkit-transform-origin", - "-moz-transform-origin", - "-ms-transform-origin", - "-o-transform-origin", - "transform-origin", - "-webkit-backface-visibility", - "-moz-backface-visibility", - "backface-visibility", - "-webkit-perspective", - "-moz-perspective", - "perspective", - "-webkit-perspective-origin", - "-moz-perspective-origin", - "perspective-origin", - "-webkit-transform-style", - "-moz-transform-style", - "transform-style", - "visibility", - "cursor", - "opacity", - "-webkit-filter", - "filter" - ], - [ - "-webkit-transition", - "-moz-transition", - "-ms-transition", - "-o-transition", - "transition", - "-webkit-transition-delay", - "-moz-transition-delay", - "-ms-transition-delay", - "-o-transition-delay", - "transition-delay", - "-webkit-transition-timing-function", - "-moz-transition-timing-function", - "-ms-transition-timing-function", - "-o-transition-timing-function", - "transition-timing-function", - "-webkit-transition-duration", - "-moz-transition-duration", - "-ms-transition-duration", - "-o-transition-duration", - "transition-duration", - "-webkit-transition-property", - "-moz-transition-property", - "-ms-transition-property", - "-o-transition-property", - "transition-property", - "-webkit-animation", - "-moz-animation", - "-ms-animation", - "-o-animation", - "animation", - "-webkit-animation-name", - "-moz-animation-name", - "-ms-animation-name", - "-o-animation-name", - "animation-name", - "-webkit-animation-duration", - "-moz-animation-duration", - "-ms-animation-duration", - "-o-animation-duration", - "animation-duration", - "-webkit-animation-play-state", - "-moz-animation-play-state", - "-ms-animation-play-state", - "-o-animation-play-state", - "animation-play-state", - "-webkit-animation-timing-function", - "-moz-animation-timing-function", - "-ms-animation-timing-function", - "-o-animation-timing-function", - "animation-timing-function", - "-webkit-animation-delay", - "-moz-animation-delay", - "-ms-animation-delay", - "-o-animation-delay", - "animation-delay", - "-webkit-animation-iteration-count", - "-moz-animation-iteration-count", - "-ms-animation-iteration-count", - "-o-animation-iteration-count", - "animation-iteration-count", - "-webkit-animation-direction", - "-moz-animation-direction", - "-ms-animation-direction", - "-o-animation-direction", - "animation-direction" - ], - [ - "appearance", - "quotes", - "counter-reset", - "counter-increment", - "resize", - "-webkit-user-select", - "-moz-user-select", - "-ms-user-select", - "user-select", - "nav-index", - "nav-up", - "nav-right", - "nav-down", - "nav-left", - "pointer-events", - "will-change", - "clip", - "clip-path", - "zoom" - ], - [ - "@media" - ], - [ - ">child" - ] - ] + "unspecified-properties-position": "bottom" } diff --git a/.stylelintrc b/.stylelintrc index 68068db..1a6e8ba 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -2,14 +2,11 @@ "rules": { "color-hex-case": "lower", "color-hex-length": "long", - "color-named": null, - "color-no-hex": null, "color-no-invalid-hex": true, - "font-family-name-quotes": "double-unless-keyword", - "font-weight-notation": null, + "font-family-name-quotes": "always-unless-keyword", + "font-family-no-duplicate-names": true, - "function-blacklist": null, "function-calc-no-unspaced-operator": true, "function-comma-newline-after": "always-multi-line", "function-comma-newline-before": "never-multi-line", @@ -18,49 +15,28 @@ "function-linear-gradient-no-nonstandard-direction": true, "function-max-empty-lines": 0, "function-name-case": "lower", - "function-parentheses-newline-inside": null, "function-parentheses-space-inside": "never", - "function-url-data-uris": null, - "function-url-quotes": "double", - "function-whitelist": null, + "function-url-quotes": "always", "function-whitespace-after": "always", "number-leading-zero": "always", - "number-max-precision": null, "number-no-trailing-zeros": true, - "number-zero-length-no-unit": true, + "length-zero-no-unit": true, "string-no-newline": true, "string-quotes": "double", - "time-no-imperceptible": null, - - "unit-blacklist": null, "unit-case": "lower", "unit-no-unknown": true, - "unit-whitelist": null, - - "value-no-vendor-prefix": null, "value-keyword-case": "lower", "value-list-comma-newline-after": "always-multi-line", "value-list-comma-newline-before": "never-multi-line", "value-list-comma-space-after": "always-single-line", "value-list-comma-space-before": "never", + "value-list-max-empty-lines": 0, - "custom-property-no-outside-root": null, - "custom-property-pattern": null, - - "shorthand-property-no-redundant-values": null, - - "property-blacklist": null, "property-case": "lower", - "property-no-vendor-prefix": null, - "property-unit-blacklist": null, - "property-unit-whitelist": null, - "property-value-blacklist": null, - "property-value-whitelist": null, - "property-whitelist": null, "keyframe-declaration-no-important": true, @@ -69,57 +45,39 @@ "declaration-colon-newline-after": "always-multi-line", "declaration-colon-space-after": "always-single-line", "declaration-colon-space-before": "never", - "declaration-no-important": null, "declaration-block-no-duplicate-properties": true, - "declaration-block-no-ignored-properties": true, "declaration-block-no-shorthand-property-overrides": true, - "declaration-block-properties-order": null, "declaration-block-semicolon-newline-after": "always", "declaration-block-semicolon-newline-before": "never-multi-line", "declaration-block-semicolon-space-after": "always-single-line", "declaration-block-semicolon-space-before": "never", - "declaration-block-single-line-max-declarations": null, "declaration-block-trailing-semicolon": "always", + "block-closing-brace-empty-line-before": "never", "block-closing-brace-newline-after": "always", "block-closing-brace-newline-before": "always", "block-closing-brace-space-after": "always-single-line", "block-closing-brace-space-before": "always-single-line", "block-no-empty": true, - "block-no-single-line": true, "block-opening-brace-newline-after": "always", - "block-opening-brace-newline-before": null, "block-opening-brace-space-after": "always-single-line", "block-opening-brace-space-before": "always", "selector-attribute-brackets-space-inside": "never", - "selector-attribute-operator-blacklist": null, "selector-attribute-operator-space-after": "never", "selector-attribute-operator-space-before": "never", - "selector-attribute-operator-whitelist": null, - "selector-class-pattern": null, + "selector-attribute-quotes": "always", "selector-combinator-space-after": "always", "selector-combinator-space-before": "always", - "selector-id-pattern": null, + "selector-descendant-combinator-no-non-space": true, "selector-max-compound-selectors": 3, - "selector-max-specificity": null, - "selector-no-attribute": null, - "selector-no-combinator": null, - "selector-no-id": null, - "selector-no-qualifying-type": [true, { - "ignore": ["attribute"] - }], - "selector-no-type": null, - "selector-no-universal": null, - "selector-no-vendor-prefix": null, "selector-pseudo-class-case": "lower", "selector-pseudo-class-no-unknown": true, "selector-pseudo-class-parentheses-space-inside": "never", "selector-pseudo-element-case": "lower", "selector-pseudo-element-colon-notation": "double", "selector-pseudo-element-no-unknown": true, - "selector-root-no-composition": null, "selector-type-case": "lower", "selector-type-no-unknown": true, "selector-max-empty-lines": 0, @@ -129,26 +87,20 @@ "selector-list-comma-space-after": "always-single-line", "selector-list-comma-space-before": "never", - "root-no-standard-properties": null, - - "rule-nested-empty-line-before": ["always", { + "rule-empty-line-before": ["always", { "except": ["first-nested"], "ignore": ["after-comment"] }], - "rule-non-nested-empty-line-before": ["always", { - "ignore": ["after-comment"] - }], "media-feature-colon-space-after": "always", "media-feature-colon-space-before": "never", - "media-feature-name-no-vendor-prefix": null, - "media-feature-no-missing-punctuation": true, + "media-feature-name-case": "lower", + "media-feature-name-no-unknown": true, + "media-feature-name-no-vendor-prefix": true, + "media-feature-parentheses-space-inside": "never", "media-feature-range-operator-space-after": "always", "media-feature-range-operator-space-before": "always", - "custom-media-pattern": null, - - "media-query-parentheses-space-inside": "never", "media-query-list-comma-newline-after": "always-multi-line", "media-query-list-comma-newline-before": "never-multi-line", "media-query-list-comma-space-after": "always-single-line", @@ -157,37 +109,31 @@ "at-rule-empty-line-before": ["always", { "except": [ "first-nested", - "blockless-group" + "blockless-after-blockless" ], "ignore": ["after-comment"] }], "at-rule-name-case": "lower", + "at-rule-name-newline-after": "always-multi-line", "at-rule-name-space-after": "always", - "at-rule-no-vendor-prefix": null, + "at-rule-no-unknown": [true, { + "ignoreAtRules": ["mixin", "define-mixin"] + }], "at-rule-semicolon-newline-after": "always", - "stylelint-disable-reason": "always-before", - - "comment-empty-line-before": null, - "comment-whitespace-inside": null, - "comment-word-blacklist": null, + "comment-no-empty": true, "indentation": [2, { "except": ["value"] }], "max-empty-lines": 2, - "max-line-length": null, "max-nesting-depth": 3, - "no-browser-hacks": true, - "no-descending-specificity": null, "no-duplicate-selectors": true, + "no-empty-source": true, "no-eol-whitespace": true, "no-extra-semicolons": true, - "no-indistinguishable-colors": null, "no-invalid-double-slash-comments": true, - "no-missing-eof-newline": true, - "no-unknown-animations": null, - "no-unsupported-browser-features": null + "no-missing-end-of-source-newline": true } } From dfce0b94cac21130aa5e4287521f8420616abea6 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Fri, 21 Apr 2017 18:49:14 +0300 Subject: [PATCH 018/103] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=B8=D0=BB=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=20=D0=B2=D1=81=D1=8E=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D1=83,=20=D1=81=D0=BE=D1=82=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .babelrc | 3 - app/css/chapter.css | 57 -- app/css/footer.css | 67 -- app/css/general.css | 89 --- app/css/header.css | 33 - app/css/prism.css | 15 - app/css/style.css | 11 - app/css/variables.css | 19 - app/js/app.js | 1 - app/templates/helpers/import.js | 20 - app/templates/helpers/resolve.js | 26 - app/templates/index.hbs | 69 --- .../partials/css/css-recomendations.hbs | 51 -- app/templates/partials/css/css-rules.hbs | 64 -- .../css/examples/css-class-names-example.hbs | 11 - .../css/examples/css-font-variant-example.hbs | 24 - .../css/examples/css-import-example.hbs | 7 - .../css/examples/css-important-example.hbs | 5 - .../css/examples/css-order-example.hbs | 38 -- .../css/examples/css-selectors-example.hbs | 12 - .../css/examples/css-shorthand-example.hbs | 16 - .../css/examples/css-syntax-example.hbs | 16 - .../examples/css-vertical-align-example.hbs | 15 - .../css/recomendations/css-important.hbs | 7 - .../css/recomendations/css-selectors.hbs | 5 - .../css/recomendations/css-shorthand.hbs | 31 - .../partials/css/rules/css-class-names.hbs | 6 - .../partials/css/rules/css-font-variant.hbs | 18 - .../partials/css/rules/css-import.hbs | 4 - .../partials/css/rules/css-order.hbs | 24 - .../partials/css/rules/css-syntax.hbs | 22 - .../partials/css/rules/css-vertical-align.hbs | 10 - app/templates/partials/footer.hbs | 26 - app/templates/partials/header.hbs | 7 - .../examples/html-attribute-order-example.hbs | 5 - .../html/examples/html-boolean-example.hbs | 8 - .../html/examples/html-doctype-example.hbs | 5 - .../html/examples/html-encoding-example.hbs | 4 - .../examples/html-form-labels-example.hbs | 11 - .../html/examples/html-img-sizes-example.hbs | 14 - .../examples/html-js-includes-example.hbs | 18 - .../html/examples/html-language-example.hbs | 5 - .../examples/html-minimal-markup-example.hbs | 18 - .../html/examples/html-protocol-example.hbs | 6 - .../html/examples/html-semantics-example.hbs | 21 - .../examples/html-style-includes-example.hbs | 17 - .../html/examples/html-syntax-example.hbs | 16 - .../partials/html/html-recomendations.hbs | 38 -- app/templates/partials/html/html-rules.hbs | 135 ----- .../recomendations/html-minimal-markup.hbs | 4 - .../html/recomendations/html-protocol.hbs | 7 - .../html/recomendations/html-semantics.hbs | 7 - .../html/rules/html-attribute-order.hbs | 7 - .../partials/html/rules/html-boolean.hbs | 4 - .../partials/html/rules/html-doctype.hbs | 4 - .../partials/html/rules/html-encoding.hbs | 4 - .../partials/html/rules/html-form-labels.hbs | 4 - .../partials/html/rules/html-img-sizes.hbs | 7 - .../partials/html/rules/html-js-includes.hbs | 7 - .../partials/html/rules/html-language.hbs | 4 - .../html/rules/html-style-includes.hbs | 4 - .../partials/html/rules/html-syntax.hbs | 8 - .../partials/html/rules/html-validator.hbs | 4 - browserslist | 15 - config/kit.json | 22 - config/webpack.config.js | 46 -- css/normalize.css | 427 +++++++++++++ css/prism.css | 139 +++++ css/style.css | 287 +++++++++ gulp/copy.js | 11 - gulp/handlebars.js | 28 - gulp/postcss.js | 40 -- gulp/serve.js | 32 - gulp/webpack.js | 17 - gulpfile.babel.js | 10 - html-css.html | 572 ++++++++++++++++++ {app/img => img}/bane.svg | 0 {app/img => img}/github.svg | 0 {app/img => img}/icon-facebook.svg | 0 {app/img => img}/icon-instagram.svg | 0 {app/img => img}/icon-twitter.svg | 0 {app/img => img}/icon-vkontakte.svg | 0 {app/img => img}/logo-full.svg | 0 {app/img => img}/logo.svg | 0 {app/img => img}/og.png | Bin index.html | 0 js/prism.js | 6 + package.json | 49 -- 88 files changed, 1431 insertions(+), 1495 deletions(-) delete mode 100644 .babelrc delete mode 100644 app/css/chapter.css delete mode 100644 app/css/footer.css delete mode 100644 app/css/general.css delete mode 100644 app/css/header.css delete mode 100644 app/css/prism.css delete mode 100644 app/css/style.css delete mode 100644 app/css/variables.css delete mode 100644 app/js/app.js delete mode 100644 app/templates/helpers/import.js delete mode 100644 app/templates/helpers/resolve.js delete mode 100644 app/templates/index.hbs delete mode 100644 app/templates/partials/css/css-recomendations.hbs delete mode 100644 app/templates/partials/css/css-rules.hbs delete mode 100644 app/templates/partials/css/examples/css-class-names-example.hbs delete mode 100644 app/templates/partials/css/examples/css-font-variant-example.hbs delete mode 100644 app/templates/partials/css/examples/css-import-example.hbs delete mode 100644 app/templates/partials/css/examples/css-important-example.hbs delete mode 100644 app/templates/partials/css/examples/css-order-example.hbs delete mode 100644 app/templates/partials/css/examples/css-selectors-example.hbs delete mode 100644 app/templates/partials/css/examples/css-shorthand-example.hbs delete mode 100644 app/templates/partials/css/examples/css-syntax-example.hbs delete mode 100644 app/templates/partials/css/examples/css-vertical-align-example.hbs delete mode 100644 app/templates/partials/css/recomendations/css-important.hbs delete mode 100644 app/templates/partials/css/recomendations/css-selectors.hbs delete mode 100644 app/templates/partials/css/recomendations/css-shorthand.hbs delete mode 100644 app/templates/partials/css/rules/css-class-names.hbs delete mode 100644 app/templates/partials/css/rules/css-font-variant.hbs delete mode 100644 app/templates/partials/css/rules/css-import.hbs delete mode 100644 app/templates/partials/css/rules/css-order.hbs delete mode 100644 app/templates/partials/css/rules/css-syntax.hbs delete mode 100644 app/templates/partials/css/rules/css-vertical-align.hbs delete mode 100644 app/templates/partials/footer.hbs delete mode 100644 app/templates/partials/header.hbs delete mode 100644 app/templates/partials/html/examples/html-attribute-order-example.hbs delete mode 100644 app/templates/partials/html/examples/html-boolean-example.hbs delete mode 100644 app/templates/partials/html/examples/html-doctype-example.hbs delete mode 100644 app/templates/partials/html/examples/html-encoding-example.hbs delete mode 100644 app/templates/partials/html/examples/html-form-labels-example.hbs delete mode 100644 app/templates/partials/html/examples/html-img-sizes-example.hbs delete mode 100644 app/templates/partials/html/examples/html-js-includes-example.hbs delete mode 100644 app/templates/partials/html/examples/html-language-example.hbs delete mode 100644 app/templates/partials/html/examples/html-minimal-markup-example.hbs delete mode 100644 app/templates/partials/html/examples/html-protocol-example.hbs delete mode 100644 app/templates/partials/html/examples/html-semantics-example.hbs delete mode 100644 app/templates/partials/html/examples/html-style-includes-example.hbs delete mode 100644 app/templates/partials/html/examples/html-syntax-example.hbs delete mode 100644 app/templates/partials/html/html-recomendations.hbs delete mode 100644 app/templates/partials/html/html-rules.hbs delete mode 100644 app/templates/partials/html/recomendations/html-minimal-markup.hbs delete mode 100644 app/templates/partials/html/recomendations/html-protocol.hbs delete mode 100644 app/templates/partials/html/recomendations/html-semantics.hbs delete mode 100644 app/templates/partials/html/rules/html-attribute-order.hbs delete mode 100644 app/templates/partials/html/rules/html-boolean.hbs delete mode 100644 app/templates/partials/html/rules/html-doctype.hbs delete mode 100644 app/templates/partials/html/rules/html-encoding.hbs delete mode 100644 app/templates/partials/html/rules/html-form-labels.hbs delete mode 100644 app/templates/partials/html/rules/html-img-sizes.hbs delete mode 100644 app/templates/partials/html/rules/html-js-includes.hbs delete mode 100644 app/templates/partials/html/rules/html-language.hbs delete mode 100644 app/templates/partials/html/rules/html-style-includes.hbs delete mode 100644 app/templates/partials/html/rules/html-syntax.hbs delete mode 100644 app/templates/partials/html/rules/html-validator.hbs delete mode 100644 browserslist delete mode 100644 config/kit.json delete mode 100644 config/webpack.config.js create mode 100644 css/normalize.css create mode 100644 css/prism.css create mode 100644 css/style.css delete mode 100644 gulp/copy.js delete mode 100644 gulp/handlebars.js delete mode 100644 gulp/postcss.js delete mode 100644 gulp/serve.js delete mode 100644 gulp/webpack.js delete mode 100644 gulpfile.babel.js create mode 100644 html-css.html rename {app/img => img}/bane.svg (100%) rename {app/img => img}/github.svg (100%) rename {app/img => img}/icon-facebook.svg (100%) rename {app/img => img}/icon-instagram.svg (100%) rename {app/img => img}/icon-twitter.svg (100%) rename {app/img => img}/icon-vkontakte.svg (100%) rename {app/img => img}/logo-full.svg (100%) rename {app/img => img}/logo.svg (100%) rename {app/img => img}/og.png (100%) create mode 100644 index.html create mode 100644 js/prism.js delete mode 100644 package.json diff --git a/.babelrc b/.babelrc deleted file mode 100644 index c13c5f6..0000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["es2015"] -} diff --git a/app/css/chapter.css b/app/css/chapter.css deleted file mode 100644 index 5c13650..0000000 --- a/app/css/chapter.css +++ /dev/null @@ -1,57 +0,0 @@ -.chapter h2 { - padding: 2rem 1rem; - - background-color: var(--subtle-color); - - @media (--viewport-medium) { - padding: 2rem 2rem 2.5rem; - } - - @media (--viewport-large) { - padding: 2rem 3rem 2.5rem; - } -} - -.chapter-part { - display: flex; - flex-direction: column; - - border-bottom: 1px solid var(--subtle-color); - - @media (--viewport-large) { - flex-direction: row; - } -} - -.chapter-part-col { - padding: 2rem 1rem; - - @media (--viewport-medium) { - padding: 2rem; - } - - @media (--viewport-large) { - width: 50%; - padding: 3rem; - } - - & + .chapter-part-col { - border-top: 1px solid var(--subtle-color); - - @media (--viewport-large) { - border-top: 0; - } - } - - figure { - margin: 0 1rem 0 0; - } - - p { - max-width: 32rem; - } -} - -.gray-bgcolor { - background-color: var(--light-subtle-color); -} diff --git a/app/css/footer.css b/app/css/footer.css deleted file mode 100644 index 00bac59..0000000 --- a/app/css/footer.css +++ /dev/null @@ -1,67 +0,0 @@ -footer { - padding: 2rem; - - background-color: var(--brand-color-dark); -} - -.contacts { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.logo-full { - display: inline-block; - width: 161px; -} - -.social-icons { - display: flex; - justify-content: space-between; - align-items: center; - margin: 0.5rem 0 1rem 0; -} - -.social-icons, -.github { - font-size: 0; -} - -.icon { - min-width: 2rem; - min-height: 2rem; - - background-repeat: no-repeat; - background-position: center; - background-size: calc(100% - 5px); - opacity: 0.5; - - &:hover { - opacity: 1; - } - - &-vk { - background-image: resolve("icon-vkontakte.svg"); - } - - &-fb { - background-image: resolve("icon-facebook.svg"); - } - - &-tw { - background-image: resolve("icon-twitter.svg"); - } - - &-ig { - background-image: resolve("icon-instagram.svg"); - } -} - -.github-link { - display: inline-block; - width: 91px; - height: 16px; - - background-image: resolve("github.svg"); -} diff --git a/app/css/general.css b/app/css/general.css deleted file mode 100644 index 5f1107d..0000000 --- a/app/css/general.css +++ /dev/null @@ -1,89 +0,0 @@ -html { - font-size: var(--base-px-size); - - @media (--viewport-large) { - font-size: var(--large-px-size); - } -} - -body { - margin: 0; - - font: 17px/1.6 "Helvetica", "Arial", sans-serif; - color: var(--dark-color); - - background-color: var(--light-color); -} - -a:any-link { - color: var(--dark-color); - text-decoration: underline; -} - -a:hover { - text-decoration: none; -} - -h1, -h2, -h4 { - margin: 0; - - font-weight: normal; - color: var(--darker-color); - letter-spacing: -0.025em; -} - -h2, -h4 { - line-height: 1.2; -} - -h1 { - font-size: 3rem; - line-height: 1.3; -} - -h2 { - font-size: 2.5rem; -} - -h4 { - font-size: 1.75rem; -} - -code, -pre { - font-family: "Consolas", "Liberation Mono", "Menlo", "Courier", monospace; -} - -code { - padding: 2px 4px; - - font-size: 95%; - color: #d44950; - - background-color: #f7f7f9; - border-radius: 0.2rem; -} - -pre { - display: block; - margin: 0 0 1rem; - - line-height: 1.4; - white-space: pre-wrap; -} - -pre code { - padding: 0; - - color: inherit; - - background-color: transparent; - border: 0; -} - -ul li { - margin-bottom: 0.25rem; -} diff --git a/app/css/header.css b/app/css/header.css deleted file mode 100644 index 9cfa541..0000000 --- a/app/css/header.css +++ /dev/null @@ -1,33 +0,0 @@ -header { - padding: 1rem 1rem 6rem; - - text-align: center; - - background-color: var(--brand-color); - background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); - - @media (--viewport-medium) { - padding-bottom: 4rem; - } - - h1 { - margin: 0 0 0.25rem; - - color: var(--light-color); - } - - p { - margin-top: 0; - - font-size: 1.1rem; - } - - a:any-link { - color: var(--light-color); - } -} - -.logo { - width: 300px; - height: 300px; -} diff --git a/app/css/prism.css b/app/css/prism.css deleted file mode 100644 index 4b0f50a..0000000 --- a/app/css/prism.css +++ /dev/null @@ -1,15 +0,0 @@ -/* override default prism theme */ -code[class*="language-"], -pre[class*="language-"] { - white-space: pre-wrap; -} - -pre[class*="language-"] { - margin: 0; - padding: 0; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: initial; -} diff --git a/app/css/style.css b/app/css/style.css deleted file mode 100644 index df17289..0000000 --- a/app/css/style.css +++ /dev/null @@ -1,11 +0,0 @@ -@import "http://github.com/normalize.css"; -@import "http://github.com/variables.css"; - -@import "http://github.com/prismjs-default-theme/prism-default.css"; - -@import "http://github.com/general.css"; -@import "http://github.com/prism.css"; - -@import "http://github.com/header.css"; -@import "http://github.com/chapter.css"; -@import "http://github.com/footer.css"; diff --git a/app/css/variables.css b/app/css/variables.css deleted file mode 100644 index e3e493b..0000000 --- a/app/css/variables.css +++ /dev/null @@ -1,19 +0,0 @@ -:root { - --base-px-size: 16px; - --large-px-size: calc(var(--base-px-size) * 1.25); - - --brand-color: #312785; - --brand-color-dark: #2d2d44; - - --dark-color: #5a5a5a; - --darker-color: color(var(--dark-color) blackness(+50%)); - - --subtle-color: #e5e5e5; - - --light-color: #ffffff; - --light-subtle-color: color(var(--subtle-color) lightness(+8%)); - --lighter-subtle-color: color(var(--subtle-color) lightness(+5%)); -} - -@custom-media --viewport-large (min-width: 48em); -@custom-media --viewport-medium (min-width: 38em); diff --git a/app/js/app.js b/app/js/app.js deleted file mode 100644 index fb99126..0000000 --- a/app/js/app.js +++ /dev/null @@ -1 +0,0 @@ -import 'prismjs'; diff --git a/app/templates/helpers/import.js b/app/templates/helpers/import.js deleted file mode 100644 index 315dd3c..0000000 --- a/app/templates/helpers/import.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -const fs = require('fs-extra'); -const path = require('path'); -const resolve = require('./resolve'); - -const root = path.resolve('build/'); - -module.exports = function(url) { - let file = path.join(root, resolve(url)); - let content = ''; - - try { - content = fs.readFileSync(file, {'encoding': 'utf8'}); - } catch (e) { - content = e; - } - - return content; -}; diff --git a/app/templates/helpers/resolve.js b/app/templates/helpers/resolve.js deleted file mode 100644 index fd6ed77..0000000 --- a/app/templates/helpers/resolve.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -const fs = require('fs-extra'); -const path = require('path'); - -const options = require(path.resolve('config/kit')); - -const root = path.resolve('build/'); -const discover = options.discover.map(function(folder) { - return path.resolve(root, folder); -}); - -module.exports = function(url) { - let file; - - let found = discover.some(function(folder) { - file = path.join(folder, url); - return fs.existsSync(file); - }); - - if (found) { - url = file.replace(root, ''); - } - - return url; -}; diff --git a/app/templates/index.hbs b/app/templates/index.hbs deleted file mode 100644 index 1fe672b..0000000 --- a/app/templates/index.hbs +++ /dev/null @@ -1,69 +0,0 @@ - - - - - Стиль кода Академии HTML - - - - - - - - - - - - - -
- {{~> header ~}} - -
-

Оглавление

-
- - -
-
- -
-

HTML

- {{~> html/html-rules ~}} -
- -
-

CSS

- {{~> css/css-rules ~}} -
- - {{~> footer ~}} -
- - - - diff --git a/app/templates/partials/css/css-recomendations.hbs b/app/templates/partials/css/css-recomendations.hbs deleted file mode 100644 index e76af10..0000000 --- a/app/templates/partials/css/css-recomendations.hbs +++ /dev/null @@ -1,51 +0,0 @@ -
-
- {{~> css/recomendations/css-selectors ~}} -
-
-
-

-        {{~> css/examples/css-selectors-example ~}}
-      
-
-
-
- -
-
- {{~> css/recomendations/css-important ~}} -
-
-
-

-        {{~> css/examples/css-important-example ~}}
-      
-
-
-
- -
-
- {{~> css/recomendations/css-shorthand ~}} -
-
-
-

-        {{~> css/examples/css-shorthand-example ~}}
-      
-
-
-
- -
-
- {{~> css/rules/css-vertical-align ~}} -
-
-
-

-        {{~> css/examples/css-vertical-align-example ~}}
-      
-
-
-
diff --git a/app/templates/partials/css/css-rules.hbs b/app/templates/partials/css/css-rules.hbs deleted file mode 100644 index 8946e60..0000000 --- a/app/templates/partials/css/css-rules.hbs +++ /dev/null @@ -1,64 +0,0 @@ -
-
- {{~> css/rules/css-syntax ~}} -
-
-
-

-        {{~> css/examples/css-syntax-example ~}}
-      
-
-
-
- -
-
- {{~> css/rules/css-order ~}} -
-
-
-

-        {{~> css/examples/css-order-example ~}}
-      
-
-
-
- -
-
- {{~> css/rules/css-class-names ~}} -
-
-
-

-        {{~> css/examples/css-class-names-example ~}}
-      
-
-
-
- -
-
- {{~> css/rules/css-import ~}} -
-
-
-

-        {{~> css/examples/css-import-example ~}}
-      
-
-
-
- -
-
- {{~> css/rules/css-font-variant ~}} -
-
-
-

-        {{~> css/examples/css-font-variant-example ~}}
-      
-
-
-
diff --git a/app/templates/partials/css/examples/css-class-names-example.hbs b/app/templates/partials/css/examples/css-class-names-example.hbs deleted file mode 100644 index c4a74d4..0000000 --- a/app/templates/partials/css/examples/css-class-names-example.hbs +++ /dev/null @@ -1,11 +0,0 @@ -/* Хорошо */ -.alert-danger { … } -.tweet .user-picture { … } -.button { … } -.layout-center { … } - -/* Плохо */ -.testElement { … } -.t { … } -.big_red_button { … } -.knopka { … } diff --git a/app/templates/partials/css/examples/css-font-variant-example.hbs b/app/templates/partials/css/examples/css-font-variant-example.hbs deleted file mode 100644 index 322185b..0000000 --- a/app/templates/partials/css/examples/css-font-variant-example.hbs +++ /dev/null @@ -1,24 +0,0 @@ -/* Хорошо: указан альтернативный веб-безопасный шрифт и его тип семейства */ -body { - font-family: "Helvetica", "Arial", sans-serif; -} - -/* Кому-то нравится Arial, кому-то Tahoma */ -body { - font-family: "Helvetica", "Tahoma", sans-serif; -} - -/* Плохо: указан только нестандартный шрифт */ -body { - font-family: "Helvetica"; -} - -/* Плохо: указан только нестандартный шрифт и тип семейства, альтернативный веб-безопасный шрифт отсутствует */ -body { - font-family: "Helvetica", sans-serif; -} - -/* Плохо: Georgia — шрифт с засечками, а нестандартный шрифт — без засечек */ -body { - font-family: "Helvetica", "Georgia", sans-serif; -} diff --git a/app/templates/partials/css/examples/css-import-example.hbs b/app/templates/partials/css/examples/css-import-example.hbs deleted file mode 100644 index 17d9ef0..0000000 --- a/app/templates/partials/css/examples/css-import-example.hbs +++ /dev/null @@ -1,7 +0,0 @@ -<!-- Хорошо: подключение тегом link --> -<link rel="stylesheet" href="http://github.com/module.css"> - -<!-- Плохо --> -<style> - @import url("http://github.com/module.css"); -</style> diff --git a/app/templates/partials/css/examples/css-important-example.hbs b/app/templates/partials/css/examples/css-important-example.hbs deleted file mode 100644 index 9a77ef6..0000000 --- a/app/templates/partials/css/examples/css-important-example.hbs +++ /dev/null @@ -1,5 +0,0 @@ -/* Возможно !important здесь не нужен */ -.text-page p { - font-size: 14px !important; - line-height: 20px !important; -} diff --git a/app/templates/partials/css/examples/css-order-example.hbs b/app/templates/partials/css/examples/css-order-example.hbs deleted file mode 100644 index 824ed81..0000000 --- a/app/templates/partials/css/examples/css-order-example.hbs +++ /dev/null @@ -1,38 +0,0 @@ -.declaration-order { - /* Позиционирование */ - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 100; - - /* Блочная модель */ - display: block; - float: right; - width: 100px; - height: 100px; - margin: 10px; - padding: 10px; - - /* Типографика */ - font: normal 13px/1.5 "Arial", sans-serif; - font-style: normal; - font-size: 13px; - line-height: 1.5; - font-family: "Arial", sans-serif; - text-align: center; - color: #333333; - - /* Оформление */ - background-color: #f5f5f5; - border: 1px solid #e5e5e5; - border-radius: 3px; - opacity: 1; - - /* Анимация */ - transition: color 1s; - - /* Разное */ - will-change: auto; -} diff --git a/app/templates/partials/css/examples/css-selectors-example.hbs b/app/templates/partials/css/examples/css-selectors-example.hbs deleted file mode 100644 index b2e97ad..0000000 --- a/app/templates/partials/css/examples/css-selectors-example.hbs +++ /dev/null @@ -1,12 +0,0 @@ -/* Хорошо */ -.catalog { … } -.catalog-item img { … } -.catalog-item .item-description { … } -.catalog-item h3 { … } -.catalog-item:nth-child(odd):hover .item-description::after { … } /* это тоже два уровня вложенности */ - -/* Плохо */ -.catalog .catalog-item .item-description .subtitle { … } -#header { … } -div > p > a > span { … } -a.link, span.text { … } diff --git a/app/templates/partials/css/examples/css-shorthand-example.hbs b/app/templates/partials/css/examples/css-shorthand-example.hbs deleted file mode 100644 index 138a885..0000000 --- a/app/templates/partials/css/examples/css-shorthand-example.hbs +++ /dev/null @@ -1,16 +0,0 @@ -/* Хорошо */ -.element { - margin-bottom: 10px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - background-color: red; - background-image: url("http://github.com/image.jpg"); -} - -/* Плохо */ -.element { - margin: 0 0 10px; - border-radius: 3px 3px 0 0; - background: red; - background: url("http://github.com/image.jpg"); -} diff --git a/app/templates/partials/css/examples/css-syntax-example.hbs b/app/templates/partials/css/examples/css-syntax-example.hbs deleted file mode 100644 index 09a6a2a..0000000 --- a/app/templates/partials/css/examples/css-syntax-example.hbs +++ /dev/null @@ -1,16 +0,0 @@ -/* Хорошо */ -.selector, -.selector-secondary, -.selector[type="text"] { - padding: 15px; - margin-bottom: 15px; - background-color: rgba(0, 0, 0, 0.5); - box-shadow: 0 1px 2px #cccccc, inset 0 1px 0 #ffffff; -} - -/* Плохо */ -.selector, .selector-secondary, .selector[type=text]{ - padding:15px; - margin:0px 0px 15px; - background-color:rgba(0,0,0,.5); - box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF} diff --git a/app/templates/partials/css/examples/css-vertical-align-example.hbs b/app/templates/partials/css/examples/css-vertical-align-example.hbs deleted file mode 100644 index 59d73fd..0000000 --- a/app/templates/partials/css/examples/css-vertical-align-example.hbs +++ /dev/null @@ -1,15 +0,0 @@ -/* Хорошо */ -.login-button { - display: inline-block; - vertical-align: baseline; -} - -.grid-item { - display: inline-block; - vertical-align: top; -} - -/* Плохо */ -.login-button { - display: inline-block; -} diff --git a/app/templates/partials/css/recomendations/css-important.hbs b/app/templates/partials/css/recomendations/css-important.hbs deleted file mode 100644 index 72a9642..0000000 --- a/app/templates/partials/css/recomendations/css-important.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Использование !important

-

- В большинстве случаев необходимость использования !important в CSS возникает из-за неправильного обращения к элементам страницы через каскад. Однако, в редких случаях, без использования !important не обойтись. -

-

- Подробнее в статье: http://meiert.com/en/blog/20150310/important/. -

diff --git a/app/templates/partials/css/recomendations/css-selectors.hbs b/app/templates/partials/css/recomendations/css-selectors.hbs deleted file mode 100644 index 829bd1e..0000000 --- a/app/templates/partials/css/recomendations/css-selectors.hbs +++ /dev/null @@ -1,5 +0,0 @@ -

Селекторы

-

Селекторы должны быть написаны так, чтобы их можно было переиспользовать в дальнейшем. Цепочки селекторов или селекторы с излишней вложенностью не должны создаваться без необходимости — это увеличивает специфичность правил и уменьшает возможность их переиспользования.

-

Длинные цепочки вложенных селекторов также усложняют код и его поддержку. Хорошим подходом считается использовать вложенность до 2 или 3 уровня. Псевдоэлементы или псевдоклассы не увеличивают уровень вложенности. -

-

Идентификаторы id для стилизации не используются. Вместо идентификаторов для задания стилей используются селекторы по классам или тегам.

diff --git a/app/templates/partials/css/recomendations/css-shorthand.hbs b/app/templates/partials/css/recomendations/css-shorthand.hbs deleted file mode 100644 index fbb4e6a..0000000 --- a/app/templates/partials/css/recomendations/css-shorthand.hbs +++ /dev/null @@ -1,31 +0,0 @@ -

Сокращенная запись

-

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;) в сокращённом виде считываются легче – их можно сокращать, если нет опасности переопределить другие значения. -

diff --git a/app/templates/partials/css/rules/css-class-names.hbs b/app/templates/partials/css/rules/css-class-names.hbs deleted file mode 100644 index 815d7ab..0000000 --- a/app/templates/partials/css/rules/css-class-names.hbs +++ /dev/null @@ -1,6 +0,0 @@ -

Имена классов

-
    -
  • Имена классов пишутся строчными буквами, используется дефис (но не знаки нижнего подчёркивания или camelCase). Дефисы служат разделителями во взаимосвязанных классах (например, .button и .button-danger).
  • -
  • Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс: избегайте сокращений (единственное исключение — .btn для кнопок), но не делайте их слишком длинными (более трёх слов).
  • -
  • Для написания классов используются английские слова и термины. Транслитом названия классов и атрибутов не пишутся.
  • -
diff --git a/app/templates/partials/css/rules/css-font-variant.hbs b/app/templates/partials/css/rules/css-font-variant.hbs deleted file mode 100644 index 1da89ef..0000000 --- a/app/templates/partials/css/rules/css-font-variant.hbs +++ /dev/null @@ -1,18 +0,0 @@ -

Варианты шрифта

-

- Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family. -

-

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

-

- Порядок шрифтов следующий: -

-
    -
  1. нестандартный шрифт;
  2. -
  3. веб-безопасный;
  4. -
  5. тип шрифта.
  6. -
-

- Список веб-безопасных шрифтов можно посмотреть здесь — cssfontstack.com. -

diff --git a/app/templates/partials/css/rules/css-import.hbs b/app/templates/partials/css/rules/css-import.hbs deleted file mode 100644 index 846ec3c..0000000 --- a/app/templates/partials/css/rules/css-import.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Правило @import

-

- Правило @import работает медленнее, чем тег <link>. В стилях @import не должен использоваться. -

diff --git a/app/templates/partials/css/rules/css-order.hbs b/app/templates/partials/css/rules/css-order.hbs deleted file mode 100644 index 5495884..0000000 --- a/app/templates/partials/css/rules/css-order.hbs +++ /dev/null @@ -1,24 +0,0 @@ -

Порядок свойств

-

- Объявления логически связанных свойств группируются в следующем порядке: -

-
    -
  1. Позиционирование
  2. -
  3. Блочная модель
  4. -
  5. Типографика
  6. -
  7. Оформление
  8. -
  9. Анимация
  10. -
  11. Разное
  12. -
-

- Позиционирование следует первым потому, что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков. -

-

- Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь. -

-

- Сгруппированные объявления в правиле отделяются друг от друга пустой строкой. -

-

- Порядок объявления подробных правил, таких как font-size, font-family, line-height, должен соответствовать порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой должна идти сокращённая версия. -

diff --git a/app/templates/partials/css/rules/css-syntax.hbs b/app/templates/partials/css/rules/css-syntax.hbs deleted file mode 100644 index 27b1124..0000000 --- a/app/templates/partials/css/rules/css-syntax.hbs +++ /dev/null @@ -1,22 +0,0 @@ -

Синтаксис

-
    -
  • После значения свойства обязательно ставится точка с запятой.
  • -
  • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
  • -
  • Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
  • -
  • Названия тегов и свойств в правилах пишутся строчными буквами.
  • -
  • Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
  • -
  • Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
  • -
  • После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
  • -
  • После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
  • -
  • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
  • -
  • Каждое объявление в правиле пишется на новой строке.
  • -
  • Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки: -
    .selector {
    -  color: #f5f5f5;
    -}
    -
  • -
  • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
  • -
  • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
  • -
  • Для проверки CSS-кода используйте файл конфигурации .stylelintrc для настройки валидатора stylelint.
  • -
  • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
  • -
diff --git a/app/templates/partials/css/rules/css-vertical-align.hbs b/app/templates/partials/css/rules/css-vertical-align.hbs deleted file mode 100644 index 4f8671e..0000000 --- a/app/templates/partials/css/rules/css-vertical-align.hbs +++ /dev/null @@ -1,10 +0,0 @@ -

Указание vertical-align

-

- Значение vertical-align должно быть явно указано для блоков с display: inline-block. -

-

- Значение по умолчанию, baseline, может приводить к странному отображению блочно-строчных элементов. Например, когда в ряд стоят несколько элементов с разным количеством строк. -

-

- Если вы хотите, чтобы элементы выравнивались по умолчанию, то явно укажите для vertical-align значение baseline. Это позволит другим понять, что вы знаете об особенностях отображения элементов с таким выравниванием и задали его намеренно. -

diff --git a/app/templates/partials/footer.hbs b/app/templates/partials/footer.hbs deleted file mode 100644 index b11f00c..0000000 --- a/app/templates/partials/footer.hbs +++ /dev/null @@ -1,26 +0,0 @@ - diff --git a/app/templates/partials/header.hbs b/app/templates/partials/header.hbs deleted file mode 100644 index e37bd5b..0000000 --- a/app/templates/partials/header.hbs +++ /dev/null @@ -1,7 +0,0 @@ -
- - - -

Стиль кода Академии HTML

-

github.com/htmlacademy/codeguide

-
diff --git a/app/templates/partials/html/examples/html-attribute-order-example.hbs b/app/templates/partials/html/examples/html-attribute-order-example.hbs deleted file mode 100644 index d11ef6c..0000000 --- a/app/templates/partials/html/examples/html-attribute-order-example.hbs +++ /dev/null @@ -1,5 +0,0 @@ -<a class="element element-big" id="element" href="http://github.com/" data-name="element">Ссылка</a> - -<input class="form-control" type="text" name="test"> - -<img class="pets-picture" src="http://github.com/cats.jpg" alt="Изображение котиков"> diff --git a/app/templates/partials/html/examples/html-boolean-example.hbs b/app/templates/partials/html/examples/html-boolean-example.hbs deleted file mode 100644 index 5f28e0c..0000000 --- a/app/templates/partials/html/examples/html-boolean-example.hbs +++ /dev/null @@ -1,8 +0,0 @@ -<!-- checked="checked" необязательно --> -<input type="checkbox" required checked> - -<input type="text" disabled> - -<select> - <option value="1" selected>1</option> -</select> diff --git a/app/templates/partials/html/examples/html-doctype-example.hbs b/app/templates/partials/html/examples/html-doctype-example.hbs deleted file mode 100644 index b4109a7..0000000 --- a/app/templates/partials/html/examples/html-doctype-example.hbs +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE html> -<html lang="ru"> - <head>…</head> - <body>…</body> -</html> diff --git a/app/templates/partials/html/examples/html-encoding-example.hbs b/app/templates/partials/html/examples/html-encoding-example.hbs deleted file mode 100644 index adc5776..0000000 --- a/app/templates/partials/html/examples/html-encoding-example.hbs +++ /dev/null @@ -1,4 +0,0 @@ -<head> - <meta charset="utf-8"> - <title>Заголовок страницы</title> -</head> diff --git a/app/templates/partials/html/examples/html-form-labels-example.hbs b/app/templates/partials/html/examples/html-form-labels-example.hbs deleted file mode 100644 index 14dd64d..0000000 --- a/app/templates/partials/html/examples/html-form-labels-example.hbs +++ /dev/null @@ -1,11 +0,0 @@ -<!-- Хорошо: элемент формы radio связан с подписью через идентификатор --> -<input type="radio" id="choose"> -<label for="choose">Радио кнопка</label> - -<!-- Хорошо: элемент формы radio и подпись обёрнуты в label --> -<label> - <input type="radio"> Радио кнопка -</label> - -<!-- Плохо: подпись не связана с элементом формы --> -<input type="radio" id="choose"> Радио кнопка diff --git a/app/templates/partials/html/examples/html-img-sizes-example.hbs b/app/templates/partials/html/examples/html-img-sizes-example.hbs deleted file mode 100644 index 12e17b8..0000000 --- a/app/templates/partials/html/examples/html-img-sizes-example.hbs +++ /dev/null @@ -1,14 +0,0 @@ -<!-- Хорошо: размеры картинке заданы --> -<div class="logo-area"> - <img src="http://github.com/logo.png" alt="" width="300" height="150"> -</div> - -<!-- Плохо: размеры картинке заданы в px --> -<div class="logo-area"> - <img src="http://github.com/logo.png" alt="" width="300px" height="150px"> -</div> - -<!-- Плохо: размеры картинке не заданы --> -<div class="logo-area"> - <img src="http://github.com/logo.png" alt=""> -</div> diff --git a/app/templates/partials/html/examples/html-js-includes-example.hbs b/app/templates/partials/html/examples/html-js-includes-example.hbs deleted file mode 100644 index ce1c2f0..0000000 --- a/app/templates/partials/html/examples/html-js-includes-example.hbs +++ /dev/null @@ -1,18 +0,0 @@ -<!-- Хорошо: скрипт подключается перед </body> --> -<!DOCTYPE html> -<html lang="ru"> - <head>…</head> - <body> - <!-- Содержимое страницы --> - <script src="http://github.com/app.js"></script> - </body> -</html> - -<!-- Плохо: скрипт подключается в секции <head> --> -<!DOCTYPE html> -<html lang="ru"> - <head> - <script src="http://github.com/app.js"></script> - </head> - <body>…</body> -</html> diff --git a/app/templates/partials/html/examples/html-language-example.hbs b/app/templates/partials/html/examples/html-language-example.hbs deleted file mode 100644 index b4109a7..0000000 --- a/app/templates/partials/html/examples/html-language-example.hbs +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE html> -<html lang="ru"> - <head>…</head> - <body>…</body> -</html> diff --git a/app/templates/partials/html/examples/html-minimal-markup-example.hbs b/app/templates/partials/html/examples/html-minimal-markup-example.hbs deleted file mode 100644 index 3728ee5..0000000 --- a/app/templates/partials/html/examples/html-minimal-markup-example.hbs +++ /dev/null @@ -1,18 +0,0 @@ -<!-- Хорошо: не используется лишняя обертка, а для декоративного элемента нет дополнительного блока в разметке. --> -<div class="features clearfix"> - <div class="features-item"> - <h2>Быстро</h2> - <p>Мы делаем свою работу быстро!</p> - </div> -</div> - -<!-- Плохо: используется лишняя обертка, которую можно сократить, а для декоративного элемента использован тег <i>, который можно заменить на псевдоэлемент. --> -<div class="features"> - <div class="clearfix"> - <div class="features-item"> - <h2>Быстро</h2> - <i class="triangle"></i> - <p>Мы делаем свою работу быстро!</p> - </div> - </div> -</div> diff --git a/app/templates/partials/html/examples/html-protocol-example.hbs b/app/templates/partials/html/examples/html-protocol-example.hbs deleted file mode 100644 index 9200582..0000000 --- a/app/templates/partials/html/examples/html-protocol-example.hbs +++ /dev/null @@ -1,6 +0,0 @@ -<!-- Нормально --> -<img src="http://www.google.ru/images/srpr/logo11w.png" alt=""> -<img src="https://www.google.ru/images/srpr/logo11w.png" alt=""> - -<!-- Лучше --> -<img src="http://www.google.ru/images/srpr/logo11w.png" alt=""> diff --git a/app/templates/partials/html/examples/html-semantics-example.hbs b/app/templates/partials/html/examples/html-semantics-example.hbs deleted file mode 100644 index 7f54bf7..0000000 --- a/app/templates/partials/html/examples/html-semantics-example.hbs +++ /dev/null @@ -1,21 +0,0 @@ -<!-- Хорошо --> -<main> - <article> - <header> - <h1>Пост в блоге</h1> - <p>Опубликовано: <time datetime="2015-02-21">21 февраля, 2015</time></p> - </header> - <p>…</p> - </article> -</main> - -<!-- Плохо --> -<div id="main"> - <div class="article"> - <div class="header"> - <h1>Пост в блоге</h1> - <p>Опубликовано: <span>21 февраля, 2015</span></p> - </div> - <p>…</p> - </div> -</div> diff --git a/app/templates/partials/html/examples/html-style-includes-example.hbs b/app/templates/partials/html/examples/html-style-includes-example.hbs deleted file mode 100644 index 1a684af..0000000 --- a/app/templates/partials/html/examples/html-style-includes-example.hbs +++ /dev/null @@ -1,17 +0,0 @@ -<!-- Хорошо: стилевой файл подключён в секции head --> -<!DOCTYPE html> -<html lang="ru"> - <head> - <link rel="stylesheet" href="http://github.com/style.css"> - </head> - <body>…</body> -</html> - -<!-- Плохо: стилевой файл подключён в секции body --> -<!DOCTYPE html> -<html lang="ru"> - <head>…</head> - <body> - <link rel="stylesheet" href="http://github.com/style.css"> - </body> -</html> diff --git a/app/templates/partials/html/examples/html-syntax-example.hbs b/app/templates/partials/html/examples/html-syntax-example.hbs deleted file mode 100644 index 9595758..0000000 --- a/app/templates/partials/html/examples/html-syntax-example.hbs +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE html> -<html lang="ru"> - <head> - <meta charset="utf-8"> - <title>Страница о коте</title> - </head> - <body> - <article class="post"> - <h1>Красивый кот</h1> - <figure class="post-item"> - <img src="http://github.com/cat.jpg" alt="Изображение кота"> - <figcaption>Кот красив!</figcaption> - </figure> - </article> - </body> -</html> diff --git a/app/templates/partials/html/html-recomendations.hbs b/app/templates/partials/html/html-recomendations.hbs deleted file mode 100644 index 9b83e0e..0000000 --- a/app/templates/partials/html/html-recomendations.hbs +++ /dev/null @@ -1,38 +0,0 @@ -
-
- {{~> html/recomendations/html-minimal-markup ~}} -
-
-
-

-        {{~> html/examples/html-minimal-markup-example ~}}
-      
-
-
-
- -
-
- {{~> html/recomendations/html-semantics ~}} -
-
-
-

-        {{~> html/examples/html-semantics-example ~}}
-      
-
-
-
- -
-
- {{~> html/recomendations/html-protocol ~}} -
-
-
-

-        {{~> html/examples/html-protocol-example ~}}
-      
-
-
-
diff --git a/app/templates/partials/html/html-rules.hbs b/app/templates/partials/html/html-rules.hbs deleted file mode 100644 index 64d938c..0000000 --- a/app/templates/partials/html/html-rules.hbs +++ /dev/null @@ -1,135 +0,0 @@ -
-
- {{~> html/rules/html-syntax ~}} -
-
-
-

-        {{~> html/examples/html-syntax-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-validator ~}} -
-
- -
-
- {{~> html/rules/html-doctype ~}} -
-
-
-

-        {{~> html/examples/html-doctype-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-encoding ~}} -
-
-
-

-        {{~> html/examples/html-encoding-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-style-includes ~}} -
-
-
-

-        {{~> html/examples/html-style-includes-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-js-includes ~}} -
-
-
-

-        {{~> html/examples/html-js-includes-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-attribute-order ~}} -
-
-
-

-        {{~> html/examples/html-attribute-order-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-boolean ~}} -
-
-
-

-        {{~> html/examples/html-boolean-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-form-labels ~}} -
-
-
-

-        {{~> html/examples/html-form-labels-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-img-sizes ~}} -
-
-
-

-        {{~> html/examples/html-img-sizes-example ~}}
-      
-
-
-
- -
-
- {{~> html/rules/html-language ~}} -
-
-
-

-        {{~> html/examples/html-language-example ~}}
-      
-
-
-
diff --git a/app/templates/partials/html/recomendations/html-minimal-markup.hbs b/app/templates/partials/html/recomendations/html-minimal-markup.hbs deleted file mode 100644 index ee684e6..0000000 --- a/app/templates/partials/html/recomendations/html-minimal-markup.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Минималистичность разметки

-

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

diff --git a/app/templates/partials/html/recomendations/html-protocol.hbs b/app/templates/partials/html/recomendations/html-protocol.hbs deleted file mode 100644 index e9ca3bd..0000000 --- a/app/templates/partials/html/recomendations/html-protocol.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Протокол ресурса

-

- Если сайт поддерживает оба протокола http: и https:, то при запросе файлов в HTML через полный URL часть с протоколом из адреса можно исключить. Это сделает URL относительным и избавит от проблем с доступом, а также немного сократит запись. -

-

- Если сайт подерживает только один из протоколов, в URL лучше явно указывать соответствующий. -

diff --git a/app/templates/partials/html/recomendations/html-semantics.hbs b/app/templates/partials/html/recomendations/html-semantics.hbs deleted file mode 100644 index 01bbd18..0000000 --- a/app/templates/partials/html/recomendations/html-semantics.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Семантическая разметка

-

- В разметке должны использоваться семантические теги HTML. -

-

- Параграфы текста должны помещаться в тег <p>. Тег <br> должен применяться по назначению. -

diff --git a/app/templates/partials/html/rules/html-attribute-order.hbs b/app/templates/partials/html/rules/html-attribute-order.hbs deleted file mode 100644 index 76c3817..0000000 --- a/app/templates/partials/html/rules/html-attribute-order.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Порядок атрибутов

-

- Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам. -

-

- Остальные атрибуты могут быть расставлены в любом порядке, но тоже единообразно для одинаковых элементов. -

diff --git a/app/templates/partials/html/rules/html-boolean.hbs b/app/templates/partials/html/rules/html-boolean.hbs deleted file mode 100644 index 06a16a5..0000000 --- a/app/templates/partials/html/rules/html-boolean.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Логические атрибуты

-

- Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе. -

diff --git a/app/templates/partials/html/rules/html-doctype.hbs b/app/templates/partials/html/rules/html-doctype.hbs deleted file mode 100644 index 7fd774d..0000000 --- a/app/templates/partials/html/rules/html-doctype.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

HTML-доктайп

-

- В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах. -

diff --git a/app/templates/partials/html/rules/html-encoding.hbs b/app/templates/partials/html/rules/html-encoding.hbs deleted file mode 100644 index 003e0e3..0000000 --- a/app/templates/partials/html/rules/html-encoding.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Кодировка символов

-

- Кодировка символов на странице всегда должна быть явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна. -

diff --git a/app/templates/partials/html/rules/html-form-labels.hbs b/app/templates/partials/html/rules/html-form-labels.hbs deleted file mode 100644 index 9a0266c..0000000 --- a/app/templates/partials/html/rules/html-form-labels.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Подписи полей ввода

-

- Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>. -

diff --git a/app/templates/partials/html/rules/html-img-sizes.hbs b/app/templates/partials/html/rules/html-img-sizes.hbs deleted file mode 100644 index 81166e5..0000000 --- a/app/templates/partials/html/rules/html-img-sizes.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Размеры картинок

-

- Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях или в процентах. В случае пикселей размерность не нужна. -

-

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

diff --git a/app/templates/partials/html/rules/html-js-includes.hbs b/app/templates/partials/html/rules/html-js-includes.hbs deleted file mode 100644 index 30d2050..0000000 --- a/app/templates/partials/html/rules/html-js-includes.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Подключение скриптов

-

- Скрипты должны подключаться в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого. -

-

- При подключении скриптов в теге <script> атрибут type не указывается, так как его значение text/javascript устанавливается по умолчанию. -

diff --git a/app/templates/partials/html/rules/html-language.hbs b/app/templates/partials/html/rules/html-language.hbs deleted file mode 100644 index 3c10753..0000000 --- a/app/templates/partials/html/rules/html-language.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Атрибут языка

-

- Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила. -

diff --git a/app/templates/partials/html/rules/html-style-includes.hbs b/app/templates/partials/html/rules/html-style-includes.hbs deleted file mode 100644 index 3f0626c..0000000 --- a/app/templates/partials/html/rules/html-style-includes.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Подключение стилей

-

- Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию. -

diff --git a/app/templates/partials/html/rules/html-syntax.hbs b/app/templates/partials/html/rules/html-syntax.hbs deleted file mode 100644 index c1fb4db..0000000 --- a/app/templates/partials/html/rules/html-syntax.hbs +++ /dev/null @@ -1,8 +0,0 @@ -

Синтаксис

-
    -
  • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
  • -
  • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
  • -
  • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
  • -
  • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
  • -
  • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
  • -
diff --git a/app/templates/partials/html/rules/html-validator.hbs b/app/templates/partials/html/rules/html-validator.hbs deleted file mode 100644 index ab89317..0000000 --- a/app/templates/partials/html/rules/html-validator.hbs +++ /dev/null @@ -1,4 +0,0 @@ -

Валидность

-

- Документ должен проходить проверку на валидность. Для проверки используется современный валидатор. -

diff --git a/browserslist b/browserslist deleted file mode 100644 index 076e30c..0000000 --- a/browserslist +++ /dev/null @@ -1,15 +0,0 @@ -# Browsers that we support - -# Desktop browsers -Explorer >= 11 -Edge >= 12 -Safari >= 8 -last 4 Chrome versions -last 4 Firefox versions -last 4 Opera versions - -# Mobile browsers -iOS >= 8 -Android >= 4.4 -ExplorerMobile >= 11 -BlackBerry >= 10 diff --git a/config/kit.json b/config/kit.json deleted file mode 100644 index febe63c..0000000 --- a/config/kit.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "entry": { - "css": [ - "style.css" - ], - - "js": [ - "app.js" - ] - }, - - "discover": ["img", "css", "js"], - - "cssnext": { - "browsers": "last 2 versions", - "import": false, - "features": { - "customProperties": false, - "rem": false - } - } -} diff --git a/config/webpack.config.js b/config/webpack.config.js deleted file mode 100644 index a53c00d..0000000 --- a/config/webpack.config.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -const path = require('path'); -const webpack = require('webpack'); -const options = require(path.resolve('config/kit')); - -let files = {}; -options.entry.js.forEach(function(file) { - files[path.basename(file, '.js')] = './js/' + file; -}); - -module.exports = { - context: path.resolve('app'), - - entry: files, - - output: { - path: path.resolve('build/js'), - filename: '[name].js', - pathinfo: true - }, - - module: { - loaders: [{ - test: /\.js$/, - exclude: /node_modules|build/, - loader: 'babel-loader', - query: { - cacheDirectory: true - } - }] - }, - - plugins: [ - new webpack.optimize.OccurenceOrderPlugin(), - new webpack.optimize.DedupePlugin(), - new webpack.optimize.UglifyJsPlugin({ - compress: { - warnings: false - }, - output: { - comments: false - } - }) - ] -}; diff --git a/css/normalize.css b/css/normalize.css new file mode 100644 index 0000000..b26c100 --- /dev/null +++ b/css/normalize.css @@ -0,0 +1,427 @@ +/*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, +figure, +main { /* 1 */ + display: block; +} + +/** + * Add the correct margin in IE 8. + */ + +figure { + margin: 1em 40px; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ + +/** + * Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + margin: 0; +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], /* 1 */ +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, /* 1 */ +menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Scripting + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + +/* Hidden + ========================================================================== */ + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} diff --git a/css/prism.css b/css/prism.css new file mode 100644 index 0000000..91c4996 --- /dev/null +++ b/css/prism.css @@ -0,0 +1,139 @@ +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..90e9384 --- /dev/null +++ b/css/style.css @@ -0,0 +1,287 @@ +html { + font-size: 16px; +} + +body { + margin: 0; + + font: 17px/1.6 "Helvetica", "Arial", sans-serif; + color: #5a5a5a; + + background-color: #ffffff; +} + +a:link, +a:visited { + color: #5a5a5a; + text-decoration: underline; +} + +a:hover { + text-decoration: none; +} + +h1, +h2, +h4 { + margin: 0; + + font-weight: normal; + color: #424242; + letter-spacing: -0.025em; +} + +h2, +h4 { + line-height: 1.2; +} + +h1 { + font-size: 3rem; + line-height: 1.3; +} + +h2 { + font-size: 2.5rem; +} + +h4 { + font-size: 1.75rem; +} + +code, +pre { + font-family: "Consolas", "Liberation Mono", "Menlo", "Courier", monospace; +} + +code { + padding: 2px 4px; + + font-size: 95%; + color: #d44950; + + background-color: #f7f7f9; + border-radius: 0.2rem; +} + +pre { + display: block; + margin: 0 0 1rem; + + line-height: 1.4; + white-space: pre-wrap; +} + +pre code { + padding: 0; + + color: inherit; + + background-color: transparent; + border: 0; +} + +ul li { + margin-bottom: 0.25rem; +} + +header { + padding: 1rem 1rem 6rem; + + text-align: center; + + background-color: #312785; + background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); +} + +header h1 { + margin: 0 0 0.25rem; + + color: #ffffff; +} + +header p { + margin-top: 0; + + font-size: 1.1rem; +} + +header a:link, +header a:visited { + color: #ffffff; +} + +.logo { + width: 300px; + height: 300px; +} + +.chapter h2 { + padding: 2rem 1rem; + + background-color: #e5e5e5; +} + +.chapter-part { + display: flex; + flex-direction: column; + + border-bottom: 1px solid #e5e5e5; +} + +.chapter-part-col { + padding: 2rem 1rem; +} + +.chapter-part-col figure { + margin: 0 1rem 0 0; +} + +.chapter-part-col p { + max-width: 32rem; +} + +.chapter-part-col + .chapter-part-col { + border-top: 1px solid #e5e5e5; +} + +.gray-bgcolor { + background-color: #fafafa; +} + +footer { + padding: 2rem; + + background-color: #2d2d44; +} + +.contacts { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.logo-full { + display: inline-block; + width: 161px; +} + +.social-icons { + display: flex; + justify-content: space-between; + align-items: center; + margin: 0.5rem 0 1rem 0; +} + +.social-icons, +.github { + font-size: 0; +} + +.icon { + min-width: 2rem; + min-height: 2rem; + + background-repeat: no-repeat; + background-position: center; + background-size: calc(100% - 5px); + opacity: 0.5; +} + +.icon:hover { + opacity: 1; +} + +.icon-vk { + background-image: url("http://github.com/img/icon-vkontakte.svg"); +} + +.icon-fb { + background-image: url("http://github.com/img/icon-facebook.svg"); +} + +.icon-tw { + background-image: url("http://github.com/img/icon-twitter.svg"); +} + +.icon-ig { + background-image: url("http://github.com/img/icon-instagram.svg"); +} + +.github-link { + display: inline-block; + width: 91px; + height: 16px; + + background-image: url("http://github.com/img/github.svg"); +} + +@media (min-width: 38em) { + header { + padding-bottom: 4rem; + } + + html { + font-size: 20px; + } + + .chapter h2 { + padding: 2rem 2rem 2.5rem; + } + + .chapter-part-col { + padding: 2rem; + } +} + +@media (min-width: 48em) { + .chapter h2 { + padding: 2rem 3rem 2.5rem; + } + + .chapter-part { + flex-direction: row; + } + + .chapter-part-col { + width: 50%; + padding: 3rem; + } + + .chapter-part-col + .chapter-part-col { + border-top: 0; + } +} + +/* override default prism theme */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} + +pre[class*="language-"] { + margin: 0; + padding: 0; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: initial; +} + +/* override default prism theme */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} + +pre[class*="language-"] { + margin: 0; + padding: 0; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: initial; +} diff --git a/gulp/copy.js b/gulp/copy.js deleted file mode 100644 index a0eeb66..0000000 --- a/gulp/copy.js +++ /dev/null @@ -1,11 +0,0 @@ -import fs from 'fs-extra'; -import gulp from 'gulp'; - -let files = 'app/!(css|js|templates)/**/*'; - -gulp.task('clean', fs.emptyDir.bind(null, 'build')); - -gulp.task('copy', gulp.series('clean', () => { - return gulp.src(files, {dot: true}) - .pipe(gulp.dest('build')); -})); diff --git a/gulp/handlebars.js b/gulp/handlebars.js deleted file mode 100644 index 674658a..0000000 --- a/gulp/handlebars.js +++ /dev/null @@ -1,28 +0,0 @@ -import fs from 'fs-extra'; -import merge from 'merge'; -import gulp from 'gulp'; -import rename from 'gulp-rename'; -import engine from 'gulp-compile-handlebars'; -import {get as bs} from 'browser-sync'; - -const configure = () => { - fs.ensureDirSync('./app/templates/partials'); - fs.ensureDirSync('./app/templates/helpers'); - - return { - ignorePartials: true, - batch: ['./app/templates/partials'], - helpers: merge( - require('hbs-helpers'), - require('require-dir')('./../app/templates/helpers') - ) - }; -}; - -gulp.task('handlebars', () => { - return gulp.src('app/templates/*.hbs') - .pipe(engine({}, configure())) - .pipe(rename({extname: '.html'})) - .pipe(gulp.dest('build')) - .pipe(bs('kit').stream()); -}); diff --git a/gulp/postcss.js b/gulp/postcss.js deleted file mode 100644 index fb6a3f4..0000000 --- a/gulp/postcss.js +++ /dev/null @@ -1,40 +0,0 @@ -import path from 'path'; -import gulp from 'gulp'; -import postcss from 'gulp-postcss'; -import minify from 'gulp-minify-css'; -import {get as bs} from 'browser-sync'; - -import include from 'postcss-import'; -import mixins from 'postcss-mixins'; -import nested from 'postcss-nested'; -import variables from 'postcss-css-variables'; -import cssnext from 'postcss-cssnext'; -import assets from 'postcss-assets'; -import mqpacker from 'css-mqpacker'; - -const options = require(path.resolve('config/kit')); - -let files = options.entry.css.map((file) => path.join('app', 'css', file)); - -let plugins = [ - include(), - mixins(), - nested(), - variables(), - cssnext(options.cssnext), - assets({ - loadPaths: options.discover, - basePath: 'build/' - }), - mqpacker({ - sort: true - }) -]; - -gulp.task('postcss', () => { - return gulp.src(files, {base: 'app', allowEmpty: true, sourcemaps: true}) - .pipe(postcss(plugins)) - .pipe(minify({keepSpecialComments: 0})) - .pipe(gulp.dest('build', {sourcemaps: {path: '.'}})) - .pipe(bs('kit').stream({match: '**/*.css'})); -}); diff --git a/gulp/serve.js b/gulp/serve.js deleted file mode 100644 index 482d87b..0000000 --- a/gulp/serve.js +++ /dev/null @@ -1,32 +0,0 @@ -import gulp from 'gulp'; - -const bs = require('browser-sync').create('kit'); - -gulp.task('serve', () => { - bs.init({ - server: 'build/', - notify: false, - open: false, - ui: false - }); - - gulp.watch( - 'app/css/**/*.css', - gulp.series('postcss') - ); - - gulp.watch( - 'app/js/**/*.js', - gulp.series('webpack') - ); - - gulp.watch( - 'app/templates/**/*.{hbs,js}', - gulp.series('handlebars') - ); - - gulp.watch( - 'app/img/**/*.{jpg,png,svg,gif}', - gulp.series('handlebars') - ); -}); diff --git a/gulp/webpack.js b/gulp/webpack.js deleted file mode 100644 index bcf9639..0000000 --- a/gulp/webpack.js +++ /dev/null @@ -1,17 +0,0 @@ -import path from 'path'; -import gulp from 'gulp'; -import webpack from 'webpack-stream'; -import {get as bs} from 'browser-sync'; - -gulp.task('webpack', () => { - let options = require(path.resolve('config/webpack.config')); - - options.devtool = 'source-map'; - options.debug = true; - options.cache = true; - - return gulp.src('app/js/app.js', {allowEmpty: true}) - .pipe(webpack(options)) - .pipe(gulp.dest('build/js')) - .pipe(bs('kit').stream({match: '**/*.js'})); -}); diff --git a/gulpfile.babel.js b/gulpfile.babel.js deleted file mode 100644 index d475fa4..0000000 --- a/gulpfile.babel.js +++ /dev/null @@ -1,10 +0,0 @@ -import gulp from 'gulp'; - -require('require-dir')('./gulp'); - -gulp.task('start', gulp.series( - 'copy', - gulp.parallel('postcss', 'webpack'), - 'handlebars', - 'serve' -)); diff --git a/html-css.html b/html-css.html new file mode 100644 index 0000000..670076e --- /dev/null +++ b/html-css.html @@ -0,0 +1,572 @@ + + + + + Стиль кода Академии HTML + + + + + + + + + + + + + + + + + +
+
+ + + +

Стиль кода Академии HTML

+

github.com/htmlacademy/codeguide

+
+ +
+

Оглавление

+
+ + +
+
+ +
+

HTML

+ +
+
+

Синтаксис

+
    +
  • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
  • +
  • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
  • +
  • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
  • +
  • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
  • +
  • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
  • +
+
+
+
+
<!DOCTYPE html>
+<html lang="ru">
+  <head>
+    <meta charset="utf-8">
+    <title>Страница о коте</title>
+  </head>
+  <body>
+    <article class="post">
+      <h1>Красивый кот</h1>
+      <figure class="post-item">
+        <img src="http://github.com/cat.jpg" alt="Изображение кота">
+        <figcaption>Кот красив!</figcaption>
+      </figure>
+    </article>
+  </body>
+</html>
+
+
+
+ +
+
+

Валидность

+

+ Документ должен проходить проверку на валидность. Для проверки используется современный валидатор. +

+
+
+ +
+
+

HTML-доктайп

+

+ В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах. +

+
+
+
+
<!DOCTYPE html>
+<html lang="ru">
+  <head>…</head>
+  <body>…</body>
+</html>
+
+
+
+ +
+
+

Кодировка символов

+

+ Кодировка символов на странице всегда должна быть явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна. +

+
+
+
+
<head>
+  <meta charset="utf-8">
+  <title>Заголовок страницы</title>
+</head>
+
+
+
+ +
+
+

Подключение стилей

+

+ Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию. +

+
+
+
+
<!-- Хорошо: стилевой файл подключён в секции head -->
+<!DOCTYPE html>
+<html lang="ru">
+  <head>
+    <link rel="stylesheet" href="http://github.com/style.css">
+  </head>
+  <body>…</body>
+</html>
+
+<!-- Плохо: стилевой файл подключён в секции body -->
+<!DOCTYPE html>
+<html lang="ru">
+  <head>…</head>
+  <body>
+    <link rel="stylesheet" href="http://github.com/style.css">
+  </body>
+</html>
+
+
+
+ +
+
+

Подключение скриптов

+

+ Скрипты должны подключаться в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого. +

+

+ При подключении скриптов в теге <script> атрибут type не указывается, так как его значение text/javascript устанавливается по умолчанию. +

+
+
+
+
<!-- Хорошо: скрипт подключается перед </body> -->
+<!DOCTYPE html>
+<html lang="ru">
+  <head>…</head>
+  <body>
+    <!-- Содержимое страницы -->
+    <script src="http://github.com/app.js"></script>
+  </body>
+</html>
+
+<!-- Плохо: скрипт подключается в секции <head> -->
+<!DOCTYPE html>
+<html lang="ru">
+  <head>
+    <script src="http://github.com/app.js"></script>
+  </head>
+  <body>…</body>
+</html>
+
+
+
+ +
+
+

Порядок атрибутов

+

+ Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам. +

+

+ Остальные атрибуты могут быть расставлены в любом порядке, но тоже единообразно для одинаковых элементов. +

+
+
+
+
<a class="element element-big" id="element" href="http://github.com/" data-name="element">Ссылка</a>
+
+<input class="form-control" type="text" name="test">
+
+<img class="pets-picture" src="http://github.com/cats.jpg" alt="Изображение котиков">
+
+
+
+ +
+
+

Логические атрибуты

+

+ Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе. +

+
+
+
+
<!-- checked="checked" необязательно -->
+<input type="checkbox" required checked>
+
+<input type="text" disabled>
+
+<select>
+  <option value="1" selected>1</option>
+</select>
+
+
+
+ +
+
+

Подписи полей ввода

+

+ Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>. +

+
+
+
+
<!-- Хорошо: элемент формы radio связан с подписью через идентификатор -->
+<input type="radio" id="choose">
+<label for="choose">Радио кнопка</label>
+
+<!-- Хорошо: элемент формы radio и подпись обёрнуты в label -->
+<label>
+  <input type="radio"> Радио кнопка
+</label>
+
+<!-- Плохо: подпись не связана с элементом формы -->
+<input type="radio" id="choose"> Радио кнопка
+
+
+
+ +
+
+

Размеры картинок

+

+ Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях или в процентах. В случае пикселей размерность не нужна. +

+

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

+
+
+
+
<!-- Хорошо: размеры картинке заданы -->
+<div class="logo-area">
+  <img src="http://github.com/logo.png" alt="" width="300" height="150">
+</div>
+
+<!-- Плохо: размеры картинке заданы в px -->
+<div class="logo-area">
+  <img src="http://github.com/logo.png" alt="" width="300px" height="150px">
+</div>
+
+<!-- Плохо: размеры картинке не заданы -->
+<div class="logo-area">
+  <img src="http://github.com/logo.png" alt="">
+</div>
+
+
+
+ +
+
+

Атрибут языка

+

+ Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила. +

+
+
+
+
<!DOCTYPE html>
+<html lang="ru">
+  <head>…</head>
+  <body>…</body>
+</html>
+
+
+
+
+ +
+

CSS

+ +
+
+

Синтаксис

+
    +
  • После значения свойства обязательно ставится точка с запятой.
  • +
  • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
  • +
  • Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
  • +
  • Названия тегов и свойств в правилах пишутся строчными буквами.
  • +
  • Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
  • +
  • Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
  • +
  • После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
  • +
  • После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
  • +
  • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
  • +
  • Каждое объявление в правиле пишется на новой строке.
  • +
  • Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки: +
    .selector {
    +  color: #f5f5f5;
    +}
    +            
  • +
  • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
  • +
  • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
  • +
  • Для проверки CSS-кода используйте файл конфигурации .stylelintrc для настройки валидатора stylelint.
  • +
  • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
  • +
+
+
+
+
/* Хорошо */
+.selector,
+.selector-secondary,
+.selector[type="text"] {
+  padding: 15px;
+  margin-bottom: 15px;
+  background-color: rgba(0, 0, 0, 0.5);
+  box-shadow: 0 1px 2px #cccccc, inset 0 1px 0 #ffffff;
+}
+
+/* Плохо */
+.selector, .selector-secondary, .selector[type=text]{
+  padding:15px;
+  margin:0px 0px 15px;
+  background-color:rgba(0,0,0,.5);
+  box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF}
+
+
+
+ +
+
+

Порядок свойств

+

+ Объявления логически связанных свойств группируются в следующем порядке: +

+
    +
  1. Позиционирование
  2. +
  3. Блочная модель
  4. +
  5. Типографика
  6. +
  7. Оформление
  8. +
  9. Анимация
  10. +
  11. Разное
  12. +
+

+ Позиционирование следует первым потому, что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков. +

+

+ Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь. +

+

+ Сгруппированные объявления в правиле отделяются друг от друга пустой строкой. +

+

+ Порядок объявления подробных правил, таких как font-size, font-family, line-height, должен соответствовать порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой должна идти сокращённая версия. +

+
+
+
+
.declaration-order {
+  /* Позиционирование */
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 100;
+
+  /* Блочная модель */
+  display: block;
+  float: right;
+  width: 100px;
+  height: 100px;
+  margin: 10px;
+  padding: 10px;
+
+  /* Типографика */
+  font: normal 13px/1.5 "Arial", sans-serif;
+  font-style: normal;
+  font-size: 13px;
+  line-height: 1.5;
+  font-family: "Arial", sans-serif;
+  text-align: center;
+  color: #333333;
+
+  /* Оформление */
+  background-color: #f5f5f5;
+  border: 1px solid #e5e5e5;
+  border-radius: 3px;
+  opacity: 1;
+
+  /* Анимация */
+  transition: color 1s;
+
+  /* Разное */
+  will-change: auto;
+}
+
+
+
+ +
+
+

Имена классов

+
    +
  • Имена классов пишутся строчными буквами, используется дефис (но не знаки нижнего подчёркивания или camelCase). Дефисы служат разделителями во взаимосвязанных классах (например, .button и .button-danger).
  • +
  • Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс: избегайте сокращений (единственное исключение — .btn для кнопок), но не делайте их слишком длинными (более трёх слов).
  • +
  • Для написания классов используются английские слова и термины. Транслитом названия классов и атрибутов не пишутся.
  • +
+
+
+
+
/* Хорошо */
+.alert-danger { … }
+.tweet .user-picture { … }
+.button { … }
+.layout-center { … }
+
+/* Плохо */
+.testElement { … }
+.t { … }
+.big_red_button { … }
+.knopka { … }
+
+
+
+ +
+
+

Правило @import

+

+ Правило @import работает медленнее, чем тег <link>. В стилях @import не должен использоваться. +

+
+
+
+
<!-- Хорошо: подключение тегом link -->
+<link rel="stylesheet" href="http://github.com/module.css">
+
+<!-- Плохо -->
+<style>
+  @import url("http://github.com/module.css");
+</style>
+
+
+
+ +
+
+

Варианты шрифта

+

+ Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family. +

+

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

+

+ Порядок шрифтов следующий: +

+
    +
  1. нестандартный шрифт;
  2. +
  3. веб-безопасный;
  4. +
  5. тип шрифта.
  6. +
+

+ Список веб-безопасных шрифтов можно посмотреть здесь — cssfontstack.com. +

+
+
+
+
/* Хорошо: указан альтернативный веб-безопасный шрифт и его тип семейства */
+body {
+  font-family: "Helvetica", "Arial", sans-serif;
+}
+
+/* Кому-то нравится Arial, кому-то Tahoma */
+body {
+  font-family: "Helvetica", "Tahoma", sans-serif;
+}
+
+/* Плохо: указан только нестандартный шрифт */
+body {
+  font-family: "Helvetica";
+}
+
+/* Плохо: указан только нестандартный шрифт и тип семейства, альтернативный веб-безопасный шрифт отсутствует */
+body {
+  font-family: "Helvetica", sans-serif;
+}
+
+/* Плохо: Georgia — шрифт с засечками, а нестандартный шрифт — без засечек */
+body {
+  font-family: "Helvetica", "Georgia", sans-serif;
+}
+
+
+
+
+ + +
+ + + + diff --git a/app/img/bane.svg b/img/bane.svg similarity index 100% rename from app/img/bane.svg rename to img/bane.svg diff --git a/app/img/github.svg b/img/github.svg similarity index 100% rename from app/img/github.svg rename to img/github.svg diff --git a/app/img/icon-facebook.svg b/img/icon-facebook.svg similarity index 100% rename from app/img/icon-facebook.svg rename to img/icon-facebook.svg diff --git a/app/img/icon-instagram.svg b/img/icon-instagram.svg similarity index 100% rename from app/img/icon-instagram.svg rename to img/icon-instagram.svg diff --git a/app/img/icon-twitter.svg b/img/icon-twitter.svg similarity index 100% rename from app/img/icon-twitter.svg rename to img/icon-twitter.svg diff --git a/app/img/icon-vkontakte.svg b/img/icon-vkontakte.svg similarity index 100% rename from app/img/icon-vkontakte.svg rename to img/icon-vkontakte.svg diff --git a/app/img/logo-full.svg b/img/logo-full.svg similarity index 100% rename from app/img/logo-full.svg rename to img/logo-full.svg diff --git a/app/img/logo.svg b/img/logo.svg similarity index 100% rename from app/img/logo.svg rename to img/logo.svg diff --git a/app/img/og.png b/img/og.png similarity index 100% rename from app/img/og.png rename to img/og.png diff --git a/index.html b/index.html new file mode 100644 index 0000000..e69de29 diff --git a/js/prism.js b/js/prism.js new file mode 100644 index 0000000..8d62d4e --- /dev/null +++ b/js/prism.js @@ -0,0 +1,6 @@ +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={manual:_self.Prism&&_self.Prism.manual,util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(v instanceof a)){u.lastIndex=0;var b=u.exec(v),k=1;if(!b&&h&&m!=r.length-1){if(u.lastIndex=y,b=u.exec(e),!b)break;for(var w=b.index+(c?b[1].length:0),_=b.index+b[0].length,P=m,A=y,j=r.length;j>P&&_>A;++P)A+=r[P].length,w>=A&&(++m,y=A);if(r[m]instanceof a||r[P-1].greedy)continue;k=P-m,v=e.slice(y,A),b.index-=y}if(b){c&&(f=b[1].length);var w=b.index+f,b=b[0].slice(f),_=w+b.length,x=v.slice(0,w),O=v.slice(_),S=[m,k];x&&S.push(x);var N=new a(i,g?n.tokenize(b,g):b,d,b,h);S.push(N),O&&S.push(O),Array.prototype.splice.apply(r,S)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var l={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o=Object.keys(l.attributes).map(function(e){return e+'="'+(l.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+l.tag+' class="'+l.classes.join(" ")+'"'+(o?" "+o:"")+">"+l.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,l=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,!document.addEventListener||n.manual||r.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript; diff --git a/package.json b/package.json deleted file mode 100644 index 4da81de..0000000 --- a/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "htmlacademy--codeguide", - "version": "0.1.0", - "private": true, - "dependencies": { - "normalize.css": "^4.1.1", - "prismjs": "^1.4.1", - "prismjs-default-theme": "0.0.1" - }, - "devDependencies": { - "babel-core": "^6.1.2", - "babel-loader": "^6.1.0", - "babel-preset-es2015": "^6.1.2", - "browser-sync": "^2.10.0", - "css-mqpacker": "^4.0.0", - "eslint": "^1.9.0", - "fs-extra": "^0.26.2", - "gulp": "gulpjs/gulp#4.0", - "gulp-compile-handlebars": "^0.5.0", - "gulp-minify-css": "^1.2.1", - "gulp-postcss": "^6.0.1", - "gulp-rename": "^1.2.2", - "hbs-helpers": "^1.0.3", - "husky": "^0.10.1", - "merge": "^1.2.0", - "node-libs-browser": "^0.5.3", - "postcss-assets": "^3.0.2", - "postcss-css-variables": "^0.5.1", - "postcss-cssnext": "^2.2.0", - "postcss-import": "^7.1.3", - "postcss-mixins": "^2.1.1", - "postcss-nested": "^1.0.0", - "require-dir": "^0.3.0", - "webpack": "^1.12.4", - "webpack-stream": "^2.1.1" - }, - "scripts": { - "build": "gulp build", - "dev": "gulp start", - "start": "npm run dev", - "lint": "eslint .", - "prepush": "npm run lint", - "test": "npm run lint" - }, - "engines": { - "node": ">=0.12" - }, - "license": "MIT" -} From d63e7b95a93bcdf8501d949d7b7c2a5cb6764771 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Mon, 24 Apr 2017 16:54:15 +0300 Subject: [PATCH 019/103] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D1=82=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=BD=D0=BE=20=D0=B8=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index 670076e..6caed03 100644 --- a/html-css.html +++ b/html-css.html @@ -275,7 +275,7 @@

Подписи полей ввода

Размеры картинок

- Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях или в процентах. В случае пикселей размерность не нужна. + Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях. В случае пикселей размерность не нужна.

По возможности изображениям указываются действительные размеры, так как это улучшает производительность отрисовки страницы: браузер не будет перерисовывать страницу в процессе загрузки и отображения изображения. From aca8be865f863e908bc9c32904fd07973ac924c0 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Mon, 24 Apr 2017 16:54:33 +0300 Subject: [PATCH 020/103] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D1=82=20?= =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D1=80=D0=B5=D0=B2=D1=88=D1=83=D1=8E=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=84=D1=83=20=D0=B2=20=D1=80=D0=B8=D0=B4=D0=BC?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 42 ------------------------------------------ 1 file changed, 42 deletions(-) diff --git a/Readme.md b/Readme.md index 884fcda..d7c5e1c 100644 --- a/Readme.md +++ b/Readme.md @@ -1,42 +1,5 @@ # Стиль кода Академии HTML -[![dependency status][dependency-image]][dependency-url] -[![devDependency status][devdependency-image]][devdependency-url] - -_TBD_ - -## Сервер для разработки - -Для запуска лайв-сервера нужен [Node.js](https://nodejs.org) версии 0.12 или выше. - -### Установка - -```bash -$ git clone https://github.com/htmlacademy/codeguide.git -$ cd codeguide -$ npm i -``` - -### Запуск - -```bash -$ npm start -``` - -После выполнения команды, откройте в браузере `http://127.0.0.1:3000`. - -### Тестирование - -```bash -$ npm test -``` - -Для проверки скриптов используется [ESLint](http://eslint.org). - -## Нашли ошибку? - -Пожалуйста, [создайте тикет](https://github.com/htmlacademy/codeguide/issues). - ## Благодарности * [Code Guide](http://codeguide.co) by @mdo @@ -47,8 +10,3 @@ $ npm test ## Лицензия Лицензия MIT, смотрите файл `License.md`. - -[dependency-image]: https://david-dm.org/htmlacademy/codeguide.svg?style=flat-square -[dependency-url]: https://david-dm.org/htmlacademy/codeguide -[devdependency-image]: https://david-dm.org/htmlacademy/codeguide/dev-status.svg?style=flat-square -[devdependency-url]: https://david-dm.org/htmlacademy/codeguide#info=devDependencies From 6dbdbc6709c2e459b03d3c80499592f81bc4576b Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Tue, 25 Apr 2017 12:22:56 +0300 Subject: [PATCH 021/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=82=D0=BA?= =?UTF-8?q?=D1=83=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 29 +++++++++++++++++ html-css.html | 66 +++++++++++++++++++-------------------- img/bane.svg | 2 +- img/github.svg | 2 +- img/logo-full.svg | 2 +- img/logo-html.svg | 1 + img/logo-js.svg | 1 + index.html | 79 +++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 146 insertions(+), 36 deletions(-) create mode 100644 img/logo-html.svg create mode 100644 img/logo-js.svg diff --git a/css/style.css b/css/style.css index 90e9384..c212ef0 100644 --- a/css/style.css +++ b/css/style.css @@ -111,6 +111,35 @@ header a:visited { color: #ffffff; } +.visually-hidden { + position: absolute; + + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + + border: 0; + + clip: rect(0, 0, 0, 0); + clip-path: inset(100%); +} + +.logo-list { + max-width: 550px; + margin: 50px auto; +} + +.logo-list ul { + display: flex; + justify-content: space-between; + margin: 0; + padding: 0; + + list-style: none; +} + .logo { width: 300px; height: 300px; diff --git a/html-css.html b/html-css.html index 6caed03..8c3cd2a 100644 --- a/html-css.html +++ b/html-css.html @@ -20,15 +20,15 @@ -

-
- - - -

Стиль кода Академии HTML

-

github.com/htmlacademy/codeguide

-
+
+ + + +

Стиль кода Академии HTML

+

github.com/htmlacademy/codeguide

+
+

Оглавление

@@ -538,34 +538,34 @@

Варианты шрифта

+ - diff --git a/img/bane.svg b/img/bane.svg index 2e5cc47..5c5cae4 100644 --- a/img/bane.svg +++ b/img/bane.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/img/github.svg b/img/github.svg index e1cffa9..9ffd39e 100644 --- a/img/github.svg +++ b/img/github.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/img/logo-full.svg b/img/logo-full.svg index 7319e8a..d61fc5e 100644 --- a/img/logo-full.svg +++ b/img/logo-full.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/img/logo-html.svg b/img/logo-html.svg new file mode 100644 index 0000000..101e1ff --- /dev/null +++ b/img/logo-html.svg @@ -0,0 +1 @@ +HTML5 Logo diff --git a/img/logo-js.svg b/img/logo-js.svg new file mode 100644 index 0000000..d609063 --- /dev/null +++ b/img/logo-js.svg @@ -0,0 +1 @@ + diff --git a/index.html b/index.html index e69de29..b3dbc00 100644 --- a/index.html +++ b/index.html @@ -0,0 +1,79 @@ + + + + + Стиль кода Академии HTML + + + + + + + + + + + + + + + + + +
+ + + +

Стиль кода Академии HTML

+

github.com/htmlacademy/codeguide

+
+ +
+ +
+ + + + From 2407cc0ab956780d8c2a961fa247608e4eaefda5 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Tue, 2 May 2017 19:19:24 +0300 Subject: [PATCH 022/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 119 ++++++++++++++++++++++--- 1 file changed, 106 insertions(+), 13 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index 1823fea..ba4fea7 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -201,7 +201,7 @@ var foo = "Copyright \u00A9"; // unicode ## Условные операторы 'yoda': ['error', "never"] -- Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения не наоброт. +- Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. ```javascript if (1 === myValue) {} // Плохо @@ -338,11 +338,25 @@ function myFunc() {}; // Плохо ## Приведение типов 'no-extra-boolean-cast': 'error', -'valid-typeof': 'error', // проверка на правильный тип в typeof -'radix': 'error', +- Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях `if`, `while`, `for`, в первом операнде тернарного оператора -### Зафиксированный if (if..true) -'no-constant-condition': 'error', +'valid-typeof': 'error', +- Оператор `typeof` используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения `typeof` + +'radix': 'error' +- В `parseInt` обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления + +### Константы в условиях +'no-constant-condition': 'error' +- В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда +```diff +- if (true) {} ++ if (a > 1) {} +``` +```diff +- var ternaryValue = true ? 'a' : 'b'; ++ var ternaryValue = isA() ? 'a' : 'b'; +``` # Модульность и области видимости ## Глобальная область видимости @@ -351,21 +365,50 @@ function myFunc() {}; // Плохо # Чистый код ## Лишние символы (пробелы, точки с запятой и прочее) 'no-extra-semi': 'error', +- Не используются лишние (множественные) точки с запятой ## Отладчик и консоль 'no-console': 'error', +- В коде не используется оставленных выводов в консоль + 'no-debugger': 'error', +- В коде нет забытых инструкций debugger ## Неиспользуемый код 'no-unreachable': 'error', -'no-unused-vars': ['error', {args: 'none'}], // eslint:recommended +- В проекте нет недоступного кода, который никогда не выполнится +```diff +- if (false) { +- doSomething(); +- } ++ if (needToDoSomething()) { ++ doSomething(); ++ } +``` + +'no-unused-vars': ['error', {args: 'none'}] +- В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций. + 'no-unused-expressions': 'error', +- В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций +```diff +- check === true && doSomething(); ++ if (check) { ++ doSomething(); ++ } +``` ## Обработка ошибок и исключения -'no-throw-literal': 'error', // eslint:recommended // запрет на выброс исключениями не объектов Error а литералов +'no-throw-literal': 'error', +- Для выбрасывания исключения в оператор `throw` передаются только объекты Error. Передавать литералы запрещено. +```diff +- throw 'Passed value is out of range'; ++ throw new RangeError('Rassed value is out of range'); +``` ### try..catch с пустым try 'no-ex-assign': 'error' +- В конструкции `try..catch` запрещен пустой блок `try` # Документирование 'valid-jsdoc': ['error', { @@ -374,21 +417,71 @@ function myFunc() {}; // Плохо requireReturn: false, prefer: {returns: 'return'} }], +При написании jsDoc используются следующие ограничения: +- необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param +- описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия `return` используется без возвращаемого значения для выхода из функции +- для описания возвращаемого значения из функции используется тег @return, а не @returns # Прочее -'guard-for-in': 'error', // Итерирование по объектам через hasOwnProp -'no-caller': 'error', // запрет на использование caller/callee в функциях -'no-iterator': 'error', // запрет на использование __iterator__ -'no-proto': 'error', // запрет на использование __proto__ +'guard-for-in': 'error' +- При итерировании по объектам через `for..in` при работе со свойствами используется конструкция `hasOwnProperty` + +'no-caller': 'error', +- В функциях не используются обращения к `caller` и `callee` + +'no-iterator': 'error', +- В объектах напрямую не переопределяется свойство `__iterator__` + +'no-proto': 'error', +- В объектах напрямую не переопределяется свойство `__proto__`. Разрешено переопределять `__proto__` через `Object.create` или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать `__proto__` нельзя +```diff +- var obj = { +- __proto__: Parent +- }; ++ ++ var Obj = function() {}; ++ Obj.prototype = new Parent(); ++ var obj = new obj; ++ ++ var obj = Object.create(Parent.prototype); +``` + 'no-labels': 'error', +- В коде не используются лейблы. Лейблы используются с конструкциями `break` и `continue` для направленного выхода из цикла и могут привести к слишком сложному для понимания коду + 'no-lone-blocks': 'error', +- Блоки, использующиеся в коде должны описывать тело функции, условия, оператора `switch` и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения. + 'no-sequences': 'error', +- В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова `let`, `const`, `var`, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора `for` +```diff +- const result = (1, 2); // 2 ++ const result = 2; + +- switch (val = getVal(), val) {} ++ val = getVal(); ++ switch(val) {} + ++ for (var i = 0, l = 100; i < l; i++); +``` ## Регулярные выражения 'no-control-regex': 'error', +- В регулярных выражениях не используются «управляющие выражения» + 'no-empty-character-class': 'error', -'no-invalid-regexp': 'error', // нельзя создавать объект RegExp из неправильной строки -'no-regex-spaces': 'error', // запрет на использование нескольких пробелов в регулярках. Вместо этого предлагается использовать {3} +- В регулярных выражениях не используются пустые классы символов `[]` (блоки, ограниченные квадратными скобками) + +'no-invalid-regexp': 'error', +- В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение + +'no-regex-spaces': 'error', +- В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} +```diff +- / /.exec(myString); ++ /\s{3}/.exec(myString); +``` # node.js 'no-process-exit': 'error', +- В node.js файлах не используется конструкция `process.exit`. From 1d71b2eb5cb45442ada1a944efacb06d1ee76956 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Tue, 2 May 2017 19:27:02 +0300 Subject: [PATCH 023/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D1=84=D0=B0=D0=BA=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D1=83=D1=8E=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D1=83=20=D0=B2=20=D0=BE=D0=B1=D1=8A=D1=8F=D1=81=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index ba4fea7..c4d5d23 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -249,7 +249,7 @@ if (myValue === 1) {} // Хорошо 'no-var': 'error', - При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода. -'no-redeclare': 'error', //default +'no-redeclare': 'error' - Запрещено переопределять с помощью ключевого слова ранее созданные переменные 'one-var': ['error', { @@ -262,10 +262,10 @@ if (myValue === 1) {} // Хорошо ### Объявление функций 'no-func-assign': 'error', -- Функции объявляются как функциональные выражения, а не определения функций. -```javascript -var myFunc = function() {}; // Хорошо -function myFunc() {}; // Плохо +- Запрещено переопределение функций, созданных с помощью функционального объявления (function expression) +```diff +- function myFunc() {}; +- myFunc = 2; ``` 'no-inner-declarations': ["error", "functions"], From 333149581874619381f7b7c09ff031cbf04017f8 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Mon, 26 Jun 2017 09:43:19 +0300 Subject: [PATCH 024/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20esl?= =?UTF-8?q?int=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9=D0=B4=D0=B0=20=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D0=B1?= =?UTF-8?q?=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-rules.hbs | 215 ++++++------------------- 1 file changed, 52 insertions(+), 163 deletions(-) diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs index c4d5d23..747930a 100644 --- a/app/templates/partials/js/js-rules.hbs +++ b/app/templates/partials/js/js-rules.hbs @@ -2,263 +2,204 @@ ## Отступы, пробелы и переносы Для правильного форматирования используйте файл .editorconfig в вашем редакторе. -'indent': ['error', 2, { - SwitchCase: 1, - // continuation indent - VariableDeclarator: 2, - MemberExpression: 2, - FunctionDeclaration: {parameters: 2}, - FunctionExpression: {parameters: 2}, - CallExpression: {arguments: 2} -}], - Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела. -'no-irregular-whitespace': 'error', // eslint:recommended - Запрещено одновременное использование табов и пробелов для отступов. -'no-unexpected-multiline': 'error', // eslint:recommended - Выражения должны заканчиваться точками с запятой. -'no-multi-spaces': 'error', - Внутри строки не используется более одного пробела. -'brace-style': 'error', - Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует -```javascript -// Плохо: -if (condition) -{ - // code -} - -// Хорошо -if (condition) { - // code -} +```js +- if (condition) +- { +- // code +- } + ++ if (condition) { ++ // code ++ } ``` -'block-spacing': ['error', 'always'], - В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом -'array-bracket-spacing': ['error', 'never'], - В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива -'comma-spacing': 'error', - После запятой всегда должен ставиться пробел, если запятая не в конце строки -'comma-style': 'error', - Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции. -'eol-last': 'error', - Файл должен заканчиваться пустой строкой -'no-trailing-spaces': 'error', - Строка не должна заканчиваться пробелами -'object-curly-spacing': 'error', - В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон -'no-mixed-spaces-and-tabs': 'error', // eslint:recommended - В коде не используются совместно табы и пробелы -'no-multiple-empty-lines': ['error', {max: 2}], - Блоки кода отделяются друг от друга не более чем двумя пустыми строками -'linebreak-style': 'off', // check this in git - В качестве символа строки используется стандартный символ, который используется в системе -'computed-property-spacing': 'error', - При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы -'func-call-spacing': 'error', - Оператор вызова функции () не отделяется круглыми скобками от названия функции -'key-spacing': 'error', - В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено -'keyword-spacing': 'error', - Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д. -'padded-blocks': ['off', 'never'], - В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода) -'semi-spacing': 'error', - После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся. -'space-before-blocks': 'error', - Перед скобками начинающими новый блок кода должен ставиться пробел. -'space-before-function-paren': ['error', {named: 'never', anonymous: 'always'}], - при объявлении анонимных функций, скобки с параметрами ставятся непосредственно после ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет. -'spaced-comment': ['error', 'always'], - В комментариях текст отбивается пробелом от начала комментария. -'generator-star-spacing': ['error', 'after'], - При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов -'rest-spread-spacing': 'error', - В spread-операторе точки не отделяются от названия коллекции -'yield-star-spacing': ['error', 'after'] - Звездочка после ключевого слова yield не отбивается пробелом. После звездочки проблел ставится всегда. ## Строки -'no-multi-str': 'error', // запрет на использование переносов в ES5-строках - В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы. -'no-octal-escape': 'error', - В строках запрещено указывать код спецсимволов в восьмеричной системе счисления - -```javascript -// Плохо -var foo = "Copyright \251"; - -// Хорошо -var foo = "Copyright \u00A9"; // unicode +```diff +- var foo = "Copyright \251"; ++ var foo = "Copyright \u00A9"; ``` -'quote-props': ['error', 'consistent'], -- При создании объектов через литералы свойства должны объявляться в одинаковом стиле: или без кавычек или с ними. +- При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними. -'quotes': ['error', 'single', {allowTemplateLiterals: true}], - В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам. ## Числа -'no-floating-decimal': 'error', // запрет на опускание нуля - В числах запрещено опускать ноль в дробной и целой части. -'no-octal': 'error', //default - Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления. ## Литералы -'no-array-constructor': 'error', - Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины. -'no-new-object': 'error', - Объекты должны создаваться через литерал объекта, а не через конструктор. ### Объекты -'no-dupe-keys': 'error', - При создании объектов запрещено дублирование ключей. -'no-dupe-args': 'error', - При описании функций запрещено дублировать названия параметров. -'no-duplicate-case': 'error', - В операторе `switch` запрещено дублировать условия (case) ### Массивы ## Операторы -'space-infix-ops': 'error', - В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами. -'space-unary-ops': ['error', {words: true, nonwords: false}], - Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof. # Именование -'no-label-var': 'error', - Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов -'camelcase': 'error', - Все переменные должны быть названы в верблюжьем регистре. Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре. -'no-shadow': 'error', - Запрещено использовать имена переменных, которые используются во внешних областях видимости. -'no-shadow-restricted-names': 'error', -- Запрещено называть переменные и свойства ключевыми словами JSж +- Запрещено называть переменные и свойства ключевыми словами JS -'no-undef': 'error', //default // нельзя использовать необъявленные переменные - Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта `window/global`. -'no-undef-init': 'error', // нельзя создавать переменные без значения - Запрещено объявлять переменные без значения. -'no-undefined': 'error', // нельзя использовать значение undefined -- Запрещено напрямую обращаться к значению undefined. +- Запрещено напрямую обращаться к значению `undefined`. Для проверки типа рекомендуется использовать `typeof`. Для прямого сравнения с `undefined` можно использовать конструкцию `void 0` -'new-cap': 'error', - С заглавной буквы называются только функции-конструкторы. # Предотвращение ошибок -'semi': 'error', - Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI. -'unicode-bom': 'warn', - Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит. -'curly': ['error', "all"], - Обязательно используются блоки кода даже если в выражении содержится одна строчка -'no-empty': 'error', - В коде нет пустых блоков кода -'strict': ['error', 'global'], - Код работает в строгом режиме: в начале всех файлов явно прописана директива `use strict`. ## Условные операторы -'yoda': ['error', "never"] - Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. - -```javascript -if (1 === myValue) {} // Плохо -if (myValue === 1) {} // Хорошо +```diff +- if (1 === myValue) {} ++ if (myValue === 1) {} ``` -'eqeqeq': 'error', // использование строгого сравнения - При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения -'no-cond-assign': 'error', // eslint:recommended // запрет на присвоение в блоке - В условных операторах не используется оператор присвоения -'no-unsafe-negation': 'error', // - В условтях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок. -'use-isnan': 'error', - Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать `isNaN`. -'no-fallthrough': 'error', // запрет на проваливание в switch - Запрещено использовать case без break или return в блоках switch. -'no-nested-ternary': 'error', - Не используются вложенные тернарные операторы. ## Функции -'consistent-return': 'error', -- Функция не возвращает undefined, особенно если есть другой return +- Если в функции используется ветвление, в котором есть возврат значения (`return`), `return` должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. + +```diff +- var do = function() { +- if (cond) { +- return 1; +- } else { +- // Проблема заключается в том, что +- // в первой ветке условия возвращается +- // единица, а в альтернативной нет никакого +- // возврата и при вызове функции неизвестно +- // будет ли из нее возвращего какое-то значение. +- doSomethingElse(); +- } +- } ++ ++ var do = function() { ++ if (cond) { ++ return 1; ++ } else { ++ return 2; ++ } ++ } +``` -'no-return-assign': 'error', - В return не используется оператор присваивания. -'arrow-parens': ['error', 'always'], - В стрелочных функциях всегда используются скобки для параметров, даже если параметр один ## Классы -'constructor-super': 'error', // eslint:recommended - В конструкторе классов-наследников обязательно вызывается super() -'no-this-before-super': 'error', // eslint:recommended - В конструкторе нет обращения к this до того, как будет вызван super() ## Объявление переменных и функций -'no-var': 'error', - При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода. -'no-redeclare': 'error' - Запрещено переопределять с помощью ключевого слова ранее созданные переменные -'one-var': ['error', { - var: 'never', - let: 'never', - const: 'never' -}], -- Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный `var`, `let` или `const`. - +- Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный `var`, `let` или `const`. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных. +```diff +- var a = 1, b = 2; +- ++ var a = 1; ++ var b = 2; +``` ### Объявление функций 'no-func-assign': 'error', @@ -268,138 +209,105 @@ if (myValue === 1) {} // Хорошо - myFunc = 2; ``` -'no-inner-declarations': ["error", "functions"], - Запрещено объявление значений внутри блоков -'no-new-func': 'error', - Новые функции не создаются с помощью конструктора `Function` -'prefer-rest-params': 'error', - Вместо коллекции `arguments`, используется rest-оператор -'prefer-spread': 'error', - Вместо вызова функции через `apply` используется spread-оператор ### Создание значений -'no-obj-calls': 'error', - Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости `Math(), JSON(), Reflect()`. -'no-sparse-arrays': 'error', // запрет на массивы с пропусками - При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых) -'comma-dangle': ['error', 'only-multiline'] - При создании непустых объектов и массивов не используются «висячие» запятые -'no-new-wrappers': 'error', - Не используются конструкторы примитивов, которые используются для автобоксинга `String`, `Number`, `Boolean` -'new-parens': 'error', - Конструкторы вызываются со скобками, даже если у них нет параметров. -'no-new-symbol': 'error', - Символы (`Symbol`) создаются вызовом функции `Symbol` без ключевого слова `new`. ## Хорошие практики -'no-with': 'error', - Не используется конструкция `with`. -'no-alert': 'error', - Не используются `alert`. -'no-eval': 'error', - Не используется выполнение кода через `eval`. -'no-implied-eval': 'error', - Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например `setTimeout`. -'no-script-url': 'error', - Не используется протокол javascript. -'no-new': 'error', // запрет на использование конструкторов для сайдэффектов - Конструкторы не используются без ключевого слова `new`. ### Манкипатчинг -'no-extend-native': 'error', - Встроенные в язык объекты и прототипы не расширяются в рантайме -'no-global-assign': 'error', - Не переопределяются глобальные значения (undefined, null, Object, window и прочие) ### Контекст -'no-extra-bind': 'error', - bind не используется вне методов классов -'no-invalid-this': 'error', - в функциях, которые не являются методами никакого объекта или класса не используется `this` ### Переменные -'no-delete-var': 'error', //eslint:recommended - Переменные, объявленные через `var` не удаляются оператором `delete` ## Приведение типов -'no-extra-boolean-cast': 'error', - Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях `if`, `while`, `for`, в первом операнде тернарного оператора -'valid-typeof': 'error', - Оператор `typeof` используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения `typeof` -'radix': 'error' - В `parseInt` обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления ### Константы в условиях -'no-constant-condition': 'error' - В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда ```diff - if (true) {} + if (a > 1) {} ``` + ```diff - var ternaryValue = true ? 'a' : 'b'; + var ternaryValue = isA() ? 'a' : 'b'; ``` -# Модульность и области видимости -## Глобальная область видимости -## Системы сборки - # Чистый код ## Лишние символы (пробелы, точки с запятой и прочее) -'no-extra-semi': 'error', - Не используются лишние (множественные) точки с запятой ## Отладчик и консоль -'no-console': 'error', - В коде не используется оставленных выводов в консоль -'no-debugger': 'error', - В коде нет забытых инструкций debugger ## Неиспользуемый код -'no-unreachable': 'error', - В проекте нет недоступного кода, который никогда не выполнится ```diff - if (false) { - doSomething(); - } ++ + if (needToDoSomething()) { + doSomething(); + } ``` -'no-unused-vars': ['error', {args: 'none'}] - В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций. -'no-unused-expressions': 'error', - В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций ```diff - check === true && doSomething(); +- + if (check) { + doSomething(); + } ``` ## Обработка ошибок и исключения -'no-throw-literal': 'error', - Для выбрасывания исключения в оператор `throw` передаются только объекты Error. Передавать литералы запрещено. ```diff - throw 'Passed value is out of range'; @@ -407,32 +315,21 @@ if (myValue === 1) {} // Хорошо ``` ### try..catch с пустым try -'no-ex-assign': 'error' - В конструкции `try..catch` запрещен пустой блок `try` # Документирование -'valid-jsdoc': ['error', { - requireParamDescription: false, - requireReturnDescription: false, - requireReturn: false, - prefer: {returns: 'return'} -}], При написании jsDoc используются следующие ограничения: - необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param - описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия `return` используется без возвращаемого значения для выхода из функции - для описания возвращаемого значения из функции используется тег @return, а не @returns # Прочее -'guard-for-in': 'error' - При итерировании по объектам через `for..in` при работе со свойствами используется конструкция `hasOwnProperty` -'no-caller': 'error', - В функциях не используются обращения к `caller` и `callee` -'no-iterator': 'error', - В объектах напрямую не переопределяется свойство `__iterator__` -'no-proto': 'error', - В объектах напрямую не переопределяется свойство `__proto__`. Разрешено переопределять `__proto__` через `Object.create` или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать `__proto__` нельзя ```diff - var obj = { @@ -446,13 +343,10 @@ if (myValue === 1) {} // Хорошо + var obj = Object.create(Parent.prototype); ``` -'no-labels': 'error', - В коде не используются лейблы. Лейблы используются с конструкциями `break` и `continue` для направленного выхода из цикла и могут привести к слишком сложному для понимания коду -'no-lone-blocks': 'error', - Блоки, использующиеся в коде должны описывать тело функции, условия, оператора `switch` и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения. -'no-sequences': 'error', - В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова `let`, `const`, `var`, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора `for` ```diff - const result = (1, 2); // 2 @@ -466,16 +360,12 @@ if (myValue === 1) {} // Хорошо ``` ## Регулярные выражения -'no-control-regex': 'error', - В регулярных выражениях не используются «управляющие выражения» -'no-empty-character-class': 'error', - В регулярных выражениях не используются пустые классы символов `[]` (блоки, ограниченные квадратными скобками) -'no-invalid-regexp': 'error', - В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение -'no-regex-spaces': 'error', - В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} ```diff - / /.exec(myString); @@ -483,5 +373,4 @@ if (myValue === 1) {} // Хорошо ``` # node.js -'no-process-exit': 'error', - В node.js файлах не используется конструкция `process.exit`. From 4557aa6542a9e05bb0bcaa49204b25b22789cf32 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Fri, 7 Jul 2017 18:16:24 +0300 Subject: [PATCH 025/103] =?UTF-8?q?=D0=A1=D0=BA=D0=BB=D0=B0=D0=B4=D0=B8?= =?UTF-8?q?=D1=80=D1=83=D0=B5=D1=82=20md=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE,=20=D1=83=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/partials/js/js-recomendations.hbs | 0 app/templates/partials/js/js-rules.hbs => md/rules.md | 0 syntax.md => md/syntax.md | 0 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/templates/partials/js/js-recomendations.hbs rename app/templates/partials/js/js-rules.hbs => md/rules.md (100%) rename syntax.md => md/syntax.md (100%) diff --git a/app/templates/partials/js/js-recomendations.hbs b/app/templates/partials/js/js-recomendations.hbs deleted file mode 100644 index e69de29..0000000 diff --git a/app/templates/partials/js/js-rules.hbs b/md/rules.md similarity index 100% rename from app/templates/partials/js/js-rules.hbs rename to md/rules.md diff --git a/syntax.md b/md/syntax.md similarity index 100% rename from syntax.md rename to md/syntax.md From 113f1816c7774893909bfe998ce25d4ea74fc5e6 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Fri, 7 Jul 2017 18:46:58 +0300 Subject: [PATCH 026/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=87=D0=B5=D1=80=D0=BD=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9=D0=B4=D0=B0=20js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 1 + javascript.html | 593 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 594 insertions(+) create mode 100644 javascript.html diff --git a/css/style.css b/css/style.css index c212ef0..451a739 100644 --- a/css/style.css +++ b/css/style.css @@ -92,6 +92,7 @@ header { background-color: #312785; background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); + background-size: 82px 47px; } header h1 { diff --git a/javascript.html b/javascript.html new file mode 100644 index 0000000..ac4e47d --- /dev/null +++ b/javascript.html @@ -0,0 +1,593 @@ + + + + + Стиль кода Академии HTML + + + + + + + + + + + + + + + + + +
+ + + +

Стиль кода Академии HTML

+

github.com/htmlacademy/codeguide

+
+ +
+ + +
+

Синтаксис

+ +
+
+

Отступы, пробелы и переносы

+
    + Для правильного форматирования используйте файл .editorconfig в вашем редакторе. + +
  • Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела.
  • + +
  • Запрещено одновременное использование табов и пробелов для отступов.
  • + +
  • Выражения должны заканчиваться точками с запятой.
  • + +
  • Внутри строки не используется более одного пробела.
  • + +
  • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует +
    - if (condition)
    +- {
    +-   // code
    +- }
    +
    ++ if (condition) {
    ++   // code
    ++ }
    +
  • + +
  • В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом
  • + +
  • В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива
  • + +
  • После запятой всегда должен ставиться пробел, если запятая не в конце строки
  • + +
  • Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции.
  • + +
  • Файл должен заканчиваться пустой строкой
  • + +
  • Строка не должна заканчиваться пробелами
  • + +
  • В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон
  • + +
  • В коде не используются совместно табы и пробелы
  • + +
  • Блоки кода отделяются друг от друга не более чем двумя пустыми строками
  • + +
  • В качестве символа строки используется стандартный символ, который используется в системе
  • + +
  • При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы
  • + +
  • Оператор вызова функции () не отделяется круглыми скобками от названия функции
  • + +
  • В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено
  • + +
  • Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.
  • + +
  • В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)
  • + +
  • После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся.
  • + +
  • Перед скобками начинающими новый блок кода должен ставиться пробел.
  • + +
  • при объявлении анонимных функций, скобки с параметрами ставятся непосредственно после ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет.
  • + +
  • В комментариях текст отбивается пробелом от начала комментария.
  • + +
  • При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов
  • + +
  • В spread-операторе точки не отделяются от названия коллекции
  • + +
  • Звездочка после ключевого слова yield не отбивается пробелом. После звездочки проблел ставится всегда.
  • +
+
+
+ +
+
+

Строки

+
    +
  • В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы.
  • + +
  • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления
    - var foo = "Copyright \251";
    ++ var foo = "Copyright \u00A9";
  • + +
  • При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними.
  • + +
  • В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам.
  • +
+
+
+ +
+
+

Числа

+
    +
  • В числах запрещено опускать ноль в дробной и целой части.
  • + +
  • Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления.
  • +
+
+
+ +
+
+

Литералы

+
    +
  • Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины.
  • + +
  • Объекты должны создаваться через литерал объекта, а не через конструктор.
  • + +
    Объекты
    +
  • При создании объектов запрещено дублирование ключей.
  • + +
  • При описании функций запрещено дублировать названия параметров.
  • + +
  • В операторе `switch` запрещено дублировать условия (case)
  • + +
    Массивы
    +
+
+
+ +
+
+

Операторы

+
    +
  • В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами.
  • + +
  • Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof.
  • +
+
+
+ +
+ +
+

Именование

+ +
+
+
    +
  • Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов
  • + +
  • Все переменные должны быть названы в верблюжьем регистре. Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре.
  • + +
  • Запрещено использовать имена переменных, которые используются во внешних областях видимости.
  • + +
  • Запрещено называть переменные и свойства ключевыми словами JS
  • + +
  • Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта `window/global`.
  • + +
  • Запрещено объявлять переменные без значения.
  • + +
  • Запрещено напрямую обращаться к значению `undefined`. Для проверки типа рекомендуется использовать `typeof`. Для прямого сравнения с `undefined` можно использовать конструкцию `void 0`
  • + +
  • С заглавной буквы называются только функции-конструкторы.
  • +
+
+
+ +
+ +
+

Предотвращение ошибок

+ +
+
+
    +
  • Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI.
  • + +
  • Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит.
  • + +
  • Обязательно используются блоки кода даже если в выражении содержится одна строчка
  • + +
  • В коде нет пустых блоков кода
  • + +
  • Код работает в строгом режиме: в начале всех файлов явно прописана директива `use strict`.
  • +
+
+
+ +
+
+

Условные операторы

+
    +
  • Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.
    - if (1 === myValue) {}
    ++ if (myValue === 1) {}
  • + +
  • При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения
  • + +
  • В условных операторах не используется оператор присвоения
  • + +
  • В условтях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок.
  • + +
  • Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать `isNaN`.
  • + +
  • Запрещено использовать case без break или return в блоках switch.
  • + +
  • Не используются вложенные тернарные операторы.
  • +
+
+
+ +
+
+

Функции

+
    +
  • Если в функции используется ветвление, в котором есть возврат значения (`return`), `return` должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение.
    - var do = function() {
    +-   if (cond) {
    +-     return 1;
    +-   } else {
    +-     // Проблема заключается в том, что
    +-     // в первой ветке условия возвращается
    +-     // единица, а в альтернативной нет никакого
    +-     // возврата и при вызове функции неизвестно
    +-     // будет ли из нее возвращего какое-то значение.
    +-     doSomethingElse();
    +-   }
    +- }
    ++
    ++ var do = function() {
    ++   if (cond) {
    ++     return 1;
    ++   } else {
    ++     return 2;
    ++   }
    ++ }
  • + +
  • В return не используется оператор присваивания.
  • + +
  • В стрелочных функциях всегда используются скобки для параметров, даже если параметр один
  • +
+
+
+ +
+
+

Операторы

+
    +
  • В конструкторе классов-наследников обязательно вызывается super()
  • + +
  • В конструкторе нет обращения к this до того, как будет вызван super()
  • +
+
+
+ +
+
+

Объявление переменных и функций

+
    +
  • При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода.
  • + +
  • Запрещено переопределять с помощью ключевого слова ранее созданные переменные
  • + +
  • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный `var`, `let` или `const`. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных.
    - var a = 1, b = 2;
    +-
    ++ var a = 1;
    ++ var b = 2;
    +            
  • +
+ +
Объявление функций
+
    + 'no-func-assign': 'error', +
  • Запрещено переопределение функций, созданных с помощью функционального объявления (function expression)
    - function myFunc() {};
    +- myFunc = 2;
    +
  • + +
  • Запрещено объявление значений внутри блоков
  • + +
  • Новые функции не создаются с помощью конструктора `Function`
  • + +
  • Вместо коллекции `arguments`, используется rest-оператор
  • + +
  • Вместо вызова функции через `apply` используется spread-оператор
  • +
+ +
Создание значений
+
    +
  • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости `Math(), JSON(), Reflect()`.
  • + +
  • При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)
  • + +
  • При создании непустых объектов и массивов не используются «висячие» запятые
  • + +
  • Не используются конструкторы примитивов, которые используются для автобоксинга `String`, `Number`, `Boolean`
  • + +
  • Конструкторы вызываются со скобками, даже если у них нет параметров.
  • + +
  • Символы (`Symbol`) создаются вызовом функции `Symbol` без ключевого слова `new`.
  • +
+
+
+ +
+
+

Хорошие практики

+
    +
  • Не используется конструкция `with`.
  • + +
  • Не используются `alert`.
  • + +
  • Не используется выполнение кода через `eval`.
  • + +
  • Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например `setTimeout`.
  • + +
  • Не используется протокол javascript.
  • + +
  • Конструкторы не используются без ключевого слова `new`.
  • +
+ +
Манкипатчинг
+ +
    +
  • Встроенные в язык объекты и прототипы не расширяются в рантайме
  • + +
  • Не переопределяются глобальные значения (undefined, null, Object, window и прочие)
  • +
+ +
Контекст
+
    +
  • bind не используется вне методов классов
  • + +
  • в функциях, которые не являются методами никакого объекта или класса не используется `this`
  • +
+ +
Переменные
+
    +
  • Переменные, объявленные через `var` не удаляются оператором `delete`
  • +
+
+
+ +
+
+

Приведение типов

+
    +
  • Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях `if`, `while`, `for`, в первом операнде тернарного оператора
  • + +
  • Оператор `typeof` используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения `typeof`
  • + +
  • В `parseInt` обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления
  • +
+ +
Константы в условиях
+ +
    +
  • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда
    - if (true) {}
    ++ if (a > 1) {}
    + +
    - var ternaryValue = true ? 'a' : 'b';
    ++ var ternaryValue = isA() ? 'a' : 'b';
    +              
  • +
+
+
+ +
+ +
+

Чистый код

+ +
+
+

Лишние символы (пробелы, точки с запятой и прочее)

+
    +
  • Не используются лишние (множественные) точки с запятой
  • +
+
+
+ +
+
+

Отладчик и консоль

+
    +
  • В коде не используется оставленных выводов в консоль
  • + +
  • В коде нет забытых инструкций debugger
  • +
+
+
+ +
+
+

Неиспользуемый код

+
    +
  • + В проекте нет недоступного кода, который никогда не выполнится
    - if (false) {
    +-   doSomething();
    +- }
    ++
    ++ if (needToDoSomething()) {
    ++   doSomething();
    ++ }
    +
  • + +
  • В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций.
  • + +
  • + В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций
    - check === true && doSomething();
    +-
    ++ if (check) {
    ++   doSomething();
    ++ }
  • +
+
+
+ +
+
+

Обработка ошибок и исключения

+
    +
  • + Для выбрасывания исключения в оператор `throw` передаются только объекты Error. Передавать литералы запрещено.
    - throw 'Passed value is out of range';
    ++ throw new RangeError('Rassed value is out of range');
  • +
+ +
try..catch с пустым try
+
    +
  • В конструкции `try..catch` запрещен пустой блок `try`
  • +
+
+
+ +
+ +
+

Документирование

+ +
+
+ При написании jsDoc используются следующие ограничения: + +
    +
  • необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
  • + +
  • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия `return` используется без возвращаемого значения для выхода из функции
  • + +
  • для описания возвращаемого значения из функции используется тег @return, а не @returns
  • +
+
+
+ +
+ +
+

Прочее

+ +
+
+
    +
  • При итерировании по объектам через `for..in` при работе со свойствами используется конструкция `hasOwnProperty`
  • + +
  • В функциях не используются обращения к `caller` и `callee`
  • + +
  • В объектах напрямую не переопределяется свойство `__iterator__`
  • + +
  • + В объектах напрямую не переопределяется свойство `__proto__`. Разрешено переопределять `__proto__` через `Object.create` или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать `__proto__` нельзя
    - var obj = {
    +-   __proto__: Parent
    +- };
    ++
    ++ var Obj = function() {};
    ++ Obj.prototype = new Parent();
    ++ var obj = new obj;
    ++
    ++ var obj = Object.create(Parent.prototype);
  • + +
  • В коде не используются лейблы. Лейблы используются с конструкциями `break` и `continue` для направленного выхода из цикла и могут привести к слишком сложному для понимания коду
  • + +
  • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора `switch` и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
  • + +
  • + В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова `let`, `const`, `var`, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора `for`
    - const result = (1, 2); // 2
    ++ const result = 2;
    +
    +- switch (val = getVal(), val) {}
    ++ val = getVal();
    ++ switch(val) {}
    +
    ++ for (var i = 0, l = 100; i < l; i++);
  • +
+
+
+ +
+
+

Регулярные выражения

+
    +
  • В регулярных выражениях не используются «управляющие выражения»
  • + +
  • В регулярных выражениях не используются пустые классы символов `[]` (блоки, ограниченные квадратными скобками)
  • + +
  • В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение
  • + +
  • + В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} +
    - /   /.exec(myString);
    ++ /\s{3}/.exec(myString);
  • +
+
+
+ +
+ +
+

node.js

+ +
+
+
    +
  • В node.js файлах не используется конструкция `process.exit`.
  • +
+
+
+ +
+ +
+ + + + + + From fbce775241372f91500122a17f20c85a0bb64793 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Fri, 7 Jul 2017 19:01:20 +0300 Subject: [PATCH 027/103] =?UTF-8?q?=D0=A0=D0=90=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D1=82=D0=B5=D0=B3=D0=B8=20cod?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 72 ++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/javascript.html b/javascript.html index ac4e47d..ad475e7 100644 --- a/javascript.html +++ b/javascript.html @@ -156,7 +156,7 @@
Объекты
  • При описании функций запрещено дублировать названия параметров.
  • -
  • В операторе `switch` запрещено дублировать условия (case)
  • +
  • В операторе switch запрещено дублировать условия (case)
  • Массивы
    @@ -190,11 +190,11 @@

    Именование

  • Запрещено называть переменные и свойства ключевыми словами JS
  • -
  • Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта `window/global`.
  • +
  • Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window/global.
  • Запрещено объявлять переменные без значения.
  • -
  • Запрещено напрямую обращаться к значению `undefined`. Для проверки типа рекомендуется использовать `typeof`. Для прямого сравнения с `undefined` можно использовать конструкцию `void 0`
  • +
  • Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Для прямого сравнения с undefined можно использовать конструкцию void 0.
  • С заглавной буквы называются только функции-конструкторы.
  • @@ -217,7 +217,7 @@

    Предотвращение ошибок

  • В коде нет пустых блоков кода
  • -
  • Код работает в строгом режиме: в начале всех файлов явно прописана директива `use strict`.
  • +
  • Код работает в строгом режиме: в начале всех файлов явно прописана директива use strict.
  • @@ -235,7 +235,7 @@

    Условные операторы

  • В условтях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок.
  • -
  • Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать `isNaN`.
  • +
  • Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать isNaN.
  • Запрещено использовать case без break или return в блоках switch.
  • @@ -248,7 +248,7 @@

    Условные операторы

    Функции

      -
    • Если в функции используется ветвление, в котором есть возврат значения (`return`), `return` должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение.
      - var do = function() {
      +              
    • Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение.
      - var do = function() {
       -   if (cond) {
       -     return 1;
       -   } else {
      @@ -295,7 +295,7 @@ 

      Объявление переменных и функций

    • Запрещено переопределять с помощью ключевого слова ранее созданные переменные
    • -
    • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный `var`, `let` или `const`. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных.
      - var a = 1, b = 2;
      +              
    • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных.
      - var a = 1, b = 2;
       -
       + var a = 1;
       + var b = 2;
      @@ -311,26 +311,26 @@ 
      Объявление функций
    • Запрещено объявление значений внутри блоков
    • -
    • Новые функции не создаются с помощью конструктора `Function`
    • +
    • Новые функции не создаются с помощью конструктора Function
    • -
    • Вместо коллекции `arguments`, используется rest-оператор
    • +
    • Вместо коллекции arguments, используется rest-оператор
    • -
    • Вместо вызова функции через `apply` используется spread-оператор
    • +
    • Вместо вызова функции через apply используется spread-оператор
    Создание значений
      -
    • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости `Math(), JSON(), Reflect()`.
    • +
    • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect().
    • При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)
    • При создании непустых объектов и массивов не используются «висячие» запятые
    • -
    • Не используются конструкторы примитивов, которые используются для автобоксинга `String`, `Number`, `Boolean`
    • +
    • Не используются конструкторы примитивов, которые используются для автобоксинга String, Number, Boolean
    • Конструкторы вызываются со скобками, даже если у них нет параметров.
    • -
    • Символы (`Symbol`) создаются вызовом функции `Symbol` без ключевого слова `new`.
    • +
    • Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new.
    @@ -339,17 +339,17 @@
    Создание значений

    Хорошие практики

      -
    • Не используется конструкция `with`.
    • +
    • Не используется конструкция with.
    • -
    • Не используются `alert`.
    • +
    • Не используются alert.
    • -
    • Не используется выполнение кода через `eval`.
    • +
    • Не используется выполнение кода через eval.
    • -
    • Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например `setTimeout`.
    • +
    • Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout.
    • Не используется протокол javascript.
    • -
    • Конструкторы не используются без ключевого слова `new`.
    • +
    • Конструкторы не используются без ключевого слова new.
    Манкипатчинг
    @@ -357,19 +357,19 @@
    Манкипатчинг
    • Встроенные в язык объекты и прототипы не расширяются в рантайме
    • -
    • Не переопределяются глобальные значения (undefined, null, Object, window и прочие)
    • +
    • Не переопределяются глобальные значения (undefined, null, Object, window и прочие)
    Контекст
    • bind не используется вне методов классов
    • -
    • в функциях, которые не являются методами никакого объекта или класса не используется `this`
    • +
    • в функциях, которые не являются методами никакого объекта или класса не используется this
    Переменные
      -
    • Переменные, объявленные через `var` не удаляются оператором `delete`
    • +
    • Переменные, объявленные через var не удаляются оператором delete
    @@ -378,11 +378,11 @@
    Переменные

    Приведение типов

      -
    • Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях `if`, `while`, `for`, в первом операнде тернарного оператора
    • +
    • Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора
    • -
    • Оператор `typeof` используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения `typeof`
    • +
    • Оператор typeof используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения typeof
    • -
    • В `parseInt` обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления
    • +
    • В parseInt обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления
    Константы в условиях
    @@ -454,13 +454,13 @@

    Неиспользуемый код

    Обработка ошибок и исключения

    • - Для выбрасывания исключения в оператор `throw` передаются только объекты Error. Передавать литералы запрещено.
      - throw 'Passed value is out of range';
      +                Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.
      - throw 'Passed value is out of range';
       + throw new RangeError('Rassed value is out of range');
    try..catch с пустым try
      -
    • В конструкции `try..catch` запрещен пустой блок `try`
    • +
    • В конструкции try..catch запрещен пустой блок try
    @@ -477,7 +477,7 @@

    Документирование

    • необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
    • -
    • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия `return` используется без возвращаемого значения для выхода из функции
    • +
    • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции
    • для описания возвращаемого значения из функции используется тег @return, а не @returns
    @@ -492,14 +492,14 @@

    Прочее

      -
    • При итерировании по объектам через `for..in` при работе со свойствами используется конструкция `hasOwnProperty`
    • +
    • При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty
    • -
    • В функциях не используются обращения к `caller` и `callee`
    • +
    • В функциях не используются обращения к caller и callee
    • -
    • В объектах напрямую не переопределяется свойство `__iterator__`
    • +
    • В объектах напрямую не переопределяется свойство __iterator__
    • - В объектах напрямую не переопределяется свойство `__proto__`. Разрешено переопределять `__proto__` через `Object.create` или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать `__proto__` нельзя
      - var obj = {
      +                В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя
      - var obj = {
       -   __proto__: Parent
       - };
       +
      @@ -509,12 +509,12 @@ 

      Прочее

      + + var obj = Object.create(Parent.prototype);
    • -
    • В коде не используются лейблы. Лейблы используются с конструкциями `break` и `continue` для направленного выхода из цикла и могут привести к слишком сложному для понимания коду
    • +
    • В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду
    • -
    • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора `switch` и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
    • +
    • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора switch и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
    • - В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова `let`, `const`, `var`, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора `for`
      - const result = (1, 2); // 2
      +                В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for
      - const result = (1, 2); // 2
       + const result = 2;
       
       - switch (val = getVal(), val) {}
      @@ -532,7 +532,7 @@ 

      Регулярные выражения

      • В регулярных выражениях не используются «управляющие выражения»
      • -
      • В регулярных выражениях не используются пустые классы символов `[]` (блоки, ограниченные квадратными скобками)
      • +
      • В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)
      • В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение
      • @@ -552,7 +552,7 @@

        node.js

          -
        • В node.js файлах не используется конструкция `process.exit`.
        • +
        • В node.js файлах не используется конструкция process.exit.
        From d1d6a322823c924224fcd5f3d687ec2b73e5fd66 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Fri, 7 Jul 2017 19:22:51 +0300 Subject: [PATCH 028/103] =?UTF-8?q?=D0=A1=D1=82=D0=B8=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D1=83=D0=B5=D1=82=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 9 ++- html-css.html | 36 ++++----- javascript.html | 197 ++++++++++++++++++++++++++++-------------------- 3 files changed, 142 insertions(+), 100 deletions(-) diff --git a/css/style.css b/css/style.css index 451a739..ec5732f 100644 --- a/css/style.css +++ b/css/style.css @@ -23,7 +23,7 @@ a:hover { h1, h2, -h4 { +h3 { margin: 0; font-weight: normal; @@ -32,6 +32,7 @@ h4 { } h2, +h3, h4 { line-height: 1.2; } @@ -45,7 +46,7 @@ h2 { font-size: 2.5rem; } -h4 { +h3 { font-size: 1.75rem; } @@ -279,6 +280,10 @@ footer { padding: 3rem; } + .chapter-part-col--full-width { + width: 100%; + } + .chapter-part-col + .chapter-part-col { border-top: 0; } diff --git a/html-css.html b/html-css.html index 8c3cd2a..a1a3684 100644 --- a/html-css.html +++ b/html-css.html @@ -33,7 +33,7 @@

        Стиль кода Академии HTML

        Оглавление

        -

        HTML

        +

        HTML

        -

        CSS

        +

        CSS

        • Синтаксис
        • Порядок свойств
        • @@ -66,7 +66,7 @@

          HTML

          -

          Синтаксис

          +

          Синтаксис

          • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
          • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
          • @@ -99,7 +99,7 @@

            Синтаксис

            -

            Валидность

            +

            Валидность

            Документ должен проходить проверку на валидность. Для проверки используется современный валидатор.

            @@ -108,7 +108,7 @@

            Валидность

            -

            HTML-доктайп

            +

            HTML-доктайп

            В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах.

            @@ -126,7 +126,7 @@

            HTML-доктайп

            -

            Кодировка символов

            +

            Кодировка символов

            Кодировка символов на странице всегда должна быть явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна.

            @@ -143,7 +143,7 @@

            Кодировка символов

            -

            Подключение стилей

            +

            Подключение стилей

            Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию.

            @@ -173,7 +173,7 @@

            Подключение стилей

            -

            Подключение скриптов

            +

            Подключение скриптов

            Скрипты должны подключаться в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого.

            @@ -207,7 +207,7 @@

            Подключение скриптов

            -

            Порядок атрибутов

            +

            Порядок атрибутов

            Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам.

            @@ -228,7 +228,7 @@

            Порядок атрибутов

            -

            Логические атрибуты

            +

            Логические атрибуты

            Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе.

            @@ -249,7 +249,7 @@

            Логические атрибуты

            -

            Подписи полей ввода

            +

            Подписи полей ввода

            Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>.

            @@ -273,7 +273,7 @@

            Подписи полей ввода

            -

            Размеры картинок

            +

            Размеры картинок

            Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях. В случае пикселей размерность не нужна.

            @@ -303,7 +303,7 @@

            Размеры картинок

            -

            Атрибут языка

            +

            Атрибут языка

            Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила.

            @@ -325,7 +325,7 @@

            CSS

            -

            Синтаксис

            +

            Синтаксис

            • После значения свойства обязательно ставится точка с запятой.
            • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
            • @@ -372,7 +372,7 @@

              Синтаксис

              -

              Порядок свойств

              +

              Порядок свойств

              Объявления логически связанных свойств группируются в следующем порядке:

              @@ -443,7 +443,7 @@

              Порядок свойств

              -

              Имена классов

              +

              Имена классов

              • Имена классов пишутся строчными буквами, используется дефис (но не знаки нижнего подчёркивания или camelCase). Дефисы служат разделителями во взаимосвязанных классах (например, .button и .button-danger).
              • Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс: избегайте сокращений (единственное исключение — .btn для кнопок), но не делайте их слишком длинными (более трёх слов).
              • @@ -469,7 +469,7 @@

                Имена классов

                -

                Правило @import

                +

                Правило @import

                Правило @import работает медленнее, чем тег <link>. В стилях @import не должен использоваться.

                @@ -489,7 +489,7 @@

                Правило @import

                -

                Варианты шрифта

                +

                Варианты шрифта

                Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family.

                diff --git a/javascript.html b/javascript.html index ad475e7..e8de26b 100644 --- a/javascript.html +++ b/javascript.html @@ -29,24 +29,23 @@

                Стиль кода Академии HTML

                - +
                -

                Синтаксис

                +

                Синтаксис

                -
                -

                Отступы, пробелы и переносы

                +
                +

                Отступы, пробелы и переносы

                  Для правильного форматирования используйте файл .editorconfig в вашем редакторе. @@ -58,15 +57,17 @@

                  Отступы, пробелы и переносы

                • Внутри строки не используется более одного пробела.
                • -
                • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует -
                  - if (condition)
                  +              
                • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует:
                  
                  +- if (condition)
                   - {
                   -   // code
                   - }
                   
                   + if (condition) {
                   +   // code
                  -+ }
                  ++ } + +
                • В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом
                • @@ -117,13 +118,16 @@

                  Отступы, пробелы и переносы

                -
                -

                Строки

                +
                +

                Строки

                • В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы.
                • -
                • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления
                  - var foo = "Copyright \251";
                  -+ var foo = "Copyright \u00A9";
                • +
                • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления
                  
                  +- var foo = "Copyright \251";
                  ++ var foo = "Copyright \u00A9";
                  +
                  +
                • При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними.
                • @@ -133,8 +137,8 @@

                  Строки

                -
                -

                Числа

                +
                +

                Числа

                • В числах запрещено опускать ноль в дробной и целой части.
                • @@ -144,28 +148,28 @@

                  Числа

                -
                -

                Литералы

                +
                +

                Литералы

                • Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины.
                • Объекты должны создаваться через литерал объекта, а не через конструктор.
                • -
                  Объекты
                  +

                  Объекты

                • При создании объектов запрещено дублирование ключей.
                • При описании функций запрещено дублировать названия параметров.
                • В операторе switch запрещено дублировать условия (case)
                • -
                  Массивы
                  +

                  Массивы

                -
                -

                Операторы

                +
                +

                Операторы

                • В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами.
                • @@ -180,7 +184,7 @@

                  Операторы

                  Именование

                  -
                  +
                  • Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов
                  • @@ -207,7 +211,7 @@

                    Именование

                    Предотвращение ошибок

                    -
                    +
                    • Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI.
                    • @@ -223,11 +227,14 @@

                      Предотвращение ошибок

                    -
                    -

                    Условные операторы

                    +
                    +

                    Условные операторы

                      -
                    • Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.
                      - if (1 === myValue) {}
                      -+ if (myValue === 1) {}
                    • +
                    • Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.
                      
                      +- if (1 === myValue) {}
                      ++ if (myValue === 1) {}
                      +
                      +
                    • При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения
                    • @@ -245,10 +252,11 @@

                      Условные операторы

                    -
                    -

                    Функции

                    +
                    +

                    Функции

                      -
                    • Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение.
                      - var do = function() {
                      +              
                    • Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение.
                      
                      +- var do = function() {
                       -   if (cond) {
                       -     return 1;
                       -   } else {
                      @@ -267,7 +275,9 @@ 

                      Функции

                      + } else { + return 2; + } -+ }
                    • ++ } + +
                    • В return не используется оператор присваивания.
                    • @@ -277,8 +287,8 @@

                      Функции

                    -
                    -

                    Операторы

                    +
                    +

                    Операторы

                    • В конструкторе классов-наследников обязательно вызывается super()
                    • @@ -288,25 +298,29 @@

                      Операторы

                    -
                    -

                    Объявление переменных и функций

                    +
                    +

                    Объявление переменных и функций

                    • При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода.
                    • Запрещено переопределять с помощью ключевого слова ранее созданные переменные
                    • -
                    • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных.
                      - var a = 1, b = 2;
                      +              
                    • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных.
                      
                      +- var a = 1, b = 2;
                       -
                       + var a = 1;
                       + var b = 2;
                      -            
                    • + +
                    -
                    Объявление функций
                    +

                    Объявление функций

                      'no-func-assign': 'error', -
                    • Запрещено переопределение функций, созданных с помощью функционального объявления (function expression)
                      - function myFunc() {};
                      +              
                    • Запрещено переопределение функций, созданных с помощью функционального объявления (function expression)
                      
                      +- function myFunc() {};
                       - myFunc = 2;
                      +
                       
                    • Запрещено объявление значений внутри блоков
                    • @@ -318,7 +332,7 @@
                      Объявление функций
                    • Вместо вызова функции через apply используется spread-оператор
                    -
                    Создание значений
                    +

                    Создание значений

                    • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect().
                    • @@ -336,8 +350,8 @@
                      Создание значений
                    -
                    -

                    Хорошие практики

                    +
                    +

                    Хорошие практики

                    • Не используется конструкция with.
                    • @@ -352,7 +366,7 @@

                      Хорошие практики

                    • Конструкторы не используются без ключевого слова new.
                    -
                    Манкипатчинг
                    +

                    Манкипатчинг

                    • Встроенные в язык объекты и прототипы не расширяются в рантайме
                    • @@ -360,14 +374,14 @@
                      Манкипатчинг
                    • Не переопределяются глобальные значения (undefined, null, Object, window и прочие)
                    -
                    Контекст
                    +

                    Контекст

                    • bind не используется вне методов классов
                    • в функциях, которые не являются методами никакого объекта или класса не используется this
                    -
                    Переменные
                    +

                    Переменные

                    • Переменные, объявленные через var не удаляются оператором delete
                    @@ -375,8 +389,8 @@
                    Переменные
                    -
                    -

                    Приведение типов

                    +
                    +

                    Приведение типов

                    • Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора
                    • @@ -385,14 +399,19 @@

                      Приведение типов

                    • В parseInt обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления
                    -
                    Константы в условиях
                    +

                    Константы в условиях

                      -
                    • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда
                      - if (true) {}
                      -+ if (a > 1) {}
                      +
                    • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда
                      
                      +- if (true) {}
                      ++ if (a > 1) {}
                      +
                      +
                      -
                      - var ternaryValue = true ? 'a' : 'b';
                      +              
                      
                      +- var ternaryValue = true ? 'a' : 'b';
                       + var ternaryValue = isA() ? 'a' : 'b';
                      +
                                     
                    @@ -404,8 +423,8 @@
                    Константы в условиях

                    Чистый код

                    -
                    -

                    Лишние символы (пробелы, точки с запятой и прочее)

                    +
                    +

                    Лишние символы (пробелы, точки с запятой и прочее)

                    • Не используются лишние (множественные) точки с запятой
                    @@ -413,8 +432,8 @@

                    Лишние символы (пробелы, точки с запят

                    -
                    -

                    Отладчик и консоль

                    +
                    +

                    Отладчик и консоль

                    • В коде не используется оставленных выводов в консоль
                    • @@ -424,41 +443,50 @@

                      Отладчик и консоль

                    -
                    -

                    Неиспользуемый код

                    +
                    +

                    Неиспользуемый код

                    • - В проекте нет недоступного кода, который никогда не выполнится
                      - if (false) {
                      +                В проекте нет недоступного кода, который никогда не выполнится
                      
                      +- if (false) {
                       -   doSomething();
                       - }
                       +
                       + if (needToDoSomething()) {
                       +   doSomething();
                      -+ }
                      ++ } + +
                    • В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций.
                    • - В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций
                      - check === true && doSomething();
                      +                В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций 
                      
                      +- check === true && doSomething();
                       -
                       + if (check) {
                       +   doSomething();
                      -+ }
                    • ++ } + +
    -
    -

    Обработка ошибок и исключения

    +
    +

    Обработка ошибок и исключения

    • - Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.
      - throw 'Passed value is out of range';
      -+ throw new RangeError('Rassed value is out of range');
    • + Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.
      
      +- throw 'Passed value is out of range';
      ++ throw new RangeError('Rassed value is out of range');
      +
      +
    -
    try..catch с пустым try
    +

    try..catch с пустым try

    • В конструкции try..catch запрещен пустой блок try
    @@ -471,7 +499,7 @@
    try..catch с пустым try

    Документирование

    -
    +
    При написании jsDoc используются следующие ограничения:
      @@ -490,7 +518,7 @@

      Документирование

      Прочее

      -
      +
      • При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty
      • @@ -499,7 +527,8 @@

        Прочее

      • В объектах напрямую не переопределяется свойство __iterator__
      • - В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя
        - var obj = {
        +                В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя
        
        +- var obj = {
         -   __proto__: Parent
         - };
         +
        @@ -507,28 +536,33 @@ 

        Прочее

        + Obj.prototype = new Parent(); + var obj = new obj; + -+ var obj = Object.create(Parent.prototype);
      • ++ var obj = Object.create(Parent.prototype); -
      • В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду
      • +
        + +
      • В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из икла и могут привести к слишком сложному для понимания коду
      • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора switch и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
      • - В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for
        - const result = (1, 2); // 2
        +                В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for
        
        +- const result = (1, 2); // 2
         + const result = 2;
         
         - switch (val = getVal(), val) {}
         + val = getVal();
         + switch(val) {}
         
        -+ for (var i = 0, l = 100; i < l; i++);
      • ++ for (var i = 0, l = 100; i < l; i++); + +
      -
      -

      Регулярные выражения

      +
      +

      Регулярные выражения

      • В регулярных выражениях не используются «управляющие выражения»
      • @@ -538,8 +572,11 @@

        Регулярные выражения

      • В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} -
        - /   /.exec(myString);
        -+ /\s{3}/.exec(myString);
      • +
        
        +- /   /.exec(myString);
        ++ /\s{3}/.exec(myString);
        +
        +
      @@ -550,7 +587,7 @@

      Регулярные выражения

      node.js

      -
      +
      • В node.js файлах не используется конструкция process.exit.
      From 14cebde5bb62d04ccaa285fb5cdbb6ebc771ffcd Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Tue, 18 Jul 2017 13:17:48 +0300 Subject: [PATCH 029/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BB=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0:=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=B8=20=D0=BD=D0=B5=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 18 ++++ javascript.html | 247 ++++++++++++++++++++++++------------------------ 2 files changed, 140 insertions(+), 125 deletions(-) diff --git a/css/style.css b/css/style.css index ec5732f..81e0f90 100644 --- a/css/style.css +++ b/css/style.css @@ -320,3 +320,21 @@ pre[class*="language-"] { pre[class*="language-"] { background: initial; } + +pre.language-correct, +pre.language-incorrect { + padding: 5px 10px; +} + +pre.language-correct { + background: #deeede; +} + +pre.language-incorrect { + background: #f4d3d3; +} + +pre.language-correct .token.operator, +pre.language-incorrect .token.operator { + background: none; +} diff --git a/javascript.html b/javascript.html index e8de26b..eedf5e2 100644 --- a/javascript.html +++ b/javascript.html @@ -29,26 +29,16 @@

      Стиль кода Академии HTML

      -
      -

      Оглавление

      - -
      -

      Синтаксис

      Отступы, пробелы и переносы

      -
        - Для правильного форматирования используйте файл .editorconfig в вашем редакторе. +

        Для правильного форматирования используйте файл .editorconfig в вашем редакторе.

        + +
        • Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела.
        • Запрещено одновременное использование табов и пробелов для отступов.
        • @@ -57,18 +47,18 @@

          Отступы, пробелы и переносы

        • Внутри строки не используется более одного пробела.
        • -
        • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует:
          
          -- if (condition)
          -- {
          --   // code
          -- }
          -
          -+ if (condition) {
          -+   // code
          -+ }
          +              
        • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует: +
          if (condition)
          +{
          +  // code
          +}
          +
          +
          if (condition) {
          +  // code
          +}
           
          -
        • +
        • В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом
        • @@ -123,11 +113,13 @@

          Строки

          • В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы.
          • -
          • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления
            
            -- var foo = "Copyright \251";
            -+ var foo = "Copyright \u00A9";
            +              
          • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления +
            var foo = "Copyright \251";
            +
            -
          • +
            var foo = "Copyright \u00A9";
            +
            +
          • При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними.
          • @@ -155,14 +147,11 @@

            Литералы

          • Объекты должны создаваться через литерал объекта, а не через конструктор.
          • -

            Объекты

          • При создании объектов запрещено дублирование ключей.
          • При описании функций запрещено дублировать названия параметров.
          • В операторе switch запрещено дублировать условия (case)
          • - -

            Массивы

      @@ -173,7 +162,7 @@

      Операторы

      • В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами.
      • -
      • Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof.
      • +
      • Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof.
      @@ -188,7 +177,7 @@

      Именование

      • Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов
      • -
      • Все переменные должны быть названы в верблюжьем регистре. Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре.
      • +
      • Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре (UPPER_SNAKE_CASE).
      • Запрещено использовать имена переменных, которые используются во внешних областях видимости.
      • @@ -230,10 +219,11 @@

        Предотвращение ошибок

        Условные операторы

          -
        • Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.
          
          -- if (1 === myValue) {}
          -+ if (myValue === 1) {}
          +              
        • Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. +
          if (1 === myValue) {}
          +
          +
          if (myValue === 1) {}
           
        • При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения
        • @@ -255,29 +245,30 @@

          Условные операторы

          Функции

            -
          • Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение.
            
            -- var do = function() {
            --   if (cond) {
            --     return 1;
            --   } else {
            --     // Проблема заключается в том, что
            --     // в первой ветке условия возвращается
            --     // единица, а в альтернативной нет никакого
            --     // возврата и при вызове функции неизвестно
            --     // будет ли из нее возвращего какое-то значение.
            --     doSomethingElse();
            --   }
            -- }
            -+
            -+ var do = function() {
            -+   if (cond) {
            -+     return 1;
            -+   } else {
            -+     return 2;
            -+   }
            -+ }
            +              
          • Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. +
            var do = function() {
            +  if (cond) {
            +    return 1;
            +  } else {
            +    // Проблема заключается в том, что
            +    // в первой ветке условия возвращается
            +    // единица, а в альтернативной нет никакого
            +    // возврата и при вызове функции неизвестно
            +    // будет ли из нее возвращего какое-то значение.
            +    doSomethingElse();
            +  }
            +}
            +
            -
          • +
            var do = function() {
            +  if (cond) {
            +    return 1;
            +  } else {
            +    return 2;
            +  }
            +}
            +
            +
          • В return не используется оператор присваивания.
          • @@ -305,22 +296,21 @@

            Объявление переменных и функций

          • Запрещено переопределять с помощью ключевого слова ранее созданные переменные
          • -
          • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных.
            
            -- var a = 1, b = 2;
            --
            -+ var a = 1;
            -+ var b = 2;
            +              
          • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных. +
            var a = 1, b = 2;
            +
            -
          • +
            var a = 1;
            +var b = 2;
            +
            +

          Объявление функций

            - 'no-func-assign': 'error', -
          • Запрещено переопределение функций, созданных с помощью функционального объявления (function expression)
            
            -- function myFunc() {};
            -- myFunc = 2;
            -
            +              
          • Запрещено переопределение функций, созданных с помощью функционального объявления (function expression) +
            function myFunc() {};
            +myFunc = 2;
             
          • Запрещено объявление значений внутри блоков
          • @@ -402,17 +392,19 @@

            Приведение типов

            Константы в условиях

              -
            • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда
              
              -- if (true) {}
              -+ if (a > 1) {}
              +              
            • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда +
              if (true) {}
              +
              +
              if (a > 1) {}
               
              -
              
              -- var ternaryValue = true ? 'a' : 'b';
              -+ var ternaryValue = isA() ? 'a' : 'b';
              +
              var ternaryValue = true ? 'a' : 'b';
              +
              -
            • +
              var ternaryValue = isA() ? 'a' : 'b';
              +
              +
    @@ -447,29 +439,30 @@

    Отладчик и консоль

    Неиспользуемый код

    • - В проекте нет недоступного кода, который никогда не выполнится
      
      -- if (false) {
      --   doSomething();
      -- }
      -+
      -+ if (needToDoSomething()) {
      -+   doSomething();
      -+ }
      +                В проекте нет недоступного кода, который никогда не выполнится
      +
      if (false) {
      +  doSomething();
      +}
      +
      +
      if (needToDoSomething()) {
      +  doSomething();
      +}
       
    • В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций.
    • - В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций
      
      -- check === true && doSomething();
      --
      -+ if (check) {
      -+   doSomething();
      -+ }
      +                В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций
      +
      check === true && doSomething();
      +
      -
    • +
      if (check) {
      +  doSomething();
      +}
      +
      +
    @@ -479,14 +472,14 @@

    Неиспользуемый код

    Обработка ошибок и исключения

    • - Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.
      
      -- throw 'Passed value is out of range';
      -+ throw new RangeError('Rassed value is out of range');
      +                Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.
      +
      throw 'Passed value is out of range';
      +
      +
      throw new RangeError('Rassed value is out of range');
       
    -

    try..catch с пустым try

    • В конструкции try..catch запрещен пустой блок try
    @@ -503,11 +496,11 @@

    Документирование

    При написании jsDoc используются следующие ограничения:
      -
    • необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
    • +
    • необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
    • -
    • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции
    • +
    • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции
    • -
    • для описания возвращаемого значения из функции используется тег @return, а не @returns
    • +
    • для описания возвращаемого значения из функции используется тег @return, а не @returns
    @@ -527,35 +520,41 @@

    Прочее

  • В объектах напрямую не переопределяется свойство __iterator__
  • - В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя
    
    -- var obj = {
    --   __proto__: Parent
    -- };
    -+
    -+ var Obj = function() {};
    -+ Obj.prototype = new Parent();
    -+ var obj = new obj;
    -+
    -+ var obj = Object.create(Parent.prototype);
    +                В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя
    +
    var obj = {
    +  __proto__: Parent
    +};
    +
    -
  • +
    var Obj = function() {};
    +Obj.prototype = new Parent();
    +var obj = new obj;
    +
    +var obj = Object.create(Parent.prototype);
    +
    +
  • В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из икла и могут привести к слишком сложному для понимания коду
  • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора switch и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
  • - В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for
    
    -- const result = (1, 2); // 2
    -+ const result = 2;
    +                В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for
    +
    const result = (1, 2); // 2
    +
    -- switch (val = getVal(), val) {} -+ val = getVal(); -+ switch(val) {} +
    const result = 2;
    +
    +
    +
    switch (val = getVal(), val) {}
    +
    -+ for (var i = 0, l = 100; i < l; i++); +
    val = getVal();
    +switch(val) {}
     
    -
  • +for (var i = 0, l = 100; i < l; i++); + + @@ -572,22 +571,20 @@

    Регулярные выражения

  • В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} -
    
    -- /   /.exec(myString);
    -+ /\s{3}/.exec(myString);
    +
    /   /.exec(myString);
    +
    -
  • +
    /\s{3}/.exec(myString);
    +
    + - - -
    -

    node.js

    -
    +

    node.js

    +
    • В node.js файлах не используется конструкция process.exit.
    From ea43097679bd6bf15812174a0234da38e2c79c9b Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Tue, 18 Jul 2017 17:00:01 +0300 Subject: [PATCH 030/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20MD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- md/rules.md | 376 ---------------------------------------------------- 1 file changed, 376 deletions(-) delete mode 100644 md/rules.md diff --git a/md/rules.md b/md/rules.md deleted file mode 100644 index 747930a..0000000 --- a/md/rules.md +++ /dev/null @@ -1,376 +0,0 @@ -# Синтаксис и лексика -## Отступы, пробелы и переносы -Для правильного форматирования используйте файл .editorconfig в вашем редакторе. - -- Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела. - -- Запрещено одновременное использование табов и пробелов для отступов. - -- Выражения должны заканчиваться точками с запятой. - -- Внутри строки не используется более одного пробела. - -- Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует -```js -- if (condition) -- { -- // code -- } - -+ if (condition) { -+ // code -+ } -``` - -- В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом - -- В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива - -- После запятой всегда должен ставиться пробел, если запятая не в конце строки - -- Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции. - -- Файл должен заканчиваться пустой строкой - -- Строка не должна заканчиваться пробелами - -- В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон - -- В коде не используются совместно табы и пробелы - -- Блоки кода отделяются друг от друга не более чем двумя пустыми строками - -- В качестве символа строки используется стандартный символ, который используется в системе - -- При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы - -- Оператор вызова функции () не отделяется круглыми скобками от названия функции - -- В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено - -- Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д. - -- В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода) - -- После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся. - -- Перед скобками начинающими новый блок кода должен ставиться пробел. - -- при объявлении анонимных функций, скобки с параметрами ставятся непосредственно после ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет. - -- В комментариях текст отбивается пробелом от начала комментария. - -- При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов - -- В spread-операторе точки не отделяются от названия коллекции - -- Звездочка после ключевого слова yield не отбивается пробелом. После звездочки проблел ставится всегда. - -## Строки -- В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы. - -- В строках запрещено указывать код спецсимволов в восьмеричной системе счисления -```diff -- var foo = "Copyright \251"; -+ var foo = "Copyright \u00A9"; -``` - -- При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними. - -- В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам. - -## Числа -- В числах запрещено опускать ноль в дробной и целой части. - -- Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления. - -## Литералы -- Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины. - -- Объекты должны создаваться через литерал объекта, а не через конструктор. - -### Объекты -- При создании объектов запрещено дублирование ключей. - -- При описании функций запрещено дублировать названия параметров. - -- В операторе `switch` запрещено дублировать условия (case) - -### Массивы - -## Операторы -- В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами. - -- Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof. - -# Именование -- Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов - -- Все переменные должны быть названы в верблюжьем регистре. Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре. - -- Запрещено использовать имена переменных, которые используются во внешних областях видимости. - -- Запрещено называть переменные и свойства ключевыми словами JS - -- Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта `window/global`. - -- Запрещено объявлять переменные без значения. - -- Запрещено напрямую обращаться к значению `undefined`. Для проверки типа рекомендуется использовать `typeof`. Для прямого сравнения с `undefined` можно использовать конструкцию `void 0` - -- С заглавной буквы называются только функции-конструкторы. - - -# Предотвращение ошибок -- Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI. - -- Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит. - -- Обязательно используются блоки кода даже если в выражении содержится одна строчка - -- В коде нет пустых блоков кода - -- Код работает в строгом режиме: в начале всех файлов явно прописана директива `use strict`. - -## Условные операторы -- Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. -```diff -- if (1 === myValue) {} -+ if (myValue === 1) {} -``` - -- При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения - -- В условных операторах не используется оператор присвоения - -- В условтях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок. - -- Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать `isNaN`. - -- Запрещено использовать case без break или return в блоках switch. - -- Не используются вложенные тернарные операторы. - - -## Функции -- Если в функции используется ветвление, в котором есть возврат значения (`return`), `return` должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. - -```diff -- var do = function() { -- if (cond) { -- return 1; -- } else { -- // Проблема заключается в том, что -- // в первой ветке условия возвращается -- // единица, а в альтернативной нет никакого -- // возврата и при вызове функции неизвестно -- // будет ли из нее возвращего какое-то значение. -- doSomethingElse(); -- } -- } -+ -+ var do = function() { -+ if (cond) { -+ return 1; -+ } else { -+ return 2; -+ } -+ } -``` - -- В return не используется оператор присваивания. - -- В стрелочных функциях всегда используются скобки для параметров, даже если параметр один - -## Классы -- В конструкторе классов-наследников обязательно вызывается super() - -- В конструкторе нет обращения к this до того, как будет вызван super() - - -## Объявление переменных и функций -- При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода. - -- Запрещено переопределять с помощью ключевого слова ранее созданные переменные - -- Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный `var`, `let` или `const`. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных. -```diff -- var a = 1, b = 2; -- -+ var a = 1; -+ var b = 2; -``` - -### Объявление функций -'no-func-assign': 'error', -- Запрещено переопределение функций, созданных с помощью функционального объявления (function expression) -```diff -- function myFunc() {}; -- myFunc = 2; -``` - -- Запрещено объявление значений внутри блоков - -- Новые функции не создаются с помощью конструктора `Function` - -- Вместо коллекции `arguments`, используется rest-оператор - -- Вместо вызова функции через `apply` используется spread-оператор - -### Создание значений -- Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости `Math(), JSON(), Reflect()`. - -- При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых) - -- При создании непустых объектов и массивов не используются «висячие» запятые - -- Не используются конструкторы примитивов, которые используются для автобоксинга `String`, `Number`, `Boolean` - -- Конструкторы вызываются со скобками, даже если у них нет параметров. - -- Символы (`Symbol`) создаются вызовом функции `Symbol` без ключевого слова `new`. - -## Хорошие практики -- Не используется конструкция `with`. - -- Не используются `alert`. - -- Не используется выполнение кода через `eval`. - -- Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например `setTimeout`. - -- Не используется протокол javascript. - -- Конструкторы не используются без ключевого слова `new`. - -### Манкипатчинг -- Встроенные в язык объекты и прототипы не расширяются в рантайме - -- Не переопределяются глобальные значения (undefined, null, Object, window и прочие) - -### Контекст -- bind не используется вне методов классов - -- в функциях, которые не являются методами никакого объекта или класса не используется `this` - -### Переменные -- Переменные, объявленные через `var` не удаляются оператором `delete` - -## Приведение типов -- Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях `if`, `while`, `for`, в первом операнде тернарного оператора - -- Оператор `typeof` используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения `typeof` - -- В `parseInt` обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления - -### Константы в условиях -- В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда -```diff -- if (true) {} -+ if (a > 1) {} -``` - -```diff -- var ternaryValue = true ? 'a' : 'b'; -+ var ternaryValue = isA() ? 'a' : 'b'; -``` - -# Чистый код -## Лишние символы (пробелы, точки с запятой и прочее) -- Не используются лишние (множественные) точки с запятой - -## Отладчик и консоль -- В коде не используется оставленных выводов в консоль - -- В коде нет забытых инструкций debugger - -## Неиспользуемый код -- В проекте нет недоступного кода, который никогда не выполнится -```diff -- if (false) { -- doSomething(); -- } -+ -+ if (needToDoSomething()) { -+ doSomething(); -+ } -``` - -- В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций. - -- В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций -```diff -- check === true && doSomething(); -- -+ if (check) { -+ doSomething(); -+ } -``` - -## Обработка ошибок и исключения -- Для выбрасывания исключения в оператор `throw` передаются только объекты Error. Передавать литералы запрещено. -```diff -- throw 'Passed value is out of range'; -+ throw new RangeError('Rassed value is out of range'); -``` - -### try..catch с пустым try -- В конструкции `try..catch` запрещен пустой блок `try` - -# Документирование -При написании jsDoc используются следующие ограничения: -- необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param -- описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия `return` используется без возвращаемого значения для выхода из функции -- для описания возвращаемого значения из функции используется тег @return, а не @returns - -# Прочее -- При итерировании по объектам через `for..in` при работе со свойствами используется конструкция `hasOwnProperty` - -- В функциях не используются обращения к `caller` и `callee` - -- В объектах напрямую не переопределяется свойство `__iterator__` - -- В объектах напрямую не переопределяется свойство `__proto__`. Разрешено переопределять `__proto__` через `Object.create` или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать `__proto__` нельзя -```diff -- var obj = { -- __proto__: Parent -- }; -+ -+ var Obj = function() {}; -+ Obj.prototype = new Parent(); -+ var obj = new obj; -+ -+ var obj = Object.create(Parent.prototype); -``` - -- В коде не используются лейблы. Лейблы используются с конструкциями `break` и `continue` для направленного выхода из цикла и могут привести к слишком сложному для понимания коду - -- Блоки, использующиеся в коде должны описывать тело функции, условия, оператора `switch` и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения. - -- В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова `let`, `const`, `var`, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора `for` -```diff -- const result = (1, 2); // 2 -+ const result = 2; - -- switch (val = getVal(), val) {} -+ val = getVal(); -+ switch(val) {} - -+ for (var i = 0, l = 100; i < l; i++); -``` - -## Регулярные выражения -- В регулярных выражениях не используются «управляющие выражения» - -- В регулярных выражениях не используются пустые классы символов `[]` (блоки, ограниченные квадратными скобками) - -- В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение - -- В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} -```diff -- / /.exec(myString); -+ /\s{3}/.exec(myString); -``` - -# node.js -- В node.js файлах не используется конструкция `process.exit`. From 098083d631611d561d721c64298a003a35b780d3 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Thu, 27 Jul 2017 19:11:21 +0300 Subject: [PATCH 031/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=B2=20JS=20=D0=BE=D1=81=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=BA=D0=BE=D0=B4-=D1=80=D0=B5=D0=B2=D1=8C?= =?UTF-8?q?=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 157 +++++++++++++++++++++++++----------------------- 1 file changed, 82 insertions(+), 75 deletions(-) diff --git a/javascript.html b/javascript.html index eedf5e2..ee11b0c 100644 --- a/javascript.html +++ b/javascript.html @@ -39,13 +39,13 @@

    Отступы, пробелы и переносы

    Для правильного форматирования используйте файл .editorconfig в вашем редакторе.

      -
    • Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела.
    • +
    • Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела
    • -
    • Запрещено одновременное использование табов и пробелов для отступов.
    • +
    • Запрещено одновременное использование табов и пробелов для отступов
    • -
    • Выражения должны заканчиваться точками с запятой.
    • +
    • Выражения должны заканчиваться точками с запятой
    • -
    • Внутри строки не используется более одного пробела.
    • +
    • Внутри строки не используется более одного пробела
    • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует:
      if (condition)
      @@ -66,7 +66,7 @@ 

      Отступы, пробелы и переносы

    • После запятой всегда должен ставиться пробел, если запятая не в конце строки
    • -
    • Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции.
    • +
    • Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции
    • Файл должен заканчиваться пустой строкой
    • @@ -78,7 +78,7 @@

      Отступы, пробелы и переносы

    • Блоки кода отделяются друг от друга не более чем двумя пустыми строками
    • -
    • В качестве символа строки используется стандартный символ, который используется в системе
    • +
    • В качестве символа переноса строки используется стандартный символ, который используется в системе
    • При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы
    • @@ -90,19 +90,19 @@

      Отступы, пробелы и переносы

    • В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)
    • -
    • После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся.
    • +
    • После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся
    • -
    • Перед скобками начинающими новый блок кода должен ставиться пробел.
    • +
    • Перед скобками начинающими новый блок кода должен ставиться пробел
    • -
    • при объявлении анонимных функций, скобки с параметрами ставятся непосредственно после ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет.
    • +
    • При объявлении анонимных функций, скобки с параметрами отделаются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет
    • -
    • В комментариях текст отбивается пробелом от начала комментария.
    • +
    • В комментариях текст отбивается пробелом от начала комментария
    • При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов
    • В spread-операторе точки не отделяются от названия коллекции
    • -
    • Звездочка после ключевого слова yield не отбивается пробелом. После звездочки проблел ставится всегда.
    • +
    • Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда
    @@ -111,7 +111,7 @@

    Отступы, пробелы и переносы

    Строки

      -
    • В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы.
    • +
    • В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы
    • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления
      var foo = "Copyright \251";
      @@ -121,9 +121,9 @@ 

      Строки

    • -
    • При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними.
    • +
    • При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними
    • -
    • В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам.
    • +
    • В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам
    @@ -132,9 +132,9 @@

    Строки

    Числа

      -
    • В числах запрещено опускать ноль в дробной и целой части.
    • +
    • В числах запрещено опускать ноль в дробной и целой части
    • -
    • Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления.
    • +
    • Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления
    @@ -143,13 +143,13 @@

    Числа

    Литералы

      -
    • Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины.
    • +
    • Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины
    • -
    • Объекты должны создаваться через литерал объекта, а не через конструктор.
    • +
    • Объекты должны создаваться через литерал объекта, а не через конструктор
    • -
    • При создании объектов запрещено дублирование ключей.
    • +
    • При создании объектов запрещено дублирование ключей
    • -
    • При описании функций запрещено дублировать названия параметров.
    • +
    • При описании функций запрещено дублировать названия параметров
    • В операторе switch запрещено дублировать условия (case)
    @@ -160,9 +160,9 @@

    Литералы

    Операторы

      -
    • В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами.
    • +
    • В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами
    • -
    • Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof.
    • +
    • Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof
    @@ -177,19 +177,19 @@

    Именование

    • Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов
    • -
    • Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре (UPPER_SNAKE_CASE).
    • +
    • Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре (UPPER_SNAKE_CASE)
    • -
    • Запрещено использовать имена переменных, которые используются во внешних областях видимости.
    • +
    • Запрещено использовать имена переменных, которые используются во внешних областях видимости
    • -
    • Запрещено называть переменные и свойства ключевыми словами JS
    • +
    • Запрещено называть переменные и свойства ключевыми словами JS
    • -
    • Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window/global.
    • +
    • Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window/global
    • -
    • Запрещено объявлять переменные без значения.
    • +
    • Запрещено объявлять переменные без значения
    • -
    • Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Для прямого сравнения с undefined можно использовать конструкцию void 0.
    • +
    • Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Для прямого сравнения с undefined можно использовать конструкцию void 0
    • -
    • С заглавной буквы называются только функции-конструкторы.
    • +
    • С заглавной буквы называются только функции-конструкторы
    @@ -202,15 +202,15 @@

    Предотвращение ошибок

      -
    • Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI.
    • +
    • Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI (Automatic Semicolon Insertion)
    • -
    • Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит.
    • +
    • Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит
    • Обязательно используются блоки кода даже если в выражении содержится одна строчка
    • В коде нет пустых блоков кода
    • -
    • Код работает в строгом режиме: в начале всех файлов явно прописана директива use strict.
    • +
    • Код работает в строгом режиме: в начале всех файлов явно прописана директива 'use strict'
    @@ -230,13 +230,13 @@

    Условные операторы

  • В условных операторах не используется оператор присвоения
  • -
  • В условтях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок.
  • +
  • В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок
  • -
  • Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать isNaN.
  • +
  • Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать Number.isNaN
  • -
  • Запрещено использовать case без break или return в блоках switch.
  • +
  • Запрещено использовать case без break или return в блоках switch
  • -
  • Не используются вложенные тернарные операторы.
  • +
  • Не используются вложенные тернарные операторы
  • @@ -245,19 +245,15 @@

    Условные операторы

    Функции

      -
    • Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках. Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. +
    • +

      Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках.

      var do = function() {
         if (cond) {
           return 1;
         } else {
      -    // Проблема заключается в том, что
      -    // в первой ветке условия возвращается
      -    // единица, а в альтернативной нет никакого
      -    // возврата и при вызове функции неизвестно
      -    // будет ли из нее возвращего какое-то значение.
           doSomethingElse();
         }
      -}
      +};
       
      var do = function() {
      @@ -266,11 +262,12 @@ 

      Функции

      } else { return 2; } -} +};
      +

      Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. В первом примере, функция do может вернуть значение 1, а может undefined

    • -
    • В return не используется оператор присваивания.
    • +
    • В return не используется оператор присваивания
    • В стрелочных функциях всегда используются скобки для параметров, даже если параметр один
    @@ -281,9 +278,9 @@

    Функции

    Операторы

      -
    • В конструкторе классов-наследников обязательно вызывается super()
    • +
    • В конструкторе классов-наследников обязательно вызывается super()
    • -
    • В конструкторе нет обращения к this до того, как будет вызван super()
    • +
    • В конструкторе нет обращения к this до того, как будет вызван super()
    @@ -292,11 +289,11 @@

    Операторы

    Объявление переменных и функций

      -
    • При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода.
    • +
    • При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода
    • Запрещено переопределять с помощью ключевого слова ранее созданные переменные
    • -
    • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. Это правило облегчает отладку, поскольку создание нескольких переменных через запятую трактуются движком как одна операция, что означает, что невозможно поставить отладчик на создание одной из переменных. +
    • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const.
      var a = 1, b = 2;
       
      @@ -308,7 +305,7 @@

      Объявление переменных и функций

      Объявление функций

        -
      • Запрещено переопределение функций, созданных с помощью функционального объявления (function expression) +
      • Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration)
        function myFunc() {};
         myFunc = 2;
         
      • @@ -317,14 +314,21 @@

        Объявление функций

      • Новые функции не создаются с помощью конструктора Function
      • -
      • Вместо коллекции arguments, используется rest-оператор
      • +
      • Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка
      • + +
      • Вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка + +
        Math.max.apply(null, [1, 100, 15, 1000]);
        +
        -
      • Вместо вызова функции через apply используется spread-оператор
      • +
        Math.max(...[1, 100, 15, 1000]);
        +
        +

      Создание значений

        -
      • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect().
      • +
      • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()
      • При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)
      • @@ -332,9 +336,9 @@

        Создание значений

      • Не используются конструкторы примитивов, которые используются для автобоксинга String, Number, Boolean
      • -
      • Конструкторы вызываются со скобками, даже если у них нет параметров.
      • +
      • Конструкторы вызываются со скобками, даже если у них нет параметров
      • -
      • Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new.
      • +
      • Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new
    @@ -343,17 +347,19 @@

    Создание значений

    Хорошие практики

      -
    • Не используется конструкция with.
    • +
    • Не используется конструкция with
    • -
    • Не используются alert.
    • +
    • Не используются alert
    • -
    • Не используется выполнение кода через eval.
    • +
    • Не используется выполнение кода через eval
    • -
    • Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout.
    • +
    • Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout
    • -
    • Не используется протокол javascript.
    • +
    • В ссылках используется протокол javascript:
    • -
    • Конструкторы не используются без ключевого слова new.
    • +
    • Конструкторы не используются без ключевого слова new
    • + +
    • В функциях не используются обращения к caller и callee

    Манкипатчинг

    @@ -366,9 +372,9 @@

    Манкипатчинг

    Контекст

      -
    • bind не используется вне методов классов
    • +
    • bind не используется вне методов классов
    • -
    • в функциях, которые не являются методами никакого объекта или класса не используется this
    • +
    • В функциях, которые не являются методами никакого объекта или класса не используется this

    Переменные

    @@ -392,7 +398,7 @@

    Приведение типов

    Константы в условиях

      -
    • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда +
    • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда
      if (true) {}
       
      @@ -429,7 +435,7 @@

      Отладчик и консоль

      • В коде не используется оставленных выводов в консоль
      • -
      • В коде нет забытых инструкций debugger
      • +
      • В коде нет забытых инструкций debugger
    @@ -451,7 +457,7 @@

    Неиспользуемый код

    -
  • В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций.
  • +
  • В коде нет объявленных, но неиспользуемых переменных
  • В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций @@ -481,7 +487,7 @@

    Обработка ошибок и исключения

      -
    • В конструкции try..catch запрещен пустой блок try
    • +
    • В конструкции try..catch запрещен пустой блок catch
  • @@ -498,7 +504,7 @@

    Документирование

    • необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
    • -
    • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции
    • +
    • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции
    • для описания возвращаемого значения из функции используется тег @return, а не @returns
    @@ -515,8 +521,6 @@

    Прочее

    • При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty
    • -
    • В функциях не используются обращения к caller и callee
    • -
    • В объектах напрямую не переопределяется свойство __iterator__
    • @@ -536,7 +540,7 @@

      Прочее

    • В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из икла и могут привести к слишком сложному для понимания коду
    • -
    • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора switch и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
    • +
    • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора switch и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения
    • В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for @@ -567,13 +571,16 @@

      Регулярные выражения

    • В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)
    • -
    • В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение
    • +
    • В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение
    • - В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3} + В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества
      /   /.exec(myString);
       
      +
      /\s\s\s/.exec(myString);
      +
      +
      /\s{3}/.exec(myString);
       
    • @@ -583,10 +590,10 @@

      Регулярные выражения

      -

      node.js

      +

      Node.js

        -
      • В node.js файлах не используется конструкция process.exit.
      • +
      • В Node.js файлах не используется конструкция process.exit
      From 5066238fb78ac7299f40f50f2e5f3df68eee3345 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Fri, 28 Jul 2017 17:26:42 +0300 Subject: [PATCH 032/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript.html b/javascript.html index ee11b0c..b47db01 100644 --- a/javascript.html +++ b/javascript.html @@ -82,11 +82,11 @@

      Отступы, пробелы и переносы

    • При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы
    • -
    • Оператор вызова функции () не отделяется круглыми скобками от названия функции
    • +
    • Оператор вызова функции () не отделяется круглыми скобками от названия функции
    • В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено
    • -
    • Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.
    • +
    • Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.
    • В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)
    • @@ -94,15 +94,15 @@

      Отступы, пробелы и переносы

    • Перед скобками начинающими новый блок кода должен ставиться пробел
    • -
    • При объявлении анонимных функций, скобки с параметрами отделаются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет
    • +
    • При объявлении анонимных функций, скобки с параметрами отделаются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет
    • В комментариях текст отбивается пробелом от начала комментария
    • -
    • При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов
    • +
    • При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов
    • В spread-операторе точки не отделяются от названия коллекции
    • -
    • Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда
    • +
    • Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда
    From eae5e622e7ed69263b6ce71faa1453036f107d36 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Fri, 28 Jul 2017 17:43:01 +0300 Subject: [PATCH 033/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BA=D0=B0=D0=B2=D1=8B=D1=87=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=20=D0=B5=D0=BB=D0=BE=D1=87=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=B3=D0=B0=D0=B9=D0=B4=D0=B5=20JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript.html b/javascript.html index b47db01..d233182 100644 --- a/javascript.html +++ b/javascript.html @@ -219,7 +219,7 @@

    Предотвращение ошибок

    Условные операторы

      -
    • Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. +
    • Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.
      if (1 === myValue) {}
       
      From 8f5933881f5bca1a9dd8d6ad561c1f16891694e5 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Tue, 1 Aug 2017 14:37:03 +0300 Subject: [PATCH 034/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B3?= =?UTF-8?q?=D0=B0=D0=B9=D0=B4=D0=B5=20JS=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=20=D0=B0=D0=B1=D0=B7=D0=B0=D1=86=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 353 +++++++++++++++++++++--------------------------- 1 file changed, 156 insertions(+), 197 deletions(-) diff --git a/javascript.html b/javascript.html index d233182..6015c57 100644 --- a/javascript.html +++ b/javascript.html @@ -17,6 +17,14 @@ + + @@ -36,18 +44,26 @@

      Синтаксис

      Отступы, пробелы и переносы

      -

      Для правильного форматирования используйте файл .editorconfig в вашем редакторе.

      +
      Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
      + +

      Для отступов используются два пробела. Знак табуляции не используется.

      + +

      При переносах в продолжении строки используется четыре пробела

      -
        -
      • Для отступов используются два пробела. Знак табуляции не используется. При переносах в продолжении строки используется четыре пробела
      • +

        Запрещено одновременное использование табов и пробелов для отступов

        -
      • Запрещено одновременное использование табов и пробелов для отступов
      • +

        Выражения должны заканчиваться точками с запятой

        -
      • Выражения должны заканчиваться точками с запятой
      • +

        Для отступов ключевых слов, операторов и т. д. используется не более одного пробела

        +
        var name       = 1;
        +var longerName = 2;
        +
        -
      • Внутри строки не используется более одного пробела
      • +
        var name = 1;
        +var longerName = 2;
        +
        -
      • Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует: +

        Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует:

        if (condition)
         {
           // code
        @@ -58,112 +74,103 @@ 

        Отступы, пробелы и переносы

        // code }
        -
      • +

        -
      • В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом
      • +

        В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом

        -
      • В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива
      • +

        В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

        -
      • После запятой всегда должен ставиться пробел, если запятая не в конце строки
      • +

        После запятой всегда должен ставиться пробел, если запятая не в конце строки

        -
      • Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции
      • +

        Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции

        -
      • Файл должен заканчиваться пустой строкой
      • +

        Файл должен заканчиваться пустой строкой

        -
      • Строка не должна заканчиваться пробелами
      • +

        Строка не должна заканчиваться пробелами

        -
      • В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон
      • +

        В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон

        -
      • В коде не используются совместно табы и пробелы
      • +

        В коде не используются совместно табы и пробелы

        -
      • Блоки кода отделяются друг от друга не более чем двумя пустыми строками
      • +

        Блоки кода отделяются друг от друга не более чем двумя пустыми строками

        -
      • В качестве символа переноса строки используется стандартный символ, который используется в системе
      • +

        В качестве символа переноса строки используется стандартный символ, который используется в системе

        -
      • При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы
      • +

        При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы

        -
      • Оператор вызова функции () не отделяется круглыми скобками от названия функции
      • +

        Оператор вызова функции () не отделяется круглыми скобками от названия функции

        -
      • В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено
      • +

        В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено

        -
      • Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.
      • +

        Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.

        -
      • В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)
      • +

        В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)

        -
      • После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся
      • +

        После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся

        -
      • Перед скобками начинающими новый блок кода должен ставиться пробел
      • +

        Перед скобками начинающими новый блок кода должен ставиться пробел

        -
      • При объявлении анонимных функций, скобки с параметрами отделаются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет
      • +

        При объявлении анонимных функций, скобки с параметрами отделаются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет

        -
      • В комментариях текст отбивается пробелом от начала комментария
      • +

        В комментариях текст отбивается пробелом от начала комментария

        -
      • При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов
      • +

        При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов

        -
      • В spread-операторе точки не отделяются от названия коллекции
      • +

        В spread-операторе точки не отделяются от названия коллекции

        -
      • Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда
      • -
      +

      Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда

      Строки

      -
        -
      • В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы
      • +

        В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

        -
      • В строках запрещено указывать код спецсимволов в восьмеричной системе счисления +

        В строках запрещено указывать код спецсимволов в восьмеричной системе счисления

        var foo = "Copyright \251";
         
        var foo = "Copyright \u00A9";
         
        -
      • +

        -
      • При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними
      • +

        При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними

        -
      • В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам
      • -
      +

      В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам

      Числа

      -
        -
      • В числах запрещено опускать ноль в дробной и целой части
      • +

        В числах запрещено опускать ноль в дробной и целой части

        -
      • Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления
      • -
      +

      Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления

      Литералы

      -
        -
      • Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины
      • +

        Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины

        -
      • Объекты должны создаваться через литерал объекта, а не через конструктор
      • +

        Объекты должны создаваться через литерал объекта, а не через конструктор

        -
      • При создании объектов запрещено дублирование ключей
      • +

        При создании объектов запрещено дублирование ключей

        -
      • При описании функций запрещено дублировать названия параметров
      • +

        При описании функций запрещено дублировать названия параметров

        -
      • В операторе switch запрещено дублировать условия (case)
      • -
      +

      В операторе switch запрещено дублировать условия (case)

      Операторы

      -
        -
      • В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами
      • +

        В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами

        -
      • Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof
      • -
      +

      Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof

      @@ -174,23 +181,21 @@

      Именование

      -
        -
      • Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов
      • +

        Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов

        -
      • Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре (UPPER_SNAKE_CASE)
      • +

        Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре (UPPER_SNAKE_CASE)

        -
      • Запрещено использовать имена переменных, которые используются во внешних областях видимости
      • +

        Запрещено использовать имена переменных, которые используются во внешних областях видимости

        -
      • Запрещено называть переменные и свойства ключевыми словами JS
      • +

        Запрещено называть переменные и свойства ключевыми словами JS

        -
      • Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window/global
      • +

        Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window/global

        -
      • Запрещено объявлять переменные без значения
      • +

        Запрещено объявлять переменные без значения

        -
      • Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Для прямого сравнения с undefined можно использовать конструкцию void 0
      • +

        Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Для прямого сравнения с undefined можно использовать конструкцию void 0

        -
      • С заглавной буквы называются только функции-конструкторы
      • -
      +

      С заглавной буквы называются только функции-конструкторы

      @@ -201,52 +206,47 @@

      Предотвращение ошибок

      -
        -
      • Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI (Automatic Semicolon Insertion)
      • +

        Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI (Automatic Semicolon Insertion)

        -
      • Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит
      • +

        Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит

        -
      • Обязательно используются блоки кода даже если в выражении содержится одна строчка
      • +

        Обязательно используются блоки кода даже если в выражении содержится одна строчка

        -
      • В коде нет пустых блоков кода
      • +

        В коде нет пустых блоков кода

        -
      • Код работает в строгом режиме: в начале всех файлов явно прописана директива 'use strict'
      • -
      +

      Код работает в строгом режиме: в начале всех файлов явно прописана директива 'use strict'

      Условные операторы

      -
        -
      • Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. +

        Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.

        if (1 === myValue) {}
         
        if (myValue === 1) {}
        -
      • +

        -
      • При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения
      • +

        При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения

        -
      • В условных операторах не используется оператор присвоения
      • +

        В условных операторах не используется оператор присвоения

        -
      • В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок
      • +

        В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок

        -
      • Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать Number.isNaN
      • +

        Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать Number.isNaN

        -
      • Запрещено использовать case без break или return в блоках switch
      • +

        Запрещено использовать case без break или return в блоках switch

        -
      • Не используются вложенные тернарные операторы
      • -
      +

      Не используются вложенные тернарные операторы

      Функции

      -
        -
      • -

        Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках.

        +

        Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках.

        +
        var do = function() {
           if (cond) {
             return 1;
        @@ -264,141 +264,121 @@ 

        Функции

        } };
        -

        Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. В первом примере, функция do может вернуть значение 1, а может undefined

        -
      • -
      • В return не используется оператор присваивания
      • +

        Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. В первом примере, функция do может вернуть значение 1, а может undefined

        -
      • В стрелочных функциях всегда используются скобки для параметров, даже если параметр один
      • -
      +

      В return не используется оператор присваивания

      + +

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

      Операторы

      -
        -
      • В конструкторе классов-наследников обязательно вызывается super()
      • +

        В конструкторе классов-наследников обязательно вызывается super()

        -
      • В конструкторе нет обращения к this до того, как будет вызван super()
      • -
      +

      В конструкторе нет обращения к this до того, как будет вызван super()

      Объявление переменных и функций

      -
        -
      • При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода
      • +

        При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода

        -
      • Запрещено переопределять с помощью ключевого слова ранее созданные переменные
      • +

        Запрещено переопределять с помощью ключевого слова ранее созданные переменные

        -
      • Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. +

        Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const.

        var a = 1, b = 2;
         
        var a = 1;
         var b = 2;
         
        -
      • -
      +

      Объявление функций

      -
        -
      • Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration) +

        Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration)

        function myFunc() {};
         myFunc = 2;
        -
      • +

        -
      • Запрещено объявление значений внутри блоков
      • +

        Запрещено объявление значений внутри блоков

        -
      • Новые функции не создаются с помощью конструктора Function
      • +

        Новые функции не создаются с помощью конструктора Function

        -
      • Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка
      • +

        Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка

        -
      • Вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка +

        Вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка

        Math.max.apply(null, [1, 100, 15, 1000]);
         
        Math.max(...[1, 100, 15, 1000]);
         
        -
      • -
      +

      Создание значений

      -
        -
      • Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()
      • +

        Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()

        -
      • При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)
      • +

        При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)

        -
      • При создании непустых объектов и массивов не используются «висячие» запятые
      • +

        При создании непустых объектов и массивов не используются «висячие» запятые

        -
      • Не используются конструкторы примитивов, которые используются для автобоксинга String, Number, Boolean
      • +

        Не используются конструкторы примитивов, которые используются для автобоксинга String, Number, Boolean

        -
      • Конструкторы вызываются со скобками, даже если у них нет параметров
      • +

        Конструкторы вызываются со скобками, даже если у них нет параметров

        -
      • Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new
      • -
      +

      Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new

      Хорошие практики

      -
        -
      • Не используется конструкция with
      • +

        Не используется конструкция with

        -
      • Не используются alert
      • +

        Не используются alert

        -
      • Не используется выполнение кода через eval
      • +

        Не используется выполнение кода через eval

        -
      • Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout
      • +

        Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout

        -
      • В ссылках используется протокол javascript:
      • +

        В ссылках используется протокол javascript:

        -
      • Конструкторы не используются без ключевого слова new
      • +

        Конструкторы не используются без ключевого слова new

        -
      • В функциях не используются обращения к caller и callee
      • -
      +

      В функциях не используются обращения к caller и callee

      Манкипатчинг

      -
        -
      • Встроенные в язык объекты и прототипы не расширяются в рантайме
      • +

        Встроенные в язык объекты и прототипы не расширяются в рантайме

        -
      • Не переопределяются глобальные значения (undefined, null, Object, window и прочие)
      • -
      +

      Не переопределяются глобальные значения (undefined, null, Object, window и прочие)

      Контекст

      -
        -
      • bind не используется вне методов классов
      • +

        bind не используется вне методов классов

        -
      • В функциях, которые не являются методами никакого объекта или класса не используется this
      • -
      +

      В функциях, которые не являются методами никакого объекта или класса не используется this

      Переменные

      -
        -
      • Переменные, объявленные через var не удаляются оператором delete
      • -
      +

      Переменные, объявленные через var не удаляются оператором delete

      Приведение типов

      -
        -
      • Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора
      • +

        Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора

        -
      • Оператор typeof используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения typeof
      • +

        Оператор typeof используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения typeof

        -
      • В parseInt обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления
      • -
      +

      В parseInt обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления

      Константы в условиях

      -
        -
      • В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда +

        В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда

        if (true) {}
         
        @@ -410,8 +390,7 @@

        Константы в условиях

        var ternaryValue = isA() ? 'a' : 'b';
         
        -
      • -
      +

      @@ -422,30 +401,25 @@

      Чистый код

      -

      Лишние символы (пробелы, точки с запятой и прочее)

      -
        -
      • Не используются лишние (множественные) точки с запятой
      • -
      +

      Лишние символы

      +

      Не используются лишние (множественные) точки с запятой

      Отладчик и консоль

      -
        -
      • В коде не используется оставленных выводов в консоль
      • +

        В коде не используется оставленных выводов в консоль

        -
      • В коде нет забытых инструкций debugger
      • -
      +

      В коде нет забытых инструкций debugger

      Неиспользуемый код

      -
        -
      • - В проекте нет недоступного кода, который никогда не выполнится +

        В проекте нет недоступного кода, который никогда не выполнится +

        if (false) {
           doSomething();
         }
        @@ -455,12 +429,12 @@ 

        Неиспользуемый код

        doSomething(); }
        -
      • +

        + +

        В коде нет объявленных, но неиспользуемых переменных

        -
      • В коде нет объявленных, но неиспользуемых переменных
      • +

        В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций -

      • - В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций
        check === true && doSomething();
         
        @@ -468,27 +442,22 @@

        Неиспользуемый код

        doSomething(); } -
      • -
      +

      Обработка ошибок и исключения

      -
        -
      • - Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено. +

        Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено. +

        throw 'Passed value is out of range';
         
        throw new RangeError('Rassed value is out of range');
        -
      • -
      +

      -
        -
      • В конструкции try..catch запрещен пустой блок catch
      • -
      +

      В конструкции try..catch запрещен пустой блок catch

      @@ -501,13 +470,11 @@

      Документирование

      При написании jsDoc используются следующие ограничения: -
        -
      • необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
      • +

        необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param

        -
      • описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции
      • +

        описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции

        -
      • для описания возвращаемого значения из функции используется тег @return, а не @returns
      • -
      +

      для описания возвращаемого значения из функции используется тег @return, а не @returns

      @@ -518,13 +485,11 @@

      Прочее

      -
        -
      • При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty
      • +

        При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty

        -
      • В объектах напрямую не переопределяется свойство __iterator__
      • +

        В объектах напрямую не переопределяется свойство __iterator__

        -
      • - В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя +

        В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя

        var obj = {
           __proto__: Parent
         };
        @@ -536,14 +501,13 @@ 

        Прочее

        var obj = Object.create(Parent.prototype);
        -
      • +

        -
      • В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из икла и могут привести к слишком сложному для понимания коду
      • +

        В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из икла и могут привести к слишком сложному для понимания коду

        -
      • Блоки, использующиеся в коде должны описывать тело функции, условия, оператора switch и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения
      • +

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

        -
      • - В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for +

        В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

        const result = (1, 2); // 2
         
        @@ -558,23 +522,21 @@

        Прочее

        for (var i = 0, l = 100; i < l; i++); -
      • -
      +

      Регулярные выражения

      -
        -
      • В регулярных выражениях не используются «управляющие выражения»
      • +

        В регулярных выражениях не используются «управляющие выражения»

        + +

        В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)

        -
      • В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)
      • +

        В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение

        -
      • В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение
      • +

        В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества -

      • - В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества
        /   /.exec(myString);
         
        @@ -583,8 +545,7 @@

        Регулярные выражения

        /\s{3}/.exec(myString);
         
        -
      • -
      +

      @@ -592,9 +553,7 @@

      Регулярные выражения

      Node.js

      -
        -
      • В Node.js файлах не используется конструкция process.exit
      • -
      +

      В Node.js файлах не используется конструкция process.exit

      From 02ef0d1312fabd80ef5deb9e22b32e4070d362f6 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Mon, 7 Aug 2017 17:49:44 +0300 Subject: [PATCH 035/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=20editroconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript.html b/javascript.html index 6015c57..c1530f9 100644 --- a/javascript.html +++ b/javascript.html @@ -44,7 +44,7 @@

      Синтаксис

      Отступы, пробелы и переносы

      -
      Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
      +
      Для правильного форматирования используйте файл .editorconfig в вашем редакторе.

      Для отступов используются два пробела. Знак табуляции не используется.

      From 4f2f8508839453a6169bcad6d0aba831900b6304 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Wed, 9 Aug 2017 17:55:26 +0300 Subject: [PATCH 036/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D1=8B=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9=D0=B4=20=D0=BF=D0=BE=20JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/javascript.html b/javascript.html index c1530f9..2ec9c1b 100644 --- a/javascript.html +++ b/javascript.html @@ -82,23 +82,34 @@

      Отступы, пробелы и переносы

      После запятой всегда должен ставиться пробел, если запятая не в конце строки

      -

      Запрещено переносить запятую на новую строку при создании множественных переменных через один var, при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или наоборов параметров функции

      +

      Запрещено переносить запятую на новую строку при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или перечислений параметров функции

      Файл должен заканчиваться пустой строкой

      Строка не должна заканчиваться пробелами

      -

      В однострочных объектах и при деструктуризации фигурные скобки отбиваются пробелами с двух сторон

      +

      В однострочных объектах и при деструктуризации фигурные скобки не отделяются пробелами от содержимого

      +
      var foo = { a: 1 };
      +
      + +
      var foo = {a: 1};
      +
      + +
      const { a, b } = someObject;
      +
      + +
      const {a, b} = someObject;
      +

      В коде не используются совместно табы и пробелы

      -

      Блоки кода отделяются друг от друга не более чем двумя пустыми строками

      +

      Смысловые блоки кода отделяются друг от друга не более чем двумя пустыми строками

      В качестве символа переноса строки используется стандартный символ, который используется в системе

      При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы

      -

      Оператор вызова функции () не отделяется круглыми скобками от названия функции

      +

      Оператор вызова функции () не отделяется пробелами от названия функции

      В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено

      @@ -106,7 +117,7 @@

      Отступы, пробелы и переносы

      В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)

      -

      После двоеточий и точек с запятым ставятся пробелы. Перед ними — не ставятся

      +

      После двоеточий и точек с запятыми ставятся пробелы. Перед ними — не ставятся

      Перед скобками начинающими новый блок кода должен ставиться пробел

      @@ -114,7 +125,7 @@

      Отступы, пробелы и переносы

      В комментариях текст отбивается пробелом от начала комментария

      -

      При создании генераторов, звездочка идет сразу после ключевого слова function без пробелов

      +

      При создании генераторов, звездочка идёт сразу после ключевого слова function без пробелов

      В spread-операторе точки не отделяются от названия коллекции

      @@ -222,10 +233,10 @@

      Предотвращение ошибок

      Условные операторы

      Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. -

      if (1 === myValue) {}
      +
      if (1 === myValue) { /*...*/ }
       
      -
      if (myValue === 1) {}
      +
      if (myValue === 1) { /*...*/ }
       

      При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения

      @@ -247,7 +258,7 @@

      Условные операторы

      Функции

      Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках.

      -
      var do = function() {
      +
      var doThings = function() {
         if (cond) {
           return 1;
         } else {
      @@ -256,7 +267,7 @@ 

      Функции

      };
      -
      var do = function() {
      +
      var doThings = function() {
         if (cond) {
           return 1;
         } else {
      @@ -285,7 +296,7 @@ 

      Операторы

      Объявление переменных и функций

      -

      При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой кода

      +

      При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой ES6

      Запрещено переопределять с помощью ключевого слова ранее созданные переменные

      @@ -433,7 +444,7 @@

      Неиспользуемый код

      В коде нет объявленных, но неиспользуемых переменных

      -

      В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций +

      В коде нет выражений, значения которых не записываются в переменные, параметры функций или свойства объектов и не передаются как параметры функций

      check === true && doSomething();
       
      @@ -503,7 +514,7 @@

      Прочее

      -

      В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из икла и могут привести к слишком сложному для понимания коду

      +

      В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду

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

      From b625be47b62c123bcebe71621258f2ca7ecdbe53 Mon Sep 17 00:00:00 2001 From: Igor Alexeenko Date: Wed, 9 Aug 2017 18:03:18 +0300 Subject: [PATCH 037/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BD=D0=B5=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/javascript.html b/javascript.html index 2ec9c1b..b021f64 100644 --- a/javascript.html +++ b/javascript.html @@ -42,7 +42,7 @@

      Синтаксис

      -

      Отступы, пробелы и переносы

      +

      Отступы, пробелы и переносы

      Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
      @@ -95,7 +95,7 @@

      Отступы, пробелы и переносы

      var foo = {a: 1};
       
      -
      const { a, b } = someObject;
      +
      const { a, b } = someObject;
       
      const {a, b} = someObject;
      @@ -135,7 +135,7 @@ 

      Отступы, пробелы и переносы

      -

      Строки

      +

      Строки

      В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

      В строках запрещено указывать код спецсимволов в восьмеричной системе счисления @@ -154,7 +154,7 @@

      Строки

      -

      Числа

      +

      Числа

      В числах запрещено опускать ноль в дробной и целой части

      Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления

      @@ -163,7 +163,7 @@

      Числа

      -

      Литералы

      +

      Литералы

      Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины

      Объекты должны создаваться через литерал объекта, а не через конструктор

      @@ -178,7 +178,7 @@

      Литералы

      -

      Операторы

      +

      Операторы

      В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами

      Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof

      @@ -231,7 +231,7 @@

      Предотвращение ошибок

      -

      Условные операторы

      +

      Условные операторы

      Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.

      if (1 === myValue) { /*...*/ }
       
      @@ -255,7 +255,7 @@

      Условные операторы

      -

      Функции

      +

      Функции

      Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках.

      var doThings = function() {
      @@ -286,7 +286,7 @@ 

      Функции

      -

      Операторы

      +

      Операторы

      В конструкторе классов-наследников обязательно вызывается super()

      В конструкторе нет обращения к this до того, как будет вызван super()

      @@ -295,7 +295,7 @@

      Операторы

      -

      Объявление переменных и функций

      +

      Объявление переменных и функций

      При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой ES6

      Запрещено переопределять с помощью ключевого слова ранее созданные переменные

      @@ -309,7 +309,7 @@

      Объявление переменных и функций

      -

      Объявление функций

      +

      Объявление функций

      Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration)

      function myFunc() {};
       myFunc = 2;
      @@ -330,7 +330,7 @@ 

      Объявление функций

      -

      Создание значений

      +

      Создание значений

      Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()

      При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)

      @@ -347,7 +347,7 @@

      Создание значений

      -

      Хорошие практики

      +

      Хорошие практики

      Не используется конструкция with

      Не используются alert

      @@ -380,7 +380,7 @@

      Переменные

      -

      Приведение типов

      +

      Приведение типов

      Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора

      Оператор typeof используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения typeof

      @@ -412,14 +412,14 @@

      Чистый код

      -

      Лишние символы

      +

      Лишние символы

      Не используются лишние (множественные) точки с запятой

      -

      Отладчик и консоль

      +

      Отладчик и консоль

      В коде не используется оставленных выводов в консоль

      В коде нет забытых инструкций debugger

      @@ -428,7 +428,7 @@

      Отладчик и консоль

      -

      Неиспользуемый код

      +

      Неиспользуемый код

      В проекте нет недоступного кода, который никогда не выполнится

      if (false) {
      @@ -459,7 +459,7 @@ 

      Неиспользуемый код

      -

      Обработка ошибок и исключения

      +

      Обработка ошибок и исключения

      Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.

      throw 'Passed value is out of range';
      @@ -539,7 +539,7 @@ 

      Прочее

      -

      Регулярные выражения

      +

      Регулярные выражения

      В регулярных выражениях не используются «управляющие выражения»

      В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)

      @@ -562,7 +562,7 @@

      Регулярные выражения

      -

      Node.js

      +

      Node.js

      В Node.js файлах не используется конструкция process.exit

      From 13cb84e43ede0e9e7118b941ff39814fac8dd4a7 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Wed, 23 Aug 2017 12:43:10 +0300 Subject: [PATCH 038/103] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D1=82=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript.html b/javascript.html index b021f64..cf501d1 100644 --- a/javascript.html +++ b/javascript.html @@ -78,7 +78,7 @@

      Отступы, пробелы и переносы

      В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом

      -

      В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после закрывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

      +

      В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после открывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

      После запятой всегда должен ставиться пробел, если запятая не в конце строки

      @@ -121,7 +121,7 @@

      Отступы, пробелы и переносы

      Перед скобками начинающими новый блок кода должен ставиться пробел

      -

      При объявлении анонимных функций, скобки с параметрами отделаются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет

      +

      При объявлении анонимных функций, скобки с параметрами отделяются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет

      В комментариях текст отбивается пробелом от начала комментария

      @@ -465,7 +465,7 @@

      Обработка ошибок и исключения

      throw 'Passed value is out of range';
       
      -
      throw new RangeError('Rassed value is out of range');
      +
      throw new RangeError('Passed value is out of range');
       

      В конструкции try..catch запрещен пустой блок catch

      @@ -483,7 +483,7 @@

      Документирование

      необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param

      -

      описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия return используется без возвращаемого значения для выхода из функции

      +

      описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкция return используется без возвращаемого значения для выхода из функции

      для описания возвращаемого значения из функции используется тег @return, а не @returns

      @@ -518,7 +518,7 @@

      Прочее

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

      -

      В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for +

      В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

      const result = (1, 2); // 2
       
      From 0335da3ec5aae40aec59ebd2436b5353fae60816 Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Mon, 11 Sep 2017 19:19:51 +0300 Subject: [PATCH 039/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D1=83=D1=81=D1=82=D0=B0=D1=80=D0=B5=D0=B2=D1=88=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81?= =?UTF-8?q?=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D1=80=D0=B5?= =?UTF-8?q?=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20=D1=81?= =?UTF-8?q?=20=D0=B0=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 56 --------------------- .stylelintrc | 139 --------------------------------------------------- Readme.md | 5 ++ 3 files changed, 5 insertions(+), 195 deletions(-) delete mode 100644 .eslintrc delete mode 100644 .stylelintrc diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 874a764..0000000 --- a/.eslintrc +++ /dev/null @@ -1,56 +0,0 @@ -{ - "extends": "eslint:recommended", - - "env": { - "es6": true, - "node": true, - "browser": true - }, - - "ecmaFeatures": { - "modules": true - }, - - "rules": { - "array-bracket-spacing": [2, "never"], - "arrow-parens": 2, - "arrow-spacing": [2, {"before": true, "after": true}], - "block-spacing": [2, "always"], - "brace-style": [2, "1tbs"], - "callback-return": [2, ["callback", "cb", "fn", "next"]], - "comma-spacing": [2, {"before": false, "after": true}], - "comma-style": [2, "last"], - "computed-property-spacing": [2, "never"], - "eol-last": 2, - "eqeqeq": 2, - "generator-star-spacing": [2, {"before": true, "after": false}], - "indent": [2, 2, {"SwitchCase": 1}], - "linebreak-style": [2, "unix"], - "no-class-assign": 2, - "no-console": 0, - "no-const-assign": 2, - "no-extra-semi": 2, - "no-inner-declarations": [2, "both"], - "no-multi-spaces": 2, - "no-spaced-func": 2, - "no-trailing-spaces": 2, - "no-useless-call": 2, - "no-var": 2, - "object-curly-spacing": [2, "never"], - "one-var": [2, "never"], - "operator-assignment": [2, "never"], - "operator-linebreak": [2, "after"], - "prefer-spread": 2, - "quotes": [2, "single"], - "semi": [2, "always"], - "space-after-keywords": 2, - "space-before-blocks": 2, - "space-before-function-paren": [2, "never"], - "space-before-keywords": [2, "always"], - "space-in-parens": 2, - "space-infix-ops": 2, - "space-return-throw-case": 2, - "space-unary-ops": [2, {"words": true, "nonwords": false}], - "wrap-iife": [2, "inside"] - } -} diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index 1a6e8ba..0000000 --- a/.stylelintrc +++ /dev/null @@ -1,139 +0,0 @@ -{ - "rules": { - "color-hex-case": "lower", - "color-hex-length": "long", - "color-no-invalid-hex": true, - - "font-family-name-quotes": "always-unless-keyword", - "font-family-no-duplicate-names": true, - - "function-calc-no-unspaced-operator": true, - "function-comma-newline-after": "always-multi-line", - "function-comma-newline-before": "never-multi-line", - "function-comma-space-after": "always", - "function-comma-space-before": "never", - "function-linear-gradient-no-nonstandard-direction": true, - "function-max-empty-lines": 0, - "function-name-case": "lower", - "function-parentheses-space-inside": "never", - "function-url-quotes": "always", - "function-whitespace-after": "always", - - "number-leading-zero": "always", - "number-no-trailing-zeros": true, - "length-zero-no-unit": true, - - "string-no-newline": true, - "string-quotes": "double", - - "unit-case": "lower", - "unit-no-unknown": true, - - "value-keyword-case": "lower", - "value-list-comma-newline-after": "always-multi-line", - "value-list-comma-newline-before": "never-multi-line", - "value-list-comma-space-after": "always-single-line", - "value-list-comma-space-before": "never", - "value-list-max-empty-lines": 0, - - "property-case": "lower", - - "keyframe-declaration-no-important": true, - - "declaration-bang-space-after": "never", - "declaration-bang-space-before": "always", - "declaration-colon-newline-after": "always-multi-line", - "declaration-colon-space-after": "always-single-line", - "declaration-colon-space-before": "never", - - "declaration-block-no-duplicate-properties": true, - "declaration-block-no-shorthand-property-overrides": true, - "declaration-block-semicolon-newline-after": "always", - "declaration-block-semicolon-newline-before": "never-multi-line", - "declaration-block-semicolon-space-after": "always-single-line", - "declaration-block-semicolon-space-before": "never", - "declaration-block-trailing-semicolon": "always", - - "block-closing-brace-empty-line-before": "never", - "block-closing-brace-newline-after": "always", - "block-closing-brace-newline-before": "always", - "block-closing-brace-space-after": "always-single-line", - "block-closing-brace-space-before": "always-single-line", - "block-no-empty": true, - "block-opening-brace-newline-after": "always", - "block-opening-brace-space-after": "always-single-line", - "block-opening-brace-space-before": "always", - - "selector-attribute-brackets-space-inside": "never", - "selector-attribute-operator-space-after": "never", - "selector-attribute-operator-space-before": "never", - "selector-attribute-quotes": "always", - "selector-combinator-space-after": "always", - "selector-combinator-space-before": "always", - "selector-descendant-combinator-no-non-space": true, - "selector-max-compound-selectors": 3, - "selector-pseudo-class-case": "lower", - "selector-pseudo-class-no-unknown": true, - "selector-pseudo-class-parentheses-space-inside": "never", - "selector-pseudo-element-case": "lower", - "selector-pseudo-element-colon-notation": "double", - "selector-pseudo-element-no-unknown": true, - "selector-type-case": "lower", - "selector-type-no-unknown": true, - "selector-max-empty-lines": 0, - - "selector-list-comma-newline-after": "always", - "selector-list-comma-newline-before": "never-multi-line", - "selector-list-comma-space-after": "always-single-line", - "selector-list-comma-space-before": "never", - - "rule-empty-line-before": ["always", { - "except": ["first-nested"], - "ignore": ["after-comment"] - }], - - "media-feature-colon-space-after": "always", - "media-feature-colon-space-before": "never", - "media-feature-name-case": "lower", - "media-feature-name-no-unknown": true, - "media-feature-name-no-vendor-prefix": true, - "media-feature-parentheses-space-inside": "never", - "media-feature-range-operator-space-after": "always", - "media-feature-range-operator-space-before": "always", - - "media-query-list-comma-newline-after": "always-multi-line", - "media-query-list-comma-newline-before": "never-multi-line", - "media-query-list-comma-space-after": "always-single-line", - "media-query-list-comma-space-before": "never-single-line", - - "at-rule-empty-line-before": ["always", { - "except": [ - "first-nested", - "blockless-after-blockless" - ], - "ignore": ["after-comment"] - }], - "at-rule-name-case": "lower", - "at-rule-name-newline-after": "always-multi-line", - "at-rule-name-space-after": "always", - "at-rule-no-unknown": [true, { - "ignoreAtRules": ["mixin", "define-mixin"] - }], - "at-rule-semicolon-newline-after": "always", - - "comment-no-empty": true, - - "indentation": [2, { - "except": ["value"] - }], - - "max-empty-lines": 2, - "max-nesting-depth": 3, - "no-duplicate-selectors": true, - "no-empty-source": true, - "no-eol-whitespace": true, - "no-extra-semicolons": true, - "no-invalid-double-slash-comments": true, - "no-missing-end-of-source-newline": true - } -} diff --git a/Readme.md b/Readme.md index d7c5e1c..5e372da 100644 --- a/Readme.md +++ b/Readme.md @@ -10,3 +10,8 @@ ## Лицензия Лицензия MIT, смотрите файл `License.md`. + +## Конфигурации линтеров + +ESLint — https://github.com/htmlacademy/eslint-config-htmlacademy +Stylelint — https://github.com/htmlacademy/stylelint-config-htmlacademy From 6f92690aa71102ba24eaa025a298f7161c642f01 Mon Sep 17 00:00:00 2001 From: Vitaly Zyuzin Date: Mon, 11 Sep 2017 19:22:40 +0300 Subject: [PATCH 040/103] Update Readme.md --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 5e372da..9ce56c2 100644 --- a/Readme.md +++ b/Readme.md @@ -14,4 +14,5 @@ ## Конфигурации линтеров ESLint — https://github.com/htmlacademy/eslint-config-htmlacademy + Stylelint — https://github.com/htmlacademy/stylelint-config-htmlacademy From 307e4d372a62e7e1cf06d63b329d39083ab42cdf Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Thu, 14 Sep 2017 19:34:35 +0300 Subject: [PATCH 041/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html-css.html b/html-css.html index a1a3684..555488f 100644 --- a/html-css.html +++ b/html-css.html @@ -72,7 +72,7 @@

      Синтаксис

    • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
    • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
    • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
    • -
    • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
    • +
    • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
    @@ -344,7 +344,7 @@

    Синтаксис

  • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
  • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
  • -
  • Для проверки CSS-кода используйте файл конфигурации .stylelintrc для настройки валидатора stylelint.
  • +
  • Для проверки CSS-кода используйте конфигурацию для настройки валидатора stylelint.
  • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
  • From d59d032297e7d671d858f8d87d33dc171090110a Mon Sep 17 00:00:00 2001 From: Zyuzin Vitaly Date: Mon, 22 Jan 2018 13:49:21 +0300 Subject: [PATCH 042/103] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BC=D0=B5=D0=BB=D0=BA=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 81e0f90..87eeb07 100644 --- a/css/style.css +++ b/css/style.css @@ -135,13 +135,19 @@ header a:visited { .logo-list ul { display: flex; - justify-content: space-between; + flex-wrap: wrap; + justify-content: space-around; margin: 0; padding: 0; list-style: none; } +.logo-list li { + margin-right: 10px; + margin-left: 10px; +} + .logo { width: 300px; height: 300px; From 21ee392f8a88b83585f29d2009aba505ecd18dde Mon Sep 17 00:00:00 2001 From: Vitaly Zyuzin Date: Wed, 14 Mar 2018 12:09:41 +0300 Subject: [PATCH 043/103] =?UTF-8?q?=D0=94=D0=B5=D0=BB=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=20=D1=81=D0=BE=D0=B2=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D1=8B=D0=BC=20=D1=81=203=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B5=D0=B9=20postcss-sorting=20?= =?UTF-8?q?(#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Делает конфиг совместимым с 3 версией postcss-sorting и пополняет новыми свойствами --- .postcss-sorting.json | 806 +++++++++++++++++++++--------------------- 1 file changed, 394 insertions(+), 412 deletions(-) diff --git a/.postcss-sorting.json b/.postcss-sorting.json index fd354a5..985987f 100644 --- a/.postcss-sorting.json +++ b/.postcss-sorting.json @@ -1,414 +1,396 @@ { - "clean-empty-lines": true, - "at-rule-nested-empty-line-before": [true, { - "except": ["first-nested"] - }], - "declaration-empty-line-before": [true, { - "except": ["after-declaration", "first-nested"], - "ignore": ["after-comment", "after-declaration"] - }], - "rule-nested-empty-line-before": [true, { - "except": ["first-nested"], - "ignore": ["after-comment"] - }], - "order": [ - "custom-properties", - { - "type": "at-rule", - "name": "mixin" - }, - "declarations", - "at-rules", - "rules" - ], - "properties-order": [{ - "emptyLineBefore": true, - "properties": [ - "content", - "position", - "top", - "right", - "bottom", - "left", - "z-index" - ] - }, - { - "emptyLineBefore": true, - "properties": [ - "display", - "-webkit-flex", - "-ms-flex", - "flex", - "-webkit-flex-grow", - "flex-grow", - "-webkit-flex-shrink", - "flex-shrink", - "-webkit-flex-basis", - "flex-basis", - "-webkit-flex-flow", - "flex-flow", - "-webkit-flex-direction", - "-ms-flex-direction", - "flex-direction", - "-webkit-flex-wrap", - "flex-wrap", - "-webkit-justify-content", - "justify-content", - "-webkit-align-content", - "align-content", - "-webkit-align-items", - "align-items", - "-webkit-order", - "-ms-flex-order", - "order", - "-webkit-align-self", - "align-self", - "float", - "clear", - "-webkit-box-sizing", - "-moz-box-sizing", - "box-sizing", - "width", - "min-width", - "max-width", - "height", - "min-height", - "max-height", - "margin", - "margin-top", - "margin-right", - "margin-bottom", - "margin-left", - "padding", - "padding-top", - "padding-right", - "padding-bottom", - "padding-left", - "overflow", - "-ms-overflow-x", - "overflow-x", - "-ms-overflow-y", - "overflow-y", - "-webkit-overflow-scrolling", - "-ms-overflow-style" - ] - }, - { - "emptyLineBefore": true, - "properties": [ - "list-style", - "list-style-position", - "list-style-type", - "list-style-image", - "border-collapse", - "border-spacing", - "table-layout", - "empty-cells", - "caption-side", - "font", - "font-weight", - "font-size", - "line-height", - "font-family", - "vertical-align", - "text-align", - "direction", - "color", - "text-transform", - "text-decoration", - "font-style", - "font-variant", - "font-size-adjust", - "font-stretch", - "font-effect", - "font-emphasize", - "font-emphasize-position", - "font-emphasize-style", - "-webkit-font-smoothing", - "-moz-osx-font-smoothing", - "font-smooth", - "-webkit-text-align-last", - "-moz-text-align-last", - "-ms-text-align-last", - "text-align-last", - "letter-spacing", - "word-spacing", - "white-space", - "text-emphasis", - "text-emphasis-color", - "text-emphasis-style", - "text-emphasis-position", - "text-indent", - "-ms-text-justify", - "text-justify", - "-ms-writing-mode", - "text-outline", - "text-wrap", - "-ms-text-overflow", - "text-overflow", - "text-overflow-ellipsis", - "text-overflow-mode", - "text-orientation", - "-ms-word-wrap", - "word-wrap", - "-ms-word-break", - "word-break", - "-moz-tab-size", - "-o-tab-size", - "overflow-wrap", - "tab-size", - "-webkit-hyphens", - "-moz-hyphens", - "hyphens", - "unicode-bidi", - "columns", - "column-count", - "column-fill", - "column-gap", - "column-rule", - "column-rule-color", - "column-rule-style", - "column-rule-width", - "column-span", - "column-width", - "text-shadow", - "page-break-after", - "page-break-before", - "page-break-inside", - "src" - ] - }, - { - "emptyLineBefore": true, - "properties": [ - "background", - "background-color", - "background-image", - "background-repeat", - "background-position", - "-ms-background-position-x", - "background-position-x", - "-ms-background-position-y", - "background-position-y", - "-webkit-background-size", - "-moz-background-size", - "-o-background-size", - "background-size", - "-webkit-background-clip", - "-moz-background-clip", - "background-clip", - "background-origin", - "background-attachment", - "box-decoration-break", - "background-blend-mode", - "border", - "border-width", - "border-style", - "border-color", - "border-top", - "border-top-width", - "border-top-style", - "border-top-color", - "border-right", - "border-right-width", - "border-right-style", - "border-right-color", - "border-bottom", - "border-bottom-width", - "border-bottom-style", - "border-bottom-color", - "border-left", - "border-left-width", - "border-left-style", - "border-left-color", - "-webkit-border-radius", - "-moz-border-radius", - "border-radius", - "-webkit-border-top-left-radius", - "-moz-border-radius-topleft", - "border-top-left-radius", - "-webkit-border-top-right-radius", - "-moz-border-radius-topright", - "border-top-right-radius", - "-webkit-border-bottom-right-radius", - "-moz-border-radius-bottomright", - "border-bottom-right-radius", - "-webkit-border-bottom-left-radius", - "-moz-border-radius-bottomleft", - "border-bottom-left-radius", - "-webkit-border-image", - "-moz-border-image", - "-o-border-image", - "border-image", - "-webkit-border-image-source", - "-moz-border-image-source", - "-o-border-image-source", - "border-image-source", - "-webkit-border-image-slice", - "-moz-border-image-slice", - "-o-border-image-slice", - "border-image-slice", - "-webkit-border-image-width", - "-moz-border-image-width", - "-o-border-image-width", - "border-image-width", - "-webkit-border-image-outset", - "-moz-border-image-outset", - "-o-border-image-outset", - "border-image-outset", - "-webkit-border-image-repeat", - "-moz-border-image-repeat", - "-o-border-image-repeat", - "border-image-repeat", - "outline", - "outline-width", - "outline-style", - "outline-color", - "outline-offset", - "-webkit-box-shadow", - "-moz-box-shadow", - "box-shadow", - "-webkit-transform", - "-moz-transform", - "-ms-transform", - "-o-transform", - "transform", - "-webkit-transform-origin", - "-moz-transform-origin", - "-ms-transform-origin", - "-o-transform-origin", - "transform-origin", - "-webkit-backface-visibility", - "-moz-backface-visibility", - "backface-visibility", - "-webkit-perspective", - "-moz-perspective", - "perspective", - "-webkit-perspective-origin", - "-moz-perspective-origin", - "perspective-origin", - "-webkit-transform-style", - "-moz-transform-style", - "transform-style", - "visibility", - "cursor", - "opacity", - "-webkit-filter", - "filter", - "backdrop-filter" - ] - }, - { - "emptyLineBefore": true, - "properties": [ - "-webkit-transition", - "-moz-transition", - "-ms-transition", - "-o-transition", - "transition", - "-webkit-transition-delay", - "-moz-transition-delay", - "-ms-transition-delay", - "-o-transition-delay", - "transition-delay", - "-webkit-transition-timing-function", - "-moz-transition-timing-function", - "-ms-transition-timing-function", - "-o-transition-timing-function", - "transition-timing-function", - "-webkit-transition-duration", - "-moz-transition-duration", - "-ms-transition-duration", - "-o-transition-duration", - "transition-duration", - "-webkit-transition-property", - "-moz-transition-property", - "-ms-transition-property", - "-o-transition-property", - "transition-property", - "-webkit-animation", - "-moz-animation", - "-ms-animation", - "-o-animation", - "animation", - "-webkit-animation-name", - "-moz-animation-name", - "-ms-animation-name", - "-o-animation-name", - "animation-name", - "-webkit-animation-duration", - "-moz-animation-duration", - "-ms-animation-duration", - "-o-animation-duration", - "animation-duration", - "-webkit-animation-play-state", - "-moz-animation-play-state", - "-ms-animation-play-state", - "-o-animation-play-state", - "animation-play-state", - "-webkit-animation-timing-function", - "-moz-animation-timing-function", - "-ms-animation-timing-function", - "-o-animation-timing-function", - "animation-timing-function", - "-webkit-animation-delay", - "-moz-animation-delay", - "-ms-animation-delay", - "-o-animation-delay", - "animation-delay", - "-webkit-animation-iteration-count", - "-moz-animation-iteration-count", - "-ms-animation-iteration-count", - "-o-animation-iteration-count", - "animation-iteration-count", - "-webkit-animation-direction", - "-moz-animation-direction", - "-ms-animation-direction", - "-o-animation-direction", - "animation-direction", - "-webkit-animation-fill-mode", - "-moz-animation-fill-mode", - "-ms-animation-fill-mode", - "-o-animation-fill-mode", - "animation-fill-mode" - ] - }, - { - "emptyLineBefore": true, - "properties": [ - "appearance", - "clip", - "clip-path", - "counter-reset", - "counter-increment", - "resize", - "-webkit-user-select", - "-moz-user-select", - "-ms-user-select", - "user-select", - "-webkit-tap-highlight-color", - "nav-index", - "nav-up", - "nav-right", - "nav-down", - "nav-left", - "pointer-events", - "quotes", - "touch-action", - "will-change", - "zoom" - ] - }, - { - "emptyLineBefore": true, - "properties": [ - "fill", - "fill-rule", - "clip-rule", - "stroke" - ] - } - ], - "unspecified-properties-position": "bottom" + "order": [ + "custom-properties", + { + "type": "at-rule", + "name": "mixin" + }, + "declarations", + "at-rules", + "rules" + ], + "properties-order": [ + "content", + "position", + "top", + "right", + "bottom", + "left", + "z-index", + "display", + "-webkit-flex", + "-ms-flex", + "flex", + "-webkit-flex-grow", + "flex-grow", + "-webkit-flex-shrink", + "flex-shrink", + "-webkit-flex-basis", + "flex-basis", + "-webkit-flex-flow", + "flex-flow", + "-webkit-flex-direction", + "-ms-flex-direction", + "flex-direction", + "-webkit-flex-wrap", + "flex-wrap", + "-webkit-justify-content", + "justify-content", + "-webkit-align-content", + "align-content", + "-webkit-align-items", + "align-items", + "-webkit-order", + "-ms-flex-order", + "order", + "-ms-grid-row-align", + "-webkit-align-self", + "align-self", + "-ms-grid-column-align", + "justify-self", + "grid", + "grid-area", + "grid-auto-columns", + "grid-auto-flow", + "grid-auto-rows", + "grid-column", + "grid-column-end", + "-ms-grid-column-span", + "grid-column-gap", + "-ms-grid-column", + "grid-column-start", + "grid-gap", + "grid-row", + "grid-row-end", + "-ms-grid-row-span", + "grid-row-gap", + "-ms-grid-row", + "grid-row-start", + "grid-template", + "grid-template-areas", + "-ms-grid-columns", + "grid-template-columns", + "-ms-grid-rows", + "grid-template-rows", + "float", + "clear", + "-webkit-box-sizing", + "-moz-box-sizing", + "box-sizing", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "margin", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "padding", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left", + "overflow", + "-ms-overflow-x", + "overflow-x", + "-ms-overflow-y", + "overflow-y", + "-webkit-overflow-scrolling", + "-ms-overflow-style", + "list-style", + "list-style-position", + "list-style-type", + "list-style-image", + "border-collapse", + "border-spacing", + "table-layout", + "empty-cells", + "caption-side", + "font", + "font-weight", + "font-size", + "line-height", + "font-family", + "vertical-align", + "text-align", + "direction", + "color", + "text-transform", + "text-decoration", + "font-style", + "font-variant", + "font-size-adjust", + "font-stretch", + "font-effect", + "font-emphasize", + "font-emphasize-position", + "font-emphasize-style", + "-webkit-font-smoothing", + "-moz-osx-font-smoothing", + "font-smooth", + "-webkit-text-align-last", + "-moz-text-align-last", + "-ms-text-align-last", + "text-align-last", + "letter-spacing", + "word-spacing", + "white-space", + "text-emphasis", + "text-emphasis-color", + "text-emphasis-style", + "text-emphasis-position", + "text-indent", + "-ms-text-justify", + "text-justify", + "-ms-writing-mode", + "text-outline", + "text-wrap", + "-ms-text-overflow", + "text-overflow", + "text-overflow-ellipsis", + "text-overflow-mode", + "text-orientation", + "-ms-word-wrap", + "word-wrap", + "-ms-word-break", + "word-break", + "-moz-tab-size", + "-o-tab-size", + "overflow-wrap", + "tab-size", + "-webkit-hyphens", + "-moz-hyphens", + "hyphens", + "unicode-bidi", + "columns", + "column-count", + "column-fill", + "column-gap", + "column-rule", + "column-rule-color", + "column-rule-style", + "column-rule-width", + "column-span", + "column-width", + "text-shadow", + "page-break-after", + "page-break-before", + "page-break-inside", + "src", + "background", + "background-color", + "background-image", + "background-repeat", + "background-position", + "-ms-background-position-x", + "background-position-x", + "-ms-background-position-y", + "background-position-y", + "-webkit-background-size", + "-moz-background-size", + "-o-background-size", + "background-size", + "-webkit-background-clip", + "-moz-background-clip", + "background-clip", + "background-origin", + "background-attachment", + "box-decoration-break", + "background-blend-mode", + "border", + "border-width", + "border-style", + "border-color", + "border-top", + "border-top-width", + "border-top-style", + "border-top-color", + "border-right", + "border-right-width", + "border-right-style", + "border-right-color", + "border-bottom", + "border-bottom-width", + "border-bottom-style", + "border-bottom-color", + "border-left", + "border-left-width", + "border-left-style", + "border-left-color", + "-webkit-border-radius", + "-moz-border-radius", + "border-radius", + "-webkit-border-top-left-radius", + "-moz-border-radius-topleft", + "border-top-left-radius", + "-webkit-border-top-right-radius", + "-moz-border-radius-topright", + "border-top-right-radius", + "-webkit-border-bottom-right-radius", + "-moz-border-radius-bottomright", + "border-bottom-right-radius", + "-webkit-border-bottom-left-radius", + "-moz-border-radius-bottomleft", + "border-bottom-left-radius", + "-webkit-border-image", + "-moz-border-image", + "-o-border-image", + "border-image", + "-webkit-border-image-source", + "-moz-border-image-source", + "-o-border-image-source", + "border-image-source", + "-webkit-border-image-slice", + "-moz-border-image-slice", + "-o-border-image-slice", + "border-image-slice", + "-webkit-border-image-width", + "-moz-border-image-width", + "-o-border-image-width", + "border-image-width", + "-webkit-border-image-outset", + "-moz-border-image-outset", + "-o-border-image-outset", + "border-image-outset", + "-webkit-border-image-repeat", + "-moz-border-image-repeat", + "-o-border-image-repeat", + "border-image-repeat", + "outline", + "outline-width", + "outline-style", + "outline-color", + "outline-offset", + "-webkit-box-shadow", + "-moz-box-shadow", + "box-shadow", + "-webkit-transform", + "-moz-transform", + "-ms-transform", + "-o-transform", + "transform", + "-webkit-transform-origin", + "-moz-transform-origin", + "-ms-transform-origin", + "-o-transform-origin", + "transform-origin", + "-webkit-backface-visibility", + "-moz-backface-visibility", + "backface-visibility", + "-webkit-perspective", + "-moz-perspective", + "perspective", + "-webkit-perspective-origin", + "-moz-perspective-origin", + "perspective-origin", + "-webkit-transform-style", + "-moz-transform-style", + "transform-style", + "visibility", + "cursor", + "opacity", + "interpolation-mode", + "-webkit-filter", + "filter", + "backdrop-filter", + "-webkit-transition", + "-moz-transition", + "-ms-transition", + "-o-transition", + "transition", + "-webkit-transition-delay", + "-moz-transition-delay", + "-ms-transition-delay", + "-o-transition-delay", + "transition-delay", + "-webkit-transition-timing-function", + "-moz-transition-timing-function", + "-ms-transition-timing-function", + "-o-transition-timing-function", + "transition-timing-function", + "-webkit-transition-duration", + "-moz-transition-duration", + "-ms-transition-duration", + "-o-transition-duration", + "transition-duration", + "-webkit-transition-property", + "-moz-transition-property", + "-ms-transition-property", + "-o-transition-property", + "transition-property", + "-webkit-animation", + "-moz-animation", + "-ms-animation", + "-o-animation", + "animation", + "-webkit-animation-name", + "-moz-animation-name", + "-ms-animation-name", + "-o-animation-name", + "animation-name", + "-webkit-animation-duration", + "-moz-animation-duration", + "-ms-animation-duration", + "-o-animation-duration", + "animation-duration", + "-webkit-animation-play-state", + "-moz-animation-play-state", + "-ms-animation-play-state", + "-o-animation-play-state", + "animation-play-state", + "-webkit-animation-timing-function", + "-moz-animation-timing-function", + "-ms-animation-timing-function", + "-o-animation-timing-function", + "animation-timing-function", + "-webkit-animation-delay", + "-moz-animation-delay", + "-ms-animation-delay", + "-o-animation-delay", + "animation-delay", + "-webkit-animation-iteration-count", + "-moz-animation-iteration-count", + "-ms-animation-iteration-count", + "-o-animation-iteration-count", + "animation-iteration-count", + "-webkit-animation-direction", + "-moz-animation-direction", + "-ms-animation-direction", + "-o-animation-direction", + "animation-direction", + "-webkit-animation-fill-mode", + "-moz-animation-fill-mode", + "-ms-animation-fill-mode", + "-o-animation-fill-mode", + "animation-fill-mode", + "appearance", + "clip", + "clip-path", + "counter-reset", + "counter-increment", + "resize", + "-webkit-user-select", + "-moz-user-select", + "-ms-user-select", + "user-select", + "-webkit-tap-highlight-color", + "nav-index", + "nav-up", + "nav-right", + "nav-down", + "nav-left", + "pointer-events", + "quotes", + "touch-action", + "will-change", + "zoom", + "fill", + "fill-rule", + "clip-rule", + "stroke" + ], + "unspecified-properties-position": "bottom" } From 6ce9f0b6ce1d0150a41379488ffe2862f8159e8a Mon Sep 17 00:00:00 2001 From: Vitaly Zyuzin Date: Wed, 4 Jul 2018 11:07:03 +0300 Subject: [PATCH 044/103] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BD=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=87=D1=83?= =?UTF-8?q?=D1=8E=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix https://github.com/htmlacademy/codeguide/issues/27 --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 9ce56c2..84f76ec 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,7 @@ * [Code Guide](http://codeguide.co) by @mdo * [CSS Guidelines](http://cssguidelin.es) by Harry Roberts * [Idiomatic CSS](https://github.com/necolas/idiomatic-css) by Nicolas Gallagher -* [Primer Guidelines](http://primercss.io/guidelines/) by GitHub +* [Primer Guidelines](https://styleguide.github.com/primer/principles/) by GitHub ## Лицензия From 7223b1783eaf66552e88990a00ed830e7d937b43 Mon Sep 17 00:00:00 2001 From: Vivendum <44924643+Vivendum@users.noreply.github.com> Date: Mon, 28 Jan 2019 13:08:20 +0500 Subject: [PATCH 045/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B5=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D1=8B,=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D1=81=D0=B2-=D0=B2=D0=B0=20=D1=88=D1=80=D0=B8?= =?UTF-8?q?=D1=84=D1=82=D0=BE=D0=B2=20=D1=81=D0=BE=D0=B3=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D0=BA=D1=80=D0=B0=D1=89=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20font=20(#29)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- csscomb.json | 68 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/csscomb.json b/csscomb.json index 74429f2..25e9113 100644 --- a/csscomb.json +++ b/csscomb.json @@ -40,32 +40,56 @@ ], [ "display", + "-webkit-box", "-webkit-flex", - "-ms-flex", + "-moz-box", + "-ms-flexbox", "flex", + "-webkit-box-flex", "-webkit-flex-grow", + "-moz-box-flex", + "-ms-flex-positive", "flex-grow", "-webkit-flex-shrink", + "-ms-flex-negative", "flex-shrink", "-webkit-flex-basis", + "-ms-flex-preferred-size", "flex-basis", "-webkit-flex-flow", + "-ms-flex-flow", "flex-flow", + "-webkit-box-orient", + "-webkit-box-direction", "-webkit-flex-direction", + "-moz-box-orient", + "-moz-box-direction", "-ms-flex-direction", "flex-direction", "-webkit-flex-wrap", + "-ms-flex-wrap", "flex-wrap", + "-webkit-box-pack", "-webkit-justify-content", + "-moz-box-pack", + "-ms-flex-pack", "justify-content", "-webkit-align-content", + "-ms-flex-line-pack", "align-content", + "-webkit-box-align", "-webkit-align-items", + "-moz-box-align", + "-ms-flex-align", "align-items", + "-webkit-box-ordinal-group", "-webkit-order", + "-moz-box-ordinal-group", "-ms-flex-order", "order", "-webkit-align-self", + "-ms-flex-item-align", + "-ms-grid-row-align", "align-self", "float", "clear", @@ -106,6 +130,8 @@ "empty-cells", "caption-side", "font", + "font-style", + "font-variant", "font-weight", "font-size", "line-height", @@ -115,9 +141,9 @@ "direction", "color", "text-transform", + "-webkit-text-decoration", + "-moz-text-decoration", "text-decoration", - "font-style", - "font-variant", "font-size-adjust", "font-stretch", "font-effect", @@ -132,9 +158,13 @@ "letter-spacing", "word-spacing", "white-space", + "-webkit-text-emphasis", "text-emphasis", + "-webkit-text-emphasis-color", "text-emphasis-color", + "-webkit-text-emphasis-style", "text-emphasis-style", + "-webkit-text-emphasis-position", "text-emphasis-position", "text-indent", "-ms-text-justify", @@ -143,6 +173,7 @@ "text-outline", "text-wrap", "-ms-text-overflow", + "-o-text-overflow", "text-overflow", "text-overflow-ellipsis", "text-overflow-mode", @@ -156,17 +187,38 @@ "tab-size", "-webkit-hyphens", "-moz-hyphens", + "-ms-hyphens", "hyphens", "unicode-bidi", + "-webkit-columns", + "-moz-columns", "columns", + "-webkit-column-count", + "-moz-column-count", "column-count", + "-webkit-column-fill", + "-moz-column-fill", "column-fill", + "-webkit-column-gap", + "-moz-column-gap", "column-gap", + "-webkit-column-rule", + "-moz-column-rule", "column-rule", + "-webkit-column-rule-color", + "-moz-column-rule-color", "column-rule-color", + "-webkit-column-rule-style", + "-moz-column-rule-style", "column-rule-style", + "-webkit-column-rule-width", + "-moz-column-rule-width", "column-rule-width", + "-webkit-column-span", + "-moz-column-span", "column-span", + "-webkit-column-width", + "-moz-column-width", "column-width", "text-shadow", "page-break-after", @@ -177,6 +229,11 @@ "background", "background-color", "background-image", + "-webkit-gradient", + "-webkit-linear-gradient", + "-moz-linear-gradient", + "-o-linear-gradient", + "linear-gradient", "background-repeat", "background-position", "-ms-background-position-x", @@ -190,8 +247,12 @@ "-webkit-background-clip", "-moz-background-clip", "background-clip", + "-webkit-background-origin", + "-moz-background-origin", + "-o-background-origin", "background-origin", "background-attachment", + "-webkit-box-decoration-break", "box-decoration-break", "background-blend-mode", "border", @@ -373,6 +434,7 @@ "pointer-events", "will-change", "clip", + "-webkit-clip-path", "clip-path", "zoom" ] From 933b5fac0d71ae7a97e7564a3c3c8c4f7ce9ef28 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Mon, 7 Oct 2019 15:46:08 +0300 Subject: [PATCH 046/103] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BD=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=8E=D1=89=D1=83=D1=8E=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83?= =?UTF-8?q?=20CSSComb=20=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D1=83=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index 555488f..a757a83 100644 --- a/html-css.html +++ b/html-css.html @@ -345,7 +345,7 @@

    Синтаксис

  • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
  • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
  • Для проверки CSS-кода используйте конфигурацию для настройки валидатора stylelint.
  • -
  • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
  • +
  • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
  • From 28e46947eadd0c320767d72a773a000141ed19a5 Mon Sep 17 00:00:00 2001 From: KatyaMatya21 Date: Wed, 16 Oct 2019 10:16:51 +0300 Subject: [PATCH 047/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D1=83=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9?= =?UTF-8?q?=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://app.clickup.com/t/1yeex1 --- javascript.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript.html b/javascript.html index cf501d1..49f6ad8 100644 --- a/javascript.html +++ b/javascript.html @@ -63,7 +63,7 @@

    Отступы, пробелы и переносы

    var longerName = 2;
    -

    Открывающие скобки блоков кода находятся на одной строке с оператором, которых их использует: +

    Открывающие скобки блоков кода находятся на одной строке с оператором, который их использует:

    if (condition)
     {
       // code
    
    From 2e1d1dfd629cda44618d82b09203691a46f63acc Mon Sep 17 00:00:00 2001
    From: AnnaLevchenko <36822971+levallevchenko@users.noreply.github.com>
    Date: Thu, 17 Sep 2020 13:26:04 +0300
    Subject: [PATCH 048/103] =?UTF-8?q?=D0=A3=D0=B1=D0=B8=D1=80=D0=B0=D0=B5?=
     =?UTF-8?q?=D1=82=20=D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=D0=BE=D1=80=D0=B5?=
     =?UTF-8?q?=D1=87=D0=B8=D1=8F=20eslint=20=D0=B8=20=D1=81=D1=82=D0=B0=D0=B9?=
     =?UTF-8?q?=D0=BB=D0=B3=D0=B0=D0=B9=D0=B4=D0=B0=20=D0=90=D0=BA=D0=B0=D0=B4?=
     =?UTF-8?q?=D0=B5=D0=BC=D0=B8=D0=B8=20=D0=B2=20=D0=BF=D0=BE=D0=BB=D1=8C?=
     =?UTF-8?q?=D0=B7=D1=83=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B3=D0=BE=20(#3?=
     =?UTF-8?q?7)?=
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    * Fix__https://app.clickup.com/t/72q51r
    
    * Fix__https://app.clickup.com/t/72q54j
    
    * Fix__https://app.clickup.com/t/72q5hb
    
    * Fix__https://app.clickup.com/t/72q5qx
    
    * Fix__https://app.clickup.com/t/72q61q
    
    * Fix__https://app.clickup.com/t/72q6zy
    
    * Fix__https://app.clickup.com/t/72q740
    
    * Fix__https://app.clickup.com/t/72q77e
    
    * Fix__https://app.clickup.com/t/72q7qw
    
    * Fix__https://app.clickup.com/t/72q8fe
    
    * Fix__https://app.clickup.com/t/72q8tw
    
    * Fix__https://app.clickup.com/t/72qey5
    
    * Fix__https://app.clickup.com/t/72qfje
    
    * Добавляет .vscode в .gitignore
    
    * https://app.clickup.com/t/72qgkt
    
    * Fix__https://app.clickup.com/t/72q4tp
    
    * Apply suggestions from code review
    
    * Fix #72q9ky
    
    https://app.clickup.com/t/72q9ky
    
    Co-authored-by: Sasha Sushko 
    ---
     .gitignore      |   1 +
     javascript.html | 154 +++++++++++++++++++++---------------------------
     2 files changed, 68 insertions(+), 87 deletions(-)
    
    diff --git a/.gitignore b/.gitignore
    index a095df0..edc6c51 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -2,3 +2,4 @@ build/
     node_modules/
     *.log
     .DS_Store
    +.vscode
    diff --git a/javascript.html b/javascript.html
    index 49f6ad8..ff27057 100644
    --- a/javascript.html
    +++ b/javascript.html
    @@ -52,15 +52,13 @@ 

    Отступы, пробелы и переносы

    Запрещено одновременное использование табов и пробелов для отступов

    -

    Выражения должны заканчиваться точками с запятой

    -

    Для отступов ключевых слов, операторов и т. д. используется не более одного пробела

    -
    var name       = 1;
    -var longerName = 2;
    +
    const name       = 1;
    +const longerName = 2;
     
    -
    var name = 1;
    -var longerName = 2;
    +
    const name = 1;
    +const longerName = 2;
     

    Открывающие скобки блоков кода находятся на одной строке с оператором, который их использует: @@ -82,17 +80,35 @@

    Отступы, пробелы и переносы

    После запятой всегда должен ставиться пробел, если запятая не в конце строки

    -

    Запрещено переносить запятую на новую строку при объявлении массивов и объектов. Запрещено использовать запятую в конце списков, объектов или перечислений параметров функции

    +

    Обязательно переносить запятую на новую строку при объявлении массивов и объектов. Обязательно использовать запятую в конце списков, объектов или перечислений параметров функции

    +
    const foo = {
    +    a: 1,
    +    b: 2
    +};
    +
    +const bar = [
    +    1,
    +    2
    +];
    +
    const foo = {
    +    a: 1,
    +    b: 2,
    +};
    +
    +const bar = [
    +    1,
    +    2,
    +];

    Файл должен заканчиваться пустой строкой

    Строка не должна заканчиваться пробелами

    В однострочных объектах и при деструктуризации фигурные скобки не отделяются пробелами от содержимого

    -
    var foo = { a: 1 };
    +
    const foo = { a: 1 };
     
    -
    var foo = {a: 1};
    +
    const foo = {a: 1};
     
    const { a, b } = someObject;
    @@ -101,15 +117,13 @@ 

    Отступы, пробелы и переносы

    const {a, b} = someObject;
     
    -

    В коде не используются совместно табы и пробелы

    -

    Смысловые блоки кода отделяются друг от друга не более чем двумя пустыми строками

    В качестве символа переноса строки используется стандартный символ, который используется в системе

    При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы

    -

    Оператор вызова функции () не отделяется пробелами от названия функции

    +

    Оператор вызова функции () отделяется пробелом от названия функции

    В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено

    @@ -121,15 +135,13 @@

    Отступы, пробелы и переносы

    Перед скобками начинающими новый блок кода должен ставиться пробел

    -

    При объявлении анонимных функций, скобки с параметрами отделяются пробелом от ключевого слова function. Если функция именована, перед названием ставится пробел, после — нет

    -

    В комментариях текст отбивается пробелом от начала комментария

    При создании генераторов, звездочка идёт сразу после ключевого слова function без пробелов

    -

    В spread-операторе точки не отделяются от названия коллекции

    -

    Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда

    + +

    В spread-операторе точки не отделяются от названия коллекции

    @@ -139,16 +151,16 @@

    Строки

    В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

    В строках запрещено указывать код спецсимволов в восьмеричной системе счисления -

    var foo = "Copyright \251";
    +
    const foo = "Copyright \251";
     
    -
    var foo = "Copyright \u00A9";
    +
    const foo = "Copyright \u00A9";
     

    При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними

    -

    В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны. Если позволяет поддержка, предпочтение отдается строковым шаблонам

    +

    В строках используются двойные кавычки. Разрешено использовать строковые шаблоны. Предпочтение отдается строковым шаблонам

    @@ -192,21 +204,15 @@

    Именование

    -

    Запрещено объявлять переменные, имена которых совпадают с именами используемых в коде лейблов

    - -

    Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в змеином регистре (UPPER_SNAKE_CASE)

    +

    Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в константном регистре (CONSTANT_CASE) и названия классов, функций-конструкторов и перечислений, которые именуются с заглавной буквы (PascalCase)

    Запрещено использовать имена переменных, которые используются во внешних областях видимости

    Запрещено называть переменные и свойства ключевыми словами JS

    -

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window/global

    +

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window

    -

    Запрещено объявлять переменные без значения

    - -

    Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Для прямого сравнения с undefined можно использовать конструкцию void 0

    - -

    С заглавной буквы называются только функции-конструкторы

    +

    Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Исключение составляет явная передача undefined при вызове функции вместо аргумента, чтобы использовать значение параметра по умолчанию

    @@ -225,14 +231,14 @@

    Предотвращение ошибок

    В коде нет пустых блоков кода

    -

    Код работает в строгом режиме: в начале всех файлов явно прописана директива 'use strict'

    +

    Код работает в строгом режиме: в начале всех файлов явно прописана директива "use strict" или используются модули ECMAScript, которые по умолчанию работают в строгом режиме

    Условные операторы

    -

    Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт. +

    Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоборот.

    if (1 === myValue) { /*...*/ }
     
    @@ -245,7 +251,7 @@

    Условные операторы

    В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок

    -

    Запрещено сравнение с NaN. Для проверки, является результат операции числовым, нужно использовать Number.isNaN

    +

    Запрещено сравнение с NaN. Для проверки, является ли результат операции числовым, нужно использовать Number.isNaN

    Запрещено использовать case без break или return в блоках switch

    @@ -256,9 +262,9 @@

    Условные операторы

    Функции

    -

    Если в функции используется ветвление, в котором есть возврат значения (return), return должен быть добавлен и в остальных ветках.

    +

    Если в функции используется ветвление, в котором есть возврат значения, то return должен быть добавлен и в остальных ветках.

    -
    var doThings = function() {
    +
    const doThings = function() {
       if (cond) {
         return 1;
       } else {
    @@ -267,17 +273,29 @@ 

    Функции

    };
    -
    var doThings = function() {
    +
    const doThings = function() {
       if (cond) {
         return 1;
       } else {
    -    return 2;
    +    return doSomethingElse();
       }
     };
     

    Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. В первом примере, функция do может вернуть значение 1, а может undefined

    +

    Единственное исключение — использование return без значения для прекращения работы функции:

    + +
    const doThings = function() {
    +  if (cond) {
    +    doSomething()
    +    return;
    +  }
    +
    +  doSomethingElse();
    +};
    +
    +

    В return не используется оператор присваивания

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

    @@ -296,16 +314,16 @@

    Операторы

    Объявление переменных и функций

    -

    При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой ES6

    +

    При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой ECMAScript 2015

    Запрещено переопределять с помощью ключевого слова ранее созданные переменные

    Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. -

    var a = 1, b = 2;
    +
    const a = 1, b = 2;
     
    -
    var a = 1;
    -var b = 2;
    +
    const a = 1;
    +const b = 2;
     

    @@ -315,13 +333,11 @@

    Объявление функций

    myFunc = 2;

    -

    Запрещено объявление значений внутри блоков

    -

    Новые функции не создаются с помощью конструктора Function

    Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка

    -

    Вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка +

    Для превращения массива с данными в аргументы вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка

    Math.max.apply(null, [1, 100, 15, 1000]);
     
    @@ -337,7 +353,7 @@

    Создание значений

    При создании непустых объектов и массивов не используются «висячие» запятые

    -

    Не используются конструкторы примитивов, которые используются для автобоксинга String, Number, Boolean

    +

    Для создания новых значений не используются конструкторы примитивов String, Number, Boolean

    Конструкторы вызываются со скобками, даже если у них нет параметров

    @@ -396,10 +412,10 @@

    Константы в условиях

    if (a > 1) {}
     
    -
    var ternaryValue = true ? 'a' : 'b';
    +
    const ternaryValue = true ? 'a' : 'b';
     
    -
    var ternaryValue = isA() ? 'a' : 'b';
    +
    const ternaryValue = isA() ? 'a' : 'b';
     

    @@ -443,17 +459,6 @@

    Неиспользуемый код

    В коде нет объявленных, но неиспользуемых переменных

    - -

    В коде нет выражений, значения которых не записываются в переменные, параметры функций или свойства объектов и не передаются как параметры функций - -

    check === true && doSomething();
    -
    - -
    if (check) {
    -  doSomething();
    -}
    -
    -

    @@ -474,23 +479,6 @@

    Обработка ошибок и исключения

    -
    -

    Документирование

    - -
    -
    - При написании jsDoc используются следующие ограничения: - -

    необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param

    - -

    описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкция return используется без возвращаемого значения для выхода из функции

    - -

    для описания возвращаемого значения из функции используется тег @return, а не @returns

    -
    -
    - -
    -

    Прочее

    @@ -501,22 +489,22 @@

    Прочее

    В объектах напрямую не переопределяется свойство __iterator__

    В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя -

    var obj = {
    +
    const obj = {
       __proto__: Parent
     };
     
    -
    var Obj = function() {};
    +
    const Obj = function() {};
     Obj.prototype = new Parent();
    -var obj = new obj;
    +const obj = new obj;
     
    -var obj = Object.create(Parent.prototype);
    +const obj = Object.create(Parent.prototype);
     

    В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду

    -

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

    +

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

    В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

    const result = (1, 2); // 2
    @@ -531,7 +519,7 @@ 

    Прочее

    val = getVal();
     switch(val) {}
     
    -for (var i = 0, l = 100; i < l; i++);
    +for (let i = 0, l = 100; i < l; i++);
     

    @@ -560,14 +548,6 @@

    Регулярные выражения

    -
    -
    -

    Node.js

    - -

    В Node.js файлах не используется конструкция process.exit

    -
    -
    -
    From b08f107a87c7bfb892ba20853e802e59ff6898f6 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 9 Dec 2020 17:57:43 +0300 Subject: [PATCH 049/103] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20normalize=20=D0=B4=D0=BE=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B5=D0=B9=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/normalize.css | 166 ++++++++++++---------------------------------- 1 file changed, 44 insertions(+), 122 deletions(-) diff --git a/css/normalize.css b/css/normalize.css index b26c100..192eb9c 100644 --- a/css/normalize.css +++ b/css/normalize.css @@ -1,17 +1,15 @@ -/*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ /* Document ========================================================================== */ /** * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in - * IE on Windows Phone and in iOS. + * 2. Prevent adjustments of font size after orientation changes in iOS. */ html { line-height: 1.15; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } @@ -19,15 +17,18 @@ html { ========================================================================== */ /** - * Add the correct display in IE 9-. + * Remove the margin in all browsers. */ -article, -aside, -footer, -header, -nav, -section { +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { display: block; } @@ -44,25 +45,6 @@ h1 { /* Grouping content ========================================================================== */ -/** - * Add the correct display in IE 9-. - * 1. Add the correct display in IE. - */ - -figcaption, -figure, -main { /* 1 */ - display: block; -} - -/** - * Add the correct margin in IE 8. - */ - -figure { - margin: 1em 40px; -} - /** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. @@ -88,17 +70,15 @@ pre { ========================================================================== */ /** - * 1. Remove the gray background on active links in IE 10. - * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + * Remove the gray background on active links in IE 10. */ a { - background-color: transparent; /* 1 */ - -webkit-text-decoration-skip: objects; /* 2 */ + background-color: transparent; } /** - * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 1. Remove the bottom border in Chrome 57- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ @@ -108,15 +88,6 @@ abbr[title] { text-decoration: underline dotted; /* 2 */ } -/** - * Prevent the duplicate application of `bolder` by the next rule in Safari 6. - */ - -b, -strong { - font-weight: inherit; -} - /** * Add the correct font weight in Chrome, Edge, and Safari. */ @@ -138,23 +109,6 @@ samp { font-size: 1em; /* 2 */ } -/** - * Add the correct font style in Android 4.3-. - */ - -dfn { - font-style: italic; -} - -/** - * Add the correct background and color in IE 9-. - */ - -mark { - background-color: #ff0; - color: #000; -} - /** * Add the correct font size in all browsers. */ @@ -188,44 +142,19 @@ sup { ========================================================================== */ /** - * Add the correct display in IE 9-. - */ - -audio, -video { - display: inline-block; -} - -/** - * Add the correct display in iOS 4-7. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Remove the border on images inside links in IE 10-. + * Remove the border on images inside links in IE 10. */ img { border-style: none; } -/** - * Hide the overflow in IE. - */ - -svg:not(:root) { - overflow: hidden; -} - /* Forms ========================================================================== */ /** - * Remove the margin in Firefox and Safari. + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. */ button, @@ -233,7 +162,10 @@ input, optgroup, select, textarea { - margin: 0; + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ } /** @@ -257,16 +189,14 @@ select { /* 1 */ } /** - * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` - * controls in Android 4. - * 2. Correct the inability to style clickable types in iOS and Safari. + * Correct the inability to style clickable types in iOS and Safari. */ button, -html [type="button"], /* 1 */ +[type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; /* 2 */ + -webkit-appearance: button; } /** @@ -292,6 +222,14 @@ button:-moz-focusring, outline: 1px dotted ButtonText; } +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + /** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. @@ -309,17 +247,15 @@ legend { } /** - * 1. Add the correct display in IE 9-. - * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + * Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ + vertical-align: baseline; } /** - * Remove the default vertical scrollbar in IE. + * Remove the default vertical scrollbar in IE 10+. */ textarea { @@ -327,8 +263,8 @@ textarea { } /** - * 1. Add the correct box sizing in IE 10-. - * 2. Remove the padding in IE 10-. + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. */ [type="checkbox"], @@ -357,10 +293,9 @@ textarea { } /** - * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + * Remove the inner padding in Chrome and Safari on macOS. */ -[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } @@ -379,12 +314,10 @@ textarea { ========================================================================== */ /* - * Add the correct display in IE 9-. - * 1. Add the correct display in Edge, IE, and Firefox. + * Add the correct display in Edge, IE 10+, and Firefox. */ -details, /* 1 */ -menu { +details { display: block; } @@ -396,30 +329,19 @@ summary { display: list-item; } -/* Scripting +/* Misc ========================================================================== */ /** - * Add the correct display in IE 9-. - */ - -canvas { - display: inline-block; -} - -/** - * Add the correct display in IE. + * Add the correct display in IE 10+. */ template { display: none; } -/* Hidden - ========================================================================== */ - /** - * Add the correct display in IE 10-. + * Add the correct display in IE 10. */ [hidden] { From 36640b9fee1420de162b1dccc3e899cb9990cca4 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 9 Dec 2020 18:09:42 +0300 Subject: [PATCH 050/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- md/syntax.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/md/syntax.md b/md/syntax.md index ab1bdd7..76e0aad 100644 --- a/md/syntax.md +++ b/md/syntax.md @@ -2,7 +2,7 @@ ## Форматирование ### Строка не должна быть длиннее 80 символов -Строки более 80 символов длиной, снижают скорость чтения заставляя читатаеля +Строки более 80 символов длиной, снижают скорость чтения заставляя читателя перемещать глаза на большое расстояние. Не стоит забывать и о том, что код, написанный в Академии часто показывается @@ -36,7 +36,7 @@ + }, true); ``` -#### Аргументы функций и вызовы через цепчку отделяются четырьмя пробелами +#### Аргументы функций и вызовы через цепочку отделяются четырьмя пробелами При переносе длинных вызовов функции и обращении к свойствам через точку по длинной цепочке, при переносе используются четыре пробела. Меньшее количество пробелов сделает отступ неотличимым при быстром чтении кода от отступа @@ -83,7 +83,7 @@ _В обоих случаях при переносе аргументов фу на предыдущей строке. Правила с переносом оператора хорошо работают в языках, где необязательно -удалять забытые запятые в конце спиков. Но даже в этом случае быстрое удаление +удалять забытые запятые в конце списков. Но даже в этом случае быстрое удаление и сортировка строк не будут работать, потому у списков будет отличаться первая строка, а у чейнов — последняя и после сортировки и удаления нужно перепроверить получившийся список на валидность. @@ -169,7 +169,7 @@ _В обоих случаях при переносе аргументов фу не должно затрагивать всю область видимости. Положительный побочный эффект такого стиля заключается в том, -что при использовании его в обучающем процессе идея коллбэков объясняется +что при использовании его в обучающем процессе идея колбэков объясняется сильно проще ```diff From 55c28c13e127cf8fa57126cd5b42b72299015dd9 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 9 Dec 2020 18:33:50 +0300 Subject: [PATCH 051/103] =?UTF-8?q?=D0=92=D1=8B=D0=BD=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=82=20
    =20=D0=B8=D0=B7=20

    ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/javascript.html b/javascript.html index ff27057..cf32a86 100644 --- a/javascript.html +++ b/javascript.html @@ -61,7 +61,7 @@

    Отступы, пробелы и переносы

    const longerName = 2;
    -

    Открывающие скобки блоков кода находятся на одной строке с оператором, который их использует: +

    Открывающие скобки блоков кода находятся на одной строке с оператором, который их использует:

    if (condition)
     {
       // code
    @@ -72,8 +72,6 @@ 

    Отступы, пробелы и переносы

    // code }
    -

    -

    В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом

    В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после открывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

    @@ -150,13 +148,12 @@

    Отступы, пробелы и переносы

    Строки

    В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

    -

    В строках запрещено указывать код спецсимволов в восьмеричной системе счисления +

    В строках запрещено указывать код спецсимволов в восьмеричной системе счисления

    const foo = "Copyright \251";
     
    const foo = "Copyright \u00A9";
     
    -

    При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними

    @@ -238,13 +235,12 @@

    Предотвращение ошибок

    Условные операторы

    -

    Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоборот. +

    Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоборот.

    if (1 === myValue) { /*...*/ }
     
    if (myValue === 1) { /*...*/ }
    -

    - +

    При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения

    В условных операторах не используется оператор присвоения

    @@ -318,33 +314,29 @@

    Объявление переменных и функций

    Запрещено переопределять с помощью ключевого слова ранее созданные переменные

    -

    Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const. +

    Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const.

    const a = 1, b = 2;
     
    const a = 1;
     const b = 2;
     
    -

    -

    Объявление функций

    -

    Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration) +

    Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration)

    function myFunc() {};
     myFunc = 2;
    -

    +

    Новые функции не создаются с помощью конструктора Function

    Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка

    -

    Для превращения массива с данными в аргументы вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка - +

    Для превращения массива с данными в аргументы вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка

    Math.max.apply(null, [1, 100, 15, 1000]);
     
    Math.max(...[1, 100, 15, 1000]);
     
    -

    Создание значений

    Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()

    @@ -405,7 +397,7 @@

    Приведение типов

    Константы в условиях

    -

    В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда +

    В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда

    if (true) {}
     
    @@ -417,7 +409,6 @@

    Константы в условиях

    const ternaryValue = isA() ? 'a' : 'b';
     
    -

    @@ -445,8 +436,7 @@

    Отладчик и консоль

    Неиспользуемый код

    -

    В проекте нет недоступного кода, который никогда не выполнится - +

    В проекте нет недоступного кода, который никогда не выполнится

    if (false) {
       doSomething();
     }
    @@ -456,7 +446,6 @@ 

    Неиспользуемый код

    doSomething(); }
    -

    В коде нет объявленных, но неиспользуемых переменных

    @@ -465,13 +454,12 @@

    Неиспользуемый код

    Обработка ошибок и исключения

    -

    Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено. - +

    Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.

    throw 'Passed value is out of range';
     
    throw new RangeError('Passed value is out of range');
    -

    +

    В конструкции try..catch запрещен пустой блок catch

    @@ -488,7 +476,7 @@

    Прочее

    В объектах напрямую не переопределяется свойство __iterator__

    -

    В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя +

    В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя

    const obj = {
       __proto__: Parent
     };
    @@ -500,13 +488,12 @@ 

    Прочее

    const obj = Object.create(Parent.prototype);
    -

    В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду

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

    -

    В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for +

    В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

    const result = (1, 2); // 2
     
    @@ -521,7 +508,6 @@

    Прочее

    for (let i = 0, l = 100; i < l; i++); -

    @@ -534,8 +520,7 @@

    Регулярные выражения

    В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение

    -

    В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества - +

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

    /   /.exec(myString);
     
    @@ -544,7 +529,6 @@

    Регулярные выражения

    /\s{3}/.exec(myString);
     
    -

    From 0be034b8a6c12fafcd13f95f10638a4edcb5ffb4 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 9 Dec 2020 18:47:20 +0300 Subject: [PATCH 052/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B0=D0=B9=D1=82=D0=B0=20=D0=B2=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 84f76ec..e2c4d55 100644 --- a/Readme.md +++ b/Readme.md @@ -1,4 +1,5 @@ # Стиль кода Академии HTML +Стиль кода можно [посмотреть тут](https://codeguide.academy/). ## Благодарности From 9f8dfb8f6f8c5c71ec6875a7dd223afe0eac50cc Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Thu, 10 Dec 2020 10:50:44 +0300 Subject: [PATCH 053/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D1=81=D1=82=D0=B0=D1=80=D1=8B=D0=B9=20ga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 2 -- index.html | 2 -- javascript.html | 2 -- 3 files changed, 6 deletions(-) diff --git a/html-css.html b/html-css.html index a757a83..4f14d48 100644 --- a/html-css.html +++ b/html-css.html @@ -15,8 +15,6 @@ - - diff --git a/index.html b/index.html index b3dbc00..17a8433 100644 --- a/index.html +++ b/index.html @@ -15,8 +15,6 @@ - - diff --git a/javascript.html b/javascript.html index ff27057..08cb6cb 100644 --- a/javascript.html +++ b/javascript.html @@ -16,8 +16,6 @@ - - + + + + From 013452c1390ded203ad9403bda2af0db79c3df91 Mon Sep 17 00:00:00 2001 From: Dima Os Date: Sat, 18 Jul 2020 01:00:49 +0300 Subject: [PATCH 055/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D1=83=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B3=D0=B0=D0=B9?= =?UTF-8?q?=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript.html b/javascript.html index ff27057..51b5fed 100644 --- a/javascript.html +++ b/javascript.html @@ -210,7 +210,7 @@

    Именование

    Запрещено называть переменные и свойства ключевыми словами JS

    -

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как в свойству объекта window

    +

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как к свойству объекта window

    Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Исключение составляет явная передача undefined при вызове функции вместо аргумента, чтобы использовать значение параметра по умолчанию

    From 204e762a8df00a5e33067e598f2743bae1afa469 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Thu, 10 Dec 2020 15:07:25 +0300 Subject: [PATCH 056/103] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20ga=20=D0=B4=D0=BE=20tagmanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 15 ++++++--------- index.html | 14 ++++++-------- javascript.html | 15 ++++++--------- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/html-css.html b/html-css.html index 05e00c0..e409b0d 100644 --- a/html-css.html +++ b/html-css.html @@ -16,17 +16,14 @@ - - - + + + - + + +
    diff --git a/index.html b/index.html index 0617246..1de67ff 100644 --- a/index.html +++ b/index.html @@ -16,16 +16,14 @@ - - - + + + + + +
    diff --git a/javascript.html b/javascript.html index 41658d9..10c0aa2 100644 --- a/javascript.html +++ b/javascript.html @@ -24,17 +24,14 @@ } - - - + + + - + + +
    From 5ac4d5a54038ae555b12af5afb0d18c20d3bdb95 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Mon, 21 Dec 2020 18:42:15 +0300 Subject: [PATCH 057/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20visually-hidden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/html-css.html b/html-css.html index e409b0d..cc74abe 100644 --- a/html-css.html +++ b/html-css.html @@ -60,6 +60,7 @@

    CSS

  • Имена классов
  • Правило @import
  • Варианты шрифта
  • +
  • Доступное скрытие
  • @@ -541,6 +542,47 @@

    Варианты шрифта

    + +
    +
    +

    Доступное скрытие

    +

    + Для того, чтобы контент был скрыт от глаз, но доступен для скринридеров и поисковиков его нужно скрывать используя утилитарный класс visually-hidden. +

    +
    +
    +
    +
    /* Плохо: скрывать элемент с помощью font-size, display:none */
    +h1 {
    +  font-size: 0;
    +}
    +
    +.title {
    +  display: none;
    +}
    +
    +
    +
    
    +/* Хорошо: использован класс visually-hidden */
    +.visually-hidden {
    +  position: absolute;
    +  width: 1px;
    +  height: 1px;
    +  margin: -1px;
    +  border: 0;
    +  padding: 0;
    +  white-space: nowrap;
    +  clip-path: inset(100%);
    +  clip: rect(0 0 0 0);
    +  overflow: hidden;
    +}
    +
    +
    +
    
    +<h2 class="visually-hidden">Заголовок</h2>
    +
    +
    +
    From 864d391325a136d24fece46a1ddb86b4edadcd17 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Mon, 21 Dec 2020 22:44:49 +0300 Subject: [PATCH 058/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B1=D0=BB=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index cc74abe..d6cbdb4 100644 --- a/html-css.html +++ b/html-css.html @@ -545,7 +545,7 @@

    Варианты шрифта

    -

    Доступное скрытие

    +

    Доступное скрытие

    Для того, чтобы контент был скрыт от глаз, но доступен для скринридеров и поисковиков его нужно скрывать используя утилитарный класс visually-hidden.

    From 875e1f72066ae2fab9dd46029f259c3727f3b12e Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 22 Dec 2020 13:04:06 +0300 Subject: [PATCH 059/103] =?UTF-8?q?=D0=94=D0=B5=D0=BB=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=BE=D0=BB=D0=BB=20=D0=BF=D0=BB=D0=B0=D0=B2?= =?UTF-8?q?=D0=BD=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/css/style.css b/css/style.css index 87eeb07..db098b5 100644 --- a/css/style.css +++ b/css/style.css @@ -1,5 +1,6 @@ html { font-size: 16px; + scroll-behavior: smooth; } body { From afc18c9ee1a8d7c15e222fd09fe9d95ebc31c270 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 22 Dec 2020 13:08:17 +0300 Subject: [PATCH 060/103] =?UTF-8?q?=D0=A7=D0=B8=D0=BD=D0=B8=D1=82=20=D1=81?= =?UTF-8?q?=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BA=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D0=BB=D0=B0=20=D0=BA=20=D1=8D=D0=BB=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/css/style.css b/css/style.css index db098b5..1765483 100644 --- a/css/style.css +++ b/css/style.css @@ -49,6 +49,7 @@ h2 { h3 { font-size: 1.75rem; + scroll-margin-top: 60px; } code, From f21f20f4d2d7b2ed6f74e0dcfa12afdb9d658f8a Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 22 Dec 2020 18:29:49 +0300 Subject: [PATCH 061/103] =?UTF-8?q?#32=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=20=D0=B4=D0=BB=D1=8F=20camelCase-=D0=B0=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D0=B1=D1=83=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htmlhintrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.htmlhintrc b/.htmlhintrc index 6feda33..53f0c00 100644 --- a/.htmlhintrc +++ b/.htmlhintrc @@ -1,6 +1,6 @@ { "tagname-lowercase": true, - "attr-lowercase": true, + "attr-lowercase": ["viewBox", "preserveAspectRatio"], "attr-value-double-quotes": true, "attr-value-not-empty": false, "attr-no-duplication": true, From b3586c69ffe43538f136ed1b3c9c1ee87f9ce18b Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 23 Dec 2020 17:28:20 +0300 Subject: [PATCH 062/103] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D0=B8=D1=82=20htmlhint=20=D0=B2=20=D0=B4=D1=80=D1=83?= =?UTF-8?q?=D0=B3=D0=BE=D0=B9=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htmlhintrc | 24 ------------------------ Readme.md | 4 ++++ 2 files changed, 4 insertions(+), 24 deletions(-) delete mode 100644 .htmlhintrc diff --git a/.htmlhintrc b/.htmlhintrc deleted file mode 100644 index 53f0c00..0000000 --- a/.htmlhintrc +++ /dev/null @@ -1,24 +0,0 @@ -{ - "tagname-lowercase": true, - "attr-lowercase": ["viewBox", "preserveAspectRatio"], - "attr-value-double-quotes": true, - "attr-value-not-empty": false, - "attr-no-duplication": true, - "doctype-first": true, - "tag-pair": true, - "tag-self-close": false, - "spec-char-escape": true, - "id-unique": true, - "src-not-empty": true, - "title-require": true, - "alt-require": true, - "doctype-html5": true, - "id-class-value": "dash", - "style-disabled": false, - "inline-style-disabled": false, - "inline-script-disabled": false, - "space-tab-mixed-disabled": "space", - "id-class-ad-disabled": false, - "href-abs-or-rel": false, - "attr-unsafe-chars": true -} diff --git a/Readme.md b/Readme.md index 84f76ec..64c0754 100644 --- a/Readme.md +++ b/Readme.md @@ -16,3 +16,7 @@ ESLint — https://github.com/htmlacademy/eslint-config-htmlacademy Stylelint — https://github.com/htmlacademy/stylelint-config-htmlacademy + +### Устаревшее + +HTMLHint - https://github.com/htmlacademy/htmlhint-config-htmlacademy From 3c63fdb95f71b7749f5d577c213f462134bfca8b Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Fri, 25 Dec 2020 11:15:49 +0300 Subject: [PATCH 063/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BF=D1=80=D0=BE=20"=D1=83=D1=81=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D1=88=D0=B5=D0=B5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Readme.md b/Readme.md index 64c0754..878e584 100644 --- a/Readme.md +++ b/Readme.md @@ -17,6 +17,4 @@ ESLint — https://github.com/htmlacademy/eslint-config-htmlacademy Stylelint — https://github.com/htmlacademy/stylelint-config-htmlacademy -### Устаревшее - HTMLHint - https://github.com/htmlacademy/htmlhint-config-htmlacademy From 6075210f08a33cd0ce7b08504e3bbd201367029f Mon Sep 17 00:00:00 2001 From: Nick Petrenko <63558439+extendsnull@users.noreply.github.com> Date: Wed, 13 Jan 2021 23:04:41 +0200 Subject: [PATCH 064/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=81=D0=B0=D0=B9=D0=B4=D0=B1=D0=B0=D1=80?= =?UTF-8?q?=20=D1=81=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B5=D0=B9=20(#49)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Добавляет сайдбар с навигацией * Возвращает исходные размеры текста. * Удаляет ненужные стили * Изменяет scroll-margin-top у заголовков * Изменяет адрес ссылки с котиком * Форматирует отступы для листингов кода * Форматирует отступы в листингах кода --- css/style.css | 159 ++++++++++- html-css.html | 699 ++++++++++++++++++++++++------------------------ index.html | 2 +- javascript.html | 662 +++++++++++++++++++++++---------------------- 4 files changed, 840 insertions(+), 682 deletions(-) diff --git a/css/style.css b/css/style.css index 1765483..acb48a7 100644 --- a/css/style.css +++ b/css/style.css @@ -1,3 +1,9 @@ +*, +*::before, +*::after { + box-sizing: border-box; +} + html { font-size: 16px; scroll-behavior: smooth; @@ -14,12 +20,14 @@ body { a:link, a:visited { - color: #5a5a5a; - text-decoration: underline; + color: #3f3ccb; + text-decoration: none; } -a:hover { - text-decoration: none; +a:hover, +a:focus { + color: #302683; + text-decoration: underline; } h1, @@ -49,7 +57,7 @@ h2 { h3 { font-size: 1.75rem; - scroll-margin-top: 60px; + scroll-margin-top: 20px; } code, @@ -155,12 +163,62 @@ header a:visited { height: 300px; } -.chapter h2 { +.guide-content { + display: flex; + flex-wrap: wrap; +} + +.sidebar { + display: flex; + flex-direction: column; + + width: 100%; +} + +.sidebar a { + display: block; + color: #5a5a5a; +} + +.sidebar a:hover { + color: #3f3ccb; +} + +.sidebar-col { padding: 2rem 1rem; +} + +.sidebar-col + .sidebar-col { + border-top: 1px solid #e5e5e5; +} + +.sidebar-col > a { + font-size: 1.75rem; + line-height: 1.25; +} +.sidebar-menu { + padding-left: 1rem; +} + +.chapters { + width: 100%; +} + +.chapter h2 { + padding: 2rem 1rem; + word-break: break-word; background-color: #e5e5e5; } +.chapter h3[id]::before { + display: block; + height: 2rem; + margin-top: -2rem; + visibility: hidden; + content: ""; +} + .chapter-part { display: flex; flex-direction: column; @@ -275,6 +333,22 @@ footer { } @media (min-width: 48em) { + .sidebar { + flex-direction: row; + flex-wrap: wrap; + + padding: 2rem 0; + } + + .sidebar-col { + width: 50%; + padding: 1rem 3rem; + } + + .sidebar-col + .sidebar-col { + border-top: 0; + } + .chapter h2 { padding: 2rem 3rem 2.5rem; } @@ -285,7 +359,7 @@ footer { .chapter-part-col { width: 50%; - padding: 3rem; + padding: 3rem 1.5rem; } .chapter-part-col--full-width { @@ -297,6 +371,77 @@ footer { } } +@media (min-width: 75em) { + .chapters { + width: calc(100% - 230px); + } + + .sidebar { + position: sticky; + top: 0; + bottom: 0; + + flex-direction: column; + flex-wrap: nowrap; + align-self: flex-start; + + width: 230px; + height: 100vh; + padding: 0 1rem; + + overflow-y: auto; + line-height: 1.25; + border-right: 1px solid #e5e5e5; + } + + .sidebar-col { + flex-shrink: 0; + + width: 100%; + padding: 0; + } + + .sidebar-col-first { + padding-top: 1.75rem; + } + + .sidebar-col-last { + padding-bottom: 1.75rem; + } + + .sidebar-col + .sidebar-col { + margin-top: 1.75em; + } + + .sidebar-col > a { + display: block; + + font-size: 0.8rem; + font-weight: bold; + } + + .sidebar-menu { + padding: 0; + margin: 0.5em 0 0; + + list-style: none; + + font-size: 0.7rem; + } + + .sidebar-menu li { + margin: 0; + + line-height: 1.45; + } + + .sidebar-menu a { + display: block; + + padding: 0.25em 0; + } +} + /* override default prism theme */ code[class*="language-"], pre[class*="language-"] { diff --git a/html-css.html b/html-css.html index d6cbdb4..0864422 100644 --- a/html-css.html +++ b/html-css.html @@ -25,64 +25,65 @@
    - +

    Стиль кода Академии HTML

    github.com/htmlacademy/codeguide

    -
    -
    -

    Оглавление

    -
    - - -
    -
    - -
    -

    HTML

    - -
    -
    -

    Синтаксис

    -
      -
    • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    • -
    • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
    • -
    • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
    • -
    • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
    • -
    • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
    • -
    -
    -
    -
    -
    <!DOCTYPE html>
    +    
    + + +
    +
    +

    HTML

    + +
    +
    +

    Синтаксис

    +
      +
    • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    • +
    • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
    • +
    • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
    • +
    • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
    • +
    • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
    • +
    +
    +
    +
    +
    <!DOCTYPE html>
     <html lang="ru">
       <head>
         <meta charset="utf-8">
    @@ -98,64 +99,64 @@ 

    Синтаксис

    </article> </body> </html>
    -
    -
    -
    - -
    -
    -

    Валидность

    -

    - Документ должен проходить проверку на валидность. Для проверки используется современный валидатор. -

    -
    -
    - -
    -
    -

    HTML-доктайп

    -

    - В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах. -

    -
    -
    -
    -
    <!DOCTYPE html>
    +              
    +
    +
    + +
    +
    +

    Валидность

    +

    + Документ должен проходить проверку на валидность. Для проверки используется современный валидатор. +

    +
    +
    + +
    +
    +

    HTML-доктайп

    +

    + В начале страницы обязательно должен быть указан актуальный doctype, чтобы браузер отображал её в режиме соответствия стандартам. Это гарантирует, что страница будет выглядеть единообразно во всех современных браузерах. +

    +
    +
    +
    +
    <!DOCTYPE html>
     <html lang="ru">
       <head>…</head>
       <body>…</body>
     </html>
    -
    -
    -
    - -
    -
    -

    Кодировка символов

    -

    - Кодировка символов на странице всегда должна быть явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна. -

    -
    -
    -
    -
    <head>
    +              
    +
    +
    + +
    +
    +

    Кодировка символов

    +

    + Кодировка символов на странице всегда должна быть явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна. +

    +
    +
    +
    +
    <head>
       <meta charset="utf-8">
       <title>Заголовок страницы</title>
     </head>
    -
    -
    -
    - -
    -
    -

    Подключение стилей

    -

    - Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию. -

    -
    -
    -
    -
    <!-- Хорошо: стилевой файл подключён в секции head -->
    +              
    +
    +
    + +
    +
    +

    Подключение стилей

    +

    + Стилевые файлы с помощью <link> подключаются внутри <head>. При этом атрибут type для тега <link> не указывается, так как его значение text/css устанавливается по умолчанию. +

    +
    +
    +
    +
    <!-- Хорошо: стилевой файл подключён в секции head -->
     <!DOCTYPE html>
     <html lang="ru">
       <head>
    @@ -172,23 +173,23 @@ 

    Подключение стилей

    <link rel="stylesheet" href="http://github.com/style.css"> </body> </html>
    -
    -
    -
    - -
    -
    -

    Подключение скриптов

    -

    - Скрипты должны подключаться в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого. -

    -

    - При подключении скриптов в теге <script> атрибут type не указывается, так как его значение text/javascript устанавливается по умолчанию. -

    -
    -
    -
    -
    <!-- Хорошо: скрипт подключается перед </body> -->
    +              
    +
    +
    + +
    +
    +

    Подключение скриптов

    +

    + Скрипты должны подключаться в самом низу страницы, чтобы при её загрузке не блокировать отображение содержимого. +

    +

    + При подключении скриптов в теге <script> атрибут type не указывается, так как его значение text/javascript устанавливается по умолчанию. +

    +
    +
    +
    +
    <!-- Хорошо: скрипт подключается перед </body> -->
     <!DOCTYPE html>
     <html lang="ru">
       <head>…</head>
    @@ -206,41 +207,41 @@ 

    Подключение скриптов

    </head> <body>…</body> </html>
    -
    -
    -
    - -
    -
    -

    Порядок атрибутов

    -

    - Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам. -

    -

    - Остальные атрибуты могут быть расставлены в любом порядке, но тоже единообразно для одинаковых элементов. -

    -
    -
    -
    -
    <a class="element element-big" id="element" href="http://github.com/" data-name="element">Ссылка</a>
    +              
    +
    +
    + +
    +
    +

    Порядок атрибутов

    +

    + Атрибут класса у HTML-элементов пишется первым. Единообразное написание помогает легче считывать код и быстрее разбираться в назначении блоков по их классам. +

    +

    + Остальные атрибуты могут быть расставлены в любом порядке, но тоже единообразно для одинаковых элементов. +

    +
    +
    +
    +
    <a class="element element-big" id="element" href="http://github.com/" data-name="element">Ссылка</a>
     
     <input class="form-control" type="text" name="test">
     
     <img class="pets-picture" src="http://github.com/cats.jpg" alt="Изображение котиков">
    -
    -
    -
    - -
    -
    -

    Логические атрибуты

    -

    - Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе. -

    -
    -
    -
    -
    <!-- checked="checked" необязательно -->
    +              
    +
    +
    + +
    +
    +

    Логические атрибуты

    +

    + Для логических атрибутов (например, checked, disabled, required) значение не указывается, а сами атрибуты указываются последними и в единообразной последовательности во всём документе. +

    +
    +
    +
    +
    <!-- checked="checked" необязательно -->
     <input type="checkbox" required checked>
     
     <input type="text" disabled>
    @@ -249,19 +250,19 @@ 

    Логические атрибуты

    <option value="1" selected>1</option> </select>
    -
    -
    - -
    -
    -

    Подписи полей ввода

    -

    - Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>. -

    -
    -
    -
    -
    <!-- Хорошо: элемент формы radio связан с подписью через идентификатор -->
    +            
    +
    + +
    +
    +

    Подписи полей ввода

    +

    + Для улучшения взаимодействия пользователя с элементами форм, при нажатии на подпись поля, оно должно активироваться. Для этого элемент формы связывается с его описанием с помощью идентификатора и атрибута for тега <label>. +

    +
    +
    +
    +
    <!-- Хорошо: элемент формы radio связан с подписью через идентификатор -->
     <input type="radio" id="choose">
     <label for="choose">Радио кнопка</label>
     
    @@ -272,23 +273,23 @@ 

    Подписи полей ввода

    <!-- Плохо: подпись не связана с элементом формы --> <input type="radio" id="choose"> Радио кнопка
    -
    -
    -
    - -
    -
    -

    Размеры картинок

    -

    - Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях. В случае пикселей размерность не нужна. -

    -

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

    -
    -
    -
    -
    <!-- Хорошо: размеры картинке заданы -->
    +              
    +
    +
    + +
    +
    +

    Размеры картинок

    +

    + Изображениям <img> должны быть явно заданы с помощью атрибута размеры в пикселях. В случае пикселей размерность не нужна. +

    +

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

    +
    +
    +
    +
    <!-- Хорошо: размеры картинке заданы -->
     <div class="logo-area">
       <img src="http://github.com/logo.png" alt="" width="300" height="150">
     </div>
    @@ -302,60 +303,60 @@ 

    Размеры картинок

    <div class="logo-area"> <img src="http://github.com/logo.png" alt=""> </div>
    -
    -
    -
    - -
    -
    -

    Атрибут языка

    -

    - Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила. -

    -
    -
    -
    -
    <!DOCTYPE html>
    +              
    +
    +
    + +
    +
    +

    Атрибут языка

    +

    + Для элемента <html> в атрибуте lang должен указываться соответствующий язык документа. Это помогает инструментам синтеза речи определить, какое использовать произношение или системам перевода, какие использовать языковые правила. +

    +
    +
    +
    +
    <!DOCTYPE html>
     <html lang="ru">
       <head>…</head>
       <body>…</body>
     </html>
    -
    -
    -
    -
    - -
    -

    CSS

    - -
    -
    -

    Синтаксис

    -
      -
    • После значения свойства обязательно ставится точка с запятой.
    • -
    • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    • -
    • Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
    • -
    • Названия тегов и свойств в правилах пишутся строчными буквами.
    • -
    • Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
    • -
    • Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
    • -
    • После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
    • -
    • После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
    • -
    • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
    • -
    • Каждое объявление в правиле пишется на новой строке.
    • -
    • Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки: -
      .selector {
      +              
    +
    +
    +
    + +
    +

    CSS

    + +
    +
    +

    Синтаксис

    +
      +
    • После значения свойства обязательно ставится точка с запятой.
    • +
    • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    • +
    • Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
    • +
    • Названия тегов и свойств в правилах пишутся строчными буквами.
    • +
    • Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
    • +
    • Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
    • +
    • После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
    • +
    • После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
    • +
    • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
    • +
    • Каждое объявление в правиле пишется на новой строке.
    • +
    • Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки: +
      .selector {
         color: #f5f5f5;
      -}
      -            
    • -
    • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
    • -
    • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
    • -
    • Для проверки CSS-кода используйте конфигурацию для настройки валидатора stylelint.
    • -
    • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
    • -
    -
    -
    -
    -
    /* Хорошо */
    +}
    + +
  • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
  • +
  • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
  • +
  • Для проверки CSS-кода используйте конфигурацию для настройки валидатора stylelint.
  • +
  • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
  • + +
    +
    +
    +
    /* Хорошо */
     .selector,
     .selector-secondary,
     .selector[type="text"] {
    @@ -366,45 +367,45 @@ 

    Синтаксис

    } /* Плохо */ -.selector, .selector-secondary, .selector[type=text]{ +.selector, .selector-secondary, .selector[type=text] { padding:15px; margin:0px 0px 15px; background-color:rgba(0,0,0,.5); box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF}
    -
    -
    -
    - -
    -
    -

    Порядок свойств

    -

    - Объявления логически связанных свойств группируются в следующем порядке: -

    -
      -
    1. Позиционирование
    2. -
    3. Блочная модель
    4. -
    5. Типографика
    6. -
    7. Оформление
    8. -
    9. Анимация
    10. -
    11. Разное
    12. -
    -

    - Позиционирование следует первым потому, что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков. -

    -

    - Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь. -

    -

    - Сгруппированные объявления в правиле отделяются друг от друга пустой строкой. -

    -

    - Порядок объявления подробных правил, таких как font-size, font-family, line-height, должен соответствовать порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой должна идти сокращённая версия. -

    -
    -
    -
    -
    .declaration-order {
    +              
    +
    +
    + +
    +
    +

    Порядок свойств

    +

    + Объявления логически связанных свойств группируются в следующем порядке: +

    +
      +
    1. Позиционирование
    2. +
    3. Блочная модель
    4. +
    5. Типографика
    6. +
    7. Оформление
    8. +
    9. Анимация
    10. +
    11. Разное
    12. +
    +

    + Позиционирование следует первым потому, что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков. +

    +

    + Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь. +

    +

    + Сгруппированные объявления в правиле отделяются друг от друга пустой строкой. +

    +

    + Порядок объявления подробных правил, таких как font-size, font-family, line-height, должен соответствовать порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой должна идти сокращённая версия. +

    +
    +
    +
    +
    .declaration-order {
       /* Позиционирование */
       position: absolute;
       top: 0;
    @@ -442,22 +443,22 @@ 

    Порядок свойств

    /* Разное */ will-change: auto; }
    -
    -
    -
    - -
    -
    -

    Имена классов

    -
      -
    • Имена классов пишутся строчными буквами, используется дефис (но не знаки нижнего подчёркивания или camelCase). Дефисы служат разделителями во взаимосвязанных классах (например, .button и .button-danger).
    • -
    • Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс: избегайте сокращений (единственное исключение — .btn для кнопок), но не делайте их слишком длинными (более трёх слов).
    • -
    • Для написания классов используются английские слова и термины. Транслитом названия классов и атрибутов не пишутся.
    • -
    -
    -
    -
    -
    /* Хорошо */
    +              
    +
    +
    + +
    +
    +

    Имена классов

    +
      +
    • Имена классов пишутся строчными буквами, используется дефис (но не знаки нижнего подчёркивания или camelCase). Дефисы служат разделителями во взаимосвязанных классах (например, .button и .button-danger).
    • +
    • Имена классов должны быть такими, чтобы по ним можно было быстро понять какому элементу страницы задан класс: избегайте сокращений (единственное исключение — .btn для кнопок), но не делайте их слишком длинными (более трёх слов).
    • +
    • Для написания классов используются английские слова и термины. Транслитом названия классов и атрибутов не пишутся.
    • +
    +
    +
    +
    +
    /* Хорошо */
     .alert-danger { … }
     .tweet .user-picture { … }
     .button { … }
    @@ -468,54 +469,54 @@ 

    Имена классов

    .t { … } .big_red_button { … } .knopka { … }
    -
    -
    -
    - -
    -
    -

    Правило @import

    -

    - Правило @import работает медленнее, чем тег <link>. В стилях @import не должен использоваться. -

    -
    -
    -
    -
    <!-- Хорошо: подключение тегом link -->
    +              
    +
    +
    + +
    +
    +

    Правило @import

    +

    + Правило @import работает медленнее, чем тег <link>. В стилях @import не должен использоваться. +

    +
    +
    +
    +
    <!-- Хорошо: подключение тегом link -->
     <link rel="stylesheet" href="http://github.com/module.css">
     
     <!-- Плохо -->
     <style>
       @import url("http://github.com/module.css");
     </style>
    -
    -
    -
    - -
    -
    -

    Варианты шрифта

    -

    - Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family. -

    -

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

    -

    - Порядок шрифтов следующий: -

    -
      -
    1. нестандартный шрифт;
    2. -
    3. веб-безопасный;
    4. -
    5. тип шрифта.
    6. -
    -

    - Список веб-безопасных шрифтов можно посмотреть здесь — cssfontstack.com. -

    -
    -
    -
    -
    /* Хорошо: указан альтернативный веб-безопасный шрифт и его тип семейства */
    +              
    +
    +
    + +
    +
    +

    Варианты шрифта

    +

    + Альтернативные варианты шрифта и тип семейства указываются в конце перечисления font-family. +

    +

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

    +

    + Порядок шрифтов следующий: +

    +
      +
    1. нестандартный шрифт;
    2. +
    3. веб-безопасный;
    4. +
    5. тип шрифта.
    6. +
    +

    + Список веб-безопасных шрифтов можно посмотреть здесь — cssfontstack.com. +

    +
    +
    +
    +
    /* Хорошо: указан альтернативный веб-безопасный шрифт и его тип семейства */
     body {
       font-family: "Helvetica", "Arial", sans-serif;
     }
    @@ -539,20 +540,20 @@ 

    Варианты шрифта

    body { font-family: "Helvetica", "Georgia", sans-serif; }
    -
    -
    -
    - -
    -
    -

    Доступное скрытие

    -

    - Для того, чтобы контент был скрыт от глаз, но доступен для скринридеров и поисковиков его нужно скрывать используя утилитарный класс visually-hidden. -

    -
    -
    -
    -
    /* Плохо: скрывать элемент с помощью font-size, display:none */
    +              
    +
    +
    + +
    +
    +

    Доступное скрытие

    +

    + Для того, чтобы контент был скрыт от глаз, но доступен для скринридеров и поисковиков его нужно скрывать используя утилитарный класс visually-hidden. +

    +
    +
    +
    +
    /* Плохо: скрывать элемент с помощью font-size, display:none */
     h1 {
       font-size: 0;
     }
    @@ -560,10 +561,10 @@ 

    Доступное скрытие

    .title { display: none; }
    -
    -
    -
    
    -/* Хорошо: использован класс visually-hidden */
    +              
    +
    +
    +
    /* Хорошо: использован класс visually-hidden */
     .visually-hidden {
       position: absolute;
       width: 1px;
    @@ -576,14 +577,14 @@ 

    Доступное скрытие

    clip: rect(0 0 0 0); overflow: hidden; }
    -
    -
    -
    
    -<h2 class="visually-hidden">Заголовок</h2>
    -
    -
    -
    -
    + +
    +
    <h2 class="visually-hidden">Заголовок</h2>
    +
    +
    +
    + +
    diff --git a/index.html b/index.html index 1de67ff..3bdabfb 100644 --- a/index.html +++ b/index.html @@ -26,7 +26,7 @@
    - +

    Стиль кода Академии HTML

    diff --git a/javascript.html b/javascript.html index 49792b1..f0a5de4 100644 --- a/javascript.html +++ b/javascript.html @@ -33,511 +33,523 @@
    - + -

    Стиль кода Академии HTML

    +

    Стиль кода Академии HTML

    github.com/htmlacademy/codeguide

    -
    -
    -

    Синтаксис

    +
    + + +
    +
    +

    Синтаксис

    -
    -
    -

    Отступы, пробелы и переносы

    +
    +
    +

    Отступы, пробелы и переносы

    -
    Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    +
    Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    -

    Для отступов используются два пробела. Знак табуляции не используется.

    +

    Для отступов используются два пробела. Знак табуляции не используется.

    -

    При переносах в продолжении строки используется четыре пробела

    +

    При переносах в продолжении строки используется четыре пробела

    -

    Запрещено одновременное использование табов и пробелов для отступов

    +

    Запрещено одновременное использование табов и пробелов для отступов

    -

    Для отступов ключевых слов, операторов и т. д. используется не более одного пробела

    -
    const name       = 1;
    -const longerName = 2;
    -
    +

    Для отступов ключевых слов, операторов и т. д. используется не более одного пробела

    +
    const name       = 1;
    +const longerName = 2;
    -
    const name = 1;
    -const longerName = 2;
    -
    +
    const name = 1;
    +const longerName = 2;
    -

    Открывающие скобки блоков кода находятся на одной строке с оператором, который их использует:

    -
    if (condition)
    +              

    Открывающие скобки блоков кода находятся на одной строке с оператором, который их использует:

    +
    if (condition)
     {
       // code
    -}
    -
    +}
    -
    if (condition) {
    +              
    if (condition) {
       // code
    -}
    -
    -

    В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом

    +}
    +

    В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом

    -

    В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после открывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

    +

    В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после открывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

    -

    После запятой всегда должен ставиться пробел, если запятая не в конце строки

    +

    После запятой всегда должен ставиться пробел, если запятая не в конце строки

    -

    Обязательно переносить запятую на новую строку при объявлении массивов и объектов. Обязательно использовать запятую в конце списков, объектов или перечислений параметров функции

    -
    const foo = {
    -    a: 1,
    -    b: 2
    +              

    Обязательно переносить запятую на новую строку при объявлении массивов и объектов. Обязательно использовать запятую в конце списков, объектов или перечислений параметров функции

    +
    const foo = {
    +  a: 1,
    +  b: 2
     };
     
     const bar = [
    -    1,
    -    2
    +  1,
    +  2
     ];
    -
    const foo = {
    -    a: 1,
    -    b: 2,
    +              
    const foo = {
    +  a: 1,
    +  b: 2,
     };
     
     const bar = [
    -    1,
    -    2,
    +  1,
    +  2,
     ];
    -

    Файл должен заканчиваться пустой строкой

    +

    Файл должен заканчиваться пустой строкой

    -

    Строка не должна заканчиваться пробелами

    +

    Строка не должна заканчиваться пробелами

    -

    В однострочных объектах и при деструктуризации фигурные скобки не отделяются пробелами от содержимого

    -
    const foo = { a: 1 };
    -
    +

    В однострочных объектах и при деструктуризации фигурные скобки не отделяются пробелами от содержимого

    +
    const foo = { a: 1 };
    -
    const foo = {a: 1};
    -
    +
    const foo = {a: 1};
    -
    const { a, b } = someObject;
    -
    +
    const { a, b } = someObject;
    -
    const {a, b} = someObject;
    -
    +
    const {a, b} = someObject;
    -

    Смысловые блоки кода отделяются друг от друга не более чем двумя пустыми строками

    +

    Смысловые блоки кода отделяются друг от друга не более чем двумя пустыми строками

    -

    В качестве символа переноса строки используется стандартный символ, который используется в системе

    +

    В качестве символа переноса строки используется стандартный символ, который используется в системе

    -

    При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы

    +

    При объявлении вычисляемых ключей в объектах с помощью синтаксиса ES2016 в квадратных скобках не используются пробелы

    -

    Оператор вызова функции () отделяется пробелом от названия функции

    +

    Оператор вызова функции () отделяется пробелом от названия функции

    -

    В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено

    +

    В объектах после объявления ключа не ставится пробел. После двоеточия, которое отделяет в объектах ключ от значения может стоять только один пробел, выравнивать несколько значений при объявлении многострочного объекта запрещено

    -

    Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.

    +

    Ключевые слова отделяются пробелами. Правило касается всех блоков, которые не оговорены отдельно в других правилах. В частности ключевые слова должны отделяться пробелами для условных операторов, циклов, операторов множественного выбора, блоков try..catch, объявлений классов и т. д.

    -

    В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)

    +

    В блоках кода первая и последняя строка не должны быть пустыми (код не отбивается от начала блока кода)

    -

    После двоеточий и точек с запятыми ставятся пробелы. Перед ними — не ставятся

    +

    После двоеточий и точек с запятыми ставятся пробелы. Перед ними — не ставятся

    -

    Перед скобками начинающими новый блок кода должен ставиться пробел

    +

    Перед скобками начинающими новый блок кода должен ставиться пробел

    -

    В комментариях текст отбивается пробелом от начала комментария

    +

    В комментариях текст отбивается пробелом от начала комментария

    -

    При создании генераторов, звездочка идёт сразу после ключевого слова function без пробелов

    +

    При создании генераторов, звездочка идёт сразу после ключевого слова function без пробелов

    -

    Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда

    +

    Звездочка после ключевого слова yield не отбивается пробелом. После звездочки пробел ставится всегда

    -

    В spread-операторе точки не отделяются от названия коллекции

    -
    -
    +

    В spread-операторе точки не отделяются от названия коллекции

    +
    +
    -
    -
    -

    Строки

    -

    В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

    +
    +
    +

    Строки

    +

    В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

    -

    В строках запрещено указывать код спецсимволов в восьмеричной системе счисления

    -
    const foo = "Copyright \251";
    -
    +

    В строках запрещено указывать код спецсимволов в восьмеричной системе счисления

    +
    const foo = "Copyright \251";
    -
    const foo = "Copyright \u00A9";
    -
    +
    const foo = "Copyright \u00A9";
    -

    При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними

    +

    При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними

    -

    В строках используются двойные кавычки. Разрешено использовать строковые шаблоны. Предпочтение отдается строковым шаблонам

    -
    -
    +

    В строках используются двойные кавычки. Разрешено использовать строковые шаблоны. Предпочтение отдается строковым шаблонам

    +
    +
    -
    -
    -

    Числа

    -

    В числах запрещено опускать ноль в дробной и целой части

    +
    +
    +

    Числа

    +

    В числах запрещено опускать ноль в дробной и целой части

    -

    Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления

    -
    -
    +

    Запрещено использовать ведущий ноль при создании чисел, поскольку это приводит к созданию числа в восьмеричной системе счисления

    +
    +
    -
    -
    -

    Литералы

    -

    Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины

    +
    +
    +

    Литералы

    +

    Массивы должны создаваться через литерал массива, а не через конструктор. Допустимое исключение — создание массива определенной длины

    -

    Объекты должны создаваться через литерал объекта, а не через конструктор

    +

    Объекты должны создаваться через литерал объекта, а не через конструктор

    -

    При создании объектов запрещено дублирование ключей

    +

    При создании объектов запрещено дублирование ключей

    -

    При описании функций запрещено дублировать названия параметров

    +

    При описании функций запрещено дублировать названия параметров

    -

    В операторе switch запрещено дублировать условия (case)

    -
    -
    +

    В операторе switch запрещено дублировать условия (case)

    +
    +
    -
    -
    -

    Операторы

    -

    В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами

    +
    +
    +

    Операторы

    +

    В бинарных и тернарных операторах операнды и символы оператора отделяются пробелами

    -

    Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof

    -
    -
    +

    Унарные операторы не отделяются от операнда пробелом. Исключения составляют операторы, состоящие из слов, а не символов, например оператор typeof

    +
    +
    -
    +
    -
    -

    Именование

    +
    +

    Именование

    -
    -
    -

    Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в константном регистре (CONSTANT_CASE) и названия классов, функций-конструкторов и перечислений, которые именуются с заглавной буквы (PascalCase)

    +
    +
    +

    Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в константном регистре (CONSTANT_CASE) и названия классов, функций-конструкторов и перечислений, которые именуются с заглавной буквы (PascalCase)

    -

    Запрещено использовать имена переменных, которые используются во внешних областях видимости

    +

    Запрещено использовать имена переменных, которые используются во внешних областях видимости

    -

    Запрещено называть переменные и свойства ключевыми словами JS

    +

    Запрещено называть переменные и свойства ключевыми словами JS

    -

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как к свойству объекта window

    +

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как к свойству объекта window

    -

    Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Исключение составляет явная передача undefined при вызове функции вместо аргумента, чтобы использовать значение параметра по умолчанию

    -
    -
    +

    Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Исключение составляет явная передача undefined при вызове функции вместо аргумента, чтобы использовать значение параметра по умолчанию

    +
    +
    -
    +
    -
    -

    Предотвращение ошибок

    +
    +

    Предотвращение ошибок

    -
    -
    -

    Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI (Automatic Semicolon Insertion)

    +
    +
    +

    Все точки с запятой должны быть проставлены явно, не стоит рассчитывать на автоматическую расстановку точек с запятой ASI (Automatic Semicolon Insertion)

    -

    Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит

    +

    Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит

    -

    Обязательно используются блоки кода даже если в выражении содержится одна строчка

    +

    Обязательно используются блоки кода даже если в выражении содержится одна строчка

    -

    В коде нет пустых блоков кода

    +

    В коде нет пустых блоков кода

    -

    Код работает в строгом режиме: в начале всех файлов явно прописана директива "use strict" или используются модули ECMAScript, которые по умолчанию работают в строгом режиме

    -
    -
    +

    Код работает в строгом режиме: в начале всех файлов явно прописана директива "use strict" или используются модули ECMAScript, которые по умолчанию работают в строгом режиме

    +
    +
    -
    -
    -

    Условные операторы

    -

    Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоборот.

    -
    if (1 === myValue) { /*...*/ }
    -
    +
    +
    +

    Условные операторы

    +

    Запрещена «проверка Йоды» — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоборот.

    +
    if (1 === myValue) { /*...*/ }
    -
    if (myValue === 1) { /*...*/ }
    -
    -

    При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения

    +
    if (myValue === 1) { /*...*/ }
    +

    При сравнении двух значений используется оператор строгого сравнения вместо оператора нестрогого сравнения

    -

    В условных операторах не используется оператор присвоения

    +

    В условных операторах не используется оператор присвоения

    -

    В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок

    +

    В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок

    -

    Запрещено сравнение с NaN. Для проверки, является ли результат операции числовым, нужно использовать Number.isNaN

    +

    Запрещено сравнение с NaN. Для проверки, является ли результат операции числовым, нужно использовать Number.isNaN

    -

    Запрещено использовать case без break или return в блоках switch

    +

    Запрещено использовать case без break или return в блоках switch

    -

    Не используются вложенные тернарные операторы

    -
    -
    +

    Не используются вложенные тернарные операторы

    +
    +
    -
    -
    -

    Функции

    -

    Если в функции используется ветвление, в котором есть возврат значения, то return должен быть добавлен и в остальных ветках.

    +
    +
    +

    Функции

    +

    Если в функции используется ветвление, в котором есть возврат значения, то return должен быть добавлен и в остальных ветках.

    -
    const doThings = function() {
    +              
    const doThings = function() {
       if (cond) {
         return 1;
       } else {
         doSomethingElse();
       }
    -};
    -
    +};
    -
    const doThings = function() {
    +              
    const doThings = function() {
       if (cond) {
         return 1;
       } else {
         return doSomethingElse();
       }
    -};
    -
    +};
    -

    Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. В первом примере, функция do может вернуть значение 1, а может undefined

    +

    Это правило предотвращает создание функций, при использовании которых непонятно, вернут ли они какое-то значение. В первом примере, функция do может вернуть значение 1, а может undefined

    -

    Единственное исключение — использование return без значения для прекращения работы функции:

    +

    Единственное исключение — использование return без значения для прекращения работы функции:

    -
    const doThings = function() {
    +              
    const doThings = function() {
       if (cond) {
         doSomething()
         return;
       }
     
       doSomethingElse();
    -};
    -
    +};
    -

    В return не используется оператор присваивания

    +

    В return не используется оператор присваивания

    -

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

    -
    -
    +

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

    +
    +
    -
    -
    -

    Операторы

    -

    В конструкторе классов-наследников обязательно вызывается super()

    +
    +
    +

    Операторы

    +

    В конструкторе классов-наследников обязательно вызывается super()

    -

    В конструкторе нет обращения к this до того, как будет вызван super()

    -
    -
    +

    В конструкторе нет обращения к this до того, как будет вызван super()

    +
    +
    -
    -
    -

    Объявление переменных и функций

    -

    При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой ECMAScript 2015

    +
    +
    +

    Объявление переменных и функций

    +

    При объявлении переменных предпочтение отдается ключевым словам let и const. Переменные объявляются через var только при наличии проблем с поддержкой ECMAScript 2015

    -

    Запрещено переопределять с помощью ключевого слова ранее созданные переменные

    +

    Запрещено переопределять с помощью ключевого слова ранее созданные переменные

    -

    Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const.

    -
    const a = 1, b = 2;
    -
    +

    Запрещено использовать множественное объявление через одно ключевое слово. Для каждой переменной используется отдельный var, let или const.

    +
    const a = 1, b = 2;
    -
    const a = 1;
    -const b = 2;
    -
    -

    Объявление функций

    -

    Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration)

    -
    function myFunc() {};
    -myFunc = 2;
    -
    +
    const a = 1;
    +const b = 2;
    +

    Объявление функций

    +

    Запрещено переопределение функций, созданных с помощью функционального объявления (function declaration)

    +
    function myFunc() {};
    +myFunc = 2;
    -

    Новые функции не создаются с помощью конструктора Function

    +

    Новые функции не создаются с помощью конструктора Function

    -

    Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка

    +

    Вместо коллекции arguments, используется rest-оператор, если это позволяет версия языка

    -

    Для превращения массива с данными в аргументы вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка

    -
    Math.max.apply(null, [1, 100, 15, 1000]);
    -
    +

    Для превращения массива с данными в аргументы вместо вызова функции через apply используется spread-оператор, если это позволяет версия языка

    +
    Math.max.apply(null, [1, 100, 15, 1000]);
    -
    Math.max(...[1, 100, 15, 1000]);
    -
    +
    Math.max(...[1, 100, 15, 1000]);
    -

    Создание значений

    -

    Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()

    +

    Создание значений

    +

    Не вызываются служебные конструкторы, создающие объекты из глобальной области видимости Math(), JSON(), Reflect()

    -

    При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)

    +

    При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)

    -

    При создании непустых объектов и массивов не используются «висячие» запятые

    +

    При создании непустых объектов и массивов не используются «висячие» запятые

    -

    Для создания новых значений не используются конструкторы примитивов String, Number, Boolean

    +

    Для создания новых значений не используются конструкторы примитивов String, Number, Boolean

    -

    Конструкторы вызываются со скобками, даже если у них нет параметров

    +

    Конструкторы вызываются со скобками, даже если у них нет параметров

    -

    Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new

    -
    -
    +

    Символы (Symbol) создаются вызовом функции Symbol без ключевого слова new

    +
    +
    -
    -
    -

    Хорошие практики

    -

    Не используется конструкция with

    +
    +
    +

    Хорошие практики

    +

    Не используется конструкция with

    -

    Не используются alert

    +

    Не используются alert

    -

    Не используется выполнение кода через eval

    +

    Не используется выполнение кода через eval

    -

    Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout

    +

    Не используется неявный eval — в функциях, которые поддерживают передачу исполняемого кода как строку, например setTimeout

    -

    В ссылках используется протокол javascript:

    +

    В ссылках используется протокол javascript:

    -

    Конструкторы не используются без ключевого слова new

    +

    Конструкторы не используются без ключевого слова new

    -

    В функциях не используются обращения к caller и callee

    +

    В функциях не используются обращения к caller и callee

    -

    Манкипатчинг

    +

    Манкипатчинг

    -

    Встроенные в язык объекты и прототипы не расширяются в рантайме

    +

    Встроенные в язык объекты и прототипы не расширяются в рантайме

    -

    Не переопределяются глобальные значения (undefined, null, Object, window и прочие)

    +

    Не переопределяются глобальные значения (undefined, null, Object, window и прочие)

    -

    Контекст

    -

    bind не используется вне методов классов

    +

    Контекст

    +

    bind не используется вне методов классов

    -

    В функциях, которые не являются методами никакого объекта или класса не используется this

    +

    В функциях, которые не являются методами никакого объекта или класса не используется this

    -

    Переменные

    -

    Переменные, объявленные через var не удаляются оператором delete

    -
    -
    +

    Переменные

    +

    Переменные, объявленные через var не удаляются оператором delete

    +
    +
    -
    -
    -

    Приведение типов

    -

    Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора

    +
    +
    +

    Приведение типов

    +

    Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях if, while, for, в первом операнде тернарного оператора

    -

    Оператор typeof используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения typeof

    +

    Оператор typeof используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения typeof

    -

    В parseInt обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления

    +

    В parseInt обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления

    -

    Константы в условиях

    +

    Константы в условиях

    -

    В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда

    -
    if (true) {}
    -
    +

    В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда

    +
    if (true) {}
    -
    if (a > 1) {}
    -
    +
    if (a > 1) {}
    -
    const ternaryValue = true ? 'a' : 'b';
    -
    +
    const ternaryValue = true ? 'a' : 'b';
    -
    const ternaryValue = isA() ? 'a' : 'b';
    -
    -
    -
    +
    const ternaryValue = isA() ? 'a' : 'b';
    +
    +
    -
    +
    -
    -

    Чистый код

    +
    +

    Чистый код

    -
    -
    -

    Лишние символы

    -

    Не используются лишние (множественные) точки с запятой

    -
    -
    +
    +
    +

    Лишние символы

    +

    Не используются лишние (множественные) точки с запятой

    +
    +
    -
    -
    -

    Отладчик и консоль

    -

    В коде не используется оставленных выводов в консоль

    +
    +
    +

    Отладчик и консоль

    +

    В коде не используется оставленных выводов в консоль

    -

    В коде нет забытых инструкций debugger

    -
    -
    +

    В коде нет забытых инструкций debugger

    +
    +
    -
    -
    -

    Неиспользуемый код

    -

    В проекте нет недоступного кода, который никогда не выполнится

    -
    if (false) {
    +          
    +
    +

    Неиспользуемый код

    +

    В проекте нет недоступного кода, который никогда не выполнится

    +
    if (false) {
       doSomething();
    -}
    -
    +}
    -
    if (needToDoSomething()) {
    +              
    if (needToDoSomething()) {
       doSomething();
    -}
    -
    +}
    -

    В коде нет объявленных, но неиспользуемых переменных

    -
    -
    +

    В коде нет объявленных, но неиспользуемых переменных

    + + -
    -
    -

    Обработка ошибок и исключения

    -

    Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.

    -
    throw 'Passed value is out of range';
    -
    +
    +
    +

    Обработка ошибок и исключения

    +

    Для выбрасывания исключения в оператор throw передаются только объекты Error. Передавать литералы запрещено.

    +
    throw 'Passed value is out of range';
    -
    throw new RangeError('Passed value is out of range');
    -
    +
    throw new RangeError('Passed value is out of range');
    -

    В конструкции try..catch запрещен пустой блок catch

    -
    -
    +

    В конструкции try..catch запрещен пустой блок catch

    +
    +
    -
    +
    -
    -

    Прочее

    +
    +

    Прочее

    -
    -
    -

    При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty

    +
    +
    +

    При итерировании по объектам через for..in при работе со свойствами используется конструкция hasOwnProperty

    -

    В объектах напрямую не переопределяется свойство __iterator__

    +

    В объектах напрямую не переопределяется свойство __iterator__

    -

    В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя

    -
    const obj = {
    +              

    В объектах напрямую не переопределяется свойство __proto__. Разрешено переопределять __proto__ через Object.create или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать __proto__ нельзя

    +
    const obj = {
       __proto__: Parent
    -};
    -
    +};
    -
    const Obj = function() {};
    +              
    const Obj = function() {};
     Obj.prototype = new Parent();
     const obj = new obj;
     
    -const obj = Object.create(Parent.prototype);
    -
    +const obj = Object.create(Parent.prototype);
    -

    В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду

    +

    В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду

    -

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

    +

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

    -

    В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

    -
    const result = (1, 2); // 2
    -
    +

    В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

    +
    const result = (1, 2); // 2
    -
    const result = 2;
    -
    -
    -
    switch (val = getVal(), val) {}
    -
    +
    const result = 2;
    +
    +
    switch (val = getVal(), val) {}
    -
    val = getVal();
    +              
    val = getVal();
     switch(val) {}
     
    -for (let i = 0, l = 100; i < l; i++);
    -
    -
    -
    +for (let i = 0, l = 100; i < l; i++); +
    +
    -
    -
    -

    Регулярные выражения

    -

    В регулярных выражениях не используются «управляющие выражения»

    +
    +
    +

    Регулярные выражения

    +

    В регулярных выражениях не используются «управляющие выражения»

    -

    В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)

    +

    В регулярных выражениях не используются пустые классы символов [] (блоки, ограниченные квадратными скобками)

    -

    В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение

    +

    В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение

    -

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

    -
    /   /.exec(myString);
    -
    +

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

    +
    /   /.exec(myString);
    -
    /\s\s\s/.exec(myString);
    -
    +
    /\s\s\s/.exec(myString);
    -
    /\s{3}/.exec(myString);
    -
    -
    -
    - -
    +
    /\s{3}/.exec(myString);
    + + +
    +
    From ce57950bacd45cff64e3840c918a0865a5030971 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Thu, 11 Feb 2021 11:13:28 +0300 Subject: [PATCH 065/103] =?UTF-8?q?=D0=A7=D0=B8=D0=BD=D0=B8=D1=82=20=D0=BD?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=87=D1=83=D1=8E=20=D1=81=D1=81?= =?UTF-8?q?=D1=8B=D0=BB=D0=BA=D1=83=20(#51)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index 0864422..b19d829 100644 --- a/html-css.html +++ b/html-css.html @@ -78,7 +78,7 @@

    Синтаксис

  • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
  • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
  • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
  • -
  • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
  • +
  • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
  • From 3297d66fb351136dad3f2cdbf87067e9d14039ef Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 16 Feb 2021 13:19:42 +0300 Subject: [PATCH 066/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=BE=20=D0=BA=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=B8=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 90 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/html-css.html b/html-css.html index b19d829..53a3d83 100644 --- a/html-css.html +++ b/html-css.html @@ -37,6 +37,14 @@

    Стиль кода Академии HTML

    Оглавление

    + +
    @@ -908,7 +912,6 @@

    Подключение шрифтов

    -

    Варианты шрифта

    @@ -960,6 +963,116 @@

    Варианты шрифта

    +
    +
    +

    !important

    +
      +
    • Ключевое слово !important не должно использоваться для борьбы со специфичностью.
    • +
    • Универсальные классы-хелперы могут использовать !important.
    • +
    +
    +
    +
    +
    /* Правильно */
    +.visually-hidden {
    +  position: absolute !important;
    +  width: 1px !important;
    +  height: 1px !important;
    +  margin: -1px !important;
    +  border: 0 !important;
    +  padding: 0 !important;
    +  clip: rect(0 0 0 0) !important;
    +  overflow: hidden !important;
    +}
    +
    +/* Неправильно */
    +.element {
    +  font-size: 17px !important;
    +}
    +
    +
    +
    +
    + +
    +
    +

    Повторяющиеся свойства

    +
      +
    • Свойства не должны повторяться в рамках одной декларации.
    • +
    • Свойство может повторяться, если раньше описан сброс или общий случай.
    • +
    +
    +
    +
    +
    /* Правильно */
    +.block {
    +  margin: 0;
    +  margin-left: 20px;
    +  border: 10px solid #000000;
    +  border-bottom-color: #ff0000;
    +}
    +
    +/* Неправильно */
    +.block {
    +  margin-left: 10px;
    +  border-left: 10px solid #000000;
    +  margin-left: 20px;
    +  border-left: 10px solid #ff0000;
    +}
    +
    +
    +
    +
    + +
    +
    +

    Формат цветов

    +
      +
    • Цвета должны записываться строчными в 6-значном формате HEX.
    • +
    • Цвета могут записываться функциями rgba или hsla, если нужна прозрачность.
    • +
    +
    +
    +
    +
    /* Правильно */
    +.block {
    +  background-color: #ff0000;
    +  border-left-color: #00ff00;
    +  color: rgba(0, 0, 0, 0.5);
    +}
    +
    +/* Неправильно */
    +.block {
    +  background-color: #F00;
    +  border-left-color: rgb(0, 255, 0);
    +  color: black;
    +}
    +
    +
    +
    +
    + +
    +
    +

    Дробные значения

    +

    В дробных значениях не должно быть больше двух знаков после точки.

    +
    +
    +
    +
    /* Правильно */
    +.block {
    +  width: 2.33%;
    +}
    +
    +/* Неправильно */
    +.block {
    +  width: 2.33333%;
    +}
    +
    +
    +
    +
    +

    Доступное скрытие

    From e6c93d4064b2473096c19d6bbce460015ee8d9fa Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 17 Feb 2021 10:57:57 +0300 Subject: [PATCH 075/103] =?UTF-8?q?Revert=20"=D0=A7=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=87=D1=83=D1=8E?= =?UTF-8?q?=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20(#51)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 605 ++++---------------------------------------------- 1 file changed, 38 insertions(+), 567 deletions(-) diff --git a/html-css.html b/html-css.html index ebe30c4..b19d829 100644 --- a/html-css.html +++ b/html-css.html @@ -37,31 +37,9 @@

    Стиль кода Академии HTML

    Оглавление

    - -
    -
    -

    Код

    - -
    -
    -

    Группировка файлов

    -
      -
    • Файлы схожих типов должны быть сгруппированы в папки: картинки, стили, скрипты, шрифты.
    • -
    • Если внутри папок файлов становится много или выделяются подгруппы, можно добавить вложенные папки.
    • -
    -
    -
    -
    -
    <!-- Правильно -->
    -barbershop/
    -  pictures/
    -    catalog/
    -      wine.jpg
    -      cheese.png
    -    product/
    -      wine-big.jpg
    -      cheese-big.png
    -  images/
    -    logo.svg
    -    favicons/
    -      32x32.png
    -      16x16.png
    -    content/
    -      cat.jpg
    -      map.png
    -  scripts/
    -    menu.js
    -    map.js
    -  styles/
    -    styles.css
    -  catalog.html
    -  index.html
    -
    -<!-- Неправильно -->
    -barbershop/
    -  assets/
    -    logo.svg
    -    icon-32x32.png
    -    icon-16x16.png
    -    menu.js
    -    map.js
    -    header.css
    -    footer.css
    -    index.css
    -    fonts.css
    -  index.html
    -                
    -
    -
    -
    - -
    -
    -

    Форматирование кода

    -

    Код проекта должен соответствовать параметрам EditorConfig, описанным в файле .editorconfig проекта.

    -
    -
    -
    -
    <!-- Правильно-->
    -<ul>
    -∙∙<li>Пункт</li>
    -∙∙<li>Пункт</li>
    -</ul>
    -
    -<!-- Неправильно-->
    -<ul>
    -→ <li>Пункт</li>
    -∙∙∙∙<li>Пункт</li>∙∙∙∙∙∙∙
    -</ul>
    -
    -
    -
    - -
    -

    HTML

    -

    Регистр тегов и атрибутов

    -

    Имена тегов, атрибуты и их значения должны быть записаны строчными.

    -

    Исключение: атрибуты, которые требуют другого написания, например viewBox

    -
    -
    -
    -
    <!-- Правильно -->
    -<ul>
    -  <li>Первый</li>
    -  <li>Второй</li>
    -  <li>Третий</li>
    -</ul>
    -
    -<img class="image" src="http://github.com/images/picture.png" width="400" height="400" alt="Кот смотрит на солнышко.">
    -
    -<!-- Неправильно -->
    -<UL>
    -  <LI>Первый
    -  <LI>Второй
    -  <LI>Третий
    -</UL>
    -
    -<IMG class="IMAGE" SRC="images/picture.png" WIDTH="400" HEIGHT="400" ALT="Кот смотрит на солнышко.">
    -                
    -
    -
    -
    - -
    -
    -

    Двойные теги

    -

    Двойные теги должны иметь открывающий и закрывающий теги.

    -
    -
    -
    -
    <!-- Правильно -->
    -<ul>
    -  <li>Первый</li>
    -  <li>Второй</li>
    -  <li>Третий</li>
    -</ul>
    -
    -<!-- Неправильно -->
    -<ul>
    -  <li>Первый
    -  <li>Второй
    -  <li>Третий
    -</ul>
    -                
    -
    -
    -
    - -
    -
    -

    Одиночные теги

    -

    Одиночные теги не должны иметь закрывающий тег или слэш.

    -
    -
    -
    -
    <!-- Правильно -->
    -<img src="http://github.com/images/picture.png" width="400" height="400" alt="Кот смотрит на солнышко.">
    -
    -<input type="text" name="name">
    -
    -<!-- Неправильно -->
    -<img src="http://github.com/images/picture.png" width="400" height="400" alt="Кот смотрит на солнышко." />
    -
    -<input type="text"></input>
    -                
    -
    -
    -
    - -
    -
    -

    Порядок атрибутов

    +

    Синтаксис

      -
    • Атрибуты должны идти в одном порядке, чтобы упростить их чтение.
    • -
    • Атрибут class должен идти сразу после имени тега.
    • +
    • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    • +
    • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
    • +
    • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
    • +
    • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
    • +
    • Для проверки HTML-кода используйте файл конфигурации .htmlhintrc для настройки валидатора HTMLHint.
    -
    <!-- Правильно -->
    -<label class="field-group-label" for="appointment-phone">
    -<input class="field-group-input field" type="text" id="appointment-phone" placeholder="+7 000-00-00">
    -
    -<label class="field-group-label" for="appointment-date">
    -<input class="field-group-input field" type="text" id="appointment-date" placeholder="01.01.2020">
    -
    -<!-- Неправильно -->
    -<label for="appointment-phone" class="field-group-label">
    -<input class="field-group-input field" type="text" placeholder="+7 000-00-00" id="appointment-phone" >
    -
    -<label for="appointment-date" class="field-group-label">
    -<input id="appointment-date" class="field-group-input field" type="text" placeholder="01.01.2020">
    -                
    -
    -
    -
    - -
    -
    -

    Одиночные атрибуты

    -

    Одиночные атрибуты должны быть записаны без значения.

    -
    -
    -
    -
    <!-- Правильно -->
    -<input type="text" disabled required>
    -
    -<!-- Неправильно -->
    -<input type="text" disabled="disabled" required="required">
    -                
    -
    -
    -
    - -
    -
    -

    Форматирование атрибутов

    -

    В записи атрибутов не должно быть пробелов вокруг знака «равно» =

    -
    -
    -
    -
    <!-- Правильно -->
    -<input class="field-group-input field" type="text" id="appointment-date" placeholder="01.01.2020">
    -
    -<!-- Неправильно -->
    -<input class = "field-group-input field" type = "text" id = "appointment-date" placeholder = "01.01.2020">
    -                
    -
    -
    -
    - -
    -
    -

    Кавычки в атрибутах

    -

    Значения атрибутов должны быть в двойных кавычках.

    -
    -
    -
    -
    <!-- Правильно -->
    -<input class="field-group-input field" type="text" id="appointment-date" placeholder="01.01.2020">
    -
    -<!-- Неправильно -->
    -<input class='field-group-input field' type='text' id='appointment-date' placeholder='01.01.2020'>
    -
    -<input class=field-group-input type=text id=appointment-date placeholder=01.01.2020>
    -                
    -
    -
    -
    - -
    -
    -

    Кавычки в значениях атрибутов

    -

    Вложенные кавычки в значениях должны быть одиночными.

    -
    -
    -
    -
    <!-- Правильно -->
    -<button class="button" type="button" onclick="show('menu')">
    -  Меню
    -</button>
    -
    -<!-- Неправильно -->
    -<button class="button" type="button" onclick="show("menu")">
    -  Меню
    -</button>
    -                
    -
    -
    -
    - -
    -
    -

    Единицы измерения в атрибутах

    -

    В атрибутах не должно быть единиц измерения.

    -
    -
    -
    -
    <!-- Правильно -->
    -<img src="http://github.com/images/picture.png" width="400" height="400" alt="Кот смотрит на солнышко.">
    -
    -<!-- Неправильно -->
    -<img src="http://github.com/images/picture.png" width="400px" height="400px" alt="Кот смотрит на солнышко.">
    -                
    -
    -
    -
    - -
    -
    -

    Разделители в имени класса

    -

    Разделителями в имени класса должны быть только дефисы - и подчёркивания _. В коде необходимо придерживаться одного стиля.

    -
    -
    -
    -
    <!-- Правильно -->
    -<input class="form-input form-input-field" type="text">
    -<input class="form_input form_input_field" type="text">
    -<input class="form__input form-input__field" type="text">
    -<input class="form--input form-input--field" type="text">
    -
    -<!-- Неправильно -->
    -<input class="formInput formInputField" type="text">
    -<input class="form-input form_input_field" type="text">
    -                
    -
    -
    -
    - -
    -
    -

    Форматирование тегов

    -
      -
    • Вложенность тегов должна обозначаться переносами и отступами.
    • -
    • Каждый новый вложенный тег должен переноситься на отдельную строку с отступом.
    • -
    • Текст внутри тегов должен оставаться на одной строке с тегами.
    • -
    -
    -
    -
    -
    <!-- Правильно -->
    -<div class="menu">
    -  <ul>
    -    <li>
    -      <a href="">Первый</a>
    -    </li>
    -    <li>
    -      <a href="">Второй</a>
    -    </li>
    -    <li>
    -      <a href="">Третий</a>
    -    </li>
    -  </ul>
    -</div>
    -
    -<!-- Неправильно -->
    -<div class="menu"><ul>
    -  <li><a href="">Первый</a></li>
    -  <li><a href="">
    -    Второй
    -  </a></li>
    -  <li><a href="">Третий</a></li>
    -</ul></div>
    -                
    -
    -
    -
    - -
    -
    -

    Базовые части разметки

    -
      -
    • Современный тип документа <!DOCTYPE html>
    • -
    • Корневой элемент <html> с языком документа lang
    • -
    • Метаинформация <head>
    • -
    • Заголовок документа <title>
    • -
    • Кодировка документа <meta charset="utf-8">
    • -
    • Тело документа <body>
    • -
    -
    -
    -
    -
    <!-- Правильно -->
    -<!DOCTYPE html>
    +                
    <!DOCTYPE html>
     <html lang="ru">
       <head>
         <meta charset="utf-8">
    -    <title>Заголовок</title>
    +    <title>Страница о коте</title>
       </head>
    -  <body>Страница</body>
    -</html>
    -
    -<!-- Неправильно -->
    -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    -<html>
    -  <title>Заголовок</title>
    -  Страница
    -</html>
    -
    -
    -
    -
    - -
    -
    -

    Атрибут method в форме

    -

    В атрибуте method должен быть указан тип отправки данных.

    -
    -
    -
    -
    <!-- Правильно -->
    -<form method="post"></form>
    -<form method="get"></form>
    -
    -<!-- Неправильно -->
    -<form method=""></form>
    -<form></form>
    -                
    + <body> + <article class="post"> + <h1>Красивый кот</h1> + <figure class="post-item"> + <img src="http://github.com/cat.jpg" alt="Изображение кота"> + <figcaption>Кот красив!</figcaption> + </figure> + </article> + </body> +</html>
    @@ -716,22 +333,25 @@

    CSS

    Синтаксис

      -
    • Селекторы и свойства должны записываться строчными буквами.
    • -
    • Селекторы, разделённые запятой, должны записываться на новых строках.
    • -
    • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
    • -
    • Перед открывающейся фигурной скобкой должен быть пробел. После скобки запись идёт с новой строки.
    • -
    • Свойства должны стоять на отдельных строках.
    • -
    • Свойства внутри блока должны иметь один внутренний отступ.
    • -
    • После двоеточия должен быть пробел. Перед двоеточием пробел не нужен.
    • -
    • В конце объявления должна быть точка с запятой.
    • +
    • После значения свойства обязательно ставится точка с запятой.
    • +
    • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    • Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
    • +
    • Названия тегов и свойств в правилах пишутся строчными буквами.
    • Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
    • Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
    • -
    • После запятых в перечислениях, например rgb(), rgba(), hsl(), hsla() или rect() должен быть пробел .
    • +
    • После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
    • +
    • После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
    • +
    • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
    • +
    • Каждое объявление в правиле пишется на новой строке.
    • +
    • Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки: +
      .selector {
      +  color: #f5f5f5;
      +}
      +
    • +
    • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
    • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
    • -
    • Закрывающая скобка должна быть на новой строке и без отступа.
    • -
    • Между блоками правил должна быть одна пустая строка.
    • Для проверки CSS-кода используйте конфигурацию для настройки валидатора stylelint.
    • +
    • Для автоматического применения этих правил используйте файл конфигурации csscomb.json для настройки CSSComb.
    @@ -747,10 +367,11 @@

    Синтаксис

    } /* Плохо */ -.selector, .selector-SECONDARY, .selector[type=text]{ color: red; - padding:15px;margin:0px 0px 15px; - background-color:rgba(0,0,0,.5); - box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFF}
    +.selector, .selector-secondary, .selector[type=text] { + padding:15px; + margin:0px 0px 15px; + background-color:rgba(0,0,0,.5); + box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF}
    @@ -872,46 +493,6 @@

    Правило @import

    -
    -
    -

    Подключение шрифтов

    -
      -
    • Базовые начертания семейства должны иметь общее название font-family.
    • -
    • Для каждого начертания должны быть указаны font-weight и font-style.
    • -
    • В описании шрифта должен быть указан режим отрисовки font-display.
    • -
    -
    -
    -
    -
    /* Правильно */
    -@font-face {
    -  font-family: "PT Sans";
    -  font-weight: normal;
    -  font-style: normal;
    -  font-display: swap;
    -  src: url("http://github.com/fonts/pt-sans-regular.woff2") format("woff2");
    -}
    -
    -@font-face {
    -  font-family: "PT Sans";
    -  font-weight: bold;
    -  font-style: normal;
    -  font-display: optional;
    -  src: url("http://github.com/fonts/pt-sans-bold.woff2") format("woff2");
    -}
    -
    -/* Неправильно */
    -@font-face {
    -  font-family: "PT Sans Regular";
    -}
    -
    -@font-face {
    -  font-family: "PT Sans Bold";
    -}
    -
    -
    -
    -

    Варианты шрифта

    @@ -963,116 +544,6 @@

    Варианты шрифта

    -
    -
    -

    !important

    -
      -
    • Ключевое слово !important не должно использоваться для борьбы со специфичностью.
    • -
    • Универсальные классы-хелперы могут использовать !important.
    • -
    -
    -
    -
    -
    /* Правильно */
    -.visually-hidden {
    -  position: absolute !important;
    -  width: 1px !important;
    -  height: 1px !important;
    -  margin: -1px !important;
    -  border: 0 !important;
    -  padding: 0 !important;
    -  clip: rect(0 0 0 0) !important;
    -  overflow: hidden !important;
    -}
    -
    -/* Неправильно */
    -.element {
    -  font-size: 17px !important;
    -}
    -
    -
    -
    -
    - -
    -
    -

    Повторяющиеся свойства

    -
      -
    • Свойства не должны повторяться в рамках одной декларации.
    • -
    • Свойство может повторяться, если раньше описан сброс или общий случай.
    • -
    -
    -
    -
    -
    /* Правильно */
    -.block {
    -  margin: 0;
    -  margin-left: 20px;
    -  border: 10px solid #000000;
    -  border-bottom-color: #ff0000;
    -}
    -
    -/* Неправильно */
    -.block {
    -  margin-left: 10px;
    -  border-left: 10px solid #000000;
    -  margin-left: 20px;
    -  border-left: 10px solid #ff0000;
    -}
    -
    -
    -
    -
    - -
    -
    -

    Формат цветов

    -
      -
    • Цвета должны записываться строчными в 6-значном формате HEX.
    • -
    • Цвета могут записываться функциями rgba или hsla, если нужна прозрачность.
    • -
    -
    -
    -
    -
    /* Правильно */
    -.block {
    -  background-color: #ff0000;
    -  border-left-color: #00ff00;
    -  color: rgba(0, 0, 0, 0.5);
    -}
    -
    -/* Неправильно */
    -.block {
    -  background-color: #F00;
    -  border-left-color: rgb(0, 255, 0);
    -  color: black;
    -}
    -
    -
    -
    -
    - -
    -
    -

    Дробные значения

    -

    В дробных значениях не должно быть больше двух знаков после точки.

    -
    -
    -
    -
    /* Правильно */
    -.block {
    -  width: 2.33%;
    -}
    -
    -/* Неправильно */
    -.block {
    -  width: 2.33333%;
    -}
    -
    -
    -
    -
    -

    Доступное скрытие

    From 98e222842c3e9f0ebbcb3cf1696da5a737549bc6 Mon Sep 17 00:00:00 2001 From: AnnaLevchenko <36822971+levallevchenko@users.noreply.github.com> Date: Tue, 2 Mar 2021 17:34:57 +0300 Subject: [PATCH 076/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=20=D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=D0=BE=D1=80?= =?UTF-8?q?=D0=B5=D1=87=D0=B8=D1=8F=20=D1=81=D1=82=D0=B0=D0=B9=D0=BB=D0=B3?= =?UTF-8?q?=D0=B0=D0=B9=D0=B4=D0=B0=20=D0=B8=20=D0=BB=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20(#54)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sasha Sushko --- javascript.html | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/javascript.html b/javascript.html index f0a5de4..00eae91 100644 --- a/javascript.html +++ b/javascript.html @@ -99,7 +99,7 @@

    Отступы, пробелы и перен
    Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    -

    Для отступов используются два пробела. Знак табуляции не используется.

    +

    Для отступов используются два пробела. Знак табуляции не используется

    При переносах в продолжении строки используется четыре пробела

    @@ -123,7 +123,7 @@

    Отступы, пробелы и перен }

    В однострочных блоках кода, код отделен от открывающей и закрывающей скобки пробелом

    -

    В однострочных массивах скобки не отделяются пробелами, первое значение идет непосредственно после открывающей скобки, а закрывающая скобка идет непосредственно после последнего значения массива

    +

    В однострочных массивах скобки не отделяются пробелами, первое значение идёт непосредственно после открывающей скобки, а закрывающая скобка идёт непосредственно после последнего значения массива

    После запятой всегда должен ставиться пробел, если запятая не в конце строки

    @@ -191,16 +191,16 @@

    Отступы, пробелы и перен

    Строки

    -

    В строках, объявленных с помощью одинарных и двойных кавычек запрещено использовать переносы

    +

    В строках, объявленных с помощью одинарных кавычек, запрещено использовать переносы

    В строках запрещено указывать код спецсимволов в восьмеричной системе счисления

    -
    const foo = "Copyright \251";
    +
    const foo = 'Copyright \251';
    -
    const foo = "Copyright \u00A9";
    +
    const foo = 'Copyright \u00A9';

    При создании объектов через литералы свойства должны объявляться в едином стиле: или без кавычек или с ними

    -

    В строках используются двойные кавычки. Разрешено использовать строковые шаблоны. Предпочтение отдается строковым шаблонам

    +

    В строках используются одинарные кавычки. Разрешено использовать строковые шаблоны в случаях, когда необходима интерполяция

    @@ -244,13 +244,13 @@

    Именование

    -

    Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы которые должны именоваться прописными буквами в константном регистре (CONSTANT_CASE) и названия классов, функций-конструкторов и перечислений, которые именуются с заглавной буквы (PascalCase)

    +

    Все переменные должны быть названы в верблюжьем регистре (camelCase). Исключения составляют константы, которые должны именоваться прописными буквами в константном регистре (CONSTANT_CASE) и названия классов, функций-конструкторов и перечислений, которые именуются с заглавной буквы (PascalCase)

    Запрещено использовать имена переменных, которые используются во внешних областях видимости

    Запрещено называть переменные и свойства ключевыми словами JS

    -

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости нужно обращаться к ней как к свойству объекта window

    +

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости, нужно обращаться к ней как к свойству объекта window

    Запрещено напрямую обращаться к значению undefined. Для проверки типа рекомендуется использовать typeof. Исключение составляет явная передача undefined при вызове функции вместо аргумента, чтобы использовать значение параметра по умолчанию

    @@ -267,7 +267,7 @@

    Предотвращение ошибок

    Не рекомендуется использовать указатель Unicode BOM в коде, потому что код должен быть сохранен не в кодировке UTF-16, а в кодировке UTF-8, в которой нет указателя порядка бит

    -

    Обязательно используются блоки кода даже если в выражении содержится одна строчка

    +

    Обязательно используются блоки кода, даже если в выражении содержится одна строчка

    В коде нет пустых блоков кода

    @@ -376,8 +376,6 @@

    Создание значений

    При создании непустых массивов запрещено опускать пустые значения (ставить подряд несколько запятых)

    -

    При создании непустых объектов и массивов не используются «висячие» запятые

    -

    Для создания новых значений не используются конструкторы примитивов String, Number, Boolean

    Конструкторы вызываются со скобками, даже если у них нет параметров

    @@ -412,7 +410,7 @@

    Манкипатчинг

    Контекст

    bind не используется вне методов классов

    -

    В функциях, которые не являются методами никакого объекта или класса не используется this

    +

    В функциях, которые не являются методами никакого объекта или класса, не используется this

    Переменные

    Переменные, объявленные через var не удаляются оператором delete

    @@ -456,7 +454,7 @@

    Лишние символы

    Отладчик и консоль

    -

    В коде не используется оставленных выводов в консоль

    +

    В коде не используются оставленные выводы в консоль

    В коде нет забытых инструкций debugger

    @@ -514,7 +512,7 @@

    Прочее

    В коде не используются лейблы. Лейблы используются с конструкциями break и continue для направленного выхода из цикла и могут привести к слишком сложному для понимания коду

    -

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

    +

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

    В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова let, const, var, операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора for

    const result = (1, 2); // 2
    From 67658562b12802c24b1c7ff0459cfdbb2816c493 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Thu, 17 Jun 2021 12:20:33 +0300 Subject: [PATCH 077/103] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BB=D0=BE=D0=B3=D0=BE=D1=82=D0=B8=D0=BF=20HTM?= =?UTF-8?q?L=20Academy=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Заменяет логотип HTML Academy на новый --- html-css.html | 2 +- img/logo-full.svg | 1 - img/logo-html-academy.svg | 1 + index.html | 2 +- javascript.html | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 img/logo-full.svg create mode 100644 img/logo-html-academy.svg diff --git a/html-css.html b/html-css.html index b19d829..c4d67c8 100644 --- a/html-css.html +++ b/html-css.html @@ -590,7 +590,7 @@

    Доступное скрытие

    - HTML Academy + HTML Academy
    + +
    +
    +

    Порядок свойств

    +

    + Объявления логически связанных свойств сгруппированы в следующем порядке: +

    +
      +
    1. Позиционирование
    2. +
    3. Блочная модель
    4. +
    5. Типографика
    6. +
    7. Оформление
    8. +
    9. Анимация
    10. +
    11. Разное
    12. +
    +

    + Позиционирование следует первым, потому что оно влияет на положение блоков в потоке документа. Блочная модель идёт следующей, так как она определяет размеры и расположение блоков. +

    +

    + Все остальные объявления, которые изменяют вид внутренних частей блоков и не оказывают влияния на другие блоки, идут в последнюю очередь. +

    +

    + Сгруппированные объявления в правиле отделены друг от друга пустой строкой. +

    +

    + Порядок объявления подробных правил, таких как font-size, font-family, line-height, соответствует порядку в сокращённой версии правила. В случае совместного использования подробных и сокращённых правил, первой идёт сокращённая версия. +

    +
    +
    +
    +
    .declaration-order {
    +  /* Позиционирование */
    +  position: absolute;
    +  top: 0;
    +  right: 0;
    +  bottom: 0;
    +  left: 0;
    +  z-index: 100;
    +
    +  /* Блочная модель */
    +  display: block;
    +  float: right;
    +  width: 100px;
    +  height: 100px;
    +  margin: 10px;
    +  padding: 10px;
    +
    +  /* Типографика */
    +  font-family: "Arial", sans-serif;
    +  font-style: normal;
    +  font-size: 13px;
    +  line-height: 20px;
    +  font-weight: 700;
    +  text-align: center;
    +  color: #333333;
    +
    +  /* Оформление */
    +  background-color: #f5f5f5;
    +  border: 1px solid #e5e5e5;
    +  border-radius: 3px;
    +  opacity: 1;
    +
    +  /* Анимация */
    +  transition: color 1s;
    +
    +  /* Разное */
    +  will-change: auto;
    +}
    +
    From d3c3637fde8cf9dc8ec26b0acccef7d325712406 Mon Sep 17 00:00:00 2001 From: Vitaly Zyuzin Date: Wed, 23 Jun 2021 11:46:24 +0300 Subject: [PATCH 079/103] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20=D0=BD?= =?UTF-8?q?=D0=B0=20HTML-=D0=BB=D0=B8=D0=BD=D1=82=D0=B5=D1=80=20(#58)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index db8200f..8d23780 100644 --- a/Readme.md +++ b/Readme.md @@ -18,4 +18,4 @@ ESLint — https://github.com/htmlacademy/eslint-config-htmlacademy Stylelint — https://github.com/htmlacademy/stylelint-config-htmlacademy -HTMLHint - https://github.com/htmlacademy/htmlhint-config-htmlacademy +linthtml — https://github.com/htmlacademy/linthtml-config-htmlacademy From 6f65a5c21d3e47e4370b388fcffa2fba8ff074ca Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Thu, 24 Jun 2021 13:16:30 +0300 Subject: [PATCH 080/103] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D1=82=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=BE=D1=85=D0=BE=D0=B9=20=D0=BF=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=20=D0=B2=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=D1=8B=D1=85=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=85=20(#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html-css.html b/html-css.html index 6a54bb4..c468d5f 100644 --- a/html-css.html +++ b/html-css.html @@ -467,8 +467,8 @@

    Размеры замещаемых элементов

    From 1fdf59bb623dc65a64497f7440b76608a31be566 Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Thu, 16 Sep 2021 17:10:22 +0300 Subject: [PATCH 081/103] =?UTF-8?q?=D0=9C=D0=B5=D0=BD=D1=8F=D0=B5=D1=82=20?= =?UTF-8?q?HTML-=D0=BB=D0=B8=D0=BD=D1=82=D0=B5=D1=80=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index c468d5f..611d0cd 100644 --- a/html-css.html +++ b/html-css.html @@ -99,7 +99,7 @@

    Автоматизация проверки кода

    При написании кода вам сложно будет запомнить все правила кодгайда. Эту работу стоит отдать роботам.

    • Для поддержания единообразия в коде используйте EditorConfig.
    • -
    • Для HTML используйте HTMLHint.
    • +
    • Для HTML используйте linthtml.
    • Для стилей Stylelint.

    По ссылкам находятся конфигурации Академии для этих инструментов. Конфигурации частично покрывают то, что описано в этом стиле кода, и в них нет ничего, что не описано ниже.

    From d4780806bb6fbf643fcc522552e0b296bb0a1c18 Mon Sep 17 00:00:00 2001 From: Alexey Kovalev Date: Wed, 27 Oct 2021 06:59:19 +0300 Subject: [PATCH 082/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D1=83=20(#62)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: aikovalev --- html-css.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index 611d0cd..eff6a65 100644 --- a/html-css.html +++ b/html-css.html @@ -451,7 +451,7 @@

    Размеры замещаемых элементов
  • У изображений, видео и iframe указаны размеры.
  • -
  • о возможности изображениям указываются действительные размеры, так как это улучшает производительность отрисовки страницы: браузер не будет перерисовывать страницу в процессе загрузки и отображения изображения.
  • +
  • По возможности изображениям указываются действительные размеры, так как это улучшает производительность отрисовки страницы: браузер не будет перерисовывать страницу в процессе загрузки и отображения изображения.
  • В атрибутах нет единиц измерения.
  • From 7adb72522db00583b0a94be9a6f2ca4d22c7ccfb Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:04:35 +0300 Subject: [PATCH 083/103] =?UTF-8?q?=D0=92=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B4=D0=BB=D1=8F=20=D1=83=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D0=B8=D1=82=20=D0=BA=D0=BE=D0=B4=20=D0=BF=D0=BE=20=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/chapter.css | 94 +++++++ css/blocks/code.css | 31 +++ css/blocks/common.css | 92 +++++++ css/blocks/footer.css | 67 +++++ css/blocks/guide-content.css | 4 + css/blocks/header.css | 44 +++ css/blocks/logo-list.css | 19 ++ css/blocks/prism.css | 49 ++++ css/blocks/sidebar.css | 118 ++++++++ css/style.css | 502 +---------------------------------- 10 files changed, 527 insertions(+), 493 deletions(-) create mode 100644 css/blocks/chapter.css create mode 100644 css/blocks/code.css create mode 100644 css/blocks/common.css create mode 100644 css/blocks/footer.css create mode 100644 css/blocks/guide-content.css create mode 100644 css/blocks/header.css create mode 100644 css/blocks/logo-list.css create mode 100644 css/blocks/prism.css create mode 100644 css/blocks/sidebar.css diff --git a/css/blocks/chapter.css b/css/blocks/chapter.css new file mode 100644 index 0000000..535e053 --- /dev/null +++ b/css/blocks/chapter.css @@ -0,0 +1,94 @@ +.chapters { + width: 100%; +} + +.chapter h2 { + padding: 2rem 1rem; + word-break: break-word; + background-color: #e5e5e5; +} + +.chapter h3[id]::before { + display: block; + height: 2rem; + margin-top: -2rem; + visibility: hidden; + content: ""; +} + +.chapter-part { + display: flex; + flex-direction: column; + + border-bottom: 1px solid #e5e5e5; +} + +.chapter-part-col { + padding: 2rem 1rem; +} + +.chapter-part-col figure { + margin: 0 1rem 0 0; +} + +.chapter-part-col p { + max-width: 32rem; +} + +.chapter-part-col + .chapter-part-col { + border-top: 1px solid #e5e5e5; +} + +.gray-bgcolor { + background-color: #fafafa; +} + +@media (min-width: 38em) { + .chapter h2 { + padding: 2rem 2rem 2.5rem; + } + + .chapter-part-col { + padding: 2rem; + } +} + +@media (min-width: 38em) { + .chapter h2 { + padding: 2rem 2rem 2.5rem; + } + + .chapter-part-col { + padding: 2rem; + } +} + +@media (min-width: 48em) { + .chapter h2 { + padding: 2rem 3rem 2.5rem; + } + + .chapter-part { + flex-direction: row; + } + + .chapter-part-col { + width: 50%; + padding: 3rem 1.5rem; + } + + .chapter-part-col--full-width { + width: 100%; + } + + .chapter-part-col + .chapter-part-col { + border-top: 0; + } +} + +@media (min-width: 75em) { + .chapters { + width: calc(100% - 230px); + } +} + diff --git a/css/blocks/code.css b/css/blocks/code.css new file mode 100644 index 0000000..7b3d709 --- /dev/null +++ b/css/blocks/code.css @@ -0,0 +1,31 @@ +code, +pre { + font-family: "Consolas", "Liberation Mono", "Menlo", "Courier", monospace; +} + +code { + padding: 2px 4px; + + font-size: 95%; + color: #d44950; + + background-color: #f7f7f9; + border-radius: 0.2rem; +} + +pre { + display: block; + margin: 0 0 1rem; + + line-height: 1.4; + white-space: pre-wrap; +} + +pre code { + padding: 0; + + color: inherit; + + background-color: transparent; + border: 0; +} diff --git a/css/blocks/common.css b/css/blocks/common.css new file mode 100644 index 0000000..4ac5aee --- /dev/null +++ b/css/blocks/common.css @@ -0,0 +1,92 @@ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-size: 16px; + scroll-behavior: smooth; +} + +body { + margin: 0; + + font: 17px/1.6 "Helvetica", "Arial", sans-serif; + color: #5a5a5a; + + background-color: #ffffff; +} + +a:link, +a:visited { + color: #3f3ccb; + text-decoration: none; +} + +a:hover, +a:focus { + color: #302683; + text-decoration: underline; +} + +h1, +h2, +h3 { + margin: 0; + + font-weight: normal; + color: #424242; + letter-spacing: -0.025em; +} + +h2, +h3, +h4 { + line-height: 1.2; +} + +h1 { + font-size: 3rem; + line-height: 1.3; +} + +h2 { + font-size: 2.5rem; +} + +h3 { + font-size: 1.75rem; + scroll-margin-top: 20px; +} + +ul li { + margin-bottom: 0.25rem; +} + +.visually-hidden { + position: absolute; + + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + + border: 0; + + clip: rect(0, 0, 0, 0); + clip-path: inset(100%); +} + +@media (min-width: 38em) { + html { + font-size: 20px; + } +} + +@media (min-width: 38em) { + html { + font-size: 20px; + } +} diff --git a/css/blocks/footer.css b/css/blocks/footer.css new file mode 100644 index 0000000..debd653 --- /dev/null +++ b/css/blocks/footer.css @@ -0,0 +1,67 @@ +footer { + padding: 2rem; + + background-color: #2d2d44; +} + +.contacts { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.logo-full { + display: inline-block; + width: 161px; +} + +.social-icons { + display: flex; + justify-content: space-between; + align-items: center; + margin: 0.5rem 0 1rem 0; +} + +.social-icons, +.github { + font-size: 0; +} + +.icon { + min-width: 2rem; + min-height: 2rem; + + background-repeat: no-repeat; + background-position: center; + background-size: calc(100% - 5px); + opacity: 0.5; +} + +.icon:hover { + opacity: 1; +} + +.icon-vk { + background-image: url("http://github.com/img/icon-vkontakte.svg"); +} + +.icon-fb { + background-image: url("http://github.com/img/icon-facebook.svg"); +} + +.icon-tw { + background-image: url("http://github.com/img/icon-twitter.svg"); +} + +.icon-ig { + background-image: url("http://github.com/img/icon-instagram.svg"); +} + +.github-link { + display: inline-block; + width: 91px; + height: 16px; + + background-image: url("http://github.com/img/github.svg"); +} diff --git a/css/blocks/guide-content.css b/css/blocks/guide-content.css new file mode 100644 index 0000000..95478c2 --- /dev/null +++ b/css/blocks/guide-content.css @@ -0,0 +1,4 @@ +.guide-content { + display: flex; + flex-wrap: wrap; +} diff --git a/css/blocks/header.css b/css/blocks/header.css new file mode 100644 index 0000000..f3c21eb --- /dev/null +++ b/css/blocks/header.css @@ -0,0 +1,44 @@ +header { + padding: 1rem 1rem 6rem; + + text-align: center; + + background-color: #312785; + background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); + background-size: 82px 47px; +} + +header h1 { + margin: 0 0 0.25rem; + + color: #ffffff; +} + +header p { + margin-top: 0; + + font-size: 1.1rem; +} + +header a:link, +header a:visited { + color: #ffffff; +} + +.logo { + width: 300px; + height: 300px; +} + +@media (min-width: 38em) { + header { + padding-bottom: 4rem; + } +} + +@media (min-width: 38em) { + header { + padding-bottom: 4rem; + } +} + diff --git a/css/blocks/logo-list.css b/css/blocks/logo-list.css new file mode 100644 index 0000000..f2f4966 --- /dev/null +++ b/css/blocks/logo-list.css @@ -0,0 +1,19 @@ +.logo-list { + max-width: 550px; + margin: 50px auto; +} + +.logo-list ul { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: 0; + padding: 0; + + list-style: none; +} + +.logo-list li { + margin-right: 10px; + margin-left: 10px; +} diff --git a/css/blocks/prism.css b/css/blocks/prism.css new file mode 100644 index 0000000..40979f6 --- /dev/null +++ b/css/blocks/prism.css @@ -0,0 +1,49 @@ +/* override default prism theme */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} + +pre[class*="language-"] { + margin: 0; + padding: 0; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: initial; +} + +/* override default prism theme */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} + +pre[class*="language-"] { + margin: 0; + padding: 0; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: initial; +} + +pre.language-correct, +pre.language-incorrect { + padding: 5px 10px; +} + +pre.language-correct { + background: #deeede; +} + +pre.language-incorrect { + background: #f4d3d3; +} + +pre.language-correct .token.operator, +pre.language-incorrect .token.operator { + background: none; +} diff --git a/css/blocks/sidebar.css b/css/blocks/sidebar.css new file mode 100644 index 0000000..94cca20 --- /dev/null +++ b/css/blocks/sidebar.css @@ -0,0 +1,118 @@ +.sidebar { + display: flex; + flex-direction: column; + + width: 100%; +} + +.sidebar a { + display: block; + color: #5a5a5a; +} + +.sidebar a:hover { + color: #3f3ccb; +} + +.sidebar-col { + padding: 2rem 1rem; +} + +.sidebar-col + .sidebar-col { + border-top: 1px solid #e5e5e5; +} + +.sidebar-col > a { + font-size: 1.75rem; + line-height: 1.25; +} + +.sidebar-menu { + padding-left: 1rem; +} + +@media (min-width: 48em) { + .sidebar { + flex-direction: row; + flex-wrap: wrap; + + padding: 2rem 0; + } + + .sidebar-col { + width: 50%; + padding: 1rem 3rem; + } + + .sidebar-col + .sidebar-col { + border-top: 0; + } +} + +@media (min-width: 75em) { + .sidebar { + position: sticky; + top: 0; + bottom: 0; + + flex-direction: column; + flex-wrap: nowrap; + align-self: flex-start; + + width: 230px; + height: 100vh; + padding: 0 1rem; + + overflow-y: auto; + line-height: 1.25; + border-right: 1px solid #e5e5e5; + } + + .sidebar-col { + flex-shrink: 0; + + width: 100%; + padding: 0; + } + + .sidebar-col-first { + padding-top: 1.75rem; + } + + .sidebar-col-last { + padding-bottom: 1.75rem; + } + + .sidebar-col + .sidebar-col { + margin-top: 1.75em; + } + + .sidebar-col > a { + display: block; + + font-size: 0.8rem; + font-weight: bold; + } + + .sidebar-menu { + padding: 0; + margin: 0.5em 0 0; + + list-style: none; + + font-size: 0.7rem; + } + + .sidebar-menu li { + margin: 0; + + line-height: 1.45; + } + + .sidebar-menu a { + display: block; + + padding: 0.25em 0; + } +} + diff --git a/css/style.css b/css/style.css index acb48a7..fb866f3 100644 --- a/css/style.css +++ b/css/style.css @@ -1,493 +1,9 @@ -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-size: 16px; - scroll-behavior: smooth; -} - -body { - margin: 0; - - font: 17px/1.6 "Helvetica", "Arial", sans-serif; - color: #5a5a5a; - - background-color: #ffffff; -} - -a:link, -a:visited { - color: #3f3ccb; - text-decoration: none; -} - -a:hover, -a:focus { - color: #302683; - text-decoration: underline; -} - -h1, -h2, -h3 { - margin: 0; - - font-weight: normal; - color: #424242; - letter-spacing: -0.025em; -} - -h2, -h3, -h4 { - line-height: 1.2; -} - -h1 { - font-size: 3rem; - line-height: 1.3; -} - -h2 { - font-size: 2.5rem; -} - -h3 { - font-size: 1.75rem; - scroll-margin-top: 20px; -} - -code, -pre { - font-family: "Consolas", "Liberation Mono", "Menlo", "Courier", monospace; -} - -code { - padding: 2px 4px; - - font-size: 95%; - color: #d44950; - - background-color: #f7f7f9; - border-radius: 0.2rem; -} - -pre { - display: block; - margin: 0 0 1rem; - - line-height: 1.4; - white-space: pre-wrap; -} - -pre code { - padding: 0; - - color: inherit; - - background-color: transparent; - border: 0; -} - -ul li { - margin-bottom: 0.25rem; -} - -header { - padding: 1rem 1rem 6rem; - - text-align: center; - - background-color: #312785; - background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); - background-size: 82px 47px; -} - -header h1 { - margin: 0 0 0.25rem; - - color: #ffffff; -} - -header p { - margin-top: 0; - - font-size: 1.1rem; -} - -header a:link, -header a:visited { - color: #ffffff; -} - -.visually-hidden { - position: absolute; - - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - - border: 0; - - clip: rect(0, 0, 0, 0); - clip-path: inset(100%); -} - -.logo-list { - max-width: 550px; - margin: 50px auto; -} - -.logo-list ul { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: 0; - padding: 0; - - list-style: none; -} - -.logo-list li { - margin-right: 10px; - margin-left: 10px; -} - -.logo { - width: 300px; - height: 300px; -} - -.guide-content { - display: flex; - flex-wrap: wrap; -} - -.sidebar { - display: flex; - flex-direction: column; - - width: 100%; -} - -.sidebar a { - display: block; - color: #5a5a5a; -} - -.sidebar a:hover { - color: #3f3ccb; -} - -.sidebar-col { - padding: 2rem 1rem; -} - -.sidebar-col + .sidebar-col { - border-top: 1px solid #e5e5e5; -} - -.sidebar-col > a { - font-size: 1.75rem; - line-height: 1.25; -} - -.sidebar-menu { - padding-left: 1rem; -} - -.chapters { - width: 100%; -} - -.chapter h2 { - padding: 2rem 1rem; - word-break: break-word; - background-color: #e5e5e5; -} - -.chapter h3[id]::before { - display: block; - height: 2rem; - margin-top: -2rem; - visibility: hidden; - content: ""; -} - -.chapter-part { - display: flex; - flex-direction: column; - - border-bottom: 1px solid #e5e5e5; -} - -.chapter-part-col { - padding: 2rem 1rem; -} - -.chapter-part-col figure { - margin: 0 1rem 0 0; -} - -.chapter-part-col p { - max-width: 32rem; -} - -.chapter-part-col + .chapter-part-col { - border-top: 1px solid #e5e5e5; -} - -.gray-bgcolor { - background-color: #fafafa; -} - -footer { - padding: 2rem; - - background-color: #2d2d44; -} - -.contacts { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.logo-full { - display: inline-block; - width: 161px; -} - -.social-icons { - display: flex; - justify-content: space-between; - align-items: center; - margin: 0.5rem 0 1rem 0; -} - -.social-icons, -.github { - font-size: 0; -} - -.icon { - min-width: 2rem; - min-height: 2rem; - - background-repeat: no-repeat; - background-position: center; - background-size: calc(100% - 5px); - opacity: 0.5; -} - -.icon:hover { - opacity: 1; -} - -.icon-vk { - background-image: url("http://github.com/img/icon-vkontakte.svg"); -} - -.icon-fb { - background-image: url("http://github.com/img/icon-facebook.svg"); -} - -.icon-tw { - background-image: url("http://github.com/img/icon-twitter.svg"); -} - -.icon-ig { - background-image: url("http://github.com/img/icon-instagram.svg"); -} - -.github-link { - display: inline-block; - width: 91px; - height: 16px; - - background-image: url("http://github.com/img/github.svg"); -} - -@media (min-width: 38em) { - header { - padding-bottom: 4rem; - } - - html { - font-size: 20px; - } - - .chapter h2 { - padding: 2rem 2rem 2.5rem; - } - - .chapter-part-col { - padding: 2rem; - } -} - -@media (min-width: 48em) { - .sidebar { - flex-direction: row; - flex-wrap: wrap; - - padding: 2rem 0; - } - - .sidebar-col { - width: 50%; - padding: 1rem 3rem; - } - - .sidebar-col + .sidebar-col { - border-top: 0; - } - - .chapter h2 { - padding: 2rem 3rem 2.5rem; - } - - .chapter-part { - flex-direction: row; - } - - .chapter-part-col { - width: 50%; - padding: 3rem 1.5rem; - } - - .chapter-part-col--full-width { - width: 100%; - } - - .chapter-part-col + .chapter-part-col { - border-top: 0; - } -} - -@media (min-width: 75em) { - .chapters { - width: calc(100% - 230px); - } - - .sidebar { - position: sticky; - top: 0; - bottom: 0; - - flex-direction: column; - flex-wrap: nowrap; - align-self: flex-start; - - width: 230px; - height: 100vh; - padding: 0 1rem; - - overflow-y: auto; - line-height: 1.25; - border-right: 1px solid #e5e5e5; - } - - .sidebar-col { - flex-shrink: 0; - - width: 100%; - padding: 0; - } - - .sidebar-col-first { - padding-top: 1.75rem; - } - - .sidebar-col-last { - padding-bottom: 1.75rem; - } - - .sidebar-col + .sidebar-col { - margin-top: 1.75em; - } - - .sidebar-col > a { - display: block; - - font-size: 0.8rem; - font-weight: bold; - } - - .sidebar-menu { - padding: 0; - margin: 0.5em 0 0; - - list-style: none; - - font-size: 0.7rem; - } - - .sidebar-menu li { - margin: 0; - - line-height: 1.45; - } - - .sidebar-menu a { - display: block; - - padding: 0.25em 0; - } -} - -/* override default prism theme */ -code[class*="language-"], -pre[class*="language-"] { - white-space: pre-wrap; -} - -pre[class*="language-"] { - margin: 0; - padding: 0; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: initial; -} - -/* override default prism theme */ -code[class*="language-"], -pre[class*="language-"] { - white-space: pre-wrap; -} - -pre[class*="language-"] { - margin: 0; - padding: 0; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: initial; -} - -pre.language-correct, -pre.language-incorrect { - padding: 5px 10px; -} - -pre.language-correct { - background: #deeede; -} - -pre.language-incorrect { - background: #f4d3d3; -} - -pre.language-correct .token.operator, -pre.language-incorrect .token.operator { - background: none; -} +@import "http://github.com/blocks/common.css"; +@import "http://github.com/blocks/code.css"; +@import "http://github.com/blocks/header.css"; +@import "http://github.com/blocks/logo-list.css"; +@import "http://github.com/blocks/guide-content.css"; +@import "http://github.com/blocks/sidebar.css"; +@import "http://github.com/blocks/chapter.css"; +@import "http://github.com/blocks/footer.css"; +@import "http://github.com/blocks/prism.css"; From bebe28b0b9d45ed7395693a075f64a822412ab94 Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:05:02 +0300 Subject: [PATCH 084/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D1=8B=20=D1=88?= =?UTF-8?q?=D1=80=D0=B8=D1=84=D1=82=D0=B0,=20=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=D0=B5=20=D0=BD=D0=B8=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D1=81=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=8E=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/common.css | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/css/blocks/common.css b/css/blocks/common.css index 4ac5aee..3f520f6 100644 --- a/css/blocks/common.css +++ b/css/blocks/common.css @@ -5,7 +5,6 @@ } html { - font-size: 16px; scroll-behavior: smooth; } @@ -78,15 +77,3 @@ ul li { clip: rect(0, 0, 0, 0); clip-path: inset(100%); } - -@media (min-width: 38em) { - html { - font-size: 20px; - } -} - -@media (min-width: 38em) { - html { - font-size: 20px; - } -} From cf4aa51e72fa7ae997075bb1d15937d7c753df1d Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:05:55 +0300 Subject: [PATCH 085/103] =?UTF-8?q?=D0=94=D0=B5=D0=BA=D0=BE=D0=BC=D0=BF?= =?UTF-8?q?=D0=BE=D0=B7=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D1=81=D0=BE=D0=B1?= =?UTF-8?q?=D0=B8=D1=80=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/common.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/css/blocks/common.css b/css/blocks/common.css index 3f520f6..3d4e584 100644 --- a/css/blocks/common.css +++ b/css/blocks/common.css @@ -10,10 +10,10 @@ html { body { margin: 0; - - font: 17px/1.6 "Helvetica", "Arial", sans-serif; + font-size: 16px; + line-height: 1.6; + font-family: "Helvetica", "Arial", sans-serif; color: #5a5a5a; - background-color: #ffffff; } From 498b6fe9110bde950341dd840df544b9704a89ef Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:06:43 +0300 Subject: [PATCH 086/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B1=D0=B5=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/common.css | 3 --- 1 file changed, 3 deletions(-) diff --git a/css/blocks/common.css b/css/blocks/common.css index 3d4e584..cc0a891 100644 --- a/css/blocks/common.css +++ b/css/blocks/common.css @@ -33,7 +33,6 @@ h1, h2, h3 { margin: 0; - font-weight: normal; color: #424242; letter-spacing: -0.025em; @@ -71,9 +70,7 @@ ul li { margin: -1px; padding: 0; overflow: hidden; - border: 0; - clip: rect(0, 0, 0, 0); clip-path: inset(100%); } From e56b23e7c8c52612fcd94a461103dacb025216d0 Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:07:10 +0300 Subject: [PATCH 087/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/code.css | 5 ----- 1 file changed, 5 deletions(-) diff --git a/css/blocks/code.css b/css/blocks/code.css index 7b3d709..662bc70 100644 --- a/css/blocks/code.css +++ b/css/blocks/code.css @@ -5,10 +5,8 @@ pre { code { padding: 2px 4px; - font-size: 95%; color: #d44950; - background-color: #f7f7f9; border-radius: 0.2rem; } @@ -16,16 +14,13 @@ code { pre { display: block; margin: 0 0 1rem; - line-height: 1.4; white-space: pre-wrap; } pre code { padding: 0; - color: inherit; - background-color: transparent; border: 0; } From 8bc07e602fc0e8666d5e374b999dfdd2bf74012d Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:08:59 +0300 Subject: [PATCH 088/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/header.css | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/css/blocks/header.css b/css/blocks/header.css index f3c21eb..f7f16d3 100644 --- a/css/blocks/header.css +++ b/css/blocks/header.css @@ -1,8 +1,6 @@ header { padding: 1rem 1rem 6rem; - text-align: center; - background-color: #312785; background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); background-size: 82px 47px; @@ -10,13 +8,11 @@ header { header h1 { margin: 0 0 0.25rem; - color: #ffffff; } header p { margin-top: 0; - font-size: 1.1rem; } @@ -35,10 +31,3 @@ header a:visited { padding-bottom: 4rem; } } - -@media (min-width: 38em) { - header { - padding-bottom: 4rem; - } -} - From 0fa61e70ff11380f83cc6362819f0c9c366a1e73 Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:09:12 +0300 Subject: [PATCH 089/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20logo-list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/logo-list.css | 1 - 1 file changed, 1 deletion(-) diff --git a/css/blocks/logo-list.css b/css/blocks/logo-list.css index f2f4966..6c40a66 100644 --- a/css/blocks/logo-list.css +++ b/css/blocks/logo-list.css @@ -9,7 +9,6 @@ justify-content: space-around; margin: 0; padding: 0; - list-style: none; } From 82fedcf106cffbc0059f892944daf9e2876e7ce0 Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:09:57 +0300 Subject: [PATCH 090/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20sidebar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/sidebar.css | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/css/blocks/sidebar.css b/css/blocks/sidebar.css index 94cca20..d9b8d5d 100644 --- a/css/blocks/sidebar.css +++ b/css/blocks/sidebar.css @@ -1,7 +1,6 @@ .sidebar { display: flex; flex-direction: column; - width: 100%; } @@ -35,7 +34,6 @@ .sidebar { flex-direction: row; flex-wrap: wrap; - padding: 2rem 0; } @@ -54,15 +52,12 @@ position: sticky; top: 0; bottom: 0; - flex-direction: column; flex-wrap: nowrap; align-self: flex-start; - width: 230px; height: 100vh; padding: 0 1rem; - overflow-y: auto; line-height: 1.25; border-right: 1px solid #e5e5e5; @@ -70,7 +65,6 @@ .sidebar-col { flex-shrink: 0; - width: 100%; padding: 0; } @@ -97,21 +91,17 @@ .sidebar-menu { padding: 0; margin: 0.5em 0 0; - list-style: none; - font-size: 0.7rem; } .sidebar-menu li { margin: 0; - line-height: 1.45; } .sidebar-menu a { display: block; - padding: 0.25em 0; } } From 72b5e9a30d197f21dd94185ce6ee6ae466dbeaef Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:10:33 +0300 Subject: [PATCH 091/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20chapter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/chapter.css | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/css/blocks/chapter.css b/css/blocks/chapter.css index 535e053..92cd3e1 100644 --- a/css/blocks/chapter.css +++ b/css/blocks/chapter.css @@ -19,7 +19,6 @@ .chapter-part { display: flex; flex-direction: column; - border-bottom: 1px solid #e5e5e5; } @@ -53,15 +52,6 @@ } } -@media (min-width: 38em) { - .chapter h2 { - padding: 2rem 2rem 2.5rem; - } - - .chapter-part-col { - padding: 2rem; - } -} @media (min-width: 48em) { .chapter h2 { From 4daaec58bf1eaa3b38c15b79a81e954e4703267f Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 08:10:55 +0300 Subject: [PATCH 092/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20footer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/footer.css | 3 --- 1 file changed, 3 deletions(-) diff --git a/css/blocks/footer.css b/css/blocks/footer.css index debd653..338eb6c 100644 --- a/css/blocks/footer.css +++ b/css/blocks/footer.css @@ -1,6 +1,5 @@ footer { padding: 2rem; - background-color: #2d2d44; } @@ -31,7 +30,6 @@ footer { .icon { min-width: 2rem; min-height: 2rem; - background-repeat: no-repeat; background-position: center; background-size: calc(100% - 5px); @@ -62,6 +60,5 @@ footer { display: inline-block; width: 91px; height: 16px; - background-image: url("http://github.com/img/github.svg"); } From 892bddc3f67a606edf4ac128e1cda806222171f5 Mon Sep 17 00:00:00 2001 From: Shabalin Nikolai Date: Wed, 27 Oct 2021 16:45:36 +0300 Subject: [PATCH 093/103] =?UTF-8?q?=D0=A7=D0=B8=D0=BD=D0=B8=D1=82=20=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/blocks/chapter.css | 84 ------ css/blocks/code.css | 26 -- css/blocks/common.css | 76 ------ css/blocks/footer.css | 64 ----- css/blocks/guide-content.css | 4 - css/blocks/header.css | 33 --- css/blocks/logo-list.css | 18 -- css/blocks/prism.css | 49 ---- css/blocks/sidebar.css | 108 -------- css/style.css | 495 ++++++++++++++++++++++++++++++++++- 10 files changed, 486 insertions(+), 471 deletions(-) delete mode 100644 css/blocks/chapter.css delete mode 100644 css/blocks/code.css delete mode 100644 css/blocks/common.css delete mode 100644 css/blocks/footer.css delete mode 100644 css/blocks/guide-content.css delete mode 100644 css/blocks/header.css delete mode 100644 css/blocks/logo-list.css delete mode 100644 css/blocks/prism.css delete mode 100644 css/blocks/sidebar.css diff --git a/css/blocks/chapter.css b/css/blocks/chapter.css deleted file mode 100644 index 92cd3e1..0000000 --- a/css/blocks/chapter.css +++ /dev/null @@ -1,84 +0,0 @@ -.chapters { - width: 100%; -} - -.chapter h2 { - padding: 2rem 1rem; - word-break: break-word; - background-color: #e5e5e5; -} - -.chapter h3[id]::before { - display: block; - height: 2rem; - margin-top: -2rem; - visibility: hidden; - content: ""; -} - -.chapter-part { - display: flex; - flex-direction: column; - border-bottom: 1px solid #e5e5e5; -} - -.chapter-part-col { - padding: 2rem 1rem; -} - -.chapter-part-col figure { - margin: 0 1rem 0 0; -} - -.chapter-part-col p { - max-width: 32rem; -} - -.chapter-part-col + .chapter-part-col { - border-top: 1px solid #e5e5e5; -} - -.gray-bgcolor { - background-color: #fafafa; -} - -@media (min-width: 38em) { - .chapter h2 { - padding: 2rem 2rem 2.5rem; - } - - .chapter-part-col { - padding: 2rem; - } -} - - -@media (min-width: 48em) { - .chapter h2 { - padding: 2rem 3rem 2.5rem; - } - - .chapter-part { - flex-direction: row; - } - - .chapter-part-col { - width: 50%; - padding: 3rem 1.5rem; - } - - .chapter-part-col--full-width { - width: 100%; - } - - .chapter-part-col + .chapter-part-col { - border-top: 0; - } -} - -@media (min-width: 75em) { - .chapters { - width: calc(100% - 230px); - } -} - diff --git a/css/blocks/code.css b/css/blocks/code.css deleted file mode 100644 index 662bc70..0000000 --- a/css/blocks/code.css +++ /dev/null @@ -1,26 +0,0 @@ -code, -pre { - font-family: "Consolas", "Liberation Mono", "Menlo", "Courier", monospace; -} - -code { - padding: 2px 4px; - font-size: 95%; - color: #d44950; - background-color: #f7f7f9; - border-radius: 0.2rem; -} - -pre { - display: block; - margin: 0 0 1rem; - line-height: 1.4; - white-space: pre-wrap; -} - -pre code { - padding: 0; - color: inherit; - background-color: transparent; - border: 0; -} diff --git a/css/blocks/common.css b/css/blocks/common.css deleted file mode 100644 index cc0a891..0000000 --- a/css/blocks/common.css +++ /dev/null @@ -1,76 +0,0 @@ -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - scroll-behavior: smooth; -} - -body { - margin: 0; - font-size: 16px; - line-height: 1.6; - font-family: "Helvetica", "Arial", sans-serif; - color: #5a5a5a; - background-color: #ffffff; -} - -a:link, -a:visited { - color: #3f3ccb; - text-decoration: none; -} - -a:hover, -a:focus { - color: #302683; - text-decoration: underline; -} - -h1, -h2, -h3 { - margin: 0; - font-weight: normal; - color: #424242; - letter-spacing: -0.025em; -} - -h2, -h3, -h4 { - line-height: 1.2; -} - -h1 { - font-size: 3rem; - line-height: 1.3; -} - -h2 { - font-size: 2.5rem; -} - -h3 { - font-size: 1.75rem; - scroll-margin-top: 20px; -} - -ul li { - margin-bottom: 0.25rem; -} - -.visually-hidden { - position: absolute; - - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - border: 0; - clip: rect(0, 0, 0, 0); - clip-path: inset(100%); -} diff --git a/css/blocks/footer.css b/css/blocks/footer.css deleted file mode 100644 index 338eb6c..0000000 --- a/css/blocks/footer.css +++ /dev/null @@ -1,64 +0,0 @@ -footer { - padding: 2rem; - background-color: #2d2d44; -} - -.contacts { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.logo-full { - display: inline-block; - width: 161px; -} - -.social-icons { - display: flex; - justify-content: space-between; - align-items: center; - margin: 0.5rem 0 1rem 0; -} - -.social-icons, -.github { - font-size: 0; -} - -.icon { - min-width: 2rem; - min-height: 2rem; - background-repeat: no-repeat; - background-position: center; - background-size: calc(100% - 5px); - opacity: 0.5; -} - -.icon:hover { - opacity: 1; -} - -.icon-vk { - background-image: url("http://github.com/img/icon-vkontakte.svg"); -} - -.icon-fb { - background-image: url("http://github.com/img/icon-facebook.svg"); -} - -.icon-tw { - background-image: url("http://github.com/img/icon-twitter.svg"); -} - -.icon-ig { - background-image: url("http://github.com/img/icon-instagram.svg"); -} - -.github-link { - display: inline-block; - width: 91px; - height: 16px; - background-image: url("http://github.com/img/github.svg"); -} diff --git a/css/blocks/guide-content.css b/css/blocks/guide-content.css deleted file mode 100644 index 95478c2..0000000 --- a/css/blocks/guide-content.css +++ /dev/null @@ -1,4 +0,0 @@ -.guide-content { - display: flex; - flex-wrap: wrap; -} diff --git a/css/blocks/header.css b/css/blocks/header.css deleted file mode 100644 index f7f16d3..0000000 --- a/css/blocks/header.css +++ /dev/null @@ -1,33 +0,0 @@ -header { - padding: 1rem 1rem 6rem; - text-align: center; - background-color: #312785; - background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); - background-size: 82px 47px; -} - -header h1 { - margin: 0 0 0.25rem; - color: #ffffff; -} - -header p { - margin-top: 0; - font-size: 1.1rem; -} - -header a:link, -header a:visited { - color: #ffffff; -} - -.logo { - width: 300px; - height: 300px; -} - -@media (min-width: 38em) { - header { - padding-bottom: 4rem; - } -} diff --git a/css/blocks/logo-list.css b/css/blocks/logo-list.css deleted file mode 100644 index 6c40a66..0000000 --- a/css/blocks/logo-list.css +++ /dev/null @@ -1,18 +0,0 @@ -.logo-list { - max-width: 550px; - margin: 50px auto; -} - -.logo-list ul { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: 0; - padding: 0; - list-style: none; -} - -.logo-list li { - margin-right: 10px; - margin-left: 10px; -} diff --git a/css/blocks/prism.css b/css/blocks/prism.css deleted file mode 100644 index 40979f6..0000000 --- a/css/blocks/prism.css +++ /dev/null @@ -1,49 +0,0 @@ -/* override default prism theme */ -code[class*="language-"], -pre[class*="language-"] { - white-space: pre-wrap; -} - -pre[class*="language-"] { - margin: 0; - padding: 0; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: initial; -} - -/* override default prism theme */ -code[class*="language-"], -pre[class*="language-"] { - white-space: pre-wrap; -} - -pre[class*="language-"] { - margin: 0; - padding: 0; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: initial; -} - -pre.language-correct, -pre.language-incorrect { - padding: 5px 10px; -} - -pre.language-correct { - background: #deeede; -} - -pre.language-incorrect { - background: #f4d3d3; -} - -pre.language-correct .token.operator, -pre.language-incorrect .token.operator { - background: none; -} diff --git a/css/blocks/sidebar.css b/css/blocks/sidebar.css deleted file mode 100644 index d9b8d5d..0000000 --- a/css/blocks/sidebar.css +++ /dev/null @@ -1,108 +0,0 @@ -.sidebar { - display: flex; - flex-direction: column; - width: 100%; -} - -.sidebar a { - display: block; - color: #5a5a5a; -} - -.sidebar a:hover { - color: #3f3ccb; -} - -.sidebar-col { - padding: 2rem 1rem; -} - -.sidebar-col + .sidebar-col { - border-top: 1px solid #e5e5e5; -} - -.sidebar-col > a { - font-size: 1.75rem; - line-height: 1.25; -} - -.sidebar-menu { - padding-left: 1rem; -} - -@media (min-width: 48em) { - .sidebar { - flex-direction: row; - flex-wrap: wrap; - padding: 2rem 0; - } - - .sidebar-col { - width: 50%; - padding: 1rem 3rem; - } - - .sidebar-col + .sidebar-col { - border-top: 0; - } -} - -@media (min-width: 75em) { - .sidebar { - position: sticky; - top: 0; - bottom: 0; - flex-direction: column; - flex-wrap: nowrap; - align-self: flex-start; - width: 230px; - height: 100vh; - padding: 0 1rem; - overflow-y: auto; - line-height: 1.25; - border-right: 1px solid #e5e5e5; - } - - .sidebar-col { - flex-shrink: 0; - width: 100%; - padding: 0; - } - - .sidebar-col-first { - padding-top: 1.75rem; - } - - .sidebar-col-last { - padding-bottom: 1.75rem; - } - - .sidebar-col + .sidebar-col { - margin-top: 1.75em; - } - - .sidebar-col > a { - display: block; - - font-size: 0.8rem; - font-weight: bold; - } - - .sidebar-menu { - padding: 0; - margin: 0.5em 0 0; - list-style: none; - font-size: 0.7rem; - } - - .sidebar-menu li { - margin: 0; - line-height: 1.45; - } - - .sidebar-menu a { - display: block; - padding: 0.25em 0; - } -} - diff --git a/css/style.css b/css/style.css index fb866f3..df96900 100644 --- a/css/style.css +++ b/css/style.css @@ -1,9 +1,486 @@ -@import "http://github.com/blocks/common.css"; -@import "http://github.com/blocks/code.css"; -@import "http://github.com/blocks/header.css"; -@import "http://github.com/blocks/logo-list.css"; -@import "http://github.com/blocks/guide-content.css"; -@import "http://github.com/blocks/sidebar.css"; -@import "http://github.com/blocks/chapter.css"; -@import "http://github.com/blocks/footer.css"; -@import "http://github.com/blocks/prism.css"; +/* Common */ + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +body { + margin: 0; + font-size: 16px; + line-height: 1.6; + font-family: "Helvetica", "Arial", sans-serif; + color: #5a5a5a; + background-color: #ffffff; +} + +a:link, +a:visited { + color: #3f3ccb; + text-decoration: none; +} + +a:hover, +a:focus { + color: #302683; + text-decoration: underline; +} + +h1, +h2, +h3 { + margin: 0; + font-weight: normal; + color: #424242; + letter-spacing: -0.025em; +} + +h2, +h3, +h4 { + line-height: 1.2; +} + +h1 { + font-size: 3rem; + line-height: 1.3; +} + +h2 { + font-size: 2.5rem; +} + +h3 { + font-size: 1.75rem; + scroll-margin-top: 20px; +} + +ul li { + margin-bottom: 0.25rem; +} + +.visually-hidden { + position: absolute; + + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + border: 0; + clip: rect(0, 0, 0, 0); + clip-path: inset(100%); +} + +/* Code */ + +code, +pre { + font-family: "Consolas", "Liberation Mono", "Menlo", "Courier", monospace; +} + +code { + padding: 2px 4px; + font-size: 95%; + color: #d44950; + background-color: #f7f7f9; + border-radius: 0.2rem; +} + +pre { + display: block; + margin: 0 0 1rem; + line-height: 1.4; + white-space: pre-wrap; +} + +pre code { + padding: 0; + color: inherit; + background-color: transparent; + border: 0; +} + +/* Header */ + +header { + padding: 1rem 1rem 6rem; + text-align: center; + background-color: #312785; + background-image: repeating-linear-gradient(150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px), repeating-linear-gradient(-150deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.06) 1px, transparent 0, transparent 41px); + background-size: 82px 47px; +} + +header h1 { + margin: 0 0 0.25rem; + color: #ffffff; +} + +header p { + margin-top: 0; + font-size: 1.1rem; +} + +header a:link, +header a:visited { + color: #ffffff; +} + +.logo { + width: 300px; + height: 300px; +} + +@media (min-width: 38em) { + header { + padding-bottom: 4rem; + } +} + +/* Logo list */ + +.logo-list { + max-width: 550px; + margin: 50px auto; +} + +.logo-list ul { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: 0; + padding: 0; + list-style: none; +} + +.logo-list li { + margin-right: 10px; + margin-left: 10px; +} + +/* Gudie content */ + +.guide-content { + display: flex; + flex-wrap: wrap; +} + +/* Sidebar */ + +.sidebar { + display: flex; + flex-direction: column; + width: 100%; +} + +.sidebar a { + display: block; + color: #5a5a5a; +} + +.sidebar a:hover { + color: #3f3ccb; +} + +.sidebar-col { + padding: 2rem 1rem; +} + +.sidebar-col + .sidebar-col { + border-top: 1px solid #e5e5e5; +} + +.sidebar-col > a { + font-size: 1.75rem; + line-height: 1.25; +} + +.sidebar-menu { + padding-left: 1rem; +} + +@media (min-width: 48em) { + .sidebar { + flex-direction: row; + flex-wrap: wrap; + padding: 2rem 0; + } + + .sidebar-col { + width: 50%; + padding: 1rem 3rem; + } + + .sidebar-col + .sidebar-col { + border-top: 0; + } +} + +@media (min-width: 75em) { + .sidebar { + position: sticky; + top: 0; + bottom: 0; + flex-direction: column; + flex-wrap: nowrap; + align-self: flex-start; + width: 230px; + height: 100vh; + padding: 0 1rem; + overflow-y: auto; + line-height: 1.25; + border-right: 1px solid #e5e5e5; + } + + .sidebar-col { + flex-shrink: 0; + width: 100%; + padding: 0; + } + + .sidebar-col-first { + padding-top: 1.75rem; + } + + .sidebar-col-last { + padding-bottom: 1.75rem; + } + + .sidebar-col + .sidebar-col { + margin-top: 1.75em; + } + + .sidebar-col > a { + display: block; + + font-size: 0.8rem; + font-weight: bold; + } + + .sidebar-menu { + padding: 0; + margin: 0.5em 0 0; + list-style: none; + font-size: 0.7rem; + } + + .sidebar-menu li { + margin: 0; + line-height: 1.45; + } + + .sidebar-menu a { + display: block; + padding: 0.25em 0; + } +} + +/* Chapter */ + +.chapters { + width: 100%; +} + +.chapter h2 { + padding: 2rem 1rem; + word-break: break-word; + background-color: #e5e5e5; +} + +.chapter h3[id]::before { + display: block; + height: 2rem; + margin-top: -2rem; + visibility: hidden; + content: ""; +} + +.chapter-part { + display: flex; + flex-direction: column; + border-bottom: 1px solid #e5e5e5; +} + +.chapter-part-col { + padding: 2rem 1rem; +} + +.chapter-part-col figure { + margin: 0 1rem 0 0; +} + +.chapter-part-col p { + max-width: 32rem; +} + +.chapter-part-col + .chapter-part-col { + border-top: 1px solid #e5e5e5; +} + +.gray-bgcolor { + background-color: #fafafa; +} + +@media (min-width: 38em) { + .chapter h2 { + padding: 2rem 2rem 2.5rem; + } + + .chapter-part-col { + padding: 2rem; + } +} + + +@media (min-width: 48em) { + .chapter h2 { + padding: 2rem 3rem 2.5rem; + } + + .chapter-part { + flex-direction: row; + } + + .chapter-part-col { + width: 50%; + padding: 3rem 1.5rem; + } + + .chapter-part-col--full-width { + width: 100%; + } + + .chapter-part-col + .chapter-part-col { + border-top: 0; + } +} + +@media (min-width: 75em) { + .chapters { + width: calc(100% - 230px); + } +} + +/* Footer */ + +footer { + padding: 2rem; + background-color: #2d2d44; +} + +.contacts { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.logo-full { + display: inline-block; + width: 161px; +} + +.social-icons { + display: flex; + justify-content: space-between; + align-items: center; + margin: 0.5rem 0 1rem 0; +} + +.social-icons, +.github { + font-size: 0; +} + +.icon { + min-width: 2rem; + min-height: 2rem; + background-repeat: no-repeat; + background-position: center; + background-size: calc(100% - 5px); + opacity: 0.5; +} + +.icon:hover { + opacity: 1; +} + +.icon-vk { + background-image: url("http://github.com/img/icon-vkontakte.svg"); +} + +.icon-fb { + background-image: url("http://github.com/img/icon-facebook.svg"); +} + +.icon-tw { + background-image: url("http://github.com/img/icon-twitter.svg"); +} + +.icon-ig { + background-image: url("http://github.com/img/icon-instagram.svg"); +} + +.github-link { + display: inline-block; + width: 91px; + height: 16px; + background-image: url("http://github.com/img/github.svg"); +} + +/* Prism */ + +/* override default prism theme */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} + +pre[class*="language-"] { + margin: 0; + padding: 0; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: initial; +} + +/* override default prism theme */ +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} + +pre[class*="language-"] { + margin: 0; + padding: 0; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: initial; +} + +pre.language-correct, +pre.language-incorrect { + padding: 5px 10px; +} + +pre.language-correct { + background: #deeede; +} + +pre.language-incorrect { + background: #f4d3d3; +} + +pre.language-correct .token.operator, +pre.language-incorrect .token.operator { + background: none; +} From 066499ff9568c3e95b8c208351d9276bb58a613a Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 27 Oct 2021 18:03:48 +0300 Subject: [PATCH 094/103] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BB=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20JS=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Обновляет лого для JS * Удаляет лишние атрибуты * Делает три логотипа: HTML, CSS, JS * Сопоставит размеры JS-лого с остальными --- css/style.css | 7 +++++-- img/icon-css.svg | 1 + img/icon-html.svg | 1 + img/icon-javascript.svg | 1 + img/logo-html.svg | 1 - img/logo-js.svg | 2 +- index.html | 8 ++++++-- 7 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 img/icon-css.svg create mode 100644 img/icon-html.svg create mode 100644 img/icon-javascript.svg delete mode 100644 img/logo-html.svg diff --git a/css/style.css b/css/style.css index df96900..3bd53e6 100644 --- a/css/style.css +++ b/css/style.css @@ -136,6 +136,10 @@ header a:visited { height: 300px; } +.logo-list-js { + margin: 11px 23px 0; +} + @media (min-width: 38em) { header { padding-bottom: 4rem; @@ -145,14 +149,13 @@ header a:visited { /* Logo list */ .logo-list { - max-width: 550px; margin: 50px auto; } .logo-list ul { display: flex; flex-wrap: wrap; - justify-content: space-around; + justify-content: center; margin: 0; padding: 0; list-style: none; diff --git a/img/icon-css.svg b/img/icon-css.svg new file mode 100644 index 0000000..3d8959a --- /dev/null +++ b/img/icon-css.svg @@ -0,0 +1 @@ +file_type_css \ No newline at end of file diff --git a/img/icon-html.svg b/img/icon-html.svg new file mode 100644 index 0000000..a0152d8 --- /dev/null +++ b/img/icon-html.svg @@ -0,0 +1 @@ +file_type_html \ No newline at end of file diff --git a/img/icon-javascript.svg b/img/icon-javascript.svg new file mode 100644 index 0000000..92316ce --- /dev/null +++ b/img/icon-javascript.svg @@ -0,0 +1 @@ + diff --git a/img/logo-html.svg b/img/logo-html.svg deleted file mode 100644 index 101e1ff..0000000 --- a/img/logo-html.svg +++ /dev/null @@ -1 +0,0 @@ -HTML5 Logo diff --git a/img/logo-js.svg b/img/logo-js.svg index d609063..3895f98 100644 --- a/img/logo-js.svg +++ b/img/logo-js.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/index.html b/index.html index efd2507..5df2a0b 100644 --- a/index.html +++ b/index.html @@ -41,12 +41,16 @@

    Разделы стиля кода

    From 343afcc8ebff142508942d6d971a91391f4fe4ba Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 27 Oct 2021 18:04:13 +0300 Subject: [PATCH 095/103] =?UTF-8?q?*=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20EditorConfig=20=D0=B2=20README.md=20?= =?UTF-8?q?(#56)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Приводит список конфигов к единому виду --- Readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Readme.md b/Readme.md index 8d23780..871bf7a 100644 --- a/Readme.md +++ b/Readme.md @@ -1,5 +1,6 @@ -# Стиль кода Академии HTML -Стиль кода можно [посмотреть тут](https://codeguide.academy/). +# Стиль кода .html academy + +Это исходники, публичная версия на сайте [codeguide.academy](https://codeguide.academy/). ## Благодарности @@ -10,12 +11,11 @@ ## Лицензия -Лицензия MIT, смотрите файл `License.md`. - -## Конфигурации линтеров - -ESLint — https://github.com/htmlacademy/eslint-config-htmlacademy +[MIT](./License.md). -Stylelint — https://github.com/htmlacademy/stylelint-config-htmlacademy +## Правила линтеров -linthtml — https://github.com/htmlacademy/linthtml-config-htmlacademy +* [EditorConfig](.editorconfig) +* [ESLint](https://github.com/htmlacademy/eslint-config-htmlacademy) +* [Stylelint](https://github.com/htmlacademy/stylelint-config-htmlacademy) +* [HTMLHint](https://github.com/htmlacademy/htmlhint-config-htmlacademy) From bfd3876aef6f63d115a3acc8945e1bdc3085e817 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 9 Nov 2021 15:34:17 +0300 Subject: [PATCH 096/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BF=D1=80=D0=BE=20=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D1=86=D1=83=20=D0=B8=D0=B7=D0=BC=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BA=D0=B0=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D0=BD=D1=8B=D1=85=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B0=D1=85=20(#66)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index eff6a65..cb8db70 100644 --- a/html-css.html +++ b/html-css.html @@ -870,22 +870,35 @@

    Повторяющиеся свойства

    Единицы измерения

    -

    Единицы измерения не указаны там, где в них нет необходимости.

    +
      +
    • Единицы измерения не указаны там, где в них нет необходимости.
    • +
    • В кастомных свойствах нужно указывать единицу измерения.
    • +
    /* Хорошо */
    +:root {
    +  --size: 0px;
    +}
    +
     .element {
       border: 0;
       box-shadow: 0 1px 2px #cccccc, inset 0 1px 0 #ffffff;
       margin-top: 0;
    +  width: calc(100% - var(--size));
     }
     
     /* Плохо */
    +:root {
    +  --size: 0;
    +}
    +
     .element {
       border: 0px;
       box-shadow: 0px 1px 2px #cccccc, inset 0px 1px 0 #ffffff;
       margin-top: 0px;
    +  width: calc(100% - var(--size));
     }
     
     
    From ad1ae7ce150a5bbaf5c8eddfb35d426591f7a096 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 28 Dec 2021 17:20:44 +0300 Subject: [PATCH 097/103] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20sticky-footer=20(#63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/style.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/css/style.css b/css/style.css index 3bd53e6..a125c80 100644 --- a/css/style.css +++ b/css/style.css @@ -8,15 +8,19 @@ html { scroll-behavior: smooth; + height: 100%; } body { margin: 0; + min-height: 100%; font-size: 16px; line-height: 1.6; font-family: "Helvetica", "Arial", sans-serif; color: #5a5a5a; background-color: #ffffff; + display: flex; + flex-direction: column; } a:link, @@ -373,6 +377,7 @@ header a:visited { footer { padding: 2rem; + margin-top: auto; background-color: #2d2d44; } From 522f0f7ece0122a0969f61ebdc625ee0bbdfe301 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 28 Dec 2021 17:20:52 +0300 Subject: [PATCH 098/103] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20normalize=20(#64)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/normalize.css | 349 ---------------------------------------------- html-css.html | 1 - index.html | 1 - javascript.html | 1 - 4 files changed, 352 deletions(-) delete mode 100644 css/normalize.css diff --git a/css/normalize.css b/css/normalize.css deleted file mode 100644 index 192eb9c..0000000 --- a/css/normalize.css +++ /dev/null @@ -1,349 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} diff --git a/html-css.html b/html-css.html index cb8db70..02afb73 100644 --- a/html-css.html +++ b/html-css.html @@ -12,7 +12,6 @@ - diff --git a/index.html b/index.html index 5df2a0b..e1c162d 100644 --- a/index.html +++ b/index.html @@ -12,7 +12,6 @@ - diff --git a/javascript.html b/javascript.html index e3917bc..64f8089 100644 --- a/javascript.html +++ b/javascript.html @@ -12,7 +12,6 @@ - From 9952b013ed8e86f83bb1cbb86105580367c96bc1 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Tue, 28 Dec 2021 17:21:00 +0300 Subject: [PATCH 099/103] =?UTF-8?q?=D0=A7=D0=B8=D0=BD=D0=B8=D1=82=20target?= =?UTF-8?q?=3D"=5Fblank"=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 12 ++++++------ index.html | 10 +++++----- javascript.html | 16 ++++++++-------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/html-css.html b/html-css.html index 02afb73..eaf18aa 100644 --- a/html-css.html +++ b/html-css.html @@ -581,7 +581,7 @@

    Подключение скриптов

    Валидность

    - Документ проходит проверку на валидность. Для проверки используется современный валидатор. + Документ проходит проверку на валидность. Для проверки используется современный валидатор.

    @@ -1077,21 +1077,21 @@

    Порядок свойств

    HTML Academy diff --git a/index.html b/index.html index e1c162d..275e707 100644 --- a/index.html +++ b/index.html @@ -63,21 +63,21 @@

    Разделы стиля кода

    HTML Academy diff --git a/javascript.html b/javascript.html index 64f8089..cf17b2d 100644 --- a/javascript.html +++ b/javascript.html @@ -96,7 +96,7 @@

    Синтаксис

    Отступы, пробелы и переносы

    -
    Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
    +
    Для правильного форматирования используйте файл .editorconfig в вашем редакторе.

    Для отступов используются два пробела. Знак табуляции не используется

    @@ -247,7 +247,7 @@

    Именование

    Запрещено использовать имена переменных, которые используются во внешних областях видимости

    -

    Запрещено называть переменные и свойства ключевыми словами JS

    +

    Запрещено называть переменные и свойства ключевыми словами JS

    Запрещено использовать переменные, не объявленные ранее. При использовании переменной, объявленной в другом модуле в глобальной области видимости, нужно обращаться к ней как к свойству объекта window

    @@ -287,7 +287,7 @@

    Условные операторы

    В условиях не используется небезопасное отрицание, например использование ! в in или instanceof без скобок

    -

    Запрещено сравнение с NaN. Для проверки, является ли результат операции числовым, нужно использовать Number.isNaN

    +

    Запрещено сравнение с NaN. Для проверки, является ли результат операции числовым, нужно использовать Number.isNaN

    Запрещено использовать case без break или return в блоках switch

    @@ -555,21 +555,21 @@

    Регулярные выражения

    HTML Academy From 4c72ae2ad97db5db885a87a99da0b1700d43e242 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 29 Dec 2021 17:53:46 +0300 Subject: [PATCH 100/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=86=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20(#67)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/html-css.html b/html-css.html index eaf18aa..dd6df48 100644 --- a/html-css.html +++ b/html-css.html @@ -668,7 +668,7 @@

    Структура объявления

    .block{margin-bottom: 0; margin-top: 0; font-size: 14px;line-height: 20; - color :red} + color :#ff0000} .element { background-color: #000000; } @@ -786,12 +786,12 @@

    Кавычки

    /* Хорошо */
     .field[type="text"] {
    -  background-color: url("http://github.com/images/cat.jpg");
    +  background-image: url("http://github.com/images/cat.jpg");
     }
     
     /* Плохо */
     .field[type=text] {
    -  background-color: url(http://github.com/images/cat.jpg);
    +  background-image: url(http://github.com/images/cat.jpg);
     }
     
     
    @@ -815,11 +815,6 @@

    Ведущий ноль и пробелы после background-color: rgba(0, 0, 0, 0.5); } -.element { - background-color: rgb(0, 0, 0); - color: rgba(0, 0, 0, 0.5); -} - /* Плохо */ .block { opacity: .5; @@ -827,7 +822,6 @@

    Ведущий ноль и пробелы после } .element { - background-color: rgb(0,0,0); color: rgba(0 ,0 ,0 ,0.5); } From ca5ef8642c24f32d8867c8b3ffbc14bd176ea095 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 12 Jan 2022 22:19:00 +0300 Subject: [PATCH 101/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=90=D0=BA=D0=B0=D0=B4=D0=B5=D0=BC=D0=B8=D0=B8?= =?UTF-8?q?=20(#68)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 6 +++--- index.html | 6 +++--- javascript.html | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/html-css.html b/html-css.html index dd6df48..db77366 100644 --- a/html-css.html +++ b/html-css.html @@ -2,14 +2,14 @@ - Стиль кода Академии HTML + Стиль кода HTML Academy - + @@ -27,7 +27,7 @@ -

    Стиль кода Академии HTML

    +

    Стиль кода HTML Academy

    github.com/htmlacademy/codeguide

    diff --git a/index.html b/index.html index 275e707..e8fc7e6 100644 --- a/index.html +++ b/index.html @@ -2,14 +2,14 @@ - Стиль кода Академии HTML + Стиль кода HTML Academy - + @@ -28,7 +28,7 @@ -

    Стиль кода Академии HTML

    +

    Стиль кода HTML Academy

    github.com/htmlacademy/codeguide

    diff --git a/javascript.html b/javascript.html index cf17b2d..62bf3b1 100644 --- a/javascript.html +++ b/javascript.html @@ -2,14 +2,14 @@ - Стиль кода Академии HTML + Стиль кода HTML Academy - + @@ -35,7 +35,7 @@ -

    Стиль кода Академии HTML

    +

    Стиль кода HTML Academy

    github.com/htmlacademy/codeguide

    From f56ac575f488c1f2cfa407775adfaa1e0a8ca40d Mon Sep 17 00:00:00 2001 From: artem-ns2 Date: Thu, 10 Feb 2022 17:18:43 +0500 Subject: [PATCH 102/103] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BD=D0=B0=20Primer=20Guidelines=20=D0=BE=D1=82=20GitHub?= =?UTF-8?q?=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 871bf7a..947d906 100644 --- a/Readme.md +++ b/Readme.md @@ -7,7 +7,7 @@ * [Code Guide](http://codeguide.co) by @mdo * [CSS Guidelines](http://cssguidelin.es) by Harry Roberts * [Idiomatic CSS](https://github.com/necolas/idiomatic-css) by Nicolas Gallagher -* [Primer Guidelines](https://styleguide.github.com/primer/principles/) by GitHub +* [Primer Guidelines](https://primer.style/css/) by GitHub ## Лицензия From d8665abb284a3a7ca93c7ed05e4fdc2f143afc23 Mon Sep 17 00:00:00 2001 From: Nikolai Shabalin Date: Wed, 28 Jun 2023 19:51:29 +0300 Subject: [PATCH 103/103] =?UTF-8?q?=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html-css.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/html-css.html b/html-css.html index db77366..8e52a6a 100644 --- a/html-css.html +++ b/html-css.html @@ -212,7 +212,7 @@

    Базовые части разметки

  • Корневой элемент <html> с языком документа lang
  • Метаинформация <head>
  • Заголовок документа <title>
  • -
  • Кодировка документа <meta charset="utf-8">. Кодировка символов на странице явно указана, чтобы обеспечить корректное отображение текста. Кодировка utf-8 предпочтительна.
  • +
  • Кодировка документа <meta charset="utf-8">. Кодировка символов на странице явно указана, чтобы обеспечить корректное отображение текста.
  • Тело документа <body>
  • @@ -234,6 +234,14 @@

    Базовые части разметки

    <title>Заголовок</title> Страница </html> + +<!-- Плохо --> +<!DOCTYPE html> +<html lang="ru"> + <head> + <meta charset="windows-1251"> + </head> +</html>