diff options
Diffstat (limited to 'ru-ru')
| -rw-r--r-- | ru-ru/haml-ru.html.markdown | 233 | ||||
| -rw-r--r-- | ru-ru/ruby-ru.html.markdown | 5 | ||||
| -rw-r--r-- | ru-ru/swift-ru.html.markdown | 38 | 
3 files changed, 255 insertions, 21 deletions
| diff --git a/ru-ru/haml-ru.html.markdown b/ru-ru/haml-ru.html.markdown new file mode 100644 index 00000000..c2f8852e --- /dev/null +++ b/ru-ru/haml-ru.html.markdown @@ -0,0 +1,233 @@ +--- +language: haml +filename: learnhaml-ru.haml +contributors: +    - ["Simon Neveu", "https://github.com/sneveu"] +    - ["Vasiliy Petrov", "https://github.com/Saugardas"] +translators: +    - ["Vasiliy Petrov", "https://github.com/Saugardas"] +lang: ru-ru +--- + +Haml - язык разметки (в основном используемый с Ruby), с помощью которого могут быть легко описаны HTML-документы. +Он является популярной альтернативой используемому в Rails шаблонизатору (.erb), и позволяет вставлять Ruby-код в вашу разметку. + +Haml убирает избыточность закрывающих тегов благодаря отступам. +В результате получается меньшая по размерам, хорошо структурированная, логичная и читаемая разметка. + +Вы можете использовать Haml и вне Ruby-проекта. Установите гем Haml и используйте командную строку для конвертирования html-файлов: + +```shell +$ haml input_file.haml output_file.html +``` + + +```haml +/ ------------------------------------------- +/ Отступы +/ ------------------------------------------- + +/ +  Отступы являются важным элементом синтаксиса, поэтому они должны быть +  одинаковыми во всём документе. Обычно используют два пробела, +  но это не является обязательным правилом - можно использовать любое +  количество пробелов для отступов. Главное, чтобы это количество было +  одинаковым во всём документе. + + +/ ------------------------------------------- +/ Комментарии +/ ------------------------------------------- + +/ Комментари начинается с символа косой черты. + +/ +  Для написания многострочного комментария расположите ваш комментарий +  на следующем уровне вложенности от символа косой черты + +-# "Скрытый" комментарий. Этот комментарий не попадёт в результирующий документ + + +/ ------------------------------------------- +/ Элементы HTML +/ ------------------------------------------- + +/ Чтобы написать тег, используйте символ процента (%) и название тега +%body +  %header +    %nav + +/ Обратите внимание на отсутствие закрывающих тегов. Код выше выведет: +  <body> +    <header> +      <nav></nav> +    </header> +  </body> + +/ +  Так как тег div используется очень часто, его можно опустить. +  Можно указать только имя класса или идентификатора (. или #) +  Например код: + +%div.my_class +  %div#my_id + +/ Можно записать: +.my_class +  #my_id + +/ Для добавления контента в тег, просто добавьте текст после объявления тега +%h1 Заголовок + +/ Для многострочного содержания используйте отступы +%p +  Многострочное содержание +  в две строки. + +/ +  Амперсанд - равно (&=) обрабатывают Ruby код также, как и без амперсанда, +  но HTML-символы в результате будут экранированы. Например: + +%p +  &= "Да & да" + +/ выведет 'Да & да' + +/ +  Чтобы выполнять Ruby-код без экранрования, можно использовать +  "восклицательный знак" и "равно" (!=) + +%p +  != "Тег абзаца <p></p>" + +/ выведет 'Тег абзаца <p></p>' + +/ CSS - классы могут быть добавлены через точку от определения тега +%div.foo.bar + +/ Или с помощью хеша атрибутов +%div{ :class => 'foo bar' } + +/ Хеш атрибутов может быть добавлен для любого тега +%a{ :href => '#', :class => 'bar', :title => 'Bar' } + +/ Для булевых атрибутов просто присвойте значение 'true' +%input{ :selected => true } + +/ Для data - атрибутов присвойте ключу :data хеш с данными +%div{ :data => { :attribute => 'foo' } } + +/ Для Ruby версии 1.9 или выше, можно использовать новый синтаксис хешей +%div{ data: { attribute: 'foo' } } + +/ Также можно использовать HTML-синтаксис атрибутов +%a(href='#' title='bar') + +/ Можно использовать оба варианта одновременно +%a(href='#'){ title: @my_class.title } + + +/ ------------------------------------------- +/ Включение Ruby +/ ------------------------------------------- + +/ Для включения Ruby кода используйте знак "равно" + +%h1= book.name + +%p +  = book.author +  = book.publisher + + +/ Для выполнения Ruby кода без вывода в HTML, используйте знак дефиса +- books = ['book 1', 'book 2', 'book 3'] + +/ +  Можно выполнять любой Ruby код, например с блоками. +  Закрывающий "end" не нужен, так как они будут закрыты автоматически, +  основываясь на вложенности. + +- books.shuffle.each_with_index do |book, index| +  %h1= book + +  - if book do +    %p This is a book +     +/ Добавление списка +%ul +  %li +    =item1 +    =item2 + +/ ------------------------------------------- +/ Пример таблицы с классами Bootstrap'a +/ ------------------------------------------- + +%table.table.table-hover +  %thead +    %tr +      %th Header 1 +      %th Header 2 +     +    %tr +      %td Value1 +      %td value2 +     +  %tfoot +    %tr +      %td +        Foot value + + +/ ------------------------------------------- +/ Интерполяция Ruby кода +/ ------------------------------------------- + +/ Ruby код может быть интерполирован в текст с помощью #{} +%p Ваша самая любимая игра - #{best_game} + +/ Тоже самое, что и: +%p= "Ваша самая любимая игра - #{best_game}" + + +/ ------------------------------------------- +/ Фильтры +/ ------------------------------------------- + +/ +  Фильтры передают связанный блок текста в соотвествующую +  фильтрующую программу и возвращают результат в Haml +  Фильтр обозначается двоеточием и названием фильтра: + +/ Markdown filter +:markdown +  # Заголовк + +  Текст **внутри** *блока* + +/ Код выше будет скомпилирован в +<h1>Заголовок</h1> + +<p>Текст <strong>внутри</strong> <em>блока</em></p> + +/ Javascript - фильтр +:javascript +  console.log('This is inline <script>'); + +/ скомпилируется в: +<script> +  console.log('This is inline <script>'); +</script> + +/ +  Существует множество типов фильров (:markdown, :javascript, :coffee, +  :css, :ruby и так далее). Вы можете определить собственный фильтр c +  помощью Haml::Filters. + +``` + +## Дополнительные ресурсы + +- [О Haml](https://haml.ru) - Хорошее введение, описывает преимущества Haml. +- [Документация](https://haml.ru/documentation/) - Документация Haml на русском языке. diff --git a/ru-ru/ruby-ru.html.markdown b/ru-ru/ruby-ru.html.markdown index f54c89b4..e69c6d94 100644 --- a/ru-ru/ruby-ru.html.markdown +++ b/ru-ru/ruby-ru.html.markdown @@ -182,8 +182,9 @@ array.[] 12 #=> nil  array[-1] #=> 5  array.last #=> 5 -# С заданными левой и правой границами индексов -array[2, 4] #=> [3, 4, 5] +# Задавая индекс и количество элементов +array[0,2] #=> [1, 2] +array[0,999] #=> [1, 2, 3, 4, 5]  # Или с использованием диапазона значений  array[1..3] #=> [2, 3, 4] diff --git a/ru-ru/swift-ru.html.markdown b/ru-ru/swift-ru.html.markdown index 7ff660e1..f2b1fd36 100644 --- a/ru-ru/swift-ru.html.markdown +++ b/ru-ru/swift-ru.html.markdown @@ -376,14 +376,14 @@ print("Имя :\(name)") // Имя: Яков  // Протокол `Error` используется для перехвата выбрасываемых ошибок  enum MyError: Error { -    case BadValue(msg: String) -    case ReallyBadValue(msg: String) +    case badValue(msg: String) +    case reallyBadValue(msg: String)  }  // фунции помеченные словом `throws` должны вызываться с помощью `try`  func fakeFetch(value: Int) throws -> String {      guard 7 == value else { -        throw MyError.ReallyBadValue(msg: "Действительно плохое значение") +        throw MyError.reallyBadValue(msg: "Действительно плохое значение")      }      return "тест" @@ -401,7 +401,7 @@ func testTryStuff() {      do {          // обычно try оператор, позволяющий обработать ошибку в `catch` блоке          try fakeFetch(value: 1) -    } catch MyError.BadValue(let msg) { +    } catch MyError.badValue(let msg) {          print("Ошибка: \(msg)")      } catch {          // все остальное @@ -535,49 +535,49 @@ if let circle = myEmptyCircle {  // Они могут содержать методы подобно классам.  enum Suit { -    case Spades, Hearts, Diamonds, Clubs +    case spades, hearts, diamonds, clubs      func getIcon() -> String {          switch self { -        case .Spades: return "♤" -        case .Hearts: return "♡" -        case .Diamonds: return "♢" -        case .Clubs: return "♧" +        case .spades: return "♤" +        case .hearts: return "♡" +        case .diamonds: return "♢" +        case .clubs: return "♧"          }      }  }  // Значения перечислений допускают сокращенный синтаксис, нет необходимости  // указывать тип перечисления, когда переменная объявляется явно -var suitValue: Suit = .Hearts +var suitValue: Suit = .hearts  // Значения нецелочисленных перечислений должны быть указаны явно  // или могут выводится с помощью функции `rawValue` из имени  enum BookName: String { -    case John -    case Luke = "Лука" +    case john +    case luke = "Лука"  } -print("Имя: \(BookName.John.rawValue)") +print("Имя: \(BookName.john.rawValue)")  // Перечисление (enum) со связанными значениями  enum Furniture {      // Связать с типом Int -    case Desk(height: Int) +    case desk(height: Int)      // Связать с типами String и Int -    case Chair(String, Int) +    case chair(String, Int)      func description() -> String {          switch self { -        case .Desk(let height): +        case .desk(let height):              return "Письменный стол высотой \(height) см." -        case .Chair(let brand, let height): +        case .chair(let brand, let height):              return "Стул марки \(brand) высотой \(height) см."          }      }  } -var desk: Furniture = .Desk(height: 80) +var desk: Furniture = .desk(height: 80)  print(desk.description())     // "Письменный стол высотой 80 см." -var chair = Furniture.Chair("Foo", 40) +var chair = Furniture.chair("Foo", 40)  print(chair.description())    // "Стул марки Foo высотой 40 см." | 
