mirror of
https://github.com/discourse/discourse.git
synced 2025-09-05 08:59:27 +08:00
Extract breaking up a string into a separate file, include it in
embedded view.
This commit is contained in:
parent
db8f4ea58f
commit
e8ee490778
4 changed files with 73 additions and 46 deletions
54
vendor/assets/javascripts/break_string.js
vendored
Normal file
54
vendor/assets/javascripts/break_string.js
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
(function() {
|
||||
|
||||
var BREAK = "<wbr>​";
|
||||
|
||||
/**
|
||||
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);
|
Loading…
Add table
Add a link
Reference in a new issue