index.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. const VERSION = '1.15.5'
  2. let bootstrapVersion = 4
  3. try {
  4. const rawVersion = $.fn.dropdown.Constructor.VERSION
  5. // Only try to parse VERSION if it is defined.
  6. // It is undefined in older versions of Bootstrap (tested with 3.1.1).
  7. if (rawVersion !== undefined) {
  8. bootstrapVersion = parseInt(rawVersion, 10)
  9. }
  10. } catch (e) {
  11. // ignore
  12. }
  13. const CONSTANTS = {
  14. 3: {
  15. iconsPrefix: 'glyphicon',
  16. icons: {
  17. paginationSwitchDown: 'glyphicon-collapse-down icon-chevron-down',
  18. paginationSwitchUp: 'glyphicon-collapse-up icon-chevron-up',
  19. refresh: 'glyphicon-refresh icon-refresh',
  20. toggleOff: 'glyphicon-list-alt icon-list-alt',
  21. toggleOn: 'glyphicon-list-alt icon-list-alt',
  22. columns: 'glyphicon-th icon-th',
  23. detailOpen: 'glyphicon-plus icon-plus',
  24. detailClose: 'glyphicon-minus icon-minus',
  25. fullscreen: 'glyphicon-fullscreen',
  26. search: 'glyphicon-search',
  27. clearSearch: 'glyphicon-trash'
  28. },
  29. classes: {
  30. buttonsPrefix: 'btn',
  31. buttons: 'default',
  32. buttonsGroup: 'btn-group',
  33. buttonsDropdown: 'btn-group',
  34. pull: 'pull',
  35. inputGroup: 'input-group',
  36. inputPrefix: 'input-',
  37. input: 'form-control',
  38. paginationDropdown: 'btn-group dropdown',
  39. dropup: 'dropup',
  40. dropdownActive: 'active',
  41. paginationActive: 'active',
  42. buttonActive: 'active'
  43. },
  44. html: {
  45. toolbarDropdown: ['<ul class="dropdown-menu" role="menu">', '</ul>'],
  46. toolbarDropdownItem: '<li role="menuitem"><label>%s</label></li>',
  47. toolbarDropdownSeparator: '<li class="divider"></li>',
  48. pageDropdown: ['<ul class="dropdown-menu" role="menu">', '</ul>'],
  49. pageDropdownItem: '<li role="menuitem" class="%s"><a href="#">%s</a></li>',
  50. dropdownCaret: '<span class="caret"></span>',
  51. pagination: ['<ul class="pagination%s">', '</ul>'],
  52. paginationItem: '<li class="page-item%s"><a class="page-link" aria-label="%s" href="javascript:void(0)">%s</a></li>',
  53. icon: '<i class="%s %s"></i>',
  54. inputGroup: '<div class="input-group">%s<span class="input-group-btn">%s</span></div>',
  55. searchInput: '<input class="%s%s" type="text" placeholder="%s">',
  56. searchButton: '<button class="%s" type="button" name="search" title="%s">%s %s</button>',
  57. searchClearButton: '<button class="%s" type="button" name="clearSearch" title="%s">%s %s</button>'
  58. }
  59. },
  60. 4: {
  61. iconsPrefix: 'fa',
  62. icons: {
  63. paginationSwitchDown: 'fa-caret-square-down',
  64. paginationSwitchUp: 'fa-caret-square-up',
  65. refresh: 'fa-sync',
  66. toggleOff: 'fa-toggle-off',
  67. toggleOn: 'fa-toggle-on',
  68. columns: 'fa-th-list',
  69. detailOpen: 'fa-plus',
  70. detailClose: 'fa-minus',
  71. fullscreen: 'fa-arrows-alt',
  72. search: 'fa-search',
  73. clearSearch: 'fa-trash'
  74. },
  75. classes: {
  76. buttonsPrefix: 'btn',
  77. buttons: 'secondary',
  78. buttonsGroup: 'btn-group',
  79. buttonsDropdown: 'btn-group',
  80. pull: 'float',
  81. inputGroup: 'btn-group',
  82. inputPrefix: 'form-control-',
  83. input: 'form-control',
  84. paginationDropdown: 'btn-group dropdown',
  85. dropup: 'dropup',
  86. dropdownActive: 'active',
  87. paginationActive: 'active',
  88. buttonActive: 'active'
  89. },
  90. html: {
  91. toolbarDropdown: ['<div class="dropdown-menu dropdown-menu-right">', '</div>'],
  92. toolbarDropdownItem: '<label class="dropdown-item">%s</label>',
  93. pageDropdown: ['<div class="dropdown-menu">', '</div>'],
  94. pageDropdownItem: '<a class="dropdown-item %s" href="#">%s</a>',
  95. toolbarDropdownSeparator: '<div class="dropdown-divider"></div>',
  96. dropdownCaret: '<span class="caret"></span>',
  97. pagination: ['<ul class="pagination%s">', '</ul>'],
  98. paginationItem: '<li class="page-item%s"><a class="page-link" aria-label="%s" href="javascript:void(0)">%s</a></li>',
  99. icon: '<i class="%s %s"></i>',
  100. inputGroup: '<div class="input-group">%s<div class="input-group-append">%s</div></div>',
  101. searchInput: '<input class="%s%s" type="text" placeholder="%s">',
  102. searchButton: '<button class="%s" type="button" name="search" title="%s">%s %s</button>',
  103. searchClearButton: '<button class="%s" type="button" name="clearSearch" title="%s">%s %s</button>'
  104. }
  105. }
  106. }[bootstrapVersion]
  107. const DEFAULTS = {
  108. height: undefined,
  109. classes: 'table table-bordered table-hover',
  110. theadClasses: '',
  111. headerStyle (column) {
  112. return {}
  113. },
  114. rowStyle (row, index) {
  115. return {}
  116. },
  117. rowAttributes (row, index) {
  118. return {}
  119. },
  120. undefinedText: '-',
  121. locale: undefined,
  122. virtualScroll: false,
  123. virtualScrollItemHeight: undefined,
  124. sortable: true,
  125. sortClass: undefined,
  126. silentSort: true,
  127. sortName: undefined,
  128. sortOrder: 'asc',
  129. sortStable: false,
  130. rememberOrder: false,
  131. serverSort: true,
  132. customSort: undefined,
  133. columns: [
  134. []
  135. ],
  136. data: [],
  137. url: undefined,
  138. method: 'get',
  139. cache: true,
  140. contentType: 'application/json',
  141. dataType: 'json',
  142. ajax: undefined,
  143. ajaxOptions: {},
  144. queryParams (params) {
  145. return params
  146. },
  147. queryParamsType: 'limit', // 'limit', undefined
  148. responseHandler (res) {
  149. return res
  150. },
  151. totalField: 'total',
  152. totalNotFilteredField: 'totalNotFiltered',
  153. dataField: 'rows',
  154. pagination: false,
  155. onlyInfoPagination: false,
  156. showExtendedPagination: false,
  157. paginationLoop: true,
  158. sidePagination: 'client', // client or server
  159. totalRows: 0,
  160. totalNotFiltered: 0,
  161. pageNumber: 1,
  162. pageSize: 10,
  163. pageList: [10, 25, 50, 100],
  164. paginationHAlign: 'right', // right, left
  165. paginationVAlign: 'bottom', // bottom, top, both
  166. paginationDetailHAlign: 'left', // right, left
  167. paginationPreText: '&lsaquo;',
  168. paginationNextText: '&rsaquo;',
  169. paginationSuccessivelySize: 5, // Maximum successively number of pages in a row
  170. paginationPagesBySide: 1, // Number of pages on each side (right, left) of the current page.
  171. paginationUseIntermediate: false, // Calculate intermediate pages for quick access
  172. search: false,
  173. searchOnEnterKey: false,
  174. strictSearch: false,
  175. visibleSearch: false,
  176. showButtonIcons: true,
  177. showButtonText: false,
  178. showSearchButton: false,
  179. showSearchClearButton: false,
  180. trimOnSearch: true,
  181. searchAlign: 'right',
  182. searchTimeOut: 500,
  183. searchText: '',
  184. customSearch: undefined,
  185. showHeader: true,
  186. showFooter: false,
  187. footerStyle (column) {
  188. return {}
  189. },
  190. showColumns: false,
  191. showColumnsToggleAll: false,
  192. minimumCountColumns: 1,
  193. showPaginationSwitch: false,
  194. showRefresh: false,
  195. showToggle: false,
  196. showFullscreen: false,
  197. smartDisplay: true,
  198. escape: false,
  199. filterOptions: {
  200. filterAlgorithm: 'and'
  201. },
  202. idField: undefined,
  203. selectItemName: 'btSelectItem',
  204. clickToSelect: false,
  205. ignoreClickToSelectOn ({tagName}) {
  206. return ['A', 'BUTTON'].includes(tagName)
  207. },
  208. singleSelect: false,
  209. checkboxHeader: true,
  210. maintainMetaData: false,
  211. multipleSelectRow: false,
  212. uniqueId: undefined,
  213. cardView: false,
  214. detailView: false,
  215. detailViewIcon: true,
  216. detailViewByClick: false,
  217. detailFormatter (index, row) {
  218. return ''
  219. },
  220. detailFilter (index, row) {
  221. return true
  222. },
  223. toolbar: undefined,
  224. toolbarAlign: 'left',
  225. buttonsToolbar: undefined,
  226. buttonsAlign: 'right',
  227. buttonsOrder: ['paginationSwitch', 'refresh', 'toggle', 'fullscreen', 'columns'],
  228. buttonsPrefix: CONSTANTS.classes.buttonsPrefix,
  229. buttonsClass: CONSTANTS.classes.buttons,
  230. icons: CONSTANTS.icons,
  231. html: CONSTANTS.html,
  232. iconSize: undefined,
  233. iconsPrefix: CONSTANTS.iconsPrefix, // glyphicon or fa(font-awesome)
  234. onAll (name, args) {
  235. return false
  236. },
  237. onClickCell (field, value, row, $element) {
  238. return false
  239. },
  240. onDblClickCell (field, value, row, $element) {
  241. return false
  242. },
  243. onClickRow (item, $element) {
  244. return false
  245. },
  246. onDblClickRow (item, $element) {
  247. return false
  248. },
  249. onSort (name, order) {
  250. return false
  251. },
  252. onCheck (row) {
  253. return false
  254. },
  255. onUncheck (row) {
  256. return false
  257. },
  258. onCheckAll (rows) {
  259. return false
  260. },
  261. onUncheckAll (rows) {
  262. return false
  263. },
  264. onCheckSome (rows) {
  265. return false
  266. },
  267. onUncheckSome (rows) {
  268. return false
  269. },
  270. onLoadSuccess (data) {
  271. return false
  272. },
  273. onLoadError (status) {
  274. return false
  275. },
  276. onColumnSwitch (field, checked) {
  277. return false
  278. },
  279. onPageChange (number, size) {
  280. return false
  281. },
  282. onSearch (text) {
  283. return false
  284. },
  285. onToggle (cardView) {
  286. return false
  287. },
  288. onPreBody (data) {
  289. return false
  290. },
  291. onPostBody () {
  292. return false
  293. },
  294. onPostHeader () {
  295. return false
  296. },
  297. onPostFooter () {
  298. return false
  299. },
  300. onExpandRow (index, row, $detail) {
  301. return false
  302. },
  303. onCollapseRow (index, row) {
  304. return false
  305. },
  306. onRefreshOptions (options) {
  307. return false
  308. },
  309. onRefresh (params) {
  310. return false
  311. },
  312. onResetView () {
  313. return false
  314. },
  315. onScrollBody () {
  316. return false
  317. }
  318. }
  319. const EN = {
  320. formatLoadingMessage () {
  321. return 'Loading, please wait'
  322. },
  323. formatRecordsPerPage (pageNumber) {
  324. return `${pageNumber} rows per page`
  325. },
  326. formatShowingRows (pageFrom, pageTo, totalRows, totalNotFiltered) {
  327. if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
  328. return `Showing ${pageFrom} to ${pageTo} of ${totalRows} rows (filtered from ${totalNotFiltered} total rows)`
  329. }
  330. return `Showing ${pageFrom} to ${pageTo} of ${totalRows} rows`
  331. },
  332. formatSRPaginationPreText () {
  333. return 'previous page'
  334. },
  335. formatSRPaginationPageText (page) {
  336. return `to page ${page}`
  337. },
  338. formatSRPaginationNextText () {
  339. return 'next page'
  340. },
  341. formatDetailPagination (totalRows) {
  342. return `Showing ${totalRows} rows`
  343. },
  344. formatSearch () {
  345. return 'Search'
  346. },
  347. formatClearSearch () {
  348. return 'Clear Search'
  349. },
  350. formatNoMatches () {
  351. return 'No matching records found'
  352. },
  353. formatPaginationSwitch () {
  354. return 'Hide/Show pagination'
  355. },
  356. formatPaginationSwitchDown () {
  357. return 'Show pagination'
  358. },
  359. formatPaginationSwitchUp () {
  360. return 'Hide pagination'
  361. },
  362. formatRefresh () {
  363. return 'Refresh'
  364. },
  365. formatToggle () {
  366. return 'Toggle'
  367. },
  368. formatToggleOn () {
  369. return 'Show card view'
  370. },
  371. formatToggleOff () {
  372. return 'Hide card view'
  373. },
  374. formatColumns () {
  375. return 'Columns'
  376. },
  377. formatColumnsToggleAll () {
  378. return 'Toggle all'
  379. },
  380. formatFullscreen () {
  381. return 'Fullscreen'
  382. },
  383. formatAllRows () {
  384. return 'All'
  385. }
  386. }
  387. const COLUMN_DEFAULTS = {
  388. field: undefined,
  389. title: undefined,
  390. titleTooltip: undefined,
  391. 'class': undefined,
  392. width: undefined,
  393. widthUnit: 'px',
  394. rowspan: undefined,
  395. colspan: undefined,
  396. align: undefined, // left, right, center
  397. halign: undefined, // left, right, center
  398. falign: undefined, // left, right, center
  399. valign: undefined, // top, middle, bottom
  400. cellStyle: undefined,
  401. radio: false,
  402. checkbox: false,
  403. checkboxEnabled: true,
  404. clickToSelect: true,
  405. showSelectTitle: false,
  406. sortable: false,
  407. sortName: undefined,
  408. order: 'asc', // asc, desc
  409. sorter: undefined,
  410. visible: true,
  411. switchable: true,
  412. cardVisible: true,
  413. searchable: true,
  414. formatter: undefined,
  415. footerFormatter: undefined,
  416. detailFormatter: undefined,
  417. searchFormatter: true,
  418. escape: false,
  419. events: undefined
  420. }
  421. const METHODS = [
  422. 'getOptions',
  423. 'refreshOptions',
  424. 'getData',
  425. 'getSelections', 'getAllSelections',
  426. 'load', 'append', 'prepend',
  427. 'remove', 'removeAll',
  428. 'insertRow', 'updateRow',
  429. 'getRowByUniqueId', 'updateByUniqueId', 'removeByUniqueId',
  430. 'updateCell', 'updateCellByUniqueId',
  431. 'showRow', 'hideRow', 'getHiddenRows',
  432. 'showColumn', 'hideColumn',
  433. 'getVisibleColumns', 'getHiddenColumns',
  434. 'showAllColumns', 'hideAllColumns',
  435. 'mergeCells',
  436. 'checkAll', 'uncheckAll', 'checkInvert',
  437. 'check', 'uncheck',
  438. 'checkBy', 'uncheckBy',
  439. 'refresh',
  440. 'destroy',
  441. 'resetView',
  442. 'showLoading', 'hideLoading',
  443. 'togglePagination', 'toggleFullscreen', 'toggleView',
  444. 'resetSearch',
  445. 'filterBy',
  446. 'scrollTo', 'getScrollPosition',
  447. 'selectPage', 'prevPage', 'nextPage',
  448. 'toggleDetailView',
  449. 'expandRow', 'collapseRow',
  450. 'expandAllRows', 'collapseAllRows',
  451. 'updateColumnTitle', 'updateFormatText'
  452. ]
  453. const EVENTS = {
  454. 'all.bs.table': 'onAll',
  455. 'click-row.bs.table': 'onClickRow',
  456. 'dbl-click-row.bs.table': 'onDblClickRow',
  457. 'click-cell.bs.table': 'onClickCell',
  458. 'dbl-click-cell.bs.table': 'onDblClickCell',
  459. 'sort.bs.table': 'onSort',
  460. 'check.bs.table': 'onCheck',
  461. 'uncheck.bs.table': 'onUncheck',
  462. 'check-all.bs.table': 'onCheckAll',
  463. 'uncheck-all.bs.table': 'onUncheckAll',
  464. 'check-some.bs.table': 'onCheckSome',
  465. 'uncheck-some.bs.table': 'onUncheckSome',
  466. 'load-success.bs.table': 'onLoadSuccess',
  467. 'load-error.bs.table': 'onLoadError',
  468. 'column-switch.bs.table': 'onColumnSwitch',
  469. 'page-change.bs.table': 'onPageChange',
  470. 'search.bs.table': 'onSearch',
  471. 'toggle.bs.table': 'onToggle',
  472. 'pre-body.bs.table': 'onPreBody',
  473. 'post-body.bs.table': 'onPostBody',
  474. 'post-header.bs.table': 'onPostHeader',
  475. 'post-footer.bs.table': 'onPostFooter',
  476. 'expand-row.bs.table': 'onExpandRow',
  477. 'collapse-row.bs.table': 'onCollapseRow',
  478. 'refresh-options.bs.table': 'onRefreshOptions',
  479. 'reset-view.bs.table': 'onResetView',
  480. 'refresh.bs.table': 'onRefresh',
  481. 'scroll-body.bs.table': 'onScrollBody'
  482. }
  483. Object.assign(DEFAULTS, EN)
  484. export default {
  485. VERSION,
  486. THEME: `bootstrap${bootstrapVersion}`,
  487. CONSTANTS,
  488. DEFAULTS,
  489. COLUMN_DEFAULTS,
  490. METHODS,
  491. EVENTS,
  492. LOCALES: {
  493. en: EN,
  494. 'en-US': EN
  495. }
  496. }