src/js/model.js
branchnew-model
changeset 925 28efc97b5d78
parent 919 972099304059
child 930 165f236e42f2
equal deleted inserted replaced
924:64c2eaafe5e2 925:28efc97b5d78
    26         while (_n.length < 4) {
    26         while (_n.length < 4) {
    27             _n = '0' + _n
    27             _n = '0' + _n
    28         }
    28         }
    29         return "autoid-" + this._ID_BASE + '-' + _n;
    29         return "autoid-" + this._ID_BASE + '-' + _n;
    30     },
    30     },
    31     regexpFromTextOrArray : function(_textOrArray) {
    31     regexpFromTextOrArray : function(_textOrArray, _testOnly) {
       
    32         var _testOnly = _testOnly || false;
    32         function escapeText(_text) {
    33         function escapeText(_text) {
    33             return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
    34             return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
    34         }
    35         }
    35         return new RegExp( '('
    36         var _source = 
    36             + (
    37             typeof _textOrArray === "string"
    37                 typeof _textOrArray === "string"
    38             ? escapeText(_textOrArray)
    38                 ? escapeText(_textOrArray)
    39             : IriSP._(_textOrArray).map(escapeText).join("|");
    39                 : IriSP._(_textOrArray).map(escapeText).join("|")
    40         if (_testOnly) {
    40             )
    41             return new RegExp( _source, 'im');
    41             + ')',
    42         } else {
    42             'gim'
    43             return new RegExp( '(' + _source + ')', 'gim');
    43         );
    44         }
    44     },
    45     },
    45     isoToDate : function(_str) {
    46     isoToDate : function(_str) {
    46         // http://delete.me.uk/2005/03/iso8601.html
    47         // http://delete.me.uk/2005/03/iso8601.html
    47         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})))?)?)?)?";
    48         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})))?)?)?)?";
    48         var d = _str.match(new RegExp(regexp));
    49         var d = _str.match(new RegExp(regexp));
   166 
   167 
   167 /* Title and Description are basic information for (almost) all element types,
   168 /* Title and Description are basic information for (almost) all element types,
   168  * here we can search by these criteria
   169  * here we can search by these criteria
   169  */
   170  */
   170 IriSP.Model.List.prototype.searchByTitle = function(_text) {
   171 IriSP.Model.List.prototype.searchByTitle = function(_text) {
   171     var _rgxp = IriSP.Model.regexpFromTextOrArray(_text);
   172     var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
   172     return this.filter(function(_element) {
   173     return this.filter(function(_element) {
   173         return _rgxp.test(_element.title);
   174         return _rgxp.test(_element.title);
   174     });
   175     });
   175 }
   176 }
   176 
   177 
   177 IriSP.Model.List.prototype.searchByDescription = function(_text) {
   178 IriSP.Model.List.prototype.searchByDescription = function(_text) {
   178     var _rgxp = IriSP.Model.regexpFromTextOrArray(_text);
   179     var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
   179     return this.filter(function(_element) {
   180     return this.filter(function(_element) {
   180         return _rgxp.test(_element.description);
   181         return _rgxp.test(_element.description);
   181     });
   182     });
   182 }
   183 }
   183 
   184 
   184 IriSP.Model.List.prototype.searchByTextFields = function(_text) {
   185 IriSP.Model.List.prototype.searchByTextFields = function(_text) {
   185     var _rgxp =  IriSP.Model.regexpFromTextOrArray(_text);
   186     var _rgxp =  IriSP.Model.regexpFromTextOrArray(_text, true);
   186     return this.filter(function(_element) {
   187     return this.filter(function(_element) {
   187         return _rgxp.test(_element.description) || _rgxp.test(_element.title);
   188         return _rgxp.test(_element.description) || _rgxp.test(_element.title);
   188     });
   189     });
   189 }
   190 }
   190 
   191