@qtoggle/qui 0.0.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.
Files changed (202) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.json +492 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  5. package/.github/ISSUE_TEMPLATE/improvement_proposal.md +20 -0
  6. package/.github/workflows/main.yml +74 -0
  7. package/.pre-commit-config.yaml +8 -0
  8. package/LICENSE.txt +177 -0
  9. package/README.md +4 -0
  10. package/font/dejavusans-bold.woff +0 -0
  11. package/font/dejavusans-bolditalic.woff +0 -0
  12. package/font/dejavusans-italic.woff +0 -0
  13. package/font/dejavusans-regular.woff +0 -0
  14. package/img/qui-icons.svg +1937 -0
  15. package/js/base/base.js +47 -0
  16. package/js/base/condition-variable.js +92 -0
  17. package/js/base/errors.js +36 -0
  18. package/js/base/i18n.js +20 -0
  19. package/js/base/mixwith.js +135 -0
  20. package/js/base/require-js-compat.js +78 -0
  21. package/js/base/signal.js +91 -0
  22. package/js/base/singleton.js +66 -0
  23. package/js/base/timer.js +126 -0
  24. package/js/config.js +184 -0
  25. package/js/forms/common-fields/check-field.js +42 -0
  26. package/js/forms/common-fields/choice-buttons-field.js +30 -0
  27. package/js/forms/common-fields/color-combo-field.js +37 -0
  28. package/js/forms/common-fields/combo-field.js +108 -0
  29. package/js/forms/common-fields/common-fields.js +23 -0
  30. package/js/forms/common-fields/composite-field.js +132 -0
  31. package/js/forms/common-fields/custom-html-field.js +51 -0
  32. package/js/forms/common-fields/email-field.js +30 -0
  33. package/js/forms/common-fields/file-picker-field.js +46 -0
  34. package/js/forms/common-fields/jquery-ui-field.js +111 -0
  35. package/js/forms/common-fields/labels-field.js +69 -0
  36. package/js/forms/common-fields/numeric-field.js +39 -0
  37. package/js/forms/common-fields/password-field.js +28 -0
  38. package/js/forms/common-fields/phone-field.js +26 -0
  39. package/js/forms/common-fields/progress-disk-field.js +69 -0
  40. package/js/forms/common-fields/push-button-field.js +138 -0
  41. package/js/forms/common-fields/slider-field.js +51 -0
  42. package/js/forms/common-fields/text-area-field.js +34 -0
  43. package/js/forms/common-fields/text-field.js +89 -0
  44. package/js/forms/common-fields/up-down-field.js +85 -0
  45. package/js/forms/common-forms/common-forms.js +16 -0
  46. package/js/forms/common-forms/options-form.js +77 -0
  47. package/js/forms/common-forms/page-form.js +115 -0
  48. package/js/forms/form-button.js +202 -0
  49. package/js/forms/form-field.js +1183 -0
  50. package/js/forms/form.js +1181 -0
  51. package/js/forms/forms.js +68 -0
  52. package/js/global-glass.js +100 -0
  53. package/js/icons/default-stock.js +173 -0
  54. package/js/icons/icon.js +64 -0
  55. package/js/icons/icons.js +16 -0
  56. package/js/icons/multi-state-sprites-icon.js +362 -0
  57. package/js/icons/stock-icon.js +219 -0
  58. package/js/icons/stock.js +98 -0
  59. package/js/icons/stocks.js +57 -0
  60. package/js/index.js +232 -0
  61. package/js/lib/jquery.longpress.js +79 -0
  62. package/js/lib/jquery.module.js +4 -0
  63. package/js/lib/logger.module.js +4 -0
  64. package/js/lib/pep.module.js +4 -0
  65. package/js/lists/common-items/common-items.js +5 -0
  66. package/js/lists/common-items/icon-label-list-item.js +86 -0
  67. package/js/lists/common-lists/common-lists.js +5 -0
  68. package/js/lists/common-lists/page-list.js +53 -0
  69. package/js/lists/list-item.js +147 -0
  70. package/js/lists/list.js +636 -0
  71. package/js/lists/lists.js +26 -0
  72. package/js/main-ui/main-ui.js +64 -0
  73. package/js/main-ui/menu-bar.js +144 -0
  74. package/js/main-ui/options-bar.js +181 -0
  75. package/js/main-ui/status.js +185 -0
  76. package/js/main-ui/top-bar.js +59 -0
  77. package/js/messages/common-message-forms/common-message-forms.js +7 -0
  78. package/js/messages/common-message-forms/confirm-message-form.js +81 -0
  79. package/js/messages/common-message-forms/simple-message-form.js +67 -0
  80. package/js/messages/common-message-forms/sticky-simple-message-form.js +27 -0
  81. package/js/messages/message-form.js +107 -0
  82. package/js/messages/messages.js +21 -0
  83. package/js/messages/sticky-modal-page.js +98 -0
  84. package/js/messages/sticky-modal-progress-message.js +27 -0
  85. package/js/messages/toast.js +164 -0
  86. package/js/navigation.js +654 -0
  87. package/js/pages/breadcrumbs.js +124 -0
  88. package/js/pages/common-pages/common-pages.js +6 -0
  89. package/js/pages/common-pages/modal-progress-page.js +83 -0
  90. package/js/pages/common-pages/structured-page.js +46 -0
  91. package/js/pages/page.js +1018 -0
  92. package/js/pages/pages-context.js +154 -0
  93. package/js/pages/pages.js +252 -0
  94. package/js/pwa.js +337 -0
  95. package/js/sections/section.js +612 -0
  96. package/js/sections/sections.js +300 -0
  97. package/js/tables/common-cells/common-cells.js +7 -0
  98. package/js/tables/common-cells/icon-label-table-cell.js +68 -0
  99. package/js/tables/common-cells/push-button-table-cell.js +133 -0
  100. package/js/tables/common-cells/simple-table-cell.js +37 -0
  101. package/js/tables/common-tables/common-tables.js +5 -0
  102. package/js/tables/common-tables/page-table.js +55 -0
  103. package/js/tables/table-cell.js +198 -0
  104. package/js/tables/table-row.js +126 -0
  105. package/js/tables/table.js +492 -0
  106. package/js/tables/tables.js +36 -0
  107. package/js/theme.js +304 -0
  108. package/js/utils/ajax.js +126 -0
  109. package/js/utils/array.js +194 -0
  110. package/js/utils/colors.js +445 -0
  111. package/js/utils/cookies.js +65 -0
  112. package/js/utils/crypto.js +439 -0
  113. package/js/utils/css.js +234 -0
  114. package/js/utils/date.js +300 -0
  115. package/js/utils/files.js +27 -0
  116. package/js/utils/gestures.js +165 -0
  117. package/js/utils/html.js +76 -0
  118. package/js/utils/misc.js +81 -0
  119. package/js/utils/object.js +324 -0
  120. package/js/utils/promise.js +49 -0
  121. package/js/utils/string.js +192 -0
  122. package/js/utils/url.js +187 -0
  123. package/js/utils/utils.js +3 -0
  124. package/js/utils/visibility-manager.js +211 -0
  125. package/js/views/common-views/common-views.js +7 -0
  126. package/js/views/common-views/icon-label-view.js +210 -0
  127. package/js/views/common-views/progress-view.js +89 -0
  128. package/js/views/common-views/structured-view.js +368 -0
  129. package/js/views/view.js +467 -0
  130. package/js/views/views.js +3 -0
  131. package/js/widgets/base-widget.js +23 -0
  132. package/js/widgets/common-widgets/check-button.js +109 -0
  133. package/js/widgets/common-widgets/choice-buttons.js +322 -0
  134. package/js/widgets/common-widgets/color-combo.js +104 -0
  135. package/js/widgets/common-widgets/combo.js +645 -0
  136. package/js/widgets/common-widgets/common-widgets.js +17 -0
  137. package/js/widgets/common-widgets/email-input.js +7 -0
  138. package/js/widgets/common-widgets/file-picker.js +133 -0
  139. package/js/widgets/common-widgets/labels.js +132 -0
  140. package/js/widgets/common-widgets/numeric-input.js +49 -0
  141. package/js/widgets/common-widgets/password-input.js +91 -0
  142. package/js/widgets/common-widgets/phone-input.js +7 -0
  143. package/js/widgets/common-widgets/progress-disk.js +174 -0
  144. package/js/widgets/common-widgets/push-button.js +155 -0
  145. package/js/widgets/common-widgets/slider.js +455 -0
  146. package/js/widgets/common-widgets/text-area.js +52 -0
  147. package/js/widgets/common-widgets/text-input.js +174 -0
  148. package/js/widgets/common-widgets/up-down.js +351 -0
  149. package/js/widgets/widgets.js +57 -0
  150. package/js/window.js +557 -0
  151. package/jsdoc.conf.json +20 -0
  152. package/less/base.less +123 -0
  153. package/less/forms/common-fields.less +101 -0
  154. package/less/forms/common-forms.less +5 -0
  155. package/less/forms/form-button.less +21 -0
  156. package/less/forms/form-field.less +266 -0
  157. package/less/forms/form.less +131 -0
  158. package/less/global-glass.less +64 -0
  159. package/less/icon-label-view.less +82 -0
  160. package/less/icons.less +144 -0
  161. package/less/lists.less +105 -0
  162. package/less/main-ui.less +328 -0
  163. package/less/messages.less +189 -0
  164. package/less/no-effects.less +24 -0
  165. package/less/pages/breadcrumbs.less +98 -0
  166. package/less/pages/common-pages.less +36 -0
  167. package/less/pages/page.less +70 -0
  168. package/less/progress-view.less +51 -0
  169. package/less/stock-icons.less +43 -0
  170. package/less/structured-view.less +245 -0
  171. package/less/tables.less +84 -0
  172. package/less/theme-dark.less +133 -0
  173. package/less/theme-light.less +132 -0
  174. package/less/theme.less +419 -0
  175. package/less/visibility-manager.less +11 -0
  176. package/less/widgets/check-button.less +96 -0
  177. package/less/widgets/choice-buttons.less +160 -0
  178. package/less/widgets/color-combo.less +33 -0
  179. package/less/widgets/combo.less +230 -0
  180. package/less/widgets/common-buttons.less +120 -0
  181. package/less/widgets/common.less +24 -0
  182. package/less/widgets/input.less +258 -0
  183. package/less/widgets/labels.less +81 -0
  184. package/less/widgets/progress-disk.less +70 -0
  185. package/less/widgets/slider.less +199 -0
  186. package/less/widgets/updown.less +115 -0
  187. package/less/widgets/various.less +36 -0
  188. package/package.json +47 -0
  189. package/pyproject.toml +45 -0
  190. package/qui/__init__.py +110 -0
  191. package/qui/constants.py +1 -0
  192. package/qui/exceptions.py +2 -0
  193. package/qui/j2template.py +71 -0
  194. package/qui/settings.py +60 -0
  195. package/qui/templates/manifest.json +25 -0
  196. package/qui/templates/qui.html +126 -0
  197. package/qui/templates/service-worker.js +188 -0
  198. package/qui/web/__init__.py +0 -0
  199. package/qui/web/tornado.py +220 -0
  200. package/scripts/postinstall.sh +10 -0
  201. package/webpack/webpack-adjust-css-urls-loader.js +36 -0
  202. package/webpack/webpack-common.js +384 -0
