src/js/serializers/JSONSerializer.js
author hamidouk
Mon, 09 Jan 2012 17:22:36 +0100
branchpopcorn-port
changeset 601 02b857c0c9f1
parent 595 29d86e6c61a6
child 610 7533dd920805
permissions -rw-r--r--
slight change
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
     1
/** @class This class implement a serializer for the JSON-Cinelab format
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
     2
    @params DataLoader a dataloader reference
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
     3
    @url the url from which to get our cinelab
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
     4
 */
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
     5
IriSP.JSONSerializer = function(DataLoader, url) {
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
     6
  IriSP.Serializer.call(this, DataLoader, url);
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
     7
};
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
     8
128
f3fec80dd31c renames and inheritance bug fixes.
hamidouk
parents: 108
diff changeset
     9
IriSP.JSONSerializer.prototype = new IriSP.Serializer();
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    10
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    11
/** serialize data */
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    12
IriSP.JSONSerializer.prototype.serialize = function(data) {
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    13
  return JSON.stringify(data);
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    14
};
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    15
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    16
/** deserialize data */
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    17
IriSP.JSONSerializer.prototype.deserialize = function(data) {
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    18
  return JSON.parse(data);
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    19
};
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    20
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    21
/** load JSON-cinelab data and also sort the annotations by start time
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    22
    @param callback function to call when the data is ready.
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    23
 */
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    24
IriSP.JSONSerializer.prototype.sync = function(callback) {
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    25
  /* we don't have to do much because jQuery handles json for us */
128
f3fec80dd31c renames and inheritance bug fixes.
hamidouk
parents: 108
diff changeset
    26
137
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    27
  var self = this;
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    28
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    29
  var fn = function(data) {      
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    30
      self._data = data;      
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    31
      // sort the data too     
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    32
      self._data["annotations"].sort(function(a, b) 
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    33
          { var a_begin = +a.begin;
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    34
            var b_begin = +b.begin;
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    35
            return a_begin - b_begin;
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    36
          });
137
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    37
     
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    38
      callback(data);      
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    39
  };
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    40
  
137
ef6c1252c459 clarified the closure code.
hamidouk
parents: 128
diff changeset
    41
  this._DataLoader.get(this._url, fn);
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    42
};
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    43
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    44
/** @return the metadata about the media being read FIXME: always return the first media. */
108
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    45
IriSP.JSONSerializer.prototype.currentMedia = function() {  
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    46
  return this._data.medias[0]; /* FIXME: don't hardcode it */
62da43e72e30 broke the serializers across multiple files. added a newline to the end of
hamidouk
parents:
diff changeset
    47
};
147
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
    48
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    49
/** searches for an annotation which matches title, description and keyword 
147
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
    50
   "" matches any field. 
395
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    51
   Note: it ignores tweets.
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
    52
   @return a list of matching ids.
147
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
    53
*/    
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
    54
IriSP.JSONSerializer.prototype.searchAnnotations = function(title, description, keyword) {
352
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    55
    /* we can have many types of annotations. We want search to only look for regular segments */
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    56
    /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    57
       null or undefined.
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    58
    */
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    59
    var view;
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    60
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    61
    if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    62
       view = this._data.views[0];
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    63
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    64
    var searchViewType = "";
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    65
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    66
    if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    67
            searchViewType = view.annotation_types[0];
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    68
    }
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
    69
