1 if ( !document.__dataface__ ) document.__dataface__ = {}; 2 if ( !document.__dataface__.recordIndex ) document.__dataface__.recordIndex = {}; 3 if ( !document.__dataface__.tableIndex ) document.__dataface__.tableIndex = {}; 4 if ( !document.__dataface__.requestStack ) document.__dataface__.requestStack = []; 5 var __dataface__ = document.__dataface__; 6 7 __dataface__.recordLoaded = function(id){ 8 9 return (__dataface__.recordIndex[id] != null); 10 } 11 12 __dataface__.tableLoaded = function(name){ 13 return (__dataface__.tableIndex[name] != null); 14 } 15 16 __dataface__.fieldLoaded = function(tablename, fieldname){ 17 return ( tableLoaded(tablename) && __dataface__.tableIndex[tablename].__fields__[fieldname] != null ); 18 } 19 20 __dataface__.pushRequest = function(func, params){ 21 __dataface__.requestStack.push([func, params]); 22 } 23 __dataface__.popRequest = function(){ 24 return __dataface__.requestStack.pop(); 25 } 26 27 __dataface__.requestStackSize = function(){ return __dataface__.requestStack.length; } 28 29 __dataface__.getRecord = function(id){ 30 return __dataface__.recordIndex[id]; 31 } 32 33 __dataface__.getTable = function(name){ 34 return __dataface__.tableIndex[name]; 35 } 36 37 __dataface__.loadField = function(params, callback){ 38 __dataface__.errors = []; 39 if ( __dataface__.fieldLoaded(params['table'], params['field']) ) return; 40 var query = {'action': '-ajax_load_fields', tables': [], 'records': [], 'fields': [] }; 41 42 if ( !__dataface__.tableLoaded(params['table']) ) query.tables.push(params['table']); 43 query.fields.push('*'); 44 __dataface__.pushRequest(callback[0], callback[1]); 45 __dataface__.sendRequest(query, [__dataface__.handleLoadField, null]); 46 return; 47 } 48 49 __dataface__.handleLoadField = function(){ 50 51 if ( __dataface__.http.readyState == 4 ){ 52 var data = eval('('+__dataface__.http.responseText+')'); 53 __dataface__.errors = data.errors; 54 __dataface__.messages = data.messages; 55 56 57 if ( data.tables ){ 58 for ( tablename in data.tables ){ 59 __dataface__.updateTable(tablename, data.tables[tablename]); 60 } 61 } 62 63 if ( data.records ){ 64 for ( recordId in data.records ){ 65 __dataface__.updateRecord(recordId, data.records[recordId]); 66 } 67 } 68 69 __dataface__.performNextRequest(); 70 } 71 72 } 73 74 75 __dataface__.performNextRequest = function(){ 76 if ( __dataface__.requestStackSize() > 0 ){ 77 var callback = __dataface__.popRequest(); 78 var func = callback[0]; 79 var param = callback[1]; 80 func(param); 81 } 82 83 } 84 85 __dataface__.sendRequest = function(query, callback){ 86 __dataface__.http = getHTTPObject(); 87 var qstr = '?-action='+escape(query.action); 88 if ( query.tables ){ 89 for ( var i=0; i<query.tables.length; i++){ 90 qstr += '&'+escape('tables['+i+']')+'='+escape(query.tables[i]); 91 } 92 } 93 if ( query.records ){ 94 for ( var i=0; i<query.records.length; i++){ 95 qstr += '&'+escape('records['+i+']')+'='+escape(query.records[i]); 96 } 97 } 98 if ( query.fields ){ 99 for ( var i=0; i<query.fields.length; i++){ 100 qstr += '&'+escape('fields['+i+']')+'='+escape(query.fields[i]); 101 } 102 } 103 104 __dataface__.http.open('GET', qstr); 105 106 __dataface__.http.onreadystatechange = callback[0]; 107 __dataface__.http.send(null); 108 } 109 110 111 __dataface__.setTagMode = function(tag, mode){ 112 var id = tag.getAttribute('id'); 113 var date = new Date(); 114 if ( !tag.__modes__ ) tag.__modes__ = {'view': {'timestamp': date.getTime(), 'innerHTML': tag.innerHTML}}; 115 if ( !tag.__mode__ ) tag.__mode__ = 'view'; 116 if ( tag.__mode__ != mode ){ 117 if ( mode == 'edit' ){ 118 // we are entering edit mode... must load the field 119 120 } 121 } 122 123 124 if ( !id ) return; 125 var recid = id.substring(0, id.indexOf('#')); 126 var field = id.substring(id.indexOf('#