Make the undo/redo work for programmatic changes

Turns out one does not just modify textarea's value attribute: this
makes the element lose its edit history, breaking undo and redo
functionality. In order to keep the edit history, document.execCommand
can be used instead.

This CL also fixes a couple of minor issues with Tab handling for
multiline selection: if only the last character was selected on the
first line of selection, the first line was not indented. Also, the
selection is restored starting from the beginning of modified line
instead of trying to keep the beginning at the same character (which did
not work and is complicated to implement properly): while being less
accurate, it still allows indenting several times by doing selection
once and pressing Tab several times.

Change-Id: I96d9d4e2f104cfdd097ec11386f77cf4c3b32101
1 file changed
tree: db040159552cc6ec096aa81c8b6b2f8851b4bc16
  1. .github/
  2. bazel/
  3. build_overrides/
  4. buildtools/
  5. debian/
  6. docs/
  7. examples/
  8. gn/
  9. include/
  10. infra/
  11. protos/
  12. src/
  13. test/
  14. tools/
  15. ui/
  16. .clang-format
  17. .clang-tidy
  18. .gitattributes
  19. .gitignore
  20. .gn
  21. .style.yapf
  22. Android.bp
  23. Android.bp.extras
  24. BUILD
  25. BUILD.extras
  26. BUILD.gn
  27. CHANGELOG
  28. codereview.settings
  29. DIR_METADATA
  30. heapprofd.rc
  31. LICENSE
  32. meson.build
  33. METADATA
  34. MODULE_LICENSE_APACHE2
  35. OWNERS
  36. perfetto.rc
  37. PerfettoIntegrationTests.xml
  38. PRESUBMIT.py
  39. README.chromium
  40. README.md
  41. TEST_MAPPING
  42. traced_perf.rc
  43. WORKSPACE
README.md

Perfetto - System profiling, app tracing and trace analysis

Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.

See https://perfetto.dev/docs or the /docs/ directory for documentation.