@green-code-studio/objects-list 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/demo/demo.js CHANGED
@@ -4,12 +4,14 @@ import '../src/style/objectsList.scss';
4
4
  console.log('aa');
5
5
  const dataSource={
6
6
  async get(options){
7
+ console.log('aaaaaa')
7
8
  return {
8
9
  rows:[
9
10
  {id:1, name:'John'},
10
11
  {id:2, name:'Doe'},
11
12
  {id:3, name:'Smith'},
12
- ]
13
+ ],
14
+ total:3000
13
15
  }
14
16
  }
15
17
  }
package/dist/index.mjs CHANGED
@@ -174,7 +174,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
174
174
  \****************************/
175
175
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
176
176
 
177
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectsList: () => (/* binding */ ObjectsList)\n/* harmony export */ });\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paginationButtons.js */ \"./src/paginationButtons.js\");\n/* harmony import */ var _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @green-code-studio/context-menu/dist/index.mjs */ \"./node_modules/@green-code-studio/context-menu/dist/index.mjs\");\n/* harmony import */ var _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ObjectsList extends HTMLElement {\r\n constructor(datasource) {\r\n super();\r\n this.columns = [];\r\n this.hiddenColumns = new Set()\r\n this.columnFilters = new Map();\r\n this.generateActions = () => [];\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.icon = 'icon-document';\r\n this.loadConcurencyLimiter = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.datasource = datasource;\r\n this.datasource.onchange = () => this.refresh();\r\n this.start = 0;\r\n this.limit = 10\r\n this.total = 0;\r\n this.selected = new _idsSet_js__WEBPACK_IMPORTED_MODULE_6__.IdsSet();\r\n this.selectedMain = null;\r\n this.dataById = new Map();\r\n this.initFoot();\r\n this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));\r\n addEventListener('resize', e => this.resize());\r\n this.infiniteScrollEnabled = false;\r\n }\r\n\r\n get visibleColumns() {\r\n return this.columns.filter(x => !this.hiddenColumns.has(x.dataName))\r\n }\r\n\r\n refreshLimit() {\r\n this.limit = this.insideView.calcMaxVisibleItems(this.clientHeight - this.foot.clientHeight - 2);\r\n if (this.limit < 1) this.limit = 1;\r\n if (this.infiniteScrollEnabled) {\r\n this.limit = Math.ceil(this.limit / 20) * 20 + 40;\r\n } else {\r\n this.start = Math.floor(Math.min(this.total, this.start) / this.limit) * this.limit;\r\n }\r\n }\r\n\r\n async refresh() {\r\n this.classList.toggle('infiniteScrollEnabled', this.infiniteScrollEnabled);\r\n\r\n if (!this.insideView || !(this.insideView instanceof this.insideViewClass))\r\n this.initInsideView();\r\n else if (this.insideView.refreshHeader)\r\n this.insideView.refreshHeader()\r\n\r\n this.refreshLimit();\r\n const refreshSymbol = Symbol();\r\n this.lastRefreshSymbol = refreshSymbol;\r\n await this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n let data = await this.datasource.get(this);\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.total = data.total;\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n while (this.filterShortContainer.firstChild) {\r\n this.filterShortContainer.firstChild.remove()\r\n }\r\n if (this.columnFilters.size) {\r\n this.filterShortContainer.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('span', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.filtersCount') + ': ' + this.columnFilters.size}));\r\n const clearButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.clearFilters')});\r\n clearButton.onclick = () => {\r\n this.columnFilters.clear();\r\n this.refresh();\r\n }\r\n this.filterShortContainer.append(clearButton);\r\n }\r\n if (this.paramsInUrl) {\r\n this.setUrl();\r\n }\r\n }\r\n\r\n setUrl() {\r\n const query = new URLSearchParams(document.location.search)\r\n console.log('dddddcccc')\r\n console.log(query)\r\n let changed = false;\r\n var visibleColumns = this.visibleColumns.map(x => x.dataName).join();\r\n if (query.get('visibleColumns') || this.hiddenColumns.size) {\r\n if (query.get('visibleColumns') != visibleColumns) {\r\n query.set('visibleColumns', visibleColumns);\r\n changed = true;\r\n }\r\n }\r\n if (query.get('sort') || this.sort?.col) {\r\n if (query.get('sort') != this.sort?.col) {\r\n query.set('sort', this.sort?.col);\r\n changed = true;\r\n }\r\n }\r\n if (query.get('sortDesc') == 'true' || this.sort?.desc) {\r\n if ((query.get('sortDesc') == 'true') != this.sort?.desc) {\r\n query.set('sortDesc', this.sort?.desc ? 'true' : 'false');\r\n changed = true;\r\n }\r\n }\r\n if (query.get('columnFilters') || this.columnFilters) {\r\n if (query.get('columnFilters') != JSON.stringify(Array.from(this.columnFilters.entries()))) {\r\n query.set('columnFilters', JSON.stringify(Array.from(this.columnFilters.entries())));\r\n changed = true;\r\n }\r\n }\r\n if (changed) {\r\n const url = new URL(document.location);\r\n url.search = new URLSearchParams(query).toString();\r\n history.pushState(null, '', url.toString());\r\n }\r\n }\r\n\r\n readUrl() {\r\n\r\n const query = new URLSearchParams(document.location.search)\r\n if (query.get('visibleColumns')) {\r\n this.hiddenColumns = new Set(this.columns.map(x => x.dataName));\r\n for (const name of query.get('visibleColumns').split(',')) {\r\n this.hiddenColumns.delete(name);\r\n }\r\n }\r\n if (query.get('sort')) {\r\n this.sort = query.get('sort');\r\n }\r\n if (query.get('columnFilters')) {\r\n this.columnFilters = new Map(JSON.parse(query.get('columnFilters')));\r\n }\r\n }\r\n\r\n initInsideView() {\r\n if (this.insideView) {\r\n this.insideView.remove();\r\n }\r\n this.insideView = new this.insideViewClass(this);\r\n this.insertBefore(this.insideView, this.foot);\r\n this.insideView.refresh = () => this.refresh();\r\n this.insideView.onPaginationChanged = (start, limit) => {\r\n if (this.start != start) {\r\n this.start = start;\r\n //this.limit=limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n fillDataById(rows) {\r\n for (let row of rows) {\r\n this.dataById.set(parseInt(row.id), row);\r\n }\r\n }\r\n\r\n getSelectedData() {\r\n let data = Array.from(this.dataById).filter(([id, row]) => this.selected.has(id)).map(([id, row]) => row);\r\n if (data.length > 0) return data;\r\n else if (this.dataById[this.selectedMain])\r\n return [this.dataById[this.selectedMain]]\r\n else return [];\r\n }\r\n\r\n initFoot() {\r\n this.foot = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.foot');\r\n this.append(this.foot);\r\n let menuButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button.menuButton span.icon-settings');\r\n this.foot.append(menuButton)\r\n menuButton.onclick = e => this.showConfigPopup();\r\n this.pagination = new _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__.PaginationButtons();\r\n this.pagination.onpageclick = (page) => {\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n this.foot.append(this.pagination);\r\n this.filterShortContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.filterShortContainer');\r\n this.foot.append(this.filterShortContainer);\r\n this.searchForm = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('form', {className: 'search'});\r\n this.foot.append(this.searchForm);\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {\r\n name: 'search',\r\n type: 'search',\r\n placeholder: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.search')\r\n });\r\n this.searchForm.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)(searchInput));\r\n searchInput.oninput = e => {\r\n this.start = 0;\r\n this.refresh();\r\n }\r\n\r\n }\r\n\r\n get search() {\r\n if (!this.foot) return '';\r\n const searchForm = this.foot.querySelector('.search');\r\n if (!searchForm) return '';\r\n return searchForm.search.value;\r\n }\r\n\r\n showGlobalContextMenu(e) {\r\n let elements = [{\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.paginationMode'),\r\n icon: 'icon-pagination',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = false;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.scrollMode'),\r\n icon: 'icon-scroll',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = true;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.tableView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.listView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView;\r\n this.refresh();\r\n }\r\n }];\r\n if (this.allowTableEdit) {\r\n elements.push({\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.startMultiEdit'),\r\n icon: 'icon-edit',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n this.insideView.startMultiEdit();\r\n }\r\n });\r\n }\r\n _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__.ContextMenu.openContextMenu(e, elements);\r\n }\r\n\r\n resize() {\r\n let limit = this.limit;\r\n this.refreshLimit();\r\n if (limit != this.limit) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n multiEditChanged(id, data, save = false) {\r\n this.datasource.multiEditChanged(id, data, save);\r\n }\r\n\r\n showConfigPopup() {\r\n if (this.querySelector('config-popup')) {\r\n this.querySelector('config-popup').remove()\r\n } else {\r\n const popup = new _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__.ConfigPopup(this)\r\n this.append(popup)\r\n }\r\n }\r\n\r\n gotoUrl(url) {\r\n window.location.href = url;\r\n }\r\n}\r\n\r\ncustomElements.define('data-view', ObjectsList);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/objectsList.js?");
177
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectsList: () => (/* binding */ ObjectsList)\n/* harmony export */ });\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paginationButtons.js */ \"./src/paginationButtons.js\");\n/* harmony import */ var _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @green-code-studio/context-menu/dist/index.mjs */ \"./node_modules/@green-code-studio/context-menu/dist/index.mjs\");\n/* harmony import */ var _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ObjectsList extends HTMLElement {\r\n constructor(datasource) {\r\n super();\r\n this.columns = [];\r\n this.hiddenColumns = new Set()\r\n this.columnFilters = new Map();\r\n this.generateActions = () => [];\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.icon = 'icon-document';\r\n this.loadConcurencyLimiter = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.datasource = datasource;\r\n this.datasource.onchange = () => this.refresh();\r\n this.start = 0;\r\n this.limit = 10\r\n this.total = 0;\r\n this.selected = new _idsSet_js__WEBPACK_IMPORTED_MODULE_6__.IdsSet();\r\n this.selectedMain = null;\r\n this.dataById = new Map();\r\n this.initFoot();\r\n this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));\r\n addEventListener('resize', e => this.resize());\r\n this.addEventListener('keydown', e => this.onkeydown(e));\r\n this.infiniteScrollEnabled = false;\r\n }\r\n\r\n get visibleColumns() {\r\n return this.columns.filter(x => !this.hiddenColumns.has(x.dataName))\r\n }\r\n\r\n refreshLimit() {\r\n this.limit = this.insideView.calcMaxVisibleItems(this.clientHeight - this.foot.clientHeight - 2);\r\n if (this.limit < 1) this.limit = 1;\r\n if (this.infiniteScrollEnabled) {\r\n this.limit = Math.ceil(this.limit / 20) * 20 + 40;\r\n } else {\r\n this.start = Math.floor(Math.min(this.total, this.start) / this.limit) * this.limit;\r\n }\r\n }\r\n\r\n async refresh() {\r\n this.classList.toggle('infiniteScrollEnabled', this.infiniteScrollEnabled);\r\n\r\n if (!this.insideView || !(this.insideView instanceof this.insideViewClass))\r\n this.initInsideView();\r\n else if (this.insideView.refreshHeader)\r\n this.insideView.refreshHeader()\r\n\r\n this.refreshLimit();\r\n const refreshSymbol = Symbol();\r\n this.lastRefreshSymbol = refreshSymbol;\r\n await this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n let data = await this.datasource.get(this);\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.total = data.total;\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n while (this.filterShortContainer.firstChild) {\r\n this.filterShortContainer.firstChild.remove()\r\n }\r\n if (this.columnFilters.size) {\r\n this.filterShortContainer.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('span', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.filtersCount') + ': ' + this.columnFilters.size}));\r\n const clearButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.clearFilters')});\r\n clearButton.onclick = () => {\r\n this.columnFilters.clear();\r\n this.refresh();\r\n }\r\n this.filterShortContainer.append(clearButton);\r\n }\r\n if (this.paramsInUrl) {\r\n this.setUrl();\r\n }\r\n }\r\n\r\n setUrl() {\r\n const query = new URLSearchParams(document.location.search)\r\n console.log('dddddcccc')\r\n console.log(query)\r\n let changed = false;\r\n var visibleColumns = this.visibleColumns.map(x => x.dataName).join();\r\n if (query.get('visibleColumns') || this.hiddenColumns.size) {\r\n if (query.get('visibleColumns') != visibleColumns) {\r\n query.set('visibleColumns', visibleColumns);\r\n changed = true;\r\n }\r\n }\r\n if (query.get('sort') || this.sort?.col) {\r\n if (query.get('sort') != this.sort?.col) {\r\n query.set('sort', this.sort?.col);\r\n changed = true;\r\n }\r\n }\r\n if (query.get('sortDesc') == 'true' || this.sort?.desc) {\r\n if ((query.get('sortDesc') == 'true') != this.sort?.desc) {\r\n query.set('sortDesc', this.sort?.desc ? 'true' : 'false');\r\n changed = true;\r\n }\r\n }\r\n if (query.get('columnFilters') || this.columnFilters) {\r\n if (query.get('columnFilters') != JSON.stringify(Array.from(this.columnFilters.entries()))) {\r\n query.set('columnFilters', JSON.stringify(Array.from(this.columnFilters.entries())));\r\n changed = true;\r\n }\r\n }\r\n if (changed) {\r\n const url = new URL(document.location);\r\n url.search = new URLSearchParams(query).toString();\r\n history.pushState(null, '', url.toString());\r\n }\r\n }\r\n\r\n readUrl() {\r\n\r\n const query = new URLSearchParams(document.location.search)\r\n if (query.get('visibleColumns')) {\r\n this.hiddenColumns = new Set(this.columns.map(x => x.dataName));\r\n for (const name of query.get('visibleColumns').split(',')) {\r\n this.hiddenColumns.delete(name);\r\n }\r\n }\r\n if (query.get('sort')) {\r\n this.sort = query.get('sort');\r\n }\r\n if (query.get('columnFilters')) {\r\n this.columnFilters = new Map(JSON.parse(query.get('columnFilters')));\r\n }\r\n }\r\n\r\n initInsideView() {\r\n if (this.insideView) {\r\n this.insideView.remove();\r\n }\r\n this.insideView = new this.insideViewClass(this);\r\n this.insertBefore(this.insideView, this.foot);\r\n this.insideView.refresh = () => this.refresh();\r\n this.insideView.onPaginationChanged = (start, limit) => {\r\n if (this.start != start) {\r\n this.start = start;\r\n //this.limit=limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n fillDataById(rows) {\r\n for (let row of rows) {\r\n this.dataById.set(parseInt(row.id), row);\r\n }\r\n }\r\n\r\n getSelectedData() {\r\n let data = Array.from(this.dataById).filter(([id, row]) => this.selected.has(id)).map(([id, row]) => row);\r\n if (data.length > 0) return data;\r\n else if (this.dataById[this.selectedMain])\r\n return [this.dataById[this.selectedMain]]\r\n else return [];\r\n }\r\n\r\n initFoot() {\r\n this.foot = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.foot');\r\n this.append(this.foot);\r\n let menuButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button.menuButton span.icon-settings');\r\n this.foot.append(menuButton)\r\n menuButton.onclick = e => this.showConfigPopup();\r\n this.pagination = new _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__.PaginationButtons();\r\n this.pagination.onpageclick = (page) => {\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n this.foot.append(this.pagination);\r\n this.filterShortContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.filterShortContainer');\r\n this.foot.append(this.filterShortContainer);\r\n this.searchForm = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('form', {className: 'search'});\r\n this.foot.append(this.searchForm);\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {\r\n name: 'search',\r\n type: 'search',\r\n placeholder: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.search')\r\n });\r\n this.searchForm.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)(searchInput));\r\n searchInput.oninput = e => {\r\n this.start = 0;\r\n this.refresh();\r\n }\r\n\r\n }\r\n\r\n get search() {\r\n if (!this.foot) return '';\r\n const searchForm = this.foot.querySelector('.search');\r\n if (!searchForm) return '';\r\n return searchForm.search.value;\r\n }\r\n\r\n showGlobalContextMenu(e) {\r\n let elements = [{\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.paginationMode'),\r\n icon: 'icon-pagination',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = false;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.scrollMode'),\r\n icon: 'icon-scroll',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = true;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.tableView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.listView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView;\r\n this.refresh();\r\n }\r\n }];\r\n if (this.allowTableEdit) {\r\n elements.push({\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.startMultiEdit'),\r\n icon: 'icon-edit',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n this.insideView.startMultiEdit();\r\n }\r\n });\r\n }\r\n _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__.ContextMenu.openContextMenu(e, elements);\r\n }\r\n\r\n resize() {\r\n let limit = this.limit;\r\n this.refreshLimit();\r\n if (limit != this.limit) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n multiEditChanged(id, data, save = false) {\r\n this.datasource.multiEditChanged(id, data, save);\r\n }\r\n\r\n showConfigPopup() {\r\n if (this.querySelector('config-popup')) {\r\n this.querySelector('config-popup').remove()\r\n } else {\r\n const popup = new _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__.ConfigPopup(this)\r\n this.append(popup)\r\n }\r\n }\r\n\r\n gotoUrl(url) {\r\n window.location.href = url;\r\n }\r\n\r\n onkeydown(e) {\r\n if (e.ctrlKey) {\r\n if (e.key == 'ArrowLeft' || e.key == 'ArrowRight') {\r\n let page = Math.floor(this.start / this.limit);\r\n page += (e.key == 'ArrowLeft' ? -1 : 1);\r\n if (page < 0) page = 0;\r\n else if (page>0 && page > Math.ceil(this.total / this.limit)-1) page = Math.ceil(this.total / this.limit)-1;\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define('data-view', ObjectsList);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/objectsList.js?");
178
178
 