395
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    70
    var filterfn = function(annotation) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    71
      if( searchViewType  != "" && 
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    72
          typeof(annotation.meta) !== "undefined" && 
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    73
          typeof(annotation.meta["id-ref"]) !== "undefined" &&
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    74
          annotation.meta["id-ref"] !== searchViewType) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    75
        return true; // don't pass
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    76
      } else {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    77
          return false;
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    78
      }
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    79
    };
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    80
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    81
    return this.searchAnnotationsFilter(title, description, keyword, filterfn);
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    82
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    83
};
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    84
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    85
/* only look for tweets */
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    86
IriSP.JSONSerializer.prototype.searchTweets = function(title, description, keyword) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    87
    /* we can have many types of annotations. We want search to only look for regular segments */
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    88
    /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    89
       null or undefined.
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    90
    */
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    91
    var view;
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    92
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    93
    if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    94
       view = this._data.views[0];
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    95
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    96
    var searchViewType = "";
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    97
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    98
    if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
    99
            searchViewType = view.annotation_types[0];
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   100
    }
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   101
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   102
    var filterfn = function(annotation) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   103
      if( searchViewType  != "" && 
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   104
          typeof(annotation.meta) !== "undefined" && 
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   105
          typeof(annotation.meta["id-ref"]) !== "undefined" &&
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   106
          annotation.meta["id-ref"] !== searchViewType) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   107
        return false; // pass
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   108
      } else {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   109
          return true;
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   110
      }
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   111
    };
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   112
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   113
    return this.searchAnnotationsFilter(title, description, keyword, filterfn);
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   114
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   115
};
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   116
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   117
/**
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   118
  search an annotation according to its title, description and keyword
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   119
  @param filter a function to filter the results with. Used to select between annotation types.
395
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   120
 */    
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   121
IriSP.JSONSerializer.prototype.searchAnnotationsFilter = function(title, description, keyword, filter) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   122
147
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   123
    var rTitle;
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   124
    var rDescription;
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   125
    var rKeyword;
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   126
    /* match anything if given the empty string */
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   127
    if (title == "")
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   128
      title = ".*";
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   129
    if (description == "")
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   130
      description = ".*";
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   131
    if (keyword == "")
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   132
      keyword = ".*";
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   133
    
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   134
    rTitle = new RegExp(title, "i");  
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   135
    rDescription = new RegExp(description, "i");  
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   136
    rKeyword = new RegExp(keyword, "i");  
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   137
    
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   138
    var ret_array = [];
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   139
    
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   140
    var i;
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   141
    for (i in this._data.annotations) {
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   142
      var annotation = this._data.annotations[i];
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   143
      
352
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
   144
      /* filter the annotations whose type is not the one we want */
395
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   145
      if (filter(annotation)) {
352
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
   146
          continue;
cc2cdecc5ce5 ignore tweets in search.
hamidouk
parents: 320
diff changeset
   147
      }
395
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   148
      
147
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   149
      if (rTitle.test(annotation.content.title) && 
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   150
          rDescription.test(annotation.content.description)) {
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   151
          /* FIXME : implement keyword support */
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   152
          ret_array.push(annotation);
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   153
      }
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   154
    }
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   155
    
955119f901b4 added a function to search annotations to the json serializer.
hamidouk
parents: 137
diff changeset
   156
    return ret_array;
