discourse/vendor/assets/javascripts/break_string.js

55 lines
1.2 KiB
JavaScript

(function() {
var BREAK = "<wbr>&#8203;";
/**
A class for intelligently breaking up strings at logical points.
**/
var BreakString = function(string) {
this.string = string;
};
BreakString.prototype.break = function(hint) {
var hintPos = [],
str = this.string;
if(hint) {
hint = hint.toLowerCase().split(/\s+/).reverse();
var current = 0;
while(hint.length > 0) {
var word = hint.pop();
if(word !== str.substr(current, word.length).toLowerCase()) {
break;
}
current += word.length;
hintPos.push(current);
}
}
var rval = [],
prev = str[0];
rval.push(prev);
for (var i=1;i<str.length;i++) {
var cur = str[i];
if(prev.match(/[^0-9]/) && cur.match(/[0-9]/)){
rval.push(BREAK);
} else if(i>1 && prev.match(/[A-Z]/) && cur.match(/[a-z]/)){
rval.pop();
rval.push(BREAK);
rval.push(prev);
} else if(prev.match(/[^A-Za-z0-9]/) && cur.match(/[a-zA-Z0-9]/)){
rval.push(BREAK);
} else if(hintPos.indexOf(i) > -1) {
rval.push(BREAK);
}
rval.push(cur);
prev = cur;
}
return rval.join("");
};
this.BreakString = BreakString;
}).call(this);