179
179
  /***/ }),
180
180
 
@@ -184,7 +184,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
184
184
  \**********************************/
185
185
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
186
186
 
187
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PaginationButtons: () => (/* binding */ PaginationButtons)\n/* harmony export */ });\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n\r\n\r\nclass PaginationButtons extends HTMLElement {\r\n constructor() {\r\n super();\r\n this.currentPage = 0;\r\n this.totalPages = 0;\r\n this.onpageclick = null;\r\n }\r\n\r\n render() {\r\n let pagination = this.getPagination();\r\n while(this.firstChild){\r\n this.removeChild(this.firstChild)\r\n }\r\n for (let pageNumber of pagination) {\r\n if (pageNumber == null) {\r\n this.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('span', {text: '...'}));\r\n } else {\r\n let pageButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('button', {\r\n text: pageNumber + 1,\r\n className: pageNumber == this.currentPage ? 'active' : ''\r\n });\r\n this.append(pageButton);\r\n pageButton.onclick = () => {\r\n if (this.onpageclick) {\r\n this.onpageclick(pageNumber);\r\n }\r\n this.currentPage = pageNumber;\r\n this.render();\r\n };\r\n }\r\n }\r\n }\r\n\r\n getPagination() {\r\n const boxesCount = 7;\r\n let boxes = [];\r\n if (this.totalPages <= boxesCount) {\r\n for (let i = 0; i < this.totalPages; i++) {\r\n boxes.push(i);\r\n }\r\n } else if (this.currentPage <= (boxesCount - 1) / 2 - 1) {\r\n for (let i = 0; i <= boxesCount - 3; i++) {\r\n boxes.push(i);\r\n }\r\n boxes.push(null);\r\n boxes.push(this.totalPages - 1);\r\n } else if (this.currentPage >= this.totalPages - (boxesCount - 1) / 2 - 1) {\r\n boxes.push(0);\r\n boxes.push(null);\r\n for (\r\n let i = this.totalPages - Math.floor((boxesCount - 1) / 2) - 2;\r\n i < this.totalPages;\r\n i++\r\n ) {\r\n boxes.push(i);\r\n }\r\n } else {\r\n boxes.push(0);\r\n boxes.push(null);\r\n for (\r\n let i = this.currentPage - Math.floor((boxesCount - 5) / 2);\r\n i <= this.currentPage + Math.ceil((boxesCount - 5) / 2);\r\n i++\r\n ) {\r\n boxes.push(i);\r\n }\r\n boxes.push(null);\r\n boxes.push(this.totalPages - 1);\r\n }\r\n return boxes;\r\n }\r\n}\r\n\r\ncustomElements.define('pagination-buttons', PaginationButtons);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/paginationButtons.js?");
187
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PaginationButtons: () => (/* binding */ PaginationButtons)\n/* harmony export */ });\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n\r\n\r\nclass PaginationButtons extends HTMLElement {\r\n constructor() {\r\n super();\r\n this.currentPage = 0;\r\n this.totalPages = 0;\r\n this.onpageclick = null;\r\n this.buttonsBox = (0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('div', {className: 'buttonsBox'});\r\n this.append(this.buttonsBox);\r\n }\r\n\r\n render() {\r\n let pagination = this.getPagination();\r\n while (this.buttonsBox.firstChild) {\r\n this.buttonsBox.removeChild(this.buttonsBox.firstChild)\r\n }\r\n const back = this.buttonsBox.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('button', {\r\n text: '<<', disabled: this.currentPage == 0, onclick: () => {\r\n if (this.currentPage > 0) {\r\n this.currentPage--;\r\n if (this.onpageclick) {\r\n this.onpageclick(this.currentPage);\r\n }\r\n this.render();\r\n }\r\n return false;\r\n }\r\n }));\r\n for (let pageNumber of pagination) {\r\n if (pageNumber == null) {\r\n this.buttonsBox.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('span', {text: '...'}));\r\n } else {\r\n let pageButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('button', {\r\n text: pageNumber + 1,\r\n className: pageNumber == this.currentPage ? 'active' : ''\r\n });\r\n this.buttonsBox.append(pageButton);\r\n pageButton.onclick = () => {\r\n if (this.onpageclick) {\r\n this.onpageclick(pageNumber);\r\n }\r\n this.currentPage = pageNumber;\r\n this.render();\r\n };\r\n }\r\n }\r\n const forward = this.buttonsBox.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_0__.create)('button', {\r\n text: '>>', disabled: this.currentPage == this.totalPages - 1, onclick: () => {\r\n if (this.currentPage < this.totalPages - 1) {\r\n this.currentPage++;\r\n if (this.onpageclick) {\r\n this.onpageclick(this.currentPage);\r\n }\r\n this.render();\r\n }\r\n return false;\r\n }\r\n }));\r\n\r\n }\r\n\r\n getPagination() {\r\n const boxesCount = 7;\r\n let boxes = [];\r\n if (this.totalPages <= boxesCount) {\r\n for (let i = 0; i < this.totalPages; i++) {\r\n boxes.push(i);\r\n }\r\n } else if (this.currentPage <= (boxesCount - 1) / 2 - 1) {\r\n for (let i = 0; i <= boxesCount - 3; i++) {\r\n boxes.push(i);\r\n }\r\n boxes.push(null);\r\n boxes.push(this.totalPages - 1);\r\n } else if (this.currentPage >= this.totalPages - (boxesCount - 1) / 2 - 1) {\r\n boxes.push(0);\r\n boxes.push(null);\r\n for (\r\n let i = this.totalPages - Math.floor((boxesCount - 1) / 2) - 2;\r\n i < this.totalPages;\r\n i++\r\n ) {\r\n boxes.push(i);\r\n }\r\n } else {\r\n boxes.push(0);\r\n boxes.push(null);\r\n for (\r\n let i = this.currentPage - Math.floor((boxesCount - 5) / 2);\r\n i <= this.currentPage + Math.ceil((boxesCount - 5) / 2);\r\n i++\r\n ) {\r\n boxes.push(i);\r\n }\r\n boxes.push(null);\r\n boxes.push(this.totalPages - 1);\r\n }\r\n return boxes;\r\n }\r\n}\r\n\r\ncustomElements\r\n .define(\r\n 'pagination-buttons'\r\n ,\r\n PaginationButtons\r\n )\r\n;\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/paginationButtons.js?");
188
188
 
