27 while (_n.length < 4) { |
27 while (_n.length < 4) { |
28 _n = '0' + _n |
28 _n = '0' + _n |
29 } |
29 } |
30 return "autoid-" + this._ID_BASE + '-' + _n; |
30 return "autoid-" + this._ID_BASE + '-' + _n; |
31 }, |
31 }, |
32 regexpFromTextOrArray : function(_textOrArray, _testOnly) { |
32 regexpFromTextOrArray : function(_textOrArray, _testOnly, _iexact) { |
33 var _testOnly = _testOnly || false; |
33 var _testOnly = _testOnly || false, |
|
34 _iexact = _iexact || false; |
34 function escapeText(_text) { |
35 function escapeText(_text) { |
35 return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1'); |
36 return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1'); |
36 } |
37 } |
37 var _source = |
38 var _source = |
38 typeof _textOrArray === "string" |
39 typeof _textOrArray === "string" |
39 ? escapeText(_textOrArray) |
40 ? escapeText(_textOrArray) |
40 : ns._(_textOrArray).map(escapeText).join("|"); |
41 : ns._(_textOrArray).map(escapeText).join("|"), |
41 if (_testOnly) { |
42 _flags = 'im'; |
42 return new RegExp( _source, 'im'); |
43 if (!_testOnly) { |
43 } else { |
44 _source = '(' + _source + ')'; |
44 return new RegExp( '(' + _source + ')', 'gim'); |
45 _flags += 'g'; |
45 } |
46 } |
|
47 if (_iexact) { |
|
48 _source = '^' + _source + '$'; |
|
49 } |
|
50 return new RegExp( _source, _flags); |
46 }, |
51 }, |
47 isoToDate : function(_str) { |
52 isoToDate : function(_str) { |
48 // http://delete.me.uk/2005/03/iso8601.html |
53 // http://delete.me.uk/2005/03/iso8601.html |
49 var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; |
54 var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; |
50 var d = _str.match(new RegExp(regexp)); |
55 var d = _str.match(new RegExp(regexp)); |
164 } |
169 } |
165 |
170 |
166 /* Title and Description are basic information for (almost) all element types, |
171 /* Title and Description are basic information for (almost) all element types, |
167 * here we can search by these criteria |
172 * here we can search by these criteria |
168 */ |
173 */ |
169 Model.List.prototype.searchByTitle = function(_text) { |
174 Model.List.prototype.searchByTitle = function(_text, _iexact) { |
170 var _rgxp = Model.regexpFromTextOrArray(_text, true); |
175 var _iexact = _iexact || false, |
|
176 _rgxp = Model.regexpFromTextOrArray(_text, true); |
171 return this.filter(function(_element) { |
177 return this.filter(function(_element) { |
172 return _rgxp.test(_element.title); |
178 return _rgxp.test(_element.title); |
173 }); |
179 }); |
174 } |
180 } |
175 |
181 |
176 Model.List.prototype.searchByDescription = function(_text) { |
182 Model.List.prototype.searchByDescription = function(_text, _iexact) { |
177 var _rgxp = Model.regexpFromTextOrArray(_text, true); |
183 var _iexact = _iexact || false, |
|
184 _rgxp = Model.regexpFromTextOrArray(_text, true); |
178 return this.filter(function(_element) { |
185 return this.filter(function(_element) { |
179 return _rgxp.test(_element.description); |
186 return _rgxp.test(_element.description); |
180 }); |
187 }); |
181 } |
188 } |
182 |
189 |
183 Model.List.prototype.searchByTextFields = function(_text) { |
190 Model.List.prototype.searchByTextFields = function(_text, _iexact) { |
184 var _rgxp = Model.regexpFromTextOrArray(_text, true); |
191 var _iexact = _iexact || false, |
|
192 _rgxp = Model.regexpFromTextOrArray(_text, true); |
185 return this.filter(function(_element) { |
193 return this.filter(function(_element) { |
186 return _rgxp.test(_element.description) || _rgxp.test(_element.title); |
194 return _rgxp.test(_element.description) || _rgxp.test(_element.title); |
187 }); |
195 }); |
188 } |
196 } |
189 |
197 |