@green-code-studio/objects-list 0.1.0 → 0.1.2

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 ADDED
@@ -0,0 +1,16 @@
1
+ import {ObjectsList} from "../src/index.js";
2
+
3
+
4
+ console.log('aa');
5
+ const dataSource={
6
+ async get(options){
7
+ return {
8
+ rows:[
9
+ {id:1, name:'John'},
10
+ {id:2, name:'Doe'},
11
+ {id:3, name:'Smith'},
12
+ ]
13
+ }
14
+ }
15
+ }
16
+ const objectList=new ObjectsList(dataSource)
@@ -0,0 +1,6 @@
1
+ <!doctype>
2
+ <html>
3
+ <body>
4
+ <script src="demo.js"></script>
5
+ </body>
6
+ </html>
package/dist/index.js ADDED
@@ -0,0 +1,256 @@
1
+ /*
2
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
3
+ * This devtool is neither made for production nor for readable output files.
4
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
5
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6
+ * or disable the default devtool with "devtool: false".
7
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8
+ */
9
+ /******/ (() => { // webpackBootstrap
10
+ /******/ "use strict";
11
+ /******/ var __webpack_modules__ = ({
12
+
13
+ /***/ "./node_modules/@green-code-studio/internationalization/i18nNode.js":
14
+ /*!**************************************************************************!*\
15
+ !*** ./node_modules/@green-code-studio/internationalization/i18nNode.js ***!
16
+ \**************************************************************************/
17
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
18
+
19
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ I18nNode: () => (/* binding */ I18nNode)\n/* harmony export */ });\n/* harmony import */ var _i18nNodeNotFoundException__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./i18nNodeNotFoundException */ \"./node_modules/@green-code-studio/internationalization/i18nNodeNotFoundException.js\");\n\r\n\r\nclass I18nNode {\r\n constructor(values, childNodes) {\r\n this._values = new Map()\r\n for (let {lang, value} of values) {\r\n this.addValue(lang, value);\r\n }\r\n this._children = new Map()\r\n for (let {name, node} of childNodes) {\r\n this.addChild(name, node);\r\n }\r\n }\r\n\r\n addChild(name, node) {\r\n this._children.set(name, node);\r\n }\r\n\r\n addValue(lang, value) {\r\n this._values.set(lang, value);\r\n }\r\n\r\n getChild(name) {\r\n if (this._children.has(name))\r\n return this._children.get(name);\r\n else\r\n throw new _i18nNodeNotFoundException__WEBPACK_IMPORTED_MODULE_0__.I18nNodeNotFoundException()\r\n }\r\n\r\n getValue(languageHierarchy) {\r\n let bestLang = languageHierarchy.pickBest(Array.from(this._values.keys()));\r\n return this._values.get(bestLang);\r\n }\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./node_modules/@green-code-studio/internationalization/i18nNode.js?");
20
+
21
+ /***/ }),
22
+
23
+ /***/ "./node_modules/@green-code-studio/internationalization/i18nNodeNotFoundException.js":
24
+ /*!*******************************************************************************************!*\
25
+ !*** ./node_modules/@green-code-studio/internationalization/i18nNodeNotFoundException.js ***!
26
+ \*******************************************************************************************/
27
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28
+
29
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ I18nNodeNotFoundException: () => (/* binding */ I18nNodeNotFoundException)\n/* harmony export */ });\nclass I18nNodeNotFoundException extends Error{\r\n\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./node_modules/@green-code-studio/internationalization/i18nNodeNotFoundException.js?");
30
+
31
+ /***/ }),
32
+
33
+ /***/ "./node_modules/@green-code-studio/internationalization/i18nTextValue.js":
34
+ /*!*******************************************************************************!*\
35
+ !*** ./node_modules/@green-code-studio/internationalization/i18nTextValue.js ***!
36
+ \*******************************************************************************/
37
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38
+
39
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ I18nTextValue: () => (/* binding */ I18nTextValue)\n/* harmony export */ });\n/* harmony import */ var _i18nValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./i18nValue */ \"./node_modules/@green-code-studio/internationalization/i18nValue.js\");\n\r\n\r\nclass I18nTextValue extends _i18nValue__WEBPACK_IMPORTED_MODULE_0__.I18nValue {\r\n constructor(value) {\r\n super();\r\n this.value = value;\r\n }\r\n\r\n toString() {\r\n return this.value;\r\n }\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./node_modules/@green-code-studio/internationalization/i18nTextValue.js?");
40
+
41
+ /***/ }),
42
+
43
+ /***/ "./node_modules/@green-code-studio/internationalization/i18nValue.js":
44
+ /*!***************************************************************************!*\
45
+ !*** ./node_modules/@green-code-studio/internationalization/i18nValue.js ***!
46
+ \***************************************************************************/
47
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
48
+
49
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ I18nValue: () => (/* binding */ I18nValue)\n/* harmony export */ });\nclass I18nValue{\r\n\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./node_modules/@green-code-studio/internationalization/i18nValue.js?");
50
+
51
+ /***/ }),
52
+
53
+ /***/ "./src/i18n.xml":
54
+ /*!**********************!*\
55
+ !*** ./src/i18n.xml ***!
56
+ \**********************/
57
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58
+
59
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ node: () => (/* binding */ node),\n/* harmony export */ t: () => (/* binding */ t),\n/* harmony export */ translator: () => (/* binding */ translator)\n/* harmony export */ });\n/* harmony import */ var _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @green-code-studio/internationalization/i18nNode.js */ \"./node_modules/@green-code-studio/internationalization/i18nNode.js\");\n/* harmony import */ var _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @green-code-studio/internationalization/i18nTextValue.js */ \"./node_modules/@green-code-studio/internationalization/i18nTextValue.js\");\n/* harmony import */ var _green_code_studio_internationalization_translator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @green-code-studio/internationalization/translator.js */ \"./node_modules/@green-code-studio/internationalization/translator.js\");\n/* harmony import */ var _green_code_studio_internationalization_languagesHierarchy_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @green-code-studio/internationalization/languagesHierarchy.js */ \"./node_modules/@green-code-studio/internationalization/languagesHierarchy.js\");\n\n\n\n\n\nconsole.log(_green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode);\nconst node = {name:\"\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([],[{name:\"objectList\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([],[{name:\"search\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Szukaj\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Search\")}],[])},{name:\"paginationMode\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Tryb paginacji\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Pagination mode\")}],[])},{name:\"scrollMode\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Tryb scrollowania\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Scroll mode\")}],[])},{name:\"tableView\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Widok tabeli\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Table view\")}],[])},{name:\"listView\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Widok listy\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"List view\")}],[])},{name:\"startMultiEdit\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Rozpocznij edycję wielu\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Start multi-edit\")}],[])},{name:\"saveRow\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Zapisz wiersz\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Save a row\")}],[])},{name:\"mode\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Tryb\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Mode\")}],[])},{name:\"view\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Widok\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"View\")}],[])},{name:\"columnEnabled\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Kolumna widoczna\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Column enabled\")}],[])},{name:\"columnName\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Nazwa kolumny\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Column name\")}],[])},{name:\"columnFilter\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Filtr\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Filter\")}],[])}])},{name:\"filter\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([],[{name:\"none\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Brak\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"None\")}],[])},{name:\"equals\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Równa się\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Equals\")}],[])},{name:\"lessThan\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Mniejsze niż\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Less than\")}],[])},{name:\"greaterThan\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Większe niż\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Greater than\")}],[])},{name:\"contains\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Zawiera\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Contains\")}],[])},{name:\"oneOf\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Jedno z\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"One of\")}],[])},{name:\"empty\", node:new _green_code_studio_internationalization_i18nNode_js__WEBPACK_IMPORTED_MODULE_0__.I18nNode([{lang:\"pl\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Puste\")},{lang:\"en\", value: new _green_code_studio_internationalization_i18nTextValue_js__WEBPACK_IMPORTED_MODULE_1__.I18nTextValue(\"Empty\")}],[])}])}])};\nconst translator=new _green_code_studio_internationalization_translator_js__WEBPACK_IMPORTED_MODULE_2__.Translator(_green_code_studio_internationalization_languagesHierarchy_js__WEBPACK_IMPORTED_MODULE_3__.LanguagesHierarchy.default, node.node);\nfunction t(q){var x=translator.translate(q);return x?x.toString():'';}\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/i18n.xml?");
60
+
61
+ /***/ }),
62
+
63
+ /***/ "./node_modules/@green-code-studio/internationalization/languagesHierarchy.js":
64
+ /*!************************************************************************************!*\
65
+ !*** ./node_modules/@green-code-studio/internationalization/languagesHierarchy.js ***!
66
+ \************************************************************************************/
67
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
68
+
69
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LanguagesHierarchy: () => (/* binding */ LanguagesHierarchy)\n/* harmony export */ });\nclass LanguagesHierarchy {\r\n constructor(langs = []) {\r\n this.langs = langs;\r\n }\r\n\r\n pickBest(available) {\r\n for (let lang of this.langs) {\r\n if (!lang) continue;\r\n for (let x of available) {\r\n if (lang == x) return x;\r\n }\r\n for (let x of available) {\r\n if (x.substr(0,2).toLowerCase()==lang.substr(0,2).toLowerCase()) return x;\r\n }\r\n }\r\n return available[0];\r\n }\r\n\r\n static readFromUser() {\r\n return new LanguagesHierarchy([document.documentElement.lang, ...navigator.languages]);\r\n }\r\n}\r\n\r\nLanguagesHierarchy.default = LanguagesHierarchy.readFromUser();\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./node_modules/@green-code-studio/internationalization/languagesHierarchy.js?");
70
+
71
+ /***/ }),
72
+
73
+ /***/ "./node_modules/@green-code-studio/internationalization/translator.js":
74
+ /*!****************************************************************************!*\
75
+ !*** ./node_modules/@green-code-studio/internationalization/translator.js ***!
76
+ \****************************************************************************/
77
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
78
+
79
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Translator: () => (/* binding */ Translator)\n/* harmony export */ });\n\r\nclass Translator {\r\n constructor(languageHierarchy,node) {\r\n this.languageHierarchy=languageHierarchy;\r\n this.rootNode = node;\r\n }\r\n\r\n translate(q) {\r\n let path = q.split('.');\r\n let node = this.rootNode;\r\n for (let nodeName of path) {\r\n node = node.getChild(nodeName);\r\n }\r\n return node.getValue(this.languageHierarchy);\r\n }\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./node_modules/@green-code-studio/internationalization/translator.js?");
80
+
81
+ /***/ }),
82
+
83
+ /***/ "./src/ConfigPopup.mpts":
84
+ /*!******************************!*\
85
+ !*** ./src/ConfigPopup.mpts ***!
86
+ \******************************/
87
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
88
+
89
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(variables){const _0=document.createDocumentFragment();const _1=document.createElement(\"form\");const _2=document.createTextNode(\"\\r\\n \");_1.append(_2);const _3=document.createElement(\"label\");const _4=document.createTextNode(\"\\r\\n \");_3.append(_4);const _5=document.createElement(\"span\");const _6=document.createTextNode(variables[\"t\"](\"objectList.mode\"));_5.append(_6);_3.append(_5);const _7=document.createTextNode(\"\\r\\n \");_3.append(_7);const _8=document.createElement(\"select\");const _9=\"mode\";if(typeof _9==='function')_8[\"class\"]=_9;else if(_9!== undefined&&_9!== null&&_9!== false) _8.setAttribute(\"class\",_9);const _10=document.createTextNode(\"\\r\\n \");_8.append(_10);const _11=document.createElement(\"option\");const _12=\"paginationMode\";if(typeof _12==='function')_11[\"value\"]=_12;else if(_12!== undefined&&_12!== null&&_12!== false) _11.setAttribute(\"value\",_12);const _13=document.createTextNode(variables[\"t\"](\"objectList.paginationMode\"));_11.append(_13);_8.append(_11);const _14=document.createTextNode(\"\\r\\n \");_8.append(_14);const _15=document.createElement(\"option\");const _16=\"scrollMode\";if(typeof _16==='function')_15[\"value\"]=_16;else if(_16!== undefined&&_16!== null&&_16!== false) _15.setAttribute(\"value\",_16);const _17=document.createTextNode(variables[\"t\"](\"objectList.scrollMode\"));_15.append(_17);_8.append(_15);const _18=document.createTextNode(\"\\r\\n \");_8.append(_18);_3.append(_8);const _19=document.createTextNode(\"\\r\\n \");_3.append(_19);_1.append(_3);const _20=document.createTextNode(\"\\r\\n \");_1.append(_20);const _21=document.createElement(\"label\");const _22=document.createTextNode(\"\\r\\n \");_21.append(_22);const _23=document.createElement(\"span\");const _24=document.createTextNode(variables[\"t\"](\"objectList.view\"));_23.append(_24);_21.append(_23);const _25=document.createTextNode(\"\\r\\n \");_21.append(_25);const _26=document.createElement(\"select\");const _27=\"view\";if(typeof _27==='function')_26[\"class\"]=_27;else if(_27!== undefined&&_27!== null&&_27!== false) _26.setAttribute(\"class\",_27);const _28=document.createTextNode(\"\\r\\n \");_26.append(_28);const _29=document.createElement(\"option\");const _30=\"tableView\";if(typeof _30==='function')_29[\"value\"]=_30;else if(_30!== undefined&&_30!== null&&_30!== false) _29.setAttribute(\"value\",_30);const _31=document.createTextNode(variables[\"t\"](\"objectList.tableView\"));_29.append(_31);_26.append(_29);const _32=document.createTextNode(\"\\r\\n \");_26.append(_32);const _33=document.createElement(\"option\");const _34=\"listView\";if(typeof _34==='function')_33[\"value\"]=_34;else if(_34!== undefined&&_34!== null&&_34!== false) _33.setAttribute(\"value\",_34);const _35=document.createTextNode(variables[\"t\"](\"objectList.listView\"));_33.append(_35);_26.append(_33);const _36=document.createTextNode(\"\\r\\n \");_26.append(_36);_21.append(_26);const _37=document.createTextNode(\"\\r\\n \");_21.append(_37);_1.append(_21);const _38=document.createTextNode(\"\\r\\n \");_1.append(_38);let _39=document.createDocumentFragment();for(let [_foreachKey,_foreachValue] of Object.entries(variables[\"categories\"])){let category = _foreachValue;const _40=document.createTextNode(\"\\r\\n \");_39.append(_40);const _41=document.createTextNode(category[\"name\"]);_39.append(_41);const _42=document.createTextNode(\"\\r\\n\\r\\n \");_39.append(_42);const _43=document.createElement(\"table\");const _44=document.createTextNode(\"\\r\\n \");_43.append(_44);const _45=document.createElement(\"thead\");const _46=document.createTextNode(\"\\r\\n \");_45.append(_46);const _47=document.createElement(\"tr\");const _48=document.createTextNode(\"\\r\\n \");_47.append(_48);const _49=document.createElement(\"th\");const _50=document.createTextNode(variables[\"t\"](\"objectList.columnEnabled\"));_49.append(_50);_47.append(_49);const _51=document.createTextNode(\"\\r\\n \");_47.append(_51);const _52=document.createElement(\"th\");const _53=document.createTextNode(variables[\"t\"](\"objectList.columnName\"));_52.append(_53);_47.append(_52);const _54=document.createTextNode(\"\\r\\n \");_47.append(_54);const _55=document.createElement(\"th\");const _56=document.createTextNode(variables[\"t\"](\"objectList.columnFilter\"));_55.append(_56);_47.append(_55);const _57=document.createTextNode(\"\\r\\n \");_47.append(_57);_45.append(_47);const _58=document.createTextNode(\"\\r\\n \");_45.append(_58);_43.append(_45);const _59=document.createTextNode(\"\\r\\n \");_43.append(_59);const _60=document.createElement(\"tbody\");const _61=document.createTextNode(\"\\r\\n\\r\\n \");_60.append(_61);let _62=document.createDocumentFragment();for(let [_foreachKey,_foreachValue] of Object.entries(category[\"columns\"])){let column = _foreachValue;const _63=document.createTextNode(\"\\r\\n \");_62.append(_63);const _64=document.createElement(\"tr\");const _65=document.createTextNode(\"\\r\\n \");_64.append(_65);const _66=document.createElement(\"td\");const _67=document.createTextNode(\"\\r\\n \");_66.append(_67);const _68=document.createElement(\"input\");const _69=\"checkbox\";if(typeof _69==='function')_68[\"type\"]=_69;else if(_69!== undefined&&_69!== null&&_69!== false) _68.setAttribute(\"type\",_69);const _70=column[\"dataName\"];if(typeof _70==='function')_68[\"data-name\"]=_70;else if(_70!== undefined&&_70!== null&&_70!== false) _68.setAttribute(\"data-name\",_70);_66.append(_68);const _71=document.createTextNode(\"\\r\\n \");_66.append(_71);_64.append(_66);const _72=document.createTextNode(\"\\r\\n \");_64.append(_72);const _73=document.createElement(\"td\");const _74=document.createTextNode(\"\\r\\n \");_73.append(_74);const _75=document.createTextNode(column[\"name\"]);_73.append(_75);const _76=document.createTextNode(\"\\r\\n \");_73.append(_76);_64.append(_73);const _77=document.createTextNode(\"\\r\\n \");_64.append(_77);const _78=document.createElement(\"td\");const _79=\"filter\";if(typeof _79==='function')_78[\"class\"]=_79;else if(_79!== undefined&&_79!== null&&_79!== false) _78.setAttribute(\"class\",_79);const _80=column[\"dataName\"];if(typeof _80==='function')_78[\"data-name\"]=_80;else if(_80!== undefined&&_80!== null&&_80!== false) _78.setAttribute(\"data-name\",_80);const _81=document.createTextNode(\"\\r\\n\\r\\n \");_78.append(_81);_64.append(_78);const _82=document.createTextNode(\"\\r\\n \");_64.append(_82);_62.append(_64);const _83=document.createTextNode(\"\\r\\n \");_62.append(_83);}_60.append(_62);const _84=document.createTextNode(\"\\r\\n \");_60.append(_84);_43.append(_60);const _85=document.createTextNode(\"\\r\\n \");_43.append(_85);_39.append(_43);const _86=document.createTextNode(\"\\r\\n \");_39.append(_86);}_1.append(_39);const _87=document.createTextNode(\"\\r\\n\");_1.append(_87);_0.append(_1);const _88=document.createTextNode(\"\\r\\n\");_0.append(_88);return _0}\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/ConfigPopup.mpts?");
90
+
91
+ /***/ }),
92
+
93
+ /***/ "./src/ColumnFilter.js":
94
+ /*!*****************************!*\
95
+ !*** ./src/ColumnFilter.js ***!
96
+ \*****************************/
97
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
98
+
99
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ColumnFilter: () => (/* binding */ ColumnFilter)\n/* harmony export */ });\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n\r\n\r\nclass ColumnFilter extends HTMLElement {\r\n constructor(props) {\r\n super(props);\r\n this.select = this.addChild('select')\r\n this.select.addChild('option', {value: 'none', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.none')})\r\n this.select.addChild('option', {value: 'equals', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.equals')})\r\n this.select.addChild('option', {value: 'less', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.lessThan')})\r\n this.select.addChild('option', {value: 'more', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.greaterThan')})\r\n this.select.addChild('option', {value: 'contains', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.contains')})\r\n this.select.addChild('option', {value: 'oneOf', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.oneOf')})\r\n this.select.addChild('option', {value: 'empty', text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_0__.t)('filter.empty')})\r\n this.input = this.addChild('input')\r\n this.input.oninput = () => this.emit();\r\n this.select.onchange = () => {\r\n this.updateInput();\r\n this.emit();\r\n }\r\n this.updateInput()\r\n }\r\n\r\n updateInput() {\r\n if (this.select.value == 'none' || this.select.value == 'empty') {\r\n this.input.style.display = 'none'\r\n } else if (this.select.value == 'less' || this.select.value == 'more') {\r\n this.input.style.display = ''\r\n this.input.type = 'number';\r\n } else {\r\n this.input.style.display = ''\r\n this.input.type = 'text';\r\n }\r\n }\r\n\r\n emit() {\r\n this.dispatchEvent(new CustomEvent('x-filter', {detail: {type: this.select.value, value: this.input.value}}))\r\n }\r\n}\r\n\r\n\r\ncustomElements.define('column-filter', ColumnFilter);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/ColumnFilter.js?");
100
+
101
+ /***/ }),
102
+
103
+ /***/ "./src/ConfigPopup.js":
104
+ /*!****************************!*\
105
+ !*** ./src/ConfigPopup.js ***!
106
+ \****************************/
107
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
108
+
109
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ConfigPopup: () => (/* binding */ ConfigPopup)\n/* harmony export */ });\n/* harmony import */ var _ConfigPopup_mpts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ConfigPopup.mpts */ \"./src/ConfigPopup.mpts\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _ColumnFilter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ColumnFilter.js */ \"./src/ColumnFilter.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nclass ConfigPopup extends HTMLElement {\r\n constructor(objectsList) {\r\n super();\r\n this.append((0,_ConfigPopup_mpts__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\r\n t: _i18n_xml__WEBPACK_IMPORTED_MODULE_1__.t,\r\n categories: [...objectsList.columns.groupBy(c => c.category)]\r\n .map(([category, columns]) => ({name: category ?? '', columns}))\r\n }))\r\n this.querySelector('.mode').onchange = () => {\r\n objectsList.infiniteScrollEnabled = this.querySelector('.mode').value == 'scrollMode'\r\n objectsList.refresh()\r\n }\r\n this.querySelector('.view').onchange = () => {\r\n if (this.querySelector('.view').value == 'tableView')\r\n objectsList.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_2__.TableView\r\n else\r\n objectsList.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_3__.ListView\r\n objectsList.refresh()\r\n }\r\n this.addEventListener('blur', () => {\r\n if(!this.matches(':focus-within, :focus'))\r\n this.remove();\r\n })\r\n this.querySelector('select').focus()\r\n console.log('ssss')\r\n for (const checkbox of this.querySelectorAll('table input[type=\"checkbox\"]')) {\r\n checkbox.checked = !objectsList.hiddenColumns.has(checkbox.dataset.name)\r\n checkbox.onchange = () => {\r\n if (checkbox.checked)\r\n objectsList.hiddenColumns.delete(checkbox.dataset.name)\r\n else\r\n objectsList.hiddenColumns.add(checkbox.dataset.name)\r\n\r\n objectsList.refresh()\r\n }\r\n }\r\n\r\n for (const filterContainer of this.querySelectorAll('table .filter')) {\r\n const filter=new _ColumnFilter_js__WEBPACK_IMPORTED_MODULE_4__.ColumnFilter();\r\n filterContainer.append(filter)\r\n filter.addEventListener('x-filter', (e) => {\r\n console.log('dddd',e)\r\n objectsList.columnFilters.set(filterContainer.dataset.name, e.detail)\r\n objectsList.refresh()\r\n });\r\n }\r\n this.tabIndex = 0\r\n setTimeout(()=>this.focus(), 1)\r\n setTimeout(() => this.checkFocus(), 100)\r\n }\r\n checkFocus() {\r\n console.log('checkFocus')\r\n if (!this.matches(':focus-within, :focus'))\r\n this.remove();\r\n\r\n if(this.parentNode)\r\n setTimeout(() => this.checkFocus(), 100)\r\n }\r\n}\r\n\r\ncustomElements.define('config-popup', ConfigPopup);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/ConfigPopup.js?");
110
+
111
+ /***/ }),
112
+
113
+ /***/ "./src/abstractView.js":
114
+ /*!*****************************!*\
115
+ !*** ./src/abstractView.js ***!
116
+ \*****************************/
117
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
118
+
119
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractView: () => (/* binding */ AbstractView)\n/* harmony export */ });\nclass AbstractView extends HTMLElement {\r\n loadData(data, start, limit, infiniteScrollEnabled) {\r\n this.style.setProperty('--height', (data.total * this.rowHeight) + 'px');\r\n let top = 0;\r\n let isOdd = true;\r\n if (infiniteScrollEnabled) {\r\n top = this.rowHeight * start;\r\n isOdd = start % 2 == 0;\r\n }\r\n let newChildren = [];\r\n for (let row of data.rows) {\r\n let tr = this.generateRow(row);\r\n tr.style.top = `${top}px`;\r\n tr.classList.toggle('odd', isOdd)\r\n tr.classList.toggle('even', !isOdd)\r\n newChildren.push(tr);\r\n top += this.rowHeight;\r\n isOdd = !isOdd;\r\n }\r\n let oldChildren = Array.from(this.body.children);\r\n for (let tr of oldChildren.filter(tr => !newChildren.includes(tr) && !tr.matches(':focus'))) {\r\n tr.remove();\r\n }\r\n\r\n for (let tr of newChildren.filter(tr => !oldChildren.includes(tr))) {\r\n this.body.appendChild(tr);\r\n }\r\n }\r\n\r\n onScroll(e) {\r\n if (this.onPaginationChanged) {\r\n let start = Math.round(this.scrollTop / this.rowHeight);\r\n let passedStart = Math.floor(start / 20) * 20 - 20;\r\n if (passedStart < 0)\r\n passedStart = 0;\r\n this.onPaginationChanged(passedStart);\r\n }\r\n }\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/abstractView.js?");
120
+
121
+ /***/ }),
122
+
123
+ /***/ "./src/idsSet.js":
124
+ /*!***********************!*\
125
+ !*** ./src/idsSet.js ***!
126
+ \***********************/
127
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
128
+
129
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IdsSet: () => (/* binding */ IdsSet)\n/* harmony export */ });\nclass IdsSet {\r\n constructor() {\r\n this.selected = new Set();\r\n this.notSelected = new Set();\r\n this.isSelectedAll = false;\r\n }\r\n\r\n clear() {\r\n this.selected.clear();\r\n this.notSelected.clear();\r\n this.isSelectedAll = false;\r\n }\r\n has(id){\r\n if(this.isSelectedAll){\r\n return !this.notSelected.has(id?.toString())\r\n }else{\r\n return this.selected.has(id?.toString())\r\n }\r\n }\r\n add(id){\r\n if(this.isSelectedAll){\r\n this.notSelected.delete(id?.toString())\r\n }else{\r\n this.selected.add(id?.toString())\r\n }\r\n }\r\n delete(id){\r\n if(this.isSelectedAll){\r\n this.notSelected.add(id?.toString())\r\n }else{\r\n this.selected.delete(id?.toString())\r\n }\r\n }\r\n selectAll(){\r\n this.clear();\r\n this.isSelectedAll=true;\r\n }\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/idsSet.js?");
130
+
131
+ /***/ }),
132
+
133
+ /***/ "./src/index.js":
134
+ /*!**********************!*\
135
+ !*** ./src/index.js ***!
136
+ \**********************/
137
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
138
+
139
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractView: () => (/* reexport safe */ _abstractView_js__WEBPACK_IMPORTED_MODULE_1__.AbstractView),\n/* harmony export */ ColumnFilter: () => (/* reexport safe */ _ColumnFilter_js__WEBPACK_IMPORTED_MODULE_2__.ColumnFilter),\n/* harmony export */ ConfigPopup: () => (/* reexport safe */ _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_3__.ConfigPopup),\n/* harmony export */ ListView: () => (/* reexport safe */ _listView_js__WEBPACK_IMPORTED_MODULE_5__.ListView),\n/* harmony export */ ObjectsList: () => (/* reexport safe */ _objectsList_js__WEBPACK_IMPORTED_MODULE_0__.ObjectsList),\n/* harmony export */ TableView: () => (/* reexport safe */ _tableView_js__WEBPACK_IMPORTED_MODULE_4__.TableView)\n/* harmony export */ });\n/* harmony import */ var _objectsList_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./objectsList.js */ \"./src/objectsList.js\");\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n/* harmony import */ var _ColumnFilter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ColumnFilter.js */ \"./src/ColumnFilter.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/index.js?");
140
+
141
+ /***/ }),
142
+
143
+ /***/ "./src/listView.js":
144
+ /*!*************************!*\
145
+ !*** ./src/listView.js ***!
146
+ \*************************/
147
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
148
+
149
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ListView: () => (/* binding */ ListView)\n/* harmony export */ });\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n\r\n\r\nclass ListView extends _abstractView_js__WEBPACK_IMPORTED_MODULE_0__.AbstractView {\r\n constructor(objectsList) {\r\n super();\r\n this.objectsList = objectsList;\r\n this.init();\r\n window.dbgList = this;\r\n }\r\n\r\n init() {\r\n this.body = this.addChild('.bodyContainer').addChild('.body');\r\n this.addEventListener('scroll', this.onScroll.bind(this));\r\n }\r\n\r\n calcMaxVisibleItems(height) {\r\n return Math.floor((height) / this.rowHeight);\r\n }\r\n\r\n get rowHeight() {\r\n return Math.max(63, this.objectsList.visibleColumns.length * 21) + 20;\r\n }\r\n\r\n generateRow(data) {\r\n let tr = this.body.querySelector(`.tr[data-row=\"${data.id}\"]`);\r\n if (!tr) {\r\n tr = document.create('.tr');\r\n tr.draggable = true;\r\n }\r\n tr.classList.toggle('selected', this.objectsList.selected.has(data.id))\r\n this.fillRowContent(tr, data);\r\n return tr;\r\n }\r\n\r\n fillRowContent(tr, data) {\r\n tr.children.removeAll();\r\n tr.addChild('.icon', {className: this.objectsList.icon});\r\n for (let column of this.objectsList.visibleColumns) {\r\n let keyValue = tr.addChild('.keyValue');\r\n let key = keyValue.addChild('strong', {text: column.name + ': '});\r\n let value = keyValue.addChild('span');\r\n value.append((column.content?.call(column,data)||data[column.dataName]));\r\n }\r\n let actionsTd = tr.addChild('.td.actions');\r\n let actions = this.objectsList.generateActions([data], 'row');\r\n for (let action of actions) {\r\n let actionButton = actionsTd.addChild(action.href ? 'a.button' : 'button', {\r\n title: action.name\r\n });\r\n if (action.href) {\r\n actionButton.href = action.href;\r\n }\r\n if (action.command) {\r\n actionButton.onclick = action.command;\r\n }\r\n if (action.icon) {\r\n actionButton.addChild('span', {classList: [action.icon]});\r\n actionButton.append(action.name);\r\n } else {\r\n actionButton.textContent = action.name;\r\n }\r\n }\r\n\r\n\r\n tr.dataset.row = data.id;\r\n // tr.oncontextmenu = this.contextMenu.bind(this, tr);\r\n // tr.onclick = this.trOnClick.bind(this, data);\r\n // tr.ondblclick = this.trOnDblClick.bind(this, data, tr);\r\n // tr.onkeydown = this.trOnKeyDown.bind(this, data, tr);\r\n // tr.ondragstart = this.trOnDragStart.bind(this, data, tr);\r\n }\r\n}\r\n\r\ncustomElements.define('list-view', ListView);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/listView.js?");
150
+
151
+ /***/ }),
152
+
153
+ /***/ "./src/objectsList.js":
154
+ /*!****************************!*\
155
+ !*** ./src/objectsList.js ***!
156
+ \****************************/
157
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
158
+
159
+ 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 _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n\r\n\r\n\r\n\r\n//import {ContextMenu} from \"../contextMenu\";\r\nclass ContextMenu {}//todo\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_4__.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_5__.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 }\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 = this.addChild('.foot');\r\n let menuButton = this.foot.addChild('button.menuButton span.icon-settings');\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.searchForm = this.foot.addChild('form', {className: 'search'});\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = this.searchForm.addChild('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 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 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_6__.ConfigPopup(this)\r\n this.append(popup)\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?");
160
+
161
+ /***/ }),
162
+
163
+ /***/ "./src/paginationButtons.js":
164
+ /*!**********************************!*\
165
+ !*** ./src/paginationButtons.js ***!
166
+ \**********************************/
167
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
168
+
169
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PaginationButtons: () => (/* binding */ PaginationButtons)\n/* harmony export */ });\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 this.children.removeAll();\r\n for (let pageNumber of pagination) {\r\n if (pageNumber == null) {\r\n this.addChild('span', {text: '...'});\r\n } else {\r\n let pageButton = this.addChild('button', {\r\n text: pageNumber + 1,\r\n className: pageNumber == this.currentPage ? 'active' : ''\r\n });\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);\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/paginationButtons.js?");
170
+
171
+ /***/ }),
172
+
173
+ /***/ "./src/tableView.js":
174
+ /*!**************************!*\
175
+ !*** ./src/tableView.js ***!
176
+ \**************************/
177
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
178
+
179
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TableView: () => (/* binding */ TableView)\n/* harmony export */ });\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n//import {ContextMenu} from \"../contextMenu\";\r\nclass ContextMenu {}//todo\r\n\r\n\r\n\r\nclass TableView extends _abstractView_js__WEBPACK_IMPORTED_MODULE_0__.AbstractView {\r\n constructor(objectsList) {\r\n super();\r\n this.objectsList = objectsList;\r\n this.init();\r\n window.dbgTable = this;\r\n }\r\n\r\n init() {\r\n this.head = create('.head');\r\n this.append(this.head);\r\n this.refreshHeader();\r\n this.body = this.addChild('.bodyContainer').addChild('.body');\r\n this.setColumnsWidths();\r\n addEventListener('resize', this.setColumnsWidths.bind(this))\r\n addEventListener('copy', this.onCopy.bind(this));\r\n this.addEventListener('scroll', this.onScroll.bind(this));\r\n }\r\n\r\n refreshHeader() {\r\n while (this.head.firstChild) this.head.firstChild.remove();\r\n\r\n this.head.addChild('.column.icon')\r\n for (let column of this.objectsList.visibleColumns) {\r\n let node = this.head.addChild('.column')\r\n node.addChild('span.name', {text: column.name});\r\n if (column.sortName) {\r\n node.classList.add('ableToSort');\r\n node.dataset.sortName = column.sortName\r\n node.onclick = () => {\r\n let sortName = column.sortName || x.dataset.value;\r\n if (this.objectsList.sort && this.objectsList.sort.col === column.sortName) {\r\n this.objectsList.sort.desc = !this.objectsList.sort.desc;\r\n } else {\r\n this.objectsList.sort = {col: column.sortName, desc: false};\r\n }\r\n if (!this.objectsList.infiniteScrollEnabled) {\r\n this.objectsList.start = 0;\r\n }\r\n this.objectsList.refresh();\r\n }\r\n }\r\n }\r\n this.head.addChild('.column.actions')\r\n }\r\n\r\n loadData(data, start, limit, infiniteScrollEnabled) {\r\n this.refreshSortIndicators();\r\n super.loadData(data, start, limit, infiniteScrollEnabled)\r\n this.setColumnsWidths();\r\n }\r\n\r\n get rowHeight() {\r\n return parseFloat(window.getComputedStyle(this).getPropertyValue('--rowHeight') ?? 31);\r\n }\r\n\r\n generateRow(data) {\r\n let tr = this.body.querySelector(`.tr[data-row=\"${data.id}\"]`);\r\n if (!tr) {\r\n tr = document.create('.tr');\r\n tr.draggable = true;\r\n }\r\n tr.classList.toggle('selected', this.objectsList.selected.has(data.id))\r\n this.fillRowContent(tr, data);\r\n return tr;\r\n }\r\n\r\n fillRowContent(tr, data) {\r\n tr.lastData = data;\r\n tr.children.removeAll();\r\n tr.addChild('.td.icon', {className: this.objectsList.icon});\r\n for (let column of this.objectsList.visibleColumns) {\r\n let td = tr.addChild('.td');\r\n if (this.multiEdit && column.dataName) {\r\n tr.dataset.id = data.id;\r\n td.addChild('input', {\r\n data: {name: column.dataName},\r\n value: data[column.dataName],\r\n onclick: e => e.stopPropagation(),\r\n onchange: () => this.multiEditChanged(tr)\r\n });\r\n } else {\r\n td.append(column.content?.call(column, data) || data[column.dataName] || '');\r\n }\r\n }\r\n let actionsTd = tr.addChild('.td.actions');\r\n let actions = this.objectsList.generateActions([data], 'row');\r\n if (this.multiEdit && data.__isMultirowEdited) {\r\n actions = [\r\n {\r\n name: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_1__.t)(\"objectList.saveRow\"),\r\n icon: 'icon-save',\r\n command: () => {\r\n this.multiEditChanged(tr, true)\r\n }\r\n }\r\n ]\r\n }\r\n for (let action of actions) {\r\n let actionButton = actionsTd.addChild(action.href ? 'a.button' : 'button', {\r\n title: action.name\r\n });\r\n actionButton.classList.add('action-' + (action.action ?? 'view'));\r\n\r\n if (action.href) {\r\n actionButton.href = action.href;\r\n }\r\n if (action.command) {\r\n actionButton.onclick = action.command;\r\n }\r\n if (action.icon) {\r\n actionButton.addChild('span', {classList: [action.icon]});\r\n } else {\r\n actionButton.textContent = action.name;\r\n }\r\n }\r\n\r\n\r\n tr.dataset.row = data.id;\r\n tr.oncontextmenu = this.contextMenu.bind(this, tr);\r\n tr.onclick = this.trOnClick.bind(this, data);\r\n tr.ondblclick = this.trOnDblClick.bind(this, data, tr);\r\n tr.onkeydown = this.trOnKeyDown.bind(this, data, tr);\r\n tr.ondragstart = this.trOnDragStart.bind(this, data, tr);\r\n }\r\n\r\n setColumnsWidths() {\r\n const widths = this.calculateColumnsWidths();\r\n for (let tr of this.body.children) {\r\n for (let i = 0; i < widths.length; i++) {\r\n tr.children[i].style.width = widths[i] + 'px';\r\n }\r\n }\r\n let sum = 0;\r\n for (let i = 0; i < widths.length; i++) {\r\n let node = this.head.children[i];\r\n if (node) {\r\n if (i + 1 < widths.length)\r\n node.style.width = widths[i] + 1 + 'px';\r\n else\r\n node.style.width = widths[i] + 'px';\r\n node.style.left = sum + 'px';\r\n }\r\n sum += widths[i];\r\n }\r\n }\r\n\r\n calculateColumnsWidths() {\r\n let needed = [{base: 30, grow: 0}];\r\n\r\n for (let column of this.objectsList.visibleColumns) {\r\n needed.push({base: column.width || 10, grow: typeof (column.widthGrow) == \"number\" ? column.widthGrow : 1});\r\n }\r\n let actionWidth = Math.ceil(Array.from(this.querySelectorAll('.td.actions')).map(x => {\r\n if (x.lastElementChild)\r\n return x.lastElementChild.getBoundingClientRect().right - x.getBoundingClientRect().left + parseFloat(getComputedStyle(x).paddingRight);\r\n else\r\n return 0;\r\n }).max());\r\n needed.push({base: actionWidth, grow: 0});\r\n let availableToGrow = this.clientWidth - needed.sum(x => x.base);\r\n let sumGrow = needed.sum(x => x.grow);\r\n if (availableToGrow > 0 && sumGrow > 0) {\r\n return needed.map(x => x.base + x.grow / sumGrow * availableToGrow);\r\n } else {\r\n return needed.map(x => x.base);\r\n }\r\n }\r\n\r\n refreshSortIndicators() {\r\n this.head.querySelectorAll('[data-order]').forEach(x => delete x.dataset.order);\r\n if (this.objectsList.sort)\r\n this.head.querySelectorAll(`[data-sort-name=\"${this.objectsList.sort.col}\"]`).forEach(x => x.dataset.order = this.objectsList.sort.desc ? 'desc' : 'asc');\r\n }\r\n\r\n contextMenu(tr, event) {\r\n event.stopPropagation();\r\n if (!this.objectsList.selected.has(tr.dataset.row)) {\r\n this.objectsList.selected.clear();\r\n this.objectsList.selected.add(tr.dataset.row)\r\n this.objectsList.selectedMain = tr.dataset.row;\r\n this.refreshSelectedClasses();\r\n }\r\n const rows = this.objectsList.getSelectedData();\r\n let actions = this.objectsList.generateActions(rows, 'contextMenu');\r\n let elements = actions.map(action => ({\r\n text: action.name,\r\n icon: action.icon,\r\n class: action.action ? 'action-' + action.action : '',\r\n onclick: action.command || (() => this.objectsList.gotoUrl(action.href))\r\n }));\r\n elements.push({\r\n text: 'copy',\r\n icon: 'icon-copy',\r\n onclick: () => {\r\n this.forceCopy(rows);\r\n }\r\n })\r\n ContextMenu.openContextMenu(event, elements);\r\n }\r\n\r\n refreshSelectedClasses() {\r\n for (const tr of this.body.children) {\r\n tr.classList.toggle('selected', this.objectsList.selected.has(tr.dataset.row));\r\n tr.classList.toggle('selectedMain', this.objectsList.selectedMain == tr.dataset.row);\r\n if (this.objectsList.selectedMain == tr.dataset.row) {\r\n tr.tabIndex = 1;\r\n tr.focus();\r\n getSelection().selectAllChildren(tr)\r\n } else {\r\n tr.tabIndex = -1;\r\n }\r\n }\r\n }\r\n\r\n\r\n trOnClick(row, e) {\r\n const rowsIds = this.objectsList.currentRows.map(x => x.id);\r\n console.log('click')\r\n if (!e.ctrlKey) {\r\n this.objectsList.selected.clear();\r\n }\r\n\r\n if (e.shiftKey) {\r\n const mainIndex = rowsIds.indexOf(this.objectsList.selectedMain);\r\n const clickedIndex = rowsIds.indexOf(row.id);\r\n if (clickedIndex >= 0 && mainIndex >= 0)\r\n rowsIds.slice(Math.min(mainIndex, clickedIndex), Math.max(mainIndex, clickedIndex) + 1).forEach(x => this.objectsList.selected.add(x));\r\n } else {\r\n if (this.objectsList.selected.has(row.id))\r\n this.objectsList.selected.delete(row.id);\r\n else\r\n this.objectsList.selected.add(row.id);\r\n\r\n this.objectsList.selectedMain = row.id;\r\n }\r\n\r\n this.refreshSelectedClasses();\r\n }\r\n\r\n trOnDblClick(row, tr, e) {\r\n if (!this.objectsList.selected.has(tr.dataset.row)) {\r\n this.objectsList.selected.clear();\r\n this.objectsList.selected.add(tr.dataset.row)\r\n this.objectsList.selectedMain = tr.dataset.row;\r\n this.refreshSelectedClasses();\r\n }\r\n let action = this.objectsList.generateActions(this.objectsList.getSelectedData(), 'dblClick').find(x => x.main);\r\n if (action) {\r\n if (action.command) {\r\n action.command();\r\n } else if (action.href) {\r\n this.objectsList.gotoUrl(action.href)\r\n }\r\n }\r\n }\r\n\r\n selectRange(start, end) {\r\n const rowsIds = this.objectsList.currentRows.map(x => x.id);\r\n let startIndex = rowsIds.indexOf(start);\r\n let endIndex = rowsIds.indexOf(end);\r\n if (endIndex < startIndex) {\r\n let tmp = startIndex;\r\n startIndex = endIndex;\r\n endIndex = tmp;\r\n }\r\n for (let i = startIndex; i <= endIndex; i++) {\r\n this.objectsList.selected.add(rowsIds[i]);\r\n }\r\n }\r\n\r\n trOnKeyDown(row, tr, e) {\r\n console.log('trOnKeyDown')\r\n if (e.key === 'Enter') {\r\n let action = this.objectsList.generateActions(this.objectsList.getSelectedData(), 'enter').find(x => x.main);\r\n if (action) {\r\n if (action.command) {\r\n action.command();\r\n } else if (action.href) {\r\n this.objectsList.gotoUrl(action.href)\r\n }\r\n }\r\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\r\n const rowsIds = this.objectsList.currentRows.map(x => x.id);\r\n let index = rowsIds.indexOf(this.objectsList.selectedMain);\r\n if (e.key === 'ArrowDown') {\r\n if (index < rowsIds.length) index++;\r\n else index = rowsIds.length - 1;\r\n } else {\r\n if (index > 0) index--;\r\n }\r\n const id = rowsIds[index];\r\n if (!e.ctrlKey) {\r\n this.objectsList.selected.clear();\r\n }\r\n if (e.shiftKey) {\r\n if (!this.objectsList.selectedShiftStart) {\r\n this.objectsList.selectedShiftStart = this.objectsList.selectedMain;\r\n }\r\n this.selectRange(this.objectsList.selectedShiftStart, id)\r\n } else {\r\n this.objectsList.selectedShiftStart = null;\r\n if (!e.ctrlKey) {\r\n this.objectsList.selected.add(id);\r\n }\r\n }\r\n this.objectsList.selectedMain = id;\r\n this.refreshSelectedClasses();\r\n e.preventDefault();\r\n } else if (e.key === ' ') {\r\n if (this.objectsList.selected.has(this.objectsList.selectedMain))\r\n this.objectsList.selected.delete(this.objectsList.selectedMain);\r\n else\r\n this.objectsList.selected.add(this.objectsList.selectedMain);\r\n\r\n this.refreshSelectedClasses();\r\n e.preventDefault();\r\n } else if (e.key === 'a') {\r\n if (e.ctrlKey)\r\n this.objectsList.selected.selectAll();\r\n\r\n this.refreshSelectedClasses();\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n onCopy(e) {\r\n if (this.copyForced) {\r\n this.fillDataTransfer(e.clipboardData, this.copyForced);\r\n e.preventDefault();\r\n } else if (document.querySelector(':focus')?.findParent(x => x === this)) {\r\n this.fillDataTransfer(e.clipboardData, this.objectsList.selected);\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n trOnDragStart(row, oryginalTr, e) {\r\n if (!this.objectsList.selected.has(row.id)) {\r\n this.objectsList.selected.clear()\r\n this.objectsList.selected.add(row.id)\r\n this.refreshSelectedClasses();\r\n }\r\n this.fillDataTransfer(e.dataTransfer, this.objectsList.selected);\r\n }\r\n\r\n fillDataTransfer(dataTransfer, ids) {\r\n const trs = Array.from(this.body.children).filter(tr => ids.has(tr.dataset.row));\r\n let action = this.objectsList.generateActions(this.objectsList.getSelectedData(), 'dataTransfer').find(x => x.main);\r\n if (action && action.href) {\r\n dataTransfer.setData('text/uri-list', new URL(action.href, document.baseURI));\r\n }\r\n if (action && action.hrefArray) {\r\n dataTransfer.setData('text/uri-list', action.hrefArray.map(x => new URL(x, document.baseURI)).map(x => x.toString()).join(\"\\r\\n#\\r\\n\"));\r\n }\r\n dataTransfer.setData('text/html', this.generateTableHtml(trs));\r\n dataTransfer.setData('text/plain', this.generateTableTextPlain(trs));\r\n\r\n }\r\n\r\n generateTableHtml(trs) {\r\n const thead = '<thead><tr>' + Array.from(this.head.querySelectorAll('.column')).map(x => '<th>' + x.innerHTML + '</th>').join('') + '</tr></thead>';\r\n const tbody = '<tbody>' + trs.map(tr => {\r\n return '<tr>' + Array.from(tr.children).slice(1, -1).map(td => {\r\n return '<td>' + td.innerHTML + '</td>';\r\n }).join('') + '</tr>';\r\n }).join('') + '</tbody>'\r\n return '<table>' + thead + tbody + '</table>';\r\n }\r\n\r\n generateTableTextPlain(trs) {\r\n const head = Array.from(this.head.querySelectorAll('.column')).map(x => x.textContent.replace(/\\r\\n/gm, ' ')).join(\"\\t\")\r\n const body = trs.map(tr => Array.from(tr.children).slice(1).map(x => x.textContent.replace(/\\r\\n/gm, ' ')).join(\"\\t\")).join(\"\\r\\n\")\r\n return head + \"\\r\\n\" + body;\r\n }\r\n\r\n calcMaxVisibleItems(height) {\r\n return Math.floor((height - this.head.clientHeight) / this.rowHeight);\r\n }\r\n\r\n forceCopy(rows) {\r\n this.copyForced = new Set(rows.map(x => x.id));\r\n document.execCommand(\"copy\");\r\n setTimeout(() => this.copyForced = null, 100);\r\n }\r\n\r\n startMultiEdit() {\r\n this.multiEdit = true;\r\n }\r\n\r\n multiEditChanged(tr, save = false) {\r\n let data = [...tr.querySelectorAll('[data-name]')].map(x => [x.dataset.name, x.value]);\r\n let dataObj = Object.fromEntries(data);\r\n this.objectsList.multiEditChanged(tr.dataset.id, dataObj, save);\r\n this.fillRowContent(tr, {...tr.lastData, ...dataObj, __isMultirowEdited: true});\r\n this.setColumnsWidths();\r\n }\r\n}\r\n\r\ncustomElements.define('table-view', TableView);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/tableView.js?");
180
+
181
+ /***/ }),
182
+
183
+ /***/ "./src/utils/concurencyLimiter.js":
184
+ /*!****************************************!*\
185
+ !*** ./src/utils/concurencyLimiter.js ***!
186
+ \****************************************/
187
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
188
+
189
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ConcurencyLimiter: () => (/* binding */ ConcurencyLimiter)\n/* harmony export */ });\nclass ConcurencyLimiter {\r\n constructor(limit = 3) {\r\n this.limit = 3;\r\n this.runningCount = 0;\r\n this.waiting = new Set();\r\n }\r\n\r\n async run(fun) {\r\n if (this.runningCount < this.limit) {\r\n this.runningCount++;\r\n try {\r\n return await fun()\r\n } finally {\r\n this.runningCount--;\r\n this.tryRunWaiting()\r\n }\r\n } else {\r\n return await new Promise(r => {\r\n const waitingFunc = async () => {\r\n if (this.runningCount < this.limit) {\r\n this.runningCount++;\r\n this.waiting.delete(waitingFunc);\r\n try {\r\n const response = await fun();\r\n r(response);\r\n } finally {\r\n this.runningCount--;\r\n this.tryRunWaiting()\r\n }\r\n }\r\n }\r\n this.waiting.add(waitingFunc);\r\n })\r\n }\r\n }\r\n\r\n tryRunWaiting() {\r\n while (this.runningCount < this.limit && this.waiting.size > 0) {\r\n this.waiting.values().next().value();\r\n }\r\n }\r\n}\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/utils/concurencyLimiter.js?");
190
+
191
+ /***/ })
192
+
193
+ /******/ });
194
+ /************************************************************************/
195
+ /******/ // The module cache
196
+ /******/ var __webpack_module_cache__ = {};
197
+ /******/
198
+ /******/ // The require function
199
+ /******/ function __webpack_require__(moduleId) {
200
+ /******/ // Check if module is in cache
201
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
202
+ /******/ if (cachedModule !== undefined) {
203
+ /******/ return cachedModule.exports;
204
+ /******/ }
205
+ /******/ // Create a new module (and put it into the cache)
206
+ /******/ var module = __webpack_module_cache__[moduleId] = {
207
+ /******/ // no module.id needed
208
+ /******/ // no module.loaded needed
209
+ /******/ exports: {}
210
+ /******/ };
211
+ /******/
212
+ /******/ // Execute the module function
213
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
214
+ /******/
215
+ /******/ // Return the exports of the module
216
+ /******/ return module.exports;
217
+ /******/ }
218
+ /******/
219
+ /************************************************************************/
220
+ /******/ /* webpack/runtime/define property getters */
221
+ /******/ (() => {
222
+ /******/ // define getter functions for harmony exports
223
+ /******/ __webpack_require__.d = (exports, definition) => {
224
+ /******/ for(var key in definition) {
225
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
226
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
227
+ /******/ }
228
+ /******/ }
229
+ /******/ };
230
+ /******/ })();
231
+ /******/
232
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
233
+ /******/ (() => {
234
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
235
+ /******/ })();
236
+ /******/
237
+ /******/ /* webpack/runtime/make namespace object */
238
+ /******/ (() => {
239
+ /******/ // define __esModule on exports
240
+ /******/ __webpack_require__.r = (exports) => {
241
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
242
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
243
+ /******/ }
244
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
245
+ /******/ };
246
+ /******/ })();
247
+ /******/
248
+ /************************************************************************/
249
+ /******/
250
+ /******/ // startup
251
+ /******/ // Load entry module and return exports
252
+ /******/ // This entry module can't be inlined because the eval devtool is used.
253
+ /******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
254
+ /******/
255
+ /******/ })()
256
+ ;
package/package.json CHANGED
@@ -1,7 +1,28 @@
1
1
  {
2
- "name": "@green-code-studio/objects-list",
3
- "version": "0.1.0",
4
- "main": "src/index.js",
5
- "author": "Mateusz Krawczyk",
6
- "license": "MIT"
2
+ "name": "@green-code-studio/objects-list",
3
+ "version": "0.1.2",
4
+ "main": "src/index.js",
5
+ "author": "Mateusz Krawczyk",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "scripts": {
9
+ "startDemo": "webpack serve --config webpack.config.demo.js --mode development",
10
+ "buildDemo": "webpack --config webpack.config.demo.js --mode development",
11
+ "build": "webpack --config webpack.config.js --mode development"
12
+ },
13
+ "dependencies": {
14
+ "fast-creator": "^1.6.0"
15
+ },
16
+ "devDependencies": {
17
+ "@green-code-studio/internationalization": "^1.0.4",
18
+ "copy-webpack-plugin": "^12.0.2",
19
+ "css-loader": "^7.1.2",
20
+ "mpts-loader": "^1.1.0",
21
+ "sass": "^1.77.5",
22
+ "sass-loader": "^14.2.1",
23
+ "style-loader": "^4.0.0",
24
+ "webpack": "^5.92.0",
25
+ "webpack-cli": "^5.1.4",
26
+ "webpack-dev-server": "^5.0.4"
27
+ }
7
28
  }
