15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) * @fileoverview Base class for dialogs that require saving preferences on
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *     confirm and resetting preference inputs on cancel.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('options', function() {
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  /** @const */ var Page = cr.ui.pageManager.Page;
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  /** @const */ var PageManager = cr.ui.pageManager.PageManager;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Base class for settings dialogs.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   * @param {string} name See Page constructor.
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   * @param {string} title See Page constructor.
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   * @param {string} pageDivName See Page constructor.
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   * @param {HTMLButtonElement} okButton The confirmation button element.
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   * @param {HTMLButtonElement} cancelButton The cancellation button element.
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   * @extends {cr.ui.pageManager.Page}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function SettingsDialog(name, title, pageDivName, okButton, cancelButton) {
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Page.call(this, name, title, pageDivName);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.okButton = okButton;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.cancelButton = cancelButton;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SettingsDialog.prototype = {
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __proto__: Page.prototype,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /** @override */
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    initializePage: function() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.okButton.onclick = this.handleConfirm.bind(this);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.cancelButton.onclick = this.handleCancel.bind(this);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Handles the confirm button by saving the dialog preferences.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    handleConfirm: function() {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      PageManager.closeOverlay();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var prefs = Preferences.getInstance();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var els = this.pageDiv.querySelectorAll('[dialog-pref]');
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < els.length; i++) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (els[i].pref)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs.commitPref(els[i].pref, els[i].metric);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Handles the cancel button by closing the overlay.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    handleCancel: function() {
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      PageManager.closeOverlay();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var prefs = Preferences.getInstance();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var els = this.pageDiv.querySelectorAll('[dialog-pref]');
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < els.length; i++) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (els[i].pref)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          prefs.rollbackPref(els[i].pref);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SettingsDialog: SettingsDialog
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
72