/
tweet_transforms.js
42 lines (35 loc) · 1.33 KB
/
tweet_transforms.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var Transforms = {
transformingSpan: document.createElement("span"),
transformEntities: function(text) {
Transforms.transformingSpan.innerHTML = text.replace(/</g, '<').replace(/>/g, '>');
return Transforms.transformingSpan.textContent;
},
transformFactory: function(transformList) {
return function(oldText) {
var content = document.createElement("span");
do {
var bestTransform = null;
var transformIndex = oldText.length;
var bestLeft = oldText;
var bestRight = "";
for(var i = 0; i < transformList.length; ++i) {
var matchGroups = transformList[i].expression.exec(oldText);
if (matchGroups && matchGroups.index < transformIndex) {
transformIndex = matchGroups.index;
bestLeft = oldText.substring(0, matchGroups.index);
bestRight = oldText.substring(matchGroups.index + matchGroups[0].length);
bestTransform = transformList[i].replacement(matchGroups);
}
}
if (bestLeft.length !== 0) {
content.appendChild(document.createTextNode(Transforms.transformEntities(bestLeft)));
}
if (bestTransform !== null) {
content.appendChild(bestTransform);
}
oldText = bestRight;
} while (oldText !== "");
return content;
};
}
};