src/js/model.js
changeset 988 eefd336335f9
parent 987 7b65bf78873a
child 998 9521347ede1d
equal deleted inserted replaced
987:7b65bf78873a 988:eefd336335f9
    17     }
    17     }
    18     
    18     
    19     var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
    19     var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
    20     
    20     
    21     var charsub = [
    21     var charsub = [
    22         [ 'a', 'á', 'à', 'â', 'ä' ],
    22         '[aáàâä]',
    23         [ 'c', 'ç' ],
    23         '[cç]',
    24         [ 'e', 'é', 'è', 'ê', 'ë' ],
    24         '[eéèêë]',
    25         [ 'i', 'í', 'ì', 'î', 'ï' ],
    25         '[iíìîï]',
    26         [ 'o', 'ó', 'ò', 'ô', 'ö' ]
    26         '[oóòôö]',
       
    27         '[uùûü]'
    27     ];
    28     ];
    28     
    29     
    29     var removeChars = [
    30     var removeChars = [
    30         String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),
    31         String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),
    31         "{", "}", "(", ")", "[", "]", "【", "】", "、", "・", "‥", "。", "「", "」", "『", "』", "〜", ":", "!", "?", " ",
    32         "{", "}", "(", ")", "[", "]", "【", "】", "、", "・", "‥", "。", "「", "」", "『", "』", "〜", ":", "!", "?", " ",
    69     fullTextRegexps: function(_text) {
    70     fullTextRegexps: function(_text) {
    70         var remsrc = "[\\" + removeChars.join("\\") + "]",
    71         var remsrc = "[\\" + removeChars.join("\\") + "]",
    71             remrx = new RegExp(remsrc,"gm"),
    72             remrx = new RegExp(remsrc,"gm"),
    72             txt = _text.toLowerCase().replace(remrx,"")
    73             txt = _text.toLowerCase().replace(remrx,"")
    73             res = [],
    74             res = [],
    74             charsrc = ns._(charsub).map(function(c) {
    75             charsrx = ns._(charsub).map(function(c) {
    75                 return "(" + c.join("|") + ")";
       
    76             }),
       
    77             charsrx = ns._(charsrc).map(function(c) {
       
    78                 return new RegExp(c);
    76                 return new RegExp(c);
    79             }),
    77             }),
    80             src = "";
    78             src = "";
    81         for (var j = 0; j < txt.length; j++) {
    79         for (var j = 0; j < txt.length; j++) {
    82             if (j) {
    80             if (j) {
    83                 src += remsrc + "*";
    81                 src += remsrc + "*";
    84             }
    82             }
    85             var l = txt[j];
    83             var l = txt[j];
    86             ns._(charsrc).each(function(v, k) {
    84             ns._(charsub).each(function(v, k) {
    87                 l = l.replace(charsrx[k], v);
    85                 l = l.replace(charsrx[k], v);
    88             });
    86             });
    89             src += l;
    87             src += l;
    90         }
    88         }
    91         return "(" + src + ")";
    89         return "(" + src + ")";
   221 /* Title and Description are basic information for (almost) all element types,
   219 /* Title and Description are basic information for (almost) all element types,
   222  * here we can search by these criteria
   220  * here we can search by these criteria
   223  */
   221  */
   224 Model.List.prototype.searchByTitle = function(_text, _iexact) {
   222 Model.List.prototype.searchByTitle = function(_text, _iexact) {
   225     var _iexact = _iexact || false,
   223     var _iexact = _iexact || false,
   226         _rgxp = Model.regexpFromTextOrArray(_text, true);
   224         _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
   227     return this.filter(function(_element) {
   225     return this.filter(function(_element) {
   228         return _rgxp.test(_element.title);
   226         return _rgxp.test(_element.title);
   229     });
   227     });
   230 }
   228 }
   231 
   229 
   232 Model.List.prototype.searchByDescription = function(_text, _iexact) {
   230 Model.List.prototype.searchByDescription = function(_text, _iexact) {
   233     var _iexact = _iexact || false,
   231     var _iexact = _iexact || false,
   234         _rgxp = Model.regexpFromTextOrArray(_text, true);
   232         _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
   235     return this.filter(function(_element) {
   233     return this.filter(function(_element) {
   236         return _rgxp.test(_element.description);
   234         return _rgxp.test(_element.description);
   237     });
   235     });
   238 }
   236 }
   239 
   237 
   240 Model.List.prototype.searchByTextFields = function(_text, _iexact) {
   238 Model.List.prototype.searchByTextFields = function(_text, _iexact) {
   241     var _iexact = _iexact || false,
   239     var _iexact = _iexact || false,
   242         _rgxp =  Model.regexpFromTextOrArray(_text, true);
   240         _rgxp =  Model.regexpFromTextOrArray(_text, true, _iexact);
   243     return this.filter(function(_element) {
   241     return this.filter(function(_element) {
   244         var keywords = (_element.keywords || _element.getTagTexts() || []).join(", ");
   242         var keywords = (_element.keywords || _element.getTagTexts() || []).join(", ");
   245         return _rgxp.test(_element.description) || _rgxp.test(_element.title) || _rgxp.test(keywords);
   243         return _rgxp.test(_element.description) || _rgxp.test(_element.title) || _rgxp.test(keywords);
   246     });
   244     });
   247 }
   245 }
   817     this.on("remove", this._updateTimes);
   815     this.on("remove", this._updateTimes);
   818 }
   816 }
   819 
   817 
   820 Model.Mashup.prototype = new Model.Playable();
   818 Model.Mashup.prototype = new Model.Playable();
   821 
   819 
   822 Model.Mashup.prototype.checkLoaded = function() {
       
   823     var loaded = !!this.segments.length;
       
   824     this.getMedias().forEach(function(_m) {
       
   825         loaded = loaded && _m.loaded;
       
   826     });
       
   827     this.loaded = loaded;
       
   828     if (loaded) {
       
   829         this.trigger("loadedmetadata");
       
   830     }
       
   831 }
       
   832 
       
   833 Model.Mashup.prototype.updateTimes = function() {
   820 Model.Mashup.prototype.updateTimes = function() {
   834     var _time = 0;
   821     var _time = 0;
   835     this.segments.forEach(function(_segment) {
   822     this.segments.forEach(function(_segment) {
   836         _segment.setBegin(_time);
   823         _segment.setBegin(_time);
   837         _time = _segment.end;
   824         _time = _segment.end;
  1195 }
  1182 }
  1196 
  1183 
  1197 return Model;
  1184 return Model;
  1198 
  1185 
  1199 })(IriSP);
  1186 })(IriSP);
       
  1187 
       
  1188 /* END model.js */
       
  1189