Html程序  |  367行  |  8.84 KB

<!DOCTYPE HTML>
<html i18n-values="dir:textdirection;">
<head>
<meta charset="utf-8">
<style>
body {
  margin: 10px;
  min-width: 47em;
}

a {
  color: blue;
  font-size: 103%;
}

div#header {
  margin-bottom: 1.05em;
  /* 67px is the height of the header's background image. */
  min-height: 67px;
  overflow: hidden;
  padding-bottom: 20px;
  padding-left: 0;
  padding-top: 20px;
  position: relative;
  box-sizing: border-box;
}

html[dir=rtl] #header {
  padding-right: 0;
}

#header h1 {
  background: url('../../app/theme/flags_section.png') 0px 20px no-repeat;
  display: inline;
  margin: 0;
  padding-bottom: 43px;
  padding-left: 75px;
  padding-top: 40px;
}

html[dir=rtl] #header h1 {
  background: url('../../app/theme/flags_section.png') right no-repeat;
  padding-right: 95px;
  padding-left: 0;
}

h1 {
  font-size: 156%;
  font-weight: bold;
  padding: 0;
  margin: 0;
}

#blurb-container {
  padding-bottom: 1.5em;
  font-size: 120%;
}

#blurb-warning {
  color: red;
  font-weight: bold;
}

div.content {
  font-size: 88%;
  margin-top: 5px;
}

.section-header {
  background: #ebeff9;
  border-top: 1px solid #b5c7de;
  font-size: 99%;
  padding-bottom: 2px;
  padding-left: 5px;
  padding-top: 3px;
  width: 100%;
}

html[dir=rtl] .section-header {
  padding-right: 5px;
  padding-left: 0;
}

.section-header > table tr td:first-child {
  width: 100%;
}

.section-header > table {
  width: 100%;
}

.section-header-title {
  font-weight: bold;
}

.vbox-container {
  display: -webkit-box;
  -webkit-box-orient: vertical;
}

.wbox {
  display: -webkit-box;
  -webkit-box-align: stretch;
  -webkit-box-flex: 1;
}

#top {
  padding-right: 5px;
}

html[dir=rtl] #top {
  padding-left: 5px;
  padding-right: 0;
}

/* Disabled experiments display grey text on a grey background.  The title,
   however, should remain completely legible. */
.experiment-disabled > td {
  background: #F0F0F0;
  color: #A0A0A0;
}

.experiment-disabled .experiment-name {
  color: #000;
}

.experiment {
  border-bottom: 1px solid #cdcdcd;
}

.experiment td {
  padding-bottom: 4px;
  padding-top: 5px;
}

/* Indent the text related to each experiment. */
.experiment-text {
  padding-left: 5px;
}

html[dir=rtl] .experiment-text {
  padding-right: 5px;
  padding-left: 0;
}

.experiment-name {
  font-weight: bold;
}

.no-experiments {
  margin: 6em 0 0;
  text-align: center;
  font-size: 1.2em;
}

/* Match the indentation of .experiment-text. */
.experiment-actions {
  padding-left: 5px;
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}

html[dir=rtl] .experiment-actions {
  padding-right: 5px;
  padding-left: 0;
}

div.needs-restart {
  padding-top: 10px;
  padding-left: 5px;
}

button {
  font-size: 104%;
}

</style>
<script>

/**
 * This variable structure is here to document the structure that the template
 * expects to correctly populate the page.
 */
var flagsExperimentsDataFormat = {
  'flagsExperiments': [
    {
      'internal_name': 'Experiment ID string',
      'name': 'Experiment Name',
      'description': 'description',
      /* enabled is only set if the experiment is single valued */
      'enabled': true,
      /* choices is only set if the experiment has multiple values */
      'choices': [
        {
          'internal_name': 'Experiment ID string',
          'description': 'description',
          'selected': true
        }
      ]
    }
  ],
  'needsRestart': false
};

/**
 * Takes the |flagsExperimentsData| input argument which represents data about
 * the currently available experiments and populates the html jstemplate
 * with that data. It expects an object structure like the above.
 * @param {Object} flagsExperimentsData Information about available experiments
 */
function renderTemplate(flagsExperimentsData) {
  // This is the javascript code that processes the template:
  var input = new JsEvalContext(flagsExperimentsData);
  var output = document.getElementById('flagsExperimentTemplate');
  jstProcess(input, output);
}

/**
 * Asks the C++ FlagsDOMHandler to get details about the available experiments
 * and return detailed data about the configuration. The FlagsDOMHandler
 * should reply to returnFlagsExperiments() (below).
 */
