Skip to content

Instantly share code, notes, and snippets.

@richardhealy
Created May 8, 2018 13:38
Show Gist options
  • Save richardhealy/4e8fb9948b67d6b14a4b6d845af64966 to your computer and use it in GitHub Desktop.
Save richardhealy/4e8fb9948b67d6b14a4b6d845af64966 to your computer and use it in GitHub Desktop.
Get lines numbers of text spanning across a set of paragraphs using JavaScript / JQuery Get lines numbers of text spanning across a set of paragraphs using JavaScript / JQuery // source https://jsbin.com/wadinuw
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Get lines numbers of text spanning across a set of paragraphs using JavaScript / JQuery">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Get lines numbers of text spanning across a set of paragraphs using JavaScript / JQuery</title>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed leo ultricies, rutrum ex id, tristique ex. Maecenas non diam vitae nisi egestas lacinia. Donec orci ex, scelerisque et enim finibus, dignissim ornare nisi. Curabitur accumsan magna ut interdum vehicula. Quisque eu feugiat leo. Nam imperdiet bibendum gravida. Proin tempus id urna et vulputate.</p>
<p>Integer semper elit in dui porta, vitae pulvinar turpis facilisis. Suspendisse pretium tristique erat, eu consequat odio dignissim a. Cras placerat, dui sit amet tristique aliquet, enim velit feugiat arcu, ac ullamcorper diam diam nec ante. Integer facilisis elit vel eros congue accumsan quis vel nisl. Cras aliquet enim neque. Suspendisse urna odio, cursus at eros a, ultrices dapibus diam. Quisque convallis sollicitudin risus ac volutpat. Nulla facilisi. Vivamus elementum libero a quam eleifend interdum vitae tristique nisl. Vivamus gravida massa ex, ac mattis ligula malesuada quis. Vivamus fermentum diam eu ante dignissim eleifend. Nullam posuere in sapien in ornare.</p>
<p>Ut sit amet dictum nisi. Pellentesque non pulvinar elit. Suspendisse eleifend arcu vitae nisi ultricies, ut sollicitudin eros interdum. Vivamus at quam viverra, posuere elit quis, semper sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus non velit eu nunc ullamcorper tristique eget ac ipsum. Vestibulum molestie faucibus luctus. Praesent egestas ipsum congue ipsum ullamcorper, et imperdiet purus cursus. Sed varius ante vitae sapien malesuada, vitae mollis sapien bibendum. Suspendisse nisl lectus, blandit a lectus vel, ornare cursus ex. Aliquam a fringilla magna, non imperdiet ex. Nullam sit amet blandit orci. Nunc sed leo consequat orci tincidunt porttitor vel ut orci. Vivamus volutpat ante eget tellus euismod finibus. Vestibulum sed maximus ex.</p>
<script id="jsbin-javascript">
'use strict';
function replacePunctuation(s) {
return s.replace(/[^\w\s]/g, '');
}
var count = 0;
var rep = replacePunctuation;
var searchEndWords = [];
var passages = [{ 'start': 'Lorem ipsum', 'end': 'finibus,', 'lnStart': null, 'lnEnd': null }, { 'start': 'Proin tempus', 'end': 'facilisis.', 'lnStart': null, 'lnEnd': null }, { 'start': 'Suspendisse pretium', 'end': 'volutpat', 'lnStart': null, 'lnEnd': null }, { 'start': 'Nulla facilisi.', 'end': 'luctus', 'lnStart': null, 'lnEnd': null }];
$("p").each(function (index) {
var $el = $(this);
var words = $el.text().split(' ');
var previousHeight = 0;
$el.text('');
for (var j = 0; j < words.length; j++) {
$el.text($el.text() + ' ' + words[j]);
if (previousHeight < $el.height()) {
count++;
previousHeight = $el.height();
}
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = passages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var passage = _step.value;
var startWords = passage.start.split(' ');
if (searchEndWords.includes(rep(words[j])) && rep(passage.end) === rep(words[j])) {
passage.lnEnd = count;
}
if (rep(words[j]) === rep(startWords[0]) && rep(words[j + 1]) === rep(startWords[1])) {
searchEndWords.push(rep(passage.end));
passage.lnStart = count;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
});
console.log(passages);
</script>
<script id="jsbin-source-javascript" type="text/javascript">function replacePunctuation(s) {
return s.replace(/[^\w\s]/g, '');
}
let count = 0;
let rep = replacePunctuation;
let searchEndWords = [];
let passages = [
{'start':'Lorem ipsum', 'end':'finibus,', 'lnStart':null,'lnEnd':null},
{'start':'Proin tempus', 'end':'facilisis.', 'lnStart':null,'lnEnd':null},
{'start':'Suspendisse pretium', 'end':'volutpat', 'lnStart':null,'lnEnd':null},
{'start':'Nulla facilisi.', 'end':'luctus', 'lnStart':null,'lnEnd':null}
];
$("p").each(function(index) {
let $el = $(this);
let words = $el.text().split(' ');
let previousHeight = 0;
$el.text('');
for(let j = 0; j < words.length; j++) {
$el.text($el.text() + ' ' + words[j]);
if(previousHeight < $el.height()) {
count++;
previousHeight = $el.height();
}
for(let passage of passages) {
let startWords = passage.start.split(' ');
if(
searchEndWords.includes(rep(words[j])) &&
rep(passage.end) === rep(words[j])
) {
passage.lnEnd = count;
}
if(
rep(words[j]) === rep(startWords[0]) &&
rep(words[j+1]) === rep(startWords[1])
) {
searchEndWords.push(rep(passage.end));
passage.lnStart = count;
}
}
}
});
console.log(passages);</script></body>
</html>
'use strict';
function replacePunctuation(s) {
return s.replace(/[^\w\s]/g, '');
}
var count = 0;
var rep = replacePunctuation;
var searchEndWords = [];
var passages = [{ 'start': 'Lorem ipsum', 'end': 'finibus,', 'lnStart': null, 'lnEnd': null }, { 'start': 'Proin tempus', 'end': 'facilisis.', 'lnStart': null, 'lnEnd': null }, { 'start': 'Suspendisse pretium', 'end': 'volutpat', 'lnStart': null, 'lnEnd': null }, { 'start': 'Nulla facilisi.', 'end': 'luctus', 'lnStart': null, 'lnEnd': null }];
$("p").each(function (index) {
var $el = $(this);
var words = $el.text().split(' ');
var previousHeight = 0;
$el.text('');
for (var j = 0; j < words.length; j++) {
$el.text($el.text() + ' ' + words[j]);
if (previousHeight < $el.height()) {
count++;
previousHeight = $el.height();
}
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = passages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var passage = _step.value;
var startWords = passage.start.split(' ');
if (searchEndWords.includes(rep(words[j])) && rep(passage.end) === rep(words[j])) {
passage.lnEnd = count;
}
if (rep(words[j]) === rep(startWords[0]) && rep(words[j + 1]) === rep(startWords[1])) {
searchEndWords.push(rep(passage.end));
passage.lnStart = count;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
});
console.log(passages);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment