--- a/web/res/metadataplayer/LdtPlayer-core.js Thu Jan 24 18:55:58 2013 +0100
+++ b/web/res/metadataplayer/LdtPlayer-core.js Fri Jan 25 18:49:33 2013 +0100
@@ -246,6 +246,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, '<span class="Ldt-Highlight">', '</span>');
+ }
+
+ addToList(/(https?:\/\/)?\w+\.\w+\S+/gm, function(matches) {
+ return '<a href="' + (matches[1] ? '' : 'http://') + matches[0] + '" target="_blank">'
+ }, '</a>');
+ addToList(/@([\d\w]{1,15})/gm, function(matches) {
+ return '<a href="http://twitter.com/' + matches[1] + '" target="_blank">'
+ }, '</a>');
+ addToList(/\*[^*]+\*/gm, '<b>', '</b>');
+ addToList(/[\n\r]+/gm, '', '<br />');
+
+ 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);
@@ -272,11 +345,12 @@
var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
var charsub = [
- [ 'a', 'á', 'à', 'â', 'ä' ],
- [ 'c', 'ç' ],
- [ 'e', 'é', 'è', 'ê', 'ë' ],
- [ 'i', 'í', 'ì', 'î', 'ï' ],
- [ 'o', 'ó', 'ò', 'ô', 'ö' ]
+ '[aáàâä]',
+ '[cç]',
+ '[eéèêë]',
+ '[iíìîï]',
+ '[oóòôö]',
+ '[uùûü]'
];
var removeChars = [
@@ -324,10 +398,7 @@
remrx = new RegExp(remsrc,"gm"),
txt = _text.toLowerCase().replace(remrx,"")
res = [],
- charsrc = ns._(charsub).map(function(c) {
- return "(" + c.join("|") + ")";
- }),
- charsrx = ns._(charsrc).map(function(c) {
+ charsrx = ns._(charsub).map(function(c) {
return new RegExp(c);
}),
src = "";
@@ -336,7 +407,7 @@
src += remsrc + "*";
}
var l = txt[j];
- ns._(charsrc).each(function(v, k) {
+ ns._(charsub).each(function(v, k) {
l = l.replace(charsrx[k], v);
});
src += l;
@@ -476,7 +547,7 @@
*/
Model.List.prototype.searchByTitle = function(_text, _iexact) {
var _iexact = _iexact || false,
- _rgxp = Model.regexpFromTextOrArray(_text, true);
+ _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
return this.filter(function(_element) {
return _rgxp.test(_element.title);
});
@@ -484,7 +555,7 @@
Model.List.prototype.searchByDescription = function(_text, _iexact) {
var _iexact = _iexact || false,
- _rgxp = Model.regexpFromTextOrArray(_text, true);
+ _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
return this.filter(function(_element) {
return _rgxp.test(_element.description);
});
@@ -492,7 +563,7 @@
Model.List.prototype.searchByTextFields = function(_text, _iexact) {
var _iexact = _iexact || false,
- _rgxp = Model.regexpFromTextOrArray(_text, true);
+ _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
return this.filter(function(_element) {
var keywords = (_element.keywords || _element.getTagTexts() || []).join(", ");
return _rgxp.test(_element.description) || _rgxp.test(_element.title) || _rgxp.test(keywords);