From 67106d83630e2bc8314fdef0f938dadd262a1d2a Mon Sep 17 00:00:00 2001 From: dima716 Date: Sun, 10 Jan 2016 21:28:48 +0300 Subject: [PATCH 1/2] Code guide v1 --- app/css/chapter.css | 9 + app/css/footer.css | 51 +--- app/css/general.css | 5 + app/css/header.css | 12 +- app/css/style.css | 2 +- app/css/variables.css | 2 +- app/img/bane.svg | 1 - app/img/github.svg | 1 - app/img/icon-facebook.svg | 1 - app/img/icon-instagram.svg | 1 - app/img/icon-twitter.svg | 1 - app/img/icon-vkontakte.svg | 1 - app/img/logo-full.svg | 1 - app/img/logo.png | Bin 0 -> 14041 bytes app/img/logo.svg | 1 - app/img/og.png | Bin 51783 -> 0 bytes app/js/app.js | 5 + app/templates/index.hbs | 161 +++++++----- .../angular/examples/jquery-cache-example.hbs | 22 ++ .../examples/jquery-events-example.hbs | 21 ++ .../jquery-search-elements-example.hbs | 39 +++ .../examples/jquery-variables-example.hbs | 5 + .../partials/angular/jquery-rules.hbs | 51 ++++ .../partials/angular/rules/jquery-cache.hbs | 2 + .../partials/angular/rules/jquery-events.hbs | 2 + .../angular/rules/jquery-search-elements.hbs | 5 + .../angular/rules/jquery-variables.hbs | 2 + .../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 | 21 -- .../partials/css/rules/css-vertical-align.hbs | 10 - app/templates/partials/footer.hbs | 21 +- .../examples/git-branch-naming-example.hbs | 9 + app/templates/partials/git/git-rules.hbs | 12 + .../partials/git/rules/git-branch-naming.hbs | 19 ++ app/templates/partials/header.hbs | 6 +- .../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 --- .../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 | 7 - .../partials/html/rules/html-validator.hbs | 4 - .../examples/jade-classes-ids-example.hbs | 9 + .../jade/examples/jade-comments-example.hbs | 12 + .../examples/jade-inline-elements-example.hbs | 14 ++ .../examples/jade-linewrapping-example.hbs | 24 ++ .../jade/examples/jade-long-lines-example.hbs | 12 + .../jade/examples/jade-mixins-example.hbs | 22 ++ .../examples/jade-number-values-example.hbs | 5 + .../jade-several-attributes-example.hbs | 5 + .../jade-single-attributes-example.hbs | 5 + .../examples/jade-single-quotes-example.hbs | 5 + .../jade-unnecessary-attributes-example.hbs | 5 + .../partials/jade/jade-recomendations.hbs | 13 + .../html-rules.hbs => jade/jade-rules.hbs} | 71 +++--- .../recomendations/jade-include-partials.hbs | 8 + .../jade/recomendations/jade-useful-links.hbs | 6 + .../partials/jade/rules/jade-classes-ids.hbs | 2 + .../partials/jade/rules/jade-comments.hbs | 3 + .../jade/rules/jade-inline-elements.hbs | 3 + .../partials/jade/rules/jade-linewrapping.hbs | 2 + .../partials/jade/rules/jade-long-lines.hbs | 2 + .../partials/jade/rules/jade-mixins.hbs | 2 + .../jade/rules/jade-number-values.hbs | 2 + .../jade/rules/jade-several-attributes.hbs | 2 + .../jade/rules/jade-single-attributes.hbs | 2 + .../jade/rules/jade-single-quotes.hbs | 2 + .../rules/jade-unnecessary-attributes.hbs | 2 + .../jquery/examples/jquery-cache-example.hbs | 22 ++ .../jquery/examples/jquery-events-example.hbs | 21 ++ .../jquery-search-elements-example.hbs | 39 +++ .../examples/jquery-variables-example.hbs | 5 + .../partials/jquery/jquery-rules.hbs | 51 ++++ .../partials/jquery/rules/jquery-cache.hbs | 2 + .../partials/jquery/rules/jquery-events.hbs | 2 + .../jquery/rules/jquery-search-elements.hbs | 5 + .../jquery/rules/jquery-variables.hbs | 2 + .../examples/js-access-functions-example.hbs | 37 +++ .../js/examples/js-code-blocks-example.hbs | 22 ++ .../js/examples/js-comments-example.hbs | 70 ++++++ .../js/examples/js-conditionals-example.hbs | 27 +++ .../js/examples/js-constructors-example.hbs | 55 +++++ .../js/examples/js-copy-array-example.hbs | 11 + .../examples/js-copy-array-like-example.hbs | 4 + .../js/examples/js-events-example.hbs | 19 ++ .../js/examples/js-functions-example.hbs | 42 ++++ .../js/examples/js-key-words-example.hbs | 14 ++ .../js-naming-conventions-example.hbs | 88 +++++++ .../js/examples/js-properties-example.hbs | 22 ++ .../js/examples/js-reserved-words-example.hbs | 11 + .../js/examples/js-spaces-example.hbs | 52 ++++ .../js/examples/js-strings-example.hbs | 27 +++ .../js/examples/js-syntax-example.hbs | 2 + .../js/examples/js-variables-example.hbs | 83 +++++++ app/templates/partials/js/js-rules.hbs | 229 ++++++++++++++++++ .../js/recomendations/js-useful-links.hbs | 6 + .../partials/js/rules/js-access-functions.hbs | 5 + .../partials/js/rules/js-code-blocks.hbs | 2 + .../partials/js/rules/js-comments.hbs | 6 + .../partials/js/rules/js-conditionals.hbs | 12 + .../partials/js/rules/js-constructors.hbs | 4 + .../partials/js/rules/js-copy-array-like.hbs | 2 + .../partials/js/rules/js-copy-array.hbs | 2 + app/templates/partials/js/rules/js-events.hbs | 2 + .../partials/js/rules/js-functions.hbs | 4 + .../partials/js/rules/js-key-words.hbs | 2 + .../js/rules/js-naming-conventions.hbs | 7 + .../partials/js/rules/js-properties.hbs | 3 + .../partials/js/rules/js-reserved-words.hbs | 2 + app/templates/partials/js/rules/js-spaces.hbs | 3 + .../partials/js/rules/js-strings.hbs | 3 + app/templates/partials/js/rules/js-syntax.hbs | 3 + .../partials/js/rules/js-variables.hbs | 4 + .../stylus-composite-block-name-example.hbs | 25 ++ .../examples/stylus-indentation-example.hbs | 13 + .../examples/stylus-mixins-blocks-example.hbs | 11 + .../examples/stylus-one-block-example.hbs | 36 +++ .../examples/stylus-problems-example.hbs | 13 + .../examples/stylus-space-classes-example.hbs | 17 ++ .../stylus/examples/stylus-syntax-example.hbs | 14 ++ .../stylus/examples/stylus-total-example.hbs | 73 ++++++ .../stylus-unnecessary-symbols-example.hbs | 14 ++ .../stylus-general-recomendations.hbs | 3 + .../stylus/recomendations/stylus-problems.hbs | 3 + .../recomendations/stylus-useful-links.hbs | 3 + .../recomendations/stylus-variables.hbs | 8 + .../rules/stylus-composite-block-name.hbs | 2 + .../stylus/rules/stylus-indentation.hbs | 7 + .../stylus/rules/stylus-mixins-blocks.hbs | 2 + .../stylus/rules/stylus-one-block.hbs | 2 + .../stylus/rules/stylus-space-classes.hbs | 3 + .../partials/stylus/rules/stylus-syntax.hbs | 3 + .../partials/stylus/rules/stylus-total.hbs | 2 + .../rules/stylus-unnecessary-symbols.hbs | 2 + .../partials/stylus/stylus-recomendations.hbs | 33 +++ .../partials/stylus/stylus-rules.hbs | 103 ++++++++ 174 files changed, 1964 insertions(+), 820 deletions(-) delete mode 100644 app/img/bane.svg delete mode 100644 app/img/github.svg delete mode 100644 app/img/icon-facebook.svg delete mode 100644 app/img/icon-instagram.svg delete mode 100644 app/img/icon-twitter.svg delete mode 100644 app/img/icon-vkontakte.svg delete mode 100644 app/img/logo-full.svg create mode 100644 app/img/logo.png delete mode 100644 app/img/logo.svg delete mode 100644 app/img/og.png create mode 100644 app/templates/partials/angular/examples/jquery-cache-example.hbs create mode 100644 app/templates/partials/angular/examples/jquery-events-example.hbs create mode 100644 app/templates/partials/angular/examples/jquery-search-elements-example.hbs create mode 100644 app/templates/partials/angular/examples/jquery-variables-example.hbs create mode 100644 app/templates/partials/angular/jquery-rules.hbs create mode 100644 app/templates/partials/angular/rules/jquery-cache.hbs create mode 100644 app/templates/partials/angular/rules/jquery-events.hbs create mode 100644 app/templates/partials/angular/rules/jquery-search-elements.hbs create mode 100644 app/templates/partials/angular/rules/jquery-variables.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 create mode 100644 app/templates/partials/git/examples/git-branch-naming-example.hbs create mode 100644 app/templates/partials/git/git-rules.hbs create mode 100644 app/templates/partials/git/rules/git-branch-naming.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/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 create mode 100644 app/templates/partials/jade/examples/jade-classes-ids-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-comments-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-inline-elements-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-linewrapping-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-long-lines-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-mixins-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-number-values-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-several-attributes-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-single-attributes-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-single-quotes-example.hbs create mode 100644 app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs create mode 100644 app/templates/partials/jade/jade-recomendations.hbs rename app/templates/partials/{html/html-rules.hbs => jade/jade-rules.hbs} (53%) create mode 100644 app/templates/partials/jade/recomendations/jade-include-partials.hbs create mode 100644 app/templates/partials/jade/recomendations/jade-useful-links.hbs create mode 100644 app/templates/partials/jade/rules/jade-classes-ids.hbs create mode 100644 app/templates/partials/jade/rules/jade-comments.hbs create mode 100644 app/templates/partials/jade/rules/jade-inline-elements.hbs create mode 100644 app/templates/partials/jade/rules/jade-linewrapping.hbs create mode 100644 app/templates/partials/jade/rules/jade-long-lines.hbs create mode 100644 app/templates/partials/jade/rules/jade-mixins.hbs create mode 100644 app/templates/partials/jade/rules/jade-number-values.hbs create mode 100644 app/templates/partials/jade/rules/jade-several-attributes.hbs create mode 100644 app/templates/partials/jade/rules/jade-single-attributes.hbs create mode 100644 app/templates/partials/jade/rules/jade-single-quotes.hbs create mode 100644 app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs create mode 100644 app/templates/partials/jquery/examples/jquery-cache-example.hbs create mode 100644 app/templates/partials/jquery/examples/jquery-events-example.hbs create mode 100644 app/templates/partials/jquery/examples/jquery-search-elements-example.hbs create mode 100644 app/templates/partials/jquery/examples/jquery-variables-example.hbs create mode 100644 app/templates/partials/jquery/jquery-rules.hbs create mode 100644 app/templates/partials/jquery/rules/jquery-cache.hbs create mode 100644 app/templates/partials/jquery/rules/jquery-events.hbs create mode 100644 app/templates/partials/jquery/rules/jquery-search-elements.hbs create mode 100644 app/templates/partials/jquery/rules/jquery-variables.hbs create mode 100644 app/templates/partials/js/examples/js-access-functions-example.hbs create mode 100644 app/templates/partials/js/examples/js-code-blocks-example.hbs create mode 100644 app/templates/partials/js/examples/js-comments-example.hbs create mode 100644 app/templates/partials/js/examples/js-conditionals-example.hbs create mode 100644 app/templates/partials/js/examples/js-constructors-example.hbs create mode 100644 app/templates/partials/js/examples/js-copy-array-example.hbs create mode 100644 app/templates/partials/js/examples/js-copy-array-like-example.hbs create mode 100644 app/templates/partials/js/examples/js-events-example.hbs create mode 100644 app/templates/partials/js/examples/js-functions-example.hbs create mode 100644 app/templates/partials/js/examples/js-key-words-example.hbs create mode 100644 app/templates/partials/js/examples/js-naming-conventions-example.hbs create mode 100644 app/templates/partials/js/examples/js-properties-example.hbs create mode 100644 app/templates/partials/js/examples/js-reserved-words-example.hbs create mode 100644 app/templates/partials/js/examples/js-spaces-example.hbs create mode 100644 app/templates/partials/js/examples/js-strings-example.hbs create mode 100644 app/templates/partials/js/examples/js-syntax-example.hbs create mode 100644 app/templates/partials/js/examples/js-variables-example.hbs create mode 100644 app/templates/partials/js/js-rules.hbs create mode 100644 app/templates/partials/js/recomendations/js-useful-links.hbs create mode 100644 app/templates/partials/js/rules/js-access-functions.hbs create mode 100644 app/templates/partials/js/rules/js-code-blocks.hbs create mode 100644 app/templates/partials/js/rules/js-comments.hbs create mode 100644 app/templates/partials/js/rules/js-conditionals.hbs create mode 100644 app/templates/partials/js/rules/js-constructors.hbs create mode 100644 app/templates/partials/js/rules/js-copy-array-like.hbs create mode 100644 app/templates/partials/js/rules/js-copy-array.hbs create mode 100644 app/templates/partials/js/rules/js-events.hbs create mode 100644 app/templates/partials/js/rules/js-functions.hbs create mode 100644 app/templates/partials/js/rules/js-key-words.hbs create mode 100644 app/templates/partials/js/rules/js-naming-conventions.hbs create mode 100644 app/templates/partials/js/rules/js-properties.hbs create mode 100644 app/templates/partials/js/rules/js-reserved-words.hbs create mode 100644 app/templates/partials/js/rules/js-spaces.hbs create mode 100644 app/templates/partials/js/rules/js-strings.hbs create mode 100644 app/templates/partials/js/rules/js-syntax.hbs create mode 100644 app/templates/partials/js/rules/js-variables.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-composite-block-name-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-indentation-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-mixins-blocks-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-one-block-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-problems-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-space-classes-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-syntax-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-total-example.hbs create mode 100644 app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs create mode 100644 app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs create mode 100644 app/templates/partials/stylus/recomendations/stylus-problems.hbs create mode 100644 app/templates/partials/stylus/recomendations/stylus-useful-links.hbs create mode 100644 app/templates/partials/stylus/recomendations/stylus-variables.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-composite-block-name.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-indentation.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-mixins-blocks.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-one-block.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-space-classes.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-syntax.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-total.hbs create mode 100644 app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs create mode 100644 app/templates/partials/stylus/stylus-recomendations.hbs create mode 100644 app/templates/partials/stylus/stylus-rules.hbs diff --git a/app/css/chapter.css b/app/css/chapter.css index 5c13650..f4c276d 100644 --- a/app/css/chapter.css +++ b/app/css/chapter.css @@ -20,6 +20,7 @@ @media (--viewport-large) { flex-direction: row; + flex-wrap: wrap; } } @@ -55,3 +56,11 @@ .gray-bgcolor { background-color: var(--light-subtle-color); } + +.text-bold { + font-weight: 800; +} + +.text-center { + text-align: center; +} \ No newline at end of file diff --git a/app/css/footer.css b/app/css/footer.css index 00bac59..c3ad527 100644 --- a/app/css/footer.css +++ b/app/css/footer.css @@ -1,7 +1,7 @@ footer { padding: 2rem; - background-color: var(--brand-color-dark); + background-color: var(--subtle-color); } .contacts { @@ -16,52 +16,3 @@ footer { 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 index 5f1107d..eef70c5 100644 --- a/app/css/general.css +++ b/app/css/general.css @@ -1,5 +1,10 @@ +*, *:before, *:after { + box-sizing: inherit; +} + html { font-size: var(--base-px-size); + box-sizing: border-box; @media (--viewport-large) { font-size: var(--large-px-size); diff --git a/app/css/header.css b/app/css/header.css index cf9557a..c629458 100644 --- a/app/css/header.css +++ b/app/css/header.css @@ -5,8 +5,8 @@ header { 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); + repeating-linear-gradient(150deg, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.06) 1px, transparent 0, transparent 41px), + repeating-linear-gradient(-150deg, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.06) 1px, transparent 0, transparent 41px); @media (--viewport-medium) { padding-bottom: 4rem; @@ -15,7 +15,7 @@ header { h1 { margin: 0 0 0.25rem; - color: var(--light-color); + color: var(--dark-color); } p { @@ -25,11 +25,11 @@ header { } a:any-link { - color: var(--light-color); + color: var(--dark-color); } } .logo { - width: 300px; - height: 300px; + width: auto; + height: auto; } diff --git a/app/css/style.css b/app/css/style.css index df17289..8024fb0 100644 --- a/app/css/style.css +++ b/app/css/style.css @@ -1,7 +1,7 @@ @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/prismjs/themes/prism.css"; @import "http://github.com/general.css"; @import "http://github.com/prism.css"; diff --git a/app/css/variables.css b/app/css/variables.css index e3e493b..18a3f54 100644 --- a/app/css/variables.css +++ b/app/css/variables.css @@ -2,7 +2,7 @@ --base-px-size: 16px; --large-px-size: calc(var(--base-px-size) * 1.25); - --brand-color: #312785; + --brand-color: #fff; --brand-color-dark: #2d2d44; --dark-color: #5a5a5a; diff --git a/app/img/bane.svg b/app/img/bane.svg deleted file mode 100644 index 2e5cc47..0000000 --- a/app/img/bane.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/img/github.svg b/app/img/github.svg deleted file mode 100644 index e1cffa9..0000000 --- a/app/img/github.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/img/icon-facebook.svg b/app/img/icon-facebook.svg deleted file mode 100644 index 77beec6..0000000 --- a/app/img/icon-facebook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/img/icon-instagram.svg b/app/img/icon-instagram.svg deleted file mode 100644 index 74ac48c..0000000 --- a/app/img/icon-instagram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/img/icon-twitter.svg b/app/img/icon-twitter.svg deleted file mode 100644 index d5eae0c..0000000 --- a/app/img/icon-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/img/icon-vkontakte.svg b/app/img/icon-vkontakte.svg deleted file mode 100644 index f2c7d01..0000000 --- a/app/img/icon-vkontakte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/img/logo-full.svg b/app/img/logo-full.svg deleted file mode 100644 index 7319e8a..0000000 --- a/app/img/logo-full.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/img/logo.png b/app/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b942f64e1534388f31cd24c3fb70f44c2828c1df GIT binary patch literal 14041 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 \ No newline at end of file diff --git a/app/img/og.png b/app/img/og.png deleted file mode 100644 index 3e9d36b961a8111143682bc8ac68faad88d71319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51783 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 I>zopr0EWSM`Tzg` diff --git a/app/js/app.js b/app/js/app.js index fb99126..8ed8038 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1 +1,6 @@ import 'prismjs'; +import 'prismjs/components/prism-stylus.js'; +import 'prismjs/components/prism-jade.js'; +import 'prismjs/components/prism-javascript.js'; +import 'prismjs/components/prism-git.js'; + diff --git a/app/templates/index.hbs b/app/templates/index.hbs index 1fe672b..3293278 100644 --- a/app/templates/index.hbs +++ b/app/templates/index.hbs @@ -1,69 +1,122 @@ - + - Стиль кода Академии HTML + Стиль кода Aitarget - - - - - - - - - - + + -
- {{~> header ~}} +
+ {{~> header ~}} -
+

Оглавление

- - + + + +
+

Angular

+ +
+
-
+
+ +
+

Jade

+ {{~> jade/jade-rules ~}} + {{~> jade/jade-recomendations ~}} +
+ +
+

Stylus

+ {{~> stylus/stylus-rules ~}} + {{~> stylus/stylus-recomendations ~}} +
+ +
+

JavaScript

+ {{~> js/js-rules ~}} +
-
-

HTML

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

jQuery

+ {{~> jquery/jquery-rules ~}} +
-
-

CSS

- {{~> css/css-rules ~}} -
+
+

Git

+ {{~> git/git-rules ~}} +
- {{~> footer ~}} -
+ {{~> footer ~}} +
- - + + diff --git a/app/templates/partials/angular/examples/jquery-cache-example.hbs b/app/templates/partials/angular/examples/jquery-cache-example.hbs new file mode 100644 index 0000000..3bf0db9 --- /dev/null +++ b/app/templates/partials/angular/examples/jquery-cache-example.hbs @@ -0,0 +1,22 @@ +/* Плохо */ +function setSidebar() { + $('#sidebar').hide(); + + // ...код... + + $('#sidebar').css({ + backgroundColor: 'pink' + }); +} + +/* Хорошо */ +function setSidebar() { + var $sidebar = $('#sidebar'); + $sidebar.hide(); + + // ...код... + + $sidebar.css({ + backgroundColor: 'pink' + }); +} \ No newline at end of file diff --git a/app/templates/partials/angular/examples/jquery-events-example.hbs b/app/templates/partials/angular/examples/jquery-events-example.hbs new file mode 100644 index 0000000..cb97f61 --- /dev/null +++ b/app/templates/partials/angular/examples/jquery-events-example.hbs @@ -0,0 +1,21 @@ +/* Плохо */ +$input + .click(function () { /* ... */ }) + .focus(function () { /* ... */ }) + .blur(function () { /* ... */ }); + +/* Хорошо */ +$input + .on('click', function () { /* ... */ }) + .on('focus', function () { /* ... */ }) + .on('blur', function () { /* ... */ }); + +/* Лучше */ +// Несколько событий разделяются пробелами +$field.on('click focus', function () { /* ... */ }); + +$input.on({ + // Несколько событий разделяются пробелами + 'click focus': function () { /* ... */ }, + blur: function () { /* ... */ } +}); \ No newline at end of file diff --git a/app/templates/partials/angular/examples/jquery-search-elements-example.hbs b/app/templates/partials/angular/examples/jquery-search-elements-example.hbs new file mode 100644 index 0000000..3c5a3f5 --- /dev/null +++ b/app/templates/partials/angular/examples/jquery-search-elements-example.hbs @@ -0,0 +1,39 @@ +/* Плохо */ +$('ul', '#sidebar').hide(); + +/* Плохо */ +$('#sidebar').find('ul').hide(); + +/* Хорошо */ +$('#sidebar ul').hide(); + +/* Хорошо */ +$('#sidebar > ul').hide(); + +/* Хорошо */ +$sidebar.find('ul').hide(); + + + +/* Плохо */ +$('.menu button'); + +/* Плохо */ +$('.menu button#menuToggler'); + +/* Плохо */ +$('button#menuToggler'); + +/* Хорошо */ +$('#menuToggler'); + + + +/* Плохо */ +$('.navbar-menu__item'); + +/* Плохо */ +$('.js-navbar-menu__item'); + +/* Хорошо */ +$('.js-nav-link'); diff --git a/app/templates/partials/angular/examples/jquery-variables-example.hbs b/app/templates/partials/angular/examples/jquery-variables-example.hbs new file mode 100644 index 0000000..c2efee6 --- /dev/null +++ b/app/templates/partials/angular/examples/jquery-variables-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +var sidebar = $('#sidebar'); + +/* Хорошо */ +var $sidebar = $('#sidebar'); \ No newline at end of file diff --git a/app/templates/partials/angular/jquery-rules.hbs b/app/templates/partials/angular/jquery-rules.hbs new file mode 100644 index 0000000..17564ec --- /dev/null +++ b/app/templates/partials/angular/jquery-rules.hbs @@ -0,0 +1,51 @@ +
+
+ {{~> jquery/rules/jquery-variables ~}} +
+
+
+

+        {{~> jquery/examples/jquery-variables-example ~}}
+      
+
+
+
+ +
+
+ {{~> jquery/rules/jquery-cache ~}} +
+
+
+

+        {{~> jquery/examples/jquery-cache-example ~}}
+      
+
+
+
+ +
+
+ {{~> jquery/rules/jquery-search-elements ~}} +
+
+
+

+        {{~> jquery/examples/jquery-search-elements-example ~}}
+      
+
+
+
+ +
+
+ {{~> jquery/rules/jquery-events ~}} +
+
+
+

+            {{~> jquery/examples/jquery-events-example ~}}
+          
+
+
+
\ No newline at end of file diff --git a/app/templates/partials/angular/rules/jquery-cache.hbs b/app/templates/partials/angular/rules/jquery-cache.hbs new file mode 100644 index 0000000..bae56d5 --- /dev/null +++ b/app/templates/partials/angular/rules/jquery-cache.hbs @@ -0,0 +1,2 @@ +

Кэширование запросов

+

Кэшируйте jQuery-запросы. Каждый новый jQuery-запрос делает повторный поиск по DOM-дереву, и приложение начинает работать медленнее..

diff --git a/app/templates/partials/angular/rules/jquery-events.hbs b/app/templates/partials/angular/rules/jquery-events.hbs new file mode 100644 index 0000000..c75f8d8 --- /dev/null +++ b/app/templates/partials/angular/rules/jquery-events.hbs @@ -0,0 +1,2 @@ +

jQuery события

+

Для задания обработчика элементу используйте метод .on()

diff --git a/app/templates/partials/angular/rules/jquery-search-elements.hbs b/app/templates/partials/angular/rules/jquery-search-elements.hbs new file mode 100644 index 0000000..78fcff1 --- /dev/null +++ b/app/templates/partials/angular/rules/jquery-search-elements.hbs @@ -0,0 +1,5 @@ +

Поиск элементов

+

Для DOM-запросов используйте классический каскадный CSS-синтаксис $('.sidebar ul') или родитель потомок $('.sidebar > ul')

+

Используйте find для поиска внутри DOM-объекта.

+

Для поиска одного элемента используйте только идентификатор #id

+

Для поиска нескольких элементов однотипных по функционалу используйте класс с префиксом .js-* (для разделения названия класса использовать только дефис -), а не класс для стилизации элемента, название класса должно быть небольшим, но и понятным.

\ No newline at end of file diff --git a/app/templates/partials/angular/rules/jquery-variables.hbs b/app/templates/partials/angular/rules/jquery-variables.hbs new file mode 100644 index 0000000..8294469 --- /dev/null +++ b/app/templates/partials/angular/rules/jquery-variables.hbs @@ -0,0 +1,2 @@ +

Наименование переменных

+

Для jQuery-переменных используйте префикс $.

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 357b04b..0000000 --- a/app/templates/partials/css/rules/css-syntax.hbs +++ /dev/null @@ -1,21 +0,0 @@ -

Синтаксис

-
    -
  • После значения свойства обязательно ставится точка с запятой.
  • -
  • Для отступов внутри правил используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
  • -
  • Шестнадцатеричное значение цвета не сокращается, а пишется полностью из всех шести символов. Для записи используются строчные буквы. Например, #f5f5f5.
  • -
  • Названия тегов и свойств в правилах пишутся строчными буквами.
  • -
  • Начальный ноль для значений не сокращается (например, .5 вместо 0.5).
  • -
  • Во всех случаях в стилях используются двойные кавычки. В необязательных случаях кавычки не опускаются.
  • -
  • После двоеточия в правилах ставится один пробел (top: 10px;). А перед двоеточием пробел не нужен.
  • -
  • После запятых внутри значений rgb(), rgba(), hsl(), hsla() или rect() пробелы ставятся. Это повышает удобочитаемость.
  • -
  • До и после комбинатора между селекторами (например, p > a) ставится один пробел.
  • -
  • Каждое объявление в правиле пишется на новой строке.
  • -
  • Перед открывающейся фигурной скобкой ставится один пробел. После скобки запись идёт с новой строки: -
    .selector {
    -  color: #f5f5f5;
    -}
    -
  • -
  • Закрывающая фигурная скобка пишется на новой строке и без отступа. Следующее после этого правило отделяется пустой строкой.
  • -
  • Единицы измерения не пишутся, там где в них нет необходимости. Например, border: 0.
  • -
  • Для автоматического применения этих правил используйте файл конфигурации 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 index b11f00c..d5aaadf 100644 --- a/app/templates/partials/footer.hbs +++ b/app/templates/partials/footer.hbs @@ -1,26 +1,7 @@ diff --git a/app/templates/partials/git/examples/git-branch-naming-example.hbs b/app/templates/partials/git/examples/git-branch-naming-example.hbs new file mode 100644 index 0000000..0a6c209 --- /dev/null +++ b/app/templates/partials/git/examples/git-branch-naming-example.hbs @@ -0,0 +1,9 @@ +/* Плохо */ +shitty-shit +shitty/shit +shitty_shit + +/* Хорошо */ +fix/666/shit +feature/777/breakdowns +style/222/sidebar \ No newline at end of file diff --git a/app/templates/partials/git/git-rules.hbs b/app/templates/partials/git/git-rules.hbs new file mode 100644 index 0000000..b0f6b5b --- /dev/null +++ b/app/templates/partials/git/git-rules.hbs @@ -0,0 +1,12 @@ +
+
+ {{~> git/rules/git-branch-naming ~}} +
+
+
+

+        {{~> git/examples/git-branch-naming-example ~}}
+      
+
+
+
diff --git a/app/templates/partials/git/rules/git-branch-naming.hbs b/app/templates/partials/git/rules/git-branch-naming.hbs new file mode 100644 index 0000000..8561e25 --- /dev/null +++ b/app/templates/partials/git/rules/git-branch-naming.hbs @@ -0,0 +1,19 @@ +

Наименование веток

+

Наименование веток производить по следующему принципу:

+

type/task-number/task-short-title, где

+

type - тип выполняемой задачи. Может быть +

    +
  • feat - новая фича;
  • +
  • fix - багофикс;
  • +
  • docs - изменения в документации;
  • +
  • style - форматирование кода или любые другие изменения, не влияющие на работу кода;
  • +
  • refactor - изменения в коде, которые не относятся к фиксам или фиче;
  • +
  • test - добавлен или обновлён тест;
  • +
  • chore - измененения в сборщике, зависимостях и т.п.
  • +
+

+

task-number - номер выполняемой задачи в Accunote

+

task-short-title - краткое наименование задачи

+ + + diff --git a/app/templates/partials/header.hbs b/app/templates/partials/header.hbs index e37bd5b..08cdf30 100644 --- a/app/templates/partials/header.hbs +++ b/app/templates/partials/header.hbs @@ -1,7 +1,7 @@
- + -

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

-

github.com/htmlacademy/codeguide

+

Стиль кода Aitarget

+

github.com/aitarget/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/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 0ae03b6..0000000 --- a/app/templates/partials/html/rules/html-syntax.hbs +++ /dev/null @@ -1,7 +0,0 @@ -

Синтаксис

-
    -
  • Для отступов у вложенных элементов используются два пробела. Для правильного форматирования используйте файл .editorconfig в вашем редакторе.
  • -
  • Теги и их атрибуты пишутся строчными буквами. Для значений атрибутов всегда используются двойные кавычки.
  • -
  • Необязательный закрывающий слеш у одиночных тегов (<img>, <br> и другие) не ставится.
  • -
  • Необязательные закрывающие теги (например, </li> или </body>) не пропускаются.
  • -
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/app/templates/partials/jade/examples/jade-classes-ids-example.hbs b/app/templates/partials/jade/examples/jade-classes-ids-example.hbs new file mode 100644 index 0000000..5ff0f6e --- /dev/null +++ b/app/templates/partials/jade/examples/jade-classes-ids-example.hbs @@ -0,0 +1,9 @@ +/* Плохо */ +div(class='carousel' id="carousel") +nav(class='nav nav_pos_left') +div(id="carousel") + +/* Хорошо */ +.carousel +nav.nav.nav_pos_left +#carousel \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-comments-example.hbs b/app/templates/partials/jade/examples/jade-comments-example.hbs new file mode 100644 index 0000000..134115f --- /dev/null +++ b/app/templates/partials/jade/examples/jade-comments-example.hbs @@ -0,0 +1,12 @@ +// Этот комментарий попадёт в HTML. + +//- Этот комментарий не попадёт в HTML. + +<!--[if IE]> +meta(name='imagetoolbar' content='no') +meta(name='msthemecompatible' content='no') +<![endif]--> + +<!--noindex--> +Это содержимое не будет индексироваться поисковиком. +<!--/noindex--> \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-inline-elements-example.hbs b/app/templates/partials/jade/examples/jade-inline-elements-example.hbs new file mode 100644 index 0000000..e0d58ef --- /dev/null +++ b/app/templates/partials/jade/examples/jade-inline-elements-example.hbs @@ -0,0 +1,14 @@ +/* Хорошо */ +ul.nav + li.nav__item + a.nav__link(href='http://github.com/') Главная + li.nav__item + a.nav__link(href='http://github.com/projects') Проекты + li.nav__item + a.nav__link(href='http://github.com/contacts') Контакты + +/* Лучше */ +ul.nav + li.nav__item: a.nav__link(href='http://github.com/') Главная + li.nav__item: a.nav__link(href='http://github.com/projects') Проекты + li.nav__item: a.nav__link(href='http://github.com/contacts') Контакты \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-linewrapping-example.hbs b/app/templates/partials/jade/examples/jade-linewrapping-example.hbs new file mode 100644 index 0000000..a573ad0 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-linewrapping-example.hbs @@ -0,0 +1,24 @@ +/* Плохо */ +.project + .project__name Lorem + .project__desc + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. + | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas. +.project + .project__name Ipsum. + .project__desc + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. + | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas. + +/* Хорошо */ +.project + .project__name Lorem + .project__desc + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. + | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas. + +.project + .project__name Ipsum. + .project__desc + | Lorem ipsum dolor sit amet, consectetur adipisicing elit. + | Unde doloremque neque facilis sed repudiandae tempore ipsum provident officia eaque quas. \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-long-lines-example.hbs b/app/templates/partials/jade/examples/jade-long-lines-example.hbs new file mode 100644 index 0000000..994d7c7 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-long-lines-example.hbs @@ -0,0 +1,12 @@ +/* Плохо */ +input.input-text(type='text' name='project' value='csssr' data-required='Это поле обязательно для заполнения!' data-hint='Допустимы только символы латинского алфавита `[a-z-A-Z]` и числа `[0-9]`.' required) + +/* Хорошо */ +input.input-text( + type='text' + name='project' + value='csssr' + data-required='Это поле обязательно для заполнения!' + data-hint='Допустимы только символы латинского алфавита `[a-z-A-Z]` и числа `[0-9]`.' + required +) \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-mixins-example.hbs b/app/templates/partials/jade/examples/jade-mixins-example.hbs new file mode 100644 index 0000000..153eaa4 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-mixins-example.hbs @@ -0,0 +1,22 @@ +mixin tools(list) + ul.list + each item in list + li.list__item + span.mark= item[0] + = ' - ' + item[1] + ++tools([ + ['spritesmith', 'генератор спрайтов и CSS переменных'], + ['imagemin', 'сжатие картинок'] +]) + +Скомпилирует + +<ul class="list"> + <li class="list__item"> + <span class="mark">spritesmith</span> - генератор спрайтов и CSS переменных + </li> + <li class="list__item"> + <span class="mark">imagemin</span> - сжатие картинок + </li> +</ul> \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-number-values-example.hbs b/app/templates/partials/jade/examples/jade-number-values-example.hbs new file mode 100644 index 0000000..ff1b3d9 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-number-values-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +input.input-text(type="text" name="price" value="24999") + +/* Хорошо */ +input.input-text(type='text' name='price' value=24999) \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-several-attributes-example.hbs b/app/templates/partials/jade/examples/jade-several-attributes-example.hbs new file mode 100644 index 0000000..7f9492a --- /dev/null +++ b/app/templates/partials/jade/examples/jade-several-attributes-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +input.input-text(type='text', name='project', value='csssr', required) + +/* Хорошо */ +input.input-text(type='text' name='project' value='csssr' required) \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-single-attributes-example.hbs b/app/templates/partials/jade/examples/jade-single-attributes-example.hbs new file mode 100644 index 0000000..7f4b803 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-single-attributes-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +input.input-checkbox(type='checkbox' checked name='browser[]' value='chrome') + +/* Хорошо */ +input.input-checkbox(type='checkbox' name='browser[]' value='chrome' checked) \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-single-quotes-example.hbs b/app/templates/partials/jade/examples/jade-single-quotes-example.hbs new file mode 100644 index 0000000..14947d1 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-single-quotes-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +input.input-text(type="text" name="project" value="csssr" required) + +/* Хорошо */ +input.input-text(type='text' name='project' value='csssr' required) diff --git a/app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs b/app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs new file mode 100644 index 0000000..6938ea8 --- /dev/null +++ b/app/templates/partials/jade/examples/jade-unnecessary-attributes-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +input.input-checkbox(type='checkbox' name='browser[]' value='chrome' checked='checked') + +/* Хорошо */ +input.input-checkbox(type='checkbox' name='browser[]' value='chrome' checked) \ No newline at end of file diff --git a/app/templates/partials/jade/jade-recomendations.hbs b/app/templates/partials/jade/jade-recomendations.hbs new file mode 100644 index 0000000..f39dfc3 --- /dev/null +++ b/app/templates/partials/jade/jade-recomendations.hbs @@ -0,0 +1,13 @@ +
+
+ {{~> jade/recomendations/jade-include-partials ~}} +
+
+ +
+
+ {{~> jade/recomendations/jade-useful-links ~}} +
+
+ + diff --git a/app/templates/partials/html/html-rules.hbs b/app/templates/partials/jade/jade-rules.hbs similarity index 53% rename from app/templates/partials/html/html-rules.hbs rename to app/templates/partials/jade/jade-rules.hbs index 64d938c..7d11623 100644 --- a/app/templates/partials/html/html-rules.hbs +++ b/app/templates/partials/jade/jade-rules.hbs @@ -1,11 +1,11 @@
- {{~> html/rules/html-syntax ~}} + {{~> jade/rules/jade-classes-ids ~}}
-

-        {{~> html/examples/html-syntax-example ~}}
+      

+        {{~> jade/examples/jade-classes-ids-example ~}}
       
@@ -13,18 +13,25 @@
- {{~> html/rules/html-validator ~}} + {{~> jade/rules/jade-several-attributes ~}} +
+
+
+

+        {{~> jade/examples/jade-several-attributes-example ~}}
+      
+
- {{~> html/rules/html-doctype ~}} + {{~> jade/rules/jade-single-quotes ~}}
-

-        {{~> html/examples/html-doctype-example ~}}
+      

+        {{~> jade/examples/jade-single-quotes-example ~}}
       
@@ -32,12 +39,12 @@
- {{~> html/rules/html-encoding ~}} + {{~> jade/rules/jade-unnecessary-attributes ~}}
-

-        {{~> html/examples/html-encoding-example ~}}
+      

+        {{~> jade/examples/jade-unnecessary-attributes-example ~}}
       
@@ -45,12 +52,12 @@
- {{~> html/rules/html-style-includes ~}} + {{~> jade/rules/jade-single-attributes ~}}
-

-        {{~> html/examples/html-style-includes-example ~}}
+      

+        {{~> jade/examples/jade-single-attributes-example ~}}
       
@@ -58,12 +65,12 @@
- {{~> html/rules/html-js-includes ~}} + {{~> jade/rules/jade-number-values ~}}
-

-        {{~> html/examples/html-js-includes-example ~}}
+      

+        {{~> jade/examples/jade-number-values-example ~}}
       
@@ -71,12 +78,12 @@
- {{~> html/rules/html-attribute-order ~}} + {{~> jade/rules/jade-long-lines ~}}
-

-        {{~> html/examples/html-attribute-order-example ~}}
+      

+        {{~> jade/examples/jade-long-lines-example ~}}
       
@@ -84,12 +91,12 @@
- {{~> html/rules/html-boolean ~}} + {{~> jade/rules/jade-linewrapping ~}}
-

-        {{~> html/examples/html-boolean-example ~}}
+      

+        {{~> jade/examples/jade-linewrapping-example ~}}
       
@@ -97,12 +104,12 @@
- {{~> html/rules/html-form-labels ~}} + {{~> jade/rules/jade-inline-elements ~}}
-

-        {{~> html/examples/html-form-labels-example ~}}
+      

+        {{~> jade/examples/jade-inline-elements-example ~}}
       
@@ -110,12 +117,12 @@
- {{~> html/rules/html-img-sizes ~}} + {{~> jade/rules/jade-comments ~}}
-

-        {{~> html/examples/html-img-sizes-example ~}}
+      

+        {{~> jade/examples/jade-comments-example ~}}
       
@@ -123,13 +130,13 @@
- {{~> html/rules/html-language ~}} + {{~> jade/rules/jade-mixins ~}}
-

-        {{~> html/examples/html-language-example ~}}
+      

+        {{~> jade/examples/jade-mixins-example ~}}
       
-
+
\ No newline at end of file diff --git a/app/templates/partials/jade/recomendations/jade-include-partials.hbs b/app/templates/partials/jade/recomendations/jade-include-partials.hbs new file mode 100644 index 0000000..6b4cf2b --- /dev/null +++ b/app/templates/partials/jade/recomendations/jade-include-partials.hbs @@ -0,0 +1,8 @@ +

Подключение шаблонов

+
    +
  • include header - используется для подключения частиц страницы, например, для шапок и подвалов.
  • +
  • extends partials/default - используется для внедрения контент в расширяемый шаблон.
  • +
  • block content - используется для добавления строк кода в определённое место
  • +
+ +

Во всех случаях через пробел указывается путь от текущего расположения до шаблона без расширения .jade.

\ No newline at end of file diff --git a/app/templates/partials/jade/recomendations/jade-useful-links.hbs b/app/templates/partials/jade/recomendations/jade-useful-links.hbs new file mode 100644 index 0000000..7b93248 --- /dev/null +++ b/app/templates/partials/jade/recomendations/jade-useful-links.hbs @@ -0,0 +1,6 @@ + +

jade-lang.com - Документация Jade

+

http://jsman.ru/jade - Ещё одна документация Jade

+

http://naltatis.github.io/jade-syntax-docs - Ещё одна документация Jade

+

html2jade.org - конвертация HTML в Jade и Jade в HTML

+ diff --git a/app/templates/partials/jade/rules/jade-classes-ids.hbs b/app/templates/partials/jade/rules/jade-classes-ids.hbs new file mode 100644 index 0000000..fb99b5f --- /dev/null +++ b/app/templates/partials/jade/rules/jade-classes-ids.hbs @@ -0,0 +1,2 @@ +

Классы и идентификаторы пишутся в начале

+

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

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-comments.hbs b/app/templates/partials/jade/rules/jade-comments.hbs new file mode 100644 index 0000000..7b1cb4c --- /dev/null +++ b/app/templates/partials/jade/rules/jade-comments.hbs @@ -0,0 +1,3 @@ +

Комментарии

+

Комментарии в Jade, которые не должны попасть в HTML записываются через //-

+

Простые или условные комментарии можно записывать прямо в HTML-формате.

diff --git a/app/templates/partials/jade/rules/jade-inline-elements.hbs b/app/templates/partials/jade/rules/jade-inline-elements.hbs new file mode 100644 index 0000000..825a2d1 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-inline-elements.hbs @@ -0,0 +1,3 @@ +

Строчные элементы

+

Строчные элементы можно записывать на одной строке через двоеточие :.

+

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

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-linewrapping.hbs b/app/templates/partials/jade/rules/jade-linewrapping.hbs new file mode 100644 index 0000000..9686494 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-linewrapping.hbs @@ -0,0 +1,2 @@ +

Перенос строки для однотипных блоков

+

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

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-long-lines.hbs b/app/templates/partials/jade/rules/jade-long-lines.hbs new file mode 100644 index 0000000..d556992 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-long-lines.hbs @@ -0,0 +1,2 @@ +

Длинные строки

+

Переносите атрибуты новую строку, если их много и/или значения длинные.

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-mixins.hbs b/app/templates/partials/jade/rules/jade-mixins.hbs new file mode 100644 index 0000000..57394f4 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-mixins.hbs @@ -0,0 +1,2 @@ +

Пиши меньше, делай больше

+

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

diff --git a/app/templates/partials/jade/rules/jade-number-values.hbs b/app/templates/partials/jade/rules/jade-number-values.hbs new file mode 100644 index 0000000..7bef37e --- /dev/null +++ b/app/templates/partials/jade/rules/jade-number-values.hbs @@ -0,0 +1,2 @@ +

Числовые значения в аттрибутах

+

Для числовых значений кавычки не нужны.

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-several-attributes.hbs b/app/templates/partials/jade/rules/jade-several-attributes.hbs new file mode 100644 index 0000000..9e1bbca --- /dev/null +++ b/app/templates/partials/jade/rules/jade-several-attributes.hbs @@ -0,0 +1,2 @@ +

Несколько аттрибутов

+

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

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-single-attributes.hbs b/app/templates/partials/jade/rules/jade-single-attributes.hbs new file mode 100644 index 0000000..8770533 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-single-attributes.hbs @@ -0,0 +1,2 @@ +

Одиночные аттрибуты

+

Распологайте одиночные атрибуты в последнюю очередь.

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-single-quotes.hbs b/app/templates/partials/jade/rules/jade-single-quotes.hbs new file mode 100644 index 0000000..6482165 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-single-quotes.hbs @@ -0,0 +1,2 @@ +

Одинарные кавычки

+

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

\ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs b/app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs new file mode 100644 index 0000000..580f926 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-unnecessary-attributes.hbs @@ -0,0 +1,2 @@ +

Необязательные аттрибуты

+

Не давайте необязательные значения атрибутам.

\ No newline at end of file diff --git a/app/templates/partials/jquery/examples/jquery-cache-example.hbs b/app/templates/partials/jquery/examples/jquery-cache-example.hbs new file mode 100644 index 0000000..3bf0db9 --- /dev/null +++ b/app/templates/partials/jquery/examples/jquery-cache-example.hbs @@ -0,0 +1,22 @@ +/* Плохо */ +function setSidebar() { + $('#sidebar').hide(); + + // ...код... + + $('#sidebar').css({ + backgroundColor: 'pink' + }); +} + +/* Хорошо */ +function setSidebar() { + var $sidebar = $('#sidebar'); + $sidebar.hide(); + + // ...код... + + $sidebar.css({ + backgroundColor: 'pink' + }); +} \ No newline at end of file diff --git a/app/templates/partials/jquery/examples/jquery-events-example.hbs b/app/templates/partials/jquery/examples/jquery-events-example.hbs new file mode 100644 index 0000000..cb97f61 --- /dev/null +++ b/app/templates/partials/jquery/examples/jquery-events-example.hbs @@ -0,0 +1,21 @@ +/* Плохо */ +$input + .click(function () { /* ... */ }) + .focus(function () { /* ... */ }) + .blur(function () { /* ... */ }); + +/* Хорошо */ +$input + .on('click', function () { /* ... */ }) + .on('focus', function () { /* ... */ }) + .on('blur', function () { /* ... */ }); + +/* Лучше */ +// Несколько событий разделяются пробелами +$field.on('click focus', function () { /* ... */ }); + +$input.on({ + // Несколько событий разделяются пробелами + 'click focus': function () { /* ... */ }, + blur: function () { /* ... */ } +}); \ No newline at end of file diff --git a/app/templates/partials/jquery/examples/jquery-search-elements-example.hbs b/app/templates/partials/jquery/examples/jquery-search-elements-example.hbs new file mode 100644 index 0000000..3c5a3f5 --- /dev/null +++ b/app/templates/partials/jquery/examples/jquery-search-elements-example.hbs @@ -0,0 +1,39 @@ +/* Плохо */ +$('ul', '#sidebar').hide(); + +/* Плохо */ +$('#sidebar').find('ul').hide(); + +/* Хорошо */ +$('#sidebar ul').hide(); + +/* Хорошо */ +$('#sidebar > ul').hide(); + +/* Хорошо */ +$sidebar.find('ul').hide(); + + + +/* Плохо */ +$('.menu button'); + +/* Плохо */ +$('.menu button#menuToggler'); + +/* Плохо */ +$('button#menuToggler'); + +/* Хорошо */ +$('#menuToggler'); + + + +/* Плохо */ +$('.navbar-menu__item'); + +/* Плохо */ +$('.js-navbar-menu__item'); + +/* Хорошо */ +$('.js-nav-link'); diff --git a/app/templates/partials/jquery/examples/jquery-variables-example.hbs b/app/templates/partials/jquery/examples/jquery-variables-example.hbs new file mode 100644 index 0000000..c2efee6 --- /dev/null +++ b/app/templates/partials/jquery/examples/jquery-variables-example.hbs @@ -0,0 +1,5 @@ +/* Плохо */ +var sidebar = $('#sidebar'); + +/* Хорошо */ +var $sidebar = $('#sidebar'); \ No newline at end of file diff --git a/app/templates/partials/jquery/jquery-rules.hbs b/app/templates/partials/jquery/jquery-rules.hbs new file mode 100644 index 0000000..17564ec --- /dev/null +++ b/app/templates/partials/jquery/jquery-rules.hbs @@ -0,0 +1,51 @@ +
+
+ {{~> jquery/rules/jquery-variables ~}} +
+
+
+

+        {{~> jquery/examples/jquery-variables-example ~}}
+      
+
+
+
+ +
+
+ {{~> jquery/rules/jquery-cache ~}} +
+
+
+

+        {{~> jquery/examples/jquery-cache-example ~}}
+      
+
+
+
+ +
+
+ {{~> jquery/rules/jquery-search-elements ~}} +
+
+
+

+        {{~> jquery/examples/jquery-search-elements-example ~}}
+      
+
+
+
+ +
+
+ {{~> jquery/rules/jquery-events ~}} +
+
+
+

+            {{~> jquery/examples/jquery-events-example ~}}
+          
+
+
+
\ No newline at end of file diff --git a/app/templates/partials/jquery/rules/jquery-cache.hbs b/app/templates/partials/jquery/rules/jquery-cache.hbs new file mode 100644 index 0000000..bae56d5 --- /dev/null +++ b/app/templates/partials/jquery/rules/jquery-cache.hbs @@ -0,0 +1,2 @@ +

Кэширование запросов

+

Кэшируйте jQuery-запросы. Каждый новый jQuery-запрос делает повторный поиск по DOM-дереву, и приложение начинает работать медленнее..

diff --git a/app/templates/partials/jquery/rules/jquery-events.hbs b/app/templates/partials/jquery/rules/jquery-events.hbs new file mode 100644 index 0000000..c75f8d8 --- /dev/null +++ b/app/templates/partials/jquery/rules/jquery-events.hbs @@ -0,0 +1,2 @@ +

jQuery события

+

Для задания обработчика элементу используйте метод .on()

diff --git a/app/templates/partials/jquery/rules/jquery-search-elements.hbs b/app/templates/partials/jquery/rules/jquery-search-elements.hbs new file mode 100644 index 0000000..78fcff1 --- /dev/null +++ b/app/templates/partials/jquery/rules/jquery-search-elements.hbs @@ -0,0 +1,5 @@ +

Поиск элементов

+

Для DOM-запросов используйте классический каскадный CSS-синтаксис $('.sidebar ul') или родитель потомок $('.sidebar > ul')

+

Используйте find для поиска внутри DOM-объекта.

+

Для поиска одного элемента используйте только идентификатор #id

+

Для поиска нескольких элементов однотипных по функционалу используйте класс с префиксом .js-* (для разделения названия класса использовать только дефис -), а не класс для стилизации элемента, название класса должно быть небольшим, но и понятным.

\ No newline at end of file diff --git a/app/templates/partials/jquery/rules/jquery-variables.hbs b/app/templates/partials/jquery/rules/jquery-variables.hbs new file mode 100644 index 0000000..8294469 --- /dev/null +++ b/app/templates/partials/jquery/rules/jquery-variables.hbs @@ -0,0 +1,2 @@ +

Наименование переменных

+

Для jQuery-переменных используйте префикс $.

diff --git a/app/templates/partials/js/examples/js-access-functions-example.hbs b/app/templates/partials/js/examples/js-access-functions-example.hbs new file mode 100644 index 0000000..0d5513e --- /dev/null +++ b/app/templates/partials/js/examples/js-access-functions-example.hbs @@ -0,0 +1,37 @@ +/* Плохо */ +dragon.age(); + +/* Хорошо */ +dragon.getAge(); + +/* Плохо */ +dragon.age(25); + +/* Хорошо */ +dragon.setAge(25); + + +/* Плохо */ +if (!dragon.age()) { + return false; +} + +/* Хорошо */ +if (!dragon.hasAge()) { + return false; +} + + +function Jedi(options) { + options || (options = {}); + var lightsaber = options.lightsaber || 'blue'; + this.set('lightsaber', lightsaber); +} + +Jedi.prototype.set = function(key, val) { + this[key] = val; +}; + +Jedi.prototype.get = function(key) { + return this[key]; +}; \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-code-blocks-example.hbs b/app/templates/partials/js/examples/js-code-blocks-example.hbs new file mode 100644 index 0000000..bda4f89 --- /dev/null +++ b/app/templates/partials/js/examples/js-code-blocks-example.hbs @@ -0,0 +1,22 @@ + +/* Плохо */ +if (test) + return false; + +/* Хорошо */ +if (test) return false; + +/* Хорошо */ +if (test) { + return false; +} + +/* Плохо */ +function() { return false; } + +/* Хорошо */ +function() { + return false; +} + + diff --git a/app/templates/partials/js/examples/js-comments-example.hbs b/app/templates/partials/js/examples/js-comments-example.hbs new file mode 100644 index 0000000..6beee76 --- /dev/null +++ b/app/templates/partials/js/examples/js-comments-example.hbs @@ -0,0 +1,70 @@ +/* Плохо */ +// make() возвращает новый элемент +// основываясь на получаемом имени тэга +// +// @param tag +// @return element +function make(tag) { + + // ...создаем element... + + return element; +} + +/* Хорошо */ +/** + * make() возвращает новый элемент + * основываясь на получаемом имени тэга + * + * @param tag + * @return element + */ +function make(tag) { + + // ...создаем element... + + return element; +} + +/* Плохо */ +var active = true; // устанавливаем активным элементом + +/* Хорошо */ +// устанавливаем активным элементом +var active = true; + +/* Плохо */ +function getType() { + console.log('проверяем тип...'); + // задаем тип по умолчанию 'no type' + var type = this._type || 'no type'; + + return type; +} + +/* Хорошо */ +function getType() { + console.log('проверяем тип...'); + + // задаем тип по умолчанию 'no type' + var type = this._type || 'no type'; + + return type; +} + + +function Calculator() { + + // TODO FIXME: тут не нужно использовать глобальную переменную + total = 0; + + return this; +} + +function Calculator() { + + // TODO: должна быть возможность изменять значение через параметр функции + this.total = 0; + + return this; +} \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-conditionals-example.hbs b/app/templates/partials/js/examples/js-conditionals-example.hbs new file mode 100644 index 0000000..88e9fa3 --- /dev/null +++ b/app/templates/partials/js/examples/js-conditionals-example.hbs @@ -0,0 +1,27 @@ +if ([0]) { + // true + // Массив(Array) является объектом, объекты преобразуются в true +} + + +/* Плохо */ +if (name !== '') { + // ...код... +} + +/* Хорошо */ +if (name) { + // ...код... +} + +/* Плохо */ +if (collection.length > 0) { + // ...код... +} + +/* Хорошо */ +if (collection.length) { + // ...код... +} + + diff --git a/app/templates/partials/js/examples/js-constructors-example.hbs b/app/templates/partials/js/examples/js-constructors-example.hbs new file mode 100644 index 0000000..4c27486 --- /dev/null +++ b/app/templates/partials/js/examples/js-constructors-example.hbs @@ -0,0 +1,55 @@ +function Jedi() { + console.log('new jedi'); +} + +/* Плохо */ +Jedi.prototype = { + fight: function fight() { + console.log('fighting'); + }, + + block: function block() { + console.log('blocking'); + } +}; + +/* Хорошо */ +Jedi.prototype.fight = function fight() { + console.log('fighting'); +}; + +Jedi.prototype.block = function block() { + console.log('blocking'); +}; + + + +/* Плохо */ +Jedi.prototype.jump = function() { + this.jumping = true; + return true; +}; + +Jedi.prototype.setHeight = function(height) { + this.height = height; +}; + +var luke = new Jedi(); +luke.jump(); // => true +luke.setHeight(20) // => undefined + +/* Хорошо */ +Jedi.prototype.jump = function() { + this.jumping = true; + return this; +}; + +Jedi.prototype.setHeight = function(height) { + this.height = height; + return this; +}; + +var luke = new Jedi(); + +luke.jump() + .setHeight(20); diff --git a/app/templates/partials/js/examples/js-copy-array-example.hbs b/app/templates/partials/js/examples/js-copy-array-example.hbs new file mode 100644 index 0000000..c5692a9 --- /dev/null +++ b/app/templates/partials/js/examples/js-copy-array-example.hbs @@ -0,0 +1,11 @@ +var len = items.length, + itemsCopy = [], + i; + +/* Плохо */ +for (i = 0; i < len; i++) { + itemsCopy[i] = items[i]; +} + +/* Хорошо */ +itemsCopy = items.slice(); \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-copy-array-like-example.hbs b/app/templates/partials/js/examples/js-copy-array-like-example.hbs new file mode 100644 index 0000000..95b5583 --- /dev/null +++ b/app/templates/partials/js/examples/js-copy-array-like-example.hbs @@ -0,0 +1,4 @@ +function trigger() { + var args = Array.prototype.slice.call(arguments); + ... +} \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-events-example.hbs b/app/templates/partials/js/examples/js-events-example.hbs new file mode 100644 index 0000000..a9c0b43 --- /dev/null +++ b/app/templates/partials/js/examples/js-events-example.hbs @@ -0,0 +1,19 @@ +/* Плохо */ +$(this).trigger('listingUpdated', listing.id); + +... + +$(this).on('listingUpdated', function(e, listingId) { + //делаем что-нибудь с listing, например: + listing.name = listings[listingId] +}); + + +/* Хорошо */ +$(this).trigger('listingUpdated', { listingId : listing.id }); + +... + +$(this).on('listingUpdated', function(e, data) { + // делаем что-нибудь с data.listingId +}); diff --git a/app/templates/partials/js/examples/js-functions-example.hbs b/app/templates/partials/js/examples/js-functions-example.hbs new file mode 100644 index 0000000..ae947d2 --- /dev/null +++ b/app/templates/partials/js/examples/js-functions-example.hbs @@ -0,0 +1,42 @@ +/* Объявление анонимной функции */ +var anonymous = function () { + return true; +}; + +/* Объявление именованной функции */ +var named = function named() { + return true; +}; + +/* Объявление функции, которая сразу же выполняется (замыкание) */ +(function () { + console.log('Если вы читаете это, вы открыли консоль.'); +})(); + + + +/* Плохо */ +if (currentUser) { + function test() { + console.log('Плохой мальчик.'); + } +} + +/* Хорошо */ +var test; +if (currentUser) { + test = function test() { + console.log('Молодец.'); + }; +} + + +/* Плохо */ +function nope(name, options, arguments) { + // ...код... +} + +/* Хорошо */ +function yup(name, options, args) { + // ...код... +} \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-key-words-example.hbs b/app/templates/partials/js/examples/js-key-words-example.hbs new file mode 100644 index 0000000..95f651b --- /dev/null +++ b/app/templates/partials/js/examples/js-key-words-example.hbs @@ -0,0 +1,14 @@ +/* Плохо */ +var superman = { + class: 'alien' +}; + +/* Плохо */ +var superman = { + klass: 'alien' +}; + +/* Хорошо */ +var superman = { + type: 'alien' +}; \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-naming-conventions-example.hbs b/app/templates/partials/js/examples/js-naming-conventions-example.hbs new file mode 100644 index 0000000..f5073b9 --- /dev/null +++ b/app/templates/partials/js/examples/js-naming-conventions-example.hbs @@ -0,0 +1,88 @@ +/* Плохо */ +function q() { + // ...код... +} + +/* Хорошо */ +function query() { + // ...код... +} + + +/* Плохо */ +var OBJEcttsssss = {}; +var this_is_my_object = {}; +function c() {}; +var u = new user({ + name: 'Bob Parr' +}); + +/* Хорошо */ +var thisIsMyObject = {}; +function thisIsMyFunction() {}; +var user = new User({ + name: 'Bob Parr' +}); + +/* Плохо */ +function user(options) { + this.name = options.name; +} + +var bad = new user({ + name: 'Плохиш' +}); + +/* Хорошо */ +function User(options) { + this.name = options.name; +} + +var good = new User({ + name: 'Кибальчиш' +}); + +/* Плохо */ +this.__firstName__ = 'Panda'; +this.firstName_ = 'Panda'; + +/* Хорошо */ +this._firstName = 'Panda'; + + + +function Rocket() {} + +// ... + +Rocket.prototype.startMessage = 'Houston, I\'m flying into space!'; + +/* Плохо */ +Rocket.prototype.start = function () { + var _this = this; + + _this.lightsCameraAction(function () { + console.log(_this.startMessage); + }); +}; + +/* Хорошо */ +Rocket.prototype.start = function () { + var rocket = this; + + rocket.lightsCameraAction(function () { + console.log(rocket.startMessage); + }); +}; + + + +/* Плохо */ +var log = function(msg) { + console.log(msg); +}; + +/* Хорошо */ +var log = function log(msg) { + console.log(msg); +}; \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-properties-example.hbs b/app/templates/partials/js/examples/js-properties-example.hbs new file mode 100644 index 0000000..965f9fa --- /dev/null +++ b/app/templates/partials/js/examples/js-properties-example.hbs @@ -0,0 +1,22 @@ +var luke = { + jedi: true, + age: 28 +}; + +/* Плохо */ +var isJedi = luke['jedi']; + +/* Хорошо */ +var isJedi = luke.jedi; + + +var luke = { + jedi: true, + age: 28 +}; + +function getProp(prop) { + return luke[prop]; +} + +var isJedi = getProp('jedi'); \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-reserved-words-example.hbs b/app/templates/partials/js/examples/js-reserved-words-example.hbs new file mode 100644 index 0000000..4cbc118 --- /dev/null +++ b/app/templates/partials/js/examples/js-reserved-words-example.hbs @@ -0,0 +1,11 @@ +/* Плохо */ +var superman = { + default: { clark: 'kent' }, + private: true +}; + +/* Хорошо */ +var superman = { + defaults: { clark: 'kent' }, + hidden: true +}; \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-spaces-example.hbs b/app/templates/partials/js/examples/js-spaces-example.hbs new file mode 100644 index 0000000..b8f31e4 --- /dev/null +++ b/app/templates/partials/js/examples/js-spaces-example.hbs @@ -0,0 +1,52 @@ +/* Плохо */ +function test(){ + console.log('test'); +} + +/* Хорошо */ +function test() { + console.log('test'); +} + +/* Плохо */ +dog.set('attr',{ + age: '1 year', + breed: 'Bernese Mountain Dog' +}); + +/* Хорошо */ +dog.set('attr', { + age: '1 year', + breed: 'Bernese Mountain Dog' +}); + + +/* Плохо */ +$('#items').find('.selected').highlight().end().find('.open').updateCount(); + +/* Хорошо */ +$('#items') + .find('.selected') + .highlight() + .end() + .find('.open') + .updateCount(); + +/* Плохо */ +var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true) + .attr('width', (radius + margin) * 2).append('svg:g') + .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') + .call(tron.led); + +/* Хорошо */ +var leds = stage.selectAll('.led') + .data(data) + .enter().append('svg:svg') + .class('led', true) + .attr('width', (radius + margin) * 2) + .append('svg:g') + .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')') + .call(tron.led); + + + diff --git a/app/templates/partials/js/examples/js-strings-example.hbs b/app/templates/partials/js/examples/js-strings-example.hbs new file mode 100644 index 0000000..7458254 --- /dev/null +++ b/app/templates/partials/js/examples/js-strings-example.hbs @@ -0,0 +1,27 @@ +/* Плохо */ +var name = "Боб Дилан"; + +/* Хорошо */ +var name = 'Боб Дилан'; + +/* Плохо */ +var fullName = "Боб " + this.lastName; + +/* Хорошо */ +var fullName = 'Дилан ' + this.lastName; + + +/* Плохо */ +var errorMessage = 'Эта сверхдлинная ошибка возникла из-за белой обезъяны. Не говори про обезъяну! Не слушай об обезьяне! Не думай об обезъяне!'; + +/* Плохо */ +var errorMessage = 'Эта сверхдлинная ошибка возникла из-за белой обезъяны. \ +Не говори про обезъяну! Не слушай об обезьяне! \ +Не думай об обезъяне!'; + +/* Хорошо */ +var errorMessage = ( + 'Эта сверхдлинная ошибка возникла из-за белой обезъяны. ' + + 'Не говори про обезъяну! Не слушай об обезьяне! ' + + 'Не думай об обезъяне!' +); \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-syntax-example.hbs b/app/templates/partials/js/examples/js-syntax-example.hbs new file mode 100644 index 0000000..8a8edcd --- /dev/null +++ b/app/templates/partials/js/examples/js-syntax-example.hbs @@ -0,0 +1,2 @@ +

Синтаксис

+ diff --git a/app/templates/partials/js/examples/js-variables-example.hbs b/app/templates/partials/js/examples/js-variables-example.hbs new file mode 100644 index 0000000..3e299a6 --- /dev/null +++ b/app/templates/partials/js/examples/js-variables-example.hbs @@ -0,0 +1,83 @@ +/* Плохо */ +var items = getItems(); +var goSportsTeam = true; +var dragonball = 'z'; + +/* Хорошо */ +var items = getItems(), + goSportsTeam = true, + dragonball = 'z'; + + +/* Плохо */ +var i, len, dragonball, + items = getItems(), + goSportsTeam = true; + +/* Плохо */ +var i, items = getItems(), + dragonball, + goSportsTeam = true, + len; + +/* Хорошо */ +var items = getItems(), + goSportsTeam = true, + dragonball, + length, + i; + + +/* Плохо */ +function () { + test(); + console.log('Делаю что-нибудь..'); + + //..или не делаю... + + var name = getName(); + + if (name === 'test') { + return false; + } + + return name; +} + +/* Хорошо */ +function() { + var name = getName(); + + test(); + console.log('Делаю что-то полезное..'); + + //..продолжаю приносить пользу людям.. + + if (name === 'test') { + return false; + } + + return name; +} + +/* Плохо */ +function() { + var name = getName(); + + if (!arguments.length) { + return false; + } + + return true; +} + +/* Хорошо */ +function() { + if (!arguments.length) { + return false; + } + + var name = getName(); + + return true; +} \ No newline at end of file diff --git a/app/templates/partials/js/js-rules.hbs b/app/templates/partials/js/js-rules.hbs new file mode 100644 index 0000000..b65b6ac --- /dev/null +++ b/app/templates/partials/js/js-rules.hbs @@ -0,0 +1,229 @@ +
+
+ {{~> js/rules/js-reserved-words ~}} +
+
+
+

+        {{~> js/examples/js-reserved-words-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-key-words ~}} +
+
+
+

+        {{~> js/examples/js-key-words-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-copy-array ~}} +
+
+
+

+        {{~> js/examples/js-copy-array-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-copy-array-like ~}} +
+
+
+

+        {{~> js/examples/js-copy-array-like-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-strings ~}} +
+
+
+

+        {{~> js/examples/js-strings-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-functions ~}} +
+
+
+

+        {{~> js/examples/js-functions-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-properties ~}} +
+
+
+

+        {{~> js/examples/js-properties-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-variables ~}} +
+
+
+

+        {{~> js/examples/js-variables-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-conditionals ~}} +
+
+
+

+        {{~> js/examples/js-conditionals-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-code-blocks ~}} +
+
+
+

+        {{~> js/examples/js-code-blocks-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-comments ~}} +
+
+
+

+        {{~> js/examples/js-comments-example ~}}
+      
+
+
+
+ +
+
+ {{~> js/rules/js-syntax ~}} +
+
+ {{~> js/examples/js-syntax-example ~}} +
+
+ +
+
+ {{~> js/rules/js-spaces ~}} +
+
+
+

+            {{~> js/examples/js-spaces-example ~}}
+          
+
+
+
+ +
+
+ {{~> js/rules/js-naming-conventions ~}} +
+
+
+

+            {{~> js/examples/js-naming-conventions-example ~}}
+          
+
+
+
+ +
+
+ {{~> js/rules/js-access-functions ~}} +
+
+
+

+            {{~> js/examples/js-access-functions-example ~}}
+          
+
+
+
+ +
+
+ {{~> js/rules/js-constructors ~}} +
+
+
+

+            {{~> js/examples/js-constructors-example ~}}
+          
+
+
+
+ +
+
+ {{~> js/rules/js-constructors ~}} +
+
+
+

+            {{~> js/examples/js-constructors-example ~}}
+          
+
+
+
+ +
+
+ {{~> js/rules/js-events ~}} +
+
+
+

+            {{~> js/examples/js-events-example ~}}
+          
+
+
+
diff --git a/app/templates/partials/js/recomendations/js-useful-links.hbs b/app/templates/partials/js/recomendations/js-useful-links.hbs new file mode 100644 index 0000000..7b93248 --- /dev/null +++ b/app/templates/partials/js/recomendations/js-useful-links.hbs @@ -0,0 +1,6 @@ + +

jade-lang.com - Документация Jade

+

http://jsman.ru/jade - Ещё одна документация Jade

+

http://naltatis.github.io/jade-syntax-docs - Ещё одна документация Jade

+

html2jade.org - конвертация HTML в Jade и Jade в HTML

+ diff --git a/app/templates/partials/js/rules/js-access-functions.hbs b/app/templates/partials/js/rules/js-access-functions.hbs new file mode 100644 index 0000000..b8ef85d --- /dev/null +++ b/app/templates/partials/js/rules/js-access-functions.hbs @@ -0,0 +1,5 @@ +

Геттеры и сеттеры

+

Функции универсального доступа к свойствам не требуются.

+

Если вам необходимо создать функцию для доступа к переменной, используйте раздельные функции getVal() и setVal('hello')

+

Если свойство является логическим(boolean), используйте isVal() или hasVal()

+

Вы можете создавать функции get() и set(), но будьте логичны и последовательны – то есть не добавляйте свойства, которые не могут быть изменены через эти функции.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-code-blocks.hbs b/app/templates/partials/js/rules/js-code-blocks.hbs new file mode 100644 index 0000000..a735be6 --- /dev/null +++ b/app/templates/partials/js/rules/js-code-blocks.hbs @@ -0,0 +1,2 @@ +

Блоки кода

+

Используйте фигурные скобки для всех многострочных блоков.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-comments.hbs b/app/templates/partials/js/rules/js-comments.hbs new file mode 100644 index 0000000..61338c0 --- /dev/null +++ b/app/templates/partials/js/rules/js-comments.hbs @@ -0,0 +1,6 @@ +

Комментарии

+

Используйте /** ... */ для многострочных комментариев. Включите описание, опишите типы и значения для всех параметров и возвращаемых значений в формате jsdoc.

+

Используйте // для комментариев в одну строку. Размещайте комментарии на новой строке над темой комментария. Добавляйте пустую строку над комментарием.

+

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

Эти комментарии отличаются от обычных комментариев, так как не описывают текущее поведение, а призывают к действию, например TODO -- нужно реализовать интерфейс. Такие комментарии также автоматически обнаруживаются многими IDE и редакторами кода, что позволяет быстро перемещаться между ними.

+

Используйте // TODO FIXME: для аннотирования проблем

+

Используйте // TODO: для указания решений проблем

diff --git a/app/templates/partials/js/rules/js-conditionals.hbs b/app/templates/partials/js/rules/js-conditionals.hbs new file mode 100644 index 0000000..3e57dc2 --- /dev/null +++ b/app/templates/partials/js/rules/js-conditionals.hbs @@ -0,0 +1,12 @@ +

Условные выражения и равенства

+

Используйте === и !== вместо == и !=.

+

Условные выражения вычисляются посредством приведения к логическому типу Boolean через метод ToBoolean и всегда следуют следующим правилам:

+
    +
  • Object всегда соответствует true
  • +
  • Undefined всегда соответствует false
  • +
  • Null всегда соответствует false
  • +
  • Boolean остается неизменным
  • +
  • Number соответствует false, если является +0, -0, или NaN, в противном случае соответствует true
  • +
  • String означает false, если является пустой строкой '', в противном случае true. Условно говоря, для строки происходит сравнение не ее самой, а ее длины – в соответствии с типом number.
  • +
+

Используйте короткий синтаксис.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-constructors.hbs b/app/templates/partials/js/rules/js-constructors.hbs new file mode 100644 index 0000000..ab04be7 --- /dev/null +++ b/app/templates/partials/js/rules/js-constructors.hbs @@ -0,0 +1,4 @@ +

Конструкторы

+

Присваивайте метод прототипу вместо замены прототипа на другой объект. Замена прототипа на другой объект делает наследование невозможным.

+

Методы могут возвращать this для создания цепочек вызовов. Но стоит оставаться последовательным и обеспечить одинаковое поведение для всех методов, кроме геттеров.

+

Вы можете заменить стандартный метод toString(), но убедитесь, что он работает и не вызывает побочных эффектов.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-copy-array-like.hbs b/app/templates/partials/js/rules/js-copy-array-like.hbs new file mode 100644 index 0000000..298f1ba --- /dev/null +++ b/app/templates/partials/js/rules/js-copy-array-like.hbs @@ -0,0 +1,2 @@ +

Копирование похожий по свойствам на массив объект

+

Чтобы скопировать похожий по свойствам на массив объект (например, NodeList или Arguments), используйте Array::slice.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-copy-array.hbs b/app/templates/partials/js/rules/js-copy-array.hbs new file mode 100644 index 0000000..df5ca3b --- /dev/null +++ b/app/templates/partials/js/rules/js-copy-array.hbs @@ -0,0 +1,2 @@ +

Копирование массива

+

Если вам необходимо скопировать массив, используйте Array::slice.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-events.hbs b/app/templates/partials/js/rules/js-events.hbs new file mode 100644 index 0000000..d7fb4fd --- /dev/null +++ b/app/templates/partials/js/rules/js-events.hbs @@ -0,0 +1,2 @@ +

События

+

Подключая набор данных к событиям (как DOM-событиям, так и js-событиям, например, в Backbone), передавайте объект вместо простой переменной. Это позволяет в процессе всплытия событий добавлять к данному объекту дополнительную информацию.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-functions.hbs b/app/templates/partials/js/rules/js-functions.hbs new file mode 100644 index 0000000..1d37184 --- /dev/null +++ b/app/templates/partials/js/rules/js-functions.hbs @@ -0,0 +1,4 @@ +

Функции

+

Никогда не объявляйте функцию внутри блока кода — например в if, while, else и так далее. Единственное исключение — блок функции. Вместо этого присваивайте функцию уже объявленной через var переменной. Условное объявление функций работает, но в различных браузерах работает по-разному.

+

Примечание. ECMA-262 устанавливает понятие блока как списка операторов. Объявление функции (не путайте с присвоением функции переменной) не является оператором.

+

Никогда не используйте аргумент функции arguments, он будет более приоритетным над объектом arguments, который доступен без объявления для каждой функции.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-key-words.hbs b/app/templates/partials/js/rules/js-key-words.hbs new file mode 100644 index 0000000..1b0b1c9 --- /dev/null +++ b/app/templates/partials/js/rules/js-key-words.hbs @@ -0,0 +1,2 @@ +

Ключевые слова

+

Не используйте ключевые слова (в том числе измененные). Вместо них используйте синонимы.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-naming-conventions.hbs b/app/templates/partials/js/rules/js-naming-conventions.hbs new file mode 100644 index 0000000..251f172 --- /dev/null +++ b/app/templates/partials/js/rules/js-naming-conventions.hbs @@ -0,0 +1,7 @@ +

Соглашение об именовании

+

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

+

Используйте camelCase для именования объектов, функций и переменных.

+

Используйте PascalCase для именования конструкторов классов.

+

Используйте подчеркивание _ в качестве префикса для именования внутренних методов и переменных объекта.

+

Создавая ссылку на this, используйте название от самого класса в camelCase, вместо self/that/_this/me и т.п

+

Задавайте имена для функций. Это повышает читаемость сообщений об ошибках кода.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-properties.hbs b/app/templates/partials/js/rules/js-properties.hbs new file mode 100644 index 0000000..6919aaf --- /dev/null +++ b/app/templates/partials/js/rules/js-properties.hbs @@ -0,0 +1,3 @@ +

Свойства

+

Используйте точечную нотацию для доступа к свойствам и методам.

+

Используйте нотацию с [], когда вы получаете свойство, имя для которого хранится в переменной.

diff --git a/app/templates/partials/js/rules/js-reserved-words.hbs b/app/templates/partials/js/rules/js-reserved-words.hbs new file mode 100644 index 0000000..26ae171 --- /dev/null +++ b/app/templates/partials/js/rules/js-reserved-words.hbs @@ -0,0 +1,2 @@ +

Зарезервированные слова

+

Не используйте зарезервированные слова в качестве ключей объектов. Они не будут работать в IE8.

\ No newline at end of file diff --git a/app/templates/partials/js/rules/js-spaces.hbs b/app/templates/partials/js/rules/js-spaces.hbs new file mode 100644 index 0000000..2c78ed2 --- /dev/null +++ b/app/templates/partials/js/rules/js-spaces.hbs @@ -0,0 +1,3 @@ +

Пробелы

+

Устанавливайте один пробел перед открывающей скобкой.

+

Используйте отступы, когда делаете цепочки вызовов.

diff --git a/app/templates/partials/js/rules/js-strings.hbs b/app/templates/partials/js/rules/js-strings.hbs new file mode 100644 index 0000000..57cf5fb --- /dev/null +++ b/app/templates/partials/js/rules/js-strings.hbs @@ -0,0 +1,3 @@ +

Строки

+

Используйте одинарные кавычки '' для строк.

+

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

diff --git a/app/templates/partials/js/rules/js-syntax.hbs b/app/templates/partials/js/rules/js-syntax.hbs new file mode 100644 index 0000000..51394b4 --- /dev/null +++ b/app/templates/partials/js/rules/js-syntax.hbs @@ -0,0 +1,3 @@ +

Синтаксис

+

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

diff --git a/app/templates/partials/js/rules/js-variables.hbs b/app/templates/partials/js/rules/js-variables.hbs new file mode 100644 index 0000000..b60e822 --- /dev/null +++ b/app/templates/partials/js/rules/js-variables.hbs @@ -0,0 +1,4 @@ +

Переменные

+

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

+

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

+

Присваивайте переменные в начале области видимости. Это помогает избегать проблем с объявлением переменных и областями видимости.

\ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-composite-block-name-example.hbs b/app/templates/partials/stylus/examples/stylus-composite-block-name-example.hbs new file mode 100644 index 0000000..cdc532f --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-composite-block-name-example.hbs @@ -0,0 +1,25 @@ +/* Плохо */ +.project + // ... + + &-container + // ... + + &__name + // ... + + &:before + // ... + +/* Хорошо */ +.project + // ... + + &__name + // ... + + &:before + // ... + +.project-container + // ... \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-indentation-example.hbs b/app/templates/partials/stylus/examples/stylus-indentation-example.hbs new file mode 100644 index 0000000..0b862d3 --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-indentation-example.hbs @@ -0,0 +1,13 @@ +/* Плохо */ +.project +――// ... + +∙∙&__name +∙∙∙∙// ... + +/* Хорошо */ +.project +∙∙// ... + +∙∙&__name +∙∙∙∙// ... diff --git a/app/templates/partials/stylus/examples/stylus-mixins-blocks-example.hbs b/app/templates/partials/stylus/examples/stylus-mixins-blocks-example.hbs new file mode 100644 index 0000000..ed920ee --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-mixins-blocks-example.hbs @@ -0,0 +1,11 @@ +/* Плохо */ +.block + +below(666px) + &:first-child + margin-top: 5px + +/* Хорошо */ +.block + &:first-child + +below(666px) + margin-top: 5px diff --git a/app/templates/partials/stylus/examples/stylus-one-block-example.hbs b/app/templates/partials/stylus/examples/stylus-one-block-example.hbs new file mode 100644 index 0000000..ad63a46 --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-one-block-example.hbs @@ -0,0 +1,36 @@ +/* Плохо */ +// main.styl +.project + // ... + + &__name + // ... + + &__before + // ... + +.project-container + // ... + +.portfolio + // ... + + +/* Хорошо */ +// project.styl +.project + // ... + + &__name + // ... + + &__before + // ... + +// project-container.styl +.project-container + // ... + +// portfolio.styl +.portfolio + // ... diff --git a/app/templates/partials/stylus/examples/stylus-problems-example.hbs b/app/templates/partials/stylus/examples/stylus-problems-example.hbs new file mode 100644 index 0000000..07f058c --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-problems-example.hbs @@ -0,0 +1,13 @@ +/* Плохо */ +.block + // ... + + &__item + // color #08f + +/* Хорошо */ +.block + // ... + + // &__item + // color #08f \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-space-classes-example.hbs b/app/templates/partials/stylus/examples/stylus-space-classes-example.hbs new file mode 100644 index 0000000..957b3f9 --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-space-classes-example.hbs @@ -0,0 +1,17 @@ +/* Плохо */ +.project + // ... + &__name + // ... + &:before + // ... + +/* Хорошо */ +.project + // ... + + &__name + // ... + + &:before + // ... \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-syntax-example.hbs b/app/templates/partials/stylus/examples/stylus-syntax-example.hbs new file mode 100644 index 0000000..fdb9180 --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-syntax-example.hbs @@ -0,0 +1,14 @@ +/* Плохо */ +.project { /* ... */ } +.project__name { /* ... */ } +.project__description { /* ... */ } + +/* Хорошо */ +.project + // ... + + &__name + // ... + + &__description + // ... \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-total-example.hbs b/app/templates/partials/stylus/examples/stylus-total-example.hbs new file mode 100644 index 0000000..62e0117 --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-total-example.hbs @@ -0,0 +1,73 @@ +// Блок +.block + // ... + + // @media-примеси блока + +below(640px) + // ... + + // Псевдоэлементы блока + &::after + // ... + + // Псевдоклассы блока + &:first-child + // ... + + // Псевдоэлементы с псевдоклассом блока + &::after + // ... + + // Модификаторы блока + &_key_val + // ... + + // Псевдоклассы модификатора блока + &:first-child + // ... + + // Псевдоэлементы модификатора блока + &::after + // ... + + // Элементы + &__element + // ... + + // @media-примеси элемента + +below(640px) + // ... + + // Псевдоэлементы элемента + &::after + // ... + + // Псевдоклассы элемента + &:first-child + // ... + + // Псевдоэлементы с псевдоклассом элемента + &::after + // ... + + // Модификаторы элемента + &_key_val + // ... + + // Псевдоклассы модификатора элемента + &:first-child + // ... + + // Псевдоэлементы модификатора элемента + &::after + // ... + + // Псевдоклассы блока, влияющие на элементы + &:first-child &__element + // ... + + // Модификаторы блока, влияющие на элементы + &_key_val &__element + // ... + + // N элементов ещё... \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs b/app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs new file mode 100644 index 0000000..4212198 --- /dev/null +++ b/app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs @@ -0,0 +1,14 @@ +/* Плохо */ +.button { + position: relative; + font-size: 14px; + line-height: 1; + background-color: #08f; +} + +/* Хорошо */ +.button + position relative + font-size 14px + line-height 1 + background-color #08f \ No newline at end of file diff --git a/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs b/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs new file mode 100644 index 0000000..a9ef155 --- /dev/null +++ b/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs @@ -0,0 +1,3 @@ +

Общие рекомендации

+

Используйте примеси (mixins) для частоповторяющихся участков кода.

+

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

\ No newline at end of file diff --git a/app/templates/partials/stylus/recomendations/stylus-problems.hbs b/app/templates/partials/stylus/recomendations/stylus-problems.hbs new file mode 100644 index 0000000..8e6b649 --- /dev/null +++ b/app/templates/partials/stylus/recomendations/stylus-problems.hbs @@ -0,0 +1,3 @@ +

Возможные проблемы и пути их решения

+

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

\ No newline at end of file diff --git a/app/templates/partials/stylus/recomendations/stylus-useful-links.hbs b/app/templates/partials/stylus/recomendations/stylus-useful-links.hbs new file mode 100644 index 0000000..aae6ca2 --- /dev/null +++ b/app/templates/partials/stylus/recomendations/stylus-useful-links.hbs @@ -0,0 +1,3 @@ + +

Документация Stylus

+

Онлайн препроцессор CSS в Stylus

diff --git a/app/templates/partials/stylus/recomendations/stylus-variables.hbs b/app/templates/partials/stylus/recomendations/stylus-variables.hbs new file mode 100644 index 0000000..0cf57ba --- /dev/null +++ b/app/templates/partials/stylus/recomendations/stylus-variables.hbs @@ -0,0 +1,8 @@ +

Переменные

+

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

+ +
    +
  • Название шрифтов
  • +
  • Фирменные цвета
  • +
  • Ресурсы в data-uri
  • +
diff --git a/app/templates/partials/stylus/rules/stylus-composite-block-name.hbs b/app/templates/partials/stylus/rules/stylus-composite-block-name.hbs new file mode 100644 index 0000000..328f52a --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-composite-block-name.hbs @@ -0,0 +1,2 @@ +

Наименование составных блоков

+

Не используйте &- для описания имен составных блоков. Это затрудняет их поиск.

\ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-indentation.hbs b/app/templates/partials/stylus/rules/stylus-indentation.hbs new file mode 100644 index 0000000..e7a9a7f --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-indentation.hbs @@ -0,0 +1,7 @@ +

Отступы

+

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

+

В этом примере ∙∙ - два пробела, а ―― - один отступ с табуляцией.

+

Используйте 2 пробела для отступов. В своем редакторе настройте табуляцию в виде пробелов, чтобы при нажатии +на кнопку tab отступы делались в виде пробелов.

+ + diff --git a/app/templates/partials/stylus/rules/stylus-mixins-blocks.hbs b/app/templates/partials/stylus/rules/stylus-mixins-blocks.hbs new file mode 100644 index 0000000..5d530a0 --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-mixins-blocks.hbs @@ -0,0 +1,2 @@ +

Свойства в примесях

+

Примеси содержат в себе только блок свойств, селекторов внутри быть не должно.

\ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-one-block.hbs b/app/templates/partials/stylus/rules/stylus-one-block.hbs new file mode 100644 index 0000000..3dc4bea --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-one-block.hbs @@ -0,0 +1,2 @@ +

Один файл - один блок

+

Один файл — один блок. Имя файла совпадает с именем блока. Все стили для блока должны быть описаны в этом файле. Блок не должен встречаться в других файлах.

\ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-space-classes.hbs b/app/templates/partials/stylus/rules/stylus-space-classes.hbs new file mode 100644 index 0000000..4a226e4 --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-space-classes.hbs @@ -0,0 +1,3 @@ +

Отступы между классами

+

Между классами с группой свойств добавляте перенос строки для лучшей читабельности. +

\ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-syntax.hbs b/app/templates/partials/stylus/rules/stylus-syntax.hbs new file mode 100644 index 0000000..5d0c41c --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-syntax.hbs @@ -0,0 +1,3 @@ +

Синтаксис

+

Используйте вложенность с &, + так будет видна зависимость и иерархическое дерево классов.

diff --git a/app/templates/partials/stylus/rules/stylus-total.hbs b/app/templates/partials/stylus/rules/stylus-total.hbs new file mode 100644 index 0000000..153094e --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-total.hbs @@ -0,0 +1,2 @@ +

Итого

+

Исходя из всех предыдущих получаем следующую иерархию и последовательность

\ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs b/app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs new file mode 100644 index 0000000..dd2c57d --- /dev/null +++ b/app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs @@ -0,0 +1,2 @@ +

Использование ненужных символов

+

Опускайте использование фигурных скобок {}, двоеточий : и точек с запятыми ;, в Stylus можно обходиться без них.

\ No newline at end of file diff --git a/app/templates/partials/stylus/stylus-recomendations.hbs b/app/templates/partials/stylus/stylus-recomendations.hbs new file mode 100644 index 0000000..5522e40 --- /dev/null +++ b/app/templates/partials/stylus/stylus-recomendations.hbs @@ -0,0 +1,33 @@ +
+
+ {{~> stylus/recomendations/stylus-variables ~}} +
+
+ +
+
+ {{~> stylus/recomendations/stylus-problems ~}} +
+
+
+

+            {{~> stylus/examples/stylus-problems-example ~}}
+        
+
+
+
+ +
+
+ {{~> stylus/recomendations/stylus-general-recomendations ~}} +
+
+ +
+
+ {{~> stylus/recomendations/stylus-useful-links ~}} +
+
+ + + diff --git a/app/templates/partials/stylus/stylus-rules.hbs b/app/templates/partials/stylus/stylus-rules.hbs new file mode 100644 index 0000000..be3f6ce --- /dev/null +++ b/app/templates/partials/stylus/stylus-rules.hbs @@ -0,0 +1,103 @@ +
+
+ {{~> stylus/rules/stylus-syntax ~}} +
+
+
+

+        {{~> stylus/examples/stylus-syntax-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-indentation ~}} +
+
+
+

+        {{~> stylus/examples/stylus-indentation-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-space-classes ~}} +
+
+
+

+          {{~> stylus/examples/stylus-space-classes-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-unnecessary-symbols ~}} +
+
+
+

+          {{~> stylus/examples/stylus-unnecessary-symbols-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-composite-block-name ~}} +
+
+
+

+          {{~> stylus/examples/stylus-composite-block-name-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-one-block ~}} +
+
+
+

+          {{~> stylus/examples/stylus-one-block-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-mixins-blocks ~}} +
+
+
+

+          {{~> stylus/examples/stylus-mixins-blocks-example ~}}
+      
+
+
+
+ +
+
+ {{~> stylus/rules/stylus-total ~}} +
+
+
+

+          {{~> stylus/examples/stylus-total-example ~}}
+      
+
+
+
From e090ab02e21070c7902d145b3f842b8a0001b0d8 Mon Sep 17 00:00:00 2001 From: dima716 Date: Tue, 12 Jan 2016 13:38:58 +0300 Subject: [PATCH 2/2] Add Angular rules --- Readme.md | 26 +---- app/css/chapter.css | 15 +++ app/img/angular-helpers.jpg | Bin 0 -> 72062 bytes app/img/files-naming.jpg | Bin 0 -> 235096 bytes app/img/structure-example.jpg | Bin 0 -> 55284 bytes app/templates/helpers/resolve.js | 1 + app/templates/index.hbs | 26 ++--- .../angular/angular-recomendations.hbs | 8 ++ .../partials/angular/angular-rules.hbs | 30 ++++++ .../examples/angular-files-naming-example.hbs | 1 + .../angular-files-structure-example.hbs | 1 + ...gular-general-recommendations-example.hbs} | 2 +- .../examples/angular-helpers-example.hbs | 80 +++++++++++++++ .../angular/examples/jquery-cache-example.hbs | 22 ----- .../examples/jquery-events-example.hbs | 21 ---- .../jquery-search-elements-example.hbs | 39 -------- .../examples/jquery-variables-example.hbs | 5 - .../partials/angular/jquery-rules.hbs | 51 ---------- .../angular-general-recomendations.hbs | 9 ++ .../angular/rules/angular-files-naming.hbs | 7 ++ .../angular/rules/angular-files-structure.hbs | 2 + .../angular/rules/angular-helpers.hbs | 4 + .../partials/angular/rules/jquery-cache.hbs | 2 - .../partials/angular/rules/jquery-events.hbs | 2 - .../angular/rules/jquery-search-elements.hbs | 5 - app/templates/partials/footer.hbs | 4 +- .../examples/git-branch-naming-example.hbs | 7 +- .../examples/git-commit-writing-example.hbs | 12 +++ app/templates/partials/git/git-rules.hbs | 13 +++ .../partials/git/rules/git-branch-naming.hbs | 4 +- .../partials/git/rules/git-commit-writing.hbs | 10 ++ app/templates/partials/header.hbs | 6 +- .../examples/jade-classes-ids-example.hbs | 12 +-- .../jade/examples/jade-mixins-example.hbs | 22 ----- .../examples/jade-number-values-example.hbs | 5 - ...es-example.hbs => jade-quotes-example.hbs} | 4 +- app/templates/partials/jade/jade-rules.hbs | 30 +----- .../partials/jade/rules/jade-classes-ids.hbs | 4 +- .../partials/jade/rules/jade-mixins.hbs | 2 - .../jade/rules/jade-number-values.hbs | 2 - .../partials/jade/rules/jade-quotes.hbs | 2 + .../jade/rules/jade-single-quotes.hbs | 2 - .../js/examples/js-properties-example.hbs | 3 + .../partials/js/rules/js-properties.hbs | 3 +- .../partials/js/rules/js-variables.hbs | 5 +- .../examples/stylus-one-block-example.hbs | 9 +- .../stylus/examples/stylus-total-example.hbs | 92 +++++++++--------- .../stylus-unnecessary-symbols-example.hbs | 14 --- .../stylus-general-recomendations.hbs | 5 +- .../stylus/rules/stylus-one-block.hbs | 4 +- .../rules/stylus-unnecessary-symbols.hbs | 2 - .../partials/stylus/stylus-rules.hbs | 13 --- 52 files changed, 301 insertions(+), 349 deletions(-) create mode 100644 app/img/angular-helpers.jpg create mode 100644 app/img/files-naming.jpg create mode 100644 app/img/structure-example.jpg create mode 100644 app/templates/partials/angular/angular-recomendations.hbs create mode 100644 app/templates/partials/angular/angular-rules.hbs create mode 100644 app/templates/partials/angular/examples/angular-files-naming-example.hbs create mode 100644 app/templates/partials/angular/examples/angular-files-structure-example.hbs rename app/templates/partials/angular/{rules/jquery-variables.hbs => examples/angular-general-recommendations-example.hbs} (51%) create mode 100644 app/templates/partials/angular/examples/angular-helpers-example.hbs delete mode 100644 app/templates/partials/angular/examples/jquery-cache-example.hbs delete mode 100644 app/templates/partials/angular/examples/jquery-events-example.hbs delete mode 100644 app/templates/partials/angular/examples/jquery-search-elements-example.hbs delete mode 100644 app/templates/partials/angular/examples/jquery-variables-example.hbs delete mode 100644 app/templates/partials/angular/jquery-rules.hbs create mode 100644 app/templates/partials/angular/recomendations/angular-general-recomendations.hbs create mode 100644 app/templates/partials/angular/rules/angular-files-naming.hbs create mode 100644 app/templates/partials/angular/rules/angular-files-structure.hbs create mode 100644 app/templates/partials/angular/rules/angular-helpers.hbs delete mode 100644 app/templates/partials/angular/rules/jquery-cache.hbs delete mode 100644 app/templates/partials/angular/rules/jquery-events.hbs delete mode 100644 app/templates/partials/angular/rules/jquery-search-elements.hbs create mode 100644 app/templates/partials/git/examples/git-commit-writing-example.hbs create mode 100644 app/templates/partials/git/rules/git-commit-writing.hbs delete mode 100644 app/templates/partials/jade/examples/jade-mixins-example.hbs delete mode 100644 app/templates/partials/jade/examples/jade-number-values-example.hbs rename app/templates/partials/jade/examples/{jade-single-quotes-example.hbs => jade-quotes-example.hbs} (100%) delete mode 100644 app/templates/partials/jade/rules/jade-mixins.hbs delete mode 100644 app/templates/partials/jade/rules/jade-number-values.hbs create mode 100644 app/templates/partials/jade/rules/jade-quotes.hbs delete mode 100644 app/templates/partials/jade/rules/jade-single-quotes.hbs delete mode 100644 app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs delete mode 100644 app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs diff --git a/Readme.md b/Readme.md index 884fcda..bec5ffb 100644 --- a/Readme.md +++ b/Readme.md @@ -1,9 +1,4 @@ -# Стиль кода Академии HTML - -[![dependency status][dependency-image]][dependency-url] -[![devDependency status][devdependency-image]][devdependency-url] - -_TBD_ +# Стиль кода Aitarget ## Сервер для разработки @@ -33,22 +28,3 @@ $ npm test Для проверки скриптов используется [ESLint](http://eslint.org). -## Нашли ошибку? - -Пожалуйста, [создайте тикет](https://github.com/htmlacademy/codeguide/issues). - -## Благодарности - -* [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 - -## Лицензия - -Лицензия 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 diff --git a/app/css/chapter.css b/app/css/chapter.css index f4c276d..1ce12d9 100644 --- a/app/css/chapter.css +++ b/app/css/chapter.css @@ -18,6 +18,17 @@ border-bottom: 1px solid var(--subtle-color); + &_vertical { + flex-direction: column !important; + & .chapter-part-col { + width: 100%; + + & p { + max-width: 100% !important; + } + } + } + @media (--viewport-large) { flex-direction: row; flex-wrap: wrap; @@ -51,6 +62,10 @@ p { max-width: 32rem; } + + img { + width: 100%; + } } .gray-bgcolor { diff --git a/app/img/angular-helpers.jpg b/app/img/angular-helpers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00940d3f46ca0ced5e0a784aafd048385045c957 GIT binary patch literal 72062 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
+ +
+
+ {{~> git/rules/git-commit-writing ~}} +
+
+
+

+        {{~> git/examples/git-commit-writing-example ~}}
+      
+
+
+
diff --git a/app/templates/partials/git/rules/git-branch-naming.hbs b/app/templates/partials/git/rules/git-branch-naming.hbs index 8561e25..7062112 100644 --- a/app/templates/partials/git/rules/git-branch-naming.hbs +++ b/app/templates/partials/git/rules/git-branch-naming.hbs @@ -1,9 +1,9 @@

Наименование веток

Наименование веток производить по следующему принципу:

-

type/task-number/task-short-title, где

+

type/task-short-title/task-number, где

type - тип выполняемой задачи. Может быть

    -
  • feat - новая фича;
  • +
  • feature - новая фича;
  • fix - багофикс;
  • docs - изменения в документации;
  • style - форматирование кода или любые другие изменения, не влияющие на работу кода;
  • diff --git a/app/templates/partials/git/rules/git-commit-writing.hbs b/app/templates/partials/git/rules/git-commit-writing.hbs new file mode 100644 index 0000000..0095641 --- /dev/null +++ b/app/templates/partials/git/rules/git-commit-writing.hbs @@ -0,0 +1,10 @@ +

    Написание коммитов

    +

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

    + + + + diff --git a/app/templates/partials/header.hbs b/app/templates/partials/header.hbs index 08cdf30..bc0c0bd 100644 --- a/app/templates/partials/header.hbs +++ b/app/templates/partials/header.hbs @@ -1,7 +1,7 @@
    - - + + -

    Стиль кода Aitarget

    +

    Aitarget Codestyle

    github.com/aitarget/codeguide

    diff --git a/app/templates/partials/jade/examples/jade-classes-ids-example.hbs b/app/templates/partials/jade/examples/jade-classes-ids-example.hbs index 5ff0f6e..595f850 100644 --- a/app/templates/partials/jade/examples/jade-classes-ids-example.hbs +++ b/app/templates/partials/jade/examples/jade-classes-ids-example.hbs @@ -1,9 +1,9 @@ /* Плохо */ -div(class='carousel' id="carousel") -nav(class='nav nav_pos_left') -div(id="carousel") - -/* Хорошо */ .carousel nav.nav.nav_pos_left -#carousel \ No newline at end of file +#carousel + +/* Хорошо */ +div(class='carousel' id="carousel") +nav(class='nav nav_pos_left') +div(id="carousel") \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-mixins-example.hbs b/app/templates/partials/jade/examples/jade-mixins-example.hbs deleted file mode 100644 index 153eaa4..0000000 --- a/app/templates/partials/jade/examples/jade-mixins-example.hbs +++ /dev/null @@ -1,22 +0,0 @@ -mixin tools(list) - ul.list - each item in list - li.list__item - span.mark= item[0] - = ' - ' + item[1] - -+tools([ - ['spritesmith', 'генератор спрайтов и CSS переменных'], - ['imagemin', 'сжатие картинок'] -]) - -Скомпилирует - -<ul class="list"> - <li class="list__item"> - <span class="mark">spritesmith</span> - генератор спрайтов и CSS переменных - </li> - <li class="list__item"> - <span class="mark">imagemin</span> - сжатие картинок - </li> -</ul> \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-number-values-example.hbs b/app/templates/partials/jade/examples/jade-number-values-example.hbs deleted file mode 100644 index ff1b3d9..0000000 --- a/app/templates/partials/jade/examples/jade-number-values-example.hbs +++ /dev/null @@ -1,5 +0,0 @@ -/* Плохо */ -input.input-text(type="text" name="price" value="24999") - -/* Хорошо */ -input.input-text(type='text' name='price' value=24999) \ No newline at end of file diff --git a/app/templates/partials/jade/examples/jade-single-quotes-example.hbs b/app/templates/partials/jade/examples/jade-quotes-example.hbs similarity index 100% rename from app/templates/partials/jade/examples/jade-single-quotes-example.hbs rename to app/templates/partials/jade/examples/jade-quotes-example.hbs index 14947d1..ed695d3 100644 --- a/app/templates/partials/jade/examples/jade-single-quotes-example.hbs +++ b/app/templates/partials/jade/examples/jade-quotes-example.hbs @@ -1,5 +1,5 @@ /* Плохо */ -input.input-text(type="text" name="project" value="csssr" required) +input.input-text(type='text' name='project' value='csssr' required) /* Хорошо */ -input.input-text(type='text' name='project' value='csssr' required) +input.input-text(type="text" name="project" value="csssr" required) diff --git a/app/templates/partials/jade/jade-rules.hbs b/app/templates/partials/jade/jade-rules.hbs index 7d11623..2d5d6c2 100644 --- a/app/templates/partials/jade/jade-rules.hbs +++ b/app/templates/partials/jade/jade-rules.hbs @@ -26,12 +26,12 @@
    - {{~> jade/rules/jade-single-quotes ~}} + {{~> jade/rules/jade-quotes ~}}
    
    -        {{~> jade/examples/jade-single-quotes-example ~}}
    +        {{~> jade/examples/jade-quotes-example ~}}
           
    @@ -63,19 +63,6 @@
    -
    -
    - {{~> jade/rules/jade-number-values ~}} -
    -
    -
    -
    
    -        {{~> jade/examples/jade-number-values-example ~}}
    -      
    -
    -
    -
    -
    {{~> jade/rules/jade-long-lines ~}} @@ -126,17 +113,4 @@
    -
    - -
    -
    - {{~> jade/rules/jade-mixins ~}} -
    -
    -
    -
    
    -        {{~> jade/examples/jade-mixins-example ~}}
    -      
    -
    -
    \ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-classes-ids.hbs b/app/templates/partials/jade/rules/jade-classes-ids.hbs index fb99b5f..17ad9ed 100644 --- a/app/templates/partials/jade/rules/jade-classes-ids.hbs +++ b/app/templates/partials/jade/rules/jade-classes-ids.hbs @@ -1,2 +1,2 @@ -

    Классы и идентификаторы пишутся в начале

    -

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

    \ No newline at end of file +

    Классы и идентификаторы

    +

    Классы и идентификаторы пишутся в аттрибутах, а не в начале. Это позволяет улучшить читаемость и сохранить однообразие кода.

    \ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-mixins.hbs b/app/templates/partials/jade/rules/jade-mixins.hbs deleted file mode 100644 index 57394f4..0000000 --- a/app/templates/partials/jade/rules/jade-mixins.hbs +++ /dev/null @@ -1,2 +0,0 @@ -

    Пиши меньше, делай больше

    -

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

    diff --git a/app/templates/partials/jade/rules/jade-number-values.hbs b/app/templates/partials/jade/rules/jade-number-values.hbs deleted file mode 100644 index 7bef37e..0000000 --- a/app/templates/partials/jade/rules/jade-number-values.hbs +++ /dev/null @@ -1,2 +0,0 @@ -

    Числовые значения в аттрибутах

    -

    Для числовых значений кавычки не нужны.

    \ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-quotes.hbs b/app/templates/partials/jade/rules/jade-quotes.hbs new file mode 100644 index 0000000..6895cf4 --- /dev/null +++ b/app/templates/partials/jade/rules/jade-quotes.hbs @@ -0,0 +1,2 @@ +

    Кавычки

    +

    Используйте двойные кавычки для текстовых значений.

    \ No newline at end of file diff --git a/app/templates/partials/jade/rules/jade-single-quotes.hbs b/app/templates/partials/jade/rules/jade-single-quotes.hbs deleted file mode 100644 index 6482165..0000000 --- a/app/templates/partials/jade/rules/jade-single-quotes.hbs +++ /dev/null @@ -1,2 +0,0 @@ -

    Одинарные кавычки

    -

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

    \ No newline at end of file diff --git a/app/templates/partials/js/examples/js-properties-example.hbs b/app/templates/partials/js/examples/js-properties-example.hbs index 965f9fa..6f721bf 100644 --- a/app/templates/partials/js/examples/js-properties-example.hbs +++ b/app/templates/partials/js/examples/js-properties-example.hbs @@ -9,6 +9,9 @@ var isJedi = luke['jedi']; /* Хорошо */ var isJedi = luke.jedi; +/* Если название свойства содержит дефис, то необходимо использовать нотацию с [] */ +var isJedi = luke['jedi-master']; + var luke = { jedi: true, diff --git a/app/templates/partials/js/rules/js-properties.hbs b/app/templates/partials/js/rules/js-properties.hbs index 6919aaf..db449f7 100644 --- a/app/templates/partials/js/rules/js-properties.hbs +++ b/app/templates/partials/js/rules/js-properties.hbs @@ -1,3 +1,4 @@

    Свойства

    Используйте точечную нотацию для доступа к свойствам и методам.

    -

    Используйте нотацию с [], когда вы получаете свойство, имя для которого хранится в переменной.

    +

    Используйте нотацию с [], когда вы получаете свойство, имя для которого хранится в переменной, а также если название +свойства содержит дефис.

    diff --git a/app/templates/partials/js/rules/js-variables.hbs b/app/templates/partials/js/rules/js-variables.hbs index b60e822..8d6d1c9 100644 --- a/app/templates/partials/js/rules/js-variables.hbs +++ b/app/templates/partials/js/rules/js-variables.hbs @@ -1,4 +1,7 @@

    Переменные

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

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

    -

    Присваивайте переменные в начале области видимости. Это помогает избегать проблем с объявлением переменных и областями видимости.

    \ No newline at end of file +

    Присваивайте переменные в начале области видимости. Это помогает избегать проблем с объявлением переменных и областями видимости.

    +

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

    \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-one-block-example.hbs b/app/templates/partials/stylus/examples/stylus-one-block-example.hbs index ad63a46..1defd83 100644 --- a/app/templates/partials/stylus/examples/stylus-one-block-example.hbs +++ b/app/templates/partials/stylus/examples/stylus-one-block-example.hbs @@ -21,11 +21,12 @@ .project // ... - &__name - // ... + &:before + // ... - &__before - // ... +// project__name.styl +.project__name + // ... // project-container.styl .project-container diff --git a/app/templates/partials/stylus/examples/stylus-total-example.hbs b/app/templates/partials/stylus/examples/stylus-total-example.hbs index 62e0117..03941c0 100644 --- a/app/templates/partials/stylus/examples/stylus-total-example.hbs +++ b/app/templates/partials/stylus/examples/stylus-total-example.hbs @@ -1,73 +1,73 @@ -// Блок -.block +// Компонент +.component // ... - // @media-примеси блока + // @media-примеси компонента +below(640px) // ... - // Псевдоэлементы блока + // Псевдоэлементы компонента &::after // ... - // Псевдоклассы блока + // Псевдоклассы компонента &:first-child // ... - // Псевдоэлементы с псевдоклассом блока + // Псевдоэлементы с псевдоклассом компонента &::after // ... - // Модификаторы блока - &_key_val - // ... + // Псевдоклассы компонента, влияющие на элементы + & .component__element + // ... - // Псевдоклассы модификатора блока - &:first-child - // ... - // Псевдоэлементы модификатора блока - &::after - // ... - // Элементы - &__element - // ... +// Модификаторы компонента +.component_val + // ... - // @media-примеси элемента - +below(640px) - // ... + // Псевдоклассы модификатора компонента + &:first-child + // ... - // Псевдоэлементы элемента - &::after - // ... + // Псевдоэлементы модификатора компонента + &::after + // ... - // Псевдоклассы элемента - &:first-child - // ... + // Модификаторы компонента, влияющие на элементы + & .component__element + // ... - // Псевдоэлементы с псевдоклассом элемента - &::after - // ... +// Элементы +.component__element + // ... - // Модификаторы элемента - &_key_val - // ... + // @media-примеси элемента + +below(640px) + // ... - // Псевдоклассы модификатора элемента - &:first-child - // ... + // Псевдоэлементы элемента + &::after + // ... - // Псевдоэлементы модификатора элемента - &::after - // ... + // Псевдоклассы элемента + &:first-child + // ... - // Псевдоклассы блока, влияющие на элементы - &:first-child &__element - // ... + // Псевдоэлементы с псевдоклассом элемента + &::after + // ... - // Модификаторы блока, влияющие на элементы - &_key_val &__element - // ... +// Модификаторы элемента +.component__element_val + // ... + + // Псевдоклассы модификатора элемента + &:first-child + // ... - // N элементов ещё... \ No newline at end of file + // Псевдоэлементы модификатора элемента + &::after + // ... \ No newline at end of file diff --git a/app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs b/app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs deleted file mode 100644 index 4212198..0000000 --- a/app/templates/partials/stylus/examples/stylus-unnecessary-symbols-example.hbs +++ /dev/null @@ -1,14 +0,0 @@ -/* Плохо */ -.button { - position: relative; - font-size: 14px; - line-height: 1; - background-color: #08f; -} - -/* Хорошо */ -.button - position relative - font-size 14px - line-height 1 - background-color #08f \ No newline at end of file diff --git a/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs b/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs index a9ef155..789fab6 100644 --- a/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs +++ b/app/templates/partials/stylus/recomendations/stylus-general-recomendations.hbs @@ -1,3 +1,4 @@

    Общие рекомендации

    -

    Используйте примеси (mixins) для частоповторяющихся участков кода.

    -

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

    \ No newline at end of file +

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

    +

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

    \ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-one-block.hbs b/app/templates/partials/stylus/rules/stylus-one-block.hbs index 3dc4bea..43e24ce 100644 --- a/app/templates/partials/stylus/rules/stylus-one-block.hbs +++ b/app/templates/partials/stylus/rules/stylus-one-block.hbs @@ -1,2 +1,4 @@

    Один файл - один блок

    -

    Один файл — один блок. Имя файла совпадает с именем блока. Все стили для блока должны быть описаны в этом файле. Блок не должен встречаться в других файлах.

    \ No newline at end of file +

    Один файл — один компонент. Все стили для компонента должны быть описаны в этом файле. Стили других компонентов не должны встречаться в других файлах. + Компонентами являются как блоки, так и элементы блоков и модификаторов (БЭМ терминология). +

    \ No newline at end of file diff --git a/app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs b/app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs deleted file mode 100644 index dd2c57d..0000000 --- a/app/templates/partials/stylus/rules/stylus-unnecessary-symbols.hbs +++ /dev/null @@ -1,2 +0,0 @@ -

    Использование ненужных символов

    -

    Опускайте использование фигурных скобок {}, двоеточий : и точек с запятыми ;, в Stylus можно обходиться без них.

    \ No newline at end of file diff --git a/app/templates/partials/stylus/stylus-rules.hbs b/app/templates/partials/stylus/stylus-rules.hbs index be3f6ce..9d495f1 100644 --- a/app/templates/partials/stylus/stylus-rules.hbs +++ b/app/templates/partials/stylus/stylus-rules.hbs @@ -37,19 +37,6 @@
-
-
- {{~> stylus/rules/stylus-unnecessary-symbols ~}} -
-
-
-

-          {{~> stylus/examples/stylus-unnecessary-symbols-example ~}}
-      
-
-
-
-
{{~> stylus/rules/stylus-composite-block-name ~}}