Html程序  |  674行  |  21.02 KB

<html i18n-values="dir:textdirection;">
<head>
<title></title>
<style type="text/css">
body {
   
}
 body {
  
}

h4 {
  margin: 10px 0;
}

hr {
  background-color: #ddd;
  border: 0;
  height: 1px;
  margin: 5px 0;
  text-align: left;
  width: 100%;
}

form {
  -webkit-user-select: none;
}

.content-area {
  padding: 10px 15px;
}

.action-area {
  -webkit-box-align: center;
  -webkit-box-orient: horizontal;
  -webkit-box-pack: end;
  border-top: 1px solid rgba(188, 193, 208, .5);
  display: -webkit-box;
  padding: 12px;
}

.sync-header {
  font-size: 1.2em;
  font-weight: bold;
  margin-bottom: 10px;
}
.sync-select-customization {
  margin-top: 10px;
}

.action-area-link-container {
  -webkit-box-flex: 1;
}

#sync-passphrase-container {
  margin: 10px 0;
}

#sync-custom-passphrase {
  margin: 0 25px;
}

#sync-passphrase-message {
  color: gray;
}

.sync-custom-passphrase-input {
  margin: 10px 0;
}

#sync-select-container {
  margin-bottom: 10px;
}

#sync-instructions-container {
  margin-bottom: 30px;
}

#chooseDataTypesRadio {
  vertical-align: top;
}
#chooseDataTypes > div {
  display: inline-block;
}
#chooseDataTypesBody {
  margin: 10px 0;
}
#chooseDataTypesBody > div {
  -webkit-column-count: 3;
}

.sync-config-tab-contents-inactive {
  display: none;
}
.sync-config-tab-contents-active {
  display: block;
  margin: 10px 15px;
}
.sync-config-tabstrip {
  border-bottom: 1px solid gray;
  height: 25px;
  margin-bottom: 10px;
  padding-top: 10px;
  background-color: #DDD;
}
.sync-config-tab-active {
  background-color: white;
  border-top: 1px solid gray;
  border-left: 1px solid gray;
  border-right: 1px solid gray;
  border-top-left-radius: 5px 5px;
  border-top-right-radius: 5px 5px;
}

.sync-config-tab-active,
.sync-config-tab-inactive {
  float: left;
  height: 22px;
  padding: 3px 5px 0px;
  margin-left: 15px;
  min-width: 100px;
  text-align: center;
}
.sync-config-tab-active A,
.sync-config-tab-inactive A,
.sync-config-tab-active A:visited,
.sync-config-tab-inactive A:visited,
.sync-config-tab-active A:hover,
.sync-config-tab-inactive A:hover {
  color: black;
  text-decoration: none;
}

#sync-encryption-instructions {
  margin-bottom: 5px;
}

#sync-passphrase-warning {
  margin-bottom: 5px;
}

#encryption-tab-contents > .sync_item_show {
  margin-bottom: 5px;
}

.sync-item-show {
  display: block;
  white-space: nowrap;
}

.sync-item-show > label {
 overflow: hidden;
 white-space: nowrap;
 text-overflow: ellipsis;
 display: inline-block;
 width: 92%;
}

.sync-item-hide {
  display: none;
}
.sync-label-inactive {
  color: #9B9B9B;
}
.sync-label-active {
  color: #000000;
}
.sync-data-types {
  margin-left: 5px;
}
.sync-errors {
  margin-top: 5px;
}
.sync-error-show {
  display: block;
  width: 80%;
  margin-left: auto;
  margin-right: auto;
  text-align: center;
  padding: 1px 10px;
  background-color: #eeb939;
  border-radius: 4px;
  font-weight: bold;
}
.sync-error-hide {
  display: none;
}
.sync-footer {
  position: fixed;
  right: 0px;
  bottom: 0px;
  margin-right: 10px;
  margin-bottom: 10px;
}
.sync-section {
  background: #EEE;
  margin: 5px 0px 5px 19px;
  padding: 6px;
}

#explicit-message {
  margin-bottom: 5px;
}

#change-passphrase {
  margin: 10px 0;
  background: #EEE;
  padding: 8px;
}

#clear-data-button {
  margin-top: 10px;
}

html[dir='rtl'] .sync-footer {
  text-align: left;
  left: 0px;
  bottom: 0px;
  margin-left: 20px;
}

