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