| <!DOCTYPE html> |
| <html> |
| <!-- |
| Copyright 2010 The Closure Library Authors. All Rights Reserved. |
| |
| Use of this source code is governed by the Apache License, Version 2.0. |
| See the COPYING file for details. |
| --> |
| <head> |
| <title>goog.ui.Container</title> |
| <script src="../base.js"></script> |
| <script> |
| goog.require('goog.array'); |
| goog.require('goog.debug.DivConsole'); |
| goog.require('goog.debug.LogManager'); |
| goog.require('goog.dom'); |
| goog.require('goog.events'); |
| goog.require('goog.events.EventType'); |
| goog.require('goog.log'); |
| goog.require('goog.object'); |
| goog.require('goog.style'); |
| goog.require('goog.ui.Container'); |
| goog.require('goog.ui.ContainerScroller'); |
| goog.require('goog.ui.Control'); |
| goog.require('goog.ui.CustomButton'); |
| goog.require('goog.ui.Menu'); |
| goog.require('goog.ui.MenuButton'); |
| goog.require('goog.ui.Option'); |
| goog.require('goog.ui.Select'); |
| goog.require('goog.ui.Separator'); |
| goog.require('goog.ui.ToggleButton'); |
| </script> |
| <link rel="stylesheet" href="css/demo.css"> |
| <link rel="stylesheet" href="../css/button.css"> |
| <link rel="stylesheet" href="../css/menubutton.css"> |
| <style> |
| /* Demo styles for goog.ui.Control. */ |
| .goog-control { |
| position: relative; |
| margin: 2px; |
| border: 2px solid #036; |
| padding: 2px; |
| font: normal 9pt "Trebuchet MS", Tahoma, Arial, sans-serif; |
| color: #036; |
| background-color:#69c; |
| cursor: pointer; |
| outline: none !important; |
| } |
| |
| .goog-control-disabled { |
| border-color: #888; |
| color: #888; |
| background-color: #ccc; |
| } |
| |
| .goog-control-hover { |
| border-color: #369; |
| color: #369; |
| background-color: #9cf; |
| } |
| |
| .goog-control-active, |
| .goog-control-selected, |
| .goog-control-checked { |
| border-color: #9cf; |
| color: #9cf; |
| background-color: #369; |
| } |
| |
| .goog-control-focused { |
| border-color: orange; |
| } |
| |
| /* Demo styles for goog.ui.Container */ |
| .goog-container { |
| position: relative; |
| margin: 0; |
| border: 0; |
| padding: 0; |
| background-color: #eee; |
| outline: none !important; |
| zoom: 1; /* The container element must have layout on IE. */ |
| } |
| |
| .goog-container-vertical { |
| width: 25ex; |
| border: 1px solid #888; |
| } |
| |
| .goog-container-horizontal { |
| border-bottom: 1px solid #d5d5d5; |
| background: #fafafa url(../images/toolbar-bg.png) repeat-x bottom left; |
| } |
| |
| /* Additional demo styles. */ |
| |
| .goog-month .goog-menu-button-caption { |
| width: 18ex; |
| } |
| |
| .goog-year .goog-menu-button-caption { |
| width: 6ex; |
| } |
| |
| .goog-edit-font .goog-menu-button-caption { |
| width: 15ex; |
| } |
| |
| .goog-edit-font-size .goog-menu-button-caption { |
| width: 5ex; |
| } |
| |
| .goog-edit-bold { |
| width: 14px; |
| background: url(../images/toolbar_icons.gif) no-repeat -1px; |
| } |
| |
| .goog-edit-italic { |
| width: 14px; |
| background: url(../images/toolbar_icons.gif) no-repeat -17px; |
| } |
| |
| .goog-edit-underline { |
| width: 14px; |
| background: url(../images/toolbar_icons.gif) no-repeat -33px; |
| } |
| |
| #tb4_highlight_links span { |
| border: 1px solid #888; |
| cursor: pointer; |
| padding: 2px 4px; |
| } |
| </style> |
| </head> |
| <body> |
| <h2>goog.ui.Container</h2> |
| <p><b>goog.ui.Container</b> is a base class for menus and toolbars.</p> |
| <fieldset> |
| <legend>These containers were created programmatically:</legend> |
| <table border="0" cellpadding="8" cellspacing="0" width="100%"> |
| <tbody> |
| <tr valign="top"> |
| <td width="50%" id="vc"> |
| Vertical container example: |
| </td> |
| <td width="50%" id="hc"> |
| Horizontal container example: |
| </td> |
| </tr> |
| <tr valign="top"> |
| <td> |
| <label> |
| Show vertical container: |
| <input type="checkbox" id="show_vc" checked> |
| </label> |
| |
| <label> |
| Enable vertical container: |
| <input type="checkbox" id="enable_vc" checked> |
| </label> |
| <br> |
| <label> |
| Show Porthos: |
| <input type="checkbox" id="show_porthos" checked> |
| </label> |
| |
| <label> |
| Enable Porthos: |
| <input type="checkbox" id="enable_porthos"> |
| </label> |
| <br> |
| <label> |
| Enable transition events: |
| <input type="checkbox" id="enable_vc_events" checked> |
| </label> |
| </td> |
| <td> |
| <label> |
| Show horizontal container: |
| <input type="checkbox" id="show_hc" checked> |
| </label> |
| |
| <label> |
| Enable horizontal container: |
| <input type="checkbox" id="enable_hc" checked> |
| </label> |
| <br> |
| <label> |
| Show Doc: |
| <input type="checkbox" id="show_doc" checked> |
| </label> |
| |
| <label> |
| Enable Doc: |
| <input type="checkbox" id="enable_doc"> |
| </label> |
| <br> |
| <label> |
| Enable transition events: |
| <input type="checkbox" id="enable_hc_events" checked> |
| </label> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <span class="hint">Try enabling and disabling containers with & without |
| state transition events, and compare performance!</span> |
| </fieldset> |
| <br> |
| <br> |
| <fieldset> |
| <legend>Non-focusable container with focusable controls:</legend> |
| In this case, the container itself isn't focusable, but each control is:<br> |
| <div id="nfc"></div> |
| </fieldset> |
| <br> |
| <br> |
| <fieldset> |
| <legend>Another horizontal container:</legend> |
| <label> |
| This is starting to look useful... Enable toolbar: |
| <input type="checkbox" id="enable_tb" checked> |
| </label> |
| <div id="tb"></div> |
| </fieldset> |
| <br> |
| <br> |
| <fieldset> |
| <legend>A decorated container:</legend> |
| <label> |
| It's much easier to decorate than to create programmatically... |
| Enable decorated toolbar: |
| <input type="checkbox" id="enable_tb2"> |
| </label> |
| <div id="tb2" class="goog-container-horizontal goog-container-disabled"> |
| <div id="month" class="goog-month goog-select"> |
| Select month |
| <div class="goog-menu"> |
| <div class="goog-option">January</div> |
| <div class="goog-option">February</div> |
| <div class="goog-option">March</div> |
| <div class="goog-option">April</div> |
| <div class="goog-option">May</div> |
| <div class="goog-option">June</div> |
| <div class="goog-option">July</div> |
| <div class="goog-option">August</div> |
| <div class="goog-option">September</div> |
| <div class="goog-option">October</div> |
| <div class="goog-option">November</div> |
| <div class="goog-option">December</div> |
| </div> |
| </div> |
| <div id="year" class="goog-year goog-select"> |
| Year |
| <div class="goog-menu"> |
| <div class="goog-option">2001</div> |
| <div class="goog-option">2002</div> |
| <div class="goog-option">2003</div> |
| <div class="goog-option">2004</div> |
| <div class="goog-option">2005</div> |
| <div class="goog-option">2006</div> |
| <div class="goog-option">2007</div> |
| <div class="goog-option">2008</div> |
| <div class="goog-option">2009</div> |
| <div class="goog-option">2010</div> |
| </div> |
| </div> |
| <div id="foo" class="goog-toggle-button"> |
| Toggle Button |
| </div> |
| <div id="bar" class="goog-toggle-button"> |
| <div><b><i>Fancy</i></b> Toggle Button</div> |
| </div> |
| <div id="fee" class="goog-toggle-button"> |
| Another Button |
| </div> |
| </div> |
| </fieldset> |
| <br> |
| <br> |
| <fieldset> |
| <legend>The same container, right-to-left:</legend> |
| <label> |
| Show right-to-left toolbar: |
| <input type="checkbox" id="show_tb3" checked> |
| </label> |
| <label> |
| Enable right-to-left toolbar: |
| <input type="checkbox" id="enable_tb3"> |
| </label> |
| <div id="tb3" class="goog-container-horizontal goog-container-disabled" |
| dir="rtl"> |
| <div class="goog-month goog-select"> |
| Select month |
| <div class="goog-menu" dir="rtl"> |
| <div class="goog-option">January</div> |
| <div class="goog-option">February</div> |
| <div class="goog-option">March</div> |
| <div class="goog-option">April</div> |
| <div class="goog-option">May</div> |
| <div class="goog-option">June</div> |
| <div class="goog-option">July</div> |
| <div class="goog-option">August</div> |
| <div class="goog-option">September</div> |
| <div class="goog-option">October</div> |
| <div class="goog-option">November</div> |
| <div class="goog-option">December</div> |
| </div> |
| </div> |
| <div class="goog-year goog-select" dir="rtl"> |
| Year |
| <div class="goog-menu"> |
| <div class="goog-option">2001</div> |
| <div class="goog-option">2002</div> |
| <div class="goog-option">2003</div> |
| <div class="goog-option">2004</div> |
| <div class="goog-option">2005</div> |
| <div class="goog-option">2006</div> |
| <div class="goog-option">2007</div> |
| <div class="goog-option">2008</div> |
| <div class="goog-option">2009</div> |
| <div class="goog-option">2010</div> |
| </div> |
| </div> |
| <div class="goog-toggle-button"> |
| Toggle Button |
| </div> |
| <div class="goog-toggle-button"> |
| <div><b><i>Fancy</i></b> Toggle Button</div> |
| </div> |
| <div class="goog-toggle-button"> |
| Another Button |
| </div> |
| </div> |
| </fieldset> |
| <br> |
| <br> |
| <fieldset> |
| <legend>A scrolling container:</legend> |
| <label> |
| This container scrolls so that the highlighted item is visible. |
| Here's a mix of block items and inline block items, which both work. |
| </label> |
| <p> |
| Put focus in the text box and use the arrow keys: |
| <input id="tb4_key_target"> |
| </p> |
| <p> |
| Or quick jump to item: |
| <span id="tb4_highlight_links"> |
| <span>0</span> <span>1</span> <span>2</span> <span>3</span> |
| <span>4</span> <span>5</span> <span>6</span> <span>7</span> |
| <span>8</span> <span>9</span> <span>10</span> <span>11</span> |
| <span>12</span> <span>13</span> <span>14</span> <span>15</span> |
| </span> |
| </p> |
| <div id="tb4" class="goog-container-vertical" |
| style="height: 100px; overflow-y: scroll"> |
| <div class="goog-month goog-menuitem">menuitem 0</div> |
| <div class="goog-month goog-menuitem">menuitem 1</div> |
| <div class="goog-month goog-menuitem">menuitem 2</div> |
| <div class="goog-month goog-menuitem">menuitem 3</div> |
| <div class="goog-month goog-toggle-button">tog 4</div> |
| <div class="goog-month goog-toggle-button">tog 5</div> |
| <div class="goog-month goog-toggle-button">tog 6</div> |
| <div class="goog-month goog-toggle-button">toggley 7</div> |
| <div class="goog-month goog-toggle-button">toggley 8</div> |
| <div class="goog-month goog-toggle-button">toggley 9</div> |
| <div class="goog-month goog-toggle-button">toggley 10</div> |
| <div class="goog-month goog-toggle-button">toggley 11</div> |
| <div class="goog-month goog-toggle-button">toggley 12</div> |
| <div class="goog-month goog-toggle-button">toggley 13</div> |
| <div class="goog-month goog-menuitem">menuitem 14</div> |
| <div class="goog-month goog-menuitem">menuitem 15</div> |
| </div> |
| </fieldset> |
| <br> |
| <br> |
| <!-- Event log. --> |
| <fieldset class="goog-debug-panel"> |
| <legend>Event Log</legend> |
| <div id="log"></div> |
| </fieldset> |
| <div id="perf"></div> |
| <script> |
| var timer = goog.now(); |
| |
| // Set up a logger. |
| goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); |
| var logger = goog.log.getLogger('demo'); |
| var logconsole = new goog.debug.DivConsole(goog.dom.getElement('log')); |
| logconsole.setCapturing(true); |
| |
| var EVENTS = goog.object.getValues(goog.ui.Component.EventType); |
| goog.log.fine(logger, 'Listening for: ' + EVENTS.join(', ') + '.'); |
| |
| function logEvent(e) { |
| var source = |
| typeof e.target.getCaption == 'function' && e.target.getCaption() || |
| e.target.getId(); |
| goog.log.info(logger, '"' + source + '" dispatched: ' + e.type); |
| } |
| |
| // Programmatically create a vertical container. |
| var vc = new goog.ui.Container(); |
| vc.setId('Vertical Container'); |
| goog.array.forEach( |
| ['Athos', 'Porthos', 'Aramis', 'd\'Artagnan'], |
| function(item) { |
| var c = new goog.ui.Control(item); |
| c.setId(item); |
| // For demo purposes, have controls dispatch transition events. |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, true); |
| vc.addChild(c, true); |
| }); |
| vc.addChildAt(new goog.ui.Separator(), 3, true); |
| vc.getChild('Porthos').setEnabled(false); |
| vc.render(goog.dom.getElement('vc')); |
| goog.events.listen(vc, EVENTS, logEvent); |
| |
| // Hook up checkboxes. |
| goog.events.listen(goog.dom.getElement('show_vc'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| vc.setVisible(e.target.checked); |
| goog.log.info(logger, (e.target.checked ? 'Showed' : 'Hid') + |
| ' vertical container in ' + (goog.now() - t) + 'ms'); |
| }); |
| goog.events.listen(goog.dom.getElement('enable_vc'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| vc.setEnabled(e.target.checked); |
| // If the container as a whole is disabled, you can't enable/disable |
| // child controls. |
| goog.dom.getElement('enable_porthos').disabled = !vc.isEnabled(); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' vertical container in ' + (goog.now() - t) + 'ms'); |
| }); |
| goog.events.listen(goog.dom.getElement('show_porthos'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| vc.getChild('Porthos').setVisible(e.target.checked); |
| }); |
| goog.events.listen(goog.dom.getElement('enable_porthos'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| vc.getChild('Porthos').setEnabled(e.target.checked); |
| }); |
| goog.events.listen(goog.dom.getElement('enable_vc_events'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| vc.forEachChild(function(c) { |
| if (e.target.checked) { |
| // Enable all transition events. |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, true); |
| } else { |
| // Disable all transition events (except for HOVER, which is used |
| // by containers internally). |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, false); |
| c.setDispatchTransitionEvents(goog.ui.Component.State.HOVER, |
| true); |
| } |
| }); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' state transition events for this container\'s children'); |
| }); |
| |
| // Programmatically create a horizontal container. |
| var hc = new goog.ui.Container(goog.ui.Container.Orientation.HORIZONTAL); |
| hc.setId('Horizontal Container'); |
| |
| // Pre-render the container, just to do something different. |
| hc.render(goog.dom.getElement('hc')); |
| goog.array.forEach( |
| ['Happy', 'Sleepy', 'Doc', 'Bashful', 'Sneezy', 'Grumpy', 'Dopey'], |
| function(item) { |
| var c = new goog.ui.Control(item); |
| c.addClassName('goog-inline-block'); |
| c.setId(item); |
| // For demo purposes, have controls dispatch transition events. |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, true); |
| hc.addChild(c, true); |
| }); |
| hc.getChild('Doc').setEnabled(false); |
| goog.events.listen(hc, EVENTS, logEvent); |
| |
| // Hook up checkboxes. |
| goog.events.listen(goog.dom.getElement('show_hc'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| hc.setVisible(e.target.checked); |
| goog.log.info(logger, (e.target.checked ? 'Showed' : 'Hid') + |
| ' horizontal container in ' + (goog.now() - t) + 'ms'); |
| }); |
| goog.events.listen(goog.dom.getElement('enable_hc'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| hc.setEnabled(e.target.checked); |
| // If the container as a whole is disabled, you can't enable/disable |
| // child controls. |
| goog.dom.getElement('enable_doc').disabled = !hc.isEnabled(); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' horizontal container in ' + (goog.now() - t) + 'ms'); |
| }); |
| goog.events.listen(goog.dom.getElement('show_doc'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| hc.getChild('Doc').setVisible(e.target.checked); |
| }); |
| goog.events.listen(goog.dom.getElement('enable_doc'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| hc.getChild('Doc').setEnabled(e.target.checked); |
| }); |
| goog.events.listen(goog.dom.getElement('enable_hc_events'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| hc.forEachChild(function(c) { |
| if (e.target.checked) { |
| // Enable all transition events. |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, true); |
| } else { |
| // Disable all transition events (except for HOVER, which is used |
| // by containers internally). |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, false); |
| c.setDispatchTransitionEvents(goog.ui.Component.State.HOVER, |
| true); |
| } |
| }); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' state transition events for this container\'s children'); |
| }); |
| |
| // Programmatically create a non-focusable container. |
| var nfc = new goog.ui.Container(goog.ui.Container.Orientation.HORIZONTAL); |
| nfc.setId('NonFocusableContainer'); |
| nfc.setFocusable(false); |
| goog.array.forEach(['Vicky', 'Cristina', 'Barcelona'], function(item) { |
| var c = new goog.ui.Control(item); |
| c.setId(item); |
| c.addClassName('goog-inline-block'); |
| // For demo purposes, have controls dispatch transition events. |
| c.setDispatchTransitionEvents(goog.ui.Component.State.ALL, true); |
| nfc.addChild(c, /* opt_render */ true); |
| // Since the container itself is non-focusable, we need to make each |
| // child individually focusable; this has to happen *after* addChild(). |
| // See e.g. bug http://b/1359754. |
| c.setSupportedState(goog.ui.Component.State.FOCUSED, true); |
| }); |
| nfc.render(goog.dom.getElement('nfc')); |
| goog.events.listen(nfc, EVENTS, logEvent); |
| |
| // Programmatically create a toolbar. |
| var tb = new goog.ui.Container(goog.ui.Container.Orientation.HORIZONTAL); |
| tb.setId('Toolbar'); |
| |
| // Programmatically create & add toolbar items. |
| var fontMenu = new goog.ui.Select('Select font'); |
| fontMenu.setId('Font Menu'); |
| fontMenu.setTooltip('Font'); |
| fontMenu.addItem(new goog.ui.Option('Arial', 'Arial, sans-serif')); |
| fontMenu.addItem(new goog.ui.Option('Courier', 'Courier, monospace')); |
| fontMenu.addItem(new goog.ui.Option('Times', 'Times, serif')); |
| fontMenu.addClassName('goog-edit-font'); |
| tb.addChild(fontMenu, true); |
| |
| var sizeMenu = new goog.ui.Select(null); |
| sizeMenu.setId('Font Size Menu'); |
| sizeMenu.setTooltip('Font Size'); |
| sizeMenu.addItem(new goog.ui.Option('8pt')); |
| sizeMenu.addItem(new goog.ui.Option('10pt')); |
| sizeMenu.addItem(new goog.ui.Option('12pt')); |
| sizeMenu.addItem(new goog.ui.Option('16pt')); |
| sizeMenu.setSelectedIndex(1); |
| sizeMenu.addClassName('goog-edit-font-size'); |
| tb.addChild(sizeMenu, true); |
| |
| var boldButton = new goog.ui.ToggleButton(goog.dom.createDom('div', |
| 'goog-edit-bold', '\u00A0')); |
| boldButton.setId('Bold Button'); |
| boldButton.setTooltip('Bold'); |
| tb.addChild(boldButton, true); |
| |
| var italicButton = new goog.ui.ToggleButton(goog.dom.createDom('div', |
| 'goog-edit-italic', '\u00A0')); |
| italicButton.setId('Italic Button'); |
| italicButton.setTooltip('Italic'); |
| tb.addChild(italicButton, true); |
| |
| var underlineButton = new goog.ui.ToggleButton(goog.dom.createDom('div', |
| 'goog-edit-underline', '\u00A0')); |
| underlineButton.setId('Underline Button'); |
| underlineButton.setTooltip('Underline'); |
| tb.addChild(underlineButton, true); |
| |
| tb.render(goog.dom.getElement('tb')); |
| goog.events.listen(tb, EVENTS, logEvent); |
| |
| // Hook up checkbox. |
| goog.events.listen(goog.dom.getElement('enable_tb'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| tb.setEnabled(e.target.checked); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' toolbar in ' + (goog.now() - t) + 'ms'); |
| }); |
| |
| var tb2 = new goog.ui.Container(); |
| tb2.decorate(goog.dom.getElement('tb2')); |
| goog.events.listen(tb2, EVENTS, logEvent); |
| |
| // Hook up checkbox. |
| goog.events.listen(goog.dom.getElement('enable_tb2'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| tb2.setEnabled(e.target.checked); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' toolbar in ' + (goog.now() - t) + 'ms'); |
| }); |
| |
| // BiDi container example: |
| var tb3 = new goog.ui.Container(); |
| tb3.decorate(goog.dom.getElement('tb3')); |
| goog.events.listen(tb3, EVENTS, logEvent); |
| |
| // Hook up checkboxes. |
| goog.events.listen(goog.dom.getElement('enable_tb3'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| tb3.setEnabled(e.target.checked); |
| goog.log.info(logger, (e.target.checked ? 'Enabled' : 'Disabled') + |
| ' toolbar in ' + (goog.now() - t) + 'ms'); |
| }); |
| goog.events.listen(goog.dom.getElement('show_tb3'), |
| goog.events.EventType.CLICK, |
| function(e) { |
| var t = goog.now(); |
| tb3.setVisible(e.target.checked); |
| goog.log.info(logger, (e.target.checked ? 'Showed' : 'Hid') + |
| ' content element in ' + (goog.now() - t) + 'ms'); |
| }); |
| |
| // Scrolling container. |
| var tb4 = new goog.ui.Container(); |
| tb4.decorate(goog.dom.getElement('tb4')); |
| tb4.setKeyEventTarget(goog.dom.getElement('tb4_key_target')); |
| tb4.setFocusable(true); |
| new goog.ui.ContainerScroller(tb4); |
| |
| goog.events.listen(goog.dom.getElement('tb4_highlight_links'), |
| goog.events.EventType.CLICK, |
| function(event) { |
| var index = parseInt(event.target.innerHTML, 10); |
| if (!isNaN(index)) { |
| tb4.getChildAt(index).setHighlighted(true); |
| } |
| }); |
| |
| goog.dom.setTextContent(goog.dom.getElement('perf'), |
| (goog.now() - timer) + 'ms'); |
| </script> |
| </body> |
| </html> |