189
189
  /***/ }),
190
190
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@green-code-studio/objects-list",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "main": "src/index.js",
5
5
  "author": "Mateusz Krawczyk",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@ export class ObjectsList extends HTMLElement {
29
29
  this.initFoot();
30
30
  this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));
31
31
  addEventListener('resize', e => this.resize());
32
+ this.addEventListener('keydown', e => this.onkeydown(e));
32
33
  this.infiniteScrollEnabled = false;
33
34
  }
34
35
 
@@ -277,6 +278,19 @@ export class ObjectsList extends HTMLElement {
277
278
  gotoUrl(url) {
278
279
  window.location.href = url;
279
280
  }
281
+
282
+ onkeydown(e) {
283
+ if (e.ctrlKey) {
284
+ if (e.key == 'ArrowLeft' || e.key == 'ArrowRight') {
285
+ let page = Math.floor(this.start / this.limit);
286
+ page += (e.key == 'ArrowLeft' ? -1 : 1);
287
+ if (page < 0) page = 0;
288
+ else if (page>0 && page > Math.ceil(this.total / this.limit)-1) page = Math.ceil(this.total / this.limit)-1;
289
+ this.start = page * this.limit;
290
+ this.refresh();
291
+ }
292
+ }
293
+ }
280
294
  }
