Handlebars.js: рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдЪрд░ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: handlebars-lang/handlebars.js

рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ,

рдХреНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдЪрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ {{varName}} , рддреЛ рдореИрдВ рдЗрд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ

{{#each listName}}
    {{field1}}
    {{field2}}
{{/each}}

рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ listName рдирд╛рдордХ рд╕реВрдЪреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб field1 рдФрд░ field2 ред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдПрдкреАрдЖрдИ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж,
рджрд┐рдорд┐рддреНрд░реАред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рд╣рд┐рдд рдЪрд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

const getHBVars = value => {
  const ast = hb.parse(value)
  let keys = {}

  for (let i in ast.body) {
    if (ast.body[i].type === 'MustacheStatement') {
        keys[ast.body[i].path.original] = true
    }
  }
  return keys
}

const activeKeys = getHBVars('Hello {{person}}! Today is {{day}}')

console.log(activeKeys)
// --> { person: true, day: true }

рд╕рднреА 15 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдЪреАрдЬрд╝ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрджрд░реНрдн (рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрд░ рдХреЗ рд╕реЗрдЯ) рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рд╣реЗрд▓реНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИ:

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП {{log this}} - рдХрдВрд╕реЛрд▓ рдкрд░ this рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛, рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЧреБрдг (рдФрд░ рдорд╛рди) рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ things рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп {{log things}} рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп рдмреНрд▓реЙрдЧреЛрдВ рдХреЗ рднреАрддрд░ рдпрджрд┐ рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╣рд╛рдБ рд╣реИрдВ: http://handlebarsjs.com/builtin_helpers.html#log

рдХреНрдпрд╛ рдЖрдк рдЗрдирдкреБрдЯ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рдмрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ JSON-рд╕реНрдХреАрдорд╛ рдХреА рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдк рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдмреНрд▓реЙрдХ-рд╣реЗрд▓реНрдкрд░реНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдХрднреА рднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рд╣реЗрд▓реНрдкрд░-рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рд╣реЗрд▓реНрдкрд░ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдм-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред

рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реЗрд▓реНрдкрд░ рдорд┐рд╕рд┐рдВрдЧ рд╣реЗрд▓реНрдкрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЪрд░ рдПрдХрддреНрд░ рдХрд░ рд╕рдХреЗрдВ (рдЖрдкрдХреЛ рдЗрд╕реЗ рд╢реВрдиреНрдп рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдЬрдм рдЖрдкрдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдВ, рдореИрдВ рдЗрдирдкреБрдЯ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ JSON рд╕реНрдХреАрдорд╛ рдХреА рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдорд╛рдирдХ рд╕рд╣рд╛рдпрдХреЛрдВ рдФрд░ рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ( knownHelpersOnly ), рддреЛ рдореБрдЭреЗ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╣реИрдВрдбрд▓рдмрд╛рд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'рдорд╛рдирдХ' (рдпрджреНрдпрдкрд┐ рдирд┐рдореНрди-рд╕реНрддрд░) рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╣реЗрдВ, рдорджрджрдЧрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рджреБрдирд┐рдпрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред рдЖрдкрдХреЗ рдЙрддреНрддрд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдПрдХ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ :)

@dsavenko рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдПрд╕рдЯреА рд╕реНрдХреИрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдВрд╢рд┐рдХ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЯреА рдЦреЛрдЬрдХрд░, рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдкреНрд░реАрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
https://github.com/SlexAxton/require-handlebars-plugin/blob/master/hbs.js#L224

рдпрд╣рд╛рдВ рдПрдПрд╕рдЯреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд╣реИ:
https://github.com/wycats/handlebars.js/blob/master/docs/compiler-api.md

@jbboehr рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ!

@dsavenko рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛; рдореИрдВ рдЕрдкрдиреЗ рдмрдВрджрд░рдЧрд╛рд╣ рдореЗрдВ рдЯрд╛рдЗрдк-рдЪреЗрдХрд┐рдВрдЧ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ рдФрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдХреАрдорд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЗрд╕реЗ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╣рд▓ рдорд┐рд▓рд╛?
рдпрд╣ рдПрдХ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛:

https://github.com/stevenvachon/handlebars-html-parser

@abumalick , рдирд╣реАрдВ, рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдПрдПрд╕рдЯреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рдерд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирдпрд╛ рд╕реНрд╡рд░реВрдк рджреЗ рджреВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рд╣рд┐рдд рдЪрд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

const getHBVars = value => {
  const ast = hb.parse(value)
  let keys = {}

  for (let i in ast.body) {
    if (ast.body[i].type === 'MustacheStatement') {
        keys[ast.body[i].path.original] = true
    }
  }
  return keys
}

const activeKeys = getHBVars('Hello {{person}}! Today is {{day}}')

console.log(activeKeys)
// --> { person: true, day: true }

рд▓реЗрдХрд┐рди рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдкрд░ рд░реЗрдЧреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╢рд╛рдпрдж рд╣реЛрдЧрд╛ред

/{{[{]?(.*?)[}]?}}/g

https://gist.github.com/etiennemarais/2597e33168a07a16a5d541db2a991005

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ Barhandles рдмрдирд╛рдпрд╛ рдерд╛ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд░реЗрдЧреЗрдХреНрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЖрдк рдмрд╕ рдЗрд╕реЗ рд╣реИрдВрдбрд▓рдмрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЦрд┐рд▓рд╛рдПрдВ, рдФрд░ рдпрд╣ рдЪрд░ рд╕рдВрджрд░реНрдн рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

http://nxt.flotsam.nl/barhandles
https://medium.com/east-pole/advanced-barhandles-4a7e64c1bc0d
https://github.com/wspringer/barhandles

рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрдВрджред

@wspringer рддреБрдо рдЖрджрдореА рд╣реЛ!

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рд╛рд░ рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреБрдЫ рд╕рдлрд▓рддрд╛ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред

https://gist.github.com/imryanjay/1d91b2c9f768af7c1b1877a51a4a75f0

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

morgondag picture morgondag  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

novwhisky picture novwhisky  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

LengYXin picture LengYXin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

snimavat picture snimavat  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sontek picture sontek  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