рдЙрд▓реНрдХрд╛ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡

рдпрд╣ рдЙрд▓реНрдХрд╛ рд░реВрдкрд░реЗрдЦрд╛ рдкрд░ рдПрдХ рд▓рд╛рдЗрд╡ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА рд╣реИред рдврд╛рдВрдЪрд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╡рд┐рдХрд╛рд╕ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореМрдЬреВрджрд╛ PHP / JS рдЪреМрдЦрдЯреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрд▓реНрдХрд╛ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдпрд╣ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд┐рдВрдЧ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдЪрд╛рд░рдХ рдкреГрд╖реНрда рд╣реИред рдХрд╛рд░реНрдп рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдлреЛрдЯреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдкреЗрдЬ рдмрдирд╛рдирд╛ рдерд╛ред рдХреЗрд╡рд▓ 8 рдкреНрд░рддрд┐рднрд╛рдЧреАред рдХреЛрдИ рднреА рдорддрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкрдВрдЬреАрдХрд░рдг рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреГрд╖реНрда рдореЗрдВ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рд╣реЛрдЧреАред

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд┐рдХрд▓рд╛ред рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрдХрд╛, рдмрд░рд╛рдмрд░ рдореЗрдВ рдореЗрд░реА рдкрд╣рд▓реА рдиреМрдХрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд┐рдХрд▓рд╛ред рдЙрд▓реНрдХрд╛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдерд╛рдХрдерд┐рдд рд╣реИ Reactivity ( Reactivity )ред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗ рдмрд┐рдирд╛ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдмрджрд▓рддреЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдФрд░ AJAX рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЙрд▓реНрдХрд╛ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рд╕рд╛рдЗрдЯ www.meteor.com рдкрд░ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рд╡реАрдбрд┐рдпреЛ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╣рдм рдкрд░ рдХрдИ рд▓реЗрдЦ рднреА рд╣реИрдВ

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



рд╕рдВрдЧреНрд░рд╣


рдбреЗрдЯрд╛рдмреЗрд╕ MongoDB рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛ рддрдХ рдЙрд╕реА рддрд░рд╣ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдореЗрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХреНрд╕реЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рдПрдХ рд╣реА рд╣реИ - рдорд┐рдиреАрдореЛрдВрдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ, рдорд┐рдирд┐рдореЛрдВрдЧреЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдореЛрдВрдЧреЛрдбреАрдмреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓: model.js
//       Members = new Meteor.Collection('members'); 


рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдореЗрдВрдмрд░реНрд╕ рдЪрд░ рддрдХ рдкрд╣реБрдБрдЪ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреЛрд▓рдХрд░ рдФрд░ рдЯрд╛рдЗрдкрдСрдлрд╝ рдореЗрдВрдмрд░ рдпрд╛ рдореЗрдВрдмрд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рджрд╕реНрдп рддрд░реАрдХреЗ рд╕реАрдзреЗ MongoDB рдХреЗ рд╕рд╛рде рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ Minimongo рдЖрд╡рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдпреЗ рд╕рдВрдЧреНрд░рд╣ рдЦреБрдж Meteor рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рд╡рд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбреЗрдЯрд╛ рдХрдм рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рд╕рджрд╕реНрдп рдЪрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реЛрдЧрд╛ред рдпрд╣ Meteor.publish () рдФрд░ Meteor.subscribe () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / client.js
 Meteor.subscribe('members'); 

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