input[type='button'],
input[type='submit'] {
  min-width: 87px;
  min-height: 26px;
}
html[os='mac'] input[type='button'],
html[os='mac'] input[type='submit'] {
  font-size: 12pt;
}

</style>
<script src="chrome://resources/js/cr.js"></script>
<!-- TODO(jhawkins): util.js for $(). -->
<script>
  // Called once, when this html/js is loaded.
  function initializeConfigureDialog(args) {
    // Allow platform specific rules
    if (cr.isMac) {
      document.documentElement.setAttribute('os', 'mac');
    } else if (!cr.isWindows) {
      document.documentElement.setAttribute('os', 'linux');
    }

    var datatypeSelect = document.getElementById('sync-select-datatypes');
    datatypeSelect.onchange = function() {
      var syncAll = this.selectedIndex == 0;
      setCheckboxesToKeepEverythingSynced(syncAll);

      document.getElementById('chooseDataTypesBody').hidden = syncAll;
    };

    if (args) {
      setCheckboxesAndErrors(args);

      // Whether to display the 'Sync everything' confirmation screen or the
      // customize data types screen.
      // TODO(jhawkins): Rename |keepEverythingSynced| to |syncAllDataTypes|.
      var syncEverything = args['syncEverything'];
      var syncAllDataTypes = args['keepEverythingSynced'];
      var usePassphrase = args['usePassphrase'];
      if (syncEverything == false || syncAllDataTypes == false ||
          usePassphrase) {
        showCustomizePage();
      }
    }
  }

  function showCustomizePage() {
    document.getElementById('confirm-sync-preferences').hidden = true;
    document.getElementById('customize-sync-preferences').hidden = false;

    // If the user is shown the 'Customize' page, it's likely he intends to
    // change the data types.  Select the 'Choose data types' option in this
    // case.
    document.getElementById('sync-select-datatypes').selectedIndex = 1;
    document.getElementById('chooseDataTypesBody').hidden = false;
    setDataTypeCheckboxesEnabled(true);
  }

  function showSyncEverythingPage() {
    document.getElementById('confirm-sync-preferences').hidden = false;
    document.getElementById('customize-sync-preferences').hidden = true;

    // The default state is to sync everything and to not use a custom
    // passphrase.
    setCheckboxesToKeepEverythingSynced(true);
    document.getElementById("google-option").checked = true;
  }

  function setCheckboxesAndErrors(args) {
    setChooseDataTypesCheckboxes(args);
    setEncryptionCheckboxes(args);
    setErrorState(args);
  }

  function checkAllDataTypeCheckboxes() {
    var checkboxes = document.getElementsByName("dataTypeCheckbox");
    for (var i = 0; i < checkboxes.length; i++) {
      // Only check the visible ones (since there's no way to uncheck
      // the invisible ones).
      if (checkboxes[i].parentElement.className == "sync-item-show") {
        checkboxes[i].checked = true;
      }
    }
  }

  function setCheckboxesToKeepEverythingSynced(value) {
    setDataTypeCheckboxesEnabled(!value);
    if (value)
      checkAllDataTypeCheckboxes();
  }

  // Can be called multiple times.
  function setChooseDataTypesCheckboxes(args) {
    // If this frame is on top, the focus should be on it, so pressing enter
    // submits this form.
    if (args.iframeToShow == 'configure') {
      document.getElementById("okButton").focus();
    }

    var datatypeSelect = document.getElementById('sync-select-datatypes');
    datatypeSelect.selectedIndex = args.keepEverythingSynced ? 0 : 1;
    document.getElementById('chooseDataTypesBody').hidden =
        args.keepEverythingSynced;

    document.getElementById("bookmarksCheckbox").checked = args.syncBookmarks;
    document.getElementById("preferencesCheckbox").checked =
        args.syncPreferences;
    document.getElementById("themesCheckbox").checked = args.syncThemes;

    if (args.passwordsRegistered) {
      document.getElementById("passwordsCheckbox").checked = args.syncPasswords;
      document.getElementById("passwordsItem").className = "sync-item-show";
    } else {
      document.getElementById("passwordsItem").className = "sync-item-hide";
    }
    if (args.autofillRegistered) {
      document.getElementById("autofillCheckbox").checked = args.syncAutofill;
      document.getElementById("autofillItem").className = "sync-item-show";
    } else {
      document.getElementById("autofillItem").className = "sync-item-hide";
    }
    if (args.extensionsRegistered) {
      document.getElementById("extensionsCheckbox").checked =
          args.syncExtensions;
      document.getElementById("extensionsItem").className = "sync-item-show";
    } else {
      document.getElementById("extensionsItem").className = "sync-item-hide";
    }
    if (args.typedUrlsRegistered) {
      document.getElementById("typedUrlsCheckbox").checked = args.syncTypedUrls;
      document.getElementById("omniboxItem").className = "sync-item-show";
    } else {
      document.getElementById("omniboxItem").className = "sync-item-hide";
    }
    if (args.appsRegistered) {
      document.getElementById("appsCheckbox").checked =
          args.syncApps;
      document.getElementById("appsItem").className = "sync-item-show";
    } else {
      document.getElementById("appsItem").className = "sync-item-hide";
    }

    setCheckboxesToKeepEverythingSynced(args.keepEverythingSynced);
    if (args.sessionsRegistered) {
      document.getElementById("sessionsCheckbox").checked = args.syncSessions;
      document.getElementById("sessionsItem").className = "sync-item-show";
    } else {
      document.getElementById("sessionsItem").className = "sync-item-hide";
    }
  }

  function setEncryptionCheckboxes(args) {
    if (args["usePassphrase"]) {
      document.getElementById("explicit-option").checked = true;

      // The passphrase, once set, cannot be unset, but we show a reset link.
      document.getElementById("explicit-option").disabled = true;
      document.getElementById("google-option").disabled = true;
      document.getElementById("sync-custom-passphrase").hidden = true;
    } else {
      document.getElementById("google-option").checked = true;
    }
    switchToMode("");
  }

  function setErrorState(args) {
    if (!args.was_aborted)
      return;

    document.getElementById("aborted-text").className = "sync-error-show";
    document.getElementById("okButton").disabled = true;
    document.getElementById("keepEverythingSyncedRadio").disabled = true;
    document.getElementById("chooseDataTypesRadio").disabled = true;
  }

  function setDataTypeCheckboxesEnabled(enabled) {
    var checkboxes = document.getElementsByName("dataTypeCheckbox");
    var labels = document.getElementsByName("dataTypeLabel");
    for (var i = 0; i < checkboxes.length; i++) {
      checkboxes[i].disabled = !enabled;
      if (checkboxes[i].disabled) {
        labels[i].className = "sync-label-inactive";
      } else {
        labels[i].className = "sync-label-active";
      }
    }
  }

  // Returns true if at least one data type is enabled and no data types are
  // checked.  (If all data type checkboxes are disabled, it's because "keep
  // everything synced" is checked.)
  function noDataTypesChecked() {
    var checkboxes = document.getElementsByName("dataTypeCheckbox");
    var atLeastOneChecked = false;
    var atLeastOneEnabled = false;
    for (var i = 0; i < checkboxes.length; i++) {
      if (!checkboxes[i].disabled &&
          checkboxes[i].parentElement.className == "sync-item-show") {
        atLeastOneEnabled = true;
        if (checkboxes[i].checked) {
          atLeastOneChecked = true;
        }
      }
    }
    return atLeastOneEnabled && !atLeastOneChecked;
  }

  function sendConfiguration() {
    // Trying to submit, so hide previous errors.
    document.getElementById("aborted-text").className = "sync-error-hide";
    document.getElementById("error-text").className = "sync-error-hide";

    if (noDataTypesChecked()) {
      document.getElementById("error-text").className = "sync-error-show";
      return;
    }

    var f = document.getElementById("chooseDataTypesForm");
    if (!checkPassphraseMatch()) {
      return false;
    }

    var syncAll =
        document.getElementById('sync-select-datatypes').selectedIndex == 0;

    // These values need to be kept in sync with where they are read in
    // SyncSetupFlow::GetDataTypeChoiceData().
    var result = JSON.stringify({
        "keepEverythingSynced": syncAll,
        "syncBookmarks": syncAll || f.bookmarksCheckbox.checked,
        "syncPreferences": syncAll || f.preferencesCheckbox.checked,
        "syncThemes": syncAll || f.themesCheckbox.checked,
        "syncPasswords": syncAll || f.passwordsCheckbox.checked,
        "syncAutofill": syncAll || f.autofillCheckbox.checked,
        "syncExtensions": syncAll || f.extensionsCheckbox.checked,
        "syncTypedUrls": syncAll || f.typedUrlsCheckbox.checked,
        "syncApps": syncAll || f.appsCheckbox.checked,
        "syncSessions": syncAll || f.sessionsCheckbox.checked,
        "usePassphrase": (getRadioCheckedValue() == 'explicit'),
        "passphrase": f.passphrase.value
    });
    chrome.send("Configure", [result]);
  }

  function switchToMode(mode) {
    if (mode == "google")
      document.getElementById("sync-custom-passphrase").hidden = true;
    else if (mode =="explicit")
      document.getElementById("sync-custom-passphrase").hidden = false;
  }

  function getRadioCheckedValue() {
    var f = document.getElementById("chooseDataTypesForm");
    for (var i = 0; i < f.option.length; ++i) {
      if (f.option[i].checked) {
        return f.option[i].value;
      }
    }
    return undefined;
  }

  function onRadioChange() {
    switchToMode(getRadioCheckedValue());
  }

  function checkPassphraseMatch() {
    var emptyError = document.getElementById("emptyerror");
    var mismatchError = document.getElementById("mismatcherror");
    emptyError.style.display = "none";
    mismatchError.style.display = "none";

    var f = document.getElementById("chooseDataTypesForm");
    if (getRadioCheckedValue() != "explicit" || f.option[0].disabled) {
      return true;
    }
    if (f.passphrase.value.length == 0) {
      emptyError.style.display = "block";
      return false;
    }

    var confirmPassphrase = document.getElementById("confirm-passphrase");
    var passphrase = document.getElementById("passphrase");
    if (confirmPassphrase.value != passphrase.value) {
      mismatchError.style.display = "block";
      return false;
    }
    return true;
  }

  function goToDashboard() {
    chrome.send("GoToDashboard", [""]);
    chrome.send("DialogClose", [""]);
  }