@@ -1,5 +1,5 @@
1
1
 
2
- import {t} from '../../i18n.xml';
2
+ import {t} from './i18n.xml';
3
3
  export class ColumnFilter extends HTMLElement {
4
4
  constructor(props) {
5
5
  super(props);
@@ -1,8 +1,8 @@
1
1
  import template from './ConfigPopup.mpts';
2
- import {t} from '../../i18n.xml';
3
- import {TableView} from "./tableView";
4
- import {ListView} from "./listView";
5
- import {ColumnFilter} from "./ColumnFilter";
2
+ import {t} from './i18n.xml';
3
+ import {TableView} from "./tableView.js";
4
+ import {ListView} from "./listView.js";
5
+ import {ColumnFilter} from "./ColumnFilter.js";
6
6
 
7
7
  export class ConfigPopup extends HTMLElement {
8
8
  constructor(objectsList) {
package/src/i18n.xml ADDED
@@ -0,0 +1,83 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <root>
3
+ <node name="objectList">
4
+ <node name="search">
5
+ <value lang="pl">Szukaj</value>
6
+ <value lang="en">Search</value>
7
+ </node>
8
+ <node name="paginationMode">
9
+ <value lang="pl">Tryb paginacji</value>
10
+ <value lang="en">Pagination mode</value>
11
+ </node>
12
+ <node name="scrollMode">
13
+ <value lang="pl">Tryb scrollowania</value>
14
+ <value lang="en">Scroll mode</value>
15
+ </node>
16
+ <node name="tableView">
17
+ <value lang="pl">Widok tabeli</value>
18
+ <value lang="en">Table view</value>
19
+ </node>
20
+ <node name="listView">
21
+ <value lang="pl">Widok listy</value>
22
+ <value lang="en">List view</value>
23
+ </node>
24
+ <node name="startMultiEdit">
25
+ <value lang="pl">Rozpocznij edycję wielu</value>
26
+ <value lang="en">Start multi-edit</value>
27
+ </node>
28
+ <node name="saveRow">
29
+ <value lang="pl">Zapisz wiersz</value>
30
+ <value lang="en">Save a row</value>
31
+ </node>
32
+ <node name="mode">
33
+ <value lang="pl">Tryb</value>
34
+ <value lang="en">Mode</value>
35
+ </node>
36
+ <node name="view">
37
+ <value lang="pl">Widok</value>
38
+ <value lang="en">View</value>
39
+ </node>
40
+ <node name="columnEnabled">
41
+ <value lang="pl">Kolumna widoczna</value>
42
+ <value lang="en">Column enabled</value>
43
+ </node>
44
+ <node name="columnName">
45
+ <value lang="pl">Nazwa kolumny</value>
46
+ <value lang="en">Column name</value>
47
+ </node>
48
+ <node name="columnFilter">
49
+ <value lang="pl">Filtr</value>
50
+ <value lang="en">Filter</value>
51
+ </node>
52
+ </node>
53
+ <node name="filter">
54
+ <node name="none">
55
+ <value lang="pl">Brak</value>
56
+ <value lang="en">None</value>
57
+ </node>
58
+ <node name="equals">
59
+ <value lang="pl">Równa się</value>
60
+ <value lang="en">Equals</value>
61
+ </node>
62
+ <node name="lessThan">
63
+ <value lang="pl">Mniejsze niż</value>
64
+ <value lang="en">Less than</value>
65
+ </node>
66
+ <node name="greaterThan">
67
+ <value lang="pl">Większe niż</value>
68
+ <value lang="en">Greater than</value>
69
+ </node>
70
+ <node name="contains">
71
+ <value lang="pl">Zawiera</value>
72
+ <value lang="en">Contains</value>
73
+ </node>
74
+ <node name="oneOf">
75
+ <value lang="pl">Jedno z</value>
76
+ <value lang="en">One of</value>
77
+ </node>
78
+ <node name="empty">
79
+ <value lang="pl">Puste</value>
80
+ <value lang="en">Empty</value>
81
+ </node>
82
+ </node>
83
+ </root>
package/src/index.js CHANGED
@@ -1,2 +1,7 @@
1
- export {objectsList} from './objectsList'
1
+ export {ObjectsList} from './objectsList.js'
2
2
 
3
+ export {AbstractView} from './abstractView.js'
4
+ export {ColumnFilter} from './ColumnFilter.js'
5
+ export {ConfigPopup} from './ConfigPopup.js'
6
+ export {TableView} from './tableView.js'
7
+ export {ListView} from './listView.js'
package/src/listView.js CHANGED
@@ -1,6 +1,4 @@
1
- import {ContextMenu} from "../contextMenu";
2
- import {pageManager} from "../pageManager";
3
- import {AbstractView} from "./abstractView";
1
+ import {AbstractView} from "./abstractView.js";
4
2
 
5
3
  export class ListView extends AbstractView {
6
4
  constructor(objectsList) {
@@ -1,11 +1,12 @@
1
- import {TableView} from "./tableView";
2
- import {ListView} from "./listView";
3
- import {t} from "../../i18n.xml";
4
- import {PaginationButtons} from "./paginationButtons";
5
- import {ContextMenu} from "../contextMenu";
6
- import {ConcurencyLimiter} from "../utils/concurencyLimiter";
7
- import {IdsSet} from "./idsSet";
8
- import {ConfigPopup} from "./ConfigPopup";
1
+ import {TableView} from "./tableView.js";
2
+ import {ListView} from "./listView.js";
3
+ import {t} from "./i18n.xml";
4
+ import {PaginationButtons} from "./paginationButtons.js";
5
+ //import {ContextMenu} from "../contextMenu";
6
+ class ContextMenu {}//todo
7
+ import {ConcurencyLimiter} from "./utils/concurencyLimiter.js";
8
+ import {IdsSet} from "./idsSet.js";
9
+ import {ConfigPopup} from "./ConfigPopup.js";
9
10
 
10
11
  export class ObjectsList extends HTMLElement {
11
12
  constructor(datasource) {
@@ -197,6 +198,9 @@ export class ObjectsList extends HTMLElement {
197
198
  this.append(popup)
198
199
  }
199
200
  }
201
+ gotoUrl(url) {
202
+ window.location.href = url;
203
+ }
200
204
  }
201
205
 
202
206
  customElements.define('data-view', ObjectsList);
package/src/tableView.js CHANGED
@@ -1,7 +1,7 @@
1
- import {ContextMenu} from "../contextMenu";
2
- import {pageManager} from "../pageManager";
3
- import {AbstractView} from "./abstractView";
4
- import {t} from "../../i18n.xml";
1
+ //import {ContextMenu} from "../contextMenu";
2
+ class ContextMenu {}//todo
3
+ import {AbstractView} from "./abstractView.js";
4
+ import {t} from "./i18n.xml";
5
5
 
6
6
  export class TableView extends AbstractView {
7
7
  constructor(objectsList) {
@@ -12,7 +12,8 @@ export class TableView extends AbstractView {
12
12
  }
13
13
 
14
14
  init() {
15
- this.head = this.addChild('.head');
15
+ this.head = create('.head');
16
+ this.append(this.head);
16
17
  this.refreshHeader();
17
18
  this.body = this.addChild('.bodyContainer').addChild('.body');
18
19
  this.setColumnsWidths();
@@ -191,7 +192,7 @@ export class TableView extends AbstractView {
191
192
  text: action.name,
192
193
  icon: action.icon,
193
194
  class: action.action ? 'action-' + action.action : '',
194
- onclick: action.command || (() => pageManager.goto(action.href))
195
+ onclick: action.command || (() => this.objectsList.gotoUrl(action.href))
195
196
  }));
196
197
  elements.push({
197
198
  text: 'copy',
@@ -254,7 +255,7 @@ export class TableView extends AbstractView {
254
255
  if (action.command) {
255
256
  action.command();
256
257
  } else if (action.href) {
257
- pageManager.goto(action.href)
258
+ this.objectsList.gotoUrl(action.href)
258
259
  }
259
260
  }
260
261
  }
@@ -281,7 +282,7 @@ export class TableView extends AbstractView {
281
282
  if (action.command) {
282
283
  action.command();
283
284
  } else if (action.href) {
284
- pageManager.goto(action.href)
285
+ this.objectsList.gotoUrl(action.href)
285
286
  }
286
287
  }
287
288
  } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
@@ -0,0 +1,42 @@
1
+ export class ConcurencyLimiter {
2
+ constructor(limit = 3) {
3
+ this.limit = 3;
4
+ this.runningCount = 0;
5
+ this.waiting = new Set();
6
+ }
7
+
8
+ async run(fun) {
9
+ if (this.runningCount < this.limit) {
10
+ this.runningCount++;
11
+ try {
12
+ return await fun()
13
+ } finally {
14
+ this.runningCount--;
15
+ this.tryRunWaiting()
16
+ }
17
+ } else {
18
+ return await new Promise(r => {
19
+ const waitingFunc = async () => {
20
+ if (this.runningCount < this.limit) {
21
+ this.runningCount++;
22
+ this.waiting.delete(waitingFunc);
23
+ try {
24
+ const response = await fun();
25
+ r(response);
26
+ } finally {
27
+ this.runningCount--;
28
+ this.tryRunWaiting()
29
+ }
30
+ }
31
+ }
32
+ this.waiting.add(waitingFunc);
33
+ })
34
+ }
35
+ }
36
+
37
+ tryRunWaiting() {
38
+ while (this.runningCount < this.limit && this.waiting.size > 0) {
39
+ this.waiting.values().next().value();
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,33 @@
1
+ import path from 'path';
2
+ import CopyPlugin from "copy-webpack-plugin";
3
+ import {dirname} from 'path';
4
+ import {fileURLToPath} from 'url';
5
+
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ export default {
8
+ entry: {
9
+ demo: './demo/demo.js'
10
+ },
11
+ output: {
12
+ path: path.resolve(__dirname, './demoDist'),
13
+ },
14
+ plugins: [
15
+ new CopyPlugin({
16
+ patterns: [
17
+ {from: 'demo/index.html', to: 'index.html'},
18
+ ],
19
+ }),
20
+ ],
21
+ module: {
22
+ rules: [
23
+ {
24
+ test: /i18n\.xml$/,
25
+ use: ["@green-code-studio/internationalization/i18nWebpackLoader"]
26
+ },
27
+ {
28
+ test: /\.mpts$/,
29
+ use: ["mpts-loader"]
30
+ }
31
+ ]
32
+ }
33
+ }
@@ -0,0 +1,26 @@
1
+ import path from 'path';
2
+ import CopyPlugin from "copy-webpack-plugin";
3
+ import {dirname} from 'path';
4
+ import {fileURLToPath} from 'url';
5
+
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ export default {
8
+ entry: {
9
+ index: './src/index.js'
10
+ },
11
+ output: {
12
+ path: path.resolve(__dirname, './dist'),
13
+ },
14
+ module: {
15
+ rules: [
16
+ {
17
+ test: /i18n\.xml$/,
18
+ use: ["@green-code-studio/internationalization/i18nWebpackLoader"]
19
+ },
20
+ {
21
+ test: /\.mpts$/,
22
+ use: ["mpts-loader"]
23
+ }
24
+ ]
25
+ }
26
+ }