Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. (function () {
  2. 'use strict';
  3.  
  4. var text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at sapien ipsum. Integer ut sem condimentum, imperdiet turpis eget, pulvinar nisi. Suspendisse sodales, risus ac imperdiet ornare, ligula ex suscipit nisl, eu pharetra erat augue ac ipsum. Donec ut tortor quam. Sed vel velit commodo, elementum neque et, tincidunt eros. Morbi tempus elit feugiat orci pellentesque, sit amet sollicitudin tortor aliquam. Phasellus efficitur sem sit amet mi facilisis luctus. In maximus diam turpis, a eleifend metus blandit et. Proin enim massa, mattis sed semper quis, luctus sed sapien. Nulla euismod leo eget enim iaculis malesuada. Aenean sed iaculis massa. Donec ullamcorper nec nunc vel viverra. Sed tortor enim, fringilla vel urna ultricies, iaculis commodo erat. Sed iaculis pretium urna, non tristique libero facilisis in. Nulla luctus urna magna, quis rhoncus ex laoreet vel. Donec bibendum tellus quis egestas fermentum.';
  5.  
  6. var markups = [
  7. {start: 0, end: 5, color: 'red'},
  8. {start: 6, end: 11, color: 'green'},
  9. {start: 12, end: 17, color: 'blue'}
  10. ];
  11.  
  12. let slices = createSlicesFromText(text, markups);
  13.  
  14. console.log(JSON.stringify(slices, ' ', 4));
  15.  
  16. function createSlicesFromText(text, markups) {
  17. var slices = [{
  18. start: 0,
  19. end: text.length,
  20. text: text
  21. }];
  22. markups.forEach(function (markup) {
  23. slices = pushMarkupToSlices(slices, markup);
  24. });
  25. return slices;
  26. }
  27.  
  28. function pushMarkupToSlices(slices, markup) {
  29. var newSlices = [];
  30. slices.forEach(function (slice) {
  31. // overlapping markups are not allowed,
  32. // therefore we keep the original slice
  33. if (slice.color) {
  34. newSlices.push(slice);
  35. } else {
  36. var start = Math.max(slice.start, markup.start);
  37. var end = Math.min(slice.end, markup.end);
  38. if (end - start > 0) {
  39. // store the left remained of the original slice
  40. if (slice.start < start) {
  41. newSlices.push({
  42. start: slice.start,
  43. end: start,
  44. text: slice.text.slice(0, start - slice.start)
  45. });
  46. }
  47. // store the overlapping, colored slice
  48. newSlices.push({
  49. start: start,
  50. end: end,
  51. text: slice.text.slice(start - slice.start, end - slice.start),
  52. color: markup.color
  53. });
  54. // store the rigth remainder of the original slice
  55. if (slice.end > end) {
  56. newSlices.push({
  57. start: end,
  58. end: slice.end,
  59. text: slice.text.slice(end - slice.start, slice.end - slice.start)
  60. });
  61. }
  62. // store the original slice
  63. } else {
  64. newSlices.push(slice);
  65. }
  66. }
  67. });
  68. return newSlices;
  69. }
  70. }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement