diff -r 7b65bf78873a -r eefd336335f9 src/js/utils.js --- a/src/js/utils.js Thu Jan 17 17:25:46 2013 +0100 +++ b/src/js/utils.js Fri Jan 25 18:16:29 2013 +0100 @@ -29,6 +29,79 @@ } } +IriSP.textFieldHtml = function(_text, _regexp, _extend) { + var list = [], + positions = [], + text = _text.replace(/(^\s+|\s+$)/g,''); + + function addToList(_rx, _startHtml, _endHtml) { + while(true) { + var result = _rx.exec(text); + if (!result) { + break; + } + var end = _rx.lastIndex, + start = result.index; + list.push({ + start: start, + end: end, + startHtml: (typeof _startHtml === "function" ? _startHtml(result) : _startHtml), + endHtml: (typeof _endHtml === "function" ? _endHtml(result) : _endHtml) + }); + positions.push(start); + positions.push(end); + } + } + + if (_regexp) { + addToList(_regexp, '', ''); + } + + addToList(/(https?:\/\/)?\w+\.\w+\S+/gm, function(matches) { + return '' + }, ''); + addToList(/@([\d\w]{1,15})/gm, function(matches) { + return '' + }, ''); + addToList(/\*[^*]+\*/gm, '', ''); + addToList(/[\n\r]+/gm, '', '
'); + + IriSP._(_extend).each(function(x) { + addToList.apply(null, x); + }); + + positions = IriSP._(positions) + .chain() + .uniq() + .sortBy(function(p) { return parseInt(p) }) + .value(); + + var res = "", lastIndex = 0; + + for (var i = 0; i < positions.length; i++) { + var pos = positions[i]; + res += text.substring(lastIndex, pos); + for (var j = list.length - 1; j >= 0; j--) { + var item = list[j]; + if (item.start < pos && item.end >= pos) { + res += item.endHtml; + } + } + for (var j = 0; j < list.length; j++) { + var item = list[j]; + if (item.start <= pos && item.end > pos) { + res += item.startHtml; + } + } + lastIndex = pos; + } + + res += text.substring(lastIndex); + + return res; + +} + IriSP.log = function() { if (typeof console !== "undefined" && typeof IriSP.logging !== "undefined" && IriSP.logging) { console.log.apply(console, arguments);