</script>
</head>
<body i18n-values=".style.fontFamily:fontfamily"
      onload="initializeConfigureDialog(JSON.parse(chrome.dialogArguments));">
<div id="confirm-sync-preferences">
  <div class="sync-header" i18n-content="confirmSyncPreferences"></div>
  <div id="sync-instructions-container" class="content-area">
    <span i18n-content="choosedatatypesinstructions"></span>
    <a i18n-values="href:encryptionhelpurl" target="_blank"
        i18n-content="learnmore"></a>
  </div>
  <div>
    <div class="action-area">
      <div class="action-area-link-container">
        <a id="customize-link" href="#" i18n-content="customizelinklabel"
            onclick="showCustomizePage();"></a>
      </div> 
      <input id="okButton" type="button" i18n-values="value:syncEverything"
          onclick="sendConfiguration();">
      <input id="cancelButton" type="button" i18n-values="value:cancel"
          onclick="chrome.send('DialogClose', [''])">
    </div>
  </div>
</div>
<div id="customize-sync-preferences" hidden>
  <form id="chooseDataTypesForm" onSubmit="sendConfiguration(); return false;">
    <div class="sync-header">Customize Sync Preferences</div>
    <hr>
    <div id="sync-configure-content" class="content-area">
      <div id="sync-select-container">
        <select id="sync-select-datatypes">
          <option i18n-content="keepeverythingsynced"></option>
          <option i18n-content="choosedatatypes" selected></option>
        </select>
        <div id="chooseDataTypesBody" hidden>
          <div>
            <!-- Apps -->
            <div class="sync-item-show" id="appsItem">
              <input id="appsCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="appsCheckboxLabel" name="dataTypeLabel"
                     for="appsCheckbox" i18n-content="apps"
                     i18n-values="title:apps"></label>
            </div>
            <!-- Autofill -->
            <div class="sync-item-show" id="autofillItem">
              <input id="autofillCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="autofillCheckboxLabel" name="dataTypeLabel"
                     for="autofillCheckbox" i18n-content="autofill"
                     i18n-values="title:autofill"></label>
            </div>
            <!-- Bookmarks -->
            <div class="sync-item-show" id="bookmarksItem">
              <input id="bookmarksCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="bookmarksCheckboxLabel" name="dataTypeLabel"
                     for="bookmarksCheckbox" i18n-content="bookmarks"
                     i18n-values="title:bookmarks"></label>
            </div>
            <!-- Extensions -->
            <div class="sync-item-show" id="extensionsItem">
              <input id="extensionsCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="extensionsCheckboxLabel" name="dataTypeLabel"
                     for="extensionsCheckbox" i18n-content="extensions"
                     i18n-values="title:extensions"></label>
            </div>
            <!-- Omnibox -->
            <div class="sync-item-show" id="omniboxItem">
              <input id="typedUrlsCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="typedUrlsCheckboxLabel" name="dataTypeLabel"
                     for="typedUrlsCheckbox" i18n-content="typedurls"
                     i18n-values="title:typedurls"></label>
            </div>
            <!-- Passwords -->
            <div class="sync-item-show" id="passwordsItem">
              <input id="passwordsCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="passwordsCheckboxLabel" name="dataTypeLabel"
                     for="passwordsCheckbox" i18n-content="passwords"
                     i18n-values="title:passwords"></label>
            </div>
            <!-- Preferences -->
            <div class="sync-item-show" id="preferencesItem">
              <input id="preferencesCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="preferencesCheckboxLabel" name="dataTypeLabel"
                     for="preferencesCheckbox" i18n-content="preferences"
                     i18n-values="title:preferences"></label>
            </div>
            <!-- Themes -->
            <div class="sync-item-show" id="themesItem">
              <input id="themesCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="themesCheckboxLabel" name="dataTypeLabel" for="themesCheckbox"
                     i18n-content="themes" i18n-values="title:themes"></label>
            </div>
            <!-- Sessions -->
            <div class="sync-item-show" id="sessionsItem">
              <input id="sessionsCheckbox" name="dataTypeCheckbox" type="checkbox">
              <label id="sessionsCheckboxLabel" name="dataTypeLabel"
                     for="sessionsCheckbox" i18n-content="foreignsessions"
                     il8n-values="title:sessions"></label>
            </div>
          </div>
        </div>
      </div>
      <div class="sync-errors">
        <span id="error-text" i18n-content="synczerodatatypeserror"
              class="sync-error-hide"></span>
        <span id="aborted-text" i18n-content="abortederror"
              class="sync-error-hide"></span>
      </div>
      <hr>
      <h4 i18n-content="passphraseSectionTitle"></h4>
      <div id="sync-passphrase-container">
        <div>
          <input id="google-option" name="option" type="radio" value="google"
              onchange="onRadioChange();">
          <label for="google-option" i18n-content="googleOption"></label>
        </div>
        <div>
          <input id="explicit-option" name="option" type="radio"
              value="explicit" onchange="onRadioChange();">
          <label for="explicit-option" i18n-content="explicitOption"></label>
          <a i18n-values="href:encryptionhelpurl" target="_blank"
              i18n-content="learnmore"></a>
        </div>
        <div id="sync-custom-passphrase" hidden>
          <div id="sync-passphrase-message">
            <span i18n-content="sectionExplicitMessagePrefix"></span>
            <a href="http://google.com/dashboard" target="_blank"
                i18n-content="sectionExplicitMessagePostfix"></a>
            <span>.</span>
          </div>
          <div class="sync-custom-passphrase-input">
            <input id="passphrase" type="password"
                i18n-values="placeholder:passphraseLabel">
          </div>
          <div class="sync-custom-passphrase-input">
            <input id="confirm-passphrase" type="password"
                i18n-values="placeholder:confirmLabel">
          </div>
          <div class="error" style="display:none"
              id="emptyerror" i18n-content="emptyErrorMessage"></div>
          <div class="error" style="display:none"
              id="mismatcherror" i18n-content="mismatchErrorMessage"></div>
        </div>
      </div>
      <div class="action-area">
        <div class="action-area-link-container">
          <a id="use-default-link" href="#" i18n-content="useDefaultSettings"
              onclick="showSyncEverythingPage();"></a>
        </div>
        <input id="okButton" type="submit" i18n-values="value:ok" />
        <input id="cancelButton" type="button" i18n-values="value:cancel"
               onclick='chrome.send("DialogClose", [""])' />
      </div>
    </div>
  </form>
</div>
</body>
</html>