<html>
<style>
  /* Use a font with characters of fixed width to make it easier to test
     selection gestures precisely. */
  @font-face {
    font-family: 'Ahem';
    src: local('Ahem'),
      url('../../font/Ahem.ttf');
  }
  div, input {
    font-size: 15px;
    font-family: "Ahem";
  }
  /* Add space to separate the touch selection targets. */
  .padded {
    margin-bottom: 30px;
  }
</style>
<body>
<div>Dummy Padding Text</div>
<div id='textDiv' class='padded'>Some text we can select</div>

<div>Dummy Padding Text</div>
<input id='textfield' class='padded' type="text" value="Some editable text">

<div>Dummy Padding Text</div>
<input id='emptyTextfield' class='padded' type="text" value="">
</body>
<script>

function focus_textfield() {
  document.getElementById('textfield').focus();
  // Focusing the textfiled selects its text. Collapse selection to a cursor.
  window.getSelection().collapseToStart();
}

// Returns the top left point of an element, excluding border and padding.
function get_top_left(element) {
  var rect = element.getBoundingClientRect();
  var cs = getComputedStyle(element);
  var point = {
    x: rect.left + parseFloat(cs.borderLeft) + parseFloat(cs.paddingLeft),
    y: rect.top + parseFloat(cs.borderTop) + parseFloat(cs.paddingTop)
  };
  return JSON.stringify(point);
}

function get_top_left_of_text() {
  return get_top_left(document.getElementById('textDiv'));
}

function get_top_left_of_textfield() {
  return get_top_left(document.getElementById('textfield'));
}

function get_top_left_of_empty_textfield() {
  return get_top_left(document.getElementById('emptyTextfield'));
}

</script>

</html>
