You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

216 lines
5.0 KiB

  1. // App.js
  2. // dialog container
  3. var popup_cont;
  4. var session = {};
  5. var start_sid = null;
  6. function startup() {
  7. // save the sid (so that we know if it changes mid-session)
  8. start_sid = get_cookie('sid');
  9. popup_cont = $a(document.getElementsByTagName('body')[0], 'div');
  10. // Globals
  11. // ---------------------------------
  12. var setup_globals = function(r) {
  13. profile = r.profile;
  14. user = r.profile.name;
  15. user_fullname = profile.first_name + (r.profile.last_name ? (' ' + r.profile.last_name) : '');
  16. user_defaults = profile.defaults;
  17. user_roles = profile.roles;
  18. user_email = profile.email;
  19. profile.start_items = r.start_items;
  20. home_page = r.home_page;
  21. _p.letter_heads = r.letter_heads;
  22. sys_defaults = r.sysdefaults;
  23. // bc
  24. session.rt = profile.can_read;
  25. if(r.ipinfo) session.ipinfo = r.ipinfo;
  26. session.dt_labels = r.dt_labels;
  27. session.rev_dt_labels = {} // reverse lookup - get doctype by label
  28. _tags.color_map = r.tag_color_map;
  29. if(r.dt_labels) {
  30. for(key in r.dt_labels)session.rev_dt_labels[r.dt_labels[key]] = key;
  31. }
  32. }
  33. var setup_history = function(r) {
  34. rename_observers.push(nav_obj);
  35. }
  36. var setup_events = function() {
  37. addEvent('keyup', function(ev, target) {
  38. for(var i in keypress_observers) {
  39. if(keypress_observers[i])
  40. keypress_observers[i].notify_keypress(ev, ev.keyCode);
  41. }
  42. });
  43. addEvent('click', function(ev, target) {
  44. for(var i=0; i<click_observers.length; i++) {
  45. if(click_observers[i])
  46. click_observers[i].notify_click(ev, target);
  47. }
  48. });
  49. // Transparent background for IE
  50. if(isIE) {
  51. $op($i('dialog_back'), 60);
  52. }
  53. }
  54. var callback = function(r,rt) {
  55. if(wn.sb) wn.sb.hide();
  56. if(r.exc) msgprint(r.exc);
  57. setup_globals(r);
  58. setup_history();
  59. setup_events();
  60. var a = new Body();
  61. page_body.run_startup_code();
  62. page_body.setup_sidebar_menu();
  63. for(var i=0; i<startup_list.length; i++) {
  64. startup_list[i]();
  65. }
  66. $dh('startup_div');
  67. $ds('body_div');
  68. // show a new form on loading?
  69. if(get_url_arg('embed')) {
  70. newdoc(get_url_arg('embed'));
  71. return;
  72. }
  73. // open an existing page or record
  74. var t = to_open();
  75. if(t) {
  76. historyChange(t);
  77. } else if(home_page) {
  78. // show home oage
  79. loadpage(home_page);
  80. }
  81. }
  82. if(_startup_data && keys(_startup_data).length && _startup_data.docs) {
  83. LocalDB.sync(_startup_data.docs);
  84. callback(_startup_data, '');
  85. // for debug
  86. if(_startup_data.server_messages) msgprint(_startup_data.server_messages);
  87. } else {
  88. if($i('startup_div'))
  89. $c('startup',{},callback,null,1);
  90. }
  91. }
  92. function to_open() {
  93. if(get_url_arg('page'))
  94. return get_url_arg('page');
  95. var h = location.hash;
  96. if(h) {
  97. return h.substr(1);
  98. }
  99. }
  100. function logout() {
  101. $c('logout', args = {}, function(r,rt) {
  102. if(r.exc) {
  103. msgprint(r.exc);
  104. return;
  105. }
  106. redirect_to_login();
  107. });
  108. }
  109. function redirect_to_login() {
  110. if(login_file)
  111. window.location.href = login_file;
  112. else
  113. window.location.href = 'index.html';
  114. }
  115. // default print style
  116. _p.def_print_style_body = "html, body, div, span, td { font-family: Arial, Helvetica; font-size: 12px; }"
  117. +"\npre { margin:0; padding:0;}"
  118. _p.def_print_style_other = "\n.simpletable, .noborder { border-collapse: collapse; margin-bottom: 10px;}"
  119. +"\n.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }"
  120. +"\n.noborder td { vertical-align: top; }"
  121. _p.go = function(html) {
  122. var d = document.createElement('div')
  123. d.innerHTML = html
  124. $(d).printElement();
  125. }
  126. _p.preview = function(html) {
  127. var w = window.open('');
  128. w.document.write(html)
  129. w.document.close();
  130. }
  131. // setup calendar
  132. function setup_calendar() {
  133. var p = new Page('_calendar');
  134. p.wrapper.style.height = '100%'; // IE FIX
  135. p.wrapper.onshow = function() {
  136. wn.require('lib/js/legacy/widgets/calendar.js');
  137. if(!_c.calendar) {
  138. new_widget('Calendar', function(c) {
  139. _c.calendar = c;
  140. _c.calendar.init(p.cont);
  141. rename_observers.push(_c.calendar);
  142. });
  143. }
  144. }
  145. }
  146. startup_list.push(setup_calendar);
  147. // ie6 fixed pos fix
  148. if(isIE6) {
  149. var scroll_list = []
  150. window.onscroll = function() {
  151. for(var i=0; i<scroll_list.length; i++) {
  152. scroll_list[i]();
  153. }
  154. }
  155. }
  156. var resize_observers = []
  157. function set_resize_observer(fn) {
  158. if(resize_observers.indexOf(fn)==-1) resize_observers.push(fn);
  159. }
  160. window.onresize = function() {
  161. return;
  162. var ht = get_window_height();
  163. for(var i=0; i< resize_observers.length; i++){
  164. resize_observers[i](ht);
  165. }
  166. }
  167. get_window_height = function() {
  168. var ht = window.innerHeight ? window.innerHeight : document.documentElement.offsetHeight ? document.documentElement.offsetHeight : document.body.offsetHeight;
  169. var toolbarh = page_body.wntoolbar ? page_body.wntoolbar.wrapper.offsetHeight : 0
  170. var bannerh = page_body.banner_area ? page_body.banner_area.offsetHeight : 0
  171. var footerh = page_body.footer ? page_body.footer.offsetHeight : 0
  172. ht = ht - bannerh - toolbarh - footerh;
  173. return ht;
  174. }
  175. // setup space holder
  176. setup_space_holder = function() {
  177. // space holder div
  178. window.space_holder_div = $a(null,'div','space_holder');
  179. window.space_holder_div.innerHTML = 'Loading...'
  180. }
  181. startup_list.push(setup_space_holder);