HTML / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ WinRT рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдкрд░рд┐рдЪрдпред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде, рд╣рдо рд╡рд┐рдВрдбреЛрдЬ 8 рдХреЗ рд▓рд┐рдП HTML / JS рдореЗрдВ WinRT- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЦреЛрд▓ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рдЯреЗрдВрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрдЯ рдФрд░ рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг-рдЦрд╛рд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗред

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

рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛


рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдЦреЛрд▓реЗрдВ, рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗрдВ ( рдлрд╝рд╛рдЗрд▓ -> рдирдпрд╛ -> рдкреНрд░реЛрдЬреЗрдХреНрдЯ ... )ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ -> рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВред рд╕рдВрдХреЗрдд рджреЗрдВ рдХрд┐ рдЖрдк рдЧреНрд░рд┐рдб рдРрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реАрдбрд░ рдРрдк ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
  1. package.appxmanifest - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдЬрд┐рд╕рдореЗрдВ рдореБрдЦреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╛рдо, рдЯрд╛рдЗрд▓ рдФрд░ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ;
  2. default.html - рдФрдкрдЪрд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрда;
  3. Pages \ groupedItems - рд╕рд╛рдордЧреНрд░реА рд╕рдореВрд╣реЛрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП html-, js- рдФрд░ css- рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ (рдЖрд░рдВрдн рдкреГрд╖реНрда рдореЗрдВ рд▓реЛрдб);
  4. рдкреГрд╖реНрда \ groupDetail - рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдорд╛рдЪрд╛рд░ рдХрд╛ рдПрдХ рд╕рдореВрд╣ (рдПрдХ рдЖрд░рдПрд╕рдПрд╕-рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП HTML-, js- рдФрд░ рд╕реАрдПрд╕рдПрд╕-рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░;
  5. Pages \ itemDetail - html-, js- рдФрд░ css- рдлрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдлреЛрд▓реНрдбрд░ рдкреГрд╖реНрда рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдЪрд╛рд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ;
  6. js \ data.js - js-file рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдбреЗрдореЛ рдбреЗрдЯрд╛ рд╡рд╛рдпрд░реНрдб рд╣реИ);
  7. js \ default.js - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ;
  8. js \ navigator.js - рдкреГрд╖реНрдареЛрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ;
  9. images \ logo.png - рд╡рд░реНрдЧ рдЯрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЫрд╡рд┐;
  10. images \ smalllogo.png - рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЫрд╡рд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЦреЛрдЬ рдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрдЬрддреЗ рдпрд╛ рдЪреБрдирддреЗ рд╣реИрдВ;
  11. рдЫрд╡рд┐рдпрд╛рдБ \ splashscreen.png - рдмреВрдЯ рдЫрд╡рд┐ рдЖрд╡реЗрджрди рдЦреЛрд▓рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд;
  12. images \ storelogo.png - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЛрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЫрд╡рд┐ред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, WinJS рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдВрдзреЗрд░реЗ рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╡рд┐рд╖рдпреЛрдВ рдФрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

F5 , рд╣рд░реЗ рддреАрд░ рдХреЛ рджрдмрд╛рдХрд░ рдпрд╛ рдбреАрдмрдЧ -> рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ред



рдЬрд╛рдиреЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


Visual Studio рдкрд░ рд▓реМрдЯреЗрдВ рдФрд░ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ ( Shift + F5 , рдПрдХ рд▓рд╛рд▓ рд╡рд░реНрдЧ рдпрд╛ рдЪрдпрди рдХрд░реЗрдВ рдбреАрдмрдЧ -> рдореЗрдиреВ рд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ )ред

рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреА рдЬрдЧрд╣


Js \ data.js рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рдпрд╣ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдо рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдкрд╣рд▓рд╛ рдХрджрдо рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╣реИ рдЬреЛ рдирдореВрдирд╛ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ :

  1. рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рд▓реЗрдВ:

    // You can add data from asynchronous sources whenever it becomes available. generateSampleData().forEach(function (item) { list.push(item); }); 


  2. рдирдореВрдирд╛ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛:
      // Returns an array of sample data that can be added to the application's // data list. function generateSampleData() { var itemContent = "<p>Curabitur class тАж "; var itemDescription = "Item Description: PellenteтАж"; var groupDescription = "Group Description: Lorem тАж"; тАж return sampleItems; } 


рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ data.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдЧреЗ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХреЗ:

 var list = new WinJS.Binding.List(); 


рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдореЗрдВ рд╣рдо рдЙрди рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

 var groupedItems = list.createGrouped( function groupKeySelector(item) { return item.group.key; }, function groupDataSelector(item) { return item.group; } ); 

рд╕реВрдЪреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рд╕рдореВрд╣рд┐рдд рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 WinJS.Namespace.define("Data", { items: groupedItems, groups: groupedItems.groups, getItemReference: getItemReference, getItemsFromGroup: getItemsFromGroup, resolveGroupReference: resolveGroupReference, resolveItemReference: resolveItemReference }); 