281
295
 
282
296
  customElements.define('data-view', ObjectsList);
@@ -6,22 +6,36 @@ export class PaginationButtons extends HTMLElement {
6
6
  this.currentPage = 0;
7
7
  this.totalPages = 0;
8
8
  this.onpageclick = null;
9
+ this.buttonsBox = create('div', {className: 'buttonsBox'});
10
+ this.append(this.buttonsBox);
9
11
  }
10
12
 
11
13
  render() {
12
14
  let pagination = this.getPagination();
13
- while(this.firstChild){
14
- this.removeChild(this.firstChild)
15
+ while (this.buttonsBox.firstChild) {
16
+ this.buttonsBox.removeChild(this.buttonsBox.firstChild)
15
17
  }
18
+ const back = this.buttonsBox.append(create('button', {
19
+ text: '<<', disabled: this.currentPage == 0, onclick: () => {
20
+ if (this.currentPage > 0) {
21
+ this.currentPage--;
22
+ if (this.onpageclick) {
23
+ this.onpageclick(this.currentPage);
24
+ }
25
+ this.render();
26
+ }
27
+ return false;
28
+ }
29
+ }));
16
30
  for (let pageNumber of pagination) {
17
31
  if (pageNumber == null) {
18
- this.append(create('span', {text: '...'}));
32
+ this.buttonsBox.append(create('span', {text: '...'}));
19
33
  } else {
20
34
  let pageButton = create('button', {
21
35
  text: pageNumber + 1,
22
36
  className: pageNumber == this.currentPage ? 'active' : ''
23
37
  });
24
- this.append(pageButton);
38
+ this.buttonsBox.append(pageButton);
25
39
  pageButton.onclick = () => {
26
40
  if (this.onpageclick) {
27
41
  this.onpageclick(pageNumber);
@@ -31,6 +45,19 @@ export class PaginationButtons extends HTMLElement {
31
45
  };
32
46
  }
33
47
  }
48
+ const forward = this.buttonsBox.append(create('button', {
49
+ text: '>>', disabled: this.currentPage == this.totalPages - 1, onclick: () => {
50
+ if (this.currentPage < this.totalPages - 1) {
51
+ this.currentPage++;
52
+ if (this.onpageclick) {
53
+ this.onpageclick(this.currentPage);
54
+ }
55
+ this.render();
56
+ }
57
+ return false;
58
+ }
59
+ }));
60
+
34
61
  }
35
62
 
36
63
  getPagination() {
@@ -73,4 +100,10 @@ export class PaginationButtons extends HTMLElement {
73
100
  }
74
101
  }
75
102
 
76
- customElements.define('pagination-buttons', PaginationButtons);
103
+ customElements
104
+ .define(
105
+ 'pagination-buttons'
106
+ ,
107
+ PaginationButtons
108
+ )
109
+ ;