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.
 
 
 
 
 
 

203 lines
5.7 KiB

  1. wn.provide('wn.desktop');
  2. wn.pages['desktop'].onload = function(wrapper) {
  3. // setup dialog
  4. // load desktop
  5. wn.desktop.refresh();
  6. }
  7. wn.pages['desktop'].refresh = function(wrapper) {
  8. wn.ui.toolbar.add_dropdown_button("File", wn._("All Applications"), function() {
  9. wn.desktop.show_all_modules();
  10. }, 'icon-th');
  11. }
  12. wn.desktop.refresh = function() {
  13. wn.desktop.render();
  14. $("#icon-grid").sortable({
  15. update: function() {
  16. new_order = [];
  17. $("#icon-grid .case-wrapper").each(function(i, e) {
  18. new_order.push($(this).attr("data-name"));
  19. });
  20. wn.defaults.set_default("_desktop_items", new_order);
  21. }
  22. });
  23. }
  24. wn.desktop.render = function() {
  25. $("#icon-grid").empty();
  26. document.title = "Desktop";
  27. var add_icon = function(m) {
  28. var module = wn.modules[m];
  29. if(!module || (!module.link && !module.onclick) || module.is_app)
  30. return;
  31. if(module.link)
  32. module._link = module.link.toLowerCase().replace("/", "-");
  33. module.app_icon = wn.ui.app_icon.get_html(m);
  34. $module_icon = $(repl('<div id="module-icon-%(_link)s" class="case-wrapper" \
  35. data-name="%(name)s" data-link="%(link)s">\
  36. <div id="module-count-%(_link)s" class="circle" style="display: None">\
  37. <span class="circle-text"></span>\
  38. </div>\
  39. %(app_icon)s\
  40. <div class="case-label">%(_label)s</div>\
  41. </div>', module)).click(module.link ? function() {
  42. var link = $(this).attr("data-link");
  43. if(link) {
  44. if(link.substr(0, 1)==="/") {
  45. window.open(link.substr(1))
  46. }
  47. wn.set_route(link);
  48. }
  49. } : module.onclick).css({
  50. cursor:"pointer"
  51. }).appendTo("#icon-grid");
  52. }
  53. // modules
  54. var modules_list = wn.user.get_desktop_items();
  55. var user_list = wn.user.get_user_desktop_items();
  56. $.each(modules_list, function(i, m) {
  57. var module = wn.modules[m];
  58. if(module) {
  59. if(!module.label) {
  60. module.label = m;
  61. }
  62. module.name = m;
  63. module._label = wn._(module.label);
  64. if(m!="Setup" && user_list.indexOf(m)!==-1)
  65. add_icon(m);
  66. }
  67. })
  68. // setup
  69. if(user_roles.indexOf('System Manager')!=-1)
  70. add_icon('Setup')
  71. // all applications
  72. wn.modules["All Applications"] = {
  73. icon: "icon-th",
  74. label: "All Applications",
  75. _label: wn._("All Applications"),
  76. color: "#4aa3df",
  77. link: "",
  78. onclick: function() {
  79. wn.desktop.show_all_modules();
  80. }
  81. }
  82. add_icon("All Applications")
  83. // notifications
  84. wn.desktop.show_pending_notifications();
  85. $(document).on("notification-update", function() {
  86. wn.desktop.show_pending_notifications();
  87. })
  88. }
  89. wn.desktop.show_all_modules = function() {
  90. if(!wn.desktop.all_modules_dialog) {
  91. var d = new wn.ui.Dialog({
  92. title: '<i class="icon-th text-muted"></i> All Applications'
  93. });
  94. var desktop_items = wn.user.get_desktop_items();
  95. var user_desktop_items = wn.user.get_user_desktop_items();
  96. $('<input class="form-control desktop-app-search" \
  97. type="text" placeholder="Search Filter">')
  98. .appendTo(d.body)
  99. .on("keyup", function() {
  100. var val = $(this).val();
  101. $(d.body).find(".list-group-item").each(function() {
  102. $(this).toggle($(this).attr("data-label").toLowerCase().indexOf(val)!==-1);
  103. })
  104. });
  105. $('<hr><p class="text-right text-muted text-small">'+wn._("Checked items shown on desktop")+'</p>')
  106. .appendTo(d.body);
  107. $wrapper = $('<div class="list-group">').appendTo(d.body);
  108. // list of applications (wn.user.get_desktop_items())
  109. $.each(keys(wn.modules).sort(), function(i, m) {
  110. var module = wn.modules[m];
  111. if(module.link && desktop_items.indexOf(m)!==-1) {
  112. module.app_icon = wn.ui.app_icon.get_html(m, true);
  113. $(repl('<div class="list-group-item" data-label="%(name)s">\
  114. <div class="row">\
  115. <div class="col-xs-2"><a href="#%(link)s">%(app_icon)s</a></div>\
  116. <div class="col-xs-10" style="padding-top: 14px;">\
  117. <a href="#%(link)s">%(label)s</a>\
  118. <input class="pull-right" type="checkbox" data-name="%(name)s" />\
  119. </div>\
  120. </div>\
  121. </div>', module)).appendTo($wrapper);
  122. }
  123. });
  124. // check shown items
  125. $wrapper.find('[type="checkbox"]')
  126. .on("click", function() {
  127. // update user_desktop_items (when checked or un-checked)
  128. var user_desktop_items = wn.user.get_user_desktop_items();
  129. var module = $(this).attr("data-name");
  130. if($(this).prop("checked")) {
  131. user_desktop_items.push(module);
  132. } else {
  133. if(user_desktop_items.indexOf(module)!==-1) {
  134. user_desktop_items.splice(user_desktop_items.indexOf(module), 1);
  135. }
  136. }
  137. wn.defaults.set_default("_user_desktop_items", user_desktop_items);
  138. wn.desktop.refresh();
  139. })
  140. .prop("checked", false);
  141. $.each(user_desktop_items, function(i, m) {
  142. $wrapper.find('[data-label="'+m+'"] [type="checkbox"]').prop("checked", true);
  143. })
  144. wn.desktop.all_modules_dialog = d;
  145. }
  146. $(wn.desktop.all_modules_dialog.body).find(".desktop-app-search").val("").trigger("keyup");
  147. wn.desktop.all_modules_dialog.show();
  148. }
  149. wn.desktop.show_pending_notifications = function() {
  150. if (!wn.boot.notification_info.module_doctypes) {
  151. return;
  152. }
  153. var modules_list = wn.user.get_desktop_items();
  154. $.each(modules_list, function(i, module) {
  155. var module_doctypes = wn.boot.notification_info.module_doctypes[module];
  156. var sum = 0;
  157. if(module_doctypes) {
  158. if(wn.boot.notification_info.open_count_doctype) {
  159. $.each(module_doctypes, function(j, doctype) {
  160. sum += (wn.boot.notification_info.open_count_doctype[doctype] || 0);
  161. });
  162. }
  163. } else if(wn.boot.notification_info.open_count_module
  164. && wn.boot.notification_info.open_count_module[module]!=null) {
  165. sum = wn.boot.notification_info.open_count_module[module];
  166. }
  167. if (wn.modules[module]) {
  168. var notifier = $("#module-count-" + wn.modules[module]._link);
  169. if(notifier.length) {
  170. notifier.toggle(sum ? true : false);
  171. notifier.find(".circle-text").html(sum || "");
  172. }
  173. }
  174. });
  175. }