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