Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

163 linhas
3.7 KiB

  1. // Navigation Object
  2. var nav_obj = {}
  3. nav_obj.observers = [];
  4. nav_obj.add_observer = function(o) { nav_obj.observers.push(o); }
  5. nav_obj.ol = [];
  6. //
  7. // notify my history so that it gets added to the back button history
  8. //
  9. nav_obj.open_notify = function(t, dt, dn, no_history) {
  10. // last should not be this (refresh)
  11. if(nav_obj.ol.length) {
  12. var tmp = nav_obj.ol[nav_obj.ol.length-1];
  13. if(tmp && tmp[0]==t && tmp[1]==dt && tmp[2]==dn) return;
  14. }
  15. if(!no_history) {
  16. // remove from history (if exists so that we can put it back on top)
  17. var tmp = [];
  18. for(var i in nav_obj.ol)
  19. if(!(nav_obj.ol[i][0]==t && nav_obj.ol[i][1]==dt && nav_obj.ol[i][2]==dn)) tmp.push(nav_obj.ol[i]);
  20. nav_obj.ol = tmp;
  21. // add to top
  22. nav_obj.ol.push([t, dt, dn])
  23. // encode
  24. en_t = encodeURIComponent(t);
  25. en_dt = encodeURIComponent(dt);
  26. en_dn = dn ? encodeURIComponent(dn) : '';
  27. if(en_t=='Page') {
  28. var id = en_dt + (dn ? ('/'+en_dn): '')
  29. } else {
  30. var id = en_t+'/'+ en_dt + (dn ? ('/'+en_dn): '')
  31. }
  32. // option to add to analytics engine
  33. if(nav_obj.on_open)
  34. nav_obj.on_open(id);
  35. // add to "back" history
  36. dhtmlHistory.add('!' + id,'');
  37. }
  38. nav_obj.notify_observers(t, dt, dn);
  39. }
  40. // Notify observers
  41. // =========================================
  42. nav_obj.notify_observers = function(t, dt, dn) {
  43. // notify observers (for menu?)
  44. for(var i=0; i<nav_obj.observers.length; i++) {
  45. var o = nav_obj.observers[i];
  46. if(o && o.notify) o.notify(t, dt, dn);
  47. }
  48. }
  49. // Remame links (for save - name change)
  50. // =========================================
  51. nav_obj.rename_notify = function(dt, oldn, newn) {
  52. for(var i=0;i<nav_obj.ol.length;i++) {
  53. var o = nav_obj.ol[i];
  54. if(o[1]==dt && o[2]==oldn) o[2]=newn;
  55. }
  56. }
  57. nav_obj.show_last_open = function() {
  58. var l = nav_obj.ol[nav_obj.ol.length-2];
  59. delete nav_obj.ol[nav_obj.ol.length-1]; // delete current open
  60. if(!l) loadpage('_home');
  61. else if(l[0]=='Page') {
  62. loadpage(l[1]);
  63. } else if(l[0]=='Report') {
  64. loadreport(l[1],l[2]);
  65. } else if(l[0]=='Form') {
  66. loaddoc(l[1],l[2]);
  67. } else if(l[0]=='DocBrowser' || l[0]=='List') {
  68. loaddocbrowser(l[1]);
  69. }
  70. }
  71. var _history_current;
  72. function history_get_name(t) {
  73. var parts = [];
  74. if(t.length>=3) {
  75. // combine all else
  76. for(var i=2; i<t.length; i++) {
  77. parts.push(t[i]);
  78. }
  79. }
  80. return parts.join('/')
  81. }
  82. //
  83. // get the page details from the location
  84. //
  85. nav_obj.get_page = function(loc) {
  86. if(!loc) loc = window.location.hash;
  87. // remove exclamation for hash-bangs
  88. if(loc.substr(0,1)=='#') { loc = loc.substr(1); }
  89. if(loc.substr(0,1)=='!') { loc = loc.substr(1); }
  90. if(!in_list(['Page/', 'Form/', 'Repor', 'DocBr', 'List/'], loc.substr(0,5))) {
  91. loc = 'Page/' + loc;
  92. }
  93. return loc.split('/');
  94. }
  95. //
  96. // function called when page is updated
  97. //
  98. function historyChange(newLocation, historyData) {
  99. var t = nav_obj.get_page(newLocation)
  100. for(var i=0;i<t.length;i++)
  101. t[i] = decodeURIComponent(t[i]);
  102. // re-opening the same page?
  103. if(nav_obj.ol.length) {
  104. var c = nav_obj.ol[nav_obj.ol.length-1];
  105. if(t.length==2) {
  106. if(c[0]==t[0] && c[1]==t[1]) return;
  107. } else {
  108. if(c[0]==t[0] && c[1]==t[1] && c[2]==t[2]) return;
  109. }
  110. }
  111. if(t[2])
  112. var docname = history_get_name(t);
  113. if(t[0]=='Form') {
  114. _history_current = newLocation;
  115. if(docname.substr(0, 3)=='New') {
  116. newdoc(t[1]);
  117. } else {
  118. loaddoc(t[1], docname);
  119. }
  120. } else if(t[0]=='Report') {
  121. _history_current = newLocation;
  122. loadreport(t[1], docname);
  123. } else if(t[0]=='Page') {
  124. _history_current = newLocation;
  125. loadpage(t[1]);
  126. } else if(t[0]=='Application') {
  127. _history_current = newLocation;
  128. loadapp(t[1]);
  129. } else if(t[0]=='DocBrowser' || t[0]=='List') {
  130. _history_current = newLocation;
  131. loaddocbrowser(t[1]);
  132. }
  133. };