index.js 16 KB

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