рдЧреВрдЧрд▓ рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд▓реЗрдЦрди

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

рдпрд╣ рд▓реЗрдЦ рдХрд╡рд░ рдХрд░реЗрдЧрд╛:


рдкрд░рд┐рдЪрдп


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

рдШреЛрд╖рдгрд╛рдкрддреНрд░


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

manifest.json
{ тАЬnameтАЭ: тАЬOrganizer extensionтАЭ, //   тАЬversionтАЭ: тАЬ1.0тАЭ, //  . тАЬmanifest_versionтАЭ: 2 //   } 


рдХреБрдЫ рдирд┐рдпрдо рд╣реИрдВ:


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

manifest.json
 { тАж "browser_action": { "default_title": "Open organizer", // .          "default_icon": "icon_small.png", //     "default_popup": "popup.html" //      } } 


рдЕрдм рдПрдХ рдкреЙрдкрдЕрдк рдмрдирд╛рдПрдВред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд html рдкреЗрдЬ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдФрд░ рд░рдВрдЧ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдИ рдЪрд╛рд▓ рдирд╣реАрдВред рдлрд╝рд╛рдЗрд▓ рдХреЛ "popup.html" рдирд╛рдо рджреЗрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ - рдЗрд╕реЗ рдкреНрд░рдХрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рд╣рдордиреЗ рдХрд┐рдпрд╛: "default_popup": "popup.html"ред

popup.html
 <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div>It works!</div> </body> </html> 

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рдирд╛


рдЕрдм рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдХреНрд░реЛрдо рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдиреВ рдЦреЛрд▓реЗрдВред рдкрдХреНрд╖реА рдХреЛ "рдбреЗрд╡рд▓рдкрд░ рдореЛрдб" рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

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


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдиреЗрдХреНрд╢рди


рдЕрдм рдЖрдк рдордЬрд╝рд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рджреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓рд╛ рдкреЙрдкрдЕрдк рд╣реИред рджреВрд╕рд░рд╛, jquery рд╣реИред рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╣рдо jquery рдХреЛ рд╕реНрдерд╛рдиреАрдп рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд░рд┐рдореЛрдЯ рд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ , ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js рдкрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдкрд╛рд╕ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рдЪреАрдЬрд╝ рддрдХ рдкрд╣реБрдБрдЪ "рдЕрдиреБрдорддрд┐рдпрд╛рдБ" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХреА рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд░рд╕реНрде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрд▓рдмреНрдз рджреВрд░рд╕реНрде рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

manifest.json
 { тАж "permissions": [ "https://ajax.googleapis.com/*" ], "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" } 

рдЕрдм рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ popup.html рдкрд░ рдкреНрд▓рдЧ рдЗрди рдХрд░реЗрдВ

popup.html
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="popup.js"></script> 

рднрдВрдбрд╛рд░рдг


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

manifest.json
 { ... "permissions": [ тАж "storage" ] ... } 

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

popup.html
 <div id="container"> <div id="today_date">Date</div> <table class="table"> <tr> <td></td> <td></td> <td></td> </tr> <tr> <td><input type="text" id="new_date" value="" class="input_date" /></td> <td><input type="text" id="new_time" value="" class="input_date" /></td> <td><input type="text" id="new_task" value="" class="input_task" /></td> </tr> </table> <ul></ul> </div> 

рдФрд░ рддреБрд░рдВрдд #today_date рдмреНрд▓реЙрдХ рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдкреНрд░рджрд░реНрд╢рди рдЬреЛрдбрд╝реЗрдВред

popup.js
 $(function(){ var today = new Date(); $("#today_date").html(today.getDate()+"."+(parseInt(today.getMonth())+1)+"." + today.getFullYear()); } 

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЖрдк "+" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рднрдВрдбрд╛рд░рдг рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ - рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд░рдгреАред

popup.js
 var storage = chrome.storage.sync; var tasks = new Array(); $(function(){ тАж $("#add_task").click(function(){ var new_task = new Object(); new_task.date = validateField($("#new_date").val(), "date"); new_task.time = validateField($("#new_time").val(), "time"); new_task.task = $("#new_task").val(); if(!new_task.task || !new_task.date || !new_task.task){ return false; } tasks[tasks.length] = new_task; storage.set({ tasks:tasks }); }); }); 

рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рджрд┐рдирд╛рдВрдХ рдХреЛ dyyyy рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдордп hh: mm рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдХрд┐ рдШрдЯрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рд╡рд░реНрдг рд╣реИрдВред

popup.js
 var validateField = function(val, type){ if(type == "date"){ var date = val.split("."); var year = new Date(); year = year.getFullYear(); if(date.length == 3 && parseInt(date[0]) == date[0] && date[0] <= 31 && parseInt(date[1]) == date[1] && date[1] <= 12 && parseInt(date[2]) == date[2] && date[2] >= year){return val;} } else if(type == "time"){ var time = val.split(":"); if(time.length == 2 && parseInt(time[0]) == time[0] && time[0] < 24 && parseInt(time[1]) == time[1] && time[1] < 60){return val;} } else if(type == "task" && type.length >= 3){ return val; } return null; } 

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

popup.js
 $(function(){ тАж var now_hours = today.getHours() < 10 ? "0" + today.getHours() : today.getHours(); var now_minutes = today.getMinutes() < 10 ? "0" + today.getMinutes() : today.getMinutes(); var now_time = now_hours + "" + now_minutes; storage.get("tasks",function(items){ if(items.tasks){ tasks = items.tasks; var today_tasks = getTodayTasks(tasks); if(today_tasks.length >0){ for(var i in today_tasks){ var this_time = today_tasks[i].time.replace(":", ""); var add = this_time > now_time ? "" : ' class="done"'; var add_html = '<li'+add+'><strong>'+today_tasks[i].time+'</strong> '+today_tasks[i].task+'</li>'; $("ul").append(add_html); } } } }); тАж }); 

GetTodayTasks () рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рд╕реЗ рдЖрдЬ рдХреА рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдИрд╡реЗрдВрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

popup.js
 var getTodayTasks = function(tasks){ var today_tasks = new Array(); var today = new Date(); var today_date = today.getDate()+"."+(today.getMonth() + 1 )+ "." + today.getFullYear(); for(var i in tasks){ if(tasks[i].date == today_date){ today_tasks[today_tasks.length] = tasks[i]; } } if(today_tasks.length > 0){ today_tasks = sortTasks(today_tasks); } return today_tasks; } 

рд╕реЙрд░реНрдЯрдЯреИрд╕реНрдХ () рд╕рдордп рдХреЗ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИред

popup.js
 var sortTasks = function(tasks){ if(tasks.length > 0){ var swapped = true; while (swapped) { swapped = false; for (var i=0; i < tasks.length-1; i++) { var this_time = tasks[i].time.replace(":", ""); var next_time = tasks[i+1].time.replace(":", ""); if (this_time > next_time) { var temp = tasks[i]; tasks[i] = tasks[i+1]; tasks[i+1] = temp; swapped = true; } } } } return tasks; } 

рдиреЛрдЯрд┐рд╕


рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдкреЙрдкрдЕрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рдпрд╣ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдИ рдЬрд╛рдПрдВрдЧреА; рдпрджрд┐ рдпрд╣ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡реЗ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рднреА рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рдЗрдирдкреБрдЯ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧреА рдХрд┐ рдШрдЯрдирд╛ рд╕реЗ рдХрд┐рддрдиреА рджреЗрд░ рдкрд╣рд▓реЗ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реА рдШрдЯрдирд╛ 19:00 рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕ рдкрд╛рда рдЗрдирдкреБрдЯ рдореЗрдВ 5 рд╣реЛрдВрдЧреЗ, рддреЛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ 18:55 рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рдЗрди рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ popup.html

popup.html
 <div> <input type="checkbox" id="show_notifications" checked="checked" /> <input type="text" id="when_to_notify" class="input_date" value="" />   </div> 



рдЕрдм рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЬрдм рдЖрдк рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреА, рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди "show_notifications" рдХреБрдХреА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╛рда рдЗрдирдкреБрдЯ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдХрд░, рдирдП рдореВрд▓реНрдп рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдЧрд░ рдпрд╣ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдФрд░ 120 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдХреБрдХреА рдореЗрдВ рдирдпрд╛ рдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ "When_to_notify"ред

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдХреАрдЬрд╝ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░ рдЬрд╛рдПрдБ .json рдФрд░ "рдЕрдиреБрдорддрд┐" рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

manifest.json
 { ... "permissions": [ тАж тАЬcookiesтАЭ ] ... } 

рдЕрдм рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Popup.js рдкрд░ рдЬрд╛рдПрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрдирдкреБрдЯ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЪреЗрдХрдмреЙрдХреНрд╕ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рд╕рдордп 0. рд╣реИред рдЬрдм рдЖрдк рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдХреА рдорд╛рди "show_notifications" рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдкрд╛рда рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди рдмрджрд▓рддреЗ рд╕рдордп, рдХреБрдХреА рдорд╛рди "When_to_notify" рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

popup.js
 $(function(){ setCheckbox(); setWhenToNotify(getCookie("when_to_notify")); ... $("#show_notifications").click(function(){ setCookie("show_notifications", document.getElementById("show_notifications").checked); }); $("#when_to_notify").change(function(){ setWhenToNotify($(this).val()); }); }); 

рдЖрдЗрдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪрд▓рд┐рдП рдХреБрдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ w3schools.com рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

popup.js
 var setCookie = function(c_name,value,exdays){ /* *  http://www.w3schools.com/js/js_cookies.asp */ var exdate=new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); document.cookie=c_name + "=" + c_value; } var getCookie = function(c_name){  . /* *  http://www.w3schools.com/js/js_cookies.asp */ var i,x,y,ARRcookies=document.cookie.split(";"); for (i=0;i<ARRcookies.length;i++){ x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); x=x.replace(/^\s+|\s+$/g,""); if (x==c_name){ return unescape(y); } } } 

рдЪрд▓рд┐рдП рд╕реЗрдЯрдЪреЗрдХрдмреЙрдХреНрд╕ () рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рдпрд╣ "show_notifications" рдХреБрдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп "рд╕рд╣реА" (рдкрд╛рда, рд╣рд╛рдБ) рд╣реИ, рддреЛ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХрд╛ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╣реА рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЧрд▓рддред

popup.js
 var setCheckbox = function(){ var val = getCookie("show_notifications") document.getElementById('show_notifications').checked = ((val == "true") ? true : false); } 

рдЕрдм setWhenToNotify () рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдирдпрд╛ рдЯрд╛рдЗрдорд░ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдорд╛рди рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдФрд░ 120 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреБрдХреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡реИрд░рд┐рдПрдмрд▓ рдиреЗ рдЗрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдХреБрдХреАрдЬрд╝ рд╕реЗ "value_to_notify" рдкрд┐рдЫрд▓рд╛ рдорд╛рди рдЗрдирдкреБрдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

popup.js
 var setWhenToNotify = function(val){ var last_val = getCookie("when_to_notify"); last_val = last_val != "undefined"? last_val: 0; val = (parseInt(val)==val && val <=120) ? val : last_val; setCookie("when_to_notify", val); $("#when_to_notify").val(val); } 

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

manifest.json
 { ... "permissions": [ тАж "notifications" ], "background": { "scripts": ["background.js"] }, "web_accessible_resources": ["icon_small.png"], ... } 

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

background.js
 var storage = chrome.storage.sync; var tasks = new Array(); setInterval(function() { storage.get("tasks",function(items){ if(items.tasks && getCookie("show_notifications") == "true"){ tasks = getTodayTasks(items.tasks); if(window.webkitNotifications){ var texts = getNextTask(tasks); for(var i in texts){ show(texts[i]); } } } }); }, 60000); 

рдлрд╝рдВрдХреНрд╢рдВрд╕ getTodayTasks () рдФрд░ getCookie () popup.js рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред рддреЛ рдЪрд▓реЛ getNextTask () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдлрд╝рдВрдХреНрд╢рди рд╡рд░реНрддрдорд╛рди рд╕рдордп рдФрд░ рдШрдЯрдирд╛ рдХреЗ рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреБрдХреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ "рдЬрдм_рддреЛ рдиреЛрдЯ", рддреЛ рдШрдЯрдирд╛ рдХреЗ рд╕рдордп рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдЕрдЧрд▓реЗ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдЧрд▓реА рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

background.js
 var getNextTask = function(tasks){ var now = new Date(); now = now.getTime(); var next = new Array(); for(var i in tasks){ var date = tasks[i].date.split("."); var time = tasks[i].time.split(":"); var task_date = new Date(parseInt(date[2]), parseInt(date[1]-1), parseInt(date[0]), parseInt(time[0]), parseInt(time[1]), 0, 0); task_date = task_date.getTime(); var delta = Math.round((task_date-now)/60000); if(delta == getCookie("when_to_notify")){ next[next.length] = tasks[i].time + " - " + tasks[i].task; } } return next; } 

рд╢реЛ () рдлрд╝рдВрдХреНрд╢рди рджрд┐рдП рдЧрдП рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

background.js
 var show = function(text) { var notification = window.webkitNotifications.createNotification('icon_small.png',' ', text); notification.show(); } 

рдЗрд╕ рд▓рд┐рдкрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:


рдЕрдВрддрднрд╛рд╖рдг


рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Google рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдЖрдпреЛрдЬрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИред
рдЕрдм рдХреНрд░реЛрдо рд╡реЗрдм рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝реЗрдВред рдЖрдкрдХреЛ .zip рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рд╕реНрдЯреЛрд░ рдкрд░ рдЬрд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд░реЛрдо рдореЗрдВ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди" рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ "рд╡реЗрдм рд╕реНрдЯреНрд░реЛрд░" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдЕрдм рдореЗрдиреВ рдкрд░ рдЬрд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╖рдЯреНрднреБрдЬ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рдбреЗрд╡рд▓рдкрд░ рдбреИрд╢рдмреЛрд░реНрдб" рдЦреЛрд▓реЗрдВ

рдмрдбрд╝реЗ рдмрдЯрди "рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, "рдЕрдкрд▓реЛрдб" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

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

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


рдкреНрд░рдХрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рд╡рд┐рд╡рд░рдг: developer.chrome.com/trunk/extensions/manifest.html
рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░реЗрдВ: developer.chrome.com/trunk/extensions/storage.html
рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА: developer.chrome.com/extensions/notifications.html
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реНрд░реЛрдд: github.com/bozheville/orginaizer_extension

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


All Articles