[9227] | 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 | } |
---|