source: trunk/web/app/out/dist/js/str_tab.js @ 7

Last change on this file since 7 was 6, checked in by dj3c1t, 13 years ago

mise a jour du trunk

File size: 3.3 KB
Line 
1var DEBUG = false;
2
3function str_tab()
4{
5  this.response = null;
6
7  this.tab_to_str = function(TAB)
8  { return this._tab_to_str("", TAB);
9  }
10
11  this._tab_to_str = function(pre, TAB)
12  { var content = "";
13    var HAS_VALUES = false;
14    for(var key in TAB)
15    { HAS_VALUES = true;
16      if(typeof(TAB[key]) == "object") content += this._tab_to_str(pre + key.length + ":"  + key, TAB[key]);
17      else content += pre + key.length + ":" + key + ("" + TAB[key]).length + ":" + TAB[key] + "\n";
18    }
19    if(HAS_VALUES) return content;
20    return pre + "a:\n";
21  }
22
23  this.str_to_tab = function(content)
24  { var TAB = {};
25    var n = 0;
26    while(n < content.length)
27    { var LINE_FOUND = false;
28      var words = new Array();
29      while(n < content.length && !LINE_FOUND)
30      { var length = "";
31        var word = "";
32        var ENDS_WITH_EMPTY_TAB = false;
33        while(n < content.length && content.charAt(n) != ':') { length += content.charAt(n); n++; } n++;
34        if(length == "a") ENDS_WITH_EMPTY_TAB = true;
35        else
36        { for(var k = 0; k < parseInt(length); k++) { word += content.charAt(n); n++; }
37          words.push(word);
38        }
39        LINE_FOUND = ENDS_WITH_EMPTY_TAB || n == content.length || content.charAt(n) == '\n';
40      }
41      n++;
42      if(words.length > 0) TAB = this.affect(TAB, words, ENDS_WITH_EMPTY_TAB);
43    }
44    return TAB;
45  }
46
47  this.affect = function(TAB, words, ENDS_WITH_EMPTY_TAB)
48  { if(words.length > (ENDS_WITH_EMPTY_TAB ? 1 : 2))
49      { if(typeof(TAB[words[0]]) != "object") TAB[words[0]] = {};
50      var _words = new Array();
51      var FIRST = true;
52      for(var k = 0; k < words.length; k++)
53      { if(FIRST) FIRST = false;
54        else _words.push(words[k]);
55      }
56      TAB[words[0]] = this.affect(TAB[words[0]], _words, ENDS_WITH_EMPTY_TAB);
57    }
58    else TAB[words[0]] = (ENDS_WITH_EMPTY_TAB ? {} : words[1]);
59    return TAB;
60  }
61
62  this.str_to_hex = function(str)
63  { var hex = "";
64    for(var n = 0; n < str.length; n++)
65    { var hex_char = str.charCodeAt(n).toString(16);
66      if(hex_char.length == 1) hex_char = "0" + hex_char;
67      hex += hex_char;
68    }
69    return hex;
70  }
71
72  this.hex_to_str = function(hex)
73  { var n = 0;
74    var str = "";
75    while(n + 2 <= hex.length) { str += unescape("%" + hex.substr(n, 2)); n += 2; }
76    return str;
77  }
78
79  this.request = function(file, req_tab, callback, str_tab_inst)
80  { if(window.XMLHttpRequest && !(window.ActiveXObject))
81    { try { req = new XMLHttpRequest(); }
82      catch(e) { req = false; }
83    }
84    else if(window.ActiveXObject)
85    { try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
86      catch(e)
87      { try { req = new ActiveXObject("Microsoft.XMLHTTP");    }
88        catch(e) { req = false; }
89      }
90    }
91    if(req)
92    { req.open("POST", file, true);
93      req.onreadystatechange = function()
94      { if(req.readyState == 4)
95        { if(DEBUG) alert(str_tab_inst.hex_to_str(req.responseText));
96                  str_tab_inst.response = str_tab_inst.str_to_tab(str_tab_inst.hex_to_str(req.responseText));
97          if(typeof(str_tab_inst.response["erreur"]) != "undefined") alert(str_tab_inst.response["erreur"]);
98          eval(callback);
99        }
100      }
101      req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
102      req.send("post_request=" + this.str_to_hex(this.tab_to_str(req_tab)));
103    }
104  }
105
106}
107
108var str_tab = new str_tab();
Note: See TracBrowser for help on using the repository browser.