@@ -0,0 +1,198 @@
1
+
2
+ import $ from '$qui/lib/jquery.module.js'
3
+
4
+ import {mix} from '$qui/base/mixwith.js'
5
+ import * as Tables from '$qui/tables/tables.js'
6
+ import VisibilityManager from '$qui/utils/visibility-manager.js'
7
+ import ViewMixin from '$qui/views/view.js'
8
+
9
+
10
+ /**
11
+ * A table cell.
12
+ * @alias qui.tables.TableCell
13
+ * @mixes qui.views.ViewMixin
14
+ */
15
+ class TableCell extends mix().with(ViewMixin) {
16
+
17
+ /**
18
+ * @constructs
19
+ * @param {*} [initialValue] an optional initial value for the cell
20
+ * @param {?String} [horizontalAlign] horizontal alignment; uses table settings by default; one of:
21
+ * * {@link qui.tables.TABLE_CELL_ALIGN_LEFT}
22
+ * * {@link qui.tables.TABLE_CELL_ALIGN_CENTER}
23
+ * * {@link qui.tables.TABLE_CELL_ALIGN_RIGHT}
24
+ * @param {?String} [verticalAlign] vertical alignment; uses table settings by default; one of:
25
+ * * {@link qui.tables.TABLE_CELL_ALIGN_TOP}
26
+ * * {@link qui.tables.TABLE_CELL_ALIGN_CENTER}
27
+ * * {@link qui.tables.TABLE_CELL_ALIGN_BOTTOM}
28
+ * @param {...*} args parent class parameters
29
+ */
30
+ constructor({
31
+ initialValue = null,
32
+ horizontalAlign = null,
33
+ verticalAlign = null,
34
+ ...args
35
+ } = {}) {
36
+
37
+ super(args)
38
+
39
+ this._value = initialValue
40
+ this._horizontalAlign = horizontalAlign
41
+ this._verticalAlign = verticalAlign
42
+
43
+ this._visibilityManager = null
44
+ this._row = null
45
+ }
46
+
47
+ makeHTML() {
48
+ let html = $('<div></div>', {class: 'qui-table-cell'})
49
+
50
+ /* Decide on horizontal alignment */
51
+ let horizontalAlign = this._horizontalAlign
52
+ if (!horizontalAlign) {
53
+ let index = this._row.getCellIndex(this)
54
+ if (index >= 0) {
55
+ let defaultHorizontalAlign = this._row.getTable().getHorizontalAlign()
56
+ if (defaultHorizontalAlign) {
57
+ horizontalAlign = defaultHorizontalAlign[index]
58
+ }
59
+ }
60
+ }
61
+ if (!horizontalAlign) {
62
+ horizontalAlign = Tables.TABLE_CELL_ALIGN_CENTER /* The very default */
63
+ }
64
+
65
+ /* Decide on vertical alignment */
66
+ let verticalAlign = this._verticalAlign
67
+ if (!verticalAlign) {
68
+ let index = this._row.getCellIndex(this)
69
+ if (index >= 0) {
70
+ let defaultVerticalAlign = this._row.getTable().getVerticalAlign()
71
+ if (defaultVerticalAlign) {
72
+ verticalAlign = defaultVerticalAlign[index]
73
+ }
74
+ }
75
+ }
76
+ if (!verticalAlign) {
77
+ verticalAlign = Tables.TABLE_CELL_ALIGN_CENTER /* The very default */
78
+ }
79
+
80
+ html.addClass(`horizontal-align-${horizontalAlign}`)
81
+ html.addClass(`vertical-align-${verticalAlign}`)
82
+ html.html(this.makeContent())
83
+
84
+ this._visibilityManager = new VisibilityManager({element: html})
85
+
86
+ return html
87
+ }
88
+
89
+ init() {
90
+ if (this._value != null) {
91
+ this.showValue(this._value)
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Implement this method to create the actual table cell content.
97
+ * @abstract
98
+ * @returns {jQuery}
99
+ */
100
+ makeContent() {
101
+ }
102
+
103
+
104
+ /* Visibility */
105
+
106
+ /**
107
+ * Show the cell.
108
+ */
109
+ show() {
110
+ this._visibilityManager.showElement()
111
+ }
112
+
113
+ /**
114
+ * Hide the cell.
115
+ */
116
+ hide() {
117
+ this._visibilityManager.hideElement()
118
+ }
119
+
120
+
121
+ /* Value */
122
+
123
+ /**
124
+ * Return the current value.
125
+ * @returns {*}
126
+ */
127
+ getValue() {
128
+ return this._value
129
+ }
130
+
131
+ /**
132
+ * Set the current value.
133
+ * @param {*} value
134
+ */
135
+ setValue(value) {
136
+ this._value = value
137
+ this.showValue(value)
138
+ }
139
+
140
+ /**
141
+ * Implement this method to display the value in the cell content.
142
+ * @abstract
143
+ * @param {*} value
144
+ */
145
+ showValue(value) {
146
+ }
147
+
148
+
149
+ /* Selection */
150
+
151
+ /**
152
+ * Tell if cell is selected or not.
153
+ */
154
+ isSelected() {
155
+ return this.getHTML().hasClass('selected')
156
+ }
157
+
158
+ /**
159
+ * Select or deselect cell.
160
+ * @param {Boolean} selected
161
+ */
162
+ setSelected(selected) {
163
+ this.getHTML().toggleClass('selected', selected)
164
+ }
165
+
166
+ /**
167
+ * Set select mode. This is internally called by owning {@link qui.tables.TableRow}.
168
+ * @param {String} selectMode one of:
169
+ * * {@link qui.lists.LIST_SELECT_MODE_DISABLED}
170
+ * * {@link qui.lists.LIST_SELECT_MODE_SINGLE} (default)
171
+ * * {@link qui.lists.LIST_SELECT_MODE_MULTIPLE}
172
+ */
173
+ setSelectMode(selectMode) {
174
+ }
175
+
176
+
177
+ /* Table row */
178
+
179
+ /**
180
+ * Return the owning row.
181
+ * @returns {qui.tables.TableRow}
182
+ */
183
+ getRow() {
184
+ return this._row
185
+ }
186
+
187
+ /**
188
+ * Set the owning row.
189
+ * @param {qui.tables.TableRow} row
190
+ */
191
+ setRow(row) {
192
+ this._row = row
193
+ }
194
+
195
+ }
196
+
197
+
198
+ export default TableCell
@@ -0,0 +1,126 @@
1
+
2
+ import $ from '$qui/lib/jquery.module.js'
3
+
4
+ import ListItem from '$qui/lists/list-item.js'
5
+ import * as Lists from '$qui/lists/lists.js'
6
+
7
+
8
+ /**
9
+ * A table row.
10
+ * @alias qui.tables.TableRow
11
+ * @extends qui.lists.ListItem
12
+ */
13
+ class TableRow extends ListItem {
14
+
15
+ /**
16
+ * @constructs
17
+ * @param {qui.tables.TableCell[]} cells table cells
18
+ * @param {Array} [initialValues] optional initial values
19
+ * @param {...*} args parent class parameters
20
+ */
21
+ constructor({cells, initialValues = null, ...args}) {
22
+ super(args)
23
+
24
+ this._cells = cells
25
+ this._initialValues = initialValues
26
+
27
+ this._cells.forEach(c => this.prepareCell(c))
28
+ }
29
+
30
+ init() {
31
+
32
+ if (this._initialValues != null) {
33
+ this.setValues(this._initialValues)
34
+ this._initialValues = null /* Don't waste memory */
35
+ }
36
+ }
37
+
38
+ initHTML(html) {
39
+ html.addClass('qui-table-row')
40
+ }
41
+
42
+ makeContent() {
43
+ return this._cells.reduce((a, c) => a.add(c.getHTML()), $())
44
+ }
45
+
46
+
47
+ /* Cells */
48
+
49
+ /**
50
+ * Return row cells.
51
+ * @returns {qui.tables.TableCell[]}
52
+ */
53
+ getCells() {
54
+ return this._cells.slice()
55
+ }
56
+
57
+ /**
58
+ * Prepare cell to be part of this row.
59
+ * @param {qui.tables.TableCell} cell
60
+ */
61
+ prepareCell(cell) {
62
+ cell.setRow(this)
63
+ }
64
+
65
+ /**
66
+ * Return the index of the given cell. If the field does not belong to this row, `-1` is returned.
67
+ * @param {qui.tables.TableCell} cell the cell
68
+ * @returns {Number}
69
+ */
70
+ getCellIndex(cell) {
71
+ return this._cells.indexOf(cell)
72
+ }
73
+
74
+
75
+ /* Values */
76
+
77
+ /**
78
+ * Return the current values of the cells.
79
+ * @returns {Array}
80
+ */
81
+ getValues() {
82
+ return this._cells.map(c => c.getValue())
83
+ }
84
+
85
+ /**
86
+ * Set row values. If more values than needed are supplied, extra values are ignored. If less values are supplied,
87
+ * extra cells are left unchanged.
88
+ * @param {Array} values
89
+ * @param {Number} [index] optional start index (defaults to `0`)
90
+ */
91
+ setValues(values, index = 0) {
92
+ let cells = this._cells.slice(index, index + values.length)
93
+ cells.forEach((c, i) => c.setValue(values[i]))
94
+ }
95
+
96
+
97
+ /* Selection */
98
+
99
+ setSelectMode(selectMode) {
100
+ /* Forward select mode to cells */
101
+ this._cells.forEach(c => c.setSelectMode(selectMode))
102
+
103
+ this.getHTML().toggleClass('qui-base-button', selectMode !== Lists.LIST_SELECT_MODE_DISABLED)
104
+ }
105
+
106
+ setSelected(selected) {
107
+ super.setSelected(selected)
108
+
109
+ this._cells.forEach(c => c.setSelected(selected))
110
+ }
111
+
112
+
113
+ /* Table */
114
+
115
+ /**
116
+ * Return the owning table.
117
+ * @returns {qui.tables.Table}
118
+ */
119
+ getTable() {
120
+ return /** @type qui.tables.Table */ this.getList()
121
+ }
122
+
123
+ }
124
+
125
+
126
+ export default TableRow