function requestFlagsExperimentsData() {
  chrome.send('requestFlagsExperiments', []);
}

/**
 * Asks the C++ FlagsDOMHandler to restart the browser (restoring tabs).
 */
function restartBrowser() {
  chrome.send('restartBrowser', []);
}

/**
 * Called by the WebUI to re-populate the page with data representing the
 * current state of installed experiments.
 */
function returnFlagsExperiments(flagsExperimentsData){
  var bodyContainer = document.getElementById('body-container');
  renderTemplate(flagsExperimentsData);
  bodyContainer.style.visibility = 'visible';
}

/**
 * Handles a 'enable' or 'disable' button getting clicked.
 */
function handleEnableExperiment(node, enable) {
  // Tell the C++ FlagsDOMHandler to enable/disable the experiment.
  chrome.send('enableFlagsExperiment', [String(node.internal_name),
                                       String(enable)]);
  requestFlagsExperimentsData();
}

/**
 * Invoked when the selection of a multi-value choice is changed to the
 * specified index.
 */
function handleSelectChoiceExperiment(node, index) {
  // Tell the C++ FlagsDOMHandler to enable the selected choice.
  chrome.send('enableFlagsExperiment',
              [String(node.internal_name) + "@" + index, "true"]);
  requestFlagsExperimentsData();
}

// Get data and have it displayed upon loading.
document.addEventListener('DOMContentLoaded', requestFlagsExperimentsData);

</script>
</head>
<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
<div id="body-container" style="visibility:hidden">

  <div id="header"><h1 i18n-content="flagsLongTitle">TITLE</h1></div>

  <div id="blurb-container">
    <span id="blurb-warning" i18n-content="flagsWarningHeader">WARNING</span>
    <span i18n-content="flagsBlurb">WARNING TEXT</span>
  </div>

  <div id="flagsExperimentTemplate">

    <div id="container" class="vbox-container">
    <div id="top" class="wbox">

      <div class="section-header">
        <table cellpadding="0" cellspacing="0"><tr valign="center">
          <td>
            <span class="section-header-title" i18n-content="flagsTableTitle"
              >TITLE</span>
          </td>
        </tr></table>
      </div>

    </div>
    </div>

    <div class="content">
      <div class="experiment-name no-experiments"
           jsdisplay="flagsExperiments.length === 0">
        <div i18n-content="flagsNoExperimentsAvailable"
          >NO_EXPERIMENTS_ARE_AVAILABLE</div>
      </div>

      <div jsdisplay="flagsExperiments.length > 0">
      <div class="experiment" jsselect="flagsExperiments">
        <table width="100%" cellpadding="2" cellspacing="0">
        <!-- TODO(mkwst): This doesn't work exactly as expected for multivalue
                          experiments.  See http://crbug.com/73730 -->
        <tr jsvalues="class:enabled ? 'experiment-enabled' : 'experiment-disabled'">
        <td valign="top">
          <div class="experiment-text">
            <div>
              <span class="experiment-name" dir="ltr"
                    jscontent="name">NAME</span>
              <div>
                <span dir="ltr" jsvalues=".innerHTML:description">
              </div>
              <div jsdisplay="choices && choices.length > 0">
                <select jsvalues=".internal_name:internal_name;.disabled:!enabled"
                        onchange="handleSelectChoiceExperiment(this, this.selectedIndex)">
                  <option jsvalues=".selected:selected"
                          jsselect="choices"
                          jscontent="description">NAME
                  </option>
                </select>
              </div>
            </div>
          </div>
          <div class="experiment-actions">
	    <!-- If enabled isn't set (i.e. in multi_type options),
		 then both jsdisplay tests fail, and we get no
		 rendering from this section. -->
            <span>
              <a
                jsvalues=".internal_name:internal_name"
                jsdisplay="enabled"
                onclick="handleEnableExperiment(this, false)"
                href="javascript:void(0);"
                i18n-content="disable"
                >DISABLE</a>
              <a
                jsvalues=".internal_name:internal_name"
                jsdisplay="!enabled"
                onclick="handleEnableExperiment(this, true)"
                href="javascript:void(0);"
                i18n-content="enable"
                >ENABLE</a>
            </span>
          </div>
        </td>
        </tr>
        </table>
      </div>
      </div>

      <div class="needs-restart" jsdisplay="needsRestart">
        <div i18n-content="flagsRestartNotice">NEEDS_RESTART</div>
        <button type="button"
                onclick="restartBrowser();"
                i18n-content="flagsRestartButton">RESTART</button>
      </div>
    </div>
  </div>
</div>
</body>
</html>