summaryrefslogtreecommitdiff
path: root/skins/jason/reader.js
blob: 78e5e4d575fe14774e3cf0b10cb96926396c034a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * jason - Javascript based skin for xxv
 * Copyright(c) 2008-2012, anbr
 * 
 * http://projects.vdr-developer.org/projects/xxv
 *
 */

Ext.xxv.jsonReader = function(meta, recordType){
    meta = meta || {};
    Ext.xxv.jsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
Ext.extend(Ext.xxv.jsonReader, Ext.data.DataReader, {

    read : function(r){
        if(r.status != 200) {
            throw {message: "XXVReader.read: " + r.statusText };
        }
        var o = eval('('+r.responseText+')');
        if(!o || !o.data || typeof(o.data) != 'object') {
            if(o && o.data && typeof(o.data) == 'string') {
              throw {message: o.data};
            }
            throw {message: "XXVReader.read: Json object not found"};
        }
        return this.readRecords(o.data,o.param);
    },

    readRecords : function(o,p){

      var Record = this.recordType,
          f = Record.prototype.fields, fi = f.items, fl = f.length;
      var records = [];

      for (var i = 0; i < o.length; i++) {
        var n = o[i];
        var values = {};
        var id = n[0];
        for(var j = 0; j < fl; j++){
          f = fi[j];
          var v = n[j];
          values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue);
        }
        var record = new Record(values, id);
        record.json = n;
        records[i] = record;
      }
      var total = records.length;
      if(p && p.rows) {
        total = p.rows;
      }
      if(this.meta && p) {
        if(this.meta.param) {
          delete this.meta.param;
        }
        this.meta.param = p;
      }
      return {
        success : true,
        records : records,
        totalRecords : total
      };
    }
});