integration/js/model.js
changeset 23 c9dc489913af
parent 12 8a8b6097d382
child 25 eea45f9b124b
equal deleted inserted replaced
22:bd904d592881 23:c9dc489913af
     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 
   980     var _res = new Model.List(this);
   987     var _res = new Model.List(this);
   981     _res.addIds(ns._(this.elements).keys());
   988     _res.addIds(ns._(this.elements).keys());
   982     return _res;
   989     return _res;
   983 }
   990 }
   984 
   991 
   985 ns.Model = Model;
   992 return Model;
   986 
   993 
   987 })(IriSP);
   994 })(IriSP);