149
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   157
};
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   158
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   159
/** breaks a string in words and searches each of these words. Returns an array
149
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   160
   of objects with the id of the annotation and its number of occurences.
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   161
   
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   162
   @param searchString a string of words.
149
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   163
   FIXME: optimize ? seems to be n^2 in the worst case.
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   164
*/
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   165
IriSP.JSONSerializer.prototype.searchOccurences = function(searchString) {
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   166
  var ret = { };
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   167
  var keywords = searchString.split(/\s+/);
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   168
  
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   169
  for (var i in keywords) {
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   170
    var keyword = keywords[i];
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   171
    
150
40cf046b7049 added a comment.
hamidouk
parents: 149
diff changeset
   172
    // search this keyword in descriptions and title
149
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   173
    var found_annotations = []
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   174
    found_annotations = found_annotations.concat(this.searchAnnotations(keyword, "", ""));
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   175
    found_annotations = found_annotations.concat(this.searchAnnotations("", keyword, ""));
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   176
    
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   177
    for (var j in found_annotations) {
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   178
      var current_annotation = found_annotations[j];
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   179
      
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   180
      if (!ret.hasOwnProperty(current_annotation.id)) {
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   181
        ret[current_annotation.id] = 1;
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   182
      } else {
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   183
        ret[current_annotation.id] += 1;
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   184
      }
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   185
      
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   186
    }
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   187
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   188
  };
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   189
  
a10198c95808 added a function to break a search string in words and count the number of
hamidouk
parents: 147
diff changeset
   190
  return ret;
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   191
};
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   192
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   193
/** breaks a string in words and searches each of these words. Returns an array
395
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   194
   of objects with the id of the annotation and its number of occurences.
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   195
   
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   196
   FIXME: optimize ? seems to be n^2 in the worst case.
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   197
*/
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   198
IriSP.JSONSerializer.prototype.searchTweetsOccurences = function(searchString) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   199
  var ret = { };
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   200
  var keywords = searchString.split(/\s+/);
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   201
  
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   202
  for (var i in keywords) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   203
    var keyword = keywords[i];
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   204
    
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   205
    // search this keyword in descriptions and title
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   206
    var found_annotations = []
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   207
    found_annotations = found_annotations.concat(this.searchTweets(keyword, "", ""));
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   208
    found_annotations = found_annotations.concat(this.searchTweets("", keyword, ""));
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   209
    
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   210
    for (var j in found_annotations) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   211
      var current_annotation = found_annotations[j];
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   212
      
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   213
      if (!ret.hasOwnProperty(current_annotation.id)) {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   214
        ret[current_annotation.id] = 1;
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   215
      } else {
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   216
        ret[current_annotation.id] += 1;
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   217
      }
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   218
      
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   219
    }
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   220
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   221
  };
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   222
  
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   223
  return ret;
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   224
};
5766e8238aaf search in twitter feed now works.
hamidouk
parents: 352
diff changeset
   225
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   226
/** returns all the annotations that are displayable at the moment 
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   227
   NB: only takes account the first type of annotations - ignores tweets 
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   228
   currentTime is in seconds.
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   229
   
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   230
   @param currentTime the time at which we search.
595
29d86e6c61a6 finished going through the widgets to add stricter line checking.
hamidouk
parents: 591
diff changeset
   231
   @param (optional) the if of the type of the annotations we want to get.
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   232
 */
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   233
595
29d86e6c61a6 finished going through the widgets to add stricter line checking.
hamidouk
parents: 591
diff changeset
   234
IriSP.JSONSerializer.prototype.currentAnnotations = function(currentTime, id) {
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   235
  var view;
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   236
  var currentTimeMs = 1000 * currentTime;
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   237
595
29d86e6c61a6 finished going through the widgets to add stricter line checking.
hamidouk
parents: 591
diff changeset
   238
  if (typeof(id) === "undefined") {
29d86e6c61a6 finished going through the widgets to add stricter line checking.
hamidouk
parents: 591
diff changeset
   239
      var legal_ids = this.getNonTweetIds();
601
02b857c0c9f1 slight change
hamidouk
parents: 595
diff changeset
   240
  } else {
595
29d86e6c61a6 finished going through the widgets to add stricter line checking.
hamidouk
parents: 591
diff changeset
   241
      legal_ids = [id];
29d86e6c61a6 finished going through the widgets to add stricter line checking.
hamidouk
parents: 591
diff changeset
   242
  }
536
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   243
  
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   244
  var ret_array = [];
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   245
  
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   246
  var i;
536
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   247
  
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   248
  for (i in this._data.annotations) {
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   249
    var annotation = this._data.annotations[i];
320
b693ba1a83be fixed bug in search method
hamidouk
parents: 317
diff changeset
   250
    
590
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   251
    if (IriSP.underscore.include(legal_ids, annotation.meta["id-ref"]) && 
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   252
        annotation.begin <= currentTimeMs &&
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   253
        annotation.end >= currentTimeMs)
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   254
          ret_array.push(annotation);
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   255
  }
590
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   256
 
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   257
  if (ret_array == []) {
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   258
    console.log("ret_array empty, ", legal_ids);
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   259
  }
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   260
  
317
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   261
  return ret_array;
a3492448fa9a begun the implementation of annotation search according to a timecode.
hamidouk
parents: 150
diff changeset
   262
};
513
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   263
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   264
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   265
/** returns a list of ids of tweet lines (aka: groups in cinelab) */
513
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   266
IriSP.JSONSerializer.prototype.getTweetIds = function() {
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   267
  if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   268
    return [];
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   269
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   270
  var tweetsId = [];
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   271
  
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   272
  /* first get the list containing the tweets */
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   273
  var tweets = IriSP.underscore.filter(this._data.lists, function(entry) { return entry.id.indexOf("tweet") !== -1 });
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   274
  
566
098929cd2d62 made the polemicwidget adjust its size automatically and fixed a couple edgecases.
hamidouk
parents: 536
diff changeset
   275
  if (tweets.length === 0)
098929cd2d62 made the polemicwidget adjust its size automatically and fixed a couple edgecases.
hamidouk
parents: 536
diff changeset
   276
    return [];
098929cd2d62 made the polemicwidget adjust its size automatically and fixed a couple edgecases.
hamidouk
parents: 536
diff changeset
   277
  
513
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   278
  // FIXME: collect tweets from multiple sources ?
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   279
  tweetsId = IriSP.underscore.pluck(tweets[0].items, "id-ref");
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   280
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   281
  return tweetsId;
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   282
};
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   283
528
a5894f09825a added docs.
hamidouk
parents: 513
diff changeset
   284
