您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

288 行
8.8 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. wn.ui.toolbar.Toolbar = Class.extend({
  4. init: function() {
  5. this.make();
  6. //this.make_modules();
  7. this.make_file();
  8. wn.ui.toolbar.recent = new wn.ui.toolbar.RecentDocs();
  9. wn.ui.toolbar.bookmarks = new wn.ui.toolbar.Bookmarks();
  10. this.make_tools();
  11. this.set_user_name();
  12. this.make_logout();
  13. this.make_notification();
  14. $('.dropdown-toggle').dropdown();
  15. $(document).trigger('toolbar_setup');
  16. // clear all custom menus on page change
  17. $(document).on("page-change", function() {
  18. $("header .navbar .custom-menu").remove();
  19. })
  20. },
  21. make: function() {
  22. $('header').append('<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">\
  23. <div class="container">\
  24. <div class="navbar-header">\
  25. <button type="button" class="navbar-toggle" data-toggle="collapse" \
  26. data-target=".navbar-responsive-collapse">\
  27. <span class="icon-bar"></span>\
  28. <span class="icon-bar"></span>\
  29. <span class="icon-bar"></span>\
  30. </button>\
  31. <a class="navbar-brand" href="#"><i class="icon-home"></i></a>\
  32. </div>\
  33. <div class="collapse navbar-collapse navbar-responsive-collapse">\
  34. <ul class="nav navbar-nav navbar-left">\
  35. </ul>\
  36. <img src="assets/webnotes/images/ui/spinner.gif" id="spinner"/>\
  37. <ul class="nav navbar-nav navbar-right">\
  38. <li class="dropdown">\
  39. <a class="dropdown-toggle" data-toggle="dropdown" href="#" \
  40. onclick="return false;" id="toolbar-user-link"></a>\
  41. <ul class="dropdown-menu" id="toolbar-user">\
  42. </ul>\
  43. </li>\
  44. </ul>\
  45. </div>\
  46. </div>\
  47. </div>');
  48. },
  49. make_home: function() {
  50. $('.navbar-brand').attr('href', "#");
  51. },
  52. make_notification: function() {
  53. $('.navbar .navbar-right').append('<li class="dropdown">\
  54. <a class="dropdown-toggl" href="#" data-toggle="dropdown"\
  55. title="'+wn._("Unread Messages")+'"\
  56. onclick="return false;"><span class="navbar-new-comments">0</span></a>\
  57. <ul class="dropdown-menu" id="navbar-notification">\
  58. </ul>\
  59. </li>');
  60. $(document).on("notification-update", function() {
  61. wn.ui.toolbar.update_notifications();
  62. })
  63. },
  64. // make_modules: function() {
  65. // $('<li class="dropdown">\
  66. // <a class="dropdown-toggle" data-toggle="dropdown" href="#"\
  67. // title="'+wn._("Modules")+'"\
  68. // onclick="return false;">'+wn._("Modules")+'</a>\
  69. // <ul class="dropdown-menu modules">\
  70. // </ul>\
  71. // </li>').prependTo('.navbar .nav:first');
  72. //
  73. // var modules_list = wn.user.get_desktop_items().sort();
  74. // var menu_list = $(".navbar .modules");
  75. //
  76. // var _get_list_item = function(m) {
  77. // args = {
  78. // module: m,
  79. // module_page: wn.modules[m].link,
  80. // module_label: wn._(wn.modules[m].label || m),
  81. // icon: wn.modules[m].icon
  82. // }
  83. //
  84. // return repl('<li><a href="#%(module_page)s" \
  85. // data-module="%(module)s"><i class="%(icon)s" style="display: inline-block; \
  86. // width: 21px; margin-top: -2px; margin-left: -7px;"></i>\
  87. // %(module_label)s</a></li>', args);
  88. // }
  89. //
  90. // // desktop
  91. // $('<li><a href="#desktop"><i class="icon-th"></i> '
  92. // + wn._("Desktop") + '</a></li>\
  93. // <li class="divider"></li>').appendTo(menu_list)
  94. //
  95. // // add to dropdown
  96. // $.each(modules_list,function(i, m) {
  97. // if(m!='Setup') {
  98. // menu_list.append(_get_list_item(m));
  99. // }
  100. // })
  101. //
  102. // // setup for system manager
  103. // if(user_roles.indexOf("System Manager")!=-1) {
  104. // menu_list.append('<li class="divider">' + _get_list_item("Setup"));
  105. // }
  106. //
  107. // },
  108. make_file: function() {
  109. wn.ui.toolbar.new_dialog = new wn.ui.toolbar.NewDialog();
  110. wn.ui.toolbar.search = new wn.ui.toolbar.Search();
  111. wn.ui.toolbar.report = new wn.ui.toolbar.Report();
  112. $('.navbar .nav:first').append('<li class="dropdown">\
  113. <a onclick="return wn.ui.toolbar.search.show();"><i class="icon-search"></i><li>');
  114. $('.navbar .nav:first').append('<li class="dropdown">\
  115. <a class="dropdown-toggle" href="#" data-toggle="dropdown"\
  116. title="'+wn._("File")+'"\
  117. onclick="return false;">'+wn._("File")+'</a>\
  118. <ul class="dropdown-menu" id="navbar-file">\
  119. <li><a href="#" onclick="return wn.ui.toolbar.new_dialog.show();">\
  120. <i class="icon-plus"></i> '+wn._('New')+'...</a></li>\
  121. <li><a href="#" onclick="return wn.ui.toolbar.report.show();">\
  122. <i class="icon-list"></i> '+wn._('Report')+'...</a></li>\
  123. </ul>\
  124. </li>');
  125. },
  126. make_tools: function() {
  127. $('.navbar .nav:first').append('<li class="dropdown">\
  128. <a class="dropdown-toggle" data-toggle="dropdown" href="#" \
  129. title="'+wn._("Tools")+'"\
  130. onclick="return false;">'+wn._("Tools")+'</a>\
  131. <ul class="dropdown-menu" id="toolbar-tools">\
  132. <li><a href="#" onclick="return wn.ui.toolbar.clear_cache();">\
  133. <i class="icon-fixed-width icon-refresh"></i> '
  134. +wn._('Clear Cache & Refresh')+'</a></li>\
  135. <li><a href="#" onclick="return wn.ui.toolbar.show_about();">\
  136. <i class="icon-fixed-width icon-info-sign"></i> '
  137. +wn._('About')+'</a></li>\
  138. <li><a href="http://erpnext.org/attributions.html" target="_blank"><i class="icon-fixed-width icon-heart"></i> '
  139. +wn._('Attributions')+'</a></li>\
  140. </ul>\
  141. </li>');
  142. if(has_common(user_roles,['Administrator','System Manager'])) {
  143. $('#toolbar-tools').append('<li><a href="#" \
  144. onclick="return wn.ui.toolbar.download_backup();"><i class="icon-fixed-width icon-download"></i> '
  145. +wn._('Download Backup')+'</a></li>');
  146. }
  147. },
  148. set_user_name: function() {
  149. var fn = user_fullname;
  150. if(fn.length > 15) fn = fn.substr(0,12) + '...';
  151. $('#toolbar-user-link').html(fn + '<b class="caret"></b>');
  152. },
  153. make_logout: function() {
  154. // logout
  155. $('#toolbar-user').append('<li><a href="#" onclick="return wn.app.logout();">\
  156. <i class="icon-fixed-width icon-signout"></i> '+wn._('Logout')+'</a></li>');
  157. }
  158. });
  159. $.extend(wn.ui.toolbar, {
  160. add_dropdown_button: function(parent, label, click, icon) {
  161. var menu = wn.ui.toolbar.get_menu(parent);
  162. if(menu.find("li:not(.custom-menu)").length && !menu.find(".divider").length) {
  163. wn.ui.toolbar.add_menu_divider(menu);
  164. }
  165. return $('<li class="custom-menu"><a><i class="'
  166. +icon+'"></i> '+label+'</a></li>')
  167. .insertBefore(menu.find(".divider"))
  168. .find("a")
  169. .click(function() {
  170. click();
  171. });
  172. },
  173. get_menu: function(label) {
  174. return $("#navbar-" + label.toLowerCase());
  175. },
  176. add_menu_divider: function(menu) {
  177. menu = typeof menu == "string" ?
  178. wn.ui.toolbar.get_menu(menu) : menu;
  179. $('<li class="divider custom-menu"></li>').prependTo(menu);
  180. },
  181. })
  182. wn.ui.toolbar.update_notifications = function() {
  183. var total = 0;
  184. var doctypes = keys(wn.boot.notification_info.open_count_doctype).sort();
  185. var modules = keys(wn.boot.notification_info.open_count_module).sort();
  186. $("#navbar-notification").empty();
  187. $.each(modules, function(i, module) {
  188. var count = wn.boot.notification_info.open_count_module[module];
  189. if(count) {
  190. $(repl('<li><a>\
  191. <span class="badge pull-right">\
  192. %(count)s</span> \
  193. <i class="icon-fixed-width %(icon)s"></i> %(module)s </a></li>', {
  194. module: module,
  195. count: count,
  196. icon: wn.modules[module].icon
  197. }))
  198. .appendTo("#navbar-notification")
  199. .find("a")
  200. .attr("data-module", module)
  201. .css({"min-width":"200px"})
  202. .on("click", function() {
  203. wn.set_route(wn.modules[$(this).attr("data-module")].link);
  204. });
  205. total += count;
  206. }
  207. });
  208. if(total) {
  209. $('<li class="divider"></li>').appendTo("#navbar-notification");
  210. }
  211. $.each(doctypes, function(i, doctype) {
  212. var count = wn.boot.notification_info.open_count_doctype[doctype];
  213. if(count) {
  214. $(repl('<li><a>\
  215. <span class="badge pull-right">\
  216. %(count)s</span> \
  217. <i class="icon-fixed-width %(icon)s"></i> %(doctype)s </a></li>', {
  218. doctype: doctype,
  219. icon: wn.boot.doctype_icons[doctype],
  220. count: count
  221. }))
  222. .appendTo("#navbar-notification")
  223. .find("a")
  224. .attr("data-doctype", doctype)
  225. .css({"min-width":"200px"})
  226. .on("click", function() {
  227. wn.views.show_open_count_list(this);
  228. });
  229. total += count;
  230. }
  231. });
  232. $(".navbar-new-comments")
  233. .html(total)
  234. .toggleClass("navbar-new-comments-true", total ? true : false);
  235. }
  236. wn.ui.toolbar.clear_cache = function() {
  237. localStorage && localStorage.clear();
  238. $c('webnotes.sessions.clear',{},function(r,rt){
  239. if(!r.exc) {
  240. show_alert(r.message);
  241. location.reload();
  242. }
  243. });
  244. return false;
  245. }
  246. wn.ui.toolbar.download_backup = function() {
  247. msgprint(wn._("Your download is being built, this may take a few moments..."));
  248. return $c('webnotes.utils.backups.get_backup',{},function(r,rt) {});
  249. return false;
  250. }
  251. wn.ui.toolbar.show_about = function() {
  252. try {
  253. wn.ui.misc.about();
  254. } catch(e) {
  255. console.log(e);
  256. }
  257. return false;
  258. }
  259. wn.ui.toolbar.show_banner = function(msg) {
  260. return $('<div class="toolbar-banner"></div>').html(msg).appendTo($('header'));
  261. }