WinJS рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдиреЗрдорд╕реНрдкреЗрд╕) рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдПрдХ рд╕рдореВрд╣реАрдХреГрдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдВрдХ, рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╕рдореВрд╣реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдФрд░ data.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрдИ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред

рд╢реЗрд╖ 4 рдлрд╝рдВрдХреНрд╢рдВрд╕ ( getItemReference , getItemsFromGroup , solutionGroupReference рдФрд░ solutionItemReference ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╣реА рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рдореВрд╣ рдХреЛ рдХреБрдВрдЬреА рдФрд░ рддрддреНрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдмрд╛рд╣рд░реА рдЖрд░рдПрд╕рдПрд╕ рдлрд╝реАрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

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


рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж "рд╕рдЦреНрдд рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЙрди рдмреНрд▓реЙрдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ:

  var blogs = [ { key: "ABlogging", url: "http://blogs.windows.com/windows/b/bloggingwindows/rss.aspx", title: 'Blogging Windows', rsstitle: 'tbd', updated: 'tbd', dataPromise: null }, { key: "BExperience", url: 'http://blogs.windows.com/windows/b/windowsexperience/rss.aspx', title: 'Windows Experience', rsstitle: 'tbd', updated: 'tbd', dataPromise: null }, { key: "CExtreme", url: 'http://blogs.windows.com/windows/b/extremewindows/rss.aspx', title: 'Extreme Windows', rsstitle: 'tbd', updated: 'tbd', dataPromise: null }]; 


рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдЧ (рд╕рд╛рдордЧреНрд░реА рд╕рдореВрд╣) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж var рд╕реВрдЪреА = рдирдпрд╛ WinJS.Binding.List (); рдПрдХ рдирдпрд╛ getBlogPosts рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ , рдЬреЛ рд╕рд┐рд░реНрдл рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ :

 function getBlogPosts(postsList) { blogs.forEach(function (feed) { //  Promise feed.dataPromise = WinJS.xhr( { url: feed.url } ).then( function (response) { if (response) { var syndicationXML = response.responseXML || (new DOMParser()).parseFromString(response.responseText, "text/xml"); processRSSFeed(syndicationXML, feed, postsList); } } ); }); return postsList; } 


рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рд╕рднреА рдмреНрд▓реЙрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд▓реВрдк рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП WinJS.xhr рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ , XMLHttpRequest рдЕрдиреБрд░реЛрдз рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд╛рджрд╛ рдЖрд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (рддрдм) рд╣рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдиреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред

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


рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ - processRSSFeed :

  function processRSSFeed(articleSyndication, feed, postsList) { //   feed.rsstitle = articleSyndication.querySelector("rss > channel > title").textContent; //         var published = articleSyndication.querySelector("rss > channel > item > pubDate").textContent; //      var date = new Date(published); var dateFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter( "day month.abbreviated year.full"); var blogDate = dateFmt.format(date); feed.updated = ": " + blogDate; //   getItemsFromRSSFeed(articleSyndication, feed, postsList); } 


рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдВрд░рдЪрдирд╛ (RSS 2.0) рдХреЗ рд╕рд╛рде XML рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк DOM рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреНрд╡реЗрд░реАрд╕реЗрд▓реЗрдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо WinRT рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрддрд┐рдо рдЕрджреНрдпрддрди рддрд┐рдерд┐ рдХреЗ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдорд╛рди рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред

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

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝реЗрдВ :

 function getItemsFromRSSFeed(articleSyndication, feed, postsList) { var posts = articleSyndication.querySelectorAll("item"); //       var length = posts.length; for (var postIndex = 0; postIndex < length; postIndex++) { var post = posts[postIndex]; //   var postPublished = post.querySelector("pubDate").textContent; var postDate = new Date(postPublished); var monthFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("month.abbreviated"); var dayFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("day"); var yearFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("year.full"); var timeFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shorttime"); var postContent = toStaticHTML(post.querySelector("description").textContent); var postItem = { index: postIndex, group: feed, //   title: post.querySelector("title").textContent, //     postDate: postDate, month: monthFmt.format(postDate).toUpperCase(), day: dayFmt.format(postDate), year: yearFmt.format(postDate), time: timeFmt.format(postDate), //   content: postContent, //    link: post.querySelector("link").textContent }; postsList.push(postItem); } } 


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

рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдореВрд╣ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреЛрд╕реНрдЯ рдХреА рдкрд░рд┐рдгрд╛рдореА рд╕рд╛рдордЧреНрд░реА рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдлрдВрдХреНрд╢рди рд╕реНрдЯреЗрдЯрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдЯрд┐рдХ рд╡реНрдпреВ рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ ред

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


рдмреНрд▓реЙрдЧ рдкрдврд╝рдиреЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреА рдЧрдИ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ :

 list = getBlogPosts(list); 


рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдирдП рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ "рд╕рдорд╕реНрдпрд╛" рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

рд╡рд┐рд╕реНрддрд╛рд░


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


All Articles