BookmarkManager: Fix 'new folder text field size changes on clicking it' issue.
[chromium-blink-merge.git] / chrome / browser / resources / supervised_user_internals.js
blobc3a5666af6dc4d0b5f22c3624e1c34ab02972042
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 cr.define('chrome.supervised_user_internals', function() {
6   'use strict';
8   function initialize() {
9     function submitURL(event) {
10       $('try-url-result').textContent = '';
11       chrome.send('tryURL', [$('try-url-input').value]);
12       event.preventDefault();
13     }
15     $('try-url').addEventListener('submit', submitURL);
17     // Make the prototype jscontent element disappear.
18     jstProcess({}, $('filtering-results-container'));
20     chrome.send('registerForEvents');
22     chrome.send('getBasicInfo');
23   }
25   function highlightIfChanged(node, oldVal, newVal) {
26     function clearHighlight() {
27       this.removeAttribute('highlighted');
28     }
30     var oldStr = oldVal.toString();
31     var newStr = newVal.toString();
32     if (oldStr != '' && oldStr != newStr) {
33       // Note the addListener function does not end up creating duplicate
34       // listeners.  There can be only one listener per event at a time.
35       // See https://developer.mozilla.org/en/DOM/element.addEventListener
36       node.addEventListener('webkitAnimationEnd', clearHighlight, false);
37       node.setAttribute('highlighted', '');
38     }
39   }
41   function receiveBasicInfo(info) {
42     jstProcess(new JsEvalContext(info), $('basic-info'));
44     // Hack: Schedule another refresh after a while.
45     // TODO(treib): Get rid of this once we're properly notified of all
46     // relevant changes.
47     setTimeout(function() { chrome.send('getBasicInfo'); }, 5000);
48   }
50   function receiveUserSettings(settings) {
51     if (settings === null) {
52       $('user-settings').classList.add('hidden');
53       return;
54     }
56     $('user-settings').classList.remove('hidden');
58     // The user settings are returned as an object, flatten them into a
59     // list of key/value pairs for easier consumption by the HTML template.
60     // This is not done recursively, values are passed as their JSON
61     // representation.
62     var kvpairs = Object.keys(settings).map(function(key) {
63       return {
64         key: key,
65         value: JSON.stringify(settings[key], null, 2)
66       };
67     });
69     jstProcess(new JsEvalContext({settings: kvpairs}), $('user-settings'));
70   }
72   function receiveTryURLResult(result) {
73     $('try-url-result').textContent = result;
74   }
76   /**
77    * Helper to determine if an element is scrolled to its bottom limit.
78    * @param {Element} elem element to check
79    * @return {boolean} true if the element is scrolled to the bottom
80    */
81   function isScrolledToBottom(elem) {
82     return elem.scrollHeight - elem.scrollTop == elem.clientHeight;
83   }
85   /**
86    * Helper to scroll an element to its bottom limit.
87    * @param {Element} elem element to be scrolled
88    */
89   function scrollToBottom(elem) {
90     elem.scrollTop = elem.scrollHeight - elem.clientHeight;
91   }
93   /** Container for accumulated filtering results. */
94   var filteringResults = [];
96   /**
97    * Callback for incoming filtering results.
98    * @param {Object} result The result.
99    */
100   function receiveFilteringResult(result) {
101     filteringResults.push(result);
103     var container = $('filtering-results-container');
105     // Scroll to the bottom if we were already at the bottom.  Otherwise, leave
106     // the scrollbar alone.
107     var shouldScrollDown = isScrolledToBottom(container);
109     jstProcess(new JsEvalContext({ results: filteringResults }), container);
111     if (shouldScrollDown)
112       scrollToBottom(container);
113   }
115   // Return an object with all of the exports.
116   return {
117     initialize: initialize,
118     highlightIfChanged: highlightIfChanged,
119     receiveBasicInfo: receiveBasicInfo,
120     receiveUserSettings: receiveUserSettings,
121     receiveTryURLResult: receiveTryURLResult,
122     receiveFilteringResult: receiveFilteringResult,
123   };
126 document.addEventListener('DOMContentLoaded',
127                           chrome.supervised_user_internals.initialize);