src/js/model.js
changeset 973 638fe8541a2e
parent 972 58e2db2e9714
child 976 4b9ec475026a
equal deleted inserted replaced
972:58e2db2e9714 973:638fe8541a2e
    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