15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Displays a notification with the current time. Requires "notifications"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  permission in the manifest file (or calling
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  "Notification.requestPermission" beforehand).
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function show() {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var time = /(..)(:..)/.exec(new Date());     // The prettyprinted time.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var hour = time[1] % 12 || 12;               // The prettyprinted hour.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var period = time[1] < 12 ? 'a.m.' : 'p.m.'; // The period of the day.
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  new Notification(hour + time[2] + ' ' + period, {
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    icon: '48.png',
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    body: 'Time to make the toast.'
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  });
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Conditionally initialize the options.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (!localStorage.isInitialized) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage.isActivated = true;   // The display activation.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage.frequency = 1;        // The display frequency, in minutes.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage.isInitialized = true; // The option initialization.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for notification support.
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)if (window.Notification) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // While activated, show notifications at the display frequency.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (JSON.parse(localStorage.isActivated)) { show(); }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var interval = 0; // The display interval, in minutes.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setInterval(function() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interval++;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      JSON.parse(localStorage.isActivated) &&
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        localStorage.frequency <= interval
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      show();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      interval = 0;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, 60000);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
46