рдлрд╝рд╛рдЗрд▓: рд╕рд░реНрд╡рд░ / server.js
 Meteor.publish('members'); Meteor.startup(function () { if (Members.find().count() === 0) { Members.insert({ name: ' ', title: '', url: 'http://mariels.ru/member/profile_alexandra_igorevna.html', photo: 'images/member/ .jpg', thumb: 'http://mariels.ru/$userfiles/thumb_450_1136_94.jpg', vote: 0 }); Members.insert({ name: ' ', title: '', url: 'http://mariels.ru/member/profile_Alionushka.html', photo: 'images/member/ .jpg', thumb: 'http://mariels.ru/$userfiles/thumb_444_1120_90.jpg', vote: 0 }); //   ... } }); 


рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, Meteor рдореЗрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХреЛрдб рд╕рд░реНрд╡рд░ / server.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

HTML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛


рдбреЗрдЯрд╛ рд╣реИ, рдЕрдм рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд▓реНрдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдВрдЬрди рдмрд╣реБрдд рдЯреЗрдврд╝рд╛ рд╣реИ рдФрд░ "рдлрд╝реЙрд░рди рд▓реВрдк рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рддрдХ рдкрд╣реБрдВрдЪ" рдЬреИрд╕реЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдЯреИрдЧ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЖрджрдд рдкрдбрд╝рдиреЗ рдкрд░ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / рджреГрд╢реНрдп / рд╕рджрд╕реНрдпред html
 <template name="members"> <div id="members"> {{#render_members members}} <span class="member span6"> <span class="info-cont"> <span class="shadow"></span> <a href="{{member.url}}" class="account"> <img src="{{member.thumb}}" width="" height="" class="avatar"/> <span>{{member.name}}</span> </a> </span> <img src="{{member.photo}}" class="image" /> <span class="rate-cont"> <span class="shadow"></span> <button class="btn {{#if voted}}btn-info{{else}}btn-warning{{/if}} pull-center btn-large" data-id="{{member._id}}" {{#if voted}}disabled{{/if}}> {{#if voted}}    {{else}}   <span>{{member.title}}</span> {{/if}} </button> </span> </span> {{/render_members}} </div> </template> 


рд░реЗрдВрдбрд░_рдореИрдорд░реНрд╕ рдЯреИрдЧ рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЖрдЙрдЯрдкреБрдЯ <div class = "row"> рд╣рд░ рджреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ), рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реЙрд░реЗрд╕реНрдЯ рд▓реВрдк рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдПрдХрдорд╛рддреНрд░ рдЪрд░ рд╕рджрд╕реНрдп рд╕рд░рдгреА рд╣реИред рд░реЗрдВрдбрд░_рдореИрдорд░реНрд╕ рдмреЙрдбреА рдореЗрдВ, рд╕рджрд╕реНрдп рд╕рд░рдгреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рдлрд╝реАрд▓реНрдб рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рд╕рджрд╕реНрдп рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдХрд░реНрд╕рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред

рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / client.js
 Template.members.members = function() { return Members.find({}, { sort: { vote: -1 }}); } 


Members.find () рдХрд░реНрд╕рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Members.find ()ред Fetch () рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рдгреА рд╣реИред рдХрд░реНрд╕рд░ рдХреЛ рд╕рджрд╕реНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди () {} рдореЗрдВ рд▓рдкреЗрдЯрдирд╛, рд╣рдо рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрд░ рдкрд░ рдЙрд▓реНрдХрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рд╕рджрд╕реНрдп рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдирдП рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!

рд╕рд░реНрд╡рд░ рдХреЗ рддрд░реАрдХреЗ


рдлрд╝рд╛рдЗрд▓: рд╕рд░реНрд╡рд░ / server.js
 //     Votes = new Meteor.Collection('votes'); 


рд╕рднреА рдЖрд╡рд╛рдЬрд╝реЛрдВ рдХреЛ рд╡реЛрдЯ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдХрдИ рд╣рдЬрд╛рд░ рд░рд┐рдХреЙрд░реНрдб рддрдХ рдмрдврд╝ рд╕рдХрддреА рд╣реИред рд╣рдо рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреА рдЗрддрдиреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд╛рдЬ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдИрдкреА рдФрд░ рддрд╛рд░реАрдЦред рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ Meteor.publish () / Meteor.subscribe () рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓: рд╕рд░реНрд╡рд░ / server.js
 //   IP     var CanVote = Match.Where(function(ip) { check(ip, String); if (ip.length > 0) { var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); //       return Votes.find({ ip: ip, date: { $gt: yesterday } }).count() == 0; } return false; }); //  ,   Meteor.methods({ //  true      false    canVote: function() { return Match.test(headers.get('x-forwarded-for'), CanVote); }, //    vote: function(memberId) { check(memberId, String); check(headers.get('x-forwarded-for'), CanVote); var voteId = Votes.insert({ memberId: memberId, ip: headers.get('x-forwarded-for'), date: new Date() }); //  SQL JOIN Members.update(memberId, { $set: { vote: Votes.find({ memberId: memberId }).count() } }); return voteId; }, //      getMemberVotes: function(memberId) { check(memberId, String); return Votes.find({memberId:memberId}).count(); }, //      getTotalVotes: function() { return Votes.find().count(); } }); 


Meteor.methods () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдЪрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рд╡реЛрдЯ рд╕рдВрдЧреНрд░рд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА рд╡реЛрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХреБрд▓ рд╡реЛрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Meteor.methods () рдХреЛ model.js рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реИрдкрд░ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░, рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдбреЗрдЯрд╛ рддреБрд░рдиреНрдд рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд▓реЗрдЯреЗрдВрд╕реА рдХрдореНрдкреЗрдВрд╕реЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдкрд░ рд╡реЛрдЯ рд╕рдВрдЧреНрд░рд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╕рднреА рд╕рдорд╛рди, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛




рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / рд╡рд┐рдЪрд╛рд░ / рд░реЗрдЯрд┐рдВрдЧред html
 <template name="ratings"> <div id="ratings" class="well"> <h1 class="heading uppercase"></h1> <div class="chart"> {{#each_with_index members}} <div class="rating num{{index}}"> <img src="{{data.thumb}}" class="avatar"/> </div> {{/each_with_index}} </div> <div class="pull-center pull-center-1"> <div id="votes">{{votes}}</div> <div><strong></strong></div> </div> </div> </template> 


рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / client.js
 Session.setDefault('totalVotes', 0); Meteor.startup(function() { //   totalVotes  Deps.autorun(function() { var total = 0; Members.find().forEach(function(m) { total += m.vote; }); Session.set('totalVotes', total); }); //    -5 Deps.autorun(function() { var top = Members.findOne({}, { sort: { vote: -1 }}); //    // update ratings chart Members.find({}, { sort: { vote: -1 }, limit: 5 }).forEach(function(m, i) { var height = top ? Math.floor((m.vote / top.vote) * 190) + 100 : 100; $('.rating.num'+(i+1)).css('height', height); }); }); }); Template.ratings.members = function() { return Members.find({}, {limit: 5, sort: { vote: -1 }}); }; Template.ratings.votes = function() { return Session.get('totalVotes'); }; 


рд╕рддреНрд░ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдкреГрд╖реНрда рд░реАрдлреНрд░реЗрд╢ рд╣реЛрдиреЗ рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХрд░реНрд╕рд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк TotalVotes рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рддреНрд░ рдореЗрдВ рд░реЗрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд░ рдмрд╛рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ, рдбрд┐рдкреЗрд╕рдЯреЙрд░рди () рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХрд░реНрд╕рд░ Members.find () рд╣реИред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд╡реЛрдЯреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╕рддреНрд░ рдХреЗ рдХреБрд▓Votes рдХрд╛ рдореВрд▓реНрдп рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рд░реЗрдЯрд┐рдВрдЧ рдмреНрд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред Deps.autorun () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдпреЛрдЬрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬреИрд╕реЗ, рдмрджрд▓реЗ, рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдпрд╣рд╛рдВ рд╣рдЯрд╛рдП рдЧрдП рд╣реИрдВ ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдорддрджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЖрдЧрдВрддреБрдХ рд░реЗрдЯрд┐рдВрдЧ рдмреНрд▓реЙрдХ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рд░реЗрдЯрд┐рдВрдЧ рдмрд╛рд░ рдЙрдирдХреА рдКрдВрдЪрд╛рдИ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред

рдЖрдк рдпрд╣рд╛рдВ jQuery рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд▓рдЧрднрдЧ рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рдХреЗ рд╕рд╛рде рдЙрд▓реНрдХрд╛ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ, Meteor.startup (function {}) рдФрд░ jQuery (function () {}) рд╕рдорд╛рди рд╣реИрдВред

рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / client.js
 Session.setDefault('voted', false); //       Template.members.voted = function() { return Session.get('voted'); } Template.members.events = { 'click button': function(event) { var $btn = $(event.currentTarget); //  ,   Latency Compensation   //         DOM Session.set('voted', true); //     Meteor.call('vote', $btn.data('id'), function(error, vote) { if (error) { Session.set('voted', false); } }); } } 


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

рдЗрд╕ рдХреЛрдб рдореЗрдВ DOM рдЗрд╡реЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк jQuery.on () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд┐рд╣рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдлрд╝рд╛рдЗрд▓: рдХреНрд▓рд╛рдЗрдВрдЯ / рд╡рд┐рдЪрд╛рд░ / index.html
 <head> <!--  meta   ..  SEO   --> <link href="stylesheets/project.css" media="screen" rel="stylesheet" type="text/css" /> <!-- ...   CSS --> <script type="text/javascript" src="js/flipclock/flipclock.min.js"></script> <!--   JavaScript --> <title>  2013</title> </head> <body> <div class="page-header-bg"></div> {{>header}} <div class="container-fluid"> <div class="container"> <div class="page-header"> <h1 class="header-gradient">  2013</h1> </div> {{>page}} </div> </div> </body> <template name="page"> {{#if contestInProgress}} {{>countdown}} {{>members}} {{>social}} {{>ratings}} {{>terms}} {{>footer}} {{else}} {{>winner}} {{>social}} {{>footer}} {{/if}} </template> 


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

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

рдлрд╝рд╛рдЗрд▓: рдЧреНрд░рд╛рд╣рдХ / client.js
 contestEndDate = new Date('01/30/2014 12:00'); Session.set('inProgress', new Date() < contestEndDate); Template.header.contestInProgress = Template.page.contestInProgress = Template.footer.contestInProgress = function() { return Session.get('inProgress'); } Meteor.startup(function() { //   var targetDate = contestEndDate; var currentDate = new Date(); var offsetSeconds = (targetDate.getTime() - currentDate.getTime()) / 1000; offsetSeconds = Math.max(0, offsetSeconds); var clock = $('#countdown').FlipClock(offsetSeconds, { clockFace: 'DailyCounter', defaultClockFace: 'DailyCounter', countdown: true, callbacks: { stop: function() { Session.set('inProgress', false); } } }); }); 


Index.html рдореЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХрд╛ рдПрдХ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛InProgress рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдкреНрд░рдЧрддрд┐ рдореЗрдВ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реАред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреГрд╖реНрда рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдЬрдм рдкреЗрдЬ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреЗрдЯрд╕ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рддрдм рднреА рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ рдЬрдм FlipClock рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рд╕реНрдЯреЙрдк рдЗрд╡реЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИред

рдЪрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛InProgress рддреАрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╕рдорд╛рди рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдпрд╣ рдХреЛрдб рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рддреГрддреАрдп-рдкрдХреНрд╖ FlipClock рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗ, рдЙрд▓реНрдХрд╛ рдЧреНрд░рд╛рд╣рдХ рд╕рддреНрд░ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ FlipClock рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрд▓рд╛рдЗрдВрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИред
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЙрд▓реНрдХрд╛ рдХрд╛ рдЦреБрд▓рд╛ рд▓рд╛рдн рдЦреБрд▓рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ ? рдпрд╣ рдХреЛрдб рдХреА рд╕рд┐рд░реНрдл рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЙрд╕ рдХреНрд╖рдг рдкреГрд╖реНрда рджреЗрдЦ рд░рд╣рд╛ рд╣реИ рддреЛ рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд▓рдЧреЗрдЧрд╛ред
рдпрджрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ PHP + AJAX рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред рдЕрдкреВрд░реНрдг, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдШрдЯрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреВрд░реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реЛрдЧреА, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреЗрд╡рд▓ рдкреГрд╖реНрда рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рде рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗред рдФрд░ рдХреНрдпреЛрдВ рдЗрд╕ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдЕрдЧрд░ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ? рдмрд╛рдХреА рдмрд╕ рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рдЙрд▓реНрдХрд╛ рдХрд╛ рдЖрдХрд░реНрд╖рдг рд╣реИ - рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд╣ рдЙрди рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдПрдХ рд▓рдВрдмреЗ рдмреЙрдХреНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрддреНрдХрд░реНрд╖


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

рд▓рд╛рдн:

  1. рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  2. рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ
  3. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕реАрдзреЗ рдбрд┐рдмрдЧ рдХреЛрдб рдЪреБрдиреЗрдВ
  4. рдЖрдк рдЙрд▓реНтАНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рдЙрд▓реНтАНрд▓реЗрдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНтАНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ
  5. рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рд╕рд╣рд┐рдд рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдп


рдиреБрдХрд╕рд╛рди:

  1. рдЕрднреА рднреА рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЪрд░рдг рдореЗрдВ, рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ
  2. рдХреЛрдб рдореЗрдВ, рднрд╛рд░реА рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рддреБрдЪреНрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ
  3. рдПрдХ рд▓рдбрд╝рд╛рдХреВ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ http рд╕рд░реНрд╡рд░ рд╣реИ, рддреЛ рдкреЛрд░реНрдЯ 80 рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕
  4. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рдХрд╛рд░рдг рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ
  5. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдпрд╣ рдПрд╕рдИрдУ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ


рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реНрд╡рдпрдВ рд╣реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдЖрдк рдпрд╣рд╛рдБ рдкрд░ test version рдХрд╛ рдкреНрд░рдореЛрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
Github.com/imajus/promo рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реВрддреНрд░

Source: https://habr.com/ru/post/In204262/


All Articles