/** this function returns a list of lines which are not tweet lines */
513
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   285
IriSP.JSONSerializer.prototype.getNonTweetIds = function() {
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   286
  if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   287
    return [];
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   288
  
536
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   289
  /* complicated : for each list in this._data.lists, get the id-ref.
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   290
     flatten the returned array because pluck returns a string afterwards.
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   291
  */
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   292
  var ids = IriSP.underscore.flatten(IriSP.underscore.map(this._data.lists, function(entry) {                                                         
b7e545e35287 fixed an elusive "id-ref" bug in currentAnnotation
hamidouk
parents: 528
diff changeset
   293
                                                         return IriSP.underscore.pluck(entry.items, "id-ref"); }));
513
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   294
                                                         
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   295
  var illegal_values = this.getTweetIds();
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   296
  return IriSP.underscore.difference(ids, illegal_values);
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   297
  
4589b90fe1ad added a couple functions to distinguish between tweet ids and regular lines.
hamidouk
parents: 395
diff changeset
   298
};
590
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   299
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   300
/** return the id of the ligne de temps which contains name
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   301
    @param name of the ligne de temps
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   302
*/
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   303
IriSP.JSONSerializer.prototype.getId = function(name) {
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   304
  if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   305
    return;
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   306
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   307
  var e;
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   308
  /* first get the list containing the tweets */
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   309
  e = IriSP.underscore.find(this._data["annotation-types"], 
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   310
                                  function(entry) { return (entry["dc:title"].indexOf(name) !== -1) });
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   311
  
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   312
  if (typeof(e) === "undefined")
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   313
    return;
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   314
    
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   315
  var id = e.id;
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   316
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   317
  return id;
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   318
};
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   319
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   320
/** return the id of the ligne de temps named "Chapitrage" */
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   321
IriSP.JSONSerializer.prototype.getChapitrage = function() {
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   322
  return this.getId("Chapitrage");
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   323
};
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   324
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   325
/** return the id of the ligne de temps named "Tweets" */
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   326
IriSP.JSONSerializer.prototype.getTweets = function() {
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   327
  return this.getId("Tweets");
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   328
};
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   329
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   330
/** return the id of the ligne de temps named "Contributions" */
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   331
IriSP.JSONSerializer.prototype.getContributions = function() {
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   332
  return this.getId("Contributions");
495ea8d73bed added a couple function to return the ids of some lignes de temps.
hamidouk
parents: 566
diff changeset
   333
};