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
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  "webkitNotifications.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.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var notification = window.webkitNotifications.createNotification(
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    '48.png',                      // The image.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hour + time[2] + ' ' + period, // The title.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Time to make the toast.'      // The body.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  );
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notification.show();
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Conditionally initialize the options.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (!localStorage.isInitialized) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage.isActivated = true;   // The display activation.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage.frequency = 1;        // The display frequency, in minutes.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage.isInitialized = true; // The option initialization.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for notification support.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (window.webkitNotifications) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // While activated, show notifications at the display frequency.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (JSON.parse(localStorage.isActivated)) { show(); }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var interval = 0; // The display interval, in minutes.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setInterval(function() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    interval++;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      JSON.parse(localStorage.isActivated) &&
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        localStorage.frequency <= interval
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      show();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      interval = 0;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, 60000);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
48