bjui-core.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /*!
  2. * B-JUI v1.2 (http://b-jui.com)
  3. * Git@OSC (http://git.oschina.net/xknaan/B-JUI)
  4. * Copyright 2014 K'naan (xknaan@163.com).
  5. * Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
  6. */
  7. /* ========================================================================
  8. * B-JUI: bjui-core.js v1.2
  9. * @author K'naan (xknaan@163.com)
  10. * -- Modified from dwz.core.js (author:ZhangHuihua@msn.com)
  11. * http://git.oschina.net/xknaan/B-JUI/blob/master/BJUI/js/bjui-core.js
  12. * ========================================================================
  13. * Copyright 2014 K'naan.
  14. * Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
  15. * ======================================================================== */
  16. +function ($) {
  17. 'use strict';
  18. var BJUI = {
  19. JSPATH : 'BJUI/',
  20. PLUGINPATH : 'BJUI/plugins/',
  21. IS_DEBUG : false,
  22. KeyPressed : { //key press state
  23. ctrl : false,
  24. shift : false
  25. },
  26. keyCode: {
  27. ENTER : 13, ESC : 27, END : 35, HOME : 36,
  28. SHIFT : 16, CTRL : 17, TAB : 9,
  29. LEFT : 37, RIGHT: 39, UP : 38, DOWN : 40,
  30. DELETE: 46, BACKSPACE: 8
  31. },
  32. eventType: {
  33. initUI : 'bjui.initUI', // When document load completed or ajax load completed, B-JUI && Plugins init
  34. beforeInitUI : 'bjui.beforeInitUI', // If your DOM do not init [add to DOM attribute 'data-noinit="true"']
  35. afterInitUI : 'bjui.afterInitUI', //
  36. ajaxStatus : 'bjui.ajaxStatus', // When performing ajax request, display or hidden progress bar
  37. resizeGrid : 'bjui.resizeGrid', // When the window or dialog resize completed
  38. beforeAjaxLoad : 'bjui.beforeAjaxLoad', // When perform '$.fn.ajaxUrl', to do something...
  39. beforeLoadNavtab : 'bjui.beforeLoadNavtab',
  40. beforeLoadDialog : 'bjui.beforeLoadDialog',
  41. afterLoadNavtab : 'bjui.afterLoadNavtab',
  42. afterLoadDialog : 'bjui.afterLoadDialog',
  43. beforeCloseNavtab : 'bjui.beforeCloseNavtab',
  44. beforeCloseDialog : 'bjui.beforeCloseDialog',
  45. afterCloseNavtab : 'bjui.afterCloseNavtab',
  46. afterCloseDialog : 'bjui.afterCloseDialog'
  47. },
  48. pageInfo: {pageCurrent:'pageCurrent', pageSize:'pageSize', orderField:'orderField', orderDirection:'orderDirection'},
  49. alertMsg: {displayPosition:'topcenter', alertTimeout: 6000}, //alertmsg display position && close timeout
  50. ajaxTimeout: 30000,
  51. statusCode: {ok:200, error:300, timeout:301},
  52. keys: {statusCode:'statusCode', message:'message'},
  53. ui: {
  54. windowWidth : 0,
  55. showSlidebar : true, // After the B-JUI initialization, display slidebar
  56. clientPaging : true, // Response paging and sorting information on the client
  57. overwriteHomeTab : false // When open an undefined id of navtab, whether overwrite the home navtab
  58. },
  59. debug: function(msg) {
  60. if (this.IS_DEBUG) {
  61. if (typeof(console) != 'undefined') console.log(msg)
  62. else alert(msg)
  63. }
  64. },
  65. loginInfo: {
  66. url : 'login.html',
  67. title : 'Login',
  68. width : 420,
  69. height : 260,
  70. mask : true
  71. },
  72. loadLogin: function() {
  73. var login = this.loginInfo
  74. $('body').dialog({id:'bjui-login', url:login.url, title:login.title, width:login.width, height:login.height, mask:login.mask})
  75. },
  76. init: function(options) {
  77. var op = $.extend({}, options)
  78. $.extend(BJUI.statusCode, op.statusCode)
  79. $.extend(BJUI.pageInfo, op.pageInfo)
  80. $.extend(BJUI.alertMsg, op.alertMsg)
  81. $.extend(BJUI.loginInfo, op.loginInfo)
  82. $.extend(BJUI.ui, op.ui)
  83. if (op.JSPATH) this.JSPATH = op.JSPATH
  84. if (op.PLUGINPATH) this.PLUGINPATH = op.PLUGINPATH
  85. if (op.ajaxTimeout) this.ajaxTimeout = op.ajaxTimeout
  86. this.IS_DEBUG = op.debug || false
  87. this.initEnv()
  88. // if ((!$.cookie || !$.cookie('bjui_theme')) && op.theme) $(this).theme('setTheme', op.theme)
  89. $(this).theme('setTheme', 'orange')
  90. },
  91. initEnv: function() {
  92. $(window).resize(function() {
  93. var ww = $(this).width()
  94. if (BJUI.ui.windowWidth) {
  95. if (BJUI.ui.windowWidth > 600 && BJUI.ui.windowWidth < ww)
  96. ww = BJUI.ui.windowWidth
  97. }
  98. BJUI.initLayout(ww)
  99. setTimeout(function() {$(this).trigger(BJUI.eventType.resizeGrid)}, 30)
  100. })
  101. setTimeout(function() {
  102. var ww = $(window).width()
  103. if (BJUI.ui.windowWidth) {
  104. if (BJUI.ui.windowWidth > 600 && BJUI.ui.windowWidth < ww)
  105. ww = BJUI.ui.windowWidth
  106. }
  107. BJUI.initLayout(ww)
  108. $(document).initui()
  109. }, 10)
  110. },
  111. initLayout: function(ww) {
  112. var iContentW = ww - (BJUI.ui.showSlidebar ? $('#bjui-sidebar').width() + 6 : 6),
  113. iContentH = $(window).height() - $('#bjui-header').height() - $('#bjui-footer').outerHeight(),
  114. navtabH = $('#bjui-navtab').find('.tabsPageHeader').height()
  115. if (BJUI.ui.windowWidth) $('#bjui-window').width(ww)
  116. BJUI.windowWidth = ww
  117. $('#bjui-container').height(iContentH)
  118. $('#bjui-navtab').width(iContentW)
  119. $('#bjui-leftside, #bjui-sidebar, #bjui-sidebar-s, #bjui-splitBar, #bjui-splitBarProxy').css({height:'100%'})
  120. $('#bjui-navtab .tabsPageContent').height(iContentH - navtabH)
  121. /* fixed pageFooter */
  122. setTimeout(function() {
  123. $('#bjui-navtab > .tabsPageContent > .navtabPage').resizePageH()
  124. $('#bjui-navtab > .tabsPageContent > .navtabPage').find('.bjui-layout').resizePageH()
  125. }, 10)
  126. /* header navbar */
  127. var navbarWidth = $('body').data('bjui.navbar.width'),
  128. $header = $('#bjui-header'), $toggle = $header.find('.bjui-navbar-toggle'), $logo = $header.find('.bjui-navbar-logo'), $navbar = $('#bjui-navbar-collapse'), $nav = $navbar.find('.bjui-navbar-right')
  129. if (!navbarWidth) {
  130. navbarWidth = {logoW:$logo.outerWidth(), navW:$nav.outerWidth()}
  131. $('body').data('bjui.navbar.width', navbarWidth)
  132. }
  133. if (navbarWidth) {
  134. if (ww - navbarWidth.logoW < navbarWidth.navW) {
  135. $toggle.show()
  136. $navbar.addClass('collapse menu')
  137. } else {
  138. $toggle.hide()
  139. $navbar.removeClass('collapse menu in')
  140. }
  141. }
  142. /* horizontal navbar */
  143. var $hnavbox = $('#bjui-hnav-navbar-box'),
  144. $hnavbar = $hnavbox.find('> #bjui-hnav-navbar'),
  145. $hmoreL = $hnavbox.prev(),
  146. $hmoreR = $hnavbox.next(),
  147. hboxWidth = $hnavbox.width(),
  148. liW = 0
  149. $hnavbar.find('> li').each(function(i) {
  150. var $li = $(this)
  151. liW += $li.outerWidth()
  152. if (liW > hboxWidth) {
  153. $hmoreR.show()
  154. $hnavbox.data('hnav.move', true).data('hnav.liw', liW)
  155. } else {
  156. $hmoreL.hide()
  157. $hmoreR.hide()
  158. $hnavbox.removeData('hnav.move')
  159. }
  160. })
  161. },
  162. regional: {},
  163. setRegional: function(key, value) {
  164. BJUI.regional[key] = value
  165. },
  166. getRegional : function(key) {
  167. if (String(key).indexOf('.') >= 0) {
  168. var msg, arr = String(key).split('.')
  169. for (var i = 0; i < arr.length; i++) {
  170. if (!msg) msg = BJUI.regional[arr[i]]
  171. else msg = msg[arr[i]]
  172. }
  173. return msg
  174. } else {
  175. return BJUI.regional[key]
  176. }
  177. },
  178. doRegional: function(frag, regional) {
  179. $.each(regional, function(k, v) {
  180. frag = frag.replaceAll('#'+ k +'#', v)
  181. })
  182. return frag
  183. }
  184. }
  185. window.BJUI = BJUI
  186. }(jQuery);