1 | function DatatypeMapper() {
|
---|
2 | }
|
---|
3 |
|
---|
4 | DatatypeMapper.prototype.mapHtml = function (property) {
|
---|
5 | var parameter = property.Value;
|
---|
6 | var key = property.Name;
|
---|
7 | if (property.Options) {
|
---|
8 | return DatatypeMapper_mapStrings(property.Name, property.Options, property.Value);
|
---|
9 | }
|
---|
10 | else if (parameter instanceof Array) {
|
---|
11 | // parameter is a vector of strings
|
---|
12 | if (parameter[0] instanceof String || typeof (parameter[0]) == 'string') {
|
---|
13 | return DatatypeMapper_mapStrings(key, parameter);
|
---|
14 |
|
---|
15 | }
|
---|
16 | // parameter is a vector of numbers
|
---|
17 | else if (!isNaN(parameter[0])) {
|
---|
18 | return DatatypeMapper_mapNumbers(key, parameter);
|
---|
19 | }
|
---|
20 | // parameter is a matrix of numbers
|
---|
21 | else {
|
---|
22 | return DatatypeMapper_mapMatrix(key, parameter);
|
---|
23 | }
|
---|
24 |
|
---|
25 | }
|
---|
26 | else if (typeof (parameter) == 'boolean') {
|
---|
27 | return DatatypeMapper_mapBoolean(key, parameter);
|
---|
28 | }
|
---|
29 | // parameter is a number
|
---|
30 | else if (!isNaN(parameter)) {
|
---|
31 | return DatatypeMapper_mapNumber(key, parameter);
|
---|
32 | }
|
---|
33 | return 'No mapping for ' + typeof (parameter) + ' (Key: ' + key + ')';
|
---|
34 | }
|
---|
35 |
|
---|
36 |
|
---|
37 | function DatatypeMapper_mapStrings(key, param, selected) {
|
---|
38 | // http://stackoverflow.com/questions/4814512/how-to-create-dropdown-list-dynamically-using-jquery
|
---|
39 | var s = $('<select name="' + key + '"/>');
|
---|
40 | for (var i = 0; i < param.length; i++) {
|
---|
41 | $('<option />', { value: param[i], text: param[i] }).appendTo(s);
|
---|
42 | }
|
---|
43 | s.val(selected);
|
---|
44 | return s;
|
---|
45 | }
|
---|
46 |
|
---|
47 | function DatatypeMapper_mapNumber(key, param) {
|
---|
48 | return $('<input type="text" name="' + key + '" />').val(param);
|
---|
49 | }
|
---|
50 |
|
---|
51 | function DatatypeMapper_mapBoolean(key, param) {
|
---|
52 | var s = $('<select name="' + key + '"/>');
|
---|
53 | $('<option />', { value: 'true', text: 'true' }).appendTo(s);
|
---|
54 | $('<option />', { value: 'false', text: 'false' }).appendTo(s);
|
---|
55 | return s;
|
---|
56 | }
|
---|
57 |
|
---|
58 | function DatatypeMapper_mapNumbers(key, param) {
|
---|
59 | // http: //stackoverflow.com/questions/8749236/create-table-with-jquery-append
|
---|
60 | var table = $('<table></table>').addClass('editableTable');
|
---|
61 | var head = $('<thead></thead>');
|
---|
62 | // create head elements
|
---|
63 | var headerRow = $('<tr></tr>');
|
---|
64 | $('<td />').text(key + ' Column').appendTo(headerRow);
|
---|
65 | headerRow.appendTo(head);
|
---|
66 | head.appendTo(table);
|
---|
67 | var body = $('<tbody></tbody>');
|
---|
68 | for (var i = 0; i < param.length; i++) {
|
---|
69 | var row = $('<tr></tr>');
|
---|
70 | var td = $('<td />').appendTo(row);
|
---|
71 | $('<input type="text" name="' + key + '_' + i + '" />').val(param[i]).appendTo(td);
|
---|
72 | row.appendTo(body);
|
---|
73 | }
|
---|
74 | body.appendTo(table);
|
---|
75 | return table;
|
---|
76 | }
|
---|
77 |
|
---|
78 | function DatatypeMapper_mapMatrix(key, param) {
|
---|
79 | // http: //stackoverflow.com/questions/8749236/create-table-with-jquery-append
|
---|
80 | var table = $('<table></table>').addClass('editableTable');
|
---|
81 | var head = $('<thead></thead>');
|
---|
82 | // create head elements
|
---|
83 | var headerRow = $('<tr></tr>');
|
---|
84 | for (var i = 0; i < param[0].length; i++) {
|
---|
85 | $('<td />').text(key + ' Column ' + i).appendTo(headerRow);
|
---|
86 | }
|
---|
87 | headerRow.appendTo(head);
|
---|
88 | head.appendTo(table);
|
---|
89 | var body = $('<tbody></tbody>');
|
---|
90 | for (var i = 0; i < param.length; i++) {
|
---|
91 | var row = $('<tr></tr>');
|
---|
92 | for (var j = 0; j < param[i].length; j++) {
|
---|
93 | var td = $('<td />').appendTo(row);
|
---|
94 | $('<input type="text" name="' + key + '_' + i + '_' + j + '" />').val(param[i][j]).appendTo(td);
|
---|
95 | }
|
---|
96 | row.appendTo(body);
|
---|
97 | }
|
---|
98 | body.appendTo(table);
|
---|
99 | return table;
|
---|
100 |
|
---|
101 | /*var table = '<table class="editableTable"><thead><tr>';
|
---|
102 | for (var i = 0; i < param[0].length; i++) {
|
---|
103 | table += '<th>' + key + ' Column ' + (i + 1) + '</th>';
|
---|
104 | }
|
---|
105 | table += '</tr>';
|
---|
106 | // foreach value entry (2d entry)
|
---|
107 | for (var i = 0; i < param.length; i++) {
|
---|
108 | table += '<tr>';
|
---|
109 | for (var j = 0; j < param[i].length; j++) {
|
---|
110 | table += '<td><input type="text" name="' + key + '_' + i + '_' + j + '" /></td>';
|
---|
111 | }
|
---|
112 | table += '</tr>';
|
---|
113 | }
|
---|
114 | return $*/
|
---|
115 | }
|
---|
116 |
|
---|
117 | DatatypeMapper.prototype.mapString = function (value) {
|
---|
118 | if (value == "true") return true;
|
---|
119 | else if (value == "false") return false;
|
---|
120 | else if (!isNaN(value)) return parseFloat(value.replace(',', '.'));
|
---|
121 | return value;
|
---|
122 | }
|
---|
123 |
|
---|
124 | DatatypeMapper.prototype.aggregateTables = function (data) {
|
---|
125 | // aggregate tables:
|
---|
126 | for (var dataKey in data) {
|
---|
127 | var entry = data[dataKey];
|
---|
128 | var tableEntries = {};
|
---|
129 | var toRemove = [];
|
---|
130 | for (var key in entry) {
|
---|
131 | if (key.indexOf('_') != -1) {
|
---|
132 | var splitted = key.split('_');
|
---|
133 | var name = splitted[0];
|
---|
134 | var row = parseInt(splitted[1]);
|
---|
135 | if (!(name in tableEntries)) {
|
---|
136 | tableEntries[name] = []
|
---|
137 | }
|
---|
138 |
|
---|
139 | if (splitted.length == 2) { // its a vector of elements
|
---|
140 | tableEntries[name].push(entry[key])
|
---|
141 | } else if (splitted.length == 3) { // its a matrix of elements
|
---|
142 | column = parseInt(splitted[2]);
|
---|
143 | if (tableEntries[name].length < row + 1)
|
---|
144 | tableEntries[name].push([]);
|
---|
145 | tableEntries[name][row][column] = entry[key];
|
---|
146 | }
|
---|
147 | toRemove.push(key);
|
---|
148 | }
|
---|
149 | }
|
---|
150 |
|
---|
151 | for (var i = 0; i < toRemove.length; i++) {
|
---|
152 | delete entry[toRemove[i]];
|
---|
153 | }
|
---|
154 |
|
---|
155 | for (var key in tableEntries) {
|
---|
156 | entry[key] = tableEntries[key];
|
---|
157 | }
|
---|
158 | }
|
---|
159 | } |
---|