var tabelas = new Tabelas(); function Tabela(classe, list, meta) { this.expire = 1000 * 60 * 5; // 5 minutos this.classe = classe; this.set = function ( list, meta ) { this.list = list; this.meta = meta; this.timestamp = new Date().getTime(); } this.set(list, meta); this.clear = function () { this.list.length = 0; } this.expirado = function () { var timeDiff = Math.abs((new Date()).getTime() - this.timestamp); if (timeDiff > this.expire) { return true; } return false; } this.get = function ( id ) { for (var i=0; i < this.list.length; i++) { var r = this.list[i]; if (r[this.getIdField()] == id) { return r; } } return null; } this.getDataAdapter = function () { var source = { localdata: this.list, datatype: "array", datafields: this.meta }; var dataAdapter = new $.jqx.dataAdapter(source, { uniqueDataFields: [this.getIdField()] }); return dataAdapter; } this.getDescField = function () { return this.meta[1].name; } this.getIdField = function () { if (this.meta && this.meta[0]) { return this.meta[0].name; } console.log('ERROR - faltando IdField:', this); return "__x"; } } function Tabelas() { this.tabs = new Object(); this.unload = function (classes) { for (var i=0; i < classes.length; i++) { var c = classes[i]; if (this.tabs[ c ]) { this.tabs[ c ].clear(); this.tabs[ c ] = null; } } } this.load = function (classes, onOK, onNOK) { var classesACarregar = ''; var delim = ''; for (var i=0; i < classes.length; i++) { var c = classes[i]; if (this.tabs[ c ]) { var t = this.tabs[ c ]; if (t.expirado()) { classesACarregar += delim + c; delim = '+'; } } else { classesACarregar += delim + c; delim = '+'; } } console.log('load', this.tabs, classesACarregar); if (classesACarregar=='') { if (onOK) { onOK(false); } return; } var url = http.getUrl('contahub.cmds.ContaHubCmd', 'getTabelas') + '?_class=' + classesACarregar ; http.callHTTP( url ,function(dados) { var classes = Object.keys(dados); console.log('loadOK', dados, tabelas); for (var i=0; i < classes.length; i++) { var c = classes[i]; if ( !(tabelas.tabs[ c ]) ) { tabelas.tabs[ c ] = new Tabela(c, dados[c].list, dados[c].meta); } else { tabelas.tabs[ c ].set(dados[c].list, dados[c].meta); } } if (onOK) { onOK(true); } return; } , onNOK ); } this.get = function (classe, id) { if ( this.tabs[ classe ] ) { return this.tabs[ classe ].get(id); } return null; } this.getTab = function (datafield) { var classes = Object.keys( tabelas.tabs ); for (var i=0; i < classes.length; i++) { var c = classes[i]; if ( datafield.indexOf(tabelas.tabs[ c ].getIdField() )==0 ) { return tabelas.tabs[ c ]; } } return null; } this.createEditor = function (row, cellvalue, editor, cellText, width, height) { var datafield = this.datafield; var t = tabelas.getTab( datafield ); var desc = t.getDescField(); var dataAdapter = t.getDataAdapter(); console.log('createEditor', datafield, desc, t, dataAdapter, this); var inputElement = $("").prependTo(editor); inputElement.jqxInput({ source: dataAdapter, displayMember: desc, valueMember: datafield, width: 200, height: 100, minLength:1}); } this.renderDesc = function (row, column, value, defaultHtml) { if (value) { var t = tabelas.getTab( column ); var s = t.get(value)[ t.getDescField() ]; return grid.replaceInDefaultHTML(defaultHtml, s); } return defaultHtml; } this.renderIdDesc = function (row, column, value, defaultHtml) { if (value) { var t = tabelas.getTab( column ); var s = value + ' - ' + t.get(value)[ t.getDescField() ]; return grid.replaceInDefaultHTML(defaultHtml, s); } return defaultHtml; } this.renderEmoji = function (row, column, value, defaultHtml) { var s = tabelas.toEmojis(value); if (s!='') { return grid.replaceInDefaultHTML(defaultHtml, s); } return defaultHtml; } this.toEmojis = function(value) { if (value && (value!='')) { var s = ''; var ss = (value + '').split('.'); for (var i=0; i < ss.length; i++) { var x = ss[i].trim(); if ( (x=='') || (x*1<=0) ) { continue; } try { s += String.fromCodePoint(x); } catch(e) { console.error(e, 'x:', x, 'ss:',ss, 'value:',value); } } return s; } return ''; } this.fromEmojis = function(value) { if (value && (value!='')) { var s = ''; for (var i=0; i < value.length; i+=2) { var c = value.codePointAt(i); s += ( (s=='') ? '' : '.') + c; } return s